ZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3MTNjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC0wLDAgKzEsNjcwIEBACisjCisjIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggb2YgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUsCisjIHNlZSBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dC4KKyMKK2NvbmZpZyBNNjhLCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgTU1VCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgVUlEMTYKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KKwlib29sCisKK2NvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQorCWJvb2wKKwlkZWZhdWx0IHkKKworbWFpbm1lbnUgIkxpbnV4LzY4ayBLZXJuZWwgQ29uZmlndXJhdGlvbiIKKworc291cmNlICJpbml0L0tjb25maWciCisKK21lbnUgIlBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cCIKKworY29uZmlnIEVJU0EKKwlib29sCisJLS0taGVscC0tLQorCSAgVGhlIEV4dGVuZGVkIEluZHVzdHJ5IFN0YW5kYXJkIEFyY2hpdGVjdHVyZSAoRUlTQSkgYnVzIHdhcworCSAgZGV2ZWxvcGVkIGFzIGFuIG9wZW4gYWx0ZXJuYXRpdmUgdG8gdGhlIElCTSBNaWNyb0NoYW5uZWwgYnVzLgorCisJICBUaGUgRUlTQSBidXMgcHJvdmlkZWQgc29tZSBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIElCTSBNaWNyb0NoYW5uZWwKKwkgIGJ1cyB3aGlsZSBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY2FyZHMgbWFkZSBmb3IKKwkgIHRoZSBvbGRlciBJU0EgYnVzLiAgVGhlIEVJU0EgYnVzIHNhdyBsaW1pdGVkIHVzZSBiZXR3ZWVuIDE5ODggYW5kCisJICAxOTk1IHdoZW4gaXQgd2FzIG1hZGUgb2Jzb2xldGUgYnkgdGhlIFBDSSBidXMuCisKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYW4gRUlTQS1iYXNlZCBtYWNoaW5lLgorCisJICBPdGhlcndpc2UsIHNheSBOLgorCitjb25maWcgTUNBCisJYm9vbAorCWhlbHAKKwkgIE1pY3JvQ2hhbm5lbCBBcmNoaXRlY3R1cmUgaXMgZm91bmQgaW4gc29tZSBJQk0gUFMvMiBtYWNoaW5lcyBhbmQKKwkgIGxhcHRvcHMuICBJdCBpcyBhIGJ1cyBzeXN0ZW0gc2ltaWxhciB0byBQQ0kgb3IgSVNBLiBTZWUKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbWNhLnR4dD4gKGFuZCBlc3BlY2lhbGx5IHRoZSB3ZWIgcGFnZSBnaXZlbgorCSAgdGhlcmUpIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJ1aWxkIGFuIE1DQSBidXMga2VybmVsLgorCitjb25maWcgUENNQ0lBCisJdHJpc3RhdGUKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGF0dGFjaCBQQ01DSUEtIG9yIFBDLWNhcmRzIHRvIHlvdXIgTGludXgKKwkgIGNvbXB1dGVyLiAgVGhlc2UgYXJlIGNyZWRpdC1jYXJkIHNpemUgZGV2aWNlcyBzdWNoIGFzIG5ldHdvcmsgY2FyZHMsCisJICBtb2RlbXMgb3IgaGFyZCBkcml2ZXMgb2Z0ZW4gdXNlZCB3aXRoIGxhcHRvcHMgY29tcHV0ZXJzLiAgVGhlcmUgYXJlCisJICBhY3R1YWxseSB0d28gdmFyaWV0aWVzIG9mIHRoZXNlIGNhcmRzOiB0aGUgb2xkZXIgMTYgYml0IFBDTUNJQSBjYXJkcworCSAgYW5kIHRoZSBuZXdlciAzMiBiaXQgQ2FyZEJ1cyBjYXJkcy4gIElmIHlvdSB3YW50IHRvIHVzZSBDYXJkQnVzCisJICBjYXJkcywgeW91IG5lZWQgdG8gc2F5IFkgaGVyZSBhbmQgYWxzbyB0byAiQ2FyZEJ1cyBzdXBwb3J0IiBiZWxvdy4KKworCSAgVG8gdXNlIHlvdXIgUEMtY2FyZHMsIHlvdSB3aWxsIG5lZWQgc3VwcG9ydGluZyBzb2Z0d2FyZSBmcm9tIERhdmlkCisJICBIaW5kcycgcGNtY2lhLWNzIHBhY2thZ2UgKHNlZSB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXM+CisJICBmb3IgbG9jYXRpb24pLiAgUGxlYXNlIGFsc28gcmVhZCB0aGUgUENNQ0lBLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBtb2R1bGVzLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZXMgd2lsbCBiZSBjYWxsZWQgcGNtY2lhX2NvcmUgYW5kIGRzLgorCitjb25maWcgU1VOMworCWJvb2wgIlN1bjMgc3VwcG9ydCIKKwlzZWxlY3QgTTY4MDIwCisJc2VsZWN0IE1NVV9TVU4zIGlmIE1NVQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFN1biAzIHNlcmllcyBvZiB3b3Jrc3RhdGlvbnMKKwkgICgzLzUwLCAzLzYwLCAzLzF4eCwgMy8yeHggc3lzdGVtcykuIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlcXVpcmVzCisJICB0aGF0IGFsbCBvdGhlciBoYXJkd2FyZSB0eXBlcyBtdXN0IGJlIGRpc2FibGVkLCBhcyBTdW4gMyBrZXJuZWxzCisJICBhcmUgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG02OGsgdGFyZ2V0cyAoaW5jbHVkaW5nIFN1biAzeCEpLgorCisJICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb21waWxlIGEga2VybmVsIGV4Y2x1c2l2ZWx5IGZvciBhIFN1biAzLCBzYXkgTi4KKworY29uZmlnIEFNSUdBCisJYm9vbCAiQW1pZ2Egc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFtaWdhIHNlcmllcyBvZiBjb21wdXRlcnMuIElmCisJICB5b3UgcGxhbiB0byB1c2UgdGhpcyBrZXJuZWwgb24gYW4gQW1pZ2EsIHNheSBZIGhlcmUgYW5kIGJyb3dzZSB0aGUKKwkgIG1hdGVyaWFsIGF2YWlsYWJsZSBpbiA8ZmlsZTpEb2N1bWVudGF0aW9uL202OGs+OyBvdGhlcndpc2Ugc2F5IE4uCisKK2NvbmZpZyBBVEFSSQorCWJvb2wgIkF0YXJpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSA2ODAwMC1iYXNlZCBBdGFyaSBzZXJpZXMgb2YKKwkgIGNvbXB1dGVycyAoaW5jbHVkaW5nIHRoZSBUVCwgRmFsY29uIGFuZCBNZWR1c2EpLiBJZiB5b3UgcGxhbiB0byB1c2UKKwkgIHRoaXMga2VybmVsIG9uIGFuIEF0YXJpLCBzYXkgWSBoZXJlIGFuZCBicm93c2UgdGhlIG1hdGVyaWFsCisJICBhdmFpbGFibGUgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9tNjhrPjsgb3RoZXJ3aXNlIHNheSBOLgorCitjb25maWcgSEFERVMKKwlib29sICJIYWRlcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVRBUkkgJiYgQlJPS0VOCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSGFkZXMgQXRhcmkgY2xvbmUuIElmIHlvdSBwbGFuCisJICB0byB1c2UgdGhpcyBrZXJuZWwgb24gYSBIYWRlcywgc2F5IFkgaGVyZTsgb3RoZXJ3aXNlIHNheSBOLgorCitjb25maWcgUENJCisJYm9vbAorCWRlcGVuZHMgb24gSEFERVMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQorCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQorCSAgeW91ciBib3guIE90aGVyIGJ1cyBzeXN0ZW1zIGFyZSBJU0EsIEVJU0EsIE1pY3JvQ2hhbm5lbCAoTUNBKSBvcgorCSAgVkVTQS4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCisKKwkgIFRoZSBQQ0ktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCisJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LCBjb250YWlucyB2YWx1YWJsZQorCSAgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggUENJIGhhcmR3YXJlIGRvZXMgd29yayB1bmRlciBMaW51eCBhbmQgd2hpY2gKKwkgIGRvZXNuJ3QuCisKK2NvbmZpZyBNQUMKKwlib29sICJNYWNpbnRvc2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFwcGxlIE1hY2ludG9zaCBzZXJpZXMgb2YKKwkgIGNvbXB1dGVycyAoeWVzLCB0aGVyZSBpcyBleHBlcmltZW50YWwgc3VwcG9ydCBub3csIGF0IGxlYXN0IGZvciBwYXJ0CisJICBvZiB0aGUgc2VyaWVzKS4KKworCSAgU2F5IE4gdW5sZXNzIHlvdSdyZSB3aWxsaW5nIHRvIGNvZGUgdGhlIHJlbWFpbmluZyBuZWNlc3Nhcnkgc3VwcG9ydC4KKwkgIDspCisKK2NvbmZpZyBOVUJVUworCWJvb2wKKwlkZXBlbmRzIG9uIE1BQworCWRlZmF1bHQgeQorCitjb25maWcgTTY4S19MMl9DQUNIRQorCWJvb2wKKwlkZXBlbmRzIG9uIE1BQworCWRlZmF1bHQgeQorCitjb25maWcgQVBPTExPCisJYm9vbCAiQXBvbGxvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biBMaW51eCBvbiBhbiBNQzY4MHgwLWJhc2VkIEFwb2xsbworCSAgRG9tYWluIHdvcmtzdGF0aW9uIHN1Y2ggYXMgdGhlIEROMzUwMC4KKworY29uZmlnIFZNRQorCWJvb2wgIlZNRSAoTW90b3JvbGEgYW5kIEJWTSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBrZXJuZWwgZm9yIGEgNjgweDAgYmFzZWQgVk1FCisJICBib2FyZC4gIEJvYXJkcyBjdXJyZW50bHkgc3VwcG9ydGVkIGluY2x1ZGUgTW90b3JvbGEgYm9hcmRzIE1WTUUxNDcsCisJICBNVk1FMTYyLCBNVk1FMTY2LCBNVk1FMTY3LCBNVk1FMTcyLCBhbmQgTVZNRTE3Ny4gIEJWTUU0MDAwIGFuZAorCSAgQlZNRTYwMDAgYm9hcmRzIGZyb20gQlZNIEx0ZCBhcmUgYWxzbyBzdXBwb3J0ZWQuCisKK2NvbmZpZyBNVk1FMTQ3CisJYm9vbCAiTVZNRTE0NyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVk1FCisJaGVscAorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBlYXJseSBNb3Rvcm9sYSBWTUUgYm9hcmRzLiAgVGhpcyB3aWxsCisJICBidWlsZCBhIGtlcm5lbCB3aGljaCBjYW4gcnVuIG9uIE1WTUUxNDcgc2luZ2xlLWJvYXJkIGNvbXB1dGVycy4gIElmCisJICB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIHlvdSB3aWxsIGhhdmUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZQorCSAgZHJpdmVycyBmb3IgU0NTSSwgRXRoZXJuZXQgYW5kIHNlcmlhbCBwb3J0cyBsYXRlciBvbi4KKworY29uZmlnIE1WTUUxNngKKwlib29sICJNVk1FMTYyLCAxNjYgYW5kIDE2NyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVk1FCisJaGVscAorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNb3Rvcm9sYSBWTUUgYm9hcmRzLiAgVGhpcyB3aWxsIGJ1aWxkIGEKKwkgIGtlcm5lbCB3aGljaCBjYW4gcnVuIG9uIE1WTUUxNjIsIE1WTUUxNjYsIE1WTUUxNjcsIE1WTUUxNzIsIGFuZAorCSAgTVZNRTE3NyBib2FyZHMuICBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIHlvdSB3aWxsIGhhdmUgdG8gc2VsZWN0CisJICB0aGUgYXBwcm9wcmlhdGUgZHJpdmVycyBmb3IgU0NTSSwgRXRoZXJuZXQgYW5kIHNlcmlhbCBwb3J0cyBsYXRlcgorCSAgb24uCisKK2NvbmZpZyBCVk1FNjAwMAorCWJvb2wgIkJWTUU0MDAwIGFuZCBCVk1FNjAwMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVk1FCisJaGVscAorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBWTUUgYm9hcmRzIGZyb20gQlZNIEx0ZC4gIFRoaXMgd2lsbAorCSAgYnVpbGQgYSBrZXJuZWwgd2hpY2ggY2FuIHJ1biBvbiBCVk1FNDAwMCBhbmQgQlZNRTYwMDAgYm9hcmRzLiAgSWYKKwkgIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24geW91IHdpbGwgaGF2ZSB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlCisJICBkcml2ZXJzIGZvciBTQ1NJLCBFdGhlcm5ldCBhbmQgc2VyaWFsIHBvcnRzIGxhdGVyIG9uLgorCitjb25maWcgSFAzMDAKKwlib29sICJIUDkwMDAvMzAwIGFuZCBIUDkwMDAvNDAwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBIUDkwMDAvMzAwIGFuZCBIUDkwMDAvNDAwIHNlcmllcworCSAgb2Ygd29ya3N0YXRpb25zLiBTdXBwb3J0IGZvciB0aGVzZSBtYWNoaW5lcyBpcyBzdGlsbCBzb21ld2hhdAorCSAgZXhwZXJpbWVudGFsLiBJZiB5b3UgcGxhbiB0byB0cnkgdG8gdXNlIHRoZSBrZXJuZWwgb24gc3VjaCBhIG1hY2hpbmUKKwkgIHNheSBZIGhlcmUuCisJICBFdmVyeWJvZHkgZWxzZSBzYXlzIE4uCisKK2NvbmZpZyBESU8KKwlib29sICJESU8gYnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIUDMwMAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSAiRElPIiBleHBhbnNpb24gYnVzIHVzZWQgaW4KKwkgIEhQMzAwIG1hY2hpbmVzLiBJZiB5b3UgYXJlIHVzaW5nIHN1Y2ggYSBzeXN0ZW0geW91IGFsbW9zdCBjZXJ0YWlubHkKKwkgIHdhbnQgdGhpcy4KKworY29uZmlnIFNVTjNYCisJYm9vbCAiU3VuM3ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNNjgwMzAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gM3ggc2VyaWVzIG9mIHdvcmtzdGF0aW9ucy4KKwkgIEJlIHdhcm5lZCB0aGF0IHRoaXMgc3VwcG9ydCBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KKwkgIE5vdGUgdGhhdCBTdW4gM3gga2VybmVscyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBTdW4gMyBoYXJkd2FyZS4KKwkgIEdlbmVyYWwgTGludXggaW5mb3JtYXRpb24gb24gdGhlIFN1biAzeCBzZXJpZXMgKG5vdyBkaXNjb250aW51ZWQpCisJICBpcyBhdCA8aHR0cDovL3d3dy5hbmdlbGZpcmUuY29tL2NhMi90ZWNoNjhrL3N1bjMuaHRtbD4uCisKKwkgIElmIHlvdSBkb24ndCB3YW50IHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIGEgU3VuIDN4LCBzYXkgTi4KKworY29uZmlnIFE0MAorCWJvb2wgIlE0MC9RNjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIFRoZSBRNDAgaXMgYSBNb3Rvcm9sYSA2ODA0MC1iYXNlZCBzdWNjZXNzb3IgdG8gdGhlIFNpbmNsYWlyIFFMCisJICBtYW51ZmFjdHVyZWQgaW4gR2VybWFueS4gIFRoZXJlIGlzIGFuIG9mZmljaWFsIFE0MCBob21lIHBhZ2UgYXQKKwkgIDxodHRwOi8vd3d3LnE0MC5kZS8+LiAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUTQwIGFuZAorCSAgUTYwLiBTZWxlY3QgeW91ciBDUFUgYmVsb3cuICBGb3IgNjhMQzA2MCBkb24ndCBmb3JnZXQgdG8gZW5hYmxlIEZQVQorCSAgZW11bGF0aW9uLgorCitjb21tZW50ICJQcm9jZXNzb3IgdHlwZSIKKworY29uZmlnIE02ODAyMAorCWJvb2wgIjY4MDIwIHN1cHBvcnQiCisJaGVscAorCSAgSWYgeW91IGFudGljaXBhdGUgcnVubmluZyB0aGlzIGtlcm5lbCBvbiBhIGNvbXB1dGVyIHdpdGggYSBNQzY4MDIwCisJICBwcm9jZXNzb3IsIHNheSBZLiBPdGhlcndpc2UsIHNheSBOLiBOb3RlIHRoYXQgdGhlIDY4MDIwIHJlcXVpcmVzIGEKKwkgIDY4ODUxIE1NVSAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkgdG8gcnVuIExpbnV4L202OGssIGV4Y2VwdCBvbiB0aGUKKwkgIFN1biAzLCB3aGljaCBwcm92aWRlcyBpdHMgb3duIHZlcnNpb24uCisKK2NvbmZpZyBNNjgwMzAKKwlib29sICI2ODAzMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJaGVscAorCSAgSWYgeW91IGFudGljaXBhdGUgcnVubmluZyB0aGlzIGtlcm5lbCBvbiBhIGNvbXB1dGVyIHdpdGggYSBNQzY4MDMwCisJICBwcm9jZXNzb3IsIHNheSBZLiBPdGhlcndpc2UsIHNheSBOLiBOb3RlIHRoYXQgYSBNQzY4RUMwMzAgd2lsbCBub3QKKwkgIHdvcmssIGFzIGl0IGRvZXMgbm90IGluY2x1ZGUgYW4gTU1VIChNZW1vcnkgTWFuYWdlbWVudCBVbml0KS4KKworY29uZmlnIE02ODA0MAorCWJvb2wgIjY4MDQwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBJZiB5b3UgYW50aWNpcGF0ZSBydW5uaW5nIHRoaXMga2VybmVsIG9uIGEgY29tcHV0ZXIgd2l0aCBhIE1DNjhMQzA0MAorCSAgb3IgTUM2ODA0MCBwcm9jZXNzb3IsIHNheSBZLiBPdGhlcndpc2UsIHNheSBOLiBOb3RlIHRoYXQgYW4KKwkgIE1DNjhFQzA0MCB3aWxsIG5vdCB3b3JrLCBhcyBpdCBkb2VzIG5vdCBpbmNsdWRlIGFuIE1NVSAoTWVtb3J5CisJICBNYW5hZ2VtZW50IFVuaXQpLgorCitjb25maWcgTTY4MDYwCisJYm9vbCAiNjgwNjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIElmIHlvdSBhbnRpY2lwYXRlIHJ1bm5pbmcgdGhpcyBrZXJuZWwgb24gYSBjb21wdXRlciB3aXRoIGEgTUM2ODA2MAorCSAgcHJvY2Vzc29yLCBzYXkgWS4gT3RoZXJ3aXNlLCBzYXkgTi4KKworY29uZmlnIE1NVV9NT1RPUk9MQQorCWJvb2wKKwlkZXBlbmRzIG9uIE1NVSAmJiAhTU1VX1NVTjMKKwlkZWZhdWx0IHkKKworY29uZmlnIE1NVV9TVU4zCisJYm9vbAorCitjb25maWcgTTY4S0ZQVV9FTVUKKwlib29sICJNYXRoIGVtdWxhdGlvbiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgQXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGlzIHdpbGwgY2F1c2UgZmxvYXRpbmctcG9pbnQgbWF0aAorCSAgaW5zdHJ1Y3Rpb25zIHRvIGJlIGVtdWxhdGVkIGJ5IHRoZSBrZXJuZWwgb24gbWFjaGluZXMgdGhhdCBsYWNrIGEKKwkgIGZsb2F0aW5nLXBvaW50IG1hdGggY29wcm9jZXNzb3IuICBUaHJpbGwtc2Vla2VycyBhbmQgY2hyb25pY2FsbHkKKwkgIHNsZWVwLWRlcHJpdmVkIHBzeWNob3RpYyBoYWNrZXIgdHlwZXMgY2FuIHNheSBZIG5vdywgZXZlcnlvbmUgZWxzZQorCSAgc2hvdWxkIHByb2JhYmx5IHdhaXQgYSB3aGlsZS4KKworY29uZmlnIE02OEtGUFVfRU1VX0VYVFJBUFJFQworCWJvb2wgIk1hdGggZW11bGF0aW9uIGV4dHJhIHByZWNpc2lvbiIKKwlkZXBlbmRzIG9uIE02OEtGUFVfRU1VCisJaGVscAorCSAgVGhlIGZwdSB1c2VzIG5vcm1hbGx5IGEgZmV3IGJpdCBtb3JlIGR1cmluZyBjYWxjdWxhdGlvbnMgZm9yCisJICBjb3JyZWN0IHJvdW5kaW5nLCB0aGUgZW11bGF0b3IgY2FuIChvZnRlbikgZG8gdGhlIHNhbWUgYnV0IHRoaXMKKwkgIGV4dHJhIGNhbGN1bGF0aW9uIGNhbiBjb3N0IHF1aXRlIHNvbWUgdGltZSwgc28geW91IGNhbiBkaXNhYmxlCisJICBpdCBoZXJlLiBUaGUgZW11bGF0b3Igd2lsbCB0aGVuICJvbmx5IiBjYWxjdWxhdGUgd2l0aCBhIDY0IGJpdAorCSAgbWFudGlzc2EgYW5kIHJvdW5kIHNsaWdodGx5IGluY29ycmVjdCwgd2hhdCBpcyBtb3JlIHRoZW4gZW5vdWdoCisJICBmb3Igbm9ybWFsIHVzYWdlLgorCitjb25maWcgTTY4S0ZQVV9FTVVfT05MWQorCWJvb2wgIk1hdGggZW11bGF0aW9uIG9ubHkga2VybmVsIgorCWRlcGVuZHMgb24gTTY4S0ZQVV9FTVUKKwloZWxwCisJICBUaGlzIG9wdGlvbiBwcmV2ZW50cyBhbnkgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcKKwkgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlcmVieSB0aGUga2VybmVsIGRvZXNuJ3Qgc2F2ZSBhbnkKKwkgIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgYW55bW9yZSBkdXJpbmcgdGFzayBzd2l0Y2hlcywgc28gdGhpcworCSAga2VybmVsIHdpbGwgb25seSBiZSB1c2FibGUgb24gbWFjaGluZXMgd2l0aG91dCBhIGZsb2F0aW5nLXBvaW50CisJICBtYXRoIGNvcHJvY2Vzc29yLiBUaGlzIG1ha2VzIHRoZSBrZXJuZWwgYSBiaXQgZmFzdGVyIGFzIG5vIHRlc3RzCisJICBuZWVkcyB0byBiZSBleGVjdXRlZCB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24gaW4gdGhlCisJICBrZXJuZWwgc2hvdWxkIGJlIGV4ZWN1dGVkIG9yIG5vdC4KKworY29uZmlnIEFEVkFOQ0VECisJYm9vbCAiQWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZ2l2ZXMgeW91IGFjY2VzcyB0byBzb21lIGFkdmFuY2VkIG9wdGlvbnMgZm9yIHRoZSBDUFUuIFRoZQorCSAgZGVmYXVsdHMgc2hvdWxkIGJlIGZpbmUgZm9yIG1vc3QgdXNlcnMsIGJ1dCB0aGVzZSBvcHRpb25zIG1heSBtYWtlCisJICBpdCBwb3NzaWJsZSBmb3IgeW91IHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugc29tZXdoYXQgaWYgeW91IGtub3cgd2hhdAorCSAgeW91IGFyZSBkb2luZy4KKworCSAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24ndCBkaXJlY3RseSBhZmZlY3QgdGhlCisJICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsCisJICB0aGUgcXVlc3Rpb25zIGFib3V0IHRoZXNlIG9wdGlvbnMuCisKKwkgIE1vc3QgdXNlcnMgc2hvdWxkIHNheSBOIHRvIHRoaXMgcXVlc3Rpb24uCisKK2NvbmZpZyBSTVdfSU5TTlMKKwlib29sICJVc2UgcmVhZC1tb2RpZnktd3JpdGUgaW5zdHJ1Y3Rpb25zIgorCWRlcGVuZHMgb24gQURWQU5DRUQKKwktLS1oZWxwLS0tCisJICBUaGlzIGFsbG93cyB0byB1c2UgY2VydGFpbiBpbnN0cnVjdGlvbnMgdGhhdCB3b3JrIHdpdGggaW5kaXZpc2libGUKKwkgIHJlYWQtbW9kaWZ5LXdyaXRlIGJ1cyBjeWNsZXMuIFdoaWxlIHRoaXMgaXMgZmFzdGVyIHRoYW4gdGhlCisJICB3b3JrYXJvdW5kIG9mIGRpc2FibGluZyBpbnRlcnJ1cHRzLCBpdCBjYW4gY29uZmxpY3Qgd2l0aCBETUEKKwkgICggPSBkaXJlY3QgbWVtb3J5IGFjY2Vzcykgb24gbWFueSBBbWlnYSBzeXN0ZW1zLCBhbmQgaXQgaXMgYWxzbyBzYWlkCisJICB0byBkZXN0YWJpbGl6ZSBvdGhlciBtYWNoaW5lcy4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIHdpbGwKKwkgIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgb24gYW55IEFtaWdhIG9yIEF0YXJpIE1lZHVzYSBpZiBzZXQuIFRoZSBvbmx5CisJICBjb25maWd1cmF0aW9uIHdoZXJlIGl0IHNob3VsZCB3b3JrIGFyZSA2ODAzMC1iYXNlZCBBdGFyaXMsIHdoZXJlIGl0CisJICBhcHBhcmVudGx5IGltcHJvdmVzIHBlcmZvcm1hbmNlLiBCdXQgeW91J3ZlIGJlZW4gd2FybmVkISBVbmxlc3MgeW91CisJICByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHNheSBOLiBUcnkgWSBvbmx5IGlmIHlvdSdyZSBxdWl0ZQorCSAgYWR2ZW50dXJvdXMuCisKK2NvbmZpZyBTSU5HTEVfTUVNT1JZX0NIVU5LCisJYm9vbCAiVXNlIG9uZSBwaHlzaWNhbCBjaHVuayBvZiBtZW1vcnkgb25seSIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VEICYmICFTVU4zCisJaGVscAorCSAgSWdub3JlIGFsbCBidXQgdGhlIGZpcnN0IGNvbnRpZ3VvdXMgY2h1bmsgb2YgcGh5c2ljYWwgbWVtb3J5IGZvciBWTQorCSAgcHVycG9zZXMuICBUaGlzIHdpbGwgc2F2ZSBhIGZldyBieXRlcyBrZXJuZWwgc2l6ZSBhbmQgbWF5IHNwZWVkIHVwCisJICBzb21lIG9wZXJhdGlvbnMuICBTYXkgTiBpZiBub3Qgc3VyZS4KKworY29uZmlnIDA2MF9XUklURVRIUk9VR0gKKwlib29sICJVc2Ugd3JpdGUtdGhyb3VnaCBjYWNoaW5nIGZvciA2ODA2MCBzdXBlcnZpc29yIGFjY2Vzc2VzIgorCWRlcGVuZHMgb24gQURWQU5DRUQgJiYgTTY4MDYwCisJLS0taGVscC0tLQorCSAgVGhlIDY4MDYwIGdlbmVyYWxseSB1c2VzIGNvcHliYWNrIGNhY2hpbmcgb2YgcmVjZW50bHkgYWNjZXNzZWQgZGF0YS4KKwkgIENvcHliYWNrIGNhY2hpbmcgbWVhbnMgdGhhdCBtZW1vcnkgd3JpdGVzIHdpbGwgYmUgaGVsZCBpbiBhbiBvbi1jaGlwCisJICBjYWNoZSBhbmQgb25seSB3cml0dGVuIGJhY2sgdG8gbWVtb3J5IHNvbWUgdGltZSBsYXRlci4gIFNheWluZyBZCisJICBoZXJlIHdpbGwgZm9yY2Ugc3VwZXJ2aXNvciAoa2VybmVsKSBhY2Nlc3NlcyB0byB1c2Ugd3JpdGV0aHJvdWdoCisJICBjYWNoaW5nLiAgV3JpdGV0aHJvdWdoIGNhY2hpbmcgbWVhbnMgdGhhdCBkYXRhIGlzIHdyaXR0ZW4gdG8gbWVtb3J5CisJICBzdHJhaWdodCBhd2F5LCBzbyB0aGF0IGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhbHdheXMgYWdyZWUuCisJICBXcml0ZXRocm91Z2ggY2FjaGluZyBpcyBsZXNzIGVmZmljaWVudCwgYnV0IGlzIG5lZWRlZCBmb3Igc29tZQorCSAgZHJpdmVycyBvbiA2ODA2MCBiYXNlZCBzeXN0ZW1zIHdoZXJlIHRoZSA2ODA2MCBidXMgc25vb3Bpbmcgc2lnbmFsCisJICBpcyBoYXJkd2lyZWQgb24uICBUaGUgNTNjNzEwIFNDU0kgZHJpdmVyIGlzIGtub3duIHRvIHN1ZmZlciBmcm9tCisJICB0aGlzIHByb2JsZW0uCisKK2VuZG1lbnUKKworbWVudSAiR2VuZXJhbCBzZXR1cCIKKworc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKKworY29uZmlnIFpPUlJPCisJYm9vbCAiQW1pZ2EgWm9ycm8gKEF1dG9Db25maWcpIGJ1cyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQU1JR0EKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFpvcnJvIGJ1cyBpbiB0aGUgQW1pZ2EuIElmIHlvdSBoYXZlCisJICBleHBhbnNpb24gY2FyZHMgaW4geW91ciBBbWlnYSB0aGF0IGNvbmZvcm0gdG8gdGhlIEFtaWdhCisJICBBdXRvQ29uZmlnKHRtKSBzcGVjaWZpY2F0aW9uLCBzYXkgWSwgb3RoZXJ3aXNlIE4uIE5vdGUgdGhhdCBldmVuCisJICBleHBhbnNpb24gY2FyZHMgdGhhdCBkbyBub3QgZml0IGluIHRoZSBab3JybyBzbG90cyBidXQgZml0IGluIGUuZy4KKwkgIHRoZSBDUFUgc2xvdCBtYXkgZmFsbCBpbiB0aGlzIGNhdGVnb3J5LCBzbyB5b3UgaGF2ZSB0byBzYXkgWSB0byBsZXQKKwkgIExpbnV4IHVzZSB0aGVzZS4KKworY29uZmlnIEFNSUdBX1BDTUNJQQorCWJvb2wgIkFtaWdhIDEyMDAvNjAwIFBDTUNJQSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gQU1JR0EgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgZm9yIHBjbWNpYSBvbiBBbWlnYSAxMjAwIGFuZCBBbWlnYQorCSAgNjAwLiBJZiB5b3UgaW50ZW5kIHRvIHVzZSBwY21jaWEgY2FyZHMgc2F5IFk7IG90aGVyd2lzZSBzYXkgTi4KKworY29uZmlnIFNUUkFNX1NXQVAKKwlib29sICJTdXBwb3J0IGZvciBTVC1SQU0gYXMgc3dhcCBzcGFjZSIKKwlkZXBlbmRzIG9uIEFUQVJJICYmIEJST0tFTgorCS0tLWhlbHAtLS0KKwkgIFNvbWUgQXRhcmkgNjhrIG1hY2hpbmVzIChpbmNsdWRpbmcgdGhlIDUyMFNURiBhbmQgMTAyMFNURSkgZGl2aWRlCisJICB0aGVpciBhZGRyZXNzYWJsZSBtZW1vcnkgaW50byBTVCBhbmQgVFQgc2VjdGlvbnMuICBUaGUgVFQgc2VjdGlvbgorCSAgKHVwIHRvIDUxMk1CKSBpcyB0aGUgbWFpbiBtZW1vcnk7IHRoZSBTVCBzZWN0aW9uICh1cCB0byA0TUIpIGlzCisJICBhY2Nlc3NpYmxlIHRvIHRoZSBidWlsdC1pbiBncmFwaGljcyBib2FyZCwgcnVucyBzbG93ZXIsIGFuZCBpcworCSAgcHJlc2VudCBtYWlubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBtYWNoaW5lcy4KKworCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHVzaW5nIChwYXJ0cyBvZikgU1QtUkFNIGFzIHN3YXAgc3BhY2UsCisJICBpbnN0ZWFkIG9mIGFzIG5vcm1hbCBzeXN0ZW0gbWVtb3J5LiBUaGlzIGNhbiBmaXJzdCBlbmhhbmNlIHN5c3RlbQorCSAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgbG90cyBvZiBhbHRlcm5hdGUgUkFNIChjb21wYXJlZCB0byB0aGUgc2l6ZQorCSAgb2YgU1QtUkFNKSwgYmVjYXVzZSBleGVjdXRhYmxlIGNvZGUgYWx3YXlzIHdpbGwgcmVzaWRlIGluIGZhc3RlcgorCSAgbWVtb3J5LiBTVC1SQU0gd2lsbCByZW1haW4gYXMgdWx0cmEtZmFzdCBzd2FwIHNwYWNlLiBPbiB0aGUgb3RoZXIKKwkgIGhhbmQsIGl0IGFsbG93cyBtdWNoIGltcHJvdmVkIGR5bmFtaWMgYWxsb2NhdGlvbnMgb2YgU1QtUkFNIGJ1ZmZlcnMKKwkgIGZvciBkZXZpY2UgZHJpdmVyIG1vZHVsZXMgKGUuZy4gZmxvcHB5LCBBQ1NJLCBTTE0gcHJpbnRlciwgRE1BCisJICBzb3VuZCkuIFRoZSBwcm9iYWJpbGl0eSB0aGF0IHN1Y2ggYWxsb2NhdGlvbnMgYXQgbW9kdWxlIGxvYWQgdGltZQorCSAgZmFpbCBpcyBkcmFzdGljYWxseSByZWR1Y2VkLgorCitjb25maWcgU1RSQU1fUFJPQworCWJvb2wgIlNULVJBTSBzdGF0aXN0aWNzIGluIC9wcm9jIgorCWRlcGVuZHMgb24gQVRBUkkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHJlcG9ydCBTVC1SQU0gdXNhZ2Ugc3RhdGlzdGljcyBpbiAvcHJvYy9zdHJhbS4gIFNlZQorCSAgdGhlIGhlbHAgZm9yIENPTkZJR19TVFJBTV9TV0FQIGZvciBkaXNjdXNzaW9uIG9mIFNULVJBTSBhbmQgaXRzCisJICB1c2VzLgorCitjb25maWcgSEVBUlRCRUFUCisJYm9vbCAiVXNlIHBvd2VyIExFRCBhcyBhIGhlYXJ0YmVhdCIgaWYgQU1JR0EgfHwgQVBPTExPIHx8IEFUQVJJIHx8IE1BQyB8fFE0MAorCWRlZmF1bHQgeSBpZiAhQU1JR0EgJiYgIUFQT0xMTyAmJiAhQVRBUkkgJiYgIU1BQyAmJiAhUTQwICYmIEhQMzAwCisJaGVscAorCSAgVXNlIHRoZSBwb3dlci1vbiBMRUQgb24geW91ciBtYWNoaW5lIGFzIGEgbG9hZCBtZXRlci4gIFRoZSBleGFjdAorCSAgYmVoYXZpb3IgaXMgcGxhdGZvcm0tZGVwZW5kZW50LCBidXQgbm9ybWFsbHkgdGhlIGZsYXNoIGZyZXF1ZW5jeSBpcworCSAgYSBoeXBlcmJvbGljIGZ1bmN0aW9uIG9mIHRoZSA1LW1pbnV0ZSBsb2FkIGF2ZXJhZ2UuCisKKyMgV2UgaGF2ZSBhIGRlZGljYXRlZCBoZWFydGJlYXQgTEVELiA6LSkKK2NvbmZpZyBQUk9DX0hBUkRXQVJFCisJYm9vbCAiL3Byb2MvaGFyZHdhcmUgc3VwcG9ydCIKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIC9wcm9jL2hhcmR3YXJlIGZpbGUsIHdoaWNoIGdpdmVzIHlvdQorCSAgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYWNoaW5lIHlvdSdyZSBydW5uaW5nIG9uLAorCSAgaW5jbHVkaW5nIHRoZSBtb2RlbCwgQ1BVLCBNTVUsIGNsb2NrIHNwZWVkLCBCb2dvTUlQUyByYXRpbmcsCisJICBhbmQgbWVtb3J5IHNpemUuCisKK2NvbmZpZyBJU0EKKwlib29sCisJZGVwZW5kcyBvbiBRNDAgfHwgQU1JR0FfUENNQ0lBIHx8IEdHMgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgSVNBIHNsb3RzIG9uIHlvdXIgbW90aGVyYm9hcmQuICBJU0EgaXMgdGhlCisJICBuYW1lIG9mIGEgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmCisJICBpbnNpZGUgeW91ciBib3guICBPdGhlciBidXMgc3lzdGVtcyBhcmUgUENJLCBFSVNBLCBNaWNyb0NoYW5uZWwKKwkgIChNQ0EpIG9yIFZFU0EuICBJU0EgaXMgYW4gb2xkZXIgc3lzdGVtLCBub3cgYmVpbmcgZGlzcGxhY2VkIGJ5IFBDSTsKKwkgIG5ld2VyIGJvYXJkcyBkb24ndCBzdXBwb3J0IGl0LiAgSWYgeW91IGhhdmUgSVNBLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCisKK2NvbmZpZyBHRU5FUklDX0lTQV9ETUEKKwlib29sCisJZGVwZW5kcyBvbiBRNDAgfHwgQU1JR0FfUENNQ0lBIHx8IEdHMgorCWRlZmF1bHQgeQorCitzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy96b3Jyby9LY29uZmlnIgorCitlbmRtZW51CisKK3NvdXJjZSAiZHJpdmVycy9LY29uZmlnIgorCittZW51ICJDaGFyYWN0ZXIgZGV2aWNlcyIKKworY29uZmlnIEFUQVJJX01GUFNFUgorCXRyaXN0YXRlICJBdGFyaSBNRlAgc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBVEFSSQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBsaWtlIHRvIHVzZSB0aGUgTUZQIHNlcmlhbCBwb3J0cyAoIk1vZGVtMSIsICJTZXJpYWwxIikgdW5kZXIKKwkgIExpbnV4LCBzYXkgWS4gVGhlIGRyaXZlciBlcXVhbGx5IHN1cHBvcnRzIGFsbCBraW5kcyBvZiBNRlAgc2VyaWFsCisJICBwb3J0cyBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RzIHdoZXRoZXIgU2VyaWFsMSBpcyBhdmFpbGFibGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKKwkgIE5vdGUgZm9yIEZhbGNvbiB1c2VyczogWW91IGFsc28gaGF2ZSBhbiBNRlAgcG9ydCwgaXQncyBqdXN0IG5vdAorCSAgd2lyZWQgdG8gdGhlIG91dHNpZGUuLi4gQnV0IHlvdSBjb3VsZCB1c2UgdGhlIHBvcnQgdW5kZXIgTGludXguCisKK2NvbmZpZyBBVEFSSV9TQ0MKKwl0cmlzdGF0ZSAiQXRhcmkgU0NDIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVRBUkkKKwktLS1oZWxwLS0tCisJICBJZiB5b3UgaGF2ZSBzZXJpYWwgcG9ydHMgYmFzZWQgb24gYSBaaWxvZyBTQ0MgY2hpcCAoTW9kZW0yLCBTZXJpYWwyLAorCSAgTEFOKSBhbmQgbGlrZSB0byB1c2UgdGhlbSB1bmRlciBMaW51eCwgc2F5IFkuIEFsbCBidWlsdC1pbiBTQ0MncyBhcmUKKwkgIHN1cHBvcnRlZCAoVFQsIE1lZ2FTVEUsIEZhbGNvbiksIGFuZCBhbHNvIHRoZSBTVC1FU0NDLiBJZiB5b3UgaGF2ZQorCSAgdHdvIGNvbm5lY3RvcnMgZm9yIGNoYW5uZWwgQSAoU2VyaWFsMiBhbmQgTEFOKSwgdGhleSBhcmUgdmlzaWJsZSBhcworCSAgdHdvIHNlcGFyYXRlIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKK2NvbmZpZyBBVEFSSV9TQ0NfRE1BCisJYm9vbCAiQXRhcmkgU0NDIHNlcmlhbCBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUQVJJX1NDQworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBETUEgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIGRhdGEgb24gY2hhbm5lbCBBIG9mIHRoZSBTQ0MuCisJICBJZiB5b3UgaGF2ZSBhIFRUIHlvdSBtYXkgc2F5IFkgaGVyZSBhbmQgcmVhZAorCSAgZHJpdmVycy9jaGFyL2F0YXJpX1NDQy5SRUFETUUuIEFsbCBvdGhlciB1c2VycyBzaG91bGQgc2F5IE4gaGVyZSwKKwkgIGJlY2F1c2Ugb25seSB0aGUgVFQgaGFzIFNDQy1ETUEsIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGtlZXBzIGNsYWltaW5nCisJICBzbyBhdCBib290IHRpbWUuCisKK2NvbmZpZyBBVEFSSV9NSURJCisJdHJpc3RhdGUgIkF0YXJpIE1JREkgc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBVEFSSQorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIHVzZSB5b3VyIEF0YXJpJ3MgTUlESSBwb3J0IGluIExpbnV4LCBzYXkgWS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKworY29uZmlnIEFUQVJJX0RTUDU2SworCXRyaXN0YXRlICJBdGFyaSBEU1A1Nmsgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEFUQVJJICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSBEU1A1NjAwMSBpbiBGYWxjb25zLCBzYXkgWS4gVGhpcworCSAgZHJpdmVyIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwgYW5kIGlmIHlvdSBkb24ndCBrbm93IHdoYXQgaXQgaXMsIG9yCisJICBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzIHByb2Nlc3NvciwganVzdCBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKworY29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMCisJdHJpc3RhdGUgIkFtaWdhIGJ1aWx0aW4gc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBTUlHQQorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIHVzZSB5b3VyIEFtaWdhJ3MgYnVpbHQtaW4gc2VyaWFsIHBvcnQgaW4gTGludXgsCisJICBhbnN3ZXIgWS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKworY29uZmlnIFdISVBQRVRfU0VSSUFMCisJdHJpc3RhdGUgIkhpc29mdCBXaGlwcGV0IFBDTUNJQSBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFNSUdBX1BDTUNJQQorCWhlbHAKKwkgIEhpU29mdCBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5oaXNvZnQuY28udWsvPiwgYnV0IHRoZXJlCisJICBpcyBubyBsaXN0aW5nIGZvciB0aGUgV2hpcHBldCBpbiB0aGVpciBBbWlnYSBzZWN0aW9uLgorCitjb25maWcgTVVMVElGQUNFX0lJSV9UVFkKKwl0cmlzdGF0ZSAiTXVsdGlmYWNlIENhcmQgSUlJIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQU1JR0EKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgYSBNdWx0aWZhY2UgSUlJIGNhcmQncyBzZXJpYWwgcG9ydCBpbiBMaW51eCwKKwkgIGFuc3dlciBZLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCitjb25maWcgR1ZQSU9FWFQKKwl0cmlzdGF0ZSAiR1ZQIElPLUV4dGVuZGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQVJQT1JUPW4gJiYgWk9SUk8KKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgYSBHVlAgSU8tRXh0ZW5kZXIgc2VyaWFsIGNhcmQgaW4gTGludXgsIHNheSBZLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworY29uZmlnIEdWUElPRVhUX0xQCisJdHJpc3RhdGUgIkdWUCBJTy1FeHRlbmRlciBwYXJhbGxlbCBwcmludGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBHVlBJT0VYVAorCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSBkcml2aW5nIGEgcHJpbnRlciBmcm9tIHRoZSBwYXJhbGxlbCBwb3J0IG9uIHlvdXIKKwkgIEdWUCBJTy1FeHRlbmRlciBjYXJkLCBOIG90aGVyd2lzZS4KKworY29uZmlnIEdWUElPRVhUX1BMSVAKKwl0cmlzdGF0ZSAiR1ZQIElPLUV4dGVuZGVyIFBMSVAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEdWUElPRVhUCisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIGRvaW5nIElQIG92ZXIgdGhlIHBhcmFsbGVsIHBvcnQgb24geW91ciBHVlAKKwkgIElPLUV4dGVuZGVyIGNhcmQsIE4gb3RoZXJ3aXNlLgorCitjb25maWcgTUFDX1NDQworCXRyaXN0YXRlICJNYWNpbnRvc2ggc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQUMKKworY29uZmlnIE1BQ19ISUQKKwlib29sCisJZGVwZW5kcyBvbiBJTlBVVF9BREJISUQKKwlkZWZhdWx0IHkKKworY29uZmlnIE1BQ19BREJLRVlDT0RFUworCWJvb2wgIlN1cHBvcnQgZm9yIEFEQiByYXcga2V5Y29kZXMiCisJZGVwZW5kcyBvbiBJTlBVVF9BREJISUQKKwloZWxwCisJICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNlbmRpbmcgcmF3IEFEQiBrZXljb2RlcyB0byBjb25zb2xlCisJICBkZXZpY2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB1cCB0byAyLjQuMCwgYnV0IGluIGZ1dHVyZSB0aGlzIG1heSBiZQorCSAgcGhhc2VkIG91dCBpbiBmYXZvciBvZiBnZW5lcmljIExpbnV4IGtleWNvZGVzLiAgSWYgeW91IHNheSBZIGhlcmUsCisJICB5b3UgY2FuIGR5bmFtaWNhbGx5IHN3aXRjaCB2aWEgdGhlCisJICAvcHJvYy9zeXMvZGV2L21hY19oaWQva2V5Ym9hcmRfc2VuZHNfbGludXhfa2V5Y29kZXMKKwkgIHN5c2N0bCBhbmQgd2l0aCB0aGUgImtleWJvYXJkX3NlbmRzX2xpbnV4X2tleWNvZGVzPSIga2VybmVsCisJICBhcmd1bWVudC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWSBoZXJlLgorCitjb25maWcgQURCX0tFWUJPQVJECisJYm9vbCAiU3VwcG9ydCBmb3IgQURCIGtleWJvYXJkIChvbGQgZHJpdmVyKSIKKwlkZXBlbmRzIG9uIE1BQyAmJiAhSU5QVVRfQURCSElECisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byB1c2UgYW4gQURCIGtleWJvYXJkIGF0dGFjaGVkIHRvIHlvdXIKKwkgIG1hY2hpbmUuIE5vdGUgdGhhdCB0aGlzIGRpc2FibGVzIGFueSBvdGhlciAoaWUuIFBTLzIpIGtleWJvYXJkCisJICBzdXBwb3J0LCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBwaHlzaWNhbGx5IGNhcGFibGUgb2YgdXNpbmcgYm90aCBhdAorCSAgdGhlIHNhbWUgdGltZS4KKworCSAgSWYgeW91IHVzZSBhbiBBREIga2V5Ym9hcmQgKDQgcGluIGNvbm5lY3RvciksIHNheSBZIGhlcmUuCisJICBJZiB5b3UgdXNlIGEgUFMvMiBrZXlib2FyZCAoNiBwaW4gY29ubmVjdG9yKSwgc2F5IE4gaGVyZS4KKworY29uZmlnIEhQRENBCisJdHJpc3RhdGUgIkhQIERDQSBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERJTyAmJiBTRVJJQUxfODI1MAorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgaW50ZXJuYWwgIkRDQSIgc2VyaWFsIHBvcnRzIG9uIGFuIEhQMzAwCisJICBtYWNoaW5lLCBzYXkgWSBoZXJlLgorCitjb25maWcgSFBBUENJCisJdHJpc3RhdGUgIkhQIEFQQ0kgc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIUDMwMCAmJiBTRVJJQUxfODI1MCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGludGVybmFsICJBUENJIiBzZXJpYWwgcG9ydHMgb24gYW4gSFA0MDAKKwkgIG1hY2hpbmUsIHNheSBZIGhlcmUuCisKK2NvbmZpZyBNVk1FMTQ3X1NDQworCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTQ3IHNlcmlhbCBwb3J0cyIKKwlkZXBlbmRzIG9uIE1WTUUxNDcKKwloZWxwCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIE1vdG9yb2xhIE1WTUUxNDcKKwkgIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCisKK2NvbmZpZyBTRVJJQUwxNjcKKwlib29sICJDRDI0MDEgc3VwcG9ydCBmb3IgTVZNRTE2Ni83IHNlcmlhbCBwb3J0cyIKKwlkZXBlbmRzIG9uIE1WTUUxNnggJiYgQlJPS0VOCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTY2LAorCSAgMTY3LCBhbmQgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheQorCSAgWSBoZXJlLgorCitjb25maWcgTVZNRTE2Ml9TQ0MKKwlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE2MiBzZXJpYWwgcG9ydHMiCisJZGVwZW5kcyBvbiBNVk1FMTZ4CisJaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTYyIGFuZAorCSAgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCisKK2NvbmZpZyBCVk1FNjAwMF9TQ0MKKwlib29sICJTQ0Mgc3VwcG9ydCBmb3IgQlZNRTYwMDAgc2VyaWFsIHBvcnRzIgorCWRlcGVuZHMgb24gQlZNRTYwMDAKKwloZWxwCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIEJWTUU0MDAwIGFuZCBCVk1FNjAwMAorCSAgYm9hcmRzIGZyb20gQlZNIEx0ZC4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheQorCSAgWSBoZXJlLgorCitjb25maWcgRE5fU0VSSUFMCisJYm9vbCAiU3VwcG9ydCBmb3IgRE4gc2VyaWFsIHBvcnQgKGR1bW15KSIKKwlkZXBlbmRzIG9uIEFQT0xMTworCitjb25maWcgU0VSSUFMX0NPTlNPTEUKKwlib29sICJTdXBwb3J0IGZvciBzZXJpYWwgcG9ydCBjb25zb2xlIgorCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IE1BQyB8fCBTVU4zIHx8IFNVTjNYIHx8IFZNRSB8fCBBUE9MTE8pICYmIChBVEFSSV9NRlBTRVI9eSB8fCBBVEFSSV9TQ0M9eSB8fCBBVEFSSV9NSURJPXkgfHwgTUFDX1NDQz15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHVzZSBhIHNlcmlhbCBwb3J0IGFzIHRoZQorCSAgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbAorCSAga2VybmVsIG1lc3NhZ2VzIGFuZCB3YXJuaW5ncyBhbmQgd2hpY2ggYWxsb3dzIGxvZ2lucyBpbiBzaW5nbGUgdXNlcgorCSAgbW9kZSkuIFRoaXMgY291bGQgYmUgdXNlZnVsIGlmIHNvbWUgdGVybWluYWwgb3IgcHJpbnRlciBpcyBjb25uZWN0ZWQKKwkgIHRvIHRoYXQgc2VyaWFsIHBvcnQuCisKKwkgIEV2ZW4gaWYgeW91IHNheSBZIGhlcmUsIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2aXJ0dWFsIGNvbnNvbGUKKwkgICgvZGV2L3R0eTApIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyB0aGUgc3lzdGVtIGNvbnNvbGUgYnkgZGVmYXVsdCwgYnV0CisJICB5b3UgY2FuIGFsdGVyIHRoYXQgdXNpbmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzCisJICAiY29uc29sZT10dHlTMSIuIChUcnkgIm1hbiBib290cGFyYW0iIG9yIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZgorCSAgeW91ciBib290IGxvYWRlciAobGlsbyBvciBsb2FkbGluKSBhYm91dCBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZQorCSAga2VybmVsIGF0IGJvb3QgdGltZS4pCisKKwkgIElmIHlvdSBkb24ndCBoYXZlIGEgVkdBIGNhcmQgaW5zdGFsbGVkIGFuZCB5b3Ugc2F5IFkgaGVyZSwgdGhlCisJICBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgZmlyc3Qgc2VyaWFsIGxpbmUsIC9kZXYvdHR5UzAsIGFzCisJICBzeXN0ZW0gY29uc29sZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworZW5kbWVudQorCitzb3VyY2UgImZzL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9tNjhrL0tjb25maWcuZGVidWciCisKK3NvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKKworc291cmNlICJjcnlwdG8vS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnLmRlYnVnIGIvYXJjaC9tNjhrL0tjb25maWcuZGVidWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzYjZkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnLmRlYnVnCkBAIC0wLDAgKzEsNSBAQAorbWVudSAiS2VybmVsIGhhY2tpbmciCisKK3NvdXJjZSAibGliL0tjb25maWcuZGVidWciCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9NYWtlZmlsZSBiL2FyY2gvbTY4ay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZlNzQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTI2IEBACisjCisjIG02OGsvTWFrZWZpbGUKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IHRoZSBnbG9iYWwgbWFrZWZpbGUgc28gdGhhdCB5b3UgY2FuIGFkZCB5b3VyIG93bgorIyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcy4gUmVtZW1iZXIgdG8gZG8gaGF2ZSBhY3Rpb25zCisjIGZvciAiYXJjaGNsZWFuIiBhbmQgImFyY2hkZXAiIGZvciBjbGVhbmluZyB1cCBhbmQgbWFraW5nIGRlcGVuZGVuY2llcyBmb3IKKyMgdGhpcyBhcmNoaXRlY3R1cmUKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgSGFtaXNoIE1hY2RvbmFsZAorIworCisjIHRlc3QgZm9yIGNyb3NzIGNvbXBpbGluZworQ09NUElMRV9BUkNIID0gJChzaGVsbCB1bmFtZSAtbSkKKworIyBvdmVycmlkZSB0b3AgbGV2ZWwgbWFrZWZpbGUKK0FTICs9IC1tNjgwMjAKK0xERkxBR1MgOj0gLW0gbTY4a2VsZgoraWZuZXEgKCQoQ09NUElMRV9BUkNIKSwkKEFSQ0gpKQorCSMgcHJlZml4IGZvciBjcm9zcy1jb21waWxpbmcgYmluYXJpZXMKKwlDUk9TU19DT01QSUxFID0gbTY4ay1saW51eC0KK2VuZGlmCisKK2lmZGVmIENPTkZJR19TVU4zCitMREZMQUdTX3ZtbGludXggPSAtTgorZW5kaWYKKworQ0hFQ0tGTEFHUyArPSAtRF9fbWM2ODAwMF9fCisKKyMgd2l0aG91dCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSB0aGUgNTNjN3h4LmMgZHJpdmVyIGZhaWxzIDstKAorQ0ZMQUdTICs9IC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1mZml4ZWQtYTIKKworIyBlbmFibGUgcHJvY2Vzc29yIHN3aXRjaCBpZiBjb21waWxlZCBvbmx5IGZvciBhIHNpbmdsZSBjcHUKK2lmbmRlZiBDT05GSUdfTTY4MDIwCitpZm5kZWYgQ09ORklHX002ODAzMAorCitpZm5kZWYgQ09ORklHX002ODA2MAorQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtbTY4MDQwCitlbmRpZgorCitpZm5kZWYgQ09ORklHX002ODA0MAorQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtbTY4MDYwCitlbmRpZgorCitlbmRpZgorZW5kaWYKKworaWZkZWYgQ09ORklHX0tHREIKKyMgSWYgY29uZmlndXJlZCBmb3Iga2dkYiBzdXBwb3J0LCBpbmNsdWRlIGRlYnVnZ2luZyBpbmZvcyBhbmQga2VlcCB0aGUKKyMgZnJhbWUgcG9pbnRlcgorQ0ZMQUdTIDo9ICQoc3Vic3QgLWZvbWl0LWZyYW1lLXBvaW50ZXIsLCQoQ0ZMQUdTKSkgLWcKK2VuZGlmCisKK2lmbmRlZiBDT05GSUdfU1VOMworaGVhZC15IDo9IGFyY2gvbTY4ay9rZXJuZWwvaGVhZC5vCitlbHNlCitoZWFkLXkgOj0gYXJjaC9tNjhrL2tlcm5lbC9zdW4zLWhlYWQubworZW5kaWYKKworY29yZS15CQkJCSs9IGFyY2gvbTY4ay9rZXJuZWwvCWFyY2gvbTY4ay9tbS8KK2xpYnMteQkJCQkrPSBhcmNoL202OGsvbGliLworCitjb3JlLSQoQ09ORklHX1E0MCkJCSs9IGFyY2gvbTY4ay9xNDAvCitjb3JlLSQoQ09ORklHX0FNSUdBKQkJKz0gYXJjaC9tNjhrL2FtaWdhLworY29yZS0kKENPTkZJR19BVEFSSSkJCSs9IGFyY2gvbTY4ay9hdGFyaS8KK2NvcmUtJChDT05GSUdfTUFDKQkJKz0gYXJjaC9tNjhrL21hYy8KK2NvcmUtJChDT05GSUdfSFAzMDApCQkrPSBhcmNoL202OGsvaHAzMDAvCitjb3JlLSQoQ09ORklHX0FQT0xMTykJCSs9IGFyY2gvbTY4ay9hcG9sbG8vCitjb3JlLSQoQ09ORklHX01WTUUxNDcpCQkrPSBhcmNoL202OGsvbXZtZTE0Ny8KK2NvcmUtJChDT05GSUdfTVZNRTE2eCkJCSs9IGFyY2gvbTY4ay9tdm1lMTZ4LworY29yZS0kKENPTkZJR19CVk1FNjAwMCkJCSs9IGFyY2gvbTY4ay9idm1lNjAwMC8KK2NvcmUtJChDT05GSUdfU1VOM1gpCQkrPSBhcmNoL202OGsvc3VuM3gvCWFyY2gvbTY4ay9zdW4zLworY29yZS0kKENPTkZJR19TVU4zKQkJKz0gYXJjaC9tNjhrL3N1bjMvCWFyY2gvbTY4ay9zdW4zL3Byb20vCitjb3JlLSQoQ09ORklHX002ODA0MCkJCSs9IGFyY2gvbTY4ay9mcHNwMDQwLworY29yZS0kKENPTkZJR19NNjgwNjApCQkrPSBhcmNoL202OGsvaWZwc3AwNjAvCitjb3JlLSQoQ09ORklHX002OEtGUFVfRU1VKQkrPSBhcmNoL202OGsvbWF0aC1lbXUvCisKK2FsbDoJekltYWdlCisKK2xpbG86CXZtbGludXgKKwlpZiBbIC1mICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4IF07IHRoZW4gbXYgLWYgJChJTlNUQUxMX1BBVEgpL3ZtbGludXggJChJTlNUQUxMX1BBVEgpL3ZtbGludXgub2xkOyBmaQorCWlmIFsgLWYgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAgXTsgdGhlbiBtdiAtZiAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm9sZDsgZmkKKwljYXQgdm1saW51eCA+ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4CisJY3AgU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcAorCWlmIFsgLXggL3NiaW4vbGlsbyBdOyB0aGVuIC9zYmluL2xpbG87IGVsc2UgL2V0Yy9saWxvL2luc3RhbGw7IGZpCisKK3pJbWFnZSBjb21wcmVzc2VkOiB2bWxpbnV4Lmd6CisKK3ZtbGludXguZ3o6IHZtbGludXgKKworaWZuZGVmIENPTkZJR19LR0RCCisJY3Agdm1saW51eCB2bWxpbnV4LnRtcAorCSQoU1RSSVApIHZtbGludXgudG1wCisJZ3ppcCAtOWMgdm1saW51eC50bXAgPnZtbGludXguZ3oKKwlybSB2bWxpbnV4LnRtcAorZWxzZQorCWd6aXAgLTljIHZtbGludXggPnZtbGludXguZ3oKK2VuZGlmCisKK2J6SW1hZ2U6IHZtbGludXguYnoyCisKK3ZtbGludXguYnoyOiB2bWxpbnV4CisKK2lmbmRlZiBDT05GSUdfS0dEQgorCWNwIHZtbGludXggdm1saW51eC50bXAKKwkkKFNUUklQKSB2bWxpbnV4LnRtcAorCWJ6aXAyIC0xYyB2bWxpbnV4LnRtcCA+dm1saW51eC5iejIKKwlybSB2bWxpbnV4LnRtcAorZWxzZQorCWJ6aXAyIC0xYyB2bWxpbnV4ID52bWxpbnV4LmJ6MgorZW5kaWYKKworcHJlcGFyZTogaW5jbHVkZS9hc20tJChBUkNIKS9vZmZzZXRzLmgKK0NMRUFOX0ZJTEVTICs9IGluY2x1ZGUvYXNtLSQoQVJDSCkvb2Zmc2V0cy5oCisKK2FyY2gvJChBUkNIKS9rZXJuZWwvYXNtLW9mZnNldHMuczogaW5jbHVkZS9hc20gaW5jbHVkZS9saW51eC92ZXJzaW9uLmggXAorCQkJCSAgIGluY2x1ZGUvY29uZmlnL01BUktFUgorCitpbmNsdWRlL2FzbS0kKEFSQ0gpL29mZnNldHMuaDogYXJjaC8kKEFSQ0gpL2tlcm5lbC9hc20tb2Zmc2V0cy5zCisJJChjYWxsIGZpbGVjaGssZ2VuLWFzbS1vZmZzZXRzKQorCithcmNoY2xlYW46CisJcm0gLWYgdm1saW51eC5neiB2bWxpbnV4LmJ6MgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL01ha2VmaWxlIGIvYXJjaC9tNjhrL2FtaWdhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDE1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvYW1pZ2Egc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0gY29uZmlnLm8gYW1paW50cy5vIGNpYS5vIGNoaXByYW0ubyBhbWlzb3VuZC5vIGFtaWdhX2tzeW1zLm8KKworb2JqLSQoQ09ORklHX0FNSUdBX1BDTUNJQSkJKz0gcGNtY2lhLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jIGIvYXJjaC9tNjhrL2FtaWdhL2FtaWdhX2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiZDg0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2Fody5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYWludHMuaD4KKyNpbmNsdWRlIDxhc20vYW1pcGNtY2lhLmg+CisKK2V4dGVybiB2b2xhdGlsZSB1X3Nob3J0IGFtaWdhX2F1ZGlvX21pbl9wZXJpb2Q7CitleHRlcm4gdV9zaG9ydCBhbWlnYV9hdWRpb19wZXJpb2Q7CisKKy8qCisgKiBBZGQgdGhpbmdzIGhlcmUgd2hlbiB5b3UgZmluZCB0aGUgbmVlZCBmb3IgaXQuCisgKi8KK0VYUE9SVF9TWU1CT0woYW1pZ2FfbW9kZWwpOworRVhQT1JUX1NZTUJPTChhbWlnYV9jaGlwc2V0KTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfaHdfcHJlc2VudCk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2VjbG9jayk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2NvbG9yY2xvY2spOworRVhQT1JUX1NZTUJPTChhbWlnYV9jaGlwX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcF9mcmVlKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcF9hdmFpbCk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfc2l6ZSk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2F1ZGlvX3BlcmlvZCk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2F1ZGlvX21pbl9wZXJpb2QpOworRVhQT1JUX1NZTUJPTChhbWlnYV9kb19pcnEpOworRVhQT1JUX1NZTUJPTChhbWlnYV9kb19pcnFfbGlzdCk7CisKKyNpZmRlZiBDT05GSUdfQU1JR0FfUENNQ0lBCisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc2V0KTsKKyAgRVhQT1JUX1NZTUJPTChwY21jaWFfY29weV90dXBsZSk7CisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX3Byb2dyYW1fdm9sdGFnZSk7CisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX2FjY2Vzc19zcGVlZCk7CisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX3dyaXRlX2VuYWJsZSk7CisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX3dyaXRlX2Rpc2FibGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1paW50cy5jIGIvYXJjaC9tNjhrL2FtaWdhL2FtaWludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWVkZjJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2FtaWludHMuYwpAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hbWlnYS9hbWlpbnRzLmMgLS0gQW1pZ2EgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogMTEvMDcvOTY6IHJld3JpdHRlbiBpbnRlcnJ1cHQgaGFuZGxpbmcsIGlycSBsaXN0cyBhcmUgZXhpc3RzIG5vdyBvbmx5IGZvcgorICogICAgICAgICAgIHRoaXMgc291cmNlcyB3aGVyZSBpdCBtYWtlcyBzZW5zZSAoVkVSVEIvUE9SVFMvRVhURVIpIGFuZCB5b3UgbXVzdAorICogICAgICAgICAgIGJlIGNhcmVmdWwgdGhhdCBkZXZfaWQgZm9yIHRoaXMgc291cmNlcyBpcyB1bmlxdWUgc2luY2UgdGhpcyB0aGUKKyAqICAgICAgICAgICBvbmx5IHBvc3NpYmlsaXR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGhhbmRsZXJzIGZvcgorICogICAgICAgICAgIGZyZWVfaXJxLiBpcnEgbGlzdHMgYWxzbyBoYXZlIGRpZmZlcmVudCBpcnEgZmxhZ3M6CisgKiAgICAgICAgICAgLSBJUlFfRkxHX0ZBU1Q6IGhhbmRsZXIgaXMgaW5zZXJ0ZWQgYXQgdG9wIG9mIGxpc3QgKGFmdGVyIG90aGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgaGFuZGxlcnMpCisgKiAgICAgICAgICAgLSBJUlFfRkxHX1NMT1c6IGhhbmRsZXIgaXMgaW5zZXJ0ZWQgYXQgYm90dG9tIG9mIGxpc3QgYW5kIGJlZm9yZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV5J3JlIGV4ZWN1dGVkIGlycSBsZXZlbCBpcyBzZXQgdG8gdGhlIHByZXZpb3VzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSwgYnV0IGhhbmRsZXJzIGRvbid0IG5lZWQgdG8gYmUgcmVlbnRyYW50LCBpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICByZWVudHJhbmNlIG9jY3VycmVkLCBzbG93IGhhbmRsZXJzIHdpbGwgYmUganVzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgYWdhaW4uCisgKiAgICAgICAgICAgVGhlIHdob2xlIGludGVycnVwdCBoYW5kbGluZyBmb3IgQ0lBcyBpcyBtb3ZlZCB0byBjaWEuYworICogICAgICAgICAgIC9Sb21hbiBaaXBwZWwKKyAqCisgKiAwNy8wOC85OTogcmV3YW1wIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgLSB3ZSBub3cgaGF2ZSB0d28gdHlwZXMgb2YKKyAqICAgICAgICAgICBpbnRlcnJ1cHRzLCBub3JtYWwgYW5kIGZhc3QgaGFuZGxlcnMsIGZhc3QgaGFuZGxlcnMgYmVpbmcKKyAqICAgICAgICAgICBtYXJrZWQgd2l0aCBTQV9JTlRFUlJVUFQgYW5kIHJ1bnMgd2l0aCBhbGwgb3RoZXIgaW50ZXJydXB0cworICogICAgICAgICAgIGRpc2FibGVkLiBOb3JtYWwgaW50ZXJydXB0cyBkaXNhYmxlIHRoZWlyIG93biBzb3VyY2UgYnV0CisgKiAgICAgICAgICAgcnVuIHdpdGggYWxsIG90aGVyIGludGVycnVwdCBzb3VyY2VzIGVuYWJsZWQuCisgKiAgICAgICAgICAgUE9SVFMgYW5kIEVYVEVSIGludGVycnVwdHMgYXJlIGFsd2F5cyBzaGFyZWQgZXZlbiBpZiB0aGUKKyAqICAgICAgICAgICBkcml2ZXJzIGRvIG5vdCBleHBsaWNpdGx5IG1hcmsgdGhpcyB3aGVuIGNhbGxpbmcKKyAqICAgICAgICAgICByZXF1ZXN0X2lycSB3aGljaCB0aGV5IHJlYWxseSBzaG91bGQgZG8uCisgKiAgICAgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB3YXkgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBvbiBhbGwKKyAqICAgICAgICAgICBvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBtYWtlcyBhIHRvbiBvZiBzZW5zZSBiZXNpZGVzCisgKiAgICAgICAgICAgaGF2aW5nIHRoZSBhZHZhbnRhZ2Ugb2YgbWFraW5nIGl0IGVhc2llciB0byBzaGFyZQorICogICAgICAgICAgIGRyaXZlcnMuCisgKiAgICAgICAgICAgL0plcworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2Fody5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYWludHMuaD4KKyNpbmNsdWRlIDxhc20vYW1pcGNtY2lhLmg+CisKK2V4dGVybiBpbnQgY2lhX3JlcXVlc3RfaXJxKHN0cnVjdCBjaWFiYXNlICpiYXNlLGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBjaWFfZnJlZV9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBjaWFfaW5pdF9JUlEoc3RydWN0IGNpYWJhc2UgKmJhc2UpOworZXh0ZXJuIGludCBjaWFfZ2V0X2lycV9saXN0KHN0cnVjdCBjaWFiYXNlICpiYXNlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApOworCisvKiBpcnEgbm9kZSB2YXJpYWJsZXMgZm9yIGFtaWdhIGludGVycnVwdCBzb3VyY2VzICovCitzdGF0aWMgaXJxX25vZGVfdCAqYW1pX2lycV9saXN0W0FNSV9TVERfSVJRU107CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBhbWlnYV9pbnRlbmFfdmFsc1tBTUlfU1REX0lSUVNdID0geworCVtJUlFfQU1JR0FfVkVSVEJdCT0gSUZfVkVSVEIsCisJW0lSUV9BTUlHQV9DT1BQRVJdCT0gSUZfQ09QRVIsCisJW0lSUV9BTUlHQV9BVUQwXQk9IElGX0FVRDAsCisJW0lSUV9BTUlHQV9BVUQxXQk9IElGX0FVRDEsCisJW0lSUV9BTUlHQV9BVUQyXQk9IElGX0FVRDIsCisJW0lSUV9BTUlHQV9BVUQzXQk9IElGX0FVRDMsCisJW0lSUV9BTUlHQV9CTElUXQk9IElGX0JMSVQsCisJW0lSUV9BTUlHQV9EU0tTWU5dCT0gSUZfRFNLU1lOLAorCVtJUlFfQU1JR0FfRFNLQkxLXQk9IElGX0RTS0JMSywKKwlbSVJRX0FNSUdBX1JCRl0JCT0gSUZfUkJGLAorCVtJUlFfQU1JR0FfVEJFXQkJPSBJRl9UQkUsCisJW0lSUV9BTUlHQV9TT0ZUXQk9IElGX1NPRlQsCisJW0lSUV9BTUlHQV9QT1JUU10JPSBJRl9QT1JUUywKKwlbSVJRX0FNSUdBX0VYVEVSXQk9IElGX0VYVEVSCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYW1pX3NlcnZlcnNbQU1JX1NURF9JUlFTXSA9IHsKKwlbSVJRX0FNSUdBX1ZFUlRCXQk9IDEsCisJW0lSUV9BTUlHQV9QT1JUU10JPSAxLAorCVtJUlFfQU1JR0FfRVhURVJdCT0gMQorfTsKKworc3RhdGljIHNob3J0IGFtaV9hYmxlY291bnRbQU1JX0lSUVNdOworCitzdGF0aWMgaXJxcmV0dXJuX3QgYW1pX2JhZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwludW1fc3B1cmlvdXMgKz0gMTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKy8qCisgKiB2b2lkIGFtaWdhX2luaXRfSVJRKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBhbWlnYSBJUlEgaGFuZGxpbmcgcm91dGluZXMuCisgKi8KKwordm9pZCBfX2luaXQgYW1pZ2FfaW5pdF9JUlEodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGluaXRpYWxpemUgaGFuZGxlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQU1JX1NURF9JUlFTOyBpKyspIHsKKwkJaWYgKGFtaV9zZXJ2ZXJzW2ldKSB7CisJCQlhbWlfaXJxX2xpc3RbaV0gPSBOVUxMOworCQl9IGVsc2UgeworCQkJYW1pX2lycV9saXN0W2ldID0gbmV3X2lycV9ub2RlKCk7CisJCQlhbWlfaXJxX2xpc3RbaV0tPmhhbmRsZXIgPSBhbWlfYmFkaW50OworCQkJYW1pX2lycV9saXN0W2ldLT5mbGFncyAgID0gMDsKKwkJCWFtaV9pcnFfbGlzdFtpXS0+ZGV2X2lkICA9IE5VTEw7CisJCQlhbWlfaXJxX2xpc3RbaV0tPmRldm5hbWUgPSBOVUxMOworCQkJYW1pX2lycV9saXN0W2ldLT5uZXh0ICAgID0gTlVMTDsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgQU1JX0lSUVM7IGkrKykKKwkJYW1pX2FibGVjb3VudFtpXSA9IDA7CisKKwkvKiB0dXJuIG9mZiBQQ01DSUEgaW50ZXJydXB0cyAqLworCWlmIChBTUlHQUhXX1BSRVNFTlQoUENNQ0lBKSkKKwkJZ2F5bGUuaW50ZW4gPSBHQVlMRV9JUlFfSURFOworCisJLyogdHVybiBvZmYgYWxsIGludGVycnVwdHMgYW5kIGVuYWJsZSB0aGUgbWFzdGVyIGludGVycnVwdCBiaXQgKi8KKwljdXN0b20uaW50ZW5hID0gMHg3ZmZmOworCWN1c3RvbS5pbnRyZXEgPSAweDdmZmY7CisJY3VzdG9tLmludGVuYSA9IElGX1NFVENMUiB8IElGX0lOVEVOOworCisJY2lhX2luaXRfSVJRKCZjaWFhX2Jhc2UpOworCWNpYV9pbml0X0lSUSgmY2lhYl9iYXNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYW1pZ2FfaW5zZXJ0X2lycShpcnFfbm9kZV90ICoqbGlzdCwgaXJxX25vZGVfdCAqbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlycV9ub2RlX3QgKmN1cjsKKworCWlmICghbm9kZS0+ZGV2X2lkKQorCQlwcmludGsoIiVzOiBXYXJuaW5nOiBkZXZfaWQgb2YgJXMgaXMgemVyb1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgbm9kZS0+ZGV2bmFtZSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljdXIgPSAqbGlzdDsKKworCWlmIChub2RlLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkgeworCQlpZiAobm9kZS0+ZmxhZ3MgJiBTQV9TSElSUSkKKwkJCXJldHVybiAtRUJVU1k7CisJCS8qCisJCSAqIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gb25lCisJCSAqLworCQl3aGlsZSAoY3VyICYmIGN1ci0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpIHsKKwkJCWxpc3QgPSAmY3VyLT5uZXh0OworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKGN1cikgeworCQkJbGlzdCA9ICZjdXItPm5leHQ7CisJCQljdXIgPSBjdXItPm5leHQ7CisJCX0KKwl9CisKKwlub2RlLT5uZXh0ID0gY3VyOworCSpsaXN0ID0gbm9kZTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFtaWdhX2RlbGV0ZV9pcnEoaXJxX25vZGVfdCAqKmxpc3QsIHZvaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlycV9ub2RlX3QgKm5vZGU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlmb3IgKG5vZGUgPSAqbGlzdDsgbm9kZTsgbGlzdCA9ICZub2RlLT5uZXh0LCBub2RlID0gKmxpc3QpIHsKKwkJaWYgKG5vZGUtPmRldl9pZCA9PSBkZXZfaWQpIHsKKwkJCSpsaXN0ID0gbm9kZS0+bmV4dDsKKwkJCS8qIE1hcmsgaXQgYXMgZnJlZS4gKi8KKwkJCW5vZGUtPmhhbmRsZXIgPSBOVUxMOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmludGsgKCIlczogdHJpZWQgdG8gcmVtb3ZlIGludmFsaWQgaXJxXG4iLCBfX0ZVTkNUSU9OX18pOworfQorCisvKgorICogYW1pZ2FfcmVxdWVzdF9pcnEgOiBhZGQgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgYSBwYXJ0aWN1bGFyCisgKiAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgc3BlY2lmaWMgaW50ZXJydXB0IHNvdXJjZS4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFkZGl0aW9uIHdhcyBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAuCisgKi8KKworaW50IGFtaWdhX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICAgIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlpcnFfbm9kZV90ICpub2RlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoaXJxID49IEFNSV9JUlFTKSB7CisJCXByaW50ayAoIiVzOiBVbmtub3duIElSUSAlZCBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0FVVE8pCisJCXJldHVybiBjcHVfcmVxdWVzdF9pcnEoaXJxIC0gSVJRX0FNSUdBX0FVVE8sIGhhbmRsZXIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9DSUFCKQorCQlyZXR1cm4gY2lhX3JlcXVlc3RfaXJxKCZjaWFiX2Jhc2UsIGlycSAtIElSUV9BTUlHQV9DSUFCLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIsIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQSkKKwkJcmV0dXJuIGNpYV9yZXF1ZXN0X2lycSgmY2lhYV9iYXNlLCBpcnEgLSBJUlFfQU1JR0FfQ0lBQSwKKwkJICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLCBmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKKworCS8qCisJICogSVJRX0FNSUdBX1BPUlRTICYgSVJRX0FNSUdBX0VYVEVSIGRlZmF1bHRzIHRvIHNoYXJlZCwKKwkgKiB3ZSBjb3VsZCBhZGQgYSBjaGVjayBoZXJlIGZvciB0aGUgU0FfU0hJUlEgZmxhZyBidXQgYWxsIGRyaXZlcnMKKwkgKiBzaG91bGQgYmUgYXdhcmUgb2Ygc2hhcmluZyBhbnl3YXkuCisJICovCisJaWYgKGFtaV9zZXJ2ZXJzW2lycV0pIHsKKwkJaWYgKCEobm9kZSA9IG5ld19pcnFfbm9kZSgpKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlub2RlLT5oYW5kbGVyID0gaGFuZGxlcjsKKwkJbm9kZS0+ZmxhZ3MgICA9IGZsYWdzOworCQlub2RlLT5kZXZfaWQgID0gZGV2X2lkOworCQlub2RlLT5kZXZuYW1lID0gZGV2bmFtZTsKKwkJbm9kZS0+bmV4dCAgICA9IE5VTEw7CisJCWVycm9yID0gYW1pZ2FfaW5zZXJ0X2lycSgmYW1pX2lycV9saXN0W2lycV0sIG5vZGUpOworCX0gZWxzZSB7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5oYW5kbGVyID0gaGFuZGxlcjsKKwkJYW1pX2lycV9saXN0W2lycV0tPmZsYWdzICAgPSBmbGFnczsKKwkJYW1pX2lycV9saXN0W2lycV0tPmRldl9pZCAgPSBkZXZfaWQ7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5kZXZuYW1lID0gZGV2bmFtZTsKKwl9CisKKwkvKiBlbmFibGUgdGhlIGludGVycnVwdCAqLworCWlmIChpcnEgPCBJUlFfQU1JR0FfUE9SVFMgJiYgIWFtaV9hYmxlY291bnRbaXJxXSkKKwkJY3VzdG9tLmludGVuYSA9IElGX1NFVENMUiB8IGFtaWdhX2ludGVuYV92YWxzW2lycV07CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgYW1pZ2FfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPj0gQU1JX0lSUVMpIHsKKwkJcHJpbnRrICgiJXM6IFVua25vd24gSVJRICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9BVVRPKQorCQljcHVfZnJlZV9pcnEoaXJxIC0gSVJRX0FNSUdBX0FVVE8sIGRldl9pZCk7CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9DSUFCKSB7CisJCWNpYV9mcmVlX2lycSgmY2lhYl9iYXNlLCBpcnEgLSBJUlFfQU1JR0FfQ0lBQiwgZGV2X2lkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0NJQUEpIHsKKwkJY2lhX2ZyZWVfaXJxKCZjaWFhX2Jhc2UsIGlycSAtIElSUV9BTUlHQV9DSUFBLCBkZXZfaWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFtaV9zZXJ2ZXJzW2lycV0pIHsKKwkJYW1pZ2FfZGVsZXRlX2lycSgmYW1pX2lycV9saXN0W2lycV0sIGRldl9pZCk7CisJCS8qIGlmIHNlcnZlciBsaXN0IGVtcHR5LCBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJaWYgKCFhbWlfaXJxX2xpc3RbaXJxXSAmJiBpcnEgPCBJUlFfQU1JR0FfUE9SVFMpCisJCQljdXN0b20uaW50ZW5hID0gYW1pZ2FfaW50ZW5hX3ZhbHNbaXJxXTsKKwl9IGVsc2UgeworCQlpZiAoYW1pX2lycV9saXN0W2lycV0tPmRldl9pZCAhPSBkZXZfaWQpCisJCQlwcmludGsoIiVzOiByZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgYW1pX2lycV9saXN0W2lycV0tPmRldm5hbWUpOworCQlhbWlfaXJxX2xpc3RbaXJxXS0+aGFuZGxlciA9IGFtaV9iYWRpbnQ7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5mbGFncyAgID0gMDsKKwkJYW1pX2lycV9saXN0W2lycV0tPmRldl9pZCAgPSBOVUxMOworCQlhbWlfaXJxX2xpc3RbaXJxXS0+ZGV2bmFtZSA9IE5VTEw7CisJCWN1c3RvbS5pbnRlbmEgPSBhbWlnYV9pbnRlbmFfdmFsc1tpcnFdOworCX0KK30KKworLyoKKyAqIEVuYWJsZS9kaXNhYmxlIGEgcGFydGljdWxhciBtYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2UuCisgKiBOb3RlIHRoYXQgdGhpcyBtYXkgYWZmZWN0IG90aGVyIGludGVycnVwdHMgaW4gY2FzZSBvZiBhIHNoYXJlZCBpbnRlcnJ1cHQuCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgYSBfdmVyeV8gc2hvcnQgdGltZSB0byBjaGFuZ2Ugc29tZQorICogaW50ZXJuYWwgZGF0YSwgdGhhdCBtYXkgbm90IGJlIGNoYW5nZWQgYnkgdGhlIGludGVycnVwdCBhdCB0aGUgc2FtZSB0aW1lLgorICogYW1pXyhlbmFibGV8ZGlzYWJsZSlfaXJxIGNhbGxzIG1heSBhbHNvIGJlIG5lc3RlZC4KKyAqLworCit2b2lkIGFtaWdhX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID49IEFNSV9JUlFTKSB7CisJCXByaW50aygiJXM6IFVua25vd24gSVJRICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoLS1hbWlfYWJsZWNvdW50W2lycV0pCisJCXJldHVybjsKKworCS8qIE5vIGFjdGlvbiBmb3IgYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0FVVE8peworCQlwcmludGsoIiVzOiBUcnlpbmcgdG8gZW5hYmxlIGF1dG8tdmVjdG9yIElSUSAlaVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxIC0gSVJRX0FNSUdBX0FVVE8pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQikgeworCQljaWFfc2V0X2lycSgmY2lhYl9iYXNlLCAoMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUIpKSk7CisJCWNpYV9hYmxlX2lycSgmY2lhYl9iYXNlLCBDSUFfSUNSX1NFVENMUiB8CisJCSAgICAgICAgICAgICAoMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUIpKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9DSUFBKSB7CisJCWNpYV9zZXRfaXJxKCZjaWFhX2Jhc2UsICgxIDw8IChpcnEgLSBJUlFfQU1JR0FfQ0lBQSkpKTsKKwkJY2lhX2FibGVfaXJxKCZjaWFhX2Jhc2UsIENJQV9JQ1JfU0VUQ0xSIHwKKwkJICAgICAgICAgICAgICgxIDw8IChpcnEgLSBJUlFfQU1JR0FfQ0lBQSkpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisJY3VzdG9tLmludGVuYSA9IElGX1NFVENMUiB8IGFtaWdhX2ludGVuYV92YWxzW2lycV07Cit9CisKK3ZvaWQgYW1pZ2FfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID49IEFNSV9JUlFTKSB7CisJCXByaW50aygiJXM6IFVua25vd24gSVJRICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYW1pX2FibGVjb3VudFtpcnFdKyspCisJCXJldHVybjsKKworCS8qIE5vIGFjdGlvbiBmb3IgYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0FVVE8pIHsKKwkJcHJpbnRrKCIlczogVHJ5aW5nIHRvIGRpc2FibGUgYXV0by12ZWN0b3IgSVJRICVpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEgLSBJUlFfQU1JR0FfQVVUTyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9DSUFCKSB7CisJCWNpYV9hYmxlX2lycSgmY2lhYl9iYXNlLCAxIDw8IChpcnEgLSBJUlFfQU1JR0FfQ0lBQikpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQSkgeworCQljaWFfYWJsZV9pcnEoJmNpYWFfYmFzZSwgMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUEpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLworCWN1c3RvbS5pbnRlbmEgPSBhbWlnYV9pbnRlbmFfdmFsc1tpcnFdOworfQorCitpbmxpbmUgdm9pZCBhbWlnYV9kb19pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSsrOworCWFtaV9pcnFfbGlzdFtpcnFdLT5oYW5kbGVyKGlycSwgYW1pX2lycV9saXN0W2lycV0tPmRldl9pZCwgZnApOworfQorCit2b2lkIGFtaWdhX2RvX2lycV9saXN0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpcnFfbm9kZV90ICpub2RlOworCisJa3N0YXRfY3B1KDApLmlycXNbU1lTX0lSUVMgKyBpcnFdKys7CisKKwljdXN0b20uaW50cmVxID0gYW1pZ2FfaW50ZW5hX3ZhbHNbaXJxXTsKKworCWZvciAobm9kZSA9IGFtaV9pcnFfbGlzdFtpcnFdOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkKKwkJbm9kZS0+aGFuZGxlcihpcnEsIG5vZGUtPmRldl9pZCwgZnApOworfQorCisvKgorICogVGhlIGJ1aWx0aW4gQW1pZ2EgaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXJzLgorICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbWlfaW50MShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnRzID0gY3VzdG9tLmludHJlcXIgJiBjdXN0b20uaW50ZW5hcjsKKworCS8qIGlmIHNlcmlhbCB0cmFuc21pdCBidWZmZXIgZW1wdHksIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfVEJFKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9UQkU7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfVEJFLCBmcCk7CisJfQorCisJLyogaWYgZmxvcHB5IGRpc2sgdHJhbnNmZXIgY29tcGxldGUsIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfRFNLQkxLKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9EU0tCTEs7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfRFNLQkxLLCBmcCk7CisJfQorCisJLyogaWYgc29mdHdhcmUgaW50ZXJydXB0IHNldCwgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9TT0ZUKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9TT0ZUOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX1NPRlQsIGZwKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYW1pX2ludDMoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJdW5zaWduZWQgc2hvcnQgaW50cyA9IGN1c3RvbS5pbnRyZXFyICYgY3VzdG9tLmludGVuYXI7CisKKwkvKiBpZiBhIGJsaXR0ZXIgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9CTElUKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9CTElUOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0JMSVQsIGZwKTsKKwl9CisKKwkvKiBpZiBhIGNvcHBlciBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0NPUEVSKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9DT1BFUjsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9DT1BQRVIsIGZwKTsKKwl9CisKKwkvKiBpZiBhIHZlcnRpY2FsIGJsYW5rIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfVkVSVEIpCisJCWFtaWdhX2RvX2lycV9saXN0KElSUV9BTUlHQV9WRVJUQiwgZnApOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGFtaV9pbnQ0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXVuc2lnbmVkIHNob3J0IGludHMgPSBjdXN0b20uaW50cmVxciAmIGN1c3RvbS5pbnRlbmFyOworCisJLyogaWYgYXVkaW8gMCBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0FVRDApIHsKKwkJY3VzdG9tLmludHJlcSA9IElGX0FVRDA7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfQVVEMCwgZnApOworCX0KKworCS8qIGlmIGF1ZGlvIDEgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9BVUQxKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9BVUQxOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0FVRDEsIGZwKTsKKwl9CisKKwkvKiBpZiBhdWRpbyAyIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfQVVEMikgeworCQljdXN0b20uaW50cmVxID0gSUZfQVVEMjsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9BVUQyLCBmcCk7CisJfQorCisJLyogaWYgYXVkaW8gMyBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0FVRDMpIHsKKwkJY3VzdG9tLmludHJlcSA9IElGX0FVRDM7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfQVVEMywgZnApOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbWlfaW50NShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnRzID0gY3VzdG9tLmludHJlcXIgJiBjdXN0b20uaW50ZW5hcjsKKworCS8qIGlmIHNlcmlhbCByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfUkJGKSB7CisJCS8qIGFja25vd2xlZGdlIG9mIElGX1JCRiBtdXN0IGJlIGRvbmUgYnkgdGhlIHNlcmlhbCBpbnRlcnJ1cHQgKi8KKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9SQkYsIGZwKTsKKwl9CisKKwkvKiBpZiBhIGRpc2sgc3luYyBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0RTS1NZTikgeworCQljdXN0b20uaW50cmVxID0gSUZfRFNLU1lOOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0RTS1NZTiwgZnApOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbWlfaW50NyhpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlwYW5pYyAoImxldmVsIDcgaW50ZXJydXB0IHJlY2VpdmVkXG4iKTsKK30KKworaXJxcmV0dXJuX3QgKCphbWlnYV9kZWZhdWx0X2hhbmRsZXJbU1lTX0lSUVNdKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikgPSB7CisJWzBdID0gYW1pX2JhZGludCwKKwlbMV0gPSBhbWlfaW50MSwKKwlbMl0gPSBhbWlfYmFkaW50LAorCVszXSA9IGFtaV9pbnQzLAorCVs0XSA9IGFtaV9pbnQ0LAorCVs1XSA9IGFtaV9pbnQ1LAorCVs2XSA9IGFtaV9iYWRpbnQsCisJWzddID0gYW1pX2ludDcKK307CisKK2ludCBzaG93X2FtaWdhX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCWludCBpOworCWlycV9ub2RlX3QgKm5vZGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQU1JX1NURF9JUlFTOyBpKyspIHsKKwkJaWYgKCEobm9kZSA9IGFtaV9pcnFfbGlzdFtpXSkpCisJCQljb250aW51ZTsKKwkJc2VxX3ByaW50ZihwLCAiYW1pICAlMmQ6ICUxMHUgIiwgaSwKKwkJICAgICAgICAgICAgICAga3N0YXRfY3B1KDApLmlycXNbU1lTX0lSUVMgKyBpXSk7CisJCWRvIHsKKwkJCWlmIChub2RlLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkKKwkJCQlzZXFfcHV0cyhwLCAiRiAiKTsKKwkJCWVsc2UKKwkJCQlzZXFfcHV0cyhwLCAiICAiKTsKKwkJCXNlcV9wcmludGYocCwgIiVzXG4iLCBub2RlLT5kZXZuYW1lKTsKKwkJCWlmICgobm9kZSA9IG5vZGUtPm5leHQpKQorCQkJCXNlcV9wdXRzKHAsICIgICAgICAgICAgICAgICAgICAgICIpOworCQl9IHdoaWxlIChub2RlKTsKKwl9CisKKwljaWFfZ2V0X2lycV9saXN0KCZjaWFhX2Jhc2UsIHApOworCWNpYV9nZXRfaXJxX2xpc3QoJmNpYWJfYmFzZSwgcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1pc291bmQuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNWQ5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvYW1pc291bmQuYwpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCisgKgorICogYW1pZ2Egc291bmQgZHJpdmVyIGZvciBMaW51eC9tNjhrCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKworc3RhdGljIHVuc2lnbmVkIHNob3J0ICpzbmRfZGF0YTsKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBzaW5lX2RhdGFbXSA9IHsKKwkwLCAgMzksICA3NSwgIDEwMywgIDEyMSwgIDEyNywgIDEyMSwgIDEwMywgIDc1LCAgMzksCisJMCwgLTM5LCAtNzUsIC0xMDMsIC0xMjEsIC0xMjcsIC0xMjEsIC0xMDMsIC03NSwgLTM5Cit9OworI2RlZmluZSBEQVRBX1NJWkUJKHNpemVvZihzaW5lX2RhdGEpL3NpemVvZihzaW5lX2RhdGFbMF0pKQorCisgICAgLyoKKyAgICAgKiBUaGUgbWluaW11bSBwZXJpb2QgZm9yIGF1ZGlvIG1heSBiZSBtb2RpZmllZCBieSB0aGUgZnJhbWUgYnVmZmVyCisgICAgICogZGV2aWNlIHNpbmNlIGl0IGRlcGVuZHMgb24gaHRvdGFsIChmb3IgT0NTL0VDUy9BR0EpCisgICAgICovCisKK3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGFtaWdhX2F1ZGlvX21pbl9wZXJpb2QgPSAxMjQ7IC8qIERlZmF1bHQgZm9yIHByZS1PQ1MgKi8KKworI2RlZmluZSBNQVhfUEVSSU9ECSg2NTUzNSkKKworCisgICAgLyoKKyAgICAgKglDdXJyZW50IHBlcmlvZCAoc2V0IGJ5IGRtYXNvdW5kLmMpCisgICAgICovCisKK3Vuc2lnbmVkIHNob3J0IGFtaWdhX2F1ZGlvX3BlcmlvZCA9IE1BWF9QRVJJT0Q7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsb2NrX2NvbnN0YW50OworCit2b2lkIF9faW5pdCBhbWlnYV9pbml0X3NvdW5kKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZWVwX3JlcyA9IHsgLm5hbWUgPSAiQmVlcCIgfTsKKworCXNuZF9kYXRhID0gYW1pZ2FfY2hpcF9hbGxvY19yZXMoc2l6ZW9mKHNpbmVfZGF0YSksICZiZWVwX3Jlcyk7CisJaWYgKCFzbmRfZGF0YSkgeworCQlwcmludGsgKEtFUk5fQ1JJVCAiYW1pZ2EgaW5pdF9zb3VuZDogZmFpbGVkIHRvIGFsbG9jYXRlIGNoaXBtZW1cbiIpOworCQlyZXR1cm47CisJfQorCW1lbWNweSAoc25kX2RhdGEsIHNpbmVfZGF0YSwgc2l6ZW9mKHNpbmVfZGF0YSkpOworCisJLyogc2V0dXAgZGl2aXNvciAqLworCWNsb2NrX2NvbnN0YW50ID0gKGFtaWdhX2NvbG9yY2xvY2srREFUQV9TSVpFLzIpL0RBVEFfU0laRTsKKworCS8qIHdpdGhvdXQgYW1pZmIsIHR1cm4gdmlkZW8gb2ZmIGFuZCBlbmFibGUgaGlnaCBxdWFsaXR5IHNvdW5kICovCisjaWZuZGVmIENPTkZJR19GQl9BTUlHQQorCWFtaWZiX3ZpZGVvX29mZigpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG5vc291bmQoIHVuc2lnbmVkIGxvbmcgaWdub3JlZCApOworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHNvdW5kX3RpbWVyID0gVElNRVJfSU5JVElBTElaRVIobm9zb3VuZCwgMCwgMCk7CisKK3ZvaWQgYW1pZ2FfbWtzb3VuZCggdW5zaWduZWQgaW50IGh6LCB1bnNpZ25lZCBpbnQgdGlja3MgKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXNuZF9kYXRhKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZGVsX3RpbWVyKCAmc291bmRfdGltZXIgKTsKKworCWlmIChoeiA+IDIwICYmIGh6IDwgMzI3NjcpIHsKKwkJdW5zaWduZWQgbG9uZyBwZXJpb2QgPSAoY2xvY2tfY29uc3RhbnQgLyBoeik7CisKKwkJaWYgKHBlcmlvZCA8IGFtaWdhX2F1ZGlvX21pbl9wZXJpb2QpCisJCQlwZXJpb2QgPSBhbWlnYV9hdWRpb19taW5fcGVyaW9kOworCQlpZiAocGVyaW9kID4gTUFYX1BFUklPRCkKKwkJCXBlcmlvZCA9IE1BWF9QRVJJT0Q7CisKKwkJLyogc2V0dXAgcG9pbnRlciB0byBkYXRhLCBwZXJpb2QsIGxlbmd0aCBhbmQgdm9sdW1lICovCisJCWN1c3RvbS5hdWRbMl0uYXVkbGMgPSBzbmRfZGF0YTsKKwkJY3VzdG9tLmF1ZFsyXS5hdWRsZW4gPSBzaXplb2Yoc2luZV9kYXRhKS8yOworCQljdXN0b20uYXVkWzJdLmF1ZHBlciA9ICh1bnNpZ25lZCBzaG9ydClwZXJpb2Q7CisJCWN1c3RvbS5hdWRbMl0uYXVkdm9sID0gMzI7IC8qIDUwJSBvZiBtYXh2b2wgKi8KKworCQlpZiAodGlja3MpIHsKKwkJCXNvdW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdGlja3M7CisJCQlhZGRfdGltZXIoICZzb3VuZF90aW1lciApOworCQl9CisKKwkJLyogdHVybiBvbiBETUEgZm9yIGF1ZGlvIGNoYW5uZWwgMiAqLworCQljdXN0b20uZG1hY29uID0gRE1BRl9TRVRDTFIgfCBETUFGX0FVRDI7CisKKwl9IGVsc2UKKwkJbm9zb3VuZCggMCApOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKK3N0YXRpYyB2b2lkIG5vc291bmQoIHVuc2lnbmVkIGxvbmcgaWdub3JlZCApCit7CisJLyogdHVybiBvZmYgRE1BIGZvciBhdWRpbyBjaGFubmVsIDIgKi8KKwljdXN0b20uZG1hY29uID0gRE1BRl9BVUQyOworCS8qIHJlc3RvcmUgcGVyaW9kIHRvIHByZXZpb3VzIHZhbHVlIGFmdGVyIGJlZXBpbmcgKi8KKwljdXN0b20uYXVkWzJdLmF1ZHBlciA9IGFtaWdhX2F1ZGlvX3BlcmlvZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jaGlwcmFtLmMgYi9hcmNoL202OGsvYW1pZ2EvY2hpcHJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGQ1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvY2hpcHJhbS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorKiogIGxpbnV4L2FtaWdhL2NoaXByYW0uYworKioKKyoqICAgICAgTW9kaWZpZWQgMDMtTWF5LTk0IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+CisqKiAgICAgICAgICAtIDY0LWJpdCBhbGlnbmVkIGFsbG9jYXRpb25zIGZvciBmdWxsIEFHQSBjb21wYXRpYmlsaXR5CisqKgorKioJUmV3cml0dGVuIDE1LzkvMjAwMCBieSBHZWVydCB0byB1c2UgcmVzb3VyY2UgbWFuYWdlbWVudAorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CisKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9zaXplOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNoaXByYW1fcmVzID0geworICAgIC5uYW1lID0gIkNoaXAgUkFNIiwgLnN0YXJ0ID0gQ0hJUF9QSFlTQUREUgorfTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNoaXBhdmFpbDsKKworCit2b2lkIF9faW5pdCBhbWlnYV9jaGlwX2luaXQodm9pZCkKK3sKKyAgICBpZiAoIUFNSUdBSFdfUFJFU0VOVChDSElQX1JBTSkpCisJcmV0dXJuOworCisjaWZuZGVmIENPTkZJR19BUFVTX0ZBU1RfRVhDRVBUCisgICAgLyoKKyAgICAgKiAgUmVtb3ZlIHRoZSBmaXJzdCA0IHBhZ2VzIHdoZXJlIFBQQyBleGNlcHRpb24gaGFuZGxlcnMgd2lsbCBiZSBsb2NhdGVkCisgICAgICovCisgICAgYW1pZ2FfY2hpcF9zaXplIC09IDB4NDAwMDsKKyNlbmRpZgorICAgIGNoaXByYW1fcmVzLmVuZCA9IGFtaWdhX2NoaXBfc2l6ZS0xOworICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmY2hpcHJhbV9yZXMpOworCisgICAgY2hpcGF2YWlsID0gYW1pZ2FfY2hpcF9zaXplOworfQorCisKK3ZvaWQgKmFtaWdhX2NoaXBfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOworCisgICAgLyogcm91bmQgdXAgKi8KKyAgICBzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jOiBhbGxvY2F0ZSAlbGQgYnl0ZXNcbiIsIHNpemUpOworI2VuZGlmCisgICAgcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKCFyZXMpCisJcmV0dXJuIE5VTEw7CisgICAgbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworICAgIHJlcy0+bmFtZSA9IG5hbWU7CisKKyAgICBpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJmNoaXByYW1fcmVzLCByZXMsIHNpemUsIDAsIFVJTlRfTUFYLCBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpIDwgMCkgeworCWtmcmVlKHJlcyk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNoaXBhdmFpbCAtPSBzaXplOworI2lmZGVmIERFQlVHCisgICAgcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jOiByZXR1cm5pbmcgJWx4XG4iLCByZXMtPnN0YXJ0KTsKKyNlbmRpZgorICAgIHJldHVybiAodm9pZCAqKVpUV09fVkFERFIocmVzLT5zdGFydCk7Cit9CisKKworICAgIC8qCisgICAgICogIFdhcm5pbmc6CisgICAgICogIGFtaWdhX2NoaXBfYWxsb2NfcmVzIGlzIG1lYW50IG9ubHkgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGFsbG9jYXRlCisgICAgICogIENoaXAgUkFNIGJlZm9yZSBrbWFsbG9jKCkgaXMgZnVuY3Rpb25hbC4gQXMgYSBjb25zZXF1ZW5jZSwgdGhvc2UKKyAgICAgKiAgZHJpdmVycyBtdXN0IG5vdCBmcmVlIHRoYXQgQ2hpcCBSQU0gYWZ0ZXJ3YXJkcy4KKyAgICAgKi8KKwordm9pZCAqIF9faW5pdCBhbWlnYV9jaGlwX2FsbG9jX3Jlcyh1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKyAgICAvKiByb3VuZCB1cCAqLworICAgIHNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworICAgIC8qIGRtZXNnIGludG8gY2hpcG1lbSBwcmVmZXJzIG1lbW9yeSBhdCB0aGUgc2FmZSBlbmQgKi8KKyAgICBzdGFydCA9IENISVBfUEhZU0FERFIgKyBjaGlwYXZhaWwgLSBzaXplOworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGsoImFtaWdhX2NoaXBfYWxsb2NfcmVzOiBhbGxvY2F0ZSAlbGQgYnl0ZXNcbiIsIHNpemUpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRlX3Jlc291cmNlKCZjaGlwcmFtX3JlcywgcmVzLCBzaXplLCBzdGFydCwgVUlOVF9NQVgsIFBBR0VfU0laRSwgTlVMTCwgTlVMTCkgPCAwKSB7CisJcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jX3JlczogZmlyc3QgYWxsb2MgZmFpbGVkIVxuIik7CisJaWYgKGFsbG9jYXRlX3Jlc291cmNlKCZjaGlwcmFtX3JlcywgcmVzLCBzaXplLCAwLCBVSU5UX01BWCwgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSA8IDApCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjaGlwYXZhaWwgLT0gc2l6ZTsKKyNpZmRlZiBERUJVRworICAgIHByaW50aygiYW1pZ2FfY2hpcF9hbGxvY19yZXM6IHJldHVybmluZyAlbHhcbiIsIHJlcy0+c3RhcnQpOworI2VuZGlmCisgICAgcmV0dXJuICh2b2lkICopWlRXT19WQUREUihyZXMtPnN0YXJ0KTsKK30KKwordm9pZCBhbWlnYV9jaGlwX2ZyZWUodm9pZCAqcHRyKQoreworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBaVFdPX1BBRERSKHB0cik7CisgICAgc3RydWN0IHJlc291cmNlICoqcCwgKnJlczsKKyAgICB1bnNpZ25lZCBsb25nIHNpemU7CisKKyAgICBmb3IgKHAgPSAmY2hpcHJhbV9yZXMuY2hpbGQ7IChyZXMgPSAqcCk7IHAgPSAmcmVzLT5zaWJsaW5nKSB7CisJaWYgKHJlcy0+c3RhcnQgIT0gc3RhcnQpCisJICAgIGNvbnRpbnVlOworCSpwID0gcmVzLT5zaWJsaW5nOworCXNpemUgPSByZXMtPmVuZC1zdGFydDsKKyNpZmRlZiBERUJVRworCXByaW50aygiYW1pZ2FfY2hpcF9mcmVlOiBmcmVlICVsZCBieXRlcyBhdCAlcFxuIiwgc2l6ZSwgcHRyKTsKKyNlbmRpZgorCWNoaXBhdmFpbCArPSBzaXplOworCWtmcmVlKHJlcyk7CisJcmV0dXJuOworICAgIH0KKyAgICBwcmludGsoImFtaWdhX2NoaXBfZnJlZTogdHJ5aW5nIHRvIGZyZWUgbm9uZXhpc3RlbnQgcmVnaW9uIGF0ICVwXG4iLCBwdHIpOworfQorCisKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9hdmFpbCh2b2lkKQoreworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJhbWlnYV9jaGlwX2F2YWlsIDogJWxkIGJ5dGVzXG4iLCBjaGlwYXZhaWwpOworI2VuZGlmCisJcmV0dXJuIGNoaXBhdmFpbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jaWEuYyBiL2FyY2gvbTY4ay9hbWlnYS9jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDU1NjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NpYS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9hbWlnYS9jaWEuYyAtIENJQSBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBSb21hbiBaaXBwZWwKKyAqCisgKiAgVGhlIGNvbmNlcHQgb2Ygc29tZSBmdW5jdGlvbnMgYmFzZXMgb24gdGhlIG9yaWdpbmFsIEFtaWdhIE9TIGZ1bmN0aW9uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaW50cy5oPgorCitzdHJ1Y3QgY2lhYmFzZSB7CisJdm9sYXRpbGUgc3RydWN0IENJQSAqY2lhOworCXVuc2lnbmVkIGNoYXIgaWNyX21hc2ssIGljcl9kYXRhOworCXVuc2lnbmVkIHNob3J0IGludF9tYXNrOworCWludCBoYW5kbGVyX2lycSwgY2lhX2lycSwgc2VydmVyX2lycTsKKwljaGFyICpuYW1lOworCWlycV9oYW5kbGVyX3QgaXJxX2xpc3RbQ0lBX0lSUVNdOworfSBjaWFhX2Jhc2UgPSB7CisJLmNpYQkJPSAmY2lhYSwKKwkuaW50X21hc2sJPSBJRl9QT1JUUywKKwkuaGFuZGxlcl9pcnEJPSBJUlFfQU1JR0FfQVVUT18yLAorCS5jaWFfaXJxCT0gSVJRX0FNSUdBX0NJQUEsCisJLnNlcnZlcl9pcnEJPSBJUlFfQU1JR0FfUE9SVFMsCisJLm5hbWUJCT0gIkNJQUEgaGFuZGxlciIKK30sIGNpYWJfYmFzZSA9IHsKKwkuY2lhCQk9ICZjaWFiLAorCS5pbnRfbWFzawk9IElGX0VYVEVSLAorCS5oYW5kbGVyX2lycQk9IElSUV9BTUlHQV9BVVRPXzYsCisJLmNpYV9pcnEJPSBJUlFfQU1JR0FfQ0lBQiwKKwkuc2VydmVyX2lycQk9IElSUV9BTUlHQV9FWFRFUiwKKwkubmFtZQkJPSAiQ0lBQiBoYW5kbGVyIgorfTsKKworLyoKKyAqICBDYXVzZSBvciBjbGVhciBDSUEgaW50ZXJydXB0cywgcmV0dXJuIG9sZCBpbnRlcnJ1cHQgc3RhdHVzLgorICovCisKK3Vuc2lnbmVkIGNoYXIgY2lhX3NldF9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwl1bnNpZ25lZCBjaGFyIG9sZDsKKworCW9sZCA9IChiYXNlLT5pY3JfZGF0YSB8PSBiYXNlLT5jaWEtPmljcik7CisJaWYgKG1hc2sgJiBDSUFfSUNSX1NFVENMUikKKwkJYmFzZS0+aWNyX2RhdGEgfD0gbWFzazsKKwllbHNlCisJCWJhc2UtPmljcl9kYXRhICY9IH5tYXNrOworCWlmIChiYXNlLT5pY3JfZGF0YSAmIGJhc2UtPmljcl9tYXNrKQorCQljdXN0b20uaW50cmVxID0gSUZfU0VUQ0xSIHwgYmFzZS0+aW50X21hc2s7CisJcmV0dXJuIG9sZCAmIGJhc2UtPmljcl9tYXNrOworfQorCisvKgorICogIEVuYWJsZSBvciBkaXNhYmxlIENJQSBpbnRlcnJ1cHRzLCByZXR1cm4gb2xkIGludGVycnVwdCBtYXNrLAorICogIGludGVycnVwdHMgd2lsbCBvbmx5IGJlIGVuYWJsZWQgaWYgYSBoYW5kbGVyIGV4aXN0cworICovCisKK3Vuc2lnbmVkIGNoYXIgY2lhX2FibGVfaXJxKHN0cnVjdCBjaWFiYXNlICpiYXNlLCB1bnNpZ25lZCBjaGFyIG1hc2spCit7CisJdW5zaWduZWQgY2hhciBvbGQsIHRtcDsKKwlpbnQgaTsKKworCW9sZCA9IGJhc2UtPmljcl9tYXNrOworCWJhc2UtPmljcl9kYXRhIHw9IGJhc2UtPmNpYS0+aWNyOworCWJhc2UtPmNpYS0+aWNyID0gbWFzazsKKwlpZiAobWFzayAmIENJQV9JQ1JfU0VUQ0xSKQorCQliYXNlLT5pY3JfbWFzayB8PSBtYXNrOworCWVsc2UKKwkJYmFzZS0+aWNyX21hc2sgJj0gfm1hc2s7CisJYmFzZS0+aWNyX21hc2sgJj0gQ0lBX0lDUl9BTEw7CisJZm9yIChpID0gMCwgdG1wID0gMTsgaSA8IENJQV9JUlFTOyBpKyssIHRtcCA8PD0gMSkgeworCQlpZiAoKHRtcCAmIGJhc2UtPmljcl9tYXNrKSAmJiAhYmFzZS0+aXJxX2xpc3RbaV0uaGFuZGxlcikgeworCQkJYmFzZS0+aWNyX21hc2sgJj0gfnRtcDsKKwkJCWJhc2UtPmNpYS0+aWNyID0gdG1wOworCQl9CisJfQorCWlmIChiYXNlLT5pY3JfZGF0YSAmIGJhc2UtPmljcl9tYXNrKQorCQljdXN0b20uaW50cmVxID0gSUZfU0VUQ0xSIHwgYmFzZS0+aW50X21hc2s7CisJcmV0dXJuIG9sZDsKK30KKworaW50IGNpYV9yZXF1ZXN0X2lycShzdHJ1Y3QgY2lhYmFzZSAqYmFzZSwgdW5zaWduZWQgaW50IGlycSwKKyAgICAgICAgICAgICAgICAgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIG1hc2s7CisKKwliYXNlLT5pcnFfbGlzdFtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCWJhc2UtPmlycV9saXN0W2lycV0uZmxhZ3MgICA9IGZsYWdzOworCWJhc2UtPmlycV9saXN0W2lycV0uZGV2X2lkICA9IGRldl9pZDsKKwliYXNlLT5pcnFfbGlzdFtpcnFdLmRldm5hbWUgPSBkZXZuYW1lOworCisJLyogZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwltYXNrID0gMSA8PCBpcnE7CisJY2lhX3NldF9pcnEoYmFzZSwgbWFzayk7CisJY2lhX2FibGVfaXJxKGJhc2UsIENJQV9JQ1JfU0VUQ0xSIHwgbWFzayk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2lhX2ZyZWVfaXJxKHN0cnVjdCBjaWFiYXNlICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGJhc2UtPmlycV9saXN0W2lycV0uZGV2X2lkICE9IGRldl9pZCkKKwkJcHJpbnRrKCIlczogcmVtb3ZpbmcgcHJvYmFibHkgd3JvbmcgSVJRICVpIGZyb20gJXNcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGJhc2UtPmNpYV9pcnEgKyBpcnEsCisJCSAgICAgICBiYXNlLT5pcnFfbGlzdFtpcnFdLmRldm5hbWUpOworCisJYmFzZS0+aXJxX2xpc3RbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwliYXNlLT5pcnFfbGlzdFtpcnFdLmZsYWdzICAgPSAwOworCisJY2lhX2FibGVfaXJxKGJhc2UsIDEgPDwgaXJxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGNpYV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXN0cnVjdCBjaWFiYXNlICpiYXNlID0gKHN0cnVjdCBjaWFiYXNlICopZGV2X2lkOworCWludCBtYWNoX2lycSwgaTsKKwl1bnNpZ25lZCBjaGFyIGludHM7CisKKwltYWNoX2lycSA9IGJhc2UtPmNpYV9pcnE7CisJaXJxID0gU1lTX0lSUVMgKyBtYWNoX2lycTsKKwlpbnRzID0gY2lhX3NldF9pcnEoYmFzZSwgQ0lBX0lDUl9BTEwpOworCWN1c3RvbS5pbnRyZXEgPSBiYXNlLT5pbnRfbWFzazsKKwlmb3IgKGkgPSAwOyBpIDwgQ0lBX0lSUVM7IGkrKywgaXJxKyssIG1hY2hfaXJxKyspIHsKKwkJaWYgKGludHMgJiAxKSB7CisJCQlrc3RhdF9jcHUoMCkuaXJxc1tpcnFdKys7CisJCQliYXNlLT5pcnFfbGlzdFtpXS5oYW5kbGVyKG1hY2hfaXJxLCBiYXNlLT5pcnFfbGlzdFtpXS5kZXZfaWQsIGZwKTsKKwkJfQorCQlpbnRzID4+PSAxOworCX0KKwlhbWlnYV9kb19pcnFfbGlzdChiYXNlLT5zZXJ2ZXJfaXJxLCBmcCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIF9faW5pdCBjaWFfaW5pdF9JUlEoc3RydWN0IGNpYWJhc2UgKmJhc2UpCit7CisJaW50IGk7CisKKwkvKiBpbml0IGlzciBoYW5kbGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBDSUFfSVJRUzsgaSsrKSB7CisJCWJhc2UtPmlycV9saXN0W2ldLmhhbmRsZXIgPSBOVUxMOworCQliYXNlLT5pcnFfbGlzdFtpXS5mbGFncyAgID0gMDsKKwl9CisKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgYW5kIHR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzICovCisJY2lhX3NldF9pcnEoYmFzZSwgQ0lBX0lDUl9BTEwpOworCWNpYV9hYmxlX2lycShiYXNlLCBDSUFfSUNSX0FMTCk7CisKKwkvKiBpbnN0YWxsIENJQSBoYW5kbGVyICovCisJcmVxdWVzdF9pcnEoYmFzZS0+aGFuZGxlcl9pcnEsIGNpYV9oYW5kbGVyLCAwLCBiYXNlLT5uYW1lLCBiYXNlKTsKKworCWN1c3RvbS5pbnRlbmEgPSBJRl9TRVRDTFIgfCBiYXNlLT5pbnRfbWFzazsKK30KKworaW50IGNpYV9nZXRfaXJxX2xpc3Qoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHN0cnVjdCBzZXFfZmlsZSAqcCkKK3sKKwlpbnQgaSwgajsKKworCWogPSBiYXNlLT5jaWFfaXJxOworCWZvciAoaSA9IDA7IGkgPCBDSUFfSVJRUzsgaSsrKSB7CisJCXNlcV9wcmludGYocCwgImNpYSAgJTJkOiAlMTBkICIsIGogKyBpLAorCQkJICAgICAgIGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaiArIGldKTsKKwkJc2VxX3B1dHMocCwgIiAgIik7CisJCXNlcV9wcmludGYocCwgIiVzXG4iLCBiYXNlLT5pcnFfbGlzdFtpXS5kZXZuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3NWUxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwpAQCAtMCwwICsxLDEwMDcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MyBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIEFtaWdhIHN0dWZmCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2lmZGVmIENPTkZJR19aT1JSTworI2luY2x1ZGUgPGxpbnV4L3pvcnJvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaW50cy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKwordW5zaWduZWQgbG9uZyBhbWlnYV9tb2RlbDsKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfZWNsb2NrOwordW5zaWduZWQgbG9uZyBhbWlnYV9tYXN0ZXJjbG9jazsKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY29sb3JjbG9jazsKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcHNldDsKK3Vuc2lnbmVkIGNoYXIgYW1pZ2FfdmJsYW5rOwordW5zaWduZWQgY2hhciBhbWlnYV9wc2ZyZXE7CitzdHJ1Y3QgYW1pZ2FfaHdfcHJlc2VudCBhbWlnYV9od19wcmVzZW50OworCitzdGF0aWMgY2hhciBzX2E1MDBbXSBfX2luaXRkYXRhID0gIkE1MDAiOworc3RhdGljIGNoYXIgc19hNTAwcFtdIF9faW5pdGRhdGEgPSAiQTUwMCsiOworc3RhdGljIGNoYXIgc19hNjAwW10gX19pbml0ZGF0YSA9ICJBNjAwIjsKK3N0YXRpYyBjaGFyIHNfYTEwMDBbXSBfX2luaXRkYXRhID0gIkExMDAwIjsKK3N0YXRpYyBjaGFyIHNfYTEyMDBbXSBfX2luaXRkYXRhID0gIkExMjAwIjsKK3N0YXRpYyBjaGFyIHNfYTIwMDBbXSBfX2luaXRkYXRhID0gIkEyMDAwIjsKK3N0YXRpYyBjaGFyIHNfYTI1MDBbXSBfX2luaXRkYXRhID0gIkEyNTAwIjsKK3N0YXRpYyBjaGFyIHNfYTMwMDBbXSBfX2luaXRkYXRhID0gIkEzMDAwIjsKK3N0YXRpYyBjaGFyIHNfYTMwMDB0W10gX19pbml0ZGF0YSA9ICJBMzAwMFQiOworc3RhdGljIGNoYXIgc19hMzAwMHBbXSBfX2luaXRkYXRhID0gIkEzMDAwKyI7CitzdGF0aWMgY2hhciBzX2E0MDAwW10gX19pbml0ZGF0YSA9ICJBNDAwMCI7CitzdGF0aWMgY2hhciBzX2E0MDAwdFtdIF9faW5pdGRhdGEgPSAiQTQwMDBUIjsKK3N0YXRpYyBjaGFyIHNfY2R0dltdIF9faW5pdGRhdGEgPSAiQ0RUViI7CitzdGF0aWMgY2hhciBzX2NkMzJbXSBfX2luaXRkYXRhID0gIkNEMzIiOworc3RhdGljIGNoYXIgc19kcmFjb1tdIF9faW5pdGRhdGEgPSAiRHJhY28iOworc3RhdGljIGNoYXIgKmFtaWdhX21vZGVsc1tdIF9faW5pdGRhdGEgPSB7CisgICAgW0FNSV81MDAtQU1JXzUwMF0JCT0gc19hNTAwLAorICAgIFtBTUlfNTAwUExVUy1BTUlfNTAwXQk9IHNfYTUwMHAsCisgICAgW0FNSV82MDAtQU1JXzUwMF0JCT0gc19hNjAwLAorICAgIFtBTUlfMTAwMC1BTUlfNTAwXQkJPSBzX2ExMDAwLAorICAgIFtBTUlfMTIwMC1BTUlfNTAwXQkJPSBzX2ExMjAwLAorICAgIFtBTUlfMjAwMC1BTUlfNTAwXQkJPSBzX2EyMDAwLAorICAgIFtBTUlfMjUwMC1BTUlfNTAwXQkJPSBzX2EyNTAwLAorICAgIFtBTUlfMzAwMC1BTUlfNTAwXQkJPSBzX2EzMDAwLAorICAgIFtBTUlfMzAwMFQtQU1JXzUwMF0JCT0gc19hMzAwMHQsCisgICAgW0FNSV8zMDAwUExVUy1BTUlfNTAwXQk9IHNfYTMwMDBwLAorICAgIFtBTUlfNDAwMC1BTUlfNTAwXQkJPSBzX2E0MDAwLAorICAgIFtBTUlfNDAwMFQtQU1JXzUwMF0JCT0gc19hNDAwMHQsCisgICAgW0FNSV9DRFRWLUFNSV81MDBdCQk9IHNfY2R0diwKKyAgICBbQU1JX0NEMzItQU1JXzUwMF0JCT0gc19jZDMyLAorICAgIFtBTUlfRFJBQ08tQU1JXzUwMF0JCT0gc19kcmFjbywKK307CisKK3N0YXRpYyBjaGFyIGFtaWdhX21vZGVsX25hbWVbMTNdID0gIkFtaWdhICI7CisKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CisKK3N0YXRpYyB2b2lkIGFtaWdhX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworLyogYW1pZ2Egc3BlY2lmaWMgaXJxIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgYW1pZ2FfaW5pdF9JUlEgKHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90ICgqYW1pZ2FfZGVmYXVsdF9oYW5kbGVyW10pIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaW50IGFtaWdhX3JlcXVlc3RfaXJxICh1bnNpZ25lZCBpbnQgaXJxLAorCQkJICAgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJICAgICAgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIGFtaWdhX2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgYW1pZ2FfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGFtaWdhX2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgYW1pZ2FfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKK3N0YXRpYyBpbnQgYW1pZ2FfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKK2V4dGVybiBpbnQgc2hvd19hbWlnYV9pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKKy8qIGFtaWdhIHNwZWNpZmljIHRpbWVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYW1pZ2FfZ2V0dGltZW9mZnNldCAodm9pZCk7CitzdGF0aWMgaW50IGEzMDAwX2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK3N0YXRpYyBpbnQgYTIwMDBfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworc3RhdGljIGludCBhbWlnYV9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGFtaWdhX2dldF9zcyAodm9pZCk7CitleHRlcm4gdm9pZCBhbWlnYV9ta3NvdW5kKCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCB0aWNrcyApOworI2lmZGVmIENPTkZJR19BTUlHQV9GTE9QUFkKK2V4dGVybiB2b2lkIGFtaWdhX2Zsb3BweV9zZXR1cChjaGFyICosIGludCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgYW1pZ2FfcmVzZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgYW1pZ2FfaW5pdF9zb3VuZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGFtaWdhX3NhdmVrbXNnX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBhbWlnYV9tZW1fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKmIsCisJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCk7Cit2b2lkIGFtaWdhX3NlcmlhbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgYW1pZ2FfZGVidWdfaW5pdCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBhbWlnYV9oZWFydGJlYXQoaW50IG9uKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYW1pZ2FfY29uc29sZV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImRlYnVnIiwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0JLTEsCit9OworCisKKyAgICAvKgorICAgICAqICBNb3RoZXJib2FyZCBSZXNvdXJjZXMgcHJlc2VudCBpbiBhbGwgQW1pZ2EgbW9kZWxzCisgICAgICovCisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIHN0cnVjdCByZXNvdXJjZSBfY2lhYiwgX2NpYWEsIF9jdXN0b20sIF9raWNrc3RhcnQ7Cit9IG1iX3Jlc291cmNlcyA9IHsKKyAgICAuX2NpYWIgPSB7CisJLm5hbWUgPSAiQ0lBIEIiLCAuc3RhcnQgPSAweDAwYmZkMDAwLCAuZW5kID0gMHgwMGJmZGZmZgorICAgIH0sCisgICAgLl9jaWFhID0geworCS5uYW1lID0gIkNJQSBBIiwgLnN0YXJ0ID0gMHgwMGJmZTAwMCwgLmVuZCA9IDB4MDBiZmVmZmYKKyAgICB9LAorICAgIC5fY3VzdG9tID0geworCS5uYW1lID0gIkN1c3RvbSBJL08iLCAuc3RhcnQgPSAweDAwZGZmMDAwLCAuZW5kID0gMHgwMGRmZmZmZgorICAgIH0sCisgICAgLl9raWNrc3RhcnQgPSB7CisJLm5hbWUgPSAiS2lja3N0YXJ0IFJPTSIsIC5zdGFydCA9IDB4MDBmODAwMDAsIC5lbmQgPSAweDAwZmZmZmZmCisgICAgfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2UgPSB7CisgICAgLnN0YXJ0ID0gMHgwMGRjMDAwMCwgLmVuZCA9IDB4MDBkY2ZmZmYKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmFtX3Jlc291cmNlW05VTV9NRU1JTkZPXTsKKworCisgICAgLyoKKyAgICAgKiAgUGFyc2UgYW4gQW1pZ2Etc3BlY2lmaWMgcmVjb3JkIGluIHRoZSBib290aW5mbworICAgICAqLworCitpbnQgYW1pZ2FfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjb3JkKQoreworICAgIGludCB1bmtub3duID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nICpkYXRhID0gcmVjb3JkLT5kYXRhOworCisgICAgc3dpdGNoIChyZWNvcmQtPnRhZykgeworCWNhc2UgQklfQU1JR0FfTU9ERUw6CisJICAgIGFtaWdhX21vZGVsID0gKmRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9FQ0xPQ0s6CisJICAgIGFtaWdhX2VjbG9jayA9ICpkYXRhOworCSAgICBicmVhazsKKworCWNhc2UgQklfQU1JR0FfQ0hJUFNFVDoKKwkgICAgYW1pZ2FfY2hpcHNldCA9ICpkYXRhOworCSAgICBicmVhazsKKworCWNhc2UgQklfQU1JR0FfQ0hJUF9TSVpFOgorCSAgICBhbWlnYV9jaGlwX3NpemUgPSAqKGNvbnN0IGludCAqKWRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9WQkxBTks6CisJICAgIGFtaWdhX3ZibGFuayA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9QU0ZSRVE6CisJICAgIGFtaWdhX3BzZnJlcSA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9BVVRPQ09OOgorI2lmZGVmIENPTkZJR19aT1JSTworCSAgICBpZiAoem9ycm9fbnVtX2F1dG9jb24gPCBaT1JST19OVU1fQVVUTykgeworCQljb25zdCBzdHJ1Y3QgQ29uZmlnRGV2ICpjZCA9IChzdHJ1Y3QgQ29uZmlnRGV2ICopZGF0YTsKKwkJc3RydWN0IHpvcnJvX2RldiAqZGV2ID0gJnpvcnJvX2F1dG9jb25bem9ycm9fbnVtX2F1dG9jb24rK107CisJCWRldi0+cm9tID0gY2QtPmNkX1JvbTsKKwkJZGV2LT5zbG90YWRkciA9IGNkLT5jZF9TbG90QWRkcjsKKwkJZGV2LT5zbG90c2l6ZSA9IGNkLT5jZF9TbG90U2l6ZTsKKwkJZGV2LT5yZXNvdXJjZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKWNkLT5jZF9Cb2FyZEFkZHI7CisJCWRldi0+cmVzb3VyY2UuZW5kID0gZGV2LT5yZXNvdXJjZS5zdGFydCtjZC0+Y2RfQm9hcmRTaXplLTE7CisJICAgIH0gZWxzZQorCQlwcmludGsoImFtaWdhX3BhcnNlX2Jvb3RpbmZvOiB0b28gbWFueSBBdXRvQ29uZmlnIGRldmljZXNcbiIpOworI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLworCSAgICBicmVhazsKKworCWNhc2UgQklfQU1JR0FfU0VSUEVSOgorCSAgICAvKiBzZXJpYWwgcG9ydCBwZXJpb2Q6IGlnbm9yZWQgaGVyZSAqLworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIHVua25vd24gPSAxOworICAgIH0KKyAgICByZXR1cm4odW5rbm93bik7Cit9CisKKyAgICAvKgorICAgICAqICBJZGVudGlmeSBidWlsdGluIGhhcmR3YXJlCisgICAgICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbWlnYV9pZGVudGlmeSh2b2lkKQoreworICAvKiBGaWxsIGluIHNvbWUgZGVmYXVsdCB2YWx1ZXMsIGlmIG5lY2Vzc2FyeSAqLworICBpZiAoYW1pZ2FfZWNsb2NrID09IDApCisgICAgYW1pZ2FfZWNsb2NrID0gNzA5Mzc5OworCisgIG1lbXNldCgmYW1pZ2FfaHdfcHJlc2VudCwgMCwgc2l6ZW9mKGFtaWdhX2h3X3ByZXNlbnQpKTsKKworICBwcmludGsoIkFtaWdhIGhhcmR3YXJlIGZvdW5kOiAiKTsKKyAgaWYgKGFtaWdhX21vZGVsID49IEFNSV81MDAgJiYgYW1pZ2FfbW9kZWwgPD0gQU1JX0RSQUNPKSB7CisgICAgcHJpbnRrKCJbJXNdICIsIGFtaWdhX21vZGVsc1thbWlnYV9tb2RlbC1BTUlfNTAwXSk7CisgICAgc3RyY2F0KGFtaWdhX21vZGVsX25hbWUsIGFtaWdhX21vZGVsc1thbWlnYV9tb2RlbC1BTUlfNTAwXSk7CisgIH0KKworICBzd2l0Y2goYW1pZ2FfbW9kZWwpIHsKKyAgY2FzZSBBTUlfVU5LTk9XTjoKKyAgICBnb3RvIEdlbmVyaWM7CisKKyAgY2FzZSBBTUlfNjAwOgorICBjYXNlIEFNSV8xMjAwOgorICAgIEFNSUdBSFdfU0VUKEExMjAwX0lERSk7CisgICAgQU1JR0FIV19TRVQoUENNQ0lBKTsKKyAgY2FzZSBBTUlfNTAwOgorICBjYXNlIEFNSV81MDBQTFVTOgorICBjYXNlIEFNSV8xMDAwOgorICBjYXNlIEFNSV8yMDAwOgorICBjYXNlIEFNSV8yNTAwOgorICAgIEFNSUdBSFdfU0VUKEEyMDAwX0NMSyk7CS8qIElzIHRoaXMgY29ycmVjdCBmb3IgYWxsIG1vZGVscz8gKi8KKyAgICBnb3RvIEdlbmVyaWM7CisKKyAgY2FzZSBBTUlfMzAwMDoKKyAgY2FzZSBBTUlfMzAwMFQ6CisgICAgQU1JR0FIV19TRVQoQU1CRVJfRkYpOworICAgIEFNSUdBSFdfU0VUKE1BR0lDX1JFS0lDSyk7CisgICAgLyogZmFsbCB0aHJvdWdoICovCisgIGNhc2UgQU1JXzMwMDBQTFVTOgorICAgIEFNSUdBSFdfU0VUKEEzMDAwX1NDU0kpOworICAgIEFNSUdBSFdfU0VUKEEzMDAwX0NMSyk7CisgICAgQU1JR0FIV19TRVQoWk9SUk8zKTsKKyAgICBnb3RvIEdlbmVyaWM7CisKKyAgY2FzZSBBTUlfNDAwMFQ6CisgICAgQU1JR0FIV19TRVQoQTQwMDBfU0NTSSk7CisgICAgLyogZmFsbCB0aHJvdWdoICovCisgIGNhc2UgQU1JXzQwMDA6CisgICAgQU1JR0FIV19TRVQoQTQwMDBfSURFKTsKKyAgICBBTUlHQUhXX1NFVChBMzAwMF9DTEspOworICAgIEFNSUdBSFdfU0VUKFpPUlJPMyk7CisgICAgZ290byBHZW5lcmljOworCisgIGNhc2UgQU1JX0NEVFY6CisgIGNhc2UgQU1JX0NEMzI6CisgICAgQU1JR0FIV19TRVQoQ0RfUk9NKTsKKyAgICBBTUlHQUhXX1NFVChBMjAwMF9DTEspOyAgICAgICAgICAgICAvKiBJcyB0aGlzIGNvcnJlY3Q/ICovCisgICAgZ290byBHZW5lcmljOworCisgIEdlbmVyaWM6CisgICAgQU1JR0FIV19TRVQoQU1JX1ZJREVPKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfQkxJVFRFUik7CisgICAgQU1JR0FIV19TRVQoQU1JX0FVRElPKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfRkxPUFBZKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfS0VZQk9BUkQpOworICAgIEFNSUdBSFdfU0VUKEFNSV9NT1VTRSk7CisgICAgQU1JR0FIV19TRVQoQU1JX1NFUklBTCk7CisgICAgQU1JR0FIV19TRVQoQU1JX1BBUkFMTEVMKTsKKyAgICBBTUlHQUhXX1NFVChDSElQX1JBTSk7CisgICAgQU1JR0FIV19TRVQoUEFVTEEpOworCisgICAgc3dpdGNoKGFtaWdhX2NoaXBzZXQpIHsKKyAgICBjYXNlIENTX09DUzoKKyAgICBjYXNlIENTX0VDUzoKKyAgICBjYXNlIENTX0FHQToKKyAgICAgIHN3aXRjaCAoY3VzdG9tLmRlbmlzZWlkICYgMHhmKSB7CisgICAgICBjYXNlIDB4MGM6CisJQU1JR0FIV19TRVQoREVOSVNFX0hSKTsKKwlicmVhazsKKyAgICAgIGNhc2UgMHgwODoKKwlBTUlHQUhXX1NFVChMSVNBKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBBTUlHQUhXX1NFVChERU5JU0UpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHN3aXRjaCAoKGN1c3RvbS52cG9zcj4+OCkgJiAweDdmKSB7CisgICAgY2FzZSAweDAwOgorICAgICAgQU1JR0FIV19TRVQoQUdOVVNfUEFMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMHgxMDoKKyAgICAgIEFNSUdBSFdfU0VUKEFHTlVTX05UU0MpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDIwOgorICAgIGNhc2UgMHgyMToKKyAgICAgIEFNSUdBSFdfU0VUKEFHTlVTX0hSX1BBTCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDB4MzA6CisgICAgY2FzZSAweDMxOgorICAgICAgQU1JR0FIV19TRVQoQUdOVVNfSFJfTlRTQyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDB4MjI6CisgICAgY2FzZSAweDIzOgorICAgICAgQU1JR0FIV19TRVQoQUxJQ0VfUEFMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMHgzMjoKKyAgICBjYXNlIDB4MzM6CisgICAgICBBTUlHQUhXX1NFVChBTElDRV9OVFNDKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBBTUlHQUhXX1NFVChaT1JSTyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBBTUlfRFJBQ086CisgICAgcGFuaWMoIk5vIHN1cHBvcnQgZm9yIERyYWNvIHlldCIpOworCisgIGRlZmF1bHQ6CisgICAgcGFuaWMoIlVua25vd24gQW1pZ2EgTW9kZWwiKTsKKyAgfQorCisjZGVmaW5lIEFNSUdBSFdfQU5OT1VOQ0UobmFtZSwgc3RyKQkJCVwKKyAgaWYgKEFNSUdBSFdfUFJFU0VOVChuYW1lKSkJCQkJXAorICAgIHByaW50ayhzdHIpCisKKyAgQU1JR0FIV19BTk5PVU5DRShBTUlfVklERU8sICJWSURFTyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTUlfQkxJVFRFUiwgIkJMSVRURVIgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQU1CRVJfRkYsICJBTUJFUl9GRiAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTUlfQVVESU8sICJBVURJTyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTUlfRkxPUFBZLCAiRkxPUFBZICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEEzMDAwX1NDU0ksICJBMzAwMF9TQ1NJICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEE0MDAwX1NDU0ksICJBNDAwMF9TQ1NJICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEExMjAwX0lERSwgIkExMjAwX0lERSAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBNDAwMF9JREUsICJBNDAwMF9JREUgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQ0RfUk9NLCAiQ0RfUk9NICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9LRVlCT0FSRCwgIktFWUJPQVJEICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9NT1VTRSwgIk1PVVNFICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9TRVJJQUwsICJTRVJJQUwgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX1BBUkFMTEVMLCAiUEFSQUxMRUwgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQTIwMDBfQ0xLLCAiQTIwMDBfQ0xLICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEEzMDAwX0NMSywgIkEzMDAwX0NMSyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShDSElQX1JBTSwgIkNISVBfUkFNICIpOworICBBTUlHQUhXX0FOTk9VTkNFKFBBVUxBLCAiUEFVTEEgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoREVOSVNFLCAiREVOSVNFICIpOworICBBTUlHQUhXX0FOTk9VTkNFKERFTklTRV9IUiwgIkRFTklTRV9IUiAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShMSVNBLCAiTElTQSAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBR05VU19QQUwsICJBR05VU19QQUwgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQUdOVVNfTlRTQywgIkFHTlVTX05UU0MgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQUdOVVNfSFJfUEFMLCAiQUdOVVNfSFJfUEFMICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFHTlVTX0hSX05UU0MsICJBR05VU19IUl9OVFNDICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFMSUNFX1BBTCwgIkFMSUNFX1BBTCAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTElDRV9OVFNDLCAiQUxJQ0VfTlRTQyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShNQUdJQ19SRUtJQ0ssICJNQUdJQ19SRUtJQ0sgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoUENNQ0lBLCAiUENNQ0lBICIpOworICBpZiAoQU1JR0FIV19QUkVTRU5UKFpPUlJPKSkKKyAgICBwcmludGsoIlpPUlJPJXMgIiwgQU1JR0FIV19QUkVTRU5UKFpPUlJPMykgPyAiMyIgOiAiIik7CisgIHByaW50aygiXG4iKTsKKworI3VuZGVmIEFNSUdBSFdfQU5OT1VOQ0UKK30KKworICAgIC8qCisgICAgICogIFNldHVwIHRoZSBBbWlnYSBjb25maWd1cmF0aW9uIGluZm8KKyAgICAgKi8KKwordm9pZCBfX2luaXQgY29uZmlnX2FtaWdhKHZvaWQpCit7CisgIGludCBpOworCisgIGFtaWdhX2RlYnVnX2luaXQoKTsKKyAgYW1pZ2FfaWRlbnRpZnkoKTsKKworICAvKiBZdWssIHdlIGRvbid0IGhhdmUgUENJIG1lbW9yeSAqLworICBpb21lbV9yZXNvdXJjZS5uYW1lID0gIk1lbW9yeSI7CisgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICYoKHN0cnVjdCByZXNvdXJjZSAqKSZtYl9yZXNvdXJjZXMpW2ldKTsKKworICBtYWNoX3NjaGVkX2luaXQgICAgICA9IGFtaWdhX3NjaGVkX2luaXQ7CisgIG1hY2hfaW5pdF9JUlEgICAgICAgID0gYW1pZ2FfaW5pdF9JUlE7CisgIG1hY2hfZGVmYXVsdF9oYW5kbGVyID0gJmFtaWdhX2RlZmF1bHRfaGFuZGxlcjsKKyAgbWFjaF9yZXF1ZXN0X2lycSAgICAgPSBhbWlnYV9yZXF1ZXN0X2lycTsKKyAgbWFjaF9mcmVlX2lycSAgICAgICAgPSBhbWlnYV9mcmVlX2lycTsKKyAgZW5hYmxlX2lycSAgICAgICAgICAgPSBhbWlnYV9lbmFibGVfaXJxOworICBkaXNhYmxlX2lycSAgICAgICAgICA9IGFtaWdhX2Rpc2FibGVfaXJxOworICBtYWNoX2dldF9tb2RlbCAgICAgICA9IGFtaWdhX2dldF9tb2RlbDsKKyAgbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCA9IGFtaWdhX2dldF9oYXJkd2FyZV9saXN0OworICBtYWNoX2dldF9pcnFfbGlzdCAgICA9IHNob3dfYW1pZ2FfaW50ZXJydXB0czsKKyAgbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBhbWlnYV9nZXR0aW1lb2Zmc2V0OworICBpZiAoQU1JR0FIV19QUkVTRU5UKEEzMDAwX0NMSykpeworICAgIG1hY2hfaHdjbGsgICAgICAgICA9IGEzMDAwX2h3Y2xrOworICAgIHJ0Y19yZXNvdXJjZS5uYW1lID0gIkEzMDAwIFJUQyI7CisgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZydGNfcmVzb3VyY2UpOworICB9CisgIGVsc2V7IC8qIGlmIChBTUlHQUhXX1BSRVNFTlQoQTIwMDBfQ0xLKSkgKi8KKyAgICBtYWNoX2h3Y2xrICAgICAgICAgPSBhMjAwMF9od2NsazsKKyAgICBydGNfcmVzb3VyY2UubmFtZSA9ICJBMjAwMCBSVEMiOworICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcnRjX3Jlc291cmNlKTsKKyAgfQorCisgIG1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmZmZjsgLyoKKwkJCQkgICAgICAqIGRlZmF1bHQgTUFYX0RNQT0weGZmZmZmZmZmCisJCQkJICAgICAgKiBvbiBhbGwgbWFjaGluZXMuIElmIHdlIGRvbid0CisJCQkJICAgICAgKiBkbyBzbywgdGhlIFNDU0kgY29kZSB3aWxsIG5vdAorCQkJCSAgICAgICogYmUgYWJsZSB0byBhbGxvY2F0ZSBhbnkgbWVtCisJCQkJICAgICAgKiBmb3IgdHJhbnNmZXJzLCB1bmxlc3Mgd2UgYXJlCisJCQkJICAgICAgKiBkZWFsaW5nIHdpdGggYSBaMiBtZW0gb25seQorCQkJCSAgICAgICogc3lzdGVtLiAgICAgICAgICAgICAgICAgIC9KZXMKKwkJCQkgICAgICAqLworCisgIG1hY2hfc2V0X2Nsb2NrX21tc3MgID0gYW1pZ2Ffc2V0X2Nsb2NrX21tc3M7CisgIG1hY2hfZ2V0X3NzICAgICAgICAgID0gYW1pZ2FfZ2V0X3NzOworI2lmZGVmIENPTkZJR19BTUlHQV9GTE9QUFkKKyAgbWFjaF9mbG9wcHlfc2V0dXAgICAgPSBhbWlnYV9mbG9wcHlfc2V0dXA7CisjZW5kaWYKKyAgbWFjaF9yZXNldCAgICAgICAgICAgPSBhbWlnYV9yZXNldDsKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorICBjb25zd2l0Y2hwICAgICAgICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVApIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUpCisgIG1hY2hfYmVlcCAgICAgICAgICAgID0gYW1pZ2FfbWtzb3VuZDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorICBtYWNoX2hlYXJ0YmVhdCA9IGFtaWdhX2hlYXJ0YmVhdDsKKyNlbmRpZgorCisgIC8qIEZpbGwgaW4gdGhlIGNsb2NrIHZhbHVlcyAoYmFzZWQgb24gdGhlIDcwMCBrSHogRS1DbG9jaykgKi8KKyAgYW1pZ2FfbWFzdGVyY2xvY2sgPSA0MCphbWlnYV9lY2xvY2s7CS8qIDI4IE1IeiAqLworICBhbWlnYV9jb2xvcmNsb2NrID0gNSphbWlnYV9lY2xvY2s7CS8qIDMuNSBNSHogKi8KKworICAvKiBjbGVhciBhbGwgRE1BIGJpdHMgKi8KKyAgY3VzdG9tLmRtYWNvbiA9IERNQUZfQUxMOworICAvKiBlbnN1cmUgdGhhdCB0aGUgRE1BIG1hc3RlciBiaXQgaXMgc2V0ICovCisgIGN1c3RvbS5kbWFjb24gPSBETUFGX1NFVENMUiB8IERNQUZfTUFTVEVSOworCisgIC8qIGRvbid0IHVzZSBaMiBSQU0gYXMgc3lzdGVtIG1lbW9yeSBvbiBaMyBjYXBhYmxlIG1hY2hpbmVzICovCisgIGlmIChBTUlHQUhXX1BSRVNFTlQoWk9SUk8zKSkgeworICAgIGludCBpLCBqOworICAgIHUzMiBkaXNhYmxlZF96Mm1lbSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKQorICAgICAgaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIgPCAxNioxMDI0KjEwMjQpIHsKKwlpZiAoaSA9PSAwKSB7CisJICAvKiBkb24ndCBjdXQgb2ZmIHRoZSBicmFuY2ggd2UncmUgc2l0dGluZyBvbiAqLworCSAgcHJpbnRrKCJXYXJuaW5nOiBrZXJuZWwgcnVucyBpbiBab3JybyBJSSBtZW1vcnlcbiIpOworCSAgY29udGludWU7CisJfQorCWRpc2FibGVkX3oybWVtICs9IG02OGtfbWVtb3J5W2ldLnNpemU7CisJbTY4a19udW1fbWVtb3J5LS07CisJZm9yIChqID0gaTsgaiA8IG02OGtfbnVtX21lbW9yeTsgaisrKQorCSAgbTY4a19tZW1vcnlbal0gPSBtNjhrX21lbW9yeVtqKzFdOworCWktLTsKKyAgICAgIH0KKyAgICBpZiAoZGlzYWJsZWRfejJtZW0pCisgICAgICBwcmludGsoIiVkSyBvZiBab3JybyBJSSBtZW1vcnkgd2lsbCBub3QgYmUgdXNlZCBhcyBzeXN0ZW0gbWVtb3J5XG4iLAorCSAgICAgZGlzYWJsZWRfejJtZW0+PjEwKTsKKyAgfQorCisgIC8qIHJlcXVlc3QgYWxsIFJBTSAqLworICBmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspIHsKKyAgICByYW1fcmVzb3VyY2VbaV0ubmFtZSA9CisgICAgICAobTY4a19tZW1vcnlbaV0uYWRkciA+PSAweDAxMDAwMDAwKSA/ICIzMi1iaXQgRmFzdCBSQU0iIDoKKyAgICAgIChtNjhrX21lbW9yeVtpXS5hZGRyIDwgMHgwMGMwMDAwMCkgPyAiMTYtYml0IEZhc3QgUkFNIiA6CisgICAgICAiMTYtYml0IFNsb3cgUkFNIjsKKyAgICByYW1fcmVzb3VyY2VbaV0uc3RhcnQgPSBtNjhrX21lbW9yeVtpXS5hZGRyOworICAgIHJhbV9yZXNvdXJjZVtpXS5lbmQgPSBtNjhrX21lbW9yeVtpXS5hZGRyK202OGtfbWVtb3J5W2ldLnNpemUtMTsKKyAgICByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJhbV9yZXNvdXJjZVtpXSk7CisgIH0KKworICAvKiBpbml0aWFsaXplIGNoaXByYW0gYWxsb2NhdG9yICovCisgIGFtaWdhX2NoaXBfaW5pdCAoKTsKKworICAvKiBkZWJ1Z2dpbmcgdXNpbmcgY2hpcHJhbSAqLworICBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJtZW0iICkpeworCSAgaWYgKCFBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKQorCQkgIHByaW50aygiV2FybmluZzogbm8gY2hpcHJhbSBwcmVzZW50IGZvciBkZWJ1Z2dpbmdcbiIpOworCSAgZWxzZSB7CisJCSAgYW1pZ2Ffc2F2ZWttc2dfaW5pdCgpOworCQkgIGFtaWdhX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYW1pZ2FfbWVtX2NvbnNvbGVfd3JpdGU7CisJCSAgcmVnaXN0ZXJfY29uc29sZSgmYW1pZ2FfY29uc29sZV9kcml2ZXIpOworCSAgfQorICB9CisKKyAgLyogb3VyIGJlbG92ZWQgYmVlcGVyICovCisgIGlmIChBTUlHQUhXX1BSRVNFTlQoQU1JX0FVRElPKSkKKwkgIGFtaWdhX2luaXRfc291bmQoKTsKKworICAvKgorICAgKiBpZiBpdCBpcyBhbiBBMzAwMCwgc2V0IHRoZSBtYWdpYyBiaXQgdGhhdCBmb3JjZXMKKyAgICogYSBoYXJkIHJla2ljaworICAgKi8KKyAgaWYgKEFNSUdBSFdfUFJFU0VOVChNQUdJQ19SRUtJQ0spKQorCSAgKih1bnNpZ25lZCBjaGFyICopWlRXT19WQUREUigweGRlMDAwMikgfD0gMHg4MDsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGppZmZ5X3RpY2tzOworCitzdGF0aWMgdm9pZCBfX2luaXQgYW1pZ2Ffc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKnRpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLAorCQkJCQkJCSAgc3RydWN0IHB0X3JlZ3MgKikpCit7CisJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2hlZF9yZXMgPSB7CisJICAgIC5uYW1lID0gInRpbWVyIiwgLnN0YXJ0ID0gMHgwMGJmZDQwMCwgLmVuZCA9IDB4MDBiZmQ1ZmYsCisJfTsKKwlqaWZmeV90aWNrcyA9IChhbWlnYV9lY2xvY2srSFovMikvSFo7CisKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmbWJfcmVzb3VyY2VzLl9jaWFiLCAmc2NoZWRfcmVzKSkKKwkgICAgcHJpbnRrKCJDYW5ub3QgYWxsb2NhdGUgY2lhYi50YXtsbyxoaX1cbiIpOworCWNpYWIuY3JhICY9IDB4QzA7ICAgLyogdHVybiBvZmYgdGltZXIgQSwgY29udGludW91cyBtb2RlLCBmcm9tIEVjbGsgKi8KKwljaWFiLnRhbG8gPSBqaWZmeV90aWNrcyAlIDI1NjsKKwljaWFiLnRhaGkgPSBqaWZmeV90aWNrcyAvIDI1NjsKKworCS8qIGluc3RhbGwgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgQ0lBQiBUaW1lciBBCisJICoKKwkgKiBQbGVhc2UgZG9uJ3QgY2hhbmdlIHRoaXMgdG8gdXNlIGNpYWEsIGFzIGl0IGludGVyZmVyZXMgd2l0aCB0aGUKKwkgKiBTQ1NJIGNvZGUuIFdlJ2xsIGhhdmUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBsYXRlcgorCSAqLworCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9DSUFCX1RBLCB0aW1lcl9yb3V0aW5lLCAwLCAidGltZXIiLCBOVUxMKTsKKwkvKiBzdGFydCB0aW1lciAqLworCWNpYWIuY3JhIHw9IDB4MTE7Cit9CisKKyNkZWZpbmUgVElDS19TSVpFIDEwMDAwCisKKy8qIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWlnYV9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IGhpLCBsbywgaGkyOworCXVuc2lnbmVkIGxvbmcgdGlja3MsIG9mZnNldCA9IDA7CisKKwkvKiByZWFkIENJQSBCIHRpbWVyIEEgY3VycmVudCB2YWx1ZSAqLworCWhpICA9IGNpYWIudGFoaTsKKwlsbyAgPSBjaWFiLnRhbG87CisJaGkyID0gY2lhYi50YWhpOworCisJaWYgKGhpICE9IGhpMikgeworCQlsbyA9IGNpYWIudGFsbzsKKwkJaGkgPSBoaTI7CisJfQorCisJdGlja3MgPSBoaSA8PCA4IHwgbG87CisKKwlpZiAodGlja3MgPiBqaWZmeV90aWNrcyAvIDIpCisJCS8qIGNoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdCAqLworCQlpZiAoY2lhX3NldF9pcnEoJmNpYWJfYmFzZSwgMCkgJiBDSUFfSUNSX1RBKQorCQkJb2Zmc2V0ID0gMTAwMDA7CisKKwl0aWNrcyA9IGppZmZ5X3RpY2tzIC0gdGlja3M7CisJdGlja3MgPSAoMTAwMDAgKiB0aWNrcykgLyBqaWZmeV90aWNrczsKKworCXJldHVybiB0aWNrcyArIG9mZnNldDsKK30KKworc3RhdGljIGludCBhMzAwMF9od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKwl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9IT0xEOworCisJaWYgKCFvcCkgeyAvKiByZWFkICovCisJCXQtPnRtX3NlYyAgPSB0b2RfMzAwMC5zZWNvbmQxICogMTAgKyB0b2RfMzAwMC5zZWNvbmQyOworCQl0LT50bV9taW4gID0gdG9kXzMwMDAubWludXRlMSAqIDEwICsgdG9kXzMwMDAubWludXRlMjsKKwkJdC0+dG1faG91ciA9IHRvZF8zMDAwLmhvdXIxICAgKiAxMCArIHRvZF8zMDAwLmhvdXIyOworCQl0LT50bV9tZGF5ID0gdG9kXzMwMDAuZGF5MSAgICAqIDEwICsgdG9kXzMwMDAuZGF5MjsKKwkJdC0+dG1fd2RheSA9IHRvZF8zMDAwLndlZWtkYXk7CisJCXQtPnRtX21vbiAgPSB0b2RfMzAwMC5tb250aDEgICogMTAgKyB0b2RfMzAwMC5tb250aDIgLSAxOworCQl0LT50bV95ZWFyID0gdG9kXzMwMDAueWVhcjEgICAqIDEwICsgdG9kXzMwMDAueWVhcjI7CisJCWlmICh0LT50bV95ZWFyIDw9IDY5KQorCQkJdC0+dG1feWVhciArPSAxMDA7CisJfSBlbHNlIHsKKwkJdG9kXzMwMDAuc2Vjb25kMSA9IHQtPnRtX3NlYyAvIDEwOworCQl0b2RfMzAwMC5zZWNvbmQyID0gdC0+dG1fc2VjICUgMTA7CisJCXRvZF8zMDAwLm1pbnV0ZTEgPSB0LT50bV9taW4gLyAxMDsKKwkJdG9kXzMwMDAubWludXRlMiA9IHQtPnRtX21pbiAlIDEwOworCQl0b2RfMzAwMC5ob3VyMSAgID0gdC0+dG1faG91ciAvIDEwOworCQl0b2RfMzAwMC5ob3VyMiAgID0gdC0+dG1faG91ciAlIDEwOworCQl0b2RfMzAwMC5kYXkxICAgID0gdC0+dG1fbWRheSAvIDEwOworCQl0b2RfMzAwMC5kYXkyICAgID0gdC0+dG1fbWRheSAlIDEwOworCQlpZiAodC0+dG1fd2RheSAhPSAtMSkKKwkJCXRvZF8zMDAwLndlZWtkYXkgPSB0LT50bV93ZGF5OworCQl0b2RfMzAwMC5tb250aDEgID0gKHQtPnRtX21vbiArIDEpIC8gMTA7CisJCXRvZF8zMDAwLm1vbnRoMiAgPSAodC0+dG1fbW9uICsgMSkgJSAxMDsKKwkJaWYgKHQtPnRtX3llYXIgPj0gMTAwKQorCQkJdC0+dG1feWVhciAtPSAxMDA7CisJCXRvZF8zMDAwLnllYXIxICAgPSB0LT50bV95ZWFyIC8gMTA7CisJCXRvZF8zMDAwLnllYXIyICAgPSB0LT50bV95ZWFyICUgMTA7CisJfQorCisJdG9kXzMwMDAuY250cmwxID0gVE9EMzAwMF9DTlRSTDFfRlJFRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGEyMDAwX2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworCWludCBjbnQgPSA1OworCisJdG9kXzIwMDAuY250cmwxID0gVE9EMjAwMF9DTlRSTDFfSE9MRDsKKworCXdoaWxlICgodG9kXzIwMDAuY250cmwxICYgVE9EMjAwMF9DTlRSTDFfQlVTWSkgJiYgY250LS0pCisJeworCSAgICAgICAgdG9kXzIwMDAuY250cmwxICY9IH5UT0QyMDAwX0NOVFJMMV9IT0xEOworCSAgICAgICAgdWRlbGF5KDcwKTsKKwkgICAgICAgIHRvZF8yMDAwLmNudHJsMSB8PSBUT0QyMDAwX0NOVFJMMV9IT0xEOworCX0KKworCWlmICghY250KQorCQlwcmludGsoS0VSTl9JTkZPICJod2NsazogdGltZWQgb3V0IHdhaXRpbmcgZm9yIFJUQyAoMHgleClcbiIsIHRvZF8yMDAwLmNudHJsMSk7CisKKwlpZiAoIW9wKSB7IC8qIHJlYWQgKi8KKwkJdC0+dG1fc2VjICA9IHRvZF8yMDAwLnNlY29uZDEgICAgICogMTAgKyB0b2RfMjAwMC5zZWNvbmQyOworCQl0LT50bV9taW4gID0gdG9kXzIwMDAubWludXRlMSAgICAgKiAxMCArIHRvZF8yMDAwLm1pbnV0ZTI7CisJCXQtPnRtX2hvdXIgPSAodG9kXzIwMDAuaG91cjEgJiAzKSAqIDEwICsgdG9kXzIwMDAuaG91cjI7CisJCXQtPnRtX21kYXkgPSB0b2RfMjAwMC5kYXkxICAgICAgICAqIDEwICsgdG9kXzIwMDAuZGF5MjsKKwkJdC0+dG1fd2RheSA9IHRvZF8yMDAwLndlZWtkYXk7CisJCXQtPnRtX21vbiAgPSB0b2RfMjAwMC5tb250aDEgICAgICAqIDEwICsgdG9kXzIwMDAubW9udGgyIC0gMTsKKwkJdC0+dG1feWVhciA9IHRvZF8yMDAwLnllYXIxICAgICAgICogMTAgKyB0b2RfMjAwMC55ZWFyMjsKKwkJaWYgKHQtPnRtX3llYXIgPD0gNjkpCisJCQl0LT50bV95ZWFyICs9IDEwMDsKKworCQlpZiAoISh0b2RfMjAwMC5jbnRybDMgJiBUT0QyMDAwX0NOVFJMM18yNEhNT0RFKSl7CisJCQlpZiAoISh0b2RfMjAwMC5ob3VyMSAmIFRPRDIwMDBfSE9VUjFfUE0pICYmIHQtPnRtX2hvdXIgPT0gMTIpCisJCQkJdC0+dG1faG91ciA9IDA7CisJCQllbHNlIGlmICgodG9kXzIwMDAuaG91cjEgJiBUT0QyMDAwX0hPVVIxX1BNKSAmJiB0LT50bV9ob3VyICE9IDEyKQorCQkJCXQtPnRtX2hvdXIgKz0gMTI7CisJCX0KKwl9IGVsc2UgeworCQl0b2RfMjAwMC5zZWNvbmQxID0gdC0+dG1fc2VjIC8gMTA7CisJCXRvZF8yMDAwLnNlY29uZDIgPSB0LT50bV9zZWMgJSAxMDsKKwkJdG9kXzIwMDAubWludXRlMSA9IHQtPnRtX21pbiAvIDEwOworCQl0b2RfMjAwMC5taW51dGUyID0gdC0+dG1fbWluICUgMTA7CisJCWlmICh0b2RfMjAwMC5jbnRybDMgJiBUT0QyMDAwX0NOVFJMM18yNEhNT0RFKQorCQkJdG9kXzIwMDAuaG91cjEgPSB0LT50bV9ob3VyIC8gMTA7CisJCWVsc2UgaWYgKHQtPnRtX2hvdXIgPj0gMTIpCisJCQl0b2RfMjAwMC5ob3VyMSA9IFRPRDIwMDBfSE9VUjFfUE0gKworCQkJCSh0LT50bV9ob3VyIC0gMTIpIC8gMTA7CisJCWVsc2UKKwkJCXRvZF8yMDAwLmhvdXIxID0gdC0+dG1faG91ciAvIDEwOworCQl0b2RfMjAwMC5ob3VyMiAgID0gdC0+dG1faG91ciAlIDEwOworCQl0b2RfMjAwMC5kYXkxICAgID0gdC0+dG1fbWRheSAvIDEwOworCQl0b2RfMjAwMC5kYXkyICAgID0gdC0+dG1fbWRheSAlIDEwOworCQlpZiAodC0+dG1fd2RheSAhPSAtMSkKKwkJCXRvZF8yMDAwLndlZWtkYXkgPSB0LT50bV93ZGF5OworCQl0b2RfMjAwMC5tb250aDEgID0gKHQtPnRtX21vbiArIDEpIC8gMTA7CisJCXRvZF8yMDAwLm1vbnRoMiAgPSAodC0+dG1fbW9uICsgMSkgJSAxMDsKKwkJaWYgKHQtPnRtX3llYXIgPj0gMTAwKQorCQkJdC0+dG1feWVhciAtPSAxMDA7CisJCXRvZF8yMDAwLnllYXIxICAgPSB0LT50bV95ZWFyIC8gMTA7CisJCXRvZF8yMDAwLnllYXIyICAgPSB0LT50bV95ZWFyICUgMTA7CisJfQorCisJdG9kXzIwMDAuY250cmwxICY9IH5UT0QyMDAwX0NOVFJMMV9IT0xEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1pZ2Ffc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlzaG9ydCByZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjAsIHJlYWxfbWludXRlcyA9IChub3d0aW1lIC8gNjApICUgNjA7CisKKwlpZiAoQU1JR0FIV19QUkVTRU5UKEEzMDAwX0NMSykpIHsKKwkJdG9kXzMwMDAuY250cmwxID0gVE9EMzAwMF9DTlRSTDFfSE9MRDsKKworCQl0b2RfMzAwMC5zZWNvbmQxID0gcmVhbF9zZWNvbmRzIC8gMTA7CisJCXRvZF8zMDAwLnNlY29uZDIgPSByZWFsX3NlY29uZHMgJSAxMDsKKwkJdG9kXzMwMDAubWludXRlMSA9IHJlYWxfbWludXRlcyAvIDEwOworCQl0b2RfMzAwMC5taW51dGUyID0gcmVhbF9taW51dGVzICUgMTA7CisKKwkJdG9kXzMwMDAuY250cmwxID0gVE9EMzAwMF9DTlRSTDFfRlJFRTsKKwl9IGVsc2UgLyogaWYgKEFNSUdBSFdfUFJFU0VOVChBMjAwMF9DTEspKSAqLyB7CisJCWludCBjbnQgPSA1OworCisJCXRvZF8yMDAwLmNudHJsMSB8PSBUT0QyMDAwX0NOVFJMMV9IT0xEOworCisJCXdoaWxlICgodG9kXzIwMDAuY250cmwxICYgVE9EMjAwMF9DTlRSTDFfQlVTWSkgJiYgY250LS0pCisJCXsKKwkJCXRvZF8yMDAwLmNudHJsMSAmPSB+VE9EMjAwMF9DTlRSTDFfSE9MRDsKKwkJCXVkZWxheSg3MCk7CisJCQl0b2RfMjAwMC5jbnRybDEgfD0gVE9EMjAwMF9DTlRSTDFfSE9MRDsKKwkJfQorCisJCWlmICghY250KQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic2V0X2Nsb2NrX21tc3M6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBSVEMgKDB4JXgpXG4iLCB0b2RfMjAwMC5jbnRybDEpOworCisJCXRvZF8yMDAwLnNlY29uZDEgPSByZWFsX3NlY29uZHMgLyAxMDsKKwkJdG9kXzIwMDAuc2Vjb25kMiA9IHJlYWxfc2Vjb25kcyAlIDEwOworCQl0b2RfMjAwMC5taW51dGUxID0gcmVhbF9taW51dGVzIC8gMTA7CisJCXRvZF8yMDAwLm1pbnV0ZTIgPSByZWFsX21pbnV0ZXMgJSAxMDsKKworCQl0b2RfMjAwMC5jbnRybDEgJj0gflRPRDIwMDBfQ05UUkwxX0hPTEQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW1pZ2FfZ2V0X3NzKCB2b2lkICkKK3sKKwl1bnNpZ25lZCBpbnQgczsKKworCWlmIChBTUlHQUhXX1BSRVNFTlQoQTMwMDBfQ0xLKSkgeworCQl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9IT0xEOworCQlzID0gdG9kXzMwMDAuc2Vjb25kMSAqIDEwICsgdG9kXzMwMDAuc2Vjb25kMjsKKwkJdG9kXzMwMDAuY250cmwxID0gVE9EMzAwMF9DTlRSTDFfRlJFRTsKKwl9IGVsc2UgLyogaWYgKEFNSUdBSFdfUFJFU0VOVChBMjAwMF9DTEspKSAqLyB7CisJCXMgPSB0b2RfMjAwMC5zZWNvbmQxICogMTAgKyB0b2RfMjAwMC5zZWNvbmQyOworCX0KKwlyZXR1cm4gczsKK30KKworc3RhdGljIE5PUkVUX1RZUEUgdm9pZCBhbWlnYV9yZXNldCggdm9pZCApCisgICAgQVRUUklCX05PUkVUOworCitzdGF0aWMgdm9pZCBhbWlnYV9yZXNldCAodm9pZCkKK3sKKyAgdW5zaWduZWQgbG9uZyBqbXBfYWRkcjA0MCA9IHZpcnRfdG9fcGh5cygmJmptcF9hZGRyX2xhYmVsMDQwKTsKKyAgdW5zaWduZWQgbG9uZyBqbXBfYWRkciA9IHZpcnRfdG9fcGh5cygmJmptcF9hZGRyX2xhYmVsKTsKKworICBsb2NhbF9pcnFfZGlzYWJsZSgpOworICBpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisgICAgLyogU2V0dXAgdHJhbnNwYXJlbnQgdHJhbnNsYXRpb24gcmVnaXN0ZXJzIGZvciBtYXBwaW5nCisgICAgICogb2YgMTYgTUIga2VybmVsIHNlZ21lbnQgYmVmb3JlIGRpc2FibGluZyB0cmFuc2xhdGlvbgorICAgICAqLworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAoIm1vdmVsICAgICUwLCUvZDBcblx0IgorICAgICAgICJhbmRsICAgICAjMHhmZjAwMDAwMCwlL2QwXG5cdCIKKyAgICAgICAib3J3ICAgICAgIzB4ZTAyMCwlL2QwXG5cdCIgICAvKiBtYXAgMTYgTUIsIGVuYWJsZSwgY2FjaGVhYmxlICovCisgICAgICAgIi5jaGlwICAgIDY4MDQwXG5cdCIKKyAgICAgICAibW92ZWMgICAgJSVkMCwlJWl0dDBcblx0IgorICAgICAgICJtb3ZlYyAgICAlJWQwLCUlZHR0MFxuXHQiCisgICAgICAgIi5jaGlwICAgIDY4a1xuXHQiCisgICAgICAgImptcCAgICAgICUwQFxuXHQiCisgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgOiAiYSIgKGptcF9hZGRyMDQwKSk7CisgIGVsc2UKKyAgICAvKiBmb3IgNjgwWzIzXTAsIGp1c3QgZGlzYWJsZSB0cmFuc2xhdGlvbiBhbmQganVtcCB0byB0aGUgcGh5c2ljYWwKKyAgICAgKiBhZGRyZXNzIG9mIHRoZSBsYWJlbAorICAgICAqLworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAoInBtb3ZlICAlL3RjLCVAXG5cdCIKKyAgICAgICAiYmNsciAgICM3LCVAXG5cdCIKKyAgICAgICAicG1vdmUgICVALCUvdGNcblx0IgorICAgICAgICJqbXAgICAgJTBAXG5cdCIKKyAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKyAgICAgICA6ICJhIiAoam1wX2FkZHIpKTsKKyBqbXBfYWRkcl9sYWJlbDA0MDoKKyAgLyogZGlzYWJsZSB0cmFuc2xhdGlvbiBvbiAnMDQwIG5vdyAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICgibW92ZXEgIzAsJS9kMFxuXHQiCisgICAgICIuY2hpcCA2ODA0MFxuXHQiCisgICAgICJtb3ZlYyAlJWQwLCUldGNcblx0IgkvKiBkaXNhYmxlIE1NVSAqLworICAgICAiLmNoaXAgNjhrXG5cdCIKKyAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgIDogLyogbm8gaW5wdXRzICovCisgICAgIDogImQwIik7CisKKyBqbXBfYWRkcl9sYWJlbDoKKyAgLyogcGlja3VwIHJlc2V0IGFkZHJlc3MgZnJvbSBBbWlnYU9TIFJPTSwgcmVzZXQgZGV2aWNlcyBhbmQganVtcAorICAgKiB0byByZXNldCBhZGRyZXNzCisgICAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICgibW92ZXcgIzB4MjcwMCwlL3NyXG5cdCIKKyAgICAgImxlYWwgIDB4MDEwMDAwMDAsJS9hMFxuXHQiCisgICAgICJzdWJsICAlL2EwQCgtMHgxNCksJS9hMFxuXHQiCisgICAgICJtb3ZlbCAlL2EwQCg0KSwlL2EwXG5cdCIKKyAgICAgInN1YnFsICMyLCUvYTBcblx0IgorICAgICAiYnJhICAgMWZcblx0IgorICAgICAvKiBhbGlnbiBvbiBhIGxvbmd3b3JkIGJvdW5kYXJ5ICovCisgICAgIF9fQUxJR05fU1RSICJcbiIKKyAgICAgIjE6XG5cdCIKKyAgICAgInJlc2V0XG5cdCIKKyAgICAgImptcCAgICUvYTBAIiA6IC8qIEp1c3QgdGhhdCBnY2Mgc2NhbnMgaXQgZm9yICUgZXNjYXBlcyAqLyApOworCisgIGZvciAoOzspOworCit9CisKKworICAgIC8qCisgICAgICogIERlYnVnZ2luZworICAgICAqLworCisjZGVmaW5lIFNBVkVLTVNHX01BWE1FTQkJMTI4KjEwMjQKKworI2RlZmluZSBTQVZFS01TR19NQUdJQzEJCTB4NTM0MTU2NDUJLyogJ1NBVkUnICovCisjZGVmaW5lIFNBVkVLTVNHX01BR0lDMgkJMHg0QjRENTM0NwkvKiAnS01TRycgKi8KKworc3RydWN0IHNhdmVrbXNnIHsKKyAgICB1bnNpZ25lZCBsb25nIG1hZ2ljMTsJCS8qIFNBVkVLTVNHX01BR0lDMSAqLworICAgIHVuc2lnbmVkIGxvbmcgbWFnaWMyOwkJLyogU0FWRUtNU0dfTUFHSUMyICovCisgICAgdW5zaWduZWQgbG9uZyBtYWdpY3B0cjsJCS8qIGFkZHJlc3Mgb2YgbWFnaWMxICovCisgICAgdW5zaWduZWQgbG9uZyBzaXplOworICAgIGNoYXIgZGF0YVswXTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2F2ZWttc2cgKnNhdmVrbXNnOworCitzdGF0aWMgdm9pZCBhbWlnYV9tZW1fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICBpZiAoc2F2ZWttc2ctPnNpemUrY291bnQgPD0gU0FWRUtNU0dfTUFYTUVNLXNpemVvZihzdHJ1Y3Qgc2F2ZWttc2cpKSB7CisgICAgICAgIG1lbWNweShzYXZla21zZy0+ZGF0YStzYXZla21zZy0+c2l6ZSwgcywgY291bnQpOworICAgICAgICBzYXZla21zZy0+c2l6ZSArPSBjb3VudDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFtaWdhX3NhdmVrbXNnX2luaXQodm9pZCkKK3sKKyAgICBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRlYnVnX3JlcyA9IHsgLm5hbWUgPSAiRGVidWciIH07CisKKyAgICBzYXZla21zZyA9IGFtaWdhX2NoaXBfYWxsb2NfcmVzKFNBVkVLTVNHX01BWE1FTSwgJmRlYnVnX3Jlcyk7CisgICAgc2F2ZWttc2ctPm1hZ2ljMSA9IFNBVkVLTVNHX01BR0lDMTsKKyAgICBzYXZla21zZy0+bWFnaWMyID0gU0FWRUtNU0dfTUFHSUMyOworICAgIHNhdmVrbXNnLT5tYWdpY3B0ciA9IFpUV09fUEFERFIoc2F2ZWttc2cpOworICAgIHNhdmVrbXNnLT5zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQgYW1pZ2Ffc2VyaWFsX3B1dGMoY2hhciBjKQoreworICAgIGN1c3RvbS5zZXJkYXQgPSAodW5zaWduZWQgY2hhciljIHwgMHgxMDA7CisgICAgd2hpbGUgKCEoY3VzdG9tLnNlcmRhdHIgJiAweDIwMDApKQorCTsKK30KKwordm9pZCBhbWlnYV9zZXJpYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB3aGlsZSAoY291bnQtLSkgeworCWlmICgqcyA9PSAnXG4nKQorCSAgICBhbWlnYV9zZXJpYWxfcHV0YygnXHInKTsKKwlhbWlnYV9zZXJpYWxfcHV0YygqcysrKTsKKyAgICB9Cit9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKK3ZvaWQgYW1pZ2Ffc2VyaWFsX3B1dHMoY29uc3QgY2hhciAqcykKK3sKKyAgICBhbWlnYV9zZXJpYWxfY29uc29sZV93cml0ZShOVUxMLCBzLCBzdHJsZW4ocykpOworfQorCitpbnQgYW1pZ2Ffc2VyaWFsX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQoreworICAgIGludCBjaDsKKworICAgIHdoaWxlICghKGN1c3RvbS5pbnRyZXFyICYgSUZfUkJGKSkKKwliYXJyaWVyKCk7CisgICAgY2ggPSBjdXN0b20uc2VyZGF0ciAmIDB4ZmY7CisgICAgLyogY2xlYXIgdGhlIGludGVycnVwdCwgc28gdGhhdCBhbm90aGVyIGNoYXJhY3RlciBjYW4gYmUgcmVhZCAqLworICAgIGN1c3RvbS5pbnRyZXEgPSBJRl9SQkY7CisgICAgcmV0dXJuIGNoOworfQorCit2b2lkIGFtaWdhX3NlcmlhbF9nZXRzKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqcywgaW50IGxlbikKK3sKKyAgICBpbnQgY2gsIGNudCA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworCWNoID0gYW1pZ2Ffc2VyaWFsX2NvbnNvbGVfd2FpdF9rZXkoY28pOworCisJLyogQ2hlY2sgZm9yIGJhY2tzcGFjZS4gKi8KKwlpZiAoY2ggPT0gOCB8fCBjaCA9PSAxMjcpIHsKKwkgICAgaWYgKGNudCA9PSAwKSB7CisJCWFtaWdhX3NlcmlhbF9wdXRjKCdcMDA3Jyk7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGNudC0tOworCSAgICBhbWlnYV9zZXJpYWxfcHV0cygiXDAxMCBcMDEwIik7CisJICAgIGNvbnRpbnVlOworCX0KKworCS8qIENoZWNrIGZvciBlbnRlci4gKi8KKwlpZiAoY2ggPT0gMTAgfHwgY2ggPT0gMTMpCisJICAgIGJyZWFrOworCisJLyogU2VlIGlmIGxpbmUgaXMgdG9vIGxvbmcuICovCisJaWYgKGNudCA+PSBsZW4gKyAxKSB7CisJICAgIGFtaWdhX3NlcmlhbF9wdXRjKDcpOworCSAgICBjbnQtLTsKKwkgICAgY29udGludWU7CisJfQorCisJLyogU3RvcmUgYW5kIGVjaG8gY2hhcmFjdGVyLiAqLworCXNbY250KytdID0gY2g7CisJYW1pZ2Ffc2VyaWFsX3B1dGMoY2gpOworICAgIH0KKyAgICAvKiBQcmludCBlbnRlci4gKi8KKyAgICBhbWlnYV9zZXJpYWxfcHV0cygiXHJcbiIpOworICAgIHNbY250XSA9IDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IGFtaWdhX2RlYnVnX2luaXQodm9pZCkKK3sKKwlpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzZXIiICkpIHsKKwkJLyogbm8gaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgKD8pICovCisJCWFtaWdhX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYW1pZ2Ffc2VyaWFsX2NvbnNvbGVfd3JpdGU7CisJCXJlZ2lzdGVyX2NvbnNvbGUoJmFtaWdhX2NvbnNvbGVfZHJpdmVyKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBhbWlnYV9oZWFydGJlYXQoaW50IG9uKQoreworICAgIGlmIChvbikKKwljaWFhLnByYSAmPSB+MjsKKyAgICBlbHNlCisJY2lhYS5wcmEgfD0gMjsKK30KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgQW1pZ2Egc3BlY2lmaWMgcGFydHMgb2YgL3Byb2MKKyAgICAgKi8KKworc3RhdGljIHZvaWQgYW1pZ2FfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKQoreworICAgIHN0cmNweShtb2RlbCwgYW1pZ2FfbW9kZWxfbmFtZSk7Cit9CisKKworc3RhdGljIGludCBhbWlnYV9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisgICAgaW50IGxlbiA9IDA7CisKKyAgICBpZiAoQU1JR0FIV19QUkVTRU5UKENISVBfUkFNKSkKKwlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCAiQ2hpcCBSQU06XHQlbGRLXG4iLCBhbWlnYV9jaGlwX3NpemU+PjEwKTsKKyAgICBsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCAiUFMgRnJlcTpcdCVkSHpcbkVDbG9jayBGcmVxOlx0JWxkSHpcbiIsCisJCSAgIGFtaWdhX3BzZnJlcSwgYW1pZ2FfZWNsb2NrKTsKKyAgICBpZiAoQU1JR0FIV19QUkVTRU5UKEFNSV9WSURFTykpIHsKKwljaGFyICp0eXBlOworCXN3aXRjaChhbWlnYV9jaGlwc2V0KSB7CisJICAgIGNhc2UgQ1NfT0NTOgorCQl0eXBlID0gIk9DUyI7CisJCWJyZWFrOworCSAgICBjYXNlIENTX0VDUzoKKwkJdHlwZSA9ICJFQ1MiOworCQlicmVhazsKKwkgICAgY2FzZSBDU19BR0E6CisJCXR5cGUgPSAiQUdBIjsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXR5cGUgPSAiT2xkIG9yIFVua25vd24iOworCQlicmVhazsKKwl9CisJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwgIkdyYXBoaWNzOlx0JXNcbiIsIHR5cGUpOworICAgIH0KKworI2RlZmluZSBBTUlHQUhXX0FOTk9VTkNFKG5hbWUsIHN0cikJCQlcCisgICAgaWYgKEFNSUdBSFdfUFJFU0VOVChuYW1lKSkJCQkJXAorCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiXHQlc1xuIiwgc3RyKQorCisgICAgbGVuICs9IHNwcmludGYgKGJ1ZmZlciArIGxlbiwgIkRldGVjdGVkIGhhcmR3YXJlOlxuIik7CisKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9WSURFTywgIkFtaWdhIFZpZGVvIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfQkxJVFRFUiwgIkJsaXR0ZXIiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNQkVSX0ZGLCAiQW1iZXIgRmxpY2tlciBGaXhlciIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX0FVRElPLCAiQW1pZ2EgQXVkaW8iKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9GTE9QUFksICJGbG9wcHkgQ29udHJvbGxlciIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQTMwMDBfU0NTSSwgIlNDU0kgQ29udHJvbGxlciBXRDMzQzkzIChBMzAwMCBzdHlsZSkiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEE0MDAwX1NDU0ksICJTQ1NJIENvbnRyb2xsZXIgTkNSNTNDNzEwIChBNDAwMFQgc3R5bGUpIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBMTIwMF9JREUsICJJREUgSW50ZXJmYWNlIChBMTIwMCBzdHlsZSkiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEE0MDAwX0lERSwgIklERSBJbnRlcmZhY2UgKEE0MDAwIHN0eWxlKSIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQ0RfUk9NLCAiSW50ZXJuYWwgQ0QgUk9NIGRyaXZlIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfS0VZQk9BUkQsICJLZXlib2FyZCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX01PVVNFLCAiTW91c2UgUG9ydCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX1NFUklBTCwgIlNlcmlhbCBQb3J0Iik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfUEFSQUxMRUwsICJQYXJhbGxlbCBQb3J0Iik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBMjAwMF9DTEssICJIYXJkd2FyZSBDbG9jayAoQTIwMDAgc3R5bGUpIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBMzAwMF9DTEssICJIYXJkd2FyZSBDbG9jayAoQTMwMDAgc3R5bGUpIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShDSElQX1JBTSwgIkNoaXAgUkFNIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShQQVVMQSwgIlBhdWxhIDgzNjQiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKERFTklTRSwgIkRlbmlzZSA4MzYyIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShERU5JU0VfSFIsICJEZW5pc2UgODM3MyIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoTElTQSwgIkxpc2EgODM3NSIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQUdOVVNfUEFMLCAiTm9ybWFsL0ZhdCBQQUwgQWdudXMgODM2Ny84MzcxIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBR05VU19OVFNDLCAiTm9ybWFsL0ZhdCBOVFNDIEFnbnVzIDgzNjEvODM3MCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQUdOVVNfSFJfUEFMLCAiRmF0IEhpcmVzIFBBTCBBZ251cyA4MzcyIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBR05VU19IUl9OVFNDLCAiRmF0IEhpcmVzIE5UU0MgQWdudXMgODM3MiIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQUxJQ0VfUEFMLCAiUEFMIEFsaWNlIDgzNzQiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFMSUNFX05UU0MsICJOVFNDIEFsaWNlIDgzNzQiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKE1BR0lDX1JFS0lDSywgIk1hZ2ljIEhhcmQgUmVraWNrIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShQQ01DSUEsICJQQ01DSUEgU2xvdCIpOworI2lmZGVmIENPTkZJR19aT1JSTworICAgIGlmIChBTUlHQUhXX1BSRVNFTlQoWk9SUk8pKQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcdFpvcnJvIElJJXMgQXV0b0NvbmZpZzogJWQgRXhwYW5zaW9uICIKKwkJCQkgICAiRGV2aWNlJXNcbiIsCisJCSAgICAgICBBTUlHQUhXX1BSRVNFTlQoWk9SUk8zKSA/ICJJIiA6ICIiLAorCQkgICAgICAgem9ycm9fbnVtX2F1dG9jb24sIHpvcnJvX251bV9hdXRvY29uID09IDEgPyAiIiA6ICJzIik7CisjZW5kaWYgLyogQ09ORklHX1pPUlJPICovCisKKyN1bmRlZiBBTUlHQUhXX0FOTk9VTkNFCisKKyAgICByZXR1cm4obGVuKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9wY21jaWEuYyBiL2FyY2gvbTY4ay9hbWlnYS9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzU3YzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2FtaWdhL3BjbWNpYS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorKiogYXNtLW02OGsvcGNtY2lhLmMgLS0gQW1pZ2EgTGludXggUENNQ0lBIHN1cHBvcnQKKyoqICAgICAgICAgICAgICAgICAgICAgIG1vc3QgaW5mb3JtYXRpb24gd2FzIGZvdW5kIGJ5IGRpc2Fzc2VtYmxpbmcgY2FyZC5yZXNvdXJjZQorKiogICAgICAgICAgICAgICAgICAgICAgSSdtIHN0aWxsIGxvb2tpbmcgZm9yIGFuIG9mZmljaWFsIGRvYyAhCisqKgorKiogQ29weXJpZ2h0IDE5OTcgYnkgQWxhaW4gTWFsZWsKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogMTIvMTAvOTcgYnkgQWxhaW4gTWFsZWsKKyovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9hbWlnYXlsZS5oPgorI2luY2x1ZGUgPGFzbS9hbWlwY21jaWEuaD4KKworLyogZ2F5bGUgY29uZmlnIGJ5dGUgZm9yIHByb2dyYW0gdm9sdGFnZSBhbmQgYWNjZXNzIHNwZWVkICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBjZmdfYnl0ZSA9IEdBWUxFX0NGR18wVnxHQVlMRV9DRkdfMTUwTlM7CisKK3ZvaWQgcGNtY2lhX3Jlc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXNldF9zdGFydF90aW1lID0gamlmZmllczsKKwl1bnNpZ25lZCBjaGFyIGI7CisKKwlnYXlsZV9yZXNldCA9IDB4MDA7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAxKkhaLzEwMCkpOworCWIgPSBnYXlsZV9yZXNldDsKK30KKworCisvKiBjb3B5IGEgdHVwbGUsIGluY2x1ZGluZyB0dXBsZSBoZWFkZXIuIHJldHVybiBuYiBieXRlcyBjb3BpZWQgKi8KKy8qIGJlIGNhcmVmdWxsIGFzIHRoaXMgbWF5IHRyaWdnZXIgYSBHQVlMRV9JUlFfV1IgaW50ZXJydXB0ICEgKi8KKworaW50IHBjbWNpYV9jb3B5X3R1cGxlKHVuc2lnbmVkIGNoYXIgdHVwbGVfaWQsIHZvaWQgKnR1cGxlLCBpbnQgbWF4X2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGlkLCAqZGVzdDsKKwlpbnQgY250LCBwb3MsIGxlbjsKKworCWRlc3QgPSB0dXBsZTsKKwlwb3MgPSAwOworCisJaWQgPSBnYXlsZV9hdHRyaWJ1dGVbcG9zXTsKKworCXdoaWxlKChpZCAhPSBDSVNUUExfRU5EKSAmJiAocG9zIDwgMHgxMDAwMCkpIHsKKwkJbGVuID0gKGludClnYXlsZV9hdHRyaWJ1dGVbcG9zKzJdICsgMjsKKwkJaWYgKGlkID09IHR1cGxlX2lkKSB7CisJCQlsZW4gPSAobGVuID4gbWF4X2xlbik/bWF4X2xlbjpsZW47CisJCQlmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgY250KyspIHsKKwkJCQkqZGVzdCsrID0gZ2F5bGVfYXR0cmlidXRlW3BvcysoY250PDwxKV07CisJCQl9CisKKwkJCXJldHVybiBsZW47CisJCX0KKwkJcG9zICs9IGxlbjw8MTsKKwkJaWQgPSBnYXlsZV9hdHRyaWJ1dGVbcG9zXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwY21jaWFfcHJvZ3JhbV92b2x0YWdlKGludCB2b2x0YWdlKQoreworCXVuc2lnbmVkIGNoYXIgdjsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgUENNQ0lBXzBWOgorCQl2ID0gR0FZTEVfQ0ZHXzBWOworCQlicmVhazsKKwljYXNlIFBDTUNJQV81VjoKKwkJdiA9IEdBWUxFX0NGR181VjsKKwkJYnJlYWs7CisJY2FzZSBQQ01DSUFfMTJWOgorCQl2ID0gR0FZTEVfQ0ZHXzEyVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdiA9IEdBWUxFX0NGR18wVjsKKwl9CisKKwljZmdfYnl0ZSA9IChjZmdfYnl0ZSAmIDB4ZmMpIHwgdjsKKwlnYXlsZS5jb25maWcgPSBjZmdfYnl0ZTsKKworfQorCit2b2lkIHBjbWNpYV9hY2Nlc3Nfc3BlZWQoaW50IHNwZWVkKQoreworCXVuc2lnbmVkIGNoYXIgczsKKworCWlmIChzcGVlZCA8PSBQQ01DSUFfU1BFRURfMTAwTlMpCisJCXMgPSBHQVlMRV9DRkdfMTAwTlM7CisJZWxzZSBpZiAoc3BlZWQgPD0gUENNQ0lBX1NQRUVEXzE1ME5TKQorCQlzID0gR0FZTEVfQ0ZHXzE1ME5TOworCWVsc2UgaWYgKHNwZWVkIDw9IFBDTUNJQV9TUEVFRF8yNTBOUykKKwkJcyA9IEdBWUxFX0NGR18yNTBOUzsKKwllbHNlCisJCXMgPSBHQVlMRV9DRkdfNzIwTlM7CisKKwljZmdfYnl0ZSA9IChjZmdfYnl0ZSAmIDB4ZjMpIHwgczsKKwlnYXlsZS5jb25maWcgPSBjZmdfYnl0ZTsKK30KKwordm9pZCBwY21jaWFfd3JpdGVfZW5hYmxlKHZvaWQpCit7CisJZ2F5bGUuY2FyZHN0YXR1cyA9IEdBWUxFX0NTX1dSfEdBWUxFX0NTX0RBOworfQorCit2b2lkIHBjbWNpYV93cml0ZV9kaXNhYmxlKHZvaWQpCit7CisJZ2F5bGUuY2FyZHN0YXR1cyA9IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXBvbGxvL01ha2VmaWxlIGIvYXJjaC9tNjhrL2Fwb2xsby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI2NGYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Fwb2xsby9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9hbWlnYSBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyBkbl9pbnRzLm8gZG1hLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMgYi9hcmNoL202OGsvYXBvbGxvL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDkyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXBvbGxvL2NvbmZpZy5jCkBAIC0wLDAgKzEsMzA1IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXBvbGxvaHcuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKK3VfbG9uZyBzaW8wMV9waHlzYWRkcjsKK3VfbG9uZyBzaW8yM19waHlzYWRkcjsKK3VfbG9uZyBydGNfcGh5c2FkZHI7Cit1X2xvbmcgcGljYV9waHlzYWRkcjsKK3VfbG9uZyBwaWNiX3BoeXNhZGRyOwordV9sb25nIGNwdWN0cmxfcGh5c2FkZHI7Cit1X2xvbmcgdGltZXJfcGh5c2FkZHI7Cit1X2xvbmcgYXBvbGxvX21vZGVsOworCitleHRlcm4gdm9pZCBkbl9zY2hlZF9pbml0KGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LHZvaWQgKixzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdm9pZCBkbl9pbml0X0lSUSh2b2lkKTsKK2V4dGVybiBpbnQgZG5fcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBkbl9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgZG5fZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZG5fZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc2hvd19kbl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG5fZ2V0dGltZW9mZnNldCh2b2lkKTsKK2V4dGVybiBpbnQgZG5fZHVtbXlfaHdjbGsoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CitleHRlcm4gaW50IGRuX2R1bW15X3NldF9jbG9ja19tbXNzKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZG5fZHVtbXlfcmVzZXQodm9pZCk7CitleHRlcm4gdm9pZCBkbl9kdW1teV93YWl0YnV0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCBmYl9pbmZvICpkbl9mYl9pbml0KGxvbmcgKik7CitleHRlcm4gdm9pZCBkbl9kdW1teV9kZWJ1Z19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZG5fZHVtbXlfdmlkZW9fc2V0dXAoY2hhciAqLGludCAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBkbl9wcm9jZXNzX2ludChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGRuX2hlYXJ0YmVhdChpbnQgb24pOworI2VuZGlmCitzdGF0aWMgaXJxcmV0dXJuX3QgZG5fdGltZXJfaW50KGludCBpcnEsdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCAoKnNjaGVkX3RpbWVyX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKT1OVUxMOworc3RhdGljIHZvaWQgZG5fZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKK3N0YXRpYyBjb25zdCBjaGFyICphcG9sbG9fbW9kZWxzW10gPSB7CisJW0FQT0xMT19ETjMwMDAtQVBPTExPX0ROMzAwMF0gPSAiRE4zMDAwIChPdHRlcikiLAorCVtBUE9MTE9fRE4zMDEwLUFQT0xMT19ETjMwMDBdID0gIkROMzAxMCAoT3R0ZXIpIiwKKwlbQVBPTExPX0ROMzUwMC1BUE9MTE9fRE4zMDAwXSA9ICJETjM1MDAgKENvdWdhciBJSSkiLAorCVtBUE9MTE9fRE40MDAwLUFQT0xMT19ETjMwMDBdID0gIkRONDAwMCAoTWluaykiLAorCVtBUE9MTE9fRE40NTAwLUFQT0xMT19ETjMwMDBdID0gIkRONDUwMCAoUm9hZHJ1bm5lcikiCit9OworCitpbnQgYXBvbGxvX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlY29yZCkgeworCisJaW50IHVua25vd24gPSAwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmRhdGEgPSByZWNvcmQtPmRhdGE7CisKKwlzd2l0Y2gocmVjb3JkLT50YWcpIHsKKwkJY2FzZSBCSV9BUE9MTE9fTU9ERUw6CisJCQlhcG9sbG9fbW9kZWw9KmRhdGE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJIHVua25vd249MTsKKwl9CisKKwlyZXR1cm4gdW5rbm93bjsKK30KKwordm9pZCBkbl9zZXR1cF9tb2RlbCh2b2lkKSB7CisKKworCXByaW50aygiQXBvbGxvIGhhcmR3YXJlIGZvdW5kOiAiKTsKKwlwcmludGsoIlslc11cbiIsIGFwb2xsb19tb2RlbHNbYXBvbGxvX21vZGVsIC0gQVBPTExPX0ROMzAwMF0pOworCisJc3dpdGNoKGFwb2xsb19tb2RlbCkgeworCQljYXNlIEFQT0xMT19VTktOT1dOOgorCQkJcGFuaWMoIlVua25vd24gYXBvbGxvIG1vZGVsIik7CisJCQlicmVhazsKKwkJY2FzZSBBUE9MTE9fRE4zMDAwOgorCQljYXNlIEFQT0xMT19ETjMwMTA6CisJCQlzaW8wMV9waHlzYWRkcj1TQVU4X1NJTzAxX1BIWVNBRERSOworCQkJcnRjX3BoeXNhZGRyPVNBVThfUlRDX1BIWVNBRERSOworCQkJcGljYV9waHlzYWRkcj1TQVU4X1BJQ0E7CisJCQlwaWNiX3BoeXNhZGRyPVNBVThfUElDQjsKKwkJCWNwdWN0cmxfcGh5c2FkZHI9U0FVOF9DUFVDVFJMOworCQkJdGltZXJfcGh5c2FkZHI9U0FVOF9USU1FUjsKKwkJCWJyZWFrOworCQljYXNlIEFQT0xMT19ETjQwMDA6CisJCQlzaW8wMV9waHlzYWRkcj1TQVU3X1NJTzAxX1BIWVNBRERSOworCQkJc2lvMjNfcGh5c2FkZHI9U0FVN19TSU8yM19QSFlTQUREUjsKKwkJCXJ0Y19waHlzYWRkcj1TQVU3X1JUQ19QSFlTQUREUjsKKwkJCXBpY2FfcGh5c2FkZHI9U0FVN19QSUNBOworCQkJcGljYl9waHlzYWRkcj1TQVU3X1BJQ0I7CisJCQljcHVjdHJsX3BoeXNhZGRyPVNBVTdfQ1BVQ1RSTDsKKwkJCXRpbWVyX3BoeXNhZGRyPVNBVTdfVElNRVI7CisJCQlicmVhazsKKwkJY2FzZSBBUE9MTE9fRE40NTAwOgorCQkJcGFuaWMoIkFwb2xsbyBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVBPTExPX0ROMzUwMDoKKwkJCXNpbzAxX3BoeXNhZGRyPVNBVTdfU0lPMDFfUEhZU0FERFI7CisJCQlzaW8yM19waHlzYWRkcj1TQVU3X1NJTzIzX1BIWVNBRERSOworCQkJcnRjX3BoeXNhZGRyPVNBVTdfUlRDX1BIWVNBRERSOworCQkJcGljYV9waHlzYWRkcj1TQVU3X1BJQ0E7CisJCQlwaWNiX3BoeXNhZGRyPVNBVTdfUElDQjsKKwkJCWNwdWN0cmxfcGh5c2FkZHI9U0FVN19DUFVDVFJMOworCQkJdGltZXJfcGh5c2FkZHI9U0FVN19USU1FUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMoIlVuZGVmaW5lZCBhcG9sbG8gbW9kZWwiKTsKKwkJCWJyZWFrOworCX0KKworCit9CisKK2ludCBkbl9zZXJpYWxfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pIHsKKworCXdoaWxlKCEoc2lvMDEuc3JiX2NzcmIgJiAxKSkKKwkJYmFycmllcigpOworCXJldHVybiBzaW8wMS5yaHJiX3RocmI7Cit9CisKK3ZvaWQgZG5fc2VyaWFsX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgIHdoaWxlKGNvdW50LS0pIHsKKwlpZiAoKnN0ciA9PSAnXG4nKSB7CisJc2lvMDEucmhyYl90aHJiID0gKHVuc2lnbmVkIGNoYXIpJ1xyJzsKKwl3aGlsZSAoIShzaW8wMS5zcmJfY3NyYiAmIDB4NCkpCisgICAgICAgICAgICAgICAgOworCX0KKyAgICBzaW8wMS5yaHJiX3RocmIgPSAodW5zaWduZWQgY2hhcikqc3RyKys7CisgICAgd2hpbGUgKCEoc2lvMDEuc3JiX2NzcmIgJiAweDQpKQorICAgICAgICAgICAgOworICB9Cit9CisKK3ZvaWQgZG5fc2VyaWFsX3ByaW50IChjb25zdCBjaGFyICpzdHIpCit7CisgICAgd2hpbGUgKCpzdHIpIHsKKyAgICAgICAgaWYgKCpzdHIgPT0gJ1xuJykgeworICAgICAgICAgICAgc2lvMDEucmhyYl90aHJiID0gKHVuc2lnbmVkIGNoYXIpJ1xyJzsKKyAgICAgICAgICAgIHdoaWxlICghKHNpbzAxLnNyYl9jc3JiICYgMHg0KSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIH0KKyAgICAgICAgc2lvMDEucmhyYl90aHJiID0gKHVuc2lnbmVkIGNoYXIpKnN0cisrOworICAgICAgICB3aGlsZSAoIShzaW8wMS5zcmJfY3NyYiAmIDB4NCkpCisgICAgICAgICAgICA7CisgICAgfQorfQorCit2b2lkIGNvbmZpZ19hcG9sbG8odm9pZCkgeworCisJaW50IGk7CisKKwlkbl9zZXR1cF9tb2RlbCgpOworCisJbWFjaF9zY2hlZF9pbml0PWRuX3NjaGVkX2luaXQ7IC8qICovCisJbWFjaF9pbml0X0lSUT1kbl9pbml0X0lSUTsKKwltYWNoX2RlZmF1bHRfaGFuZGxlcj1OVUxMOworCW1hY2hfcmVxdWVzdF9pcnEgICAgID0gZG5fcmVxdWVzdF9pcnE7CisJbWFjaF9mcmVlX2lycSAgICAgICAgPSBkbl9mcmVlX2lycTsKKwllbmFibGVfaXJxICAgICAgPSBkbl9lbmFibGVfaXJxOworCWRpc2FibGVfaXJxICAgICA9IGRuX2Rpc2FibGVfaXJxOworCW1hY2hfZ2V0X2lycV9saXN0ICAgID0gc2hvd19kbl9pbnRlcnJ1cHRzOworCW1hY2hfZ2V0dGltZW9mZnNldCAgID0gZG5fZ2V0dGltZW9mZnNldDsKKwltYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisJbWFjaF9od2NsayAgICAgICAgICAgPSBkbl9kdW1teV9od2NsazsgLyogKi8KKwltYWNoX3NldF9jbG9ja19tbXNzICA9IGRuX2R1bW15X3NldF9jbG9ja19tbXNzOyAvKiAqLworCW1hY2hfcHJvY2Vzc19pbnQgICAgID0gZG5fcHJvY2Vzc19pbnQ7CisJbWFjaF9yZXNldAkgICAgID0gZG5fZHVtbXlfcmVzZXQ7ICAvKiAqLworI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisgICAgICAgIGNvbnN3aXRjaHAgICAgICAgICAgID0gJmR1bW15X2NvbjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwltYWNoX2hlYXJ0YmVhdCA9IGRuX2hlYXJ0YmVhdDsKKyNlbmRpZgorCW1hY2hfZ2V0X21vZGVsICAgICAgID0gZG5fZ2V0X21vZGVsOworCisJY3B1Y3RybD0weGFhMDA7CisKKwkvKiBjbGVhciBETUEgdHJhbnNsYXRpb24gdGFibGUgKi8KKwlmb3IoaT0wO2k8MHg0MDA7aSsrKQorCQlhZGRyX3hsYXRfbWFwW2ldPTA7CisKK30KKworaXJxcmV0dXJuX3QgZG5fdGltZXJfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKSB7CisKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHg7CisKKwlzY2hlZF90aW1lcl9oYW5kbGVyKGlycSxkZXZfaWQsZnApOworCisJeD0qKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrMyk7CisJeD0qKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrNSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgZG5fc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKnRpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkgeworCisJLyogcHJvZ3JhbSB0aW1lciAxICovCisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzMpPTB4MDE7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzEpPTB4NDA7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzUpPTB4MDk7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzcpPTB4YzQ7CisKKwkvKiBlbmFibGUgSVJRIG9mIFBJQyBCICovCisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBpY2ErMSkmPSh+OCk7CisKKyNpZiAwCisJcHJpbnRrKCIqKDB4MTA4MDMpICUwMnhcbiIsKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzB4MykpOworCXByaW50aygiKigweDEwODAzKSAlMDJ4XG4iLCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSh0aW1lcisweDMpKTsKKyNlbmRpZgorCisJc2NoZWRfdGltZXJfaGFuZGxlcj10aW1lcl9yb3V0aW5lOworCXJlcXVlc3RfaXJxKDAsZG5fdGltZXJfaW50LDAsTlVMTCxOVUxMKTsKKworfQorCit1bnNpZ25lZCBsb25nIGRuX2dldHRpbWVvZmZzZXQodm9pZCkgeworCisJcmV0dXJuIDB4ZGVhZGJlZWY7CisKK30KKworaW50IGRuX2R1bW15X2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KSB7CisKKworICBpZighb3ApIHsgLyogcmVhZCAqLworICAgIHQtPnRtX3NlYz1ydGMtPnNlY29uZDsKKyAgICB0LT50bV9taW49cnRjLT5taW51dGU7CisgICAgdC0+dG1faG91cj1ydGMtPmhvdXJzOworICAgIHQtPnRtX21kYXk9cnRjLT5kYXlfb2ZfbW9udGg7CisgICAgdC0+dG1fd2RheT1ydGMtPmRheV9vZl93ZWVrOworICAgIHQtPnRtX21vbj1ydGMtPm1vbnRoOworICAgIHQtPnRtX3llYXI9cnRjLT55ZWFyOworICB9IGVsc2UgeworICAgIHJ0Yy0+c2Vjb25kPXQtPnRtX3NlYzsKKyAgICBydGMtPm1pbnV0ZT10LT50bV9taW47CisgICAgcnRjLT5ob3Vycz10LT50bV9ob3VyOworICAgIHJ0Yy0+ZGF5X29mX21vbnRoPXQtPnRtX21kYXk7CisgICAgaWYodC0+dG1fd2RheSE9LTEpCisgICAgICBydGMtPmRheV9vZl93ZWVrPXQtPnRtX3dkYXk7CisgICAgcnRjLT5tb250aD10LT50bV9tb247CisgICAgcnRjLT55ZWFyPXQtPnRtX3llYXI7CisgIH0KKworICByZXR1cm4gMDsKKworfQorCitpbnQgZG5fZHVtbXlfc2V0X2Nsb2NrX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKSB7CisKKyAgcHJpbnRrKCJzZXRfY2xvY2tfbW1zc1xuIik7CisKKyAgcmV0dXJuIDA7CisKK30KKwordm9pZCBkbl9kdW1teV9yZXNldCh2b2lkKSB7CisKKyAgZG5fc2VyaWFsX3ByaW50KCJUaGUgZW5kICFcbiIpOworCisgIGZvcig7Oyk7CisKK30KKwordm9pZCBkbl9kdW1teV93YWl0YnV0KHZvaWQpIHsKKworICBkbl9zZXJpYWxfcHJpbnQoIndhaXRidXRcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIGRuX2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKyAgICBzdHJjcHkobW9kZWwsICJBcG9sbG8gIik7CisgICAgaWYgKGFwb2xsb19tb2RlbCA+PSBBUE9MTE9fRE4zMDAwICYmIGFwb2xsb19tb2RlbCA8PSBBUE9MTE9fRE40NTAwKQorICAgICAgICBzdHJjYXQobW9kZWwsIGFwb2xsb19tb2RlbHNbYXBvbGxvX21vZGVsIC0gQVBPTExPX0ROMzAwMF0pOworfQorCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorc3RhdGljIGludCBkbl9jcHVjdHJsPTB4ZmYwMDsKKworc3RhdGljIHZvaWQgZG5faGVhcnRiZWF0KGludCBvbikgeworCisJaWYob24pIHsKKwkJZG5fY3B1Y3RybCY9fjB4MTAwOworCQljcHVjdHJsPWRuX2NwdWN0cmw7CisJfQorCWVsc2UgeworCQlkbl9jcHVjdHJsJj1+MHgxMDA7CisJCWRuX2NwdWN0cmx8PTB4MTAwOworCQljcHVjdHJsPWRuX2NwdWN0cmw7CisJfQorfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hcG9sbG8vZG1hLmMgYi9hcmNoL202OGsvYXBvbGxvL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZDhiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXBvbGxvL2RtYS5jCkBAIC0wLDAgKzEsNTAgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2QuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXBvbGxvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qIG5vdGUgb25seSB3b3JrcyBmb3IgMTYgQml0IDEgcGFnZSBETUEncyAqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbmV4dF9mcmVlX3hsYXRfZW50cnk9MDsKKwordW5zaWduZWQgc2hvcnQgZG1hX21hcF9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLGludCBjb3VudCxpbnQgdHlwZSkgeworCisJdW5zaWduZWQgbG9uZyBwYWdlX2FsaWduZWRfYWRkcj1waHlzX2FkZHIgJiAofigoMTw8MTIpLTEpKTsKKwl1bnNpZ25lZCBzaG9ydCBzdGFydF9tYXBfYWRkcj1wYWdlX2FsaWduZWRfYWRkciA+PiAxMDsKKwl1bnNpZ25lZCBzaG9ydCBmcmVlX3hsYXRfZW50cnksICp4bGF0X21hcF9lbnRyeTsKKwlpbnQgaTsKKworCWZyZWVfeGxhdF9lbnRyeT1uZXh0X2ZyZWVfeGxhdF9lbnRyeTsKKwlmb3IoaT0wLHhsYXRfbWFwX2VudHJ5PWFkZHJfeGxhdF9tYXArKGZyZWVfeGxhdF9lbnRyeTw8Mik7aTw4O2krKyx4bGF0X21hcF9lbnRyeSsrKSB7CisjaWYgMAorCQlwcmludGsoInBoeXNfYWRkcjogJXgsIHBhZ2VfYWxpZ25lZF9hZGRyOiAleCwgc3RhcnRfbWFwX2FkZHI6ICV4XG4iLHBoeXNfYWRkcixwYWdlX2FsaWduZWRfYWRkcixzdGFydF9tYXBfYWRkcitpKTsKKyNlbmRpZgorCQlvdXRfYmUxNih4bGF0X21hcF9lbnRyeSwgc3RhcnRfbWFwX2FkZHIraSk7CisJfQorCisJbmV4dF9mcmVlX3hsYXRfZW50cnkrPTI7CisJaWYobmV4dF9mcmVlX3hsYXRfZW50cnk+MTI1KQorCQluZXh0X2ZyZWVfeGxhdF9lbnRyeT0wOworCisjaWYgMAorCXByaW50aygibmV4dF9mcmVlX3hsYXRfZW50cnk6ICVkXG4iLG5leHRfZnJlZV94bGF0X2VudHJ5KTsKKyNlbmRpZgorCisJcmV0dXJuIGZyZWVfeGxhdF9lbnRyeTw8MTA7Cit9CisKK3ZvaWQgZG1hX3VubWFwX3BhZ2UodW5zaWduZWQgc2hvcnQgZG1hX2FkZHIpIHsKKworCXJldHVybiA7CisKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Fwb2xsby9kbl9pbnRzLmMgYi9hcmNoL202OGsvYXBvbGxvL2RuX2ludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzEyNTkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Fwb2xsby9kbl9pbnRzLmMKQEAgLTAsMCArMSwxMjUgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vYXBvbGxvaHcuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworc3RhdGljIGlycV9oYW5kbGVyX3QgZG5faXJxc1sxNl07CisKK2lycXJldHVybl90IGRuX3Byb2Nlc3NfaW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgaXJxcmV0dXJuX3QgcmVzID0gSVJRX05PTkU7CisKKyAgaWYoZG5faXJxc1tpcnEtMTYwXS5oYW5kbGVyKSB7CisgICAgcmVzID0gZG5faXJxc1tpcnEtMTYwXS5oYW5kbGVyKGlycSxkbl9pcnFzW2lycS0xNjBdLmRldl9pZCxmcCk7CisgIH0gZWxzZSB7CisgICAgcHJpbnRrKCJzcHVyaW91cyBpcnEgJWQgb2NjdXJyZWRcbiIsaXJxKTsKKyAgfQorCisgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwaWNhKT0weDIwOworICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocGljYik9MHgyMDsKKworICByZXR1cm4gcmVzOworfQorCit2b2lkIGRuX2luaXRfSVJRKHZvaWQpIHsKKworICBpbnQgaTsKKworICBmb3IoaT0wO2k8MTY7aSsrKSB7CisgICAgZG5faXJxc1tpXS5oYW5kbGVyPU5VTEw7CisgICAgZG5faXJxc1tpXS5mbGFncz1JUlFfRkxHX1NURDsKKyAgICBkbl9pcnFzW2ldLmRldl9pZD1OVUxMOworICAgIGRuX2lycXNbaV0uZGV2bmFtZT1OVUxMOworICB9CisKK30KKworaW50IGRuX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpIHsKKworICBpZigoaXJxPDApIHx8IChpcnE+MTUpKSB7CisgICAgcHJpbnRrKCJUcnlpbmcgdG8gcmVxdWVzdCBpbnZhbGlkIElSUVxuIik7CisgICAgcmV0dXJuIC1FTlhJTzsKKyAgfQorCisgIGlmKCFkbl9pcnFzW2lycV0uaGFuZGxlcikgeworICAgIGRuX2lycXNbaXJxXS5oYW5kbGVyPWhhbmRsZXI7CisgICAgZG5faXJxc1tpcnFdLmZsYWdzPUlSUV9GTEdfU1REOworICAgIGRuX2lycXNbaXJxXS5kZXZfaWQ9ZGV2X2lkOworICAgIGRuX2lycXNbaXJxXS5kZXZuYW1lPWRldm5hbWU7CisgICAgaWYoaXJxPDgpCisgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocGljYSsxKSY9figxPDxpcnEpOworICAgIGVsc2UKKyAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwaWNiKzEpJj1+KDE8PChpcnEtOCkpOworCisgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnRrKCJUcnlpbmcgdG8gcmVxdWVzdCBhbHJlYWR5IGFzc2lnbmVkIGlycSAlZFxuIixpcnEpOworICAgIHJldHVybiAtRU5YSU87CisgIH0KKworfQorCit2b2lkIGRuX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkgeworCisgIGlmKChpcnE8MCkgfHwgKGlycT4xNSkpIHsKKyAgICBwcmludGsoIlRyeWluZyB0byBmcmVlIGludmFsaWQgSVJRXG4iKTsKKyAgICByZXR1cm4gOworICB9CisKKyAgaWYoaXJxPDgpCisgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBpY2ErMSl8PSgxPDxpcnEpOworICBlbHNlCisgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBpY2IrMSl8PSgxPDwoaXJxLTgpKTsKKworICBkbl9pcnFzW2lycV0uaGFuZGxlcj1OVUxMOworICBkbl9pcnFzW2lycV0uZmxhZ3M9SVJRX0ZMR19TVEQ7CisgIGRuX2lycXNbaXJxXS5kZXZfaWQ9TlVMTDsKKyAgZG5faXJxc1tpcnFdLmRldm5hbWU9TlVMTDsKKworICByZXR1cm4gOworCit9CisKK3ZvaWQgZG5fZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKSB7CisKKyAgcHJpbnRrKCJkbiBlbmFibGUgaXJxXG4iKTsKKworfQorCit2b2lkIGRuX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpIHsKKworICBwcmludGsoImRuIGRpc2FibGUgaXJxXG4iKTsKKworfQorCitpbnQgc2hvd19kbl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikgeworCisgIHByaW50aygiZG4gZ2V0IGlycSBsaXN0XG4iKTsKKworICByZXR1cm4gMDsKKworfQorCitzdHJ1Y3QgZmJfaW5mbyAqZG5fZHVtbXlfZmJfaW5pdChsb25nICptZW1fc3RhcnQpIHsKKworICBwcmludGsoImZiIGluaXRcbiIpOworCisgIHJldHVybiBOVUxMOworCit9CisKK3ZvaWQgZG5fZHVtbXlfdmlkZW9fc2V0dXAoY2hhciAqb3B0aW9ucyxpbnQgKmludHMpIHsKKworICBwcmludGsoIm5vIHZpZGVvIHlldFxuIik7CisKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9NYWtlZmlsZSBiL2FyY2gvbTY4ay9hdGFyaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2I2MjM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9hdGFyaSBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyB0aW1lLm8gZGVidWcubyBhdGFpbnRzLm8gc3RkbWEubyBcCisJCQlhdGFzb3VuZC5vIHN0cmFtLm8gYXRhcmlfa3N5bXMubworCitpZmVxICgkKENPTkZJR19QQ0kpLHkpCitvYmotJChDT05GSUdfSEFERVMpCSs9IGhhZGVzLXBjaS5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2ZjQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKQEAgLTAsMCArMSw2NDggQEAKKy8qCisgKiBhcmNoL202OGsvYXRhcmkvYXRhaW50cy5jIC0tIEF0YXJpIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogNS8yLzk0IFJvbWFuIEhvZGVrOgorICogIEFkZGVkIHN1cHBvcnQgZm9yIFRUIGludGVycnVwdHM7IHNldHVwIGZvciBUVCBTQ1UgKG1heSBzb21lb25lIGhhcworICogIHR3aWRkbGVkIHRoZXJlIGFuZCB3ZSB3b24ndCBnZXQgdGhlIHJpZ2h0IGludGVycnVwdHMgOi0oKQorICoKKyAqICBNYWpvciBjaGFuZ2U6IFRoZSBkZXZpY2UtaW5kZXBlbmRlbnQgY29kZSBpbiBtNjhrL2ludHMuYyBkaWRuJ3Qga25vdworICogIGFib3V0IG5vbi1hdXRvdmVjIGludHMgeWV0LiBJdCBoYXJkY29kZWQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBpbnRzIHRvCisgKiAgNyAoSVJRMS4uLklSUTcpLiBCdXQgdGhlIEF0YXJpIGhhcyBsb3RzIG9mIG5vbi1hdXRvdmVjIGludHMhIEkgbWFkZSB0aGUKKyAqICBudW1iZXIgb2YgcG9zc2libGUgaW50cyBhIGNvbnN0YW50IGRlZmluZWQgaW4gaW50ZXJydXB0LmgsIHdoaWNoIGlzCisgKiAgNDcgZm9yIHRoZSBBdGFyaS4gU28gd2UgY2FuIGNhbGwgcmVxdWVzdF9pcnEoKSBmb3IgYWxsIEF0YXJpIGludGVycnVwdHMKKyAqICBqdXN0IHRoZSBub3JtYWwgd2F5LiBBZGRpdGlvbmFsbHksIGFsbCB2ZWN0b3JzID49IDQ4IGFyZSBpbml0aWFsaXplZCB0bworICogIGNhbGwgdHJhcCgpIGluc3RlYWQgb2YgaW50aGFuZGxlcigpLiBUaGlzIG11c3QgYmUgY2hhbmdlZCBoZXJlLCB0b28uCisgKgorICogMTk5NS0wNy0xNiBMYXJzIEJyaW5raG9mZiA8ZjkzbGFickBkZC5jaGFsbWVycy5zZT46CisgKiAgQ29ycmVjdGVkIGEgYnVnIGluIGF0YXJpX2FkZF9pc3IoKSB3aGljaCByZWplY3RlZCBhbGwgU0NDCisgKiAgaW50ZXJydXB0IHNvdXJjZXMgaWYgdGhlcmUgd2VyZSBubyBUVCBNRlAhCisgKgorICogMTIvMTMvOTU6IE5ldyBpbnRlcmZhY2UgZnVuY3Rpb25zIGF0YXJpX2xldmVsX3RyaWdnZXJlZF9pbnQoKSBhbmQKKyAqICBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KCkgYXMgc3VwcG9ydCBmb3IgbGV2ZWwgdHJpZ2dlcmVkIFZNRSBpbnRlcnJ1cHRzLgorICoKKyAqIDAyLzEyLzk2OiAoUm9tYW4pCisgKiAgVG90YWwgcmV3cml0ZSBvZiBBdGFyaSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGZvciBuZXcgc2NoZW1lIHNlZSBjb21tZW50cworICogIGJlbG93LgorICoKKyAqIDE5OTYtMDktMDMgbGFycyBicmlua2hvZmYgPGY5M2xhYnJAZGQuY2hhbG1lcnMuc2U+OgorICogIEFkZGVkIG5ldyBmdW5jdGlvbiBhdGFyaV91bnJlZ2lzdGVyX3ZtZV9pbnQoKSwgYW5kCisgKiAgbW9kaWZpZWQgYXRhcmlfcmVnaXN0ZXJfdm1lX2ludCgpIGFzIHdlbGwgYXMgSVNfVkFMSURfSU5UTk8oKQorICogIHRvIHdvcmsgd2l0aCBpdC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RkbWEuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisKKworLyoKKyAqIEF0YXJpIGludGVycnVwdCBoYW5kbGluZyBzY2hlbWU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFsbCBpbnRlcnJ1cHQgc291cmNlIGhhdmUgYW4gaW50ZXJuYWwgbnVtYmVyIChkZWZpbmVkIGluCisgKiA8YXNtL2F0YXJpaW50cy5oPik6IEF1dG92ZWN0b3IgaW50ZXJydXB0cyBhcmUgMS4uNywgdGhlbiBmb2xsb3cgU1QtTUZQLAorICogVFQtTUZQLCBTQ0MsIGFuZCBmaW5hbGx5IFZNRSBpbnRlcnJ1cHRzLiBWZWN0b3IgbnVtYmVycyBmb3IgdGhlIGxhdHRlciBjYW4KKyAqIGJlIGFsbG9jYXRlZCBieSBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KCkuCisgKgorICogRWFjaCBpbnRlcnJ1cHQgY2FuIGJlIG9mIHRocmVlIHR5cGVzOgorICoKKyAqICAtIFNMT1c6IFRoZSBoYW5kbGVyIHJ1bnMgd2l0aCBhbGwgaW50ZXJydXB0cyBlbmFibGVkLCBleGNlcHQgdGhlIG9uZSBpdAorICogICAgd2FzIGNhbGxlZCBieSAodG8gYXZvaWQgcmVlbnRlcmluZykuIFRoaXMgc2hvdWxkIGJlIHRoZSB1c3VhbCBtZXRob2QuCisgKiAgICBCdXQgaXQgaXMgY3VycmVudGx5IHBvc3NpYmxlIG9ubHkgZm9yIE1GUCBpbnRzLCBzaW5jZSBvbmx5IHRoZSBNRlAKKyAqICAgIG9mZmVycyBhbiBlYXN5IHdheSB0byBtYXNrIGludGVycnVwdHMuCisgKgorICogIC0gRkFTVDogVGhlIGhhbmRsZXIgcnVucyB3aXRoIGFsbCBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGlzIHNob3VsZCBiZSB1c2VkCisgKiAgICBvbmx5IGZvciByZWFsbHkgZmFzdCBoYW5kbGVycywgdGhhdCBqdXN0IGRvIGFjdGlvbnMgaW1tZWRpYXRlbHkKKyAqICAgIG5lY2Vzc2FyeSwgYW5kIGxldCB0aGUgcmVzdCBkbyBhIGJvdHRvbSBoYWxmIG9yIHRhc2sgcXVldWUuCisgKgorICogIC0gUFJJT1JJVElaRUQ6IFRoZSBoYW5kbGVyIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSBoaWdoZXItbGV2ZWwgaW50cworICogICAgKGdyZWF0ZXIgSVBMLCBubyBNRlAgcHJpb3JpdGllcyEpLiBUaGlzIGlzIHRoZSBtZXRob2Qgb2YgY2hvaWNlIGZvciBpbnRzCisgKiAgICB3aGljaCBzaG91bGQgYmUgc2xvdywgYnV0IGFyZSBub3QgZnJvbSBhIE1GUC4KKyAqCisgKiBUaGUgZmVhdHVyZSBvZiBtb3JlIHRoYW4gb25lIGhhbmRsZXIgZm9yIG9uZSBpbnQgc291cmNlIGlzIHN0aWxsIHRoZXJlLCBidXQKKyAqIG9ubHkgYXBwbGljYWJsZSBpZiBhbGwgaGFuZGVycyBhcmUgb2YgdGhlIHNhbWUgdHlwZS4gVG8gbm90IHNsb3cgZG93bgorICogcHJvY2Vzc2luZyBvZiBpbnRzIHdpdGggb25seSBvbmUgaGFuZGxlciBieSB0aGUgY2hhaW5pbmcgZmVhdHVyZSwgdGhlIGxpc3QKKyAqIGNhbGxpbmcgZnVuY3Rpb24gYXRhcmlfY2FsbF9pcnFfbGlzdCgpIGlzIG9ubHkgcGx1Z2dlZCBpbiBhdCB0aGUgdGltZSB0aGUKKyAqIHNlY29uZCBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZXM6IEZvciBmYXN0LWFzLXBvc3NpYmxlIGludCBoYW5kbGluZywgdGhlcmUgYXJlIHNlcGFyYXRlCisgKiBlbnRyeSBwb2ludHMgZm9yIGVhY2ggdHlwZSAoc2xvdy9mYXN0L3ByaW8pLiBUaGUgYXNzZW1ibGVyIGhhbmRsZXIgY2FsbHMKKyAqIHRoZSBpcnEgZGlyZWN0bHkgaW4gdGhlIHVzdWFsIGNhc2UsIG5vIEMgd3JhcHBlciBpcyBpbnZvbHZlZC4gSW4gY2FzZSBvZgorICogbXVsdGlwbGUgaGFuZGxlcnMsIGF0YXJpX2NhbGxfaXJxX2xpc3QoKSBpcyByZWdpc3RlcmVkIGFzIGhhbmRsZXIgYW5kIGNhbGxzCisgKiBpbiB0dXJuIHRoZSByZWFsIGlycSdzLiBUbyBlYXNlIGFjY2VzcyBmcm9tIGFzc2VtYmxlciBsZXZlbCB0byB0aGUgaXJxCisgKiBmdW5jdGlvbiBwb2ludGVyIGFuZCBhY2NvbXBhbnlpbmcgZGF0YSwgdGhlc2UgdHdvIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZQorICogYXJyYXksIGlycV9oYW5kbGVyW10uIFRoZSByZXN0IG9mIGRhdGEgKHR5cGUsIG5hbWUpIGFyZSBwdXQgaW50byBhIHNlY29uZAorICogYXJyYXksIGlycV9wYXJhbSwgdGhhdCBpcyBhY2Nlc3NlZCBmcm9tIEMgb25seS4gRm9yIGVhY2ggc2xvdyBpbnRlcnJ1cHQgKDMyCisgKiBpbiBhbGwpIHRoZXJlIGFyZSBzZXBhcmF0ZSBoYW5kbGVyIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8KKyAqIGhhcmQtY29kZSB0aGUgTUZQIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHZhbHVlLCBhcmUgbmVjZXNzYXJ5IHRvIG1hc2sgdGhlCisgKiBpbnQuIElmIHRoZXJlJ2QgYmUgb25seSBvbmUgZ2VuZXJpYyBmdW5jdGlvbiwgbG90cyBvZiBjYWxjdWxhdGlvbnMgd291bGQgYmUKKyAqIG5lZWRlZCB0byBkZXRlcm1pbmUgTUZQIHJlZ2lzdGVyIGFuZCBpbnQgbWFzayBmcm9tIHRoZSB2ZWN0b3IgbnVtYmVyIDotKAorICoKKyAqIEZ1cnRoZXJtb3JlLCBzbG93IGludHMgbWF5IG5vdCBsb3dlciB0aGUgSVBMIGJlbG93IGl0cyBwcmV2aW91cyB2YWx1ZQorICogKGJlZm9yZSB0aGUgaW50IGhhcHBlbmVkKS4gVGhpcyBpcyBuZWVkZWQgc28gdGhhdCBhbiBpbnQgb2YgY2xhc3MgUFJJTywgb24KKyAqIHRoYXQgdGhpcyBpbnQgbWF5IGJlIHN0YWNrZWQsIGNhbm5vdCBiZSByZWVudGVyZWQuIFRoaXMgZmVhdHVyZSBpcworICogaW1wbGVtZW50ZWQgYXMgZm9sbG93czogSWYgdGhlIHN0YWNrIGZyYW1lIGZvcm1hdCBpcyAxICh0aHJvd2F3YXkpLCB0aGUgaW50CisgKiBpcyBub3Qgc3RhY2tlZCwgYW5kIHRoZSBJUEwgaXMgYW5kZWQgd2l0aCAweGZiZmYsIHJlc3VsdGluZyBpbiBhIG5ldyBsZXZlbAorICogMiwgd2hpY2ggc3RpbGwgYmxvY2tzIHRoZSBIU1lOQywgYnV0IG5vIGludGVycnVwdHMgb2YgaW50ZXJlc3QuIElmIHRoZQorICogZnJhbWUgZm9ybWF0IGlzIDAsIHRoZSBpbnQgaXMgbmVzdGVkLCBhbmQgdGhlIG9sZCBJUEwgdmFsdWUgY2FuIGJlIGZvdW5kIGluCisgKiB0aGUgc3IgY29weSBpbiB0aGUgZnJhbWUuCisgKi8KKworCisjZGVmaW5lCU5VTV9JTlRfU09VUkNFUwkoOCArIE5VTV9BVEFSSV9TT1VSQ0VTKQorCit0eXBlZGVmIHZvaWQgKCphc21faXJxX2hhbmRsZXIpKHZvaWQpOworCitzdHJ1Y3QgaXJxaGFuZGxlciB7CisJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZAkqZGV2X2lkOworfTsKKworc3RydWN0IGlycXBhcmFtIHsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWNvbnN0IGNoYXIJKmRldm5hbWU7Cit9OworCisvKgorICogQXJyYXkgd2l0aCBpcnEncyBhbmQgdGhlaXIgcGFyYW1ldGVyIGRhdGEuIFRoaXMgYXJyYXkgaXMgYWNjZXNzZWQgZnJvbSBsb3cKKyAqIGxldmVsIGFzc2VtYmxlciBjb2RlLCBzbyBhbiBlbGVtZW50IHNpemUgb2YgOCBhbGxvd3MgdXNhZ2Ugb2YgaW5kZXggc2NhbGluZworICogYWRkcmVzc2luZyBtb2RlLgorICovCitzdGF0aWMgc3RydWN0IGlycWhhbmRsZXIgaXJxX2hhbmRsZXJbTlVNX0lOVF9TT1VSQ0VTXTsKKworLyoKKyAqIFRoaXMgYXJyYXkgaG9sZCB0aGUgcmVzdCBvZiBwYXJhbWV0ZXJzIG9mIGludCBoYW5kbGVyczogdHlwZQorICogKHNsb3csZmFzdCxwcmlvKSBhbmQgdGhlIG5hbWUgb2YgdGhlIGhhbmRsZXIuIFRoZXNlIHZhbHVlcyBhcmUgb25seQorICogYWNjZXNzZWQgZnJvbSBDCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxcGFyYW0gaXJxX3BhcmFtW05VTV9JTlRfU09VUkNFU107CisKKy8qCisgKiBCaXRtYXAgZm9yIGZyZWUgaW50ZXJydXB0IHZlY3RvciBudW1iZXJzCisgKiAobmV3IHZlY3RvcnMgc3RhcnRpbmcgZnJvbSAweDcwIGNhbiBiZSBhbGxvY2F0ZWQgYnkKKyAqIGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQoKSkKKyAqLworc3RhdGljIGludCBmcmVlX3ZtZV92ZWNfYml0bWFwOworCisvKiBjaGVjayBmb3IgdmFsaWQgaW50IG51bWJlciAoY29tcGxleCwgc2lnaC4uLikgKi8KKyNkZWZpbmUJSVNfVkFMSURfSU5UTk8obikJCQkJCQkJCQkJCVwKKwkoKG4pID4gMCAmJgkJCQkJCQkJCQkJCQkJXAorCSAvKiBhdXRvdmVjIGFuZCBTVC1NRlAgb2sgYW55d2F5ICovCQkJCQkJCQlcCisJICgoKG4pIDwgVFRNRlBfU09VUkNFX0JBU0UpIHx8CQkJCQkJCQkJXAorCSAgLyogVFQtTUZQIG9rIGlmIHByZXNlbnQgKi8JCQkJCQkJCQlcCisJICAoKG4pID49IFRUTUZQX1NPVVJDRV9CQVNFICYmIChuKSA8IFNDQ19TT1VSQ0VfQkFTRSAmJgkJCVwKKwkgICBBVEFSSUhXX1BSRVNFTlQoVFRfTUZQKSkgfHwJCQkJCQkJCQlcCisJICAvKiBTQ0Mgb2sgaWYgcHJlc2VudCBhbmQgbnVtYmVyIGV2ZW4gKi8JCQkJCQlcCisJICAoKG4pID49IFNDQ19TT1VSQ0VfQkFTRSAmJiAobikgPCBWTUVfU09VUkNFX0JBU0UgJiYJCQlcCisJICAgISgobikgJiAxKSAmJiBBVEFSSUhXX1BSRVNFTlQoU0NDKSkgfHwJCQkJCQlcCisJICAvKiBncmVhdGVyIG51bWJlcnMgb2sgaWYgdGhleSBhcmUgcmVnaXN0ZXJlZCBWTUUgdmVjdG9ycyAqLwkJXAorCSAgKChuKSA+PSBWTUVfU09VUkNFX0JBU0UgJiYgKG4pIDwgVk1FX1NPVVJDRV9CQVNFICsgVk1FX01BWF9TT1VSQ0VTICYmIFwKKwkJICBmcmVlX3ZtZV92ZWNfYml0bWFwICYgKDEgPDwgKChuKSAtIFZNRV9TT1VSQ0VfQkFTRSkpKSkpCisKKworLyoKKyAqIEhlcmUgc3RhcnQgdGhlIGFzc2VtYmxlciBlbnRyeSBwb2ludHMgZm9yIGludGVycnVwdHMKKyAqLworCisjZGVmaW5lIElSUV9OQU1FKG5yKSBhdGFyaV9zbG93X2lycV8jI25yIyNfaGFuZGxlcih2b2lkKQorCisjZGVmaW5lCUJVSUxEX1NMT1dfSVJRKG4pCQkJCQkJICAgXAorYXNtbGlua2FnZSB2b2lkIElSUV9OQU1FKG4pOwkJCQkJCSAgIFwKKy8qIER1bW15IGZ1bmN0aW9uIHRvIGFsbG93IGFzbSB3aXRoIG9wZXJhbmRzLiAgKi8JCQkgICBcCit2b2lkIGF0YXJpX3Nsb3dfaXJxXyMjbiMjX2R1bW15ICh2b2lkKSB7CQkJCSAgIFwKK19fYXNtX18gKF9fQUxJR05fU1RSICJcbiIJCQkJCQkgICBcCisiYXRhcmlfc2xvd19pcnFfIiAjbiAiX2hhbmRsZXI6XHQiCQkJCQkgICBcCisiCWFkZGwJJTYsJTVcbiIJLyogcHJlZW1wdF9jb3VudCgpICs9IEhBUkRJUlFfT0ZGU0VUICovCSAgIFwKKwlTQVZFX0FMTF9JTlQgIlxuIgkJCQkJCSAgIFwKKwlHRVRfQ1VSUkVOVCglJWQwKSAiXG4iCQkJCQkJICAgXAorIglhbmRiCSN+KDE8PCglYzMmNykpLCVhNDp3XG4iCS8qIG1hc2sgdGhpcyBpbnRlcnJ1cHQgKi8JICAgXAorCS8qIGdldCBvbGQgSVBMIGZyb20gc3RhY2sgZnJhbWUgKi8JCQkJICAgXAorIgliZmV4dHUJJSVzcEAoJWMyKXsjNSwjM30sJSVkMFxuIgkJCQkgICBcCisiCW1vdmV3CSUlc3IsJSVkMVxuIgkJCQkJCSAgIFwKKyIJYmZpbnMJJSVkMCwlJWQxeyMyMSwjM31cbiIJCQkJCSAgIFwKKyIJbW92ZXcJJSVkMSwlJXNyXG4iCQkvKiBzZXQgSVBMID0gcHJldmlvdXMgdmFsdWUgKi8JICAgXAorIglhZGRxbAkjMSwlYTBcbiIJCQkJCQkgICBcCisiCWxlYQklYTEsJSVhMFxuIgkJCQkJCSAgIFwKKyIJcGVhCSUlc3BAXG4iCQkvKiBwdXNoIGFkZHIgb2YgZnJhbWUgKi8JICAgXAorIgltb3ZlbAklJWEwQCg0KSwlJXNwQC1cbiIJLyogcHVzaCBoYW5kbGVyIGRhdGEgKi8JCSAgIFwKKyIJcGVhCSglYzMrOClcbiIJCS8qIHB1c2ggaW50IG51bWJlciAqLwkJICAgXAorIgltb3ZlbAklJWEwQCwlJWEwXG4iCQkJCQkJICAgXAorIglqYnNyCSUlYTBAXG4iCQkvKiBjYWxsIHRoZSBoYW5kbGVyICovCQkgICBcCisiCWFkZHFsCSM4LCUlc3BcbiIJCQkJCQkgICBcCisiCWFkZHFsCSM0LCUlc3BcbiIJCQkJCQkgICBcCisiCW9ydwkjMHgwNjAwLCUlc3JcbiIJCQkJCQkgICBcCisiCWFuZHcJIzB4ZmVmZiwlJXNyXG4iCQkvKiBzZXQgSVBMID0gNiBhZ2FpbiAqLwkJICAgXAorIglvcmIJIygxPDwoJWMzJjcpKSwlYTQ6d1xuIgkvKiBub3cgdW5tYXNrIHRoZSBpbnQgYWdhaW4gKi8JICAgXAorIglqYnJhCXJldF9mcm9tX2ludGVycnVwdFxuIgkJCQkJICAgXAorCSA6IDogImkiICgma3N0YXRfY3B1KDApLmlycXNbbis4XSksICJpIiAoJmlycV9oYW5kbGVyW24rOF0pLAkgICBcCisJICAgICAibiIgKFBUX09GRl9TUiksICJuIiAobiksCQkJCQkgICBcCisJICAgICAiaSIgKG4gJiA4ID8gKG4gJiAxNiA/ICZ0dF9tZnAuaW50X21rX2EgOiAmbWZwLmludF9ta19hKQkgICBcCisJCSAgICAgICAgOiAobiAmIDE2ID8gJnR0X21mcC5pbnRfbWtfYiA6ICZtZnAuaW50X21rX2IpKSwJICAgXAorCSAgICAgIm0iIChwcmVlbXB0X2NvdW50KCkpLCAiZGkiIChIQVJESVJRX09GRlNFVCkJCSAgIFwKKyk7CQkJCQkJCQkJICAgXAorCWZvciAoOzspOwkJCS8qIGZha2Ugbm9yZXR1cm4gKi8JCSAgIFwKK30KKworQlVJTERfU0xPV19JUlEoMCk7CitCVUlMRF9TTE9XX0lSUSgxKTsKK0JVSUxEX1NMT1dfSVJRKDIpOworQlVJTERfU0xPV19JUlEoMyk7CitCVUlMRF9TTE9XX0lSUSg0KTsKK0JVSUxEX1NMT1dfSVJRKDUpOworQlVJTERfU0xPV19JUlEoNik7CitCVUlMRF9TTE9XX0lSUSg3KTsKK0JVSUxEX1NMT1dfSVJRKDgpOworQlVJTERfU0xPV19JUlEoOSk7CitCVUlMRF9TTE9XX0lSUSgxMCk7CitCVUlMRF9TTE9XX0lSUSgxMSk7CitCVUlMRF9TTE9XX0lSUSgxMik7CitCVUlMRF9TTE9XX0lSUSgxMyk7CitCVUlMRF9TTE9XX0lSUSgxNCk7CitCVUlMRF9TTE9XX0lSUSgxNSk7CitCVUlMRF9TTE9XX0lSUSgxNik7CitCVUlMRF9TTE9XX0lSUSgxNyk7CitCVUlMRF9TTE9XX0lSUSgxOCk7CitCVUlMRF9TTE9XX0lSUSgxOSk7CitCVUlMRF9TTE9XX0lSUSgyMCk7CitCVUlMRF9TTE9XX0lSUSgyMSk7CitCVUlMRF9TTE9XX0lSUSgyMik7CitCVUlMRF9TTE9XX0lSUSgyMyk7CitCVUlMRF9TTE9XX0lSUSgyNCk7CitCVUlMRF9TTE9XX0lSUSgyNSk7CitCVUlMRF9TTE9XX0lSUSgyNik7CitCVUlMRF9TTE9XX0lSUSgyNyk7CitCVUlMRF9TTE9XX0lSUSgyOCk7CitCVUlMRF9TTE9XX0lSUSgyOSk7CitCVUlMRF9TTE9XX0lSUSgzMCk7CitCVUlMRF9TTE9XX0lSUSgzMSk7CisKK2FzbV9pcnFfaGFuZGxlciBzbG93X2hhbmRsZXJzWzMyXSA9IHsKKwlbMF0JPSBhdGFyaV9zbG93X2lycV8wX2hhbmRsZXIsCisJWzFdCT0gYXRhcmlfc2xvd19pcnFfMV9oYW5kbGVyLAorCVsyXQk9IGF0YXJpX3Nsb3dfaXJxXzJfaGFuZGxlciwKKwlbM10JPSBhdGFyaV9zbG93X2lycV8zX2hhbmRsZXIsCisJWzRdCT0gYXRhcmlfc2xvd19pcnFfNF9oYW5kbGVyLAorCVs1XQk9IGF0YXJpX3Nsb3dfaXJxXzVfaGFuZGxlciwKKwlbNl0JPSBhdGFyaV9zbG93X2lycV82X2hhbmRsZXIsCisJWzddCT0gYXRhcmlfc2xvd19pcnFfN19oYW5kbGVyLAorCVs4XQk9IGF0YXJpX3Nsb3dfaXJxXzhfaGFuZGxlciwKKwlbOV0JPSBhdGFyaV9zbG93X2lycV85X2hhbmRsZXIsCisJWzEwXQk9IGF0YXJpX3Nsb3dfaXJxXzEwX2hhbmRsZXIsCisJWzExXQk9IGF0YXJpX3Nsb3dfaXJxXzExX2hhbmRsZXIsCisJWzEyXQk9IGF0YXJpX3Nsb3dfaXJxXzEyX2hhbmRsZXIsCisJWzEzXQk9IGF0YXJpX3Nsb3dfaXJxXzEzX2hhbmRsZXIsCisJWzE0XQk9IGF0YXJpX3Nsb3dfaXJxXzE0X2hhbmRsZXIsCisJWzE1XQk9IGF0YXJpX3Nsb3dfaXJxXzE1X2hhbmRsZXIsCisJWzE2XQk9IGF0YXJpX3Nsb3dfaXJxXzE2X2hhbmRsZXIsCisJWzE3XQk9IGF0YXJpX3Nsb3dfaXJxXzE3X2hhbmRsZXIsCisJWzE4XQk9IGF0YXJpX3Nsb3dfaXJxXzE4X2hhbmRsZXIsCisJWzE5XQk9IGF0YXJpX3Nsb3dfaXJxXzE5X2hhbmRsZXIsCisJWzIwXQk9IGF0YXJpX3Nsb3dfaXJxXzIwX2hhbmRsZXIsCisJWzIxXQk9IGF0YXJpX3Nsb3dfaXJxXzIxX2hhbmRsZXIsCisJWzIyXQk9IGF0YXJpX3Nsb3dfaXJxXzIyX2hhbmRsZXIsCisJWzIzXQk9IGF0YXJpX3Nsb3dfaXJxXzIzX2hhbmRsZXIsCisJWzI0XQk9IGF0YXJpX3Nsb3dfaXJxXzI0X2hhbmRsZXIsCisJWzI1XQk9IGF0YXJpX3Nsb3dfaXJxXzI1X2hhbmRsZXIsCisJWzI2XQk9IGF0YXJpX3Nsb3dfaXJxXzI2X2hhbmRsZXIsCisJWzI3XQk9IGF0YXJpX3Nsb3dfaXJxXzI3X2hhbmRsZXIsCisJWzI4XQk9IGF0YXJpX3Nsb3dfaXJxXzI4X2hhbmRsZXIsCisJWzI5XQk9IGF0YXJpX3Nsb3dfaXJxXzI5X2hhbmRsZXIsCisJWzMwXQk9IGF0YXJpX3Nsb3dfaXJxXzMwX2hhbmRsZXIsCisJWzMxXQk9IGF0YXJpX3Nsb3dfaXJxXzMxX2hhbmRsZXIKK307CisKK2FzbWxpbmthZ2Ugdm9pZCBhdGFyaV9mYXN0X2lycV9oYW5kbGVyKCB2b2lkICk7Cithc21saW5rYWdlIHZvaWQgYXRhcmlfcHJpb19pcnFfaGFuZGxlciggdm9pZCApOworCisvKiBEdW1teSBmdW5jdGlvbiB0byBhbGxvdyBhc20gd2l0aCBvcGVyYW5kcy4gICovCit2b2lkIGF0YXJpX2Zhc3RfcHJpb19pcnFfZHVtbXkgKHZvaWQpIHsKK19fYXNtX18gKF9fQUxJR05fU1RSICJcbiIKKyJhdGFyaV9mYXN0X2lycV9oYW5kbGVyOlxuXHQiCisJIm9ydwkjMHg3MDAsJSVzclxuIgkJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworImF0YXJpX3ByaW9faXJxX2hhbmRsZXI6XG5cdCIKKwkiYWRkbAklMywlMlxuXHQiCQkvKiBwcmVlbXB0X2NvdW50KCkgKz0gSEFSRElSUV9PRkZTRVQgKi8KKwlTQVZFX0FMTF9JTlQgIlxuXHQiCisJR0VUX0NVUlJFTlQoJSVkMCkgIlxuXHQiCisJLyogZ2V0IHZlY3RvciBudW1iZXIgZnJvbSBzdGFjayBmcmFtZSBhbmQgY29udmVydCB0byBzb3VyY2UgKi8KKwkiYmZleHR1CSUlc3BAKCVjMSl7IzQsIzEwfSwlJWQwXG5cdCIKKwkic3VidwkjKDB4NDAtOCksJSVkMFxuXHQiCisJImpwbAkxZlxuXHQiCisJImFkZHcJIygweDQwLTgtMHgxOCksJSVkMFxuIgorICAgICIxOlx0bGVhCSVhMCwlJWEwXG5cdCIKKwkiYWRkcWwJIzEsJSVhMEAoJSVkMDpsOjQpXG5cdCIKKwkibGVhCWlycV9oYW5kbGVyLCUlYTBcblx0IgorCSJsZWEJJSVhMEAoJSVkMDpsOjgpLCUlYTBcblx0IgorCSJwZWEJJSVzcEBcblx0IgkJLyogcHVzaCBmcmFtZSBhZGRyZXNzICovCisJIm1vdmVsCSUlYTBAKDQpLCUlc3BALVxuXHQiCS8qIHB1c2ggaGFuZGxlciBkYXRhICovCisJIm1vdmVsCSUlZDAsJSVzcEAtXG5cdCIJLyogcHVzaCBpbnQgbnVtYmVyICovCisJIm1vdmVsCSUlYTBALCUlYTBcblx0IgorCSJqc3IJJSVhMEBcblx0IgkJLyogYW5kIGNhbGwgdGhlIGhhbmRsZXIgKi8KKwkiYWRkcWwJIzgsJSVzcFxuXHQiCisJImFkZHFsCSM0LCUlc3Bcblx0IgorCSJqYnJhCXJldF9mcm9tX2ludGVycnVwdCIKKwkgOiA6ICJpIiAoJmtzdGF0X2NwdSgwKS5pcnFzKSwgIm4iIChQVF9PRkZfRk9STUFUVkVDKSwKKwkgICAgICJtIiAocHJlZW1wdF9jb3VudCgpKSwgImRpIiAoSEFSRElSUV9PRkZTRVQpCispOworCWZvciAoOzspOworfQorCisvKiBHSzoKKyAqIEhCTCBJUlEgaGFuZGxlciBmb3IgRmFsY29uLiBOb2JvZHkgbmVlZHMgaXQgOi0pCisgKiArK2FuZHJlYXM6IHJhaXNlIGlwbCB0byBkaXNhYmxlIGZ1cnRoZXIgSEJMQU5LIGludGVycnVwdHMuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBmYWxjb25faGJsaGFuZGxlcih2b2lkKTsKK2FzbSgiLnRleHRcbiIKK19fQUxJR05fU1RSICJcblx0IgorImZhbGNvbl9oYmxoYW5kbGVyOlxuXHQiCisJIm9ydwkjMHgyMDAsJXNwQFxuXHQiCS8qIHNldCBzYXZlZCBpcGwgdG8gMiAqLworCSJydGUiKTsKKworLyogRGVmaW5lZCBpbiBlbnRyeS5TOyBvbmx5IGluY3JlbWVudHMgJ251bV9zcHVyaW91cycgKi8KK2FzbWxpbmthZ2Ugdm9pZCBiYWRfaW50ZXJydXB0KHZvaWQpOworCitleHRlcm4gdm9pZCBhdGFyaV9taWNyb3dpcmVfY21kKCBpbnQgY21kICk7CisKK2V4dGVybiBpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CisKKy8qCisgKiB2b2lkIGF0YXJpX2luaXRfSVJRICh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCisgKiB0aGUgYXRhcmkgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgorICovCisKK3ZvaWQgX19pbml0IGF0YXJpX2luaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIHRoZSB2ZWN0b3IgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVF9TT1VSQ0VTOyArK2kpIHsKKwkJdmVjdG9yc1tJUlFfU09VUkNFX1RPX1ZFQ1RPUihpKV0gPSBiYWRfaW50ZXJydXB0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIE1GUChzKSAqLworCisjaWZkZWYgQVRBUklfVVNFX1NPRlRXQVJFX0VPSQorCW1mcC52ZWNfYWRyICA9IDB4NDg7CS8qIFNvZnR3YXJlIEVPSS1Nb2RlICovCisjZWxzZQorCW1mcC52ZWNfYWRyICA9IDB4NDA7CS8qIEF1dG9tYXRpYyBFT0ktTW9kZSAqLworI2VuZGlmCisJbWZwLmludF9lbl9hID0gMHgwMDsJLyogdHVybiBvZmYgTUZQLUludHMgKi8KKwltZnAuaW50X2VuX2IgPSAweDAwOworCW1mcC5pbnRfbWtfYSA9IDB4ZmY7CS8qIG5vIE1hc2tpbmcgKi8KKwltZnAuaW50X21rX2IgPSAweGZmOworCisJaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9NRlApKSB7CisjaWZkZWYgQVRBUklfVVNFX1NPRlRXQVJFX0VPSQorCQl0dF9tZnAudmVjX2FkciAgPSAweDU4OwkJLyogU29mdHdhcmUgRU9JLU1vZGUgKi8KKyNlbHNlCisJCXR0X21mcC52ZWNfYWRyICA9IDB4NTA7CQkvKiBBdXRvbWF0aWMgRU9JLU1vZGUgKi8KKyNlbmRpZgorCQl0dF9tZnAuaW50X2VuX2EgPSAweDAwOwkJLyogdHVybiBvZmYgTUZQLUludHMgKi8KKwkJdHRfbWZwLmludF9lbl9iID0gMHgwMDsKKwkJdHRfbWZwLmludF9ta19hID0gMHhmZjsJCS8qIG5vIE1hc2tpbmcgKi8KKwkJdHRfbWZwLmludF9ta19iID0gMHhmZjsKKwl9CisKKwlpZiAoQVRBUklIV19QUkVTRU5UKFNDQykgJiYgIWF0YXJpX1NDQ19yZXNldF9kb25lKSB7CisJCXNjYy5jaGFfYV9jdHJsID0gOTsKKwkJTUZQREVMQVkoKTsKKwkJc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KKwl9CisKKwlpZiAoQVRBUklIV19QUkVTRU5UKFNDVSkpIHsKKwkJLyogaW5pdCB0aGUgU0NVIGlmIHByZXNlbnQgKi8KKwkJdHRfc2N1LnN5c19tYXNrID0gMHgxMDsJCS8qIGVuYWJsZSBWQkwgKGZvciB0aGUgY3Vyc29yKSBhbmQKKwkJCQkJCQkJCSAqIGRpc2FibGUgSFNZTkMgaW50ZXJydXB0cyAod2hvCisJCQkJCQkJCQkgKiBuZWVkcyB0aGVtPykgIE1GUCBhbmQgU0NDIGFyZQorCQkJCQkJCQkJICogZW5hYmxlZCBpbiBWTUUgbWFzaworCQkJCQkJCQkJICovCisJCXR0X3NjdS52bWVfbWFzayA9IDB4NjA7CQkvKiBlbmFibGUgTUZQIGFuZCBTQ0MgaW50cyAqLworCX0KKwllbHNlIHsKKwkJLyogSWYgbm8gU0NVIGFuZCBubyBIYWRlcywgdGhlIEhTWU5DIGludGVycnVwdCBuZWVkcyB0byBiZQorCQkgKiBkaXNhYmxlZCB0aGlzIHdheS4gKEVsc2UgX2ludGhhbmRsZXIgaW4ga2VybmVsL3N5c19jYWxsLlMKKwkJICogZ2V0cyBvdmVycnVucykKKwkJICovCisKKwkJaWYgKCFNQUNIX0lTX0hBREVTKQorCQkJdmVjdG9yc1tWRUNfSU5UMl0gPSBmYWxjb25faGJsaGFuZGxlcjsKKwl9CisKKwlpZiAoQVRBUklIV19QUkVTRU5UKFBDTV84QklUKSAmJiBBVEFSSUhXX1BSRVNFTlQoTUlDUk9XSVJFKSkgeworCQkvKiBJbml0aWFsaXplIHRoZSBMTTE5OTIgU291bmQgQ29udHJvbGxlciB0byBlbmFibGUKKwkJICAgdGhlIFBTRyBzb3VuZC4gIFRoaXMgaXMgbWlzcGxhY2VkIGhlcmUsIGl0IHNob3VsZAorCQkgICBiZSBpbiBhbiBhdGFzb3VuZF9pbml0KCksIHRoYXQgZG9lc24ndCBleGlzdCB5ZXQuICovCisJCWF0YXJpX21pY3Jvd2lyZV9jbWQoTVdfTE0xOTkyX1BTR19ISUdIKTsKKwl9CisKKwlzdGRtYV9pbml0KCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBQU0c6IGFsbCBzb3VuZHMgb2ZmLCBib3RoIHBvcnRzIG91dHB1dCAqLworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDc7CisJc291bmRfeW0ud2RfZGF0YSA9IDB4ZmY7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IGF0YXJpX2NhbGxfaXJxX2xpc3QoIGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwICkKK3sKKwlpcnFfbm9kZV90ICpub2RlOworCisJZm9yIChub2RlID0gKGlycV9ub2RlX3QgKilkZXZfaWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KQorCQlub2RlLT5oYW5kbGVyKGlycSwgbm9kZS0+ZGV2X2lkLCBmcCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCisgKiBhdGFyaV9yZXF1ZXN0X2lycSA6IGFkZCBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBhIHBhcnRpY3VsYXIKKyAqICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlLgorICogICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYWRkaXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgMC4KKyAqLworCitpbnQgYXRhcmlfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCWludCB2ZWN0b3I7CisJdW5zaWduZWQgbG9uZyBvZmxhZ3MgPSBmbGFnczsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBhIGhhY2sgdG8gbWFrZSBzb21lIFBDSSBjYXJkIGRyaXZlcnMgd29yaywKKwkgKiB3aGljaCBzZXQgdGhlIFNBX1NISVJRIGZsYWcuCisJICovCisKKwlmbGFncyAmPSB+U0FfU0hJUlE7CisKKwlpZiAoZmxhZ3MgPT0gU0FfSU5URVJSVVBUKSB7CisJCXByaW50ayAoIiVzOiBTQV9JTlRFUlJVUFQgY2hhbmdlZCB0byBJUlFfVFlQRV9TTE9XIGZvciAlc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgZGV2bmFtZSk7CisJCWZsYWdzID0gSVJRX1RZUEVfU0xPVzsKKwl9CisJaWYgKGZsYWdzIDwgSVJRX1RZUEVfU0xPVyB8fCBmbGFncyA+IElSUV9UWVBFX1BSSU8pIHsKKwkJcHJpbnRrICgiJXM6IEJhZCBpcnEgdHlwZSAweCVseCA8MHglbHg+IHJlcXVlc3RlZCBmcm9tICVzXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgZmxhZ3MsIG9mbGFncywgZGV2bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIUlTX1ZBTElEX0lOVE5PKGlycSkpIHsKKwkJcHJpbnRrICgiJXM6IFVua25vd24gaXJxICVkIHJlcXVlc3RlZCBmcm9tICVzXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJdmVjdG9yID0gSVJRX1NPVVJDRV9UT19WRUNUT1IoaXJxKTsKKworCS8qCisJICogQ2hlY2sgdHlwZS9zb3VyY2UgY29tYmluYXRpb246IHNsb3cgaW50cyBhcmUgKGN1cnJlbnRseSkKKwkgKiBvbmx5IHBvc3NpYmxlIGZvciBNRlAtaW50ZXJydXB0cy4KKwkgKi8KKwlpZiAoZmxhZ3MgPT0gSVJRX1RZUEVfU0xPVyAmJgorCQkoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkpIHsKKwkJcHJpbnRrICgiJXM6IFNsb3cgaXJxIHJlcXVlc3RlZCBmb3Igbm9uLU1GUCBzb3VyY2UgJWQgZnJvbSAlc1xuIiwKKwkJICAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2ZWN0b3JzW3ZlY3Rvcl0gPT0gYmFkX2ludGVycnVwdCkgeworCQkvKiBpbnQgaGFzIG5vIGhhbmRsZXIgeWV0ICovCisJCWlycV9oYW5kbGVyW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJCWlycV9oYW5kbGVyW2lycV0uZGV2X2lkICA9IGRldl9pZDsKKwkJaXJxX3BhcmFtW2lycV0uZmxhZ3MgICA9IGZsYWdzOworCQlpcnFfcGFyYW1baXJxXS5kZXZuYW1lID0gZGV2bmFtZTsKKwkJdmVjdG9yc1t2ZWN0b3JdID0KKwkJCShmbGFncyA9PSBJUlFfVFlQRV9TTE9XKSA/IHNsb3dfaGFuZGxlcnNbaXJxLVNUTUZQX1NPVVJDRV9CQVNFXSA6CisJCQkoZmxhZ3MgPT0gSVJRX1RZUEVfRkFTVCkgPyBhdGFyaV9mYXN0X2lycV9oYW5kbGVyIDoKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgYXRhcmlfcHJpb19pcnFfaGFuZGxlcjsKKwkJLyogSWYgTUZQIGludCwgYWxzbyBlbmFibGUgYW5kIHVtYXNrIGl0ICovCisJCWF0YXJpX3R1cm5vbl9pcnEoaXJxKTsKKwkJYXRhcmlfZW5hYmxlX2lycShpcnEpOworCisJCXJldHVybiAwOworCX0KKwllbHNlIGlmIChpcnFfcGFyYW1baXJxXS5mbGFncyA9PSBmbGFncykgeworCQkvKiBvbGQgaGFuZGxlciBpcyBvZiBzYW1lIHR5cGUgLT4gaGFuZGxlcnMgY2FuIGJlIGNoYWluZWQgKi8KKwkJaXJxX25vZGVfdCAqbm9kZTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKGlycV9oYW5kbGVyW2lycV0uaGFuZGxlciAhPSBhdGFyaV9jYWxsX2lycV9saXN0KSB7CisJCQkvKiBPbmx5IG9uZSBoYW5kbGVyIHlldCwgbWFrZSBhIG5vZGUgZm9yIHRoaXMgZmlyc3Qgb25lICovCisJCQlpZiAoIShub2RlID0gbmV3X2lycV9ub2RlKCkpKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJbm9kZS0+aGFuZGxlciA9IGlycV9oYW5kbGVyW2lycV0uaGFuZGxlcjsKKwkJCW5vZGUtPmRldl9pZCAgPSBpcnFfaGFuZGxlcltpcnFdLmRldl9pZDsKKwkJCW5vZGUtPmRldm5hbWUgPSBpcnFfcGFyYW1baXJxXS5kZXZuYW1lOworCQkJbm9kZS0+bmV4dCA9IE5VTEw7CisKKwkJCWlycV9oYW5kbGVyW2lycV0uaGFuZGxlciA9IGF0YXJpX2NhbGxfaXJxX2xpc3Q7CisJCQlpcnFfaGFuZGxlcltpcnFdLmRldl9pZCAgPSBub2RlOworCQkJaXJxX3BhcmFtW2lycV0uZGV2bmFtZSAgID0gImNoYWluZWQiOworCQl9CisKKwkJaWYgKCEobm9kZSA9IG5ld19pcnFfbm9kZSgpKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlub2RlLT5oYW5kbGVyID0gaGFuZGxlcjsKKwkJbm9kZS0+ZGV2X2lkICA9IGRldl9pZDsKKwkJbm9kZS0+ZGV2bmFtZSA9IGRldm5hbWU7CisJCS8qIG5ldyBoYW5kbGVycyBhcmUgcHV0IGluIGZyb250IG9mIHRoZSBxdWV1ZSAqLworCQlub2RlLT5uZXh0ID0gaXJxX2hhbmRsZXJbaXJxXS5kZXZfaWQ7CisJCWlycV9oYW5kbGVyW2lycV0uZGV2X2lkID0gbm9kZTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXByaW50ayAoIiVzOiBJcnEgJWQgYWxsb2NhdGVkIGJ5IG90aGVyIHR5cGUgaW50IChjYWxsIGZyb20gJXMpXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9Cit9CisKK3ZvaWQgYXRhcmlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHZlY3RvcjsKKwlpcnFfbm9kZV90ICoqbGlzdCwgKm5vZGU7CisKKwlpZiAoIUlTX1ZBTElEX0lOVE5PKGlycSkpIHsKKwkJcHJpbnRrKCIlczogVW5rbm93biBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCXZlY3RvciA9IElSUV9TT1VSQ0VfVE9fVkVDVE9SKGlycSk7CisJaWYgKHZlY3RvcnNbdmVjdG9yXSA9PSBiYWRfaW50ZXJydXB0KQorCQlnb3RvIG5vdF9mb3VuZDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChpcnFfaGFuZGxlcltpcnFdLmhhbmRsZXIgIT0gYXRhcmlfY2FsbF9pcnFfbGlzdCkgeworCQkvKiBJdCdzIHRoZSBvbmx5IGhhbmRsZXIgZm9yIHRoZSBpbnRlcnJ1cHQgKi8KKwkJaWYgKGlycV9oYW5kbGVyW2lycV0uZGV2X2lkICE9IGRldl9pZCkgeworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJZ290byBub3RfZm91bmQ7CisJCX0KKwkJaXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwkJaXJxX2hhbmRsZXJbaXJxXS5kZXZfaWQgID0gTlVMTDsKKwkJaXJxX3BhcmFtW2lycV0uZGV2bmFtZSAgID0gTlVMTDsKKwkJdmVjdG9yc1t2ZWN0b3JdID0gYmFkX2ludGVycnVwdDsKKwkJLyogSWYgTUZQIGludCwgYWxzbyBkaXNhYmxlIGl0ICovCisJCWF0YXJpX2Rpc2FibGVfaXJxKGlycSk7CisJCWF0YXJpX3R1cm5vZmZfaXJxKGlycSk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogVGhlIGludGVycnVwdCBpcyBjaGFpbmVkLCBmaW5kIHRoZSBpcnEgb24gdGhlIGxpc3QgKi8KKwlmb3IobGlzdCA9IChpcnFfbm9kZV90ICoqKSZpcnFfaGFuZGxlcltpcnFdLmRldl9pZDsgKmxpc3Q7IGxpc3QgPSAmKCpsaXN0KS0+bmV4dCkgeworCQlpZiAoKCpsaXN0KS0+ZGV2X2lkID09IGRldl9pZCkgYnJlYWs7CisJfQorCWlmICghKmxpc3QpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlnb3RvIG5vdF9mb3VuZDsKKwl9CisKKwkoKmxpc3QpLT5oYW5kbGVyID0gTlVMTDsgLyogTWFyayBpdCBhcyBmcmVlIGZvciByZWFsbG9jYXRpb24gKi8KKwkqbGlzdCA9ICgqbGlzdCktPm5leHQ7CisKKwkvKiBJZiB0aGVyZSdzIG5vdyBvbmx5IG9uZSBoYW5kbGVyLCB1bmNoYWluIHRoZSBpbnRlcnJ1cHQsIGkuZS4gcGx1ZyBpbgorCSAqIHRoZSBoYW5kbGVyIGRpcmVjdGx5IGFnYWluIGFuZCBvbWl0IGF0YXJpX2NhbGxfaXJxX2xpc3QgKi8KKwlub2RlID0gKGlycV9ub2RlX3QgKilpcnFfaGFuZGxlcltpcnFdLmRldl9pZDsKKwlpZiAobm9kZSAmJiAhbm9kZS0+bmV4dCkgeworCQlpcnFfaGFuZGxlcltpcnFdLmhhbmRsZXIgPSBub2RlLT5oYW5kbGVyOworCQlpcnFfaGFuZGxlcltpcnFdLmRldl9pZCAgPSBub2RlLT5kZXZfaWQ7CisJCWlycV9wYXJhbVtpcnFdLmRldm5hbWUgICA9IG5vZGUtPmRldm5hbWU7CisJCW5vZGUtPmhhbmRsZXIgPSBOVUxMOyAvKiBNYXJrIGl0IGFzIGZyZWUgZm9yIHJlYWxsb2NhdGlvbiAqLworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm47CisKK25vdF9mb3VuZDoKKwlwcmludGsoIiVzOiB0cmllZCB0byByZW1vdmUgaW52YWxpZCBpcnFcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGEgZnJlZSBpbnRlcnJ1cHQgdmVjdG9yIGZvcgorICogaGFyZHdhcmUgd2l0aCBhIHByb2dyYW1tYWJsZSBpbnQgdmVjdG9yIChwcm9iYWJseSBhIFZNRSBib2FyZCkuCisgKi8KKwordW5zaWduZWQgbG9uZyBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlpZigoZnJlZV92bWVfdmVjX2JpdG1hcCAmICgxIDw8IGkpKSA9PSAwKQorCQkJYnJlYWs7CisKKwlpZihpID09IDE2KQorCQlyZXR1cm4gMDsKKworCWZyZWVfdm1lX3ZlY19iaXRtYXAgfD0gMSA8PCBpOworCXJldHVybiAoVk1FX1NPVVJDRV9CQVNFICsgaSk7Cit9CisKKwordm9pZCBhdGFyaV91bnJlZ2lzdGVyX3ZtZV9pbnQodW5zaWduZWQgbG9uZyBpcnEpCit7CisJaWYoaXJxID49IFZNRV9TT1VSQ0VfQkFTRSAmJiBpcnEgPCBWTUVfU09VUkNFX0JBU0UgKyBWTUVfTUFYX1NPVVJDRVMpIHsKKwkJaXJxIC09IFZNRV9TT1VSQ0VfQkFTRTsKKwkJZnJlZV92bWVfdmVjX2JpdG1hcCAmPSB+KDEgPDwgaXJxKTsKKwl9Cit9CisKKworaW50IHNob3dfYXRhcmlfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVF9TT1VSQ0VTOyArK2kpIHsKKwkJaWYgKHZlY3RvcnNbSVJRX1NPVVJDRV9UT19WRUNUT1IoaSldID09IGJhZF9pbnRlcnJ1cHQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPCBTVE1GUF9TT1VSQ0VfQkFTRSkKKwkJCXNlcV9wcmludGYocCwgImF1dG8gJTJkOiAlMTB1ICIsCisJCQkJICAgICAgIGksIGtzdGF0X2NwdSgwKS5pcnFzW2ldKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihwLCAidmVjICQlMDJ4OiAlMTB1ICIsCisJCQkJICAgICAgIElSUV9TT1VSQ0VfVE9fVkVDVE9SKGkpLAorCQkJCSAgICAgICBrc3RhdF9jcHUoMCkuaXJxc1tpXSk7CisKKwkJaWYgKGlycV9oYW5kbGVyW2ldLmhhbmRsZXIgIT0gYXRhcmlfY2FsbF9pcnFfbGlzdCkgeworCQkJc2VxX3ByaW50ZihwLCAiJXNcbiIsIGlycV9wYXJhbVtpXS5kZXZuYW1lKTsKKwkJfQorCQllbHNlIHsKKwkJCWlycV9ub2RlX3QgKm47CisJCQlmb3IoIG4gPSAoaXJxX25vZGVfdCAqKWlycV9oYW5kbGVyW2ldLmRldl9pZDsgbjsgbiA9IG4tPm5leHQgKSB7CisJCQkJc2VxX3ByaW50ZihwLCAiJXNcbiIsIG4tPmRldm5hbWUpOworCQkJCWlmIChuLT5uZXh0KQorCQkJCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAgICAgICAgICAiICk7CisJCQl9CisJCX0KKwl9CisJaWYgKG51bV9zcHVyaW91cykKKwkJc2VxX3ByaW50ZihwLCAic3B1cmlvLjogJTEwdVxuIiwgbnVtX3NwdXJpb3VzKTsKKworCXJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFyaV9rc3ltcy5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YXJpX2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0NzU3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFyaV9rc3ltcy5jCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlrYi5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9qb3lzdGljay5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPgorCitleHRlcm4gdm9pZCBhdGFyaV9taWNyb3dpcmVfY21kKCBpbnQgY21kICk7CitleHRlcm4gaW50IGF0YXJpX01GUF9pbml0X2RvbmU7CitleHRlcm4gaW50IGF0YXJpX1NDQ19pbml0X2RvbmU7CitleHRlcm4gaW50IGF0YXJpX1NDQ19yZXNldF9kb25lOworCitFWFBPUlRfU1lNQk9MKGF0YXJpX21jaF9jb29raWUpOworRVhQT1JUX1NZTUJPTChhdGFyaV9tY2hfdHlwZSk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX2h3X3ByZXNlbnQpOworRVhQT1JUX1NZTUJPTChhdGFyaV9zd2l0Y2hlcyk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX2RvbnRfdG91Y2hfZmxvcHB5X3NlbGVjdCk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQpOworRVhQT1JUX1NZTUJPTChhdGFyaV91bnJlZ2lzdGVyX3ZtZV9pbnQpOworRVhQT1JUX1NZTUJPTChzdGRtYV9sb2NrKTsKK0VYUE9SVF9TWU1CT0woc3RkbWFfcmVsZWFzZSk7CitFWFBPUlRfU1lNQk9MKHN0ZG1hX290aGVyc193YWl0aW5nKTsKK0VYUE9SVF9TWU1CT0woc3RkbWFfaXNsb2NrZWQpOworRVhQT1JUX1NZTUJPTChhdGFyaV9zdHJhbV9hbGxvYyk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX3N0cmFtX2ZyZWUpOworCitFWFBPUlRfU1lNQk9MKGF0YXJpX01GUF9pbml0X2RvbmUpOworRVhQT1JUX1NZTUJPTChhdGFyaV9TQ0NfaW5pdF9kb25lKTsKK0VYUE9SVF9TWU1CT0woYXRhcmlfU0NDX3Jlc2V0X2RvbmUpOworCitFWFBPUlRfU1lNQk9MKGF0YXJpX21pY3Jvd2lyZV9jbWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YXNvdW5kLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA0MjUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YXNvdW5kLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuYworICoKKyAqICsrR2VlcnQ6IE1vdmVkIGFsbW9zdCBhbGwgc3R1ZmYgdG8gbGludXgvZHJpdmVycy9zb3VuZC8KKyAqCisgKiBUaGUgYXV0aG9yIG9mIGF0YXJpX25vc291bmQsIGF0YXJpX21rc291bmQgYW5kIGF0YXJpX21pY3Jvd2lyZV9jbWQgaXMKKyAqIHVua25vd24uICgrK3JvbWFuOiBUaGF0J3MgbWUuLi4gOi0pCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIDE5OTgtMDUtMzEgKythbmRyZWFzOiBhdGFyaV9ta3NvdW5kIHJld3JpdHRlbiB0byBhbHdheXMgdXNlIHRoZSBlbnZlbG9wZSwKKyAqCQkJIG5vIHRpbWVyLCBhdGFyaV9ub3NvdW5kIHJlbW92ZWQuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgorCisKKy8qCisgKiBzdHVmZiBmcm9tIHRoZSBvbGQgYXRhc291bmQuYworICovCisKK3ZvaWQgYXRhcmlfbWljcm93aXJlX2NtZCAoaW50IGNtZCkKK3sKKwl0dF9taWNyb3dpcmUubWFzayA9IDB4N2ZmOworCXR0X21pY3Jvd2lyZS5kYXRhID0gTVdfTE0xOTkyX0FERFIgfCBjbWQ7CisKKwkvKiBCdXN5IHdhaXQgZm9yIGRhdGEgYmVpbmcgY29tcGxldGVseSBzZW50IDotKCAqLworCXdoaWxlKCB0dF9taWNyb3dpcmUubWFzayAhPSAweDdmZikKKwkJOworfQorCisKKy8qIFBTRyBiYXNlIGZyZXF1ZW5jeSAqLworI2RlZmluZQlQU0dfRlJFUQkxMjUwMDAKKy8qIFBTRyBlbnZlbG9wZSBiYXNlIGZyZXF1ZW5jeSB0aW1lcyAxMCAqLworI2RlZmluZSBQU0dfRU5WX0ZSRVFfMTAJNzgxMjUKKwordm9pZCBhdGFyaV9ta3NvdW5kICh1bnNpZ25lZCBpbnQgaHosIHVuc2lnbmVkIGludCB0aWNrcykKK3sKKwkvKiBHZW5lcmF0ZXMgc291bmQgb2Ygc29tZSBmcmVxdWVuY3kgZm9yIHNvbWUgbnVtYmVyIG9mIGNsb2NrCisJICAgdGlja3MuICAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciB0bXA7CisJaW50IHBlcmlvZDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCisJLyogRGlzYWJsZSBnZW5lcmF0b3IgQSBpbiBtaXhlciBjb250cm9sLiAgKi8KKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSA3OworCXRtcCA9IHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbDsKKwl0bXAgfD0gMDExOworCXNvdW5kX3ltLndkX2RhdGEgPSB0bXA7CisKKwlpZiAoaHopIHsKKwkgICAgLyogQ29udmVydCBmcm9tIGZyZXF1ZW5jeSB2YWx1ZSB0byBQU0cgcGVyaW9kIHZhbHVlIChiYXNlCisJICAgICAgIGZyZXF1ZW5jeSAxMjUga0h6KS4gICovCisKKwkgICAgcGVyaW9kID0gUFNHX0ZSRVEgLyBoejsKKworCSAgICBpZiAocGVyaW9kID4gMHhmZmYpIHBlcmlvZCA9IDB4ZmZmOworCisJLyogU2V0IGdlbmVyYXRvciBBIGZyZXF1ZW5jeSB0byBoei4gICovCisJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMDsKKwlzb3VuZF95bS53ZF9kYXRhID0gcGVyaW9kICYgMHhmZjsKKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxOworCXNvdW5kX3ltLndkX2RhdGEgPSAocGVyaW9kID4+IDgpICYgMHhmOworCWlmICh0aWNrcykgeworCQkvKiBTZXQgbGVuZ3RoIG9mIGVudmVsb3BlIChtYXggOCBzZWMpLiAgKi8KKwkJaW50IGxlbmd0aCA9ICh0aWNrcyAqIFBTR19FTlZfRlJFUV8xMCkgLyBIWiAvIDEwOworCisJCWlmIChsZW5ndGggPiAweGZmZmYpIGxlbmd0aCA9IDB4ZmZmZjsKKwkJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMTE7CisJCXNvdW5kX3ltLndkX2RhdGEgPSBsZW5ndGggJiAweGZmOworCQlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxMjsKKwkJc291bmRfeW0ud2RfZGF0YSA9IGxlbmd0aCA+PiA4OworCQkvKiBFbnZlbG9wZSBmb3JtOiBtYXggLT4gbWluIHNpbmdsZS4gICovCisJCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDEzOworCQlzb3VuZF95bS53ZF9kYXRhID0gMDsKKwkJLyogVXNlIGVudmVsb3BlIGZvciBnZW5lcmF0b3IgQS4gICovCisJCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDg7CisJCXNvdW5kX3ltLndkX2RhdGEgPSAweDEwOworCX0gZWxzZSB7CisJCS8qIFNldCBnZW5lcmF0b3IgQSBsZXZlbCB0byBtYXhpbXVtLCBubyBlbnZlbG9wZS4gICovCisJCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDg7CisJCXNvdW5kX3ltLndkX2RhdGEgPSAxNTsKKwl9CisJLyogVHVybiBvbiBnZW5lcmF0b3IgQSBpbiBtaXhlciBjb250cm9sLiAgKi8KKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSA3OworCXRtcCAmPSB+MTsKKwlzb3VuZF95bS53ZF9kYXRhID0gdG1wOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuaCBiL2FyY2gvbTY4ay9hdGFyaS9hdGFzb3VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjI3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogTWlub3IgbnVtYmVycyBmb3IgdGhlIHNvdW5kIGRyaXZlci4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5IENyZWF0aXZlIGNhbGxlZCB0aGUgY29kZWMgY2hpcCBvZiBTQiBhcyBhIERTUC4gRm9yIHRoaXMKKyAqIHJlYXNvbiB0aGUgL2Rldi9kc3AgaXMgcmVzZXJ2ZWQgZm9yIGRpZ2l0aXplZCBhdWRpbyB1c2UuIFRoZXJlIGlzIGEKKyAqIGRldmljZSBmb3IgdHJ1ZSBEU1AgcHJvY2Vzc29ycyBidXQgaXQgd2lsbCBiZSBjYWxsZWQgc29tZXRoaW5nIGVsc2UuCisgKiBJbiB2My4wIGl0J3MgL2Rldi9zbmRwcm9jIGJ1dCB0aGlzIGNvdWxkIGJlIGEgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICovCisKKyNkZWZpbmUgU05EX05ERVZTCTI1NgkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGRldmljZXMgKi8KKyNkZWZpbmUgU05EX0RFVl9DVEwJMAkvKiBDb250cm9sIHBvcnQgL2Rldi9taXhlciAqLworI2RlZmluZSBTTkRfREVWX1NFUQkxCS8qIFNlcXVlbmNlciBvdXRwdXQgL2Rldi9zZXF1ZW5jZXIgKEZNCisJCQkJICAgc3ludGhlc2l6ZXIgYW5kIE1JREkgb3V0cHV0KSAqLworI2RlZmluZSBTTkRfREVWX01JRElOCTIJLyogUmF3IG1pZGkgYWNjZXNzICovCisjZGVmaW5lIFNORF9ERVZfRFNQCTMJLyogRGlnaXRpemVkIHZvaWNlIC9kZXYvZHNwICovCisjZGVmaW5lIFNORF9ERVZfQVVESU8JNAkvKiBTcGFyYyBjb21wYXRpYmxlIC9kZXYvYXVkaW8gKi8KKyNkZWZpbmUgU05EX0RFVl9EU1AxNgk1CS8qIExpa2UgL2Rldi9kc3AgYnV0IDE2IGJpdHMvc2FtcGxlICovCisjZGVmaW5lIFNORF9ERVZfU1RBVFVTCTYJLyogL2Rldi9zbmRzdGF0ICovCisvKiAjNyBub3QgaW4gdXNlIG5vdy4gV2FzIGluIDIuNC4gRnJlZSBmb3IgdXNlIGFmdGVyIHYzLjAuICovCisjZGVmaW5lIFNORF9ERVZfU0VRMgk4CS8qIC9kZXYvc2VxdWVuY2VyLCBsZXZlbCAyIGludGVyZmFjZSAqLworI2RlZmluZSBTTkRfREVWX1NORFBST0MgOQkvKiAvZGV2L3NuZHByb2MgZm9yIHByb2dyYW1tYWJsZSBkZXZpY2VzICovCisjZGVmaW5lIFNORF9ERVZfUFNTCVNORF9ERVZfU05EUFJPQworCisjZGVmaW5lIERTUF9ERUZBVUxUX1NQRUVECTgwMDAKKworI2RlZmluZSBPTgkJMQorI2RlZmluZSBPRkYJCTAKKworI2RlZmluZSBNQVhfQVVESU9fREVWCTUKKyNkZWZpbmUgTUFYX01JWEVSX0RFVgkyCisjZGVmaW5lIE1BWF9TWU5USF9ERVYJMworI2RlZmluZSBNQVhfTUlESV9ERVYJNgorI2RlZmluZSBNQVhfVElNRVJfREVWCTMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYxZDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0wLDAgKzEsNzI2IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQgQmpvZXJuIEJyYXVlbAorICoKKyAqICA1LzIvOTQgUm9tYW4gSG9kZWs6CisgKiAgICBBZGRlZCBzZXR0aW5nIG9mIHRpbWVfYWRqIHRvIGdldCBhIGJldHRlciBjbG9jay4KKyAqCisgKiAgNS8xNC85NCBSb21hbiBIb2RlazoKKyAqICAgIGdldHRvZCgpIGZvciBUVAorICoKKyAqICA1LzE1Lzk0IFJvbWFuIEhvZGVrOgorICogICAgaGFyZF9yZXNldF9ub3coKSBmb3IgQXRhcmkgKGFuZCBvdGhlcnM/KQorICoKKyAqICA5NC8xMi8zMCBBbmRyZWFzIFNjaHdhYjoKKyAqICAgIGF0YXJpX3NjaGVkX2luaXQgZml4ZWQgdG8gZ2V0IHByZWNpc2UgY2xvY2suCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGF0YXJpIHN0dWZmCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2h3dGVzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCit1X2xvbmcgYXRhcmlfbWNoX2Nvb2tpZTsKK3VfbG9uZyBhdGFyaV9tY2hfdHlwZTsKK3N0cnVjdCBhdGFyaV9od19wcmVzZW50IGF0YXJpX2h3X3ByZXNlbnQ7Cit1X2xvbmcgYXRhcmlfc3dpdGNoZXM7CitpbnQgYXRhcmlfZG9udF90b3VjaF9mbG9wcHlfc2VsZWN0OworaW50IGF0YXJpX3J0Y195ZWFyX29mZnNldDsKKworLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgYXRhcmlfcmVzZXQoIHZvaWQgKTsKKyNpZmRlZiBDT05GSUdfQVRBUklfRkxPUFBZCitleHRlcm4gdm9pZCBhdGFyaV9mbG9wcHlfc2V0dXAoY2hhciAqLCBpbnQgKik7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGF0YXJpX2dldF9tb2RlbChjaGFyICptb2RlbCk7CitzdGF0aWMgaW50IGF0YXJpX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CisKKy8qIGF0YXJpIHNwZWNpZmljIGlycSBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkIGF0YXJpX2luaXRfSVJRICh2b2lkKTsKK2V4dGVybiBpbnQgYXRhcmlfcmVxdWVzdF9pcnEgKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIGF0YXJpX2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgYXRhcmlfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGF0YXJpX2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBzaG93X2F0YXJpX2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgYXRhcmlfbWtzb3VuZCggdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgdGlja3MgKTsKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBhdGFyaV9oZWFydGJlYXQoIGludCBvbiApOworI2VuZGlmCisKKy8qIGF0YXJpIHNwZWNpZmljIHRpbWVyIGZ1bmN0aW9ucyAoaW4gdGltZS5jKSAqLworZXh0ZXJuIHZvaWQgYXRhcmlfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF0YXJpX2dldHRpbWVvZmZzZXQgKHZvaWQpOworZXh0ZXJuIGludCBhdGFyaV9tc3RlX2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgYXRhcmlfdHRfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIGludCBhdGFyaV9tc3RlX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgYXRhcmlfdHRfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcpOworCisvKiBhdGFyaSBzcGVjaWZpYyBkZWJ1ZyBmdW5jdGlvbnMgKGluIGRlYnVnLmMpICovCitleHRlcm4gdm9pZCBhdGFyaV9kZWJ1Z19pbml0KHZvaWQpOworCisKKy8qIEkndmUgbW92ZWQgaHdyZWdfcHJlc2VudCgpIGFuZCBod3JlZ19wcmVzZW50X2J5d3JpdGUoKSBvdXQgaW50bworICogbW0vaHd0ZXN0LmMsIHRvIGF2b2lkIGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgcm91dGluZQorICogaW4gdGhlIGtlcm5lbCBbSSB3YW50ZWQgdGhlbSBpbiBocDMwMCBhbmQgdGhleSB3ZXJlIGFscmVhZHkgdXNlZAorICogaW4gdGhlIG51YnVzIGNvZGUuIE5COiBJIGRvbid0IGhhdmUgYW4gQXRhcmkgc28gdGhpcyBtaWdodCAoanVzdAorICogY29uY2VpdmFibHkpIGJyZWFrIHNvbWV0aGluZy4KKyAqIEkndmUgcHJlc2VydmVkIHRoZSAjaWYgMCB2ZXJzaW9uIG9mIGh3cmVnX3ByZXNlbnRfYnl3cml0ZSgpIGhlcmUKKyAqIGZvciBwb3N0ZXJpdHkuCisgKiAgIC0tIFBldGVyIE1heWRlbGwgPHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWs+LCAwNS8xOTk4CisgKi8KKworI2lmIDAKK3N0YXRpYyBpbnQgX19pbml0Citod3JlZ19wcmVzZW50X2J5d3JpdGUodm9sYXRpbGUgdm9pZCAqcmVncCwgdW5zaWduZWQgY2hhciB2YWwpCit7CisgICAgaW50CQlyZXQ7CisgICAgbG9uZwlzYXZlX3NwLCBzYXZlX3ZicjsKKyAgICBzdGF0aWMgbG9uZyB0bXBfdmVjdG9yc1szXSA9IHsgWzJdID0gKGxvbmcpJiZhZnRlcl90ZXN0IH07CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworCSgJIm1vdmVjCSUvdmJyLCUyXG5cdCIJLyogc2F2ZSB2YnIgdmFsdWUgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICJtb3ZlYwklNCwlL3ZiclxuXHQiCS8qIHNldCB1cCB0ZW1wb3JhcnkgdmVjdG9ycyAgKi8KKwkJIm1vdmVsCSUvc3AsJTFcblx0IgkvKiBzYXZlIHNwICAgICAgICAgICAgICAgICAgICovCisJCSJtb3ZlcQkjMCwlMFxuXHQiCS8qIGFzc3VtZSBub3QgcHJlc2VudCAgICAgICAgKi8KKwkJIm1vdmViCSU1LCUzQFxuXHQiCS8qIHdyaXRlIHRoZSBoYXJkd2FyZSByZWcgICAgKi8KKwkJImNtcGIJJTNALCU1XG5cdCIJLyogY29tcGFyZSBpdCAgICAgICAgICAgICAgICAqLworCQkic2VxCSUwIgkJLyogY29tZXMgaGVyZSBvbmx5IGlmIHJlZyAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIHByZXNlbnQgICAgICAgICAgICAgICAgKi8KKwkJOiAiPWQmIiAocmV0KSwgIj1yJiIgKHNhdmVfc3ApLCAiPXImIiAoc2F2ZV92YnIpCisJCTogImEiIChyZWdwKSwgInIiICh0bXBfdmVjdG9ycyksICJkIiAodmFsKQorICAgICAgICAgICAgICAgICk7CisgIGFmdGVyX3Rlc3Q6CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgJIm1vdmVsCSUwLCUvc3Bcblx0IgkJLyogcmVzdG9yZSBzcCAgICAgICAgICAgICAgICAqLworICAgICAgICAibW92ZWMJJTEsJS92YnIiCQkJLyogcmVzdG9yZSB2YnIgICAgICAgICAgICAgICAqLworICAgICAgICA6IDogInIiIChzYXZlX3NwKSwgInIiIChzYXZlX3ZicikgOiAic3AiCisJKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYKKworCisvKiArK3JvbWFuOiBUaGlzIGlzIGEgbW9yZSBlbGFib3JhdGUgdGVzdCBmb3IgYW4gU0NDIGNoaXAsIHNpbmNlIHRoZSBwbGFpbgorICogTWVkdXNhIGJvYXJkIGdlbmVyYXRlcyBEVEFDSyBhdCB0aGUgU0NDJ3Mgc3RhbmRhcmQgYWRkcmVzc2VzLCBidXQgYSBTQ0MKKyAqIGJvYXJkIGluIHRoZSBNZWR1c2EgaXMgcG9zc2libGUuIEFsc28sIHRoZSBhZGRyZXNzZXMgd2hlcmUgdGhlIFNUX0VTQ0MKKyAqIHJlc2lkZXMgZ2VuZXJhdGUgRFRBQ0sgd2l0aG91dCB0aGUgY2hpcCwgdG9vLgorICogVGhlIG1ldGhvZCBpcyB0byB3cml0ZSB2YWx1ZXMgaW50byB0aGUgaW50ZXJydXB0IHZlY3RvciByZWdpc3RlciwgdGhhdAorICogc2hvdWxkIGJlIHJlYWRhYmxlIHdpdGhvdXQgdHJvdWJsZSAoZnJvbSBjaGFubmVsIEEhKS4KKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBzY2NfdGVzdCggdm9sYXRpbGUgY2hhciAqY3RsYSApCit7CisJaWYgKCFod3JlZ19wcmVzZW50KCBjdGxhICkpCisJCXJldHVybiggMCApOworCU1GUERFTEFZKCk7CisKKwkqY3RsYSA9IDI7IE1GUERFTEFZKCk7CisJKmN0bGEgPSAweDQwOyBNRlBERUxBWSgpOworCisJKmN0bGEgPSAyOyBNRlBERUxBWSgpOworCWlmICgqY3RsYSAhPSAweDQwKSByZXR1cm4oIDAgKTsKKwlNRlBERUxBWSgpOworCisJKmN0bGEgPSAyOyBNRlBERUxBWSgpOworCSpjdGxhID0gMHg2MDsgTUZQREVMQVkoKTsKKworCSpjdGxhID0gMjsgTUZQREVMQVkoKTsKKwlpZiAoKmN0bGEgIT0gMHg2MCkgcmV0dXJuKCAwICk7CisKKwlyZXR1cm4oIDEgKTsKK30KKworCisgICAgLyoKKyAgICAgKiAgUGFyc2UgYW4gQXRhcmktc3BlY2lmaWMgcmVjb3JkIGluIHRoZSBib290aW5mbworICAgICAqLworCitpbnQgX19pbml0IGF0YXJpX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlY29yZCkKK3sKKyAgICBpbnQgdW5rbm93biA9IDA7CisgICAgY29uc3QgdV9sb25nICpkYXRhID0gcmVjb3JkLT5kYXRhOworCisgICAgc3dpdGNoIChyZWNvcmQtPnRhZykgeworCWNhc2UgQklfQVRBUklfTUNIX0NPT0tJRToKKwkgICAgYXRhcmlfbWNoX2Nvb2tpZSA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX0FUQVJJX01DSF9UWVBFOgorCSAgICBhdGFyaV9tY2hfdHlwZSA9ICpkYXRhOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1bmtub3duID0gMTsKKyAgICB9CisgICAgcmV0dXJuKHVua25vd24pOworfQorCisKKy8qIFBhcnNlIHRoZSBBdGFyaS1zcGVjaWZpYyBzd2l0Y2hlcz0gb3B0aW9uLiAqLwordm9pZCBfX2luaXQgYXRhcmlfc3dpdGNoZXNfc2V0dXAoIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbGVuICkKK3sKKyAgICBjaGFyIHN3aXRjaGVzW2xlbisxXTsKKyAgICBjaGFyICpwOworICAgIGludCBvdnNjX3NoaWZ0OworICAgIGNoYXIgKmFyZ3MgPSBzd2l0Y2hlczsKKworICAgIC8qIGNvcHkgc3RyaW5nIHRvIGxvY2FsIGFycmF5LCBzdHJzZXAgd29ya3MgZGVzdHJ1Y3RpdmVseS4uLiAqLworICAgIHN0cmxjcHkoIHN3aXRjaGVzLCBzdHIsIHNpemVvZihzd2l0Y2hlcykgKTsKKyAgICBhdGFyaV9zd2l0Y2hlcyA9IDA7CisKKyAgICAvKiBwYXJzZSB0aGUgb3B0aW9ucyAqLworICAgIHdoaWxlICgocCA9IHN0cnNlcCgmYXJncywgIiwiKSkgIT0gTlVMTCkgeworCWlmICghKnApIGNvbnRpbnVlOworCW92c2Nfc2hpZnQgPSAwOworCWlmIChzdHJuY21wKCBwLCAib3ZfIiwgMyApID09IDApIHsKKwkgICAgcCArPSAzOworCSAgICBvdnNjX3NoaWZ0ID0gQVRBUklfU1dJVENIX09WU0NfU0hJRlQ7CisJfQorCisJaWYgKHN0cmNtcCggcCwgImlrYmQiICkgPT0gMCkgeworCSAgICAvKiBSVFMgbGluZSBvZiBJS0JEIEFDSUEgKi8KKwkgICAgYXRhcmlfc3dpdGNoZXMgfD0gQVRBUklfU1dJVENIX0lLQkQgPDwgb3ZzY19zaGlmdDsKKwl9CisJZWxzZSBpZiAoc3RyY21wKCBwLCAibWlkaSIgKSA9PSAwKSB7CisJICAgIC8qIFJUUyBsaW5lIG9mIE1JREkgQUNJQSAqLworCSAgICBhdGFyaV9zd2l0Y2hlcyB8PSBBVEFSSV9TV0lUQ0hfTUlESSA8PCBvdnNjX3NoaWZ0OworCX0KKwllbHNlIGlmIChzdHJjbXAoIHAsICJzbmQ2IiApID09IDApIHsKKwkgICAgYXRhcmlfc3dpdGNoZXMgfD0gQVRBUklfU1dJVENIX1NORDYgPDwgb3ZzY19zaGlmdDsKKwl9CisJZWxzZSBpZiAoc3RyY21wKCBwLCAic25kNyIgKSA9PSAwKSB7CisJICAgIGF0YXJpX3N3aXRjaGVzIHw9IEFUQVJJX1NXSVRDSF9TTkQ3IDw8IG92c2Nfc2hpZnQ7CisJfQorICAgIH0KK30KKworCisgICAgLyoKKyAgICAgKiAgU2V0dXAgdGhlIEF0YXJpIGNvbmZpZ3VyYXRpb24gaW5mbworICAgICAqLworCit2b2lkIF9faW5pdCBjb25maWdfYXRhcmkodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCB0b3NfdmVyc2lvbjsKKworICAgIG1lbXNldCgmYXRhcmlfaHdfcHJlc2VudCwgMCwgc2l6ZW9mKGF0YXJpX2h3X3ByZXNlbnQpKTsKKworICAgIGF0YXJpX2RlYnVnX2luaXQoKTsKKworICAgIGlvcG9ydF9yZXNvdXJjZS5lbmQgID0gMHhGRkZGRkZGRjsgIC8qIENoYW5nZSBzaXplIG9mIEkvTyBzcGFjZSBmcm9tIDY0S0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA0R0IuICovCisKKyAgICBtYWNoX3NjaGVkX2luaXQgICAgICA9IGF0YXJpX3NjaGVkX2luaXQ7CisgICAgbWFjaF9pbml0X0lSUSAgICAgICAgPSBhdGFyaV9pbml0X0lSUTsKKyAgICBtYWNoX3JlcXVlc3RfaXJxICAgICA9IGF0YXJpX3JlcXVlc3RfaXJxOworICAgIG1hY2hfZnJlZV9pcnEgICAgICAgID0gYXRhcmlfZnJlZV9pcnE7CisgICAgZW5hYmxlX2lycSAgICAgICAgICAgPSBhdGFyaV9lbmFibGVfaXJxOworICAgIGRpc2FibGVfaXJxICAgICAgICAgID0gYXRhcmlfZGlzYWJsZV9pcnE7CisgICAgbWFjaF9nZXRfbW9kZWwJID0gYXRhcmlfZ2V0X21vZGVsOworICAgIG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBhdGFyaV9nZXRfaGFyZHdhcmVfbGlzdDsKKyAgICBtYWNoX2dldF9pcnFfbGlzdAkgPSBzaG93X2F0YXJpX2ludGVycnVwdHM7CisgICAgbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBhdGFyaV9nZXR0aW1lb2Zmc2V0OworICAgIG1hY2hfcmVzZXQgICAgICAgICAgID0gYXRhcmlfcmVzZXQ7CisjaWZkZWYgQ09ORklHX0FUQVJJX0ZMT1BQWQorICAgIG1hY2hfZmxvcHB5X3NldHVwCSA9IGF0YXJpX2Zsb3BweV9zZXR1cDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisgICAgY29uc3dpdGNocAkgICAgICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKyAgICBtYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmOworI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKKyAgICBtYWNoX2JlZXAgICAgICAgICAgPSBhdGFyaV9ta3NvdW5kOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorICAgIG1hY2hfaGVhcnRiZWF0ID0gYXRhcmlfaGVhcnRiZWF0OworI2VuZGlmCisKKyAgICAvKiBTZXQgc3dpdGNoZXMgYXMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCisgICAgaWYgKGF0YXJpX3N3aXRjaGVzICYgQVRBUklfU1dJVENIX0lLQkQpCisJYWNpYS5rZXlfY3RybCA9IEFDSUFfRElWNjQgfCBBQ0lBX0Q4TjFTIHwgQUNJQV9SSFRJRDsKKyAgICBpZiAoYXRhcmlfc3dpdGNoZXMgJiBBVEFSSV9TV0lUQ0hfTUlESSkKKwlhY2lhLm1pZF9jdHJsID0gQUNJQV9ESVYxNiB8IEFDSUFfRDhOMVMgfCBBQ0lBX1JIVElEOworICAgIGlmIChhdGFyaV9zd2l0Y2hlcyAmIChBVEFSSV9TV0lUQ0hfU05ENnxBVEFSSV9TV0lUQ0hfU05ENykpIHsKKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxNDsKKwlzb3VuZF95bS53ZF9kYXRhID0gc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsIHwKKwkJCSAgICgoYXRhcmlfc3dpdGNoZXMmQVRBUklfU1dJVENIX1NORDYpID8gMHg0MCA6IDApIHwKKwkJCSAgICgoYXRhcmlfc3dpdGNoZXMmQVRBUklfU1dJVENIX1NORDcpID8gMHg4MCA6IDApOworICAgIH0KKworICAgIC8qICsrYmpvZXJuOgorICAgICAqIERldGVybWluZSBoYXJkd2FyZSBwcmVzZW50CisgICAgICovCisKKyAgICBwcmludGsoICJBdGFyaSBoYXJkd2FyZSBmb3VuZDogIiApOworICAgIGlmIChNQUNIX0lTX01FRFVTQSB8fCBNQUNIX0lTX0hBREVTKSB7CisgICAgICAgIC8qIFRoZXJlJ3Mgbm8gQXRhcmkgdmlkZW8gaGFyZHdhcmUgb24gdGhlIE1lZHVzYSwgYnV0IGFsbCB0aGUKKyAgICAgICAgICogYWRkcmVzc2VzIGJlbG93IGdlbmVyYXRlIGEgRFRBQ0sgc28gbm8gYnVzIGVycm9yIG9jY3VycyEgKi8KKyAgICB9CisgICAgZWxzZSBpZiAoaHdyZWdfcHJlc2VudCggZjAzMF94cmVnICkpIHsKKwlBVEFSSUhXX1NFVChWSURFTF9TSElGVEVSKTsKKyAgICAgICAgcHJpbnRrKCAiVklERUwgIiApOworICAgICAgICAvKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2s6IElmIHRoZXJlIGlzIEZhbGNvbiB2aWRlbworICAgICAgICAgKiBoYXJkd2FyZSwgd2UgYXNzdW1lIHRoYXQgdGhlIFNULURNQSBzZXJ2ZXMgU0NTSSBpbnN0ZWFkIG9mCisgICAgICAgICAqIEFDU0kuIEluIHRoZSBmdXR1cmUsIHRoZXJlIHNob3VsZCBiZSBhIGJldHRlciBtZXRob2QgZm9yCisgICAgICAgICAqIHRoaXMuLi4KKyAgICAgICAgICovCisJQVRBUklIV19TRVQoU1RfU0NTSSk7CisgICAgICAgIHByaW50ayggIlNURE1BLVNDU0kgIiApOworICAgIH0KKyAgICBlbHNlIGlmIChod3JlZ19wcmVzZW50KCB0dF9wYWxldHRlICkpIHsKKwlBVEFSSUhXX1NFVChUVF9TSElGVEVSKTsKKyAgICAgICAgcHJpbnRrKCAiVFRfU0hJRlRFUiAiICk7CisgICAgfQorICAgIGVsc2UgaWYgKGh3cmVnX3ByZXNlbnQoICZzaGlmdGVyLmJhc19oaSApKSB7CisgICAgICAgIGlmIChod3JlZ19wcmVzZW50KCAmc2hpZnRlci5iYXNfbG8gKSAmJgorCSAgICAoc2hpZnRlci5iYXNfbG8gPSAweDBhYXUsIHNoaWZ0ZXIuYmFzX2xvID09IDB4MGFhdSkpIHsKKwkgICAgQVRBUklIV19TRVQoRVhURF9TSElGVEVSKTsKKyAgICAgICAgICAgIHByaW50ayggIkVYVERfU0hJRlRFUiAiICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisJICAgIEFUQVJJSFdfU0VUKFNUTkRfU0hJRlRFUik7CisgICAgICAgICAgICBwcmludGsoICJTVE5EX1NISUZURVIgIiApOworICAgICAgICB9CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmbWZwLnBhcl9kdF9yZWcgKSkgeworCUFUQVJJSFdfU0VUKFNUX01GUCk7CisgICAgICAgIHByaW50ayggIlNUX01GUCAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmdHRfbWZwLnBhcl9kdF9yZWcgKSkgeworCUFUQVJJSFdfU0VUKFRUX01GUCk7CisgICAgICAgIHByaW50ayggIlRUX01GUCAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmdHRfc2NzaV9kbWEuZG1hX2FkZHJfaGkgKSkgeworCUFUQVJJSFdfU0VUKFNDU0lfRE1BKTsKKyAgICAgICAgcHJpbnRrKCAiVFRfU0NTSV9ETUEgIiApOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCggJnN0X2RtYS5kbWFfaGkgKSkgeworCUFUQVJJSFdfU0VUKFNUTkRfRE1BKTsKKyAgICAgICAgcHJpbnRrKCAiU1RORF9ETUEgIiApOworICAgIH0KKyAgICBpZiAoTUFDSF9JU19NRURVU0EgfHwgLyogVGhlIFNULURNQSBhZGRyZXNzIHJlZ2lzdGVycyBhcmVuJ3QgcmVhZGFibGUKKwkJCSAgICogb24gYWxsIE1lZHVzYXMsIHNvIHRoZSB0ZXN0IGJlbG93IG1heSBmYWlsICovCisgICAgICAgIChod3JlZ19wcmVzZW50KCAmc3RfZG1hLmRtYV92aGkgKSAmJgorICAgICAgICAgKHN0X2RtYS5kbWFfdmhpID0gMHg1NSkgJiYgKHN0X2RtYS5kbWFfaGkgPSAweGFhKSAmJgorICAgICAgICAgc3RfZG1hLmRtYV92aGkgPT0gMHg1NSAmJiBzdF9kbWEuZG1hX2hpID09IDB4YWEgJiYKKyAgICAgICAgIChzdF9kbWEuZG1hX3ZoaSA9IDB4YWEpICYmIChzdF9kbWEuZG1hX2hpID0gMHg1NSkgJiYKKyAgICAgICAgIHN0X2RtYS5kbWFfdmhpID09IDB4YWEgJiYgc3RfZG1hLmRtYV9oaSA9PSAweDU1KSkgeworCUFUQVJJSFdfU0VUKEVYVERfRE1BKTsKKyAgICAgICAgcHJpbnRrKCAiRVhURF9ETUEgIiApOworICAgIH0KKyAgICBpZiAoaHdyZWdfcHJlc2VudCggJnR0X3Njc2kuc2NzaV9kYXRhICkpIHsKKwlBVEFSSUhXX1NFVChUVF9TQ1NJKTsKKyAgICAgICAgcHJpbnRrKCAiVFRfU0NTSSAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsICkpIHsKKwlBVEFSSUhXX1NFVChZTV8yMTQ5KTsKKyAgICAgICAgcHJpbnRrKCAiWU0yMTQ5ICIgKTsKKyAgICB9CisgICAgaWYgKCFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUyAmJgorCWh3cmVnX3ByZXNlbnQoICZ0dF9kbWFzbmQuY3RybCApKSB7CisJQVRBUklIV19TRVQoUENNXzhCSVQpOworICAgICAgICBwcmludGsoICJQQ00gIiApOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCggJmZhbGNvbl9jb2RlYy51bnVzZWQ1ICkpIHsKKwlBVEFSSUhXX1NFVChDT0RFQyk7CisgICAgICAgIHByaW50ayggIkNPREVDICIgKTsKKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZkc3A1NmtfaG9zdF9pbnRlcmZhY2UuaWNyICkpIHsKKwlBVEFSSUhXX1NFVChEU1A1NkspOworICAgICAgICBwcmludGsoICJEU1A1NksgIiApOworICAgIH0KKyAgICBpZiAoaHdyZWdfcHJlc2VudCggJnR0X3NjY19kbWEuZG1hX2N0cmwgKSAmJgorI2lmIDAKKwkvKiBUaGlzIHRlc3Qgc3Vja3MhIFdobyBrbm93cyBzb21lIGJldHRlcj8gKi8KKwkodHRfc2NjX2RtYS5kbWFfY3RybCA9IDB4MDEsICh0dF9zY2NfZG1hLmRtYV9jdHJsICYgMSkgPT0gMSkgJiYKKwkodHRfc2NjX2RtYS5kbWFfY3RybCA9IDB4MDAsICh0dF9zY2NfZG1hLmRtYV9jdHJsICYgMSkgPT0gMCkKKyNlbHNlCisJIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTCisjZW5kaWYKKwkpIHsKKwlBVEFSSUhXX1NFVChTQ0NfRE1BKTsKKyAgICAgICAgcHJpbnRrKCAiU0NDX0RNQSAiICk7CisgICAgfQorICAgIGlmIChzY2NfdGVzdCggJnNjYy5jaGFfYV9jdHJsICkpIHsKKwlBVEFSSUhXX1NFVChTQ0MpOworICAgICAgICBwcmludGsoICJTQ0MgIiApOworICAgIH0KKyAgICBpZiAoc2NjX3Rlc3QoICZzdF9lc2NjLmNoYV9iX2N0cmwgKSkgeworCUFUQVJJSFdfU0VUKCBTVF9FU0NDICk7CisJcHJpbnRrKCAiU1RfRVNDQyAiICk7CisgICAgfQorICAgIGlmIChNQUNIX0lTX0hBREVTKQorICAgIHsKKyAgICAgICAgQVRBUklIV19TRVQoIFZNRSApOworICAgICAgICBwcmludGsoICJWTUUgIiApOworICAgIH0KKyAgICBlbHNlIGlmIChod3JlZ19wcmVzZW50KCAmdHRfc2N1LnN5c19tYXNrICkpIHsKKwlBVEFSSUhXX1NFVChTQ1UpOworCS8qIEFzc3VtZSBhIFZNRSBidXMgaWYgdGhlcmUncyBhIFNDVSAqLworCUFUQVJJSFdfU0VUKCBWTUUgKTsKKyAgICAgICAgcHJpbnRrKCAiVk1FIFNDVSAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAodm9pZCAqKSgweGZmZmY5MjEwKSApKSB7CisJQVRBUklIV19TRVQoQU5BTE9HX0pPWSk7CisgICAgICAgIHByaW50ayggIkFOQUxPR19KT1kgIiApOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCggYmxpdHRlci5oYWxmdG9uZSApKSB7CisJQVRBUklIV19TRVQoQkxJVFRFUik7CisgICAgICAgIHByaW50ayggIkJMSVRURVIgIiApOworICAgIH0KKyAgICBpZiAoaHdyZWdfcHJlc2VudCgodm9pZCAqKTB4ZmZmMDAwMzkpKSB7CisJQVRBUklIV19TRVQoSURFKTsKKyAgICAgICAgcHJpbnRrKCAiSURFICIgKTsKKyAgICB9CisjaWYgMSAvKiBUaGlzIG1heWJlIHdyb25nICovCisgICAgaWYgKCFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUyAmJgorCWh3cmVnX3ByZXNlbnQoICZ0dF9taWNyb3dpcmUuZGF0YSApICYmCisJaHdyZWdfcHJlc2VudCggJnR0X21pY3Jvd2lyZS5tYXNrICkgJiYKKwkodHRfbWljcm93aXJlLm1hc2sgPSAweDdmZiwKKwkgdWRlbGF5KDEpLAorCSB0dF9taWNyb3dpcmUuZGF0YSA9IE1XX0xNMTk5Ml9QU0dfSElHSCB8IE1XX0xNMTk5Ml9BRERSLAorCSB1ZGVsYXkoMSksCisJIHR0X21pY3Jvd2lyZS5kYXRhICE9IDApKSB7CisJQVRBUklIV19TRVQoTUlDUk9XSVJFKTsKKwl3aGlsZSAodHRfbWljcm93aXJlLm1hc2sgIT0gMHg3ZmYpIDsKKyAgICAgICAgcHJpbnRrKCAiTUlDUk9XSVJFICIgKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoaHdyZWdfcHJlc2VudCggJnR0X3J0Yy5yZWdzZWwgKSkgeworCUFUQVJJSFdfU0VUKFRUX0NMSyk7CisgICAgICAgIHByaW50ayggIlRUX0NMSyAiICk7CisgICAgICAgIG1hY2hfaHdjbGsgPSBhdGFyaV90dF9od2NsazsKKyAgICAgICAgbWFjaF9zZXRfY2xvY2tfbW1zcyA9IGF0YXJpX3R0X3NldF9jbG9ja19tbXNzOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCggJm1zdGVfcnRjLnNlY19vbmVzKSkgeworCUFUQVJJSFdfU0VUKE1TVEVfQ0xLKTsKKyAgICAgICAgcHJpbnRrKCAiTVNURV9DTEsgIik7CisgICAgICAgIG1hY2hfaHdjbGsgPSBhdGFyaV9tc3RlX2h3Y2xrOworICAgICAgICBtYWNoX3NldF9jbG9ja19tbXNzID0gYXRhcmlfbXN0ZV9zZXRfY2xvY2tfbW1zczsKKyAgICB9CisgICAgaWYgKCFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUyAmJgorCWh3cmVnX3ByZXNlbnQoICZkbWFfd2QuZmRjX3NwZWVkICkgJiYKKwlod3JlZ193cml0ZSggJmRtYV93ZC5mZGNfc3BlZWQsIDAgKSkgeworCSAgICBBVEFSSUhXX1NFVChGRENTUEVFRCk7CisJICAgIHByaW50ayggIkZEQ19TUEVFRCAiKTsKKyAgICB9CisgICAgaWYgKCFNQUNIX0lTX0hBREVTICYmICFBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkpIHsKKwlBVEFSSUhXX1NFVChBQ1NJKTsKKyAgICAgICAgcHJpbnRrKCAiQUNTSSAiICk7CisgICAgfQorICAgIHByaW50aygiXG4iKTsKKworICAgIGlmIChDUFVfSVNfMDQwX09SXzA2MCkKKyAgICAgICAgLyogTm93IGl0IHNlZW1zIHRvIGJlIHNhZmUgdG8gdHVybiBvZiB0aGUgdHQwIHRyYW5zcGFyZW50CisgICAgICAgICAqIHRyYW5zbGF0aW9uICh0aGUgb25lIHRoYXQgbXVzdCBub3QgYmUgdHVybmVkIG9mZiBpbgorICAgICAgICAgKiBoZWFkLlMuLi4pCisgICAgICAgICAqLworICAgICAgICBfX2FzbV9fIHZvbGF0aWxlICgibW92ZXEgIzAsJS9kMFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICJtb3ZlYyAlJWQwLCUlaXR0MFxuXHQiCisJCQkgICJtb3ZlYyAlJWQwLCUlZHR0MFxuXHQiCisJCQkgICIuY2hpcCA2OGsiCisJCQkJCQkgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCQkJICA6IC8qIG5vIGlucHV0cyAqLworCQkJCQkJICA6ICJkMCIpOworCisgICAgLyogYWxsb2NhdG9yIGZvciBtZW1vcnkgdGhhdCBtdXN0IHJlc2lkZSBpbiBzdC1yYW0gKi8KKyAgICBhdGFyaV9zdHJhbV9pbml0ICgpOworCisgICAgLyogU2V0IHVwIGEgbWFwcGluZyBmb3IgdGhlIFZNRWJ1cyBhZGRyZXNzIHJlZ2lvbjoKKyAgICAgKgorICAgICAqIFZNRSBpcyBlaXRoZXIgYXQgcGh5cy4gMHhmZXh4eHh4eCAoVFQpIG9yIDB4YTAwMDAwLi4weGRmZmZmZgorICAgICAqIChNZWdhU1RFKSBJbiBib3RoIGNhc2VzLCB0aGUgd2hvbGUgMTYgTUIgY2h1bmsgaXMgbWFwcGVkIGF0CisgICAgICogMHhmZTAwMDAwMCB2aXJ0LiwgYmVjYXVzZSB0aGlzIGNhbiBiZSBkb25lIHdpdGggYSBzaW5nbGUKKyAgICAgKiB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbi4gT24gdGhlIDY4MDQwLCBsb3RzIG9mIG9mdGVuIHVudXNlZAorICAgICAqIHBhZ2UgdGFibGVzIHdvdWxkIGJlIG5lZWRlZCBvdGhlcndpc2UuIE9uIGEgTWVnYVNURSBvciBzaW1pbGFyLAorICAgICAqIHRoZSBoaWdoZXN0IGJ5dGUgaXMgc3RyaXBwZWQgb2ZmIGJ5IGhhcmR3YXJlIGR1ZSB0byB0aGUgMjQgYml0CisgICAgICogZGVzaWduIG9mIHRoZSBidXMuCisgICAgICovCisKKyAgICBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZwl0dDFfdmFsOworICAgICAgICB0dDFfdmFsID0gMHhmZTAwODU0MzsJLyogVHJhbnNsYXRlIDB4ZmV4eHh4eHgsIGVuYWJsZSwgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5oaWJpdCwgcmVhZCBhbmQgd3JpdGUsIEZEQyBtYXNrID0gMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRkRDIHZhbCA9IDQgLT4gU3VwZXJ2aXNvciBvbmx5ICovCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIi5jaGlwIDY4MDMwXG5cdCIKKwkJCQkicG1vdmUJJTBALCUvdHQxXG5cdCIKKwkJCQkiLmNoaXAgNjhrIgorCQkJCTogOiAiYSIgKCZ0dDFfdmFsKSApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAgICAgICggIm1vdmVsICUwLCUvZDBcblx0IgorCSAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJICAgICAgIm1vdmVjICUlZDAsJSVpdHQxXG5cdCIKKwkgICAgICAibW92ZWMgJSVkMCwlJWR0dDFcblx0IgorCSAgICAgICIuY2hpcCA2OGsiCisgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgOiAiZyIgKDB4ZmUwMGEwNDApCS8qIFRyYW5zbGF0ZSAweGZleHh4eHh4LCBlbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3VwZXJ2aXNvciBvbmx5LCBub24tY2FjaGVhYmxlLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlcmlhbGl6ZWQsIHdyaXRhYmxlICovCisgICAgICAgICAgICAgIDogImQwIiApOworCisgICAgfQorCisgICAgLyogRmV0Y2ggdG9zIHZlcnNpb24gYXQgUGh5c2ljYWwgMiAqLworICAgIC8qIFdlIG15IG5vdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGlzIGFkZHJlc3MgaWYgdGhlIGtlcm5lbCBpcworICAgICAgIGxvYWRlZCB0byBzdCByYW0sIHNpbmNlIHRoZSBmaXJzdCBwYWdlIGlzIHVubWFwcGVkLiAgT24gdGhlCisgICAgICAgTWVkdXNhIHRoaXMgaXMgYWx3YXlzIHRoZSBjYXNlIGFuZCB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbworICAgICAgIGFib3V0IHRoaXMsIHNvIHdlIGp1c3QgYXNzdW1lIHRoZSBzbWFsbGVyIG9mZnNldC4gIEZvciB0aGUgVFQKKyAgICAgICB3ZSB1c2UgdGhlIGZhY3QgdGhhdCBpbiBoZWFkLlMgd2UgaGF2ZSBzZXQgdXAgYSBtYXBwaW5nCisgICAgICAgMHhGRnh4eHh4eCAtPiAweDAweHh4eHh4LCBzbyB0aGF0IHRoZSBmaXJzdCAxNk1CIGlzIGFjY2Vzc2libGUKKyAgICAgICBpbiB0aGUgbGFzdCAxNk1CIG9mIHRoZSBhZGRyZXNzIHNwYWNlLiAqLworICAgIHRvc192ZXJzaW9uID0gKE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfSEFERVMpID8KKwkJICAweGZmZiA6ICoodW5zaWduZWQgc2hvcnQgKikweGZmMDAwMDAyOworICAgIGF0YXJpX3J0Y195ZWFyX29mZnNldCA9ICh0b3NfdmVyc2lvbiA8IDB4MzA2KSA/IDcwIDogNjg7Cit9CisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBhdGFyaV9oZWFydGJlYXQoIGludCBvbiApCit7CisgICAgdW5zaWduZWQgY2hhciB0bXA7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIGlmIChhdGFyaV9kb250X3RvdWNoX2Zsb3BweV9zZWxlY3QpCisJcmV0dXJuOworCisgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworICAgIHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE0OyAvKiBTZWxlY3QgUFNHIFBvcnQgQSAqLworICAgIHRtcCA9IHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbDsKKyAgICBzb3VuZF95bS53ZF9kYXRhID0gb24gPyAodG1wICYgfjB4MDIpIDogKHRtcCB8IDB4MDIpOworICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKyNlbmRpZgorCisvKiArK3JvbWFuOgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIHJlc2V0IG9uIG1hY2hpbmVzIHRoYXQgbGFjayB0aGUgYWJpbGl0eSB0bworICogYXNzZXJ0IHRoZSBwcm9jZXNzb3IncyBfUkVTRVQgc2lnbmFsIHNvbWVob3cgdmlhIGhhcmR3YXJlLiBJdCBpcworICogYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB5b3UgY2FuIGZpbmQgdGhlIGluaXRpYWwgU1AgYW5kIFBDIHZhbHVlcworICogYWZ0ZXIgYSByZXNldCBhdCBwaHlzaWNhbCBhZGRyZXNzZXMgMCBhbmQgNC4gVGhpcyB3b3JrcyBwcmV0dHkgd2VsbAorICogZm9yIEF0YXJpIG1hY2hpbmVzLCBzaW5jZSB0aGUgbG93ZXN0IDggYnl0ZXMgb2YgcGh5c2ljYWwgbWVtb3J5IGFyZQorICogcmVhbGx5IFJPTSAobWFwcGVkIGJ5IGhhcmR3YXJlKS4gRm9yIG90aGVyIDY4MHgwIG1hY2hpbmVzOiBkb24ndAorICoga25vdyBpZiBpdCB3b3Jrcy4uLgorICoKKyAqIFRvIGdldCB0aGUgdmFsdWVzIGF0IGFkZHJlc3NlcyAwIGFuZCA0LCB0aGUgTU1VIGJldHRlciBpcyB0dXJuZWQKKyAqIG9mZiBmaXJzdC4gQWZ0ZXIgdGhhdCwgd2UgaGF2ZSB0byBqdW1wIGludG8gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorICogKHRoZSBQQyBiZWZvcmUgdGhlIHBtb3ZlIHN0YXRlbWVudCBwb2ludHMgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZgorICogdGhlIGNvZGUpLiBHZXR0aW5nIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgaGFyZCwgYnV0IHRoZSBjb2RlCisgKiBiZWNvbWVzIGEgYml0IGNvbXBsZXggc2luY2UgSSd2ZSB0cmllZCB0byBlbnN1cmUgdGhhdCB0aGUganVtcAorICogc3RhdGVtZW50IGFmdGVyIHRoZSBwbW92ZSBpcyBpbiB0aGUgY2FjaGUgYWxyZWFkeSAob3RoZXJ3aXNlIHRoZQorICogcHJvY2Vzc29yIGNhbid0IGZldGNoIGl0ISkuIEZvciB0aGF0LCB0aGUgY29kZSBmaXJzdCBqdW1wcyB0byB0aGUKKyAqIGp1bXAgc3RhdGVtZW50IHdpdGggdGhlICh2aXJ0dWFsKSBhZGRyZXNzIG9mIHRoZSBwbW92ZSBzZWN0aW9uIGluCisgKiBhbiBhZGRyZXNzIHJlZ2lzdGVyIC4gVGhlIGp1bXAgc3RhdGVtZW50IGlzIHN1cmVseSBpbiB0aGUgY2FjaGUKKyAqIG5vdy4gQWZ0ZXIgdGhhdCwgdGhhdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZXNldCBjb2RlIGlzIGxvYWRlZAorICogaW50byB0aGUgc2FtZSBhZGRyZXNzIHJlZ2lzdGVyLCBwbW92ZSBpcyBkb25lIGFuZCB0aGUgc2FtZSBqdW1wCisgKiBzdGF0ZW1lbnRzIGdvZXMgdG8gdGhlIHJlc2V0IGNvZGUuIFNpbmNlIHRoZXJlIGFyZSBub3QgbWFueQorICogc3RhdGVtZW50cyBiZXR3ZWVuIHRoZSB0d28ganVtcHMsIEkgaG9wZSBpdCBzdGF5cyBpbiB0aGUgY2FjaGUuCisgKgorICogVGhlIEMgY29kZSBtYWtlcyBoZWF2eSB1c2Ugb2YgdGhlIEdDQyBmZWF0dXJlcyB0aGF0IHlvdSBjYW4gZ2V0IHRoZQorICogYWRkcmVzcyBvZiBhIEMgbGFiZWwuIE5vIGhvcGUgdG8gY29tcGlsZSB0aGlzIHdpdGggYW5vdGhlciBjb21waWxlcgorICogdGhhbiBHQ0MhCisgKi8KKworLyogKythbmRyZWFzOiBubyBuZWVkIGZvciBjb21wbGljYXRlZCBjb2RlLCBqdXN0IGRlcGVuZCBvbiBwcmVmZXRjaCAqLworCitzdGF0aWMgdm9pZCBhdGFyaV9yZXNldCAodm9pZCkKK3sKKyAgICBsb25nIHRjX3ZhbCA9IDA7CisgICAgbG9uZyByZXNldF9hZGRyOworCisgICAgLyogT24gdGhlIE1lZHVzYSwgcGh5cy4gMHg0IG1heSBjb250YWluIGdhcmJhZ2UgYmVjYXVzZSBpdCdzIG5vCisgICAgICAgUk9NLiAgU2VlIGFib3ZlIGZvciBleHBsYW5hdGlvbiB3aHkgd2UgY2Fubm90IHVzZSBQVE9WKDQpLiAqLworICAgIHJlc2V0X2FkZHIgPSBNQUNIX0lTX0hBREVTID8gMHg3ZmUwMDAzMCA6CisgICAgICAgICAgICAgICAgIE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfQUI0MCA/IDB4ZTAwMDMwIDoKKwkJICoodW5zaWduZWQgbG9uZyAqKSAweGZmMDAwMDA0OworCisgICAgLyogcmVzZXQgQUNJQSBmb3Igc3dpdGNoIG9mZiBPdmVyU2NhbiwgaWYgaXQncyBhY3RpdmUgKi8KKyAgICBpZiAoYXRhcmlfc3dpdGNoZXMgJiBBVEFSSV9TV0lUQ0hfT1ZTQ19JS0JEKQorCWFjaWEua2V5X2N0cmwgPSBBQ0lBX1JFU0VUOworICAgIGlmIChhdGFyaV9zd2l0Y2hlcyAmIEFUQVJJX1NXSVRDSF9PVlNDX01JREkpCisJYWNpYS5taWRfY3RybCA9IEFDSUFfUkVTRVQ7CisKKyAgICAvKiBwcm9jZXNzb3IgaW5kZXBlbmRlbnQ6IHR1cm4gb2ZmIGludGVycnVwdHMgYW5kIHJlc2V0IHRoZSBWQlI7CisgICAgICogdGhlIGNhY2hlcyBtdXN0IGJlIGxlZnQgZW5hYmxlZCwgZWxzZSBwcmVmZXRjaGluZyB0aGUgZmluYWwganVtcAorICAgICAqIGluc3RydWN0aW9uIGRvZXNuJ3Qgd29yay4gKi8KKyAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJKCJtb3ZlcQkjMCwlL2QwXG5cdCIKKwkgIm1vdmVjCSUvZDAsJS92YnIiCisJIDogOiA6ICJkMCIgKTsKKworICAgIGlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGptcF9hZGRyMDQwID0gdmlydF90b19waHlzKCYmam1wX2FkZHJfbGFiZWwwNDApOworCWlmIChDUFVfSVNfMDYwKSB7CisJICAgIC8qIDY4MDYwOiBjbGVhciBQQ1IgdG8gdHVybiBvZmYgc3VwZXJzY2FsYXIgb3BlcmF0aW9uICovCisJICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJCSgibW92ZXEJIzAsJS9kMFxuXHQiCisJCSAiLmNoaXAgNjgwNjBcblx0IgorCQkgIm1vdmVjICUlZDAsJSVwY3Jcblx0IgorCQkgIi5jaGlwIDY4ayIKKwkJIDogOiA6ICJkMCIgKTsKKwl9CisKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAgICAgICgibW92ZWwgICAgJTAsJS9kMFxuXHQiCisgICAgICAgICAgICAgImFuZGwgICAgICMweGZmMDAwMDAwLCUvZDBcblx0IgorICAgICAgICAgICAgICJvcncgICAgICAjMHhlMDIwLCUvZDBcblx0IiAgIC8qIG1hcCAxNiBNQiwgZW5hYmxlLCBjYWNoZWFibGUgKi8KKyAgICAgICAgICAgICAiLmNoaXAgNjgwNDBcblx0IgorCSAgICAgIm1vdmVjICAgICUlZDAsJSVpdHQwXG5cdCIKKyAgICAgICAgICAgICAibW92ZWMgICAgJSVkMCwlJWR0dDBcblx0IgorCSAgICAgIi5jaGlwIDY4a1xuXHQiCisgICAgICAgICAgICAgImptcCAgICUwQFxuXHQiCisgICAgICAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgICAgICAgOiAiYSIgKGptcF9hZGRyMDQwKQorICAgICAgICAgICAgIDogImQwIiApOworICAgICAgam1wX2FkZHJfbGFiZWwwNDA6CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgICAgKCJtb3ZlcSAjMCwlL2QwXG5cdCIKKwkgICAibm9wXG5cdCIKKwkgICAiLmNoaXAgNjgwNDBcblx0IgorCSAgICJjaW52YSAlJWJjXG5cdCIKKwkgICAibm9wXG5cdCIKKwkgICAicGZsdXNoYVxuXHQiCisJICAgIm5vcFxuXHQiCisJICAgIm1vdmVjICUlZDAsJSV0Y1xuXHQiCisJICAgIm5vcFxuXHQiCisJICAgLyogdGhlIGZvbGxvd2luZyBzZXR1cCBvZiB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbnMgaXMgbmVlZGVkIG9uIHRoZQorCSAgICAqIEFmdGVyYnVybmVyMDQwIHRvIHN1Y2Nlc3NmdWxseSByZWJvb3QuIE90aGVyIG1hY2hpbmVzIHNob3VsZG4ndAorCSAgICAqIGNhcmUgYWJvdXQgYSBkaWZmZXJlbnQgdHQgcmVncyBzZXR1cCwgdGhleSBhbHNvIGRpZG4ndCBjYXJlIGluCisJICAgICogdGhlIHBhc3QgdGhhdCB0aGUgcmVncyB3ZXJlbid0IHR1cm5lZCBvZmYuICovCisJICAgIm1vdmVsICMweGZmYzAwMCwlJWQwXG5cdCIgLyogd2hvbGUgaW5zbiBzcGFjZSBjYWNoZWFibGUgKi8KKwkgICAibW92ZWMgJSVkMCwlJWl0dDBcblx0IgorCSAgICJtb3ZlYyAlJWQwLCUlaXR0MVxuXHQiCisJICAgIm9ydyAgICMweDQwLCUvZDBcblx0IiAvKiB3aG9sZSBkYXRhIHNwYWNlIG5vbi1jYWNoZWFibGUvc2VyLiAqLworCSAgICJtb3ZlYyAlJWQwLCUlZHR0MFxuXHQiCisJICAgIm1vdmVjICUlZDAsJSVkdHQxXG5cdCIKKwkgICAiLmNoaXAgNjhrXG5cdCIKKyAgICAgICAgICAgImptcCAlMEAiCisgICAgICAgICAgIDogLyogbm8gb3V0cHV0cyAqLworICAgICAgICAgICA6ICJhIiAocmVzZXRfYWRkcikKKyAgICAgICAgICAgOiAiZDAiKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgICAgICAgKCJwbW92ZSAlMEAsJS90Y1xuXHQiCisgICAgICAgICAgICAgImptcCAlMUAiCisgICAgICAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgICAgICAgOiAiYSIgKCZ0Y192YWwpLCAiYSIgKHJlc2V0X2FkZHIpKTsKK30KKworCitzdGF0aWMgdm9pZCBhdGFyaV9nZXRfbW9kZWwoY2hhciAqbW9kZWwpCit7CisgICAgc3RyY3B5KG1vZGVsLCAiQXRhcmkgIik7CisgICAgc3dpdGNoIChhdGFyaV9tY2hfY29va2llID4+IDE2KSB7CisJY2FzZSBBVEFSSV9NQ0hfU1Q6CisJICAgIGlmIChBVEFSSUhXX1BSRVNFTlQoTVNURV9DTEspKQorCQlzdHJjYXQgKG1vZGVsLCAiTWVnYSBTVCIpOworCSAgICBlbHNlCisJCXN0cmNhdCAobW9kZWwsICJTVCIpOworCSAgICBicmVhazsKKwljYXNlIEFUQVJJX01DSF9TVEU6CisJICAgIGlmIChNQUNIX0lTX01TVEUpCisJCXN0cmNhdCAobW9kZWwsICJNZWdhIFNURSIpOworCSAgICBlbHNlCisJCXN0cmNhdCAobW9kZWwsICJTVEUiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBBVEFSSV9NQ0hfVFQ6CisJICAgIGlmIChNQUNIX0lTX01FRFVTQSkKKwkJLyogTWVkdXNhIGhhcyBUVCBfTUNIIGNvb2tpZSAqLworCQlzdHJjYXQgKG1vZGVsLCAiTWVkdXNhIik7CisJICAgIGVsc2UgaWYgKE1BQ0hfSVNfSEFERVMpCisJCXN0cmNhdChtb2RlbCwgIkhhZGVzIik7CisJICAgIGVsc2UKKwkJc3RyY2F0IChtb2RlbCwgIlRUIik7CisJICAgIGJyZWFrOworCWNhc2UgQVRBUklfTUNIX0ZBTENPTjoKKwkgICAgc3RyY2F0IChtb2RlbCwgIkZhbGNvbiIpOworCSAgICBpZiAoTUFDSF9JU19BQjQwKQorCQlzdHJjYXQgKG1vZGVsLCAiICh3aXRoIEFmdGVyYnVybmVyMDQwKSIpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBzcHJpbnRmIChtb2RlbCArIHN0cmxlbiAobW9kZWwpLCAiKHVua25vd24gbWFjaCBjb29raWUgMHglbHgpIiwKKwkJICAgICBhdGFyaV9tY2hfY29va2llKTsKKwkgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyBpbnQgYXRhcmlfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworICAgIGludCBsZW4gPSAwLCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKQorCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiXHQlM2xkIE1CIGF0IDB4JTA4bHggKCVzKVxuIiwKKwkJCW02OGtfbWVtb3J5W2ldLnNpemUgPj4gMjAsIG02OGtfbWVtb3J5W2ldLmFkZHIsCisJCQkobTY4a19tZW1vcnlbaV0uYWRkciAmIDB4ZmYwMDAwMDAgPworCQkJICJhbHRlcm5hdGUgUkFNIiA6ICJTVC1SQU0iKSk7CisKKyNkZWZpbmUgQVRBUklIV19BTk5PVU5DRShuYW1lLHN0cikJCQkJXAorICAgIGlmIChBVEFSSUhXX1BSRVNFTlQobmFtZSkpCQkJXAorCWxlbiArPSBzcHJpbnRmIChidWZmZXIgKyBsZW4sICJcdCVzXG4iLCBzdHIpCisKKyAgICBsZW4gKz0gc3ByaW50ZiAoYnVmZmVyICsgbGVuLCAiRGV0ZWN0ZWQgaGFyZHdhcmU6XG4iKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFNUTkRfU0hJRlRFUiwgIlNUIFNoaWZ0ZXIiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKEVYVERfU0hJRlRFUiwgIlNUZSBTaGlmdGVyIik7CisgICAgQVRBUklIV19BTk5PVU5DRShUVF9TSElGVEVSLCAiVFQgU2hpZnRlciIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoVklERUxfU0hJRlRFUiwgIkZhbGNvbiBTaGlmdGVyIik7CisgICAgQVRBUklIV19BTk5PVU5DRShZTV8yMTQ5LCAiUHJvZ3JhbW1hYmxlIFNvdW5kIEdlbmVyYXRvciIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoUENNXzhCSVQsICJQQ00gOCBCaXQgU291bmQiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKENPREVDLCAiQ09ERUMgU291bmQiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFRUX1NDU0ksICJTQ1NJIENvbnRyb2xsZXIgTkNSNTM4MCAoVFQgc3R5bGUpIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTVF9TQ1NJLCAiU0NTSSBDb250cm9sbGVyIE5DUjUzODAgKEZhbGNvbiBzdHlsZSkiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKEFDU0ksICJBQ1NJIEludGVyZmFjZSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoSURFLCAiSURFIEludGVyZmFjZSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoRkRDU1BFRUQsICI4LzE2IE1oeiBTd2l0Y2ggZm9yIEZEQyIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU1RfTUZQLCAiTXVsdGkgRnVuY3Rpb24gUGVyaXBoZXJhbCBNRlAgNjg5MDEiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFRUX01GUCwgIlNlY29uZCBNdWx0aSBGdW5jdGlvbiBQZXJpcGhlcmFsIE1GUCA2ODkwMSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU0NDLCAiU2VyaWFsIENvbW11bmljYXRpb25zIENvbnRyb2xsZXIgU0NDIDg1MzAiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFNUX0VTQ0MsICJFeHRlbmRlZCBTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHJvbGxlciBTQ0MgODUyMzAiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKEFOQUxPR19KT1ksICJQYWRkbGUgSW50ZXJmYWNlIik7CisgICAgQVRBUklIV19BTk5PVU5DRShNSUNST1dJUkUsICJNSUNST1dJUkUodG0pIEludGVyZmFjZSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU1RORF9ETUEsICJETUEgQ29udHJvbGxlciAoMjQgYml0KSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoRVhURF9ETUEsICJETUEgQ29udHJvbGxlciAoMzIgYml0KSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU0NTSV9ETUEsICJETUEgQ29udHJvbGxlciBmb3IgTkNSNTM4MCIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU0NDX0RNQSwgIkRNQSBDb250cm9sbGVyIGZvciBTQ0MiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFRUX0NMSywgIkNsb2NrIENoaXAgTUMxNDY4MThBIik7CisgICAgQVRBUklIV19BTk5PVU5DRShNU1RFX0NMSywgIkNsb2NrIENoaXAgUlA1QzE1Iik7CisgICAgQVRBUklIV19BTk5PVU5DRShTQ1UsICJTeXN0ZW0gQ29udHJvbCBVbml0Iik7CisgICAgQVRBUklIV19BTk5PVU5DRShCTElUVEVSLCAiQmxpdHRlciIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoVk1FLCAiVk1FIEJ1cyIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoRFNQNTZLLCAiRFNQNTYwMDEgcHJvY2Vzc29yIik7CisKKyAgICByZXR1cm4obGVuKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTA1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvZGVidWcuYwpAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisgKgorICogQXRhcmkgZGVidWdnaW5nIGFuZCBzZXJpYWwgY29uc29sZSBzdHVmZgorICoKKyAqIEFzc2VtYmxlZCBvZiBwYXJ0cyBvZiBmb3JtZXIgYXRhcmkvY29uZmlnLmMgOTctMTItMTggYnkgUm9tYW4gSG9kZWsKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CisKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CisKKy8qIEZsYWcgdGhhdCBNb2RlbTEgcG9ydCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCB1c2VkICovCitpbnQgYXRhcmlfTUZQX2luaXRfZG9uZTsKKy8qIEZsYWcgdGhhdCBNb2RlbTEgcG9ydCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCB1c2VkICovCitpbnQgYXRhcmlfU0NDX2luaXRfZG9uZTsKKy8qIENhbiBiZSBzZXQgc29tZXdoZXJlLCBpZiBhIFNDQyBtYXN0ZXIgcmVzZXQgaGFzIGFscmVhZHkgYmUgZG9uZSBhbmQgc2hvdWxkCisgKiBub3QgYmUgcmVwZWF0ZWQ7IHVzZWQgYnkga2dkYiAqLworaW50IGF0YXJpX1NDQ19yZXNldF9kb25lOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYXRhcmlfY29uc29sZV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImRlYnVnIiwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0JLTEsCit9OworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfbWZwX291dCAoY2hhciBjKQoreworICAgIHdoaWxlICghKG1mcC50cm5fc3RhdCAmIDB4ODApKSAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KKwliYXJyaWVyICgpOworICAgIG1mcC51c2FydF9kdGEgPSBjOworfQorCit2b2lkIGF0YXJpX21mcF9jb25zb2xlX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB3aGlsZSAoY291bnQtLSkgeworCWlmICgqc3RyID09ICdcbicpCisJICAgIGF0YV9tZnBfb3V0KCAnXHInICk7CisJYXRhX21mcF9vdXQoICpzdHIrKyApOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0YV9zY2Nfb3V0IChjaGFyIGMpCit7CisgICAgZG8geworCU1GUERFTEFZKCk7CisgICAgfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDQpKTsgLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCisgICAgTUZQREVMQVkoKTsKKyAgICBzY2MuY2hhX2JfZGF0YSA9IGM7Cit9CisKK3ZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisJaWYgKCpzdHIgPT0gJ1xuJykKKwkgICAgYXRhX3NjY19vdXQoICdccicgKTsKKwlhdGFfc2NjX291dCggKnN0cisrICk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX21pZGlfb3V0IChjaGFyIGMpCit7CisgICAgd2hpbGUgKCEoYWNpYS5taWRfY3RybCAmIEFDSUFfVERSRSkpIC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCWJhcnJpZXIgKCk7CisgICAgYWNpYS5taWRfZGF0YSA9IGM7Cit9CisKK3ZvaWQgYXRhcmlfbWlkaV9jb25zb2xlX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKwlpZiAoKnN0ciA9PSAnXG4nKQorCSAgICBhdGFfbWlkaV9vdXQoICdccicgKTsKKwlhdGFfbWlkaV9vdXQoICpzdHIrKyApOworICAgIH0KK30KKworc3RhdGljIGludCBhdGFfcGFyX291dCAoY2hhciBjKQoreworICAgIHVuc2lnbmVkIGNoYXIgdG1wOworICAgIC8qIFRoaXMgYSBzb21lLXNlY29uZHMgdGltZW91dCBpbiBjYXNlIG5vIHByaW50ZXIgaXMgY29ubmVjdGVkICovCisgICAgdW5zaWduZWQgbG9uZyBpID0gbG9vcHNfcGVyX2ppZmZ5ID4gMSA/IGxvb3BzX3Blcl9qaWZmeSA6IDEwMDAwMDAwL0haOworCisgICAgd2hpbGUoIChtZnAucGFyX2R0X3JlZyAmIDEpICYmIC0taSApIC8qIHdhaXQgZm9yIEJVU1kgPT0gTCAqLworCTsKKyAgICBpZiAoIWkpIHJldHVybiggMCApOworCisgICAgc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMTU7ICAvKiBzZWxlY3QgcG9ydCBCICovCisgICAgc291bmRfeW0ud2RfZGF0YSA9IGM7ICAgICAgICAgICAvKiBwdXQgY2hhciBvbnRvIHBvcnQgKi8KKyAgICBzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxNDsgIC8qIHNlbGVjdCBwb3J0IEEgKi8KKyAgICB0bXAgPSBzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWw7CisgICAgc291bmRfeW0ud2RfZGF0YSA9IHRtcCAmIH4weDIwOyAvKiBzZXQgc3Ryb2JlIEwgKi8KKyAgICBNRlBERUxBWSgpOyAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgYSBiaXQgKi8KKyAgICBzb3VuZF95bS53ZF9kYXRhID0gdG1wIHwgMHgyMDsgIC8qIHNldCBzdHJvYmUgSCAqLworICAgIHJldHVybiggMSApOworfQorCitzdGF0aWMgdm9pZCBhdGFyaV9wYXJfY29uc29sZV93cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgc3RhdGljIGludCBwcmludGVyX3ByZXNlbnQgPSAxOworCisgICAgaWYgKCFwcmludGVyX3ByZXNlbnQpCisJcmV0dXJuOworCisgICAgd2hpbGUgKGNvdW50LS0pIHsKKwlpZiAoKnN0ciA9PSAnXG4nKQorCSAgICBpZiAoIWF0YV9wYXJfb3V0KCAnXHInICkpIHsKKwkJcHJpbnRlcl9wcmVzZW50ID0gMDsKKwkJcmV0dXJuOworCSAgICB9CisJaWYgKCFhdGFfcGFyX291dCggKnN0cisrICkpIHsKKwkgICAgcHJpbnRlcl9wcmVzZW50ID0gMDsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9Cit9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKK2ludCBhdGFyaV9tZnBfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pCit7CisgICAgd2hpbGUoICEobWZwLnJjdl9zdGF0ICYgMHg4MCkgKSAvKiB3YWl0IGZvciByeCBidWYgZmlsbGVkICovCisJYmFycmllcigpOworICAgIHJldHVybiggbWZwLnVzYXJ0X2R0YSApOworfQorCitpbnQgYXRhcmlfc2NjX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQoreworICAgIGRvIHsKKwlNRlBERUxBWSgpOworICAgIH0gd2hpbGUoICEoc2NjLmNoYV9iX2N0cmwgJiAweDAxKSApOyAvKiB3YWl0IGZvciByeCBidWYgZmlsbGVkICovCisgICAgTUZQREVMQVkoKTsKKyAgICByZXR1cm4oIHNjYy5jaGFfYl9kYXRhICk7Cit9CisKK2ludCBhdGFyaV9taWRpX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQoreworICAgIHdoaWxlKCAhKGFjaWEubWlkX2N0cmwgJiBBQ0lBX1JEUkYpICkgLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCWJhcnJpZXIoKTsKKyAgICByZXR1cm4oIGFjaWEubWlkX2RhdGEgKTsKK30KKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgZG8gYSBxdWljayduJ2RpcnR5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRlAgb3IKKyAqIFNDQyBzZXJpYWwgcG9ydHMuIFRoZXkncmUgdXNlZCBieSB0aGUgZGVidWdnaW5nIGludGVyZmFjZSwga2dkYiwgYW5kIHRoZQorICogc2VyaWFsIGNvbnNvbGUgY29kZS4gKi8KKyNpZm5kZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCitzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfaW5pdF9tZnBfcG9ydCggaW50IGNmbGFnICkKKyNlbHNlCit2b2lkIGF0YXJpX2luaXRfbWZwX3BvcnQoIGludCBjZmxhZyApCisjZW5kaWYKK3sKKyAgICAvKiB0aW1lciB2YWx1ZXMgZm9yIDEyMDAuLi4xMTUyMDAgYnBzOyA+IDM4NDAwIHNlbGVjdCAxMTAsIDEzNCwgb3IgMTUwCisgICAgICogYnBzLCByZXNwLiwgYW5kIHdvcmsgb25seSBjb3JyZWN0IGlmIHRoZXJlJ3MgYSBSU1ZFIG9yIFJTU1BFRUQgKi8KKyAgICBzdGF0aWMgaW50IGJhdWRfdGFibGVbOV0gPSB7IDE2LCAxMSwgOCwgNCwgMiwgMSwgMTc1LCAxNDMsIDEyOCB9OworICAgIGludCBiYXVkID0gY2ZsYWcgJiBDQkFVRDsKKyAgICBpbnQgcGFyaXR5ID0gKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwNCA6IDB4MDYpIDogMDsKKyAgICBpbnQgY3NpemUgPSAoKGNmbGFnICYgQ1NJWkUpID09IENTNykgPyAweDIwIDogMHgwMDsKKworICAgIGlmIChjZmxhZyAmIENCQVVERVgpCisJYmF1ZCArPSBCMzg0MDA7CisgICAgaWYgKGJhdWQgPCBCMTIwMCB8fCBiYXVkID4gQjM4NDAwKzIpCisJYmF1ZCA9IEI5NjAwOyAvKiB1c2UgZGVmYXVsdCA5NjAwYnBzIGZvciBub24taW1wbGVtZW50ZWQgcmF0ZXMgKi8KKyAgICBiYXVkIC09IEIxMjAwOyAvKiBiYXVkX3RhYmxlW10gc3RhcnRzIGF0IDEyMDBicHMgKi8KKworICAgIG1mcC50cm5fc3RhdCAmPSB+MHgwMTsgLyogZGlzYWJsZSBUWCAqLworICAgIG1mcC51c2FydF9jdHIgPSBwYXJpdHkgfCBjc2l6ZSB8IDB4ODg7IC8qIDE6MTYgY2xrIG1vZGUsIDEgc3RvcCBiaXQgKi8KKyAgICBtZnAudGltX2N0X2NkICY9IDB4NzA7ICAvKiBzdG9wIHRpbWVyIEQgKi8KKyAgICBtZnAudGltX2R0X2QgPSBiYXVkX3RhYmxlW2JhdWRdOworICAgIG1mcC50aW1fY3RfY2QgfD0gMHgwMTsgIC8qIHN0YXJ0IHRpbWVyIEQsIDE6NCAqLworICAgIG1mcC50cm5fc3RhdCB8PSAweDAxOyAgLyogZW5hYmxlIFRYICovCisKKyAgICBhdGFyaV9NRlBfaW5pdF9kb25lID0gMTsKK30KKworI2RlZmluZSBTQ0NfV1JJVEUocmVnLHZhbCkJCQkJXAorICAgIGRvIHsJCQkJCQlcCisJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQkJXAorCU1GUERFTEFZKCk7CQkJCQlcCisJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQkJXAorCU1GUERFTEFZKCk7CQkJCQlcCisgICAgfSB3aGlsZSgwKQorCisvKiBsb29wc19wZXJfamlmZnkgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBzbyB3ZSBjYW4ndCB1c2UgdWRlbGF5KCkuIFRoaXMgZG9lcyBhCisgKiBkZWxheSBvZiB+IDYwdXMuICovCisjZGVmaW5lIExPTkdfREVMQVkoKQkJCQlcCisgICAgZG8gewkJCQkJXAorCWludCBpOwkJCQkJXAorCWZvciggaSA9IDEwMDsgaSA+IDA7IC0taSApCQlcCisJICAgIE1GUERFTEFZKCk7CQkJCVwKKyAgICB9IHdoaWxlKDApCisKKyNpZm5kZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCitzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfaW5pdF9zY2NfcG9ydCggaW50IGNmbGFnICkKKyNlbHNlCit2b2lkIGF0YXJpX2luaXRfc2NjX3BvcnQoIGludCBjZmxhZyApCisjZW5kaWYKK3sKKyAgICBleHRlcm4gaW50IGF0YXJpX1NDQ19yZXNldF9kb25lOworICAgIHN0YXRpYyBpbnQgY2xrc3JjX3RhYmxlWzldID0KKwkvKiByZWcgMTE6IDB4NTAgPSBCUkcsIDB4MDAgPSBSVHhDLCAweDI4ID0gVFJ4QyAqLworCXsgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCB9OworICAgIHN0YXRpYyBpbnQgYnJnc3JjX3RhYmxlWzldID0KKwkvKiByZWcgMTQ6IDAgPSBSVHhDLCAyID0gUENMSyAqLworCXsgMiwgMiwgMiwgMiwgMiwgMiwgMCwgMiwgMiB9OworICAgIHN0YXRpYyBpbnQgY2xrbW9kZV90YWJsZVs5XSA9CisJLyogcmVnIDQ6IDB4NDAgPSB4MTYsIDB4ODAgPSB4MzIsIDB4YzAgPSB4NjQgKi8KKwl7IDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4YzAsIDB4ODAgfTsKKyAgICBzdGF0aWMgaW50IGRpdl90YWJsZVs5XSA9CisJLyogcmVnMTIgKEJSRyBsb3cpICovCisJeyAyMDgsIDEzOCwgMTAzLCA1MCwgMjQsIDExLCAxLCAwLCAwIH07CisKKyAgICBpbnQgYmF1ZCA9IGNmbGFnICYgQ0JBVUQ7CisgICAgaW50IGNsa3NyYywgY2xrbW9kZSwgZGl2LCByZWczLCByZWc1OworCisgICAgaWYgKGNmbGFnICYgQ0JBVURFWCkKKwliYXVkICs9IEIzODQwMDsKKyAgICBpZiAoYmF1ZCA8IEIxMjAwIHx8IGJhdWQgPiBCMzg0MDArMikKKwliYXVkID0gQjk2MDA7IC8qIHVzZSBkZWZhdWx0IDk2MDBicHMgZm9yIG5vbi1pbXBsZW1lbnRlZCByYXRlcyAqLworICAgIGJhdWQgLT0gQjEyMDA7IC8qIHRhYmxlcyBzdGFydHMgYXQgMTIwMGJwcyAqLworCisgICAgY2xrc3JjICA9IGNsa3NyY190YWJsZVtiYXVkXTsKKyAgICBjbGttb2RlID0gY2xrbW9kZV90YWJsZVtiYXVkXTsKKyAgICBkaXYgICAgID0gZGl2X3RhYmxlW2JhdWRdOworICAgIGlmIChBVEFSSUhXX1BSRVNFTlQoVFRfTUZQKSAmJiBiYXVkID49IDYpIHsKKwkvKiBzcGVjaWFsIHRyZWF0bWVudCBmb3IgVFQsIHdoZXJlIHJhdGVzID49IDM4NDAwIGFyZSBkb25lIHZpYSBUUnhDICovCisJY2xrc3JjID0gMHgyODsgLyogVFJ4QyAqLworCWNsa21vZGUgPSBiYXVkID09IDYgPyAweGMwIDoKKwkJICBiYXVkID09IDcgPyAweDgwIDogLyogcmVhbGx5IDc2ODAwYnBzICovCisJCQkgICAgICAweDQwOyAgLyogcmVhbGx5IDE1MzYwMGJwcyAqLworCWRpdiA9IDA7CisgICAgfQorCisgICAgcmVnMyA9IChjZmxhZyAmIENTSVpFKSA9PSBDUzggPyAweGMwIDogMHg0MDsKKyAgICByZWc1ID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4NjAgOiAweDIwIHwgMHg4MiAvKiBhc3NlcnQgRFRSL1JUUyAqLzsKKworICAgICh2b2lkKXNjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLworICAgIFNDQ19XUklURSggOSwgMHhjMCApOwkvKiByZXNldCAqLworICAgIExPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KKyAgICBTQ0NfV1JJVEUoIDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKSA6IDAgfAorCQkgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKKwkJICBjbGttb2RlICk7CisgICAgU0NDX1dSSVRFKCAzLCByZWczICk7CisgICAgU0NDX1dSSVRFKCA1LCByZWc1ICk7CisgICAgU0NDX1dSSVRFKCA5LCAwICk7CQkvKiBubyBpbnRlcnJ1cHRzICovCisgICAgTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLworICAgIFNDQ19XUklURSggMTAsIDAgKTsJCS8qIE5SWiBtb2RlICovCisgICAgU0NDX1dSSVRFKCAxMSwgY2xrc3JjICk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCisgICAgU0NDX1dSSVRFKCAxMiwgZGl2ICk7CS8qIEJSRyB2YWx1ZSAqLworICAgIFNDQ19XUklURSggMTMsIDAgKTsJCS8qIEJSRyBoaWdoIGJ5dGUgKi8KKyAgICBTQ0NfV1JJVEUoIDE0LCBicmdzcmNfdGFibGVbYmF1ZF0gKTsKKyAgICBTQ0NfV1JJVEUoIDE0LCBicmdzcmNfdGFibGVbYmF1ZF0gfCAoZGl2ID8gMSA6IDApICk7CisgICAgU0NDX1dSSVRFKCAzLCByZWczIHwgMSApOworICAgIFNDQ19XUklURSggNSwgcmVnNSB8IDggKTsKKworICAgIGF0YXJpX1NDQ19yZXNldF9kb25lID0gMTsKKyAgICBhdGFyaV9TQ0NfaW5pdF9kb25lID0gMTsKK30KKworI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKK3N0YXRpYyB2b2lkIF9faW5pdCBhdGFyaV9pbml0X21pZGlfcG9ydCggaW50IGNmbGFnICkKKyNlbHNlCit2b2lkIGF0YXJpX2luaXRfbWlkaV9wb3J0KCBpbnQgY2ZsYWcgKQorI2VuZGlmCit7CisgICAgaW50IGJhdWQgPSBjZmxhZyAmIENCQVVEOworICAgIGludCBjc2l6ZSA9ICgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4MTAgOiAweDAwOworICAgIC8qIHdhcm5pbmcgN04xIGlzbid0IHBvc3NpYmxlISAoaW5zdGVhZCA3TzIgaXMgdXNlZC4uLikgKi8KKyAgICBpbnQgcGFyaXR5ID0gKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwYyA6IDB4MDgpIDogMHgwNDsKKyAgICBpbnQgZGl2OworCisgICAgLyogNDgwMCBzZWxlY3RzIDc4MTIuNSwgMTE1MjAwIHNlbGVjdHMgNTAwMDAwLCBhbGwgb3RoZXIgKGluY2wuIDk2MDAgYXMKKyAgICAgKiBkZWZhdWx0KSB0aGUgc3RhbmRhcmQgTUlESSBzcGVlZCAzMTI1MC4gKi8KKyAgICBpZiAoY2ZsYWcgJiBDQkFVREVYKQorCWJhdWQgKz0gQjM4NDAwOworICAgIGlmIChiYXVkID09IEI0ODAwKQorCWRpdiA9IEFDSUFfRElWNjQ7IC8qIHJlYWxseSA3ODEyLjUgYnBzICovCisgICAgZWxzZSBpZiAoYmF1ZCA9PSBCMzg0MDArMiAvKiAxMTUyMDAgKi8pCisJZGl2ID0gQUNJQV9ESVYxOyAvKiByZWFsbHkgNTAwIGticHMgKGRvZXMgdGhhdCB3b3JrPz8pICovCisgICAgZWxzZQorCWRpdiA9IEFDSUFfRElWMTY7IC8qIDMxMjUwIGJwcywgc3RhbmRhcmQgZm9yIE1JREkgKi8KKworICAgIC8qIFJUUyBsb3csIGludHMgZGlzYWJsZWQgKi8KKyAgICBhY2lhLm1pZF9jdHJsID0gZGl2IHwgY3NpemUgfCBwYXJpdHkgfAorCQkgICAgKChhdGFyaV9zd2l0Y2hlcyAmIEFUQVJJX1NXSVRDSF9NSURJKSA/CisJCSAgICAgQUNJQV9SSFRJRCA6IEFDSUFfUkxUSUQpOworfQorCit2b2lkIF9faW5pdCBhdGFyaV9kZWJ1Z19pbml0KHZvaWQpCit7CisgICAgaWYgKCFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAic2VyIiApKSB7CisJLyogZGVmYXVsdHMgdG8gc2VyMiBmb3IgYSBGYWxjb24gYW5kIHNlcjEgb3RoZXJ3aXNlICovCisJc3RyY3B5KCBtNjhrX2RlYnVnX2RldmljZSwgTUFDSF9JU19GQUxDT04gPyAic2VyMiIgOiAic2VyMSIgKTsKKworICAgIH0KKworICAgIGlmICghc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNlcjEiICkpIHsKKwkvKiBTVC1NRlAgTW9kZW0xIHNlcmlhbCBwb3J0ICovCisJYXRhcmlfaW5pdF9tZnBfcG9ydCggQjk2MDB8Q1M4ICk7CisJYXRhcmlfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhdGFyaV9tZnBfY29uc29sZV93cml0ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzZXIyIiApKSB7CisJLyogU0NDIE1vZGVtMiBzZXJpYWwgcG9ydCAqLworCWF0YXJpX2luaXRfc2NjX3BvcnQoIEI5NjAwfENTOCApOworCWF0YXJpX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGU7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAibWlkaSIgKSkgeworCS8qIE1JREkgcG9ydCAqLworCWF0YXJpX2luaXRfbWlkaV9wb3J0KCBCOTYwMHxDUzggKTsKKwlhdGFyaV9jb25zb2xlX2RyaXZlci53cml0ZSA9IGF0YXJpX21pZGlfY29uc29sZV93cml0ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJwYXIiICkpIHsKKwkvKiBwYXJhbGxlbCBwcmludGVyICovCisJYXRhcmlfdHVybm9mZl9pcnEoIElSUV9NRlBfQlVTWSApOyAvKiBhdm9pZCBpbnRzICovCisJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gNzsgIC8qIHNlbGVjdCBtaXhlciBjb250cm9sICovCisJc291bmRfeW0ud2RfZGF0YSA9IDB4ZmY7ICAgICAgIC8qIHNvdW5kIG9mZiwgcG9ydHMgYXJlIG91dHB1dCAqLworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE1OyAvKiBzZWxlY3QgcG9ydCBCICovCisJc291bmRfeW0ud2RfZGF0YSA9IDA7ICAgICAgICAgIC8qIG5vIGNoYXIgKi8KKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxNDsgLyogc2VsZWN0IHBvcnQgQSAqLworCXNvdW5kX3ltLndkX2RhdGEgPSBzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgfCAweDIwOyAvKiBzdHJvYmUgSCAqLworCWF0YXJpX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYXRhcmlfcGFyX2NvbnNvbGVfd3JpdGU7CisgICAgfQorICAgIGlmIChhdGFyaV9jb25zb2xlX2RyaXZlci53cml0ZSkKKwlyZWdpc3Rlcl9jb25zb2xlKCZhdGFyaV9jb25zb2xlX2RyaXZlcik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDQKKyAqICB0YWItd2lkdGg6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2hhZGVzLXBjaS5jIGIvYXJjaC9tNjhrL2F0YXJpL2hhZGVzLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODhkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvaGFkZXMtcGNpLmMKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBoYWRlcy1wY2kuYyAtIEhhcmR3YXJlIHNwZWNpZmljIFBDSSBCSU9TIGZ1bmN0aW9ucyB0aGUgSGFkZXMgQXRhcmkgY2xvbmUuCisgKgorICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWYgMAorIyBkZWZpbmUgREJHX0RFVlMoYXJncykJCXByaW50ayBhcmdzCisjZWxzZQorIyBkZWZpbmUgREJHX0RFVlMoYXJncykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19IQURFUykKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKworI2RlZmluZSBIQURFU19NRU1fQkFTRQkJMHg4MDAwMDAwMAorI2RlZmluZSBIQURFU19NRU1fU0laRQkJMHgyMDAwMDAwMAorI2RlZmluZSBIQURFU19DT05GSUdfQkFTRQkweEEwMDAwMDAwCisjZGVmaW5lIEhBREVTX0NPTkZJR19TSVpFCTB4MTAwMDAwMDAKKyNkZWZpbmUgSEFERVNfSU9fQkFTRQkJMHhCMDAwMDAwMAorI2RlZmluZSBIQURFU19JT19TSVpFCQkweDEwMDAwMDAwCisjZGVmaW5lIEhBREVTX1ZJUlRfSU9fU0laRQkweDAwMDEwMDAwCS8qIE9ubHkgNjRrIGlzIHJlbWFwcGVkIGFuZCBhY3R1YWxseSB1c2VkLiAqLworCisjZGVmaW5lIE5fU0xPVFMJCQkJNAkJCS8qIE51bWJlciBvZiBQQ0kgc2xvdHMuICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHBjaV9tZW1fbmFtZVtdID0gIlBDSSBtZW1vcnkgc3BhY2UiOworc3RhdGljIGNvbnN0IGNoYXIgcGNpX2lvX25hbWVbXSA9ICJQQ0kgSS9PIHNwYWNlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHBjaV9jb25maWdfbmFtZVtdID0gIlBDSSBjb25maWcgc3BhY2UiOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbmZpZ19zcGFjZSA9IHsKKyAgICAubmFtZSA9IHBjaV9jb25maWdfbmFtZSwKKyAgICAuc3RhcnQgPSBIQURFU19DT05GSUdfQkFTRSwKKyAgICAuZW5kID0gSEFERVNfQ09ORklHX0JBU0UgKyBIQURFU19DT05GSUdfU0laRSAtIDEKK307CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvX3NwYWNlID0geworICAgIC5uYW1lID0gcGNpX2lvX25hbWUsCisgICAgLnN0YXJ0ID0gSEFERVNfSU9fQkFTRSwKKyAgICAuZW5kID0gSEFERVNfSU9fQkFTRSArIEhBREVTX0lPX1NJWkUgLSAxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBwY2lfY29uZl9iYXNlX3BoeXNbXSA9IHsKKyAgICAweEEwMDgwMDAwLCAweEEwMDQwMDAwLCAweEEwMDIwMDAwLCAweEEwMDEwMDAwCit9Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX2NvbmZfYmFzZV92aXJ0W05fU0xPVFNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2VfdmlydDsKKworLyoKKyAqIHN0YXRpYyB2b2lkICpta19jb25mX2FkZHIodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2aWNlX2ZuLAorICoJCQkgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUpCisgKgorICogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBhcmVhIG9mIHRoZSBnaXZlbgorICogZGV2aWNlLgorICoKKyAqIEJVRzogYm9hcmRzIHdpdGggbXVsdGlwbGUgZnVuY3Rpb25zIGFyZSBwcm9iYWJseSBub3QgY29ycmVjdGx5CisgKiBzdXBwb3J0ZWQuCisgKi8KKworc3RhdGljIHZvaWQgKm1rX2NvbmZfYWRkcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUpCit7CisJaW50IGRldmljZSA9IGRldi0+ZGV2Zm4gPj4gMywgZnVuY3Rpb24gPSBkZXYtPmRldmZuICYgNzsKKwl2b2lkICpyZXN1bHQ7CisKKwlEQkdfREVWUygoIm1rX2NvbmZfYWRkcihidXM9JWQgLGRldmljZV9mbj0weCV4LCB3aGVyZT0weCV4LCBwY2lfYWRkcj0weCVwKVxuIiwKKwkJICBkZXYtPmJ1cy0+bnVtYmVyLCBkZXYtPmRldmZuLCB3aGVyZSwgcGNpX2FkZHIpKTsKKworCWlmIChkZXZpY2UgPiAzKQorCXsKKwkJREJHX0RFVlMoKCJta19jb25mX2FkZHI6IGRldmljZSAoJWQpID4gMywgcmV0dXJuaW5nIE5VTExcbiIsIGRldmljZSkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZGV2LT5idXMtPm51bWJlciAhPSAwKQorCXsKKwkJREJHX0RFVlMoKCJta19jb25mX2FkZHI6IGJ1cyAoJWQpID4gMCwgcmV0dXJuaW5nIE5VTExcbiIsIGRldmljZSkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXN1bHQgPSAodm9pZCAqKSAocGNpX2NvbmZfYmFzZV92aXJ0W2RldmljZV0gfCAoZnVuY3Rpb24gPDwgOCkgfCAod2hlcmUpKTsKKwlEQkdfREVWUygoIm1rX2NvbmZfYWRkcjogcmV0dXJuaW5nIHBjaV9hZGRyIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZykgcmVzdWx0KSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBoYWRlc19yZWFkX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTggKnZhbHVlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBjaV9hZGRyOworCisJKnZhbHVlID0gMHhmZjsKKworCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgY2hhciAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkqdmFsdWUgPSAqcGNpX2FkZHI7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IGhhZGVzX3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1MTYgKnZhbHVlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwY2lfYWRkcjsKKworCSp2YWx1ZSA9IDB4ZmZmZjsKKworCWlmICh3aGVyZSAmIDB4MSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgc2hvcnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJKnZhbHVlID0gbGUxNl90b19jcHUoKnBjaV9hZGRyKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgaGFkZXNfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1MzIgKnZhbHVlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcGNpX2FkZHI7CisJdW5zaWduZWQgY2hhciBoZWFkZXJfdHlwZTsKKwlpbnQgcmVzdWx0OworCisJKnZhbHVlID0gMHhmZmZmZmZmZjsKKworCWlmICh3aGVyZSAmIDB4MykKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgaW50ICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCSp2YWx1ZSA9IGxlMzJfdG9fY3B1KCpwY2lfYWRkcik7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhbiBhZGRyZXNzIG9uIHRoZSBidXMuIElmIHRydWUsIGFkZCB0aGUKKwkgKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBDSSBtZW1vcnkgb3IgUENJIEkvTyBhcmVhIG9uIHRoZSBIYWRlcy4KKwkgKi8KKworCWlmICgocmVzdWx0ID0gaGFkZXNfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9IRUFERVJfVFlQRSwKKwkJCQkJICAgICAmaGVhZGVyX3R5cGUpKSAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCXJldHVybiByZXN1bHQ7CisKKwlpZiAoKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzApICYmICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzEpKSB8fAorCSAgICAoKGhlYWRlcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmICgod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18yKSAmJgorCQkJCQkJCSAod2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU181KSkpKQorCXsKKwkJaWYgKCgqdmFsdWUgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKQorCQl7CisJCQkvKgorCQkJICogQmFzZSBhZGRyZXNzIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgYW4gSS9PIGFkZHJlc3MuIElmIHRoZQorCQkJICogYWRkcmVzcyBpcyB2YWxpZCBvbiB0aGUgSGFkZXMgKDAgPD0gKnZhbHVlIDwgSEFERVNfVklSVF9JT19TSVpFKSwKKwkJCSAqIGFkZCAncGNpX2lvX2Jhc2VfdmlydCcgdG8gdGhlIHZhbHVlLgorCQkJICovCisKKwkJCWlmICgqdmFsdWUgPCBIQURFU19WSVJUX0lPX1NJWkUpCisJCQkJKnZhbHVlICs9IHBjaV9pb19iYXNlX3ZpcnQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogQmFzZSBhZGRyZXNzIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgYW4gbWVtb3J5IGFkZHJlc3MuIElmIHRoZQorCQkJICogYWRkcmVzcyBpcyB2YWxpZCBvbiB0aGUgSGFkZXMgKDAgPD0gKnZhbHVlIDwgSEFERVNfTUVNX1NJWkUpLAorCQkJICogYWRkIEhBREVTX01FTV9CQVNFIHRvIHRoZSB2YWx1ZS4KKwkJCSAqLworCisJCQlpZiAoKnZhbHVlID09IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBCYXNlIGFkZHJlc3MgaXMgMC4gVGVzdCBpZiB0aGlzIGJhc2UKKwkJCQkgKiBhZGRyZXNzIHJlZ2lzdGVyIGlzIHVzZWQuCisJCQkJICovCisKKwkJCQkqcGNpX2FkZHIgPSAweGZmZmZmZmZmOworCQkJCWlmICgqcGNpX2FkZHIgIT0gMCkKKwkJCQl7CisJCQkJCSpwY2lfYWRkciA9ICp2YWx1ZTsKKwkJCQkJaWYgKCp2YWx1ZSA8IEhBREVTX01FTV9TSVpFKQorCQkJCQkJKnZhbHVlICs9IEhBREVTX01FTV9CQVNFOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKnZhbHVlIDwgSEFERVNfTUVNX1NJWkUpCisJCQkJCSp2YWx1ZSArPSBIQURFU19NRU1fQkFTRTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgaGFkZXNfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCB2YWx1ZSkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwY2lfYWRkcjsKKworCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgY2hhciAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkqcGNpX2FkZHIgPSB2YWx1ZTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgaGFkZXNfd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1MTYgdmFsdWUpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnBjaV9hZGRyOworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkqcGNpX2FkZHIgPSBjcHVfdG9fbGUxNih2YWx1ZSk7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IGhhZGVzX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUzMiB2YWx1ZSkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnBjaV9hZGRyOworCXVuc2lnbmVkIGNoYXIgaGVhZGVyX3R5cGU7CisJaW50IHJlc3VsdDsKKworCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgaW50ICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGFuIGFkZHJlc3Mgb24gdGhlIGJ1cy4gSWYgdHJ1ZSwgc3VidHJhY3QgdGhlCisJICogYmFzZSBhZGRyZXNzIG9mIHRoZSBQQ0kgbWVtb3J5IG9yIFBDSSBJL08gYXJlYSBvbiB0aGUgSGFkZXMuCisJICovCisKKwlpZiAoKHJlc3VsdCA9IGhhZGVzX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsCisJCQkJCSAgICAgJmhlYWRlcl90eXBlKSkgIT0gUENJQklPU19TVUNDRVNTRlVMKQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKCgod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18wKSAmJiAod2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU18xKSkgfHwKKwkgICAgKChoZWFkZXJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSAmJiAoKHdoZXJlID49IFBDSV9CQVNFX0FERFJFU1NfMikgJiYKKwkJCQkJCQkgKHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfNSkpKSkKKwl7CisJCWlmICgodmFsdWUgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PQorCQkgICAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykKKwkJeworCQkJLyoKKwkJCSAqIEkvTyBhZGRyZXNzLiBDaGVjayBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBhZGRyZXNzIG9uCisJCQkgKiB0aGUgSGFkZXMgKHBjaV9pb19iYXNlX3ZpcnQgPD0gdmFsdWUgPCBwY2lfaW9fYmFzZV92aXJ0ICsKKwkJCSAqIEhBREVTX1ZJUlRfSU9fU0laRSkgb3IgaWYgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYuIElmIG5vdAorCQkJICogdHJ1ZSBkbyBub3Qgd3JpdGUgdGhlIGJhc2UgYWRkcmVzcyByZWdpc3Rlci4gSWYgaXQgaXMgYQorCQkJICogdmFsaWQgYmFzZSBhZGRyZXNzIHN1YnRyYWN0ICdwY2lfaW9fYmFzZV92aXJ0JyBmcm9tIHRoZSB2YWx1ZS4KKwkJCSAqLworCisJCQlpZiAoKHZhbHVlID49IHBjaV9pb19iYXNlX3ZpcnQpICYmICh2YWx1ZSA8IChwY2lfaW9fYmFzZV92aXJ0ICsKKwkJCQkJCQkJCQkJCQkJIEhBREVTX1ZJUlRfSU9fU0laRSkpKQorCQkJCXZhbHVlIC09IHBjaV9pb19iYXNlX3ZpcnQ7CisJCQllbHNlCisJCQl7CisJCQkJaWYgKHZhbHVlICE9IDB4ZmZmZmZmZmYpCisJCQkJCXJldHVybiBQQ0lCSU9TX1NFVF9GQUlMRUQ7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogTWVtb3J5IGFkZHJlc3MuIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGFkZHJlc3Mgb24KKwkJCSAqIHRoZSBIYWRlcyAoSEFERVNfTUVNX0JBU0UgPD0gdmFsdWUgPCBIQURFU19NRU1fQkFTRSArIEhBREVTX01FTV9TSVpFKSBvcgorCQkJICogaWYgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYuIElmIG5vdCB0cnVlIGRvIG5vdCB3cml0ZQorCQkJICogdGhlIGJhc2UgYWRkcmVzcyByZWdpc3Rlci4gSWYgaXQgaXMgYSB2YWxpZCBiYXNlIGFkZHJlc3MKKwkJCSAqIHN1YnRyYWN0IEhBREVTX01FTV9CQVNFIGZyb20gdGhlIHZhbHVlLgorCQkJICovCisKKwkJCWlmICgodmFsdWUgPj0gSEFERVNfTUVNX0JBU0UpICYmICh2YWx1ZSA8IChIQURFU19NRU1fQkFTRSArIEhBREVTX01FTV9TSVpFKSkpCisJCQkJdmFsdWUgLT0gSEFERVNfTUVNX0JBU0U7CisJCQllbHNlCisJCQl7CisJCQkJaWYgKHZhbHVlICE9IDB4ZmZmZmZmZmYpCisJCQkJCXJldHVybiBQQ0lCSU9TX1NFVF9GQUlMRUQ7CisJCQl9CisJCX0KKwl9CisKKwkqcGNpX2FkZHIgPSBjcHVfdG9fbGUzMih2YWx1ZSk7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisvKgorICogc3RhdGljIGlubGluZSB2b2lkIGhhZGVzX2ZpeHVwKHZvaWQpCisgKgorICogQXNzaWduIElSUSBudW1iZXJzIGFzIHVzZWQgYnkgTGludXggdG8gdGhlIGludGVycnVwdCBwaW5zCisgKiBvZiB0aGUgUENJIGNhcmRzLgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBoYWRlc19maXh1cChpbnQgcGNpX21vZGlmeSkKK3sKKwljaGFyIGlycV90YWJbNF0gPSB7CisJCVswXSA9IElSUV9UVF9NRlBfSU8wLAkJLyogU2xvdCAwLiAqLworCQlbMV0gPSBJUlFfVFRfTUZQX0lPMSwJCS8qIFNsb3QgMS4gKi8KKwkJWzJdID0gSVJRX1RUX01GUF9TQ0MsCQkvKiBTbG90IDIuICovCisJCVszXSA9IElSUV9UVF9NRlBfU0NTSURNQQkvKiBTbG90IDMuICovCisJfTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNsb3Q7CisKKwkvKgorCSAqIEdvIHRocm91Z2ggYWxsIGRldmljZXMsIGZpeGluZyB1cCBpcnFzIGFzIHdlIHNlZSBmaXQ6CisJICovCisKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpCisJeworCQlpZiAoZGV2LT5jbGFzcyA+PiAxNiAhPSBQQ0lfQkFTRV9DTEFTU19CUklER0UpCisJCXsKKwkJCXNsb3QgPSBQQ0lfU0xPVChkZXYtPmRldmZuKTsJLyogRGV0ZXJtaW5lIHNsb3QgbnVtYmVyLiAqLworCQkJZGV2LT5pcnEgPSBpcnFfdGFiW3Nsb3RdOworCQkJaWYgKHBjaV9tb2RpZnkpCisJCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBkZXYtPmlycSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBzdGF0aWMgdm9pZCBoYWRlc19jb25mX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorICoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IENvbmZpZ3VyZSB0aGUgZ2l2ZW4gZGV2aWNlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogZGV2CQktIHRoZSBwY2kgZGV2aWNlLgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBoYWRlc19jb25mX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIDApOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgaGFkZXNfcGNpX29wcyA9IHsKKwkucmVhZF9ieXRlID0JaGFkZXNfcmVhZF9jb25maWdfYnl0ZSwKKwkucmVhZF93b3JkID0JaGFkZXNfcmVhZF9jb25maWdfd29yZCwKKwkucmVhZF9kd29yZCA9CWhhZGVzX3JlYWRfY29uZmlnX2R3b3JkLAorCS53cml0ZV9ieXRlID0JaGFkZXNfd3JpdGVfY29uZmlnX2J5dGUsCisJLndyaXRlX3dvcmQgPQloYWRlc193cml0ZV9jb25maWdfd29yZCwKKwkud3JpdGVfZHdvcmQgPQloYWRlc193cml0ZV9jb25maWdfZHdvcmQKK307CisKKy8qCisgKiBzdHJ1Y3QgcGNpX2J1c19pbmZvICppbml0X2hhZGVzX3BjaSh2b2lkKQorICoKKyAqIE1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb246CisgKgorICogLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhICdwY2lfYnVzX2luZm8nIHN0cnVjdHVyZQorICogLSBJbml0aWFsaXNlIGhhcmR3YXJlCisgKgorICogUmVzdWx0OiBwb2ludGVyIHRvICdwY2lfYnVzX2luZm8nIHN0cnVjdHVyZS4KKyAqLworCitzdHJ1Y3QgcGNpX2J1c19pbmZvICogX19pbml0IGluaXRfaGFkZXNfcGNpKHZvaWQpCit7CisJc3RydWN0IHBjaV9idXNfaW5mbyAqYnVzOworCWludCBpOworCisJLyoKKwkgKiBSZW1hcCBJL08gYW5kIGNvbmZpZ3VyYXRpb24gc3BhY2UuCisJICovCisKKwlwY2lfaW9fYmFzZV92aXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoSEFERVNfSU9fQkFTRSwgSEFERVNfVklSVF9JT19TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1NMT1RTOyBpKyspCisJCXBjaV9jb25mX2Jhc2VfdmlydFtpXSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKHBjaV9jb25mX2Jhc2VfcGh5c1tpXSwgMHgxMDAwMCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVzIGluZm8gc3RydWN0dXJlLgorCSAqLworCisJYnVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9idXNfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYnVzLCAwLCBzaXplb2Yoc3RydWN0IHBjaV9idXNfaW5mbykpOworCisJLyoKKwkgKiBDbGFpbSByZXNvdXJjZXMuIFRoZSBtNjhrIGhhcyBubyBzZXBhcmF0ZSBJL08gc3BhY2UsIGJvdGgKKwkgKiBQQ0kgbWVtb3J5IHNwYWNlIGFuZCBQQ0kgSS9PIHNwYWNlIGFyZSBpbiBtZW1vcnkgc3BhY2UuIFRoZXJlZm9yZQorCSAqIHRoZSBJL08gcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQgaW4gbWVtb3J5IHNwYWNlIGFzIHdlbGwuCisJICovCisKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjb25maWdfc3BhY2UpICE9IDApCisJeworCQlrZnJlZShidXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpb19zcGFjZSkgIT0gMCkKKwl7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmNvbmZpZ19zcGFjZSk7CisJCWtmcmVlKGJ1cyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWJ1cy0+bWVtX3NwYWNlLnN0YXJ0ID0gSEFERVNfTUVNX0JBU0U7CisJYnVzLT5tZW1fc3BhY2UuZW5kID0gSEFERVNfTUVNX0JBU0UgKyBIQURFU19NRU1fU0laRSAtIDE7CisJYnVzLT5tZW1fc3BhY2UubmFtZSA9IHBjaV9tZW1fbmFtZTsKKyNpZiAxCisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYnVzLT5tZW1fc3BhY2UpICE9IDApCisJeworCQlyZWxlYXNlX3Jlc291cmNlKCZpb19zcGFjZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmNvbmZpZ19zcGFjZSk7CisJCWtmcmVlKGJ1cyk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbmRpZgorCWJ1cy0+aW9fc3BhY2Uuc3RhcnQgPSBwY2lfaW9fYmFzZV92aXJ0OworCWJ1cy0+aW9fc3BhY2UuZW5kID0gcGNpX2lvX2Jhc2VfdmlydCArIEhBREVTX1ZJUlRfSU9fU0laRSAtIDE7CisJYnVzLT5pb19zcGFjZS5uYW1lID0gcGNpX2lvX25hbWU7CisjaWYgMQorCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZidXMtPmlvX3NwYWNlKSAhPSAwKQorCXsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmYnVzLT5tZW1fc3BhY2UpOworCQlyZWxlYXNlX3Jlc291cmNlKCZpb19zcGFjZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmNvbmZpZ19zcGFjZSk7CisJCWtmcmVlKGJ1cyk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbmRpZgorCS8qCisJICogU2V0IGhhcmR3YXJlIGRlcGVuZGVudCBmdW5jdGlvbnMuCisJICovCisKKwlidXMtPm02OGtfcGNpX29wcyA9ICZoYWRlc19wY2lfb3BzOworCWJ1cy0+Zml4dXAgPSBoYWRlc19maXh1cDsKKwlidXMtPmNvbmZfZGV2aWNlID0gaGFkZXNfY29uZl9kZXZpY2U7CisKKwkvKgorCSAqIFNlbGVjdCBoaWdoIHRvIGxvdyBlZGdlIGZvciBQQ0kgaW50ZXJydXB0cy4KKwkgKi8KKworCXR0X21mcC5hY3RpdmVfZWRnZSAmPSB+MHgyNzsKKworCXJldHVybiBidXM7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jIGIvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZjVlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9zdG1kYS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCBSb21hbiBIb2RlaworICoKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisvKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBmdW5jdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGFjY2VzcyB0byB0aGUgICovCisvKiBTVC1ETUEgY2hpcCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBkZXZpY2VzLiBDdXJyZW50bHkgd2UgaGF2ZTogICovCisvKiAgIFRUOiAgICAgRmxvcHB5IGFuZCBBQ1NJIGJ1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIEZhbGNvbjogRmxvcHB5IGFuZCBTQ1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgY29udHJvbGxpbmcgZnVuY3Rpb25zIHNldCB1cCBhIHdhaXQgcXVldWUgZm9yIGFjY2VzcyB0byB0aGUgICAgICovCisvKiBTVC1ETUEgY2hpcC4gQ2FsbGVycyB0byBzdGRtYV9sb2NrKCkgdGhhdCBjYW5ub3QgZ3JhbnRlZCBhY2Nlc3MgYXJlICovCisvKiBwdXQgb250byBhIHF1ZXVlIGFuZCB3YWtlZCB1cCBsYXRlciBpZiB0aGUgb3duZXIgY2FsbHMgICAgICAgICAgICAgICovCisvKiBzdGRtYV9yZWxlYXNlKCkuIEFkZGl0aW9uYWxseSwgdGhlIGNhbGxlciBnaXZlcyBoaXMgaW50ZXJydXB0ICAgICAgICovCisvKiBzZXJ2aWNlIHJvdXRpbmUgdG8gc3RkbWFfbG9jaygpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBPbiB0aGUgRmFsY29uLCB0aGUgSURFIGJ1cyB1c2VzIGp1c3QgdGhlIEFDU0kvRmxvcHB5IGludGVycnVwdCwgYnV0ICovCisvKiBub3QgdGhlIFNULURNQSBjaGlwIGl0c2VsZi4gU28gZmFsaGQuYyBuZWVkcyBub3QgdG8gbG9jayB0aGUgICAgICAgICovCisvKiBjaGlwLiBUaGUgaW50ZXJydXB0IGlzIHJvdXRlZCB0byBmYWxoZC5jIGlmIElERSBpcyBjb25maWd1cmVkLCB0aGUgICovCisvKiBtb2RlbCBpcyBhIEZhbGNvbiBhbmQgdGhlIGludGVycnVwdCB3YXMgY2F1c2VkIGJ5IHRoZSBIRCBjb250cm9sbGVyICovCisvKiAoY2FuIGJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCBpdHMgc3RhdHVzIHJlZ2lzdGVyKS4gICAgICAgICAgICAgICovCisKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RkbWEuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0YXRpYyBpbnQgc3RkbWFfbG9ja2VkOwkJCS8qIHRoZSBzZW1hcGhvcmUgKi8KKwkJCQkJCS8qIGludCBmdW5jIHRvIGJlIGNhbGxlZCAqLworc3RhdGljIGlycXJldHVybl90ICgqc3RkbWFfaXNyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgdm9pZCAqc3RkbWFfaXNyX2RhdGE7CQkJLyogZGF0YSBwYXNzZWQgdG8gaXNyICovCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc3RkbWFfd2FpdCk7CS8qIHdhaXQgcXVldWUgZm9yIFNULURNQSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlycXJldHVybl90IHN0ZG1hX2ludCAoaW50IGlycSwgdm9pZCAqZHVtbXksIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoKKyAqIEZ1bmN0aW9uOiB2b2lkIHN0ZG1hX2xvY2soIGlzcmZ1bmMgaXNyLCB2b2lkICpkYXRhICkKKyAqCisgKiBQdXJwb3NlOiBUcmllcyB0byBnZXQgYSBsb2NrIG9uIHRoZSBTVC1ETUEgY2hpcCB0aGF0IGlzIHVzZWQgYnkgbW9yZQorICogICB0aGVuIG9uZSBkZXZpY2UgZHJpdmVyLiBXYWl0cyBvbiBzdGRtYV93YWl0IHVudGlsIGxvY2sgaXMgZnJlZS4KKyAqICAgc3RkbWFfbG9jaygpIG1heSBub3QgYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0ISBZb3UgaGF2ZSB0bworICogICBnZXQgdGhlIGxvY2sgaW4geW91ciBtYWluIHJvdXRpbmUgYW5kIHJlbGVhc2UgaXQgd2hlbiB5b3VyCisgKiAgIHJlcXVlc3QgaXMgZmluaXNoZWQuCisgKgorICogSW5wdXRzOiBBIGludGVycnVwdCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB1bnRpbCB0aGUgbG9jayBpcworICogICByZWxlYXNlZC4KKyAqCisgKiBSZXR1cm5zOiBub3RoaW5nCisgKgorICovCisKK3ZvaWQgc3RkbWFfbG9jayhpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogcHJvdGVjdCBsb2NrICovCisKKwkvKiBTaW5jZSB0aGUgRE1BIGlzIHVzZWQgZm9yIGZpbGUgc3lzdGVtIHB1cnBvc2VzLCB3ZQorCSBoYXZlIHRvIHNsZWVwIHVuaW50ZXJydXB0aWJsZSAodGhlcmUgbWF5IGJlIGxvY2tlZAorCSBidWZmZXJzKSAqLworCXdhaXRfZXZlbnQoc3RkbWFfd2FpdCwgIXN0ZG1hX2xvY2tlZCk7CisKKwlzdGRtYV9sb2NrZWQgICA9IDE7CisJc3RkbWFfaXNyICAgICAgPSBoYW5kbGVyOworCXN0ZG1hX2lzcl9kYXRhID0gZGF0YTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiB2b2lkIHN0ZG1hX3JlbGVhc2UoIHZvaWQgKQorICoKKyAqIFB1cnBvc2U6IFJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBTVC1ETUEgY2hpcC4KKyAqCisgKiBJbnB1dHM6IG5vbmUKKyAqCisgKiBSZXR1cm5zOiBub3RoaW5nCisgKgorICovCisKK3ZvaWQgc3RkbWFfcmVsZWFzZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzdGRtYV9sb2NrZWQgICA9IDA7CisJc3RkbWFfaXNyICAgICAgPSBOVUxMOworCXN0ZG1hX2lzcl9kYXRhID0gTlVMTDsKKwl3YWtlX3VwKCZzdGRtYV93YWl0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworCisvKgorICogRnVuY3Rpb246IGludCBzdGRtYV9vdGhlcnNfd2FpdGluZyggdm9pZCApCisgKgorICogUHVycG9zZTogQ2hlY2sgaWYgc29tZW9uZSB3YWl0cyBmb3IgdGhlIFNULURNQSBsb2NrLgorICoKKyAqIElucHV0czogbm9uZQorICoKKyAqIFJldHVybnM6IDAgaWYgbm8gb25lIGlzIHdhaXRpbmcsICE9IDAgb3RoZXJ3aXNlCisgKgorICovCisKK2ludCBzdGRtYV9vdGhlcnNfd2FpdGluZyh2b2lkKQoreworCXJldHVybiB3YWl0cXVldWVfYWN0aXZlKCZzdGRtYV93YWl0KTsKK30KKworCisvKgorICogRnVuY3Rpb246IGludCBzdGRtYV9pc2xvY2tlZCggdm9pZCApCisgKgorICogUHVycG9zZTogQ2hlY2sgaWYgdGhlIFNULURNQSBpcyBjdXJyZW50bHkgbG9ja2VkLgorICogTm90ZTogUmV0dXJuZWQgc3RhdHVzIGlzIG9ubHkgdmFsaWQgaWYgaW50cyBhcmUgZGlzYWJsZWQgd2hpbGUgY2FsbGluZyBhbmQKKyAqICAgICAgIGFzIGxvbmcgYXMgdGhleSByZW1haW4gZGlzYWJsZWQuCisgKiAgICAgICBJZiBjYWxsZWQgd2l0aCBpbnRzIGVuYWJsZWQsIHN0YXR1cyBjYW4gY2hhbmdlIG9ubHkgZnJvbSBsb2NrZWQgdG8KKyAqICAgICAgIHVubG9ja2VkLCBiZWNhdXNlIGludHMgbWF5IG5vdCBsb2NrIHRoZSBTVC1ETUEuCisgKgorICogSW5wdXRzOiBub25lCisgKgorICogUmV0dXJuczogIT0gMCBpZiBsb2NrZWQsIDAgb3RoZXJ3aXNlCisgKgorICovCisKK2ludCBzdGRtYV9pc2xvY2tlZCh2b2lkKQoreworCXJldHVybiBzdGRtYV9sb2NrZWQ7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiB2b2lkIHN0ZG1hX2luaXQoIHZvaWQgKQorICoKKyAqIFB1cnBvc2U6IEluaXRpYWxpemUgdGhlIFNULURNQSBjaGlwIGFjY2VzcyBjb250cm9sbGluZy4KKyAqICAgSXQgc2V0cyB1cCB0aGUgaW50ZXJydXB0IGFuZCBpdHMgc2VydmljZSByb3V0aW5lLiBUaGUgaW50IGlzIHJlZ2lzdGVyZWQKKyAqICAgYXMgc2xvdyBpbnQsIGNsaWVudCBkZXZpY2VzIGhhdmUgdG8gbGl2ZSB3aXRoIHRoYXQgKG5vIHByb2JsZW0KKyAqICAgY3VycmVudGx5KS4KKyAqCisgKiBJbnB1dHM6IG5vbmUKKyAqCisgKiBSZXR1cm46IG5vdGhpbmcKKyAqCisgKi8KKwordm9pZCBfX2luaXQgc3RkbWFfaW5pdCh2b2lkKQoreworCXN0ZG1hX2lzciA9IE5VTEw7CisJcmVxdWVzdF9pcnEoSVJRX01GUF9GREMsIHN0ZG1hX2ludCwgSVJRX1RZUEVfU0xPVywKKwkgICAgICAgICAgICAiU1QtRE1BOiBmbG9wcHkvQUNTSS9JREUvRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpOworfQorCisKKy8qCisgKiBGdW5jdGlvbjogdm9pZCBzdGRtYV9pbnQoKQorICoKKyAqIFB1cnBvc2U6IFRoZSBpbnRlcnJ1cHQgcm91dGluZSBmb3IgdGhlIFNULURNQS4gSXQgY2FsbHMgdGhlIGlzcgorICogICByZWdpc3RlcmVkIGJ5IHN0ZG1hX2xvY2soKS4KKyAqCisgKi8KKworc3RhdGljIGlycXJldHVybl90IHN0ZG1hX2ludChpbnQgaXJxLCB2b2lkICpkdW1teSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworICBpZiAoc3RkbWFfaXNyKQorICAgICAgKCpzdGRtYV9pc3IpKGlycSwgc3RkbWFfaXNyX2RhdGEsIGZwKTsKKyAgcmV0dXJuIElSUV9IQU5ETEVEOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmMgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTNjMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmMKQEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmM6IEZ1bmN0aW9ucyBmb3IgU1QtUkFNIGFsbG9jYXRpb25zCisgKgorICogQ29weXJpZ2h0IDE5OTQtOTcgUm9tYW4gSG9kZWsgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lCURQUklOVEsoZm10LGFyZ3MuLi4pIHByaW50ayggZm10LCAjI2FyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmbXQsYXJncy4uLikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfU1RSQU1fUFJPQykKKy8qIGFiYnJldiBmb3IgdGhlICYmIGFib3ZlLi4uICovCisjZGVmaW5lIERPX1BST0MKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjZW5kaWYKKworLyogUHJlLXN3YXBwaW5nIGNvbW1lbnRzOgorICoKKyAqICsrcm9tYW46CisgKgorICogTmV3IHZlcnNpb24gb2YgU1QtUmFtIGJ1ZmZlciBhbGxvY2F0aW9uLiBJbnN0ZWFkIG9mIHVzaW5nIHRoZQorICogMSBNQiAtIDQgS0IgdGhhdCByZW1haW4gd2hlbiB0aGUgU1QtUmFtIGNodW5rIHN0YXJ0cyBhdCAkMTAwMAorICogKDEgTUIgZ3JhbnVsYXJpdHkhKSwgc3VjaCBidWZmZXJzIGFyZSByZXNlcnZlZCBsaWtlIHRoaXM6CisgKgorICogIC0gSWYgdGhlIGtlcm5lbCByZXNpZGVzIGluIFNULVJhbSBhbnl3YXksIHdlIGNhbiB0YWtlIHRoZSBidWZmZXIKKyAqICAgIGZyb20gYmVoaW5kIHRoZSBjdXJyZW50IGtlcm5lbCBkYXRhIHNwYWNlIHRoZSBub3JtYWwgd2F5CisgKiAgICAoaW5jcmVtZW50aW5nIHN0YXJ0X21lbSkuCisgKgorICogIC0gSWYgdGhlIGtlcm5lbCBpcyBpbiBUVC1SYW0sIHN0cmFtX2luaXQoKSBpbml0aWFsaXplcyBzdGFydCBhbmQKKyAqICAgIGVuZCBvZiB0aGUgYXZhaWxhYmxlIHJlZ2lvbi4gQnVmZmVycyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlcmUKKyAqICAgIGFuZCBtZW1faW5pdCgpIGxhdGVyIG1hcmtzIHRoZSBzdWNoIHVzZWQgcGFnZXMgYXMgcmVzZXJ2ZWQuCisgKiAgICBTaW5jZSBlYWNoIFRULVJhbSBjaHVuayBpcyBhdCBsZWFzdCA0IE1CIGluIHNpemUsIEkgaG9wZSB0aGVyZQorICogICAgd29uJ3QgYmUgYW4gb3ZlcnJ1biBvZiB0aGUgU1QtUmFtIHJlZ2lvbiBieSBub3JtYWwga2VybmVsIGRhdGEKKyAqICAgIHNwYWNlLgorICoKKyAqIEZvciB0aGF0LCBTVC1SYW0gbWF5IG9ubHkgYmUgYWxsb2NhdGVkIHdoaWxlIGtlcm5lbCBpbml0aWFsaXphdGlvbgorICogaXMgZ29pbmcgb24sIG9yIGV4YWN0bHk6IGJlZm9yZSBtZW1faW5pdCgpIGlzIGNhbGxlZC4gVGhlcmUgaXMgYWxzbworICogbm8gcHJvdmlzaW9uIG5vdyBmb3IgZnJlZWluZyBTVC1SYW0gYnVmZmVycy4gSXQgc2VlbXMgdGhhdCBpc24ndAorICogcmVhbGx5IG5lZWRlZC4KKyAqCisgKi8KKworLyoKKyAqIE5ldyBOb3YgMTk5NzogVXNlIFNULVJBTSBhcyBzd2FwIHNwYWNlIQorICoKKyAqIEluIHRoZSBwYXN0LCB0aGVyZSB3ZXJlIG9mdGVuIHByb2JsZW1zIHdpdGggbW9kdWxlcyB0aGF0IHJlcXVpcmUgU1QtUkFNCisgKiBidWZmZXJzLiBTdWNoIGRyaXZlcnMgaGF2ZSB0byB1c2UgX19nZXRfZG1hX3BhZ2VzKCksIHdoaWNoIHVuZm9ydHVuYXRlbHkKKyAqIG9mdGVuIGlzbid0IHZlcnkgc3VjY2Vzc2Z1bCBpbiBhbGxvY2F0aW5nIG1vcmUgdGhhbiAxIHBhZ2UgOi0oIFsxXSBUaGUgbmV0CisgKiByZXN1bHQgd2FzIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB5b3UgY291bGRuJ3QgaW5zbW9kIHN1Y2ggbW9kdWxlcyAoYXRhZmxvcCwKKyAqIEFDU0ksIFNDU0kgb24gRmFsY29uLCBBdGFyaSBpbnRlcm5hbCBmcmFtZWJ1ZmZlciwgbm90IHRvIHNwZWFrIG9mIGFjc2lfc2xtLAorICogd2hpY2ggbmVlZHMgYSAxIE1CIGJ1ZmZlci4uLiA6LSkuCisgKgorICogVG8gb3ZlcmNvbWUgdGhpcyBsaW1pdGF0aW9uLCBTVC1SQU0gY2FuIG5vdyBiZSB0dXJuZWQgaW50byBhIHZlcnkKKyAqIGhpZ2gtc3BlZWQgc3dhcCBzcGFjZS4gSWYgYSByZXF1ZXN0IGZvciBhbiBTVC1SQU0gYnVmZmVyIGNvbWVzLCB0aGUga2VybmVsCisgKiBub3cgdHJpZXMgdG8gdW5zd2FwIHNvbWUgcGFnZXMgb24gdGhhdCBzd2FwIGRldmljZSB0byBtYWtlIHNvbWUgZnJlZSAoYW5kCisgKiBjb250aWd1b3VzKSBzcGFjZS4gVGhpcyB3b3JrcyBtdWNoIGJldHRlciBpbiBjb21wYXJpc29uIHRvCisgKiBfX2dldF9kbWFfcGFnZXMoKSwgc2luY2UgdXNlZCBzd2FwIHBhZ2VzIGNhbiBiZSBzZWxlY3RpdmVseSBmcmVlZCBieSBlaXRoZXIKKyAqIG1vdmluZyB0aGVtIHRvIHNvbWV3aGVyZSBlbHNlIGluIHN3YXAgc3BhY2UsIG9yIGJ5IHJlYWRpbmcgdGhlbSBiYWNrIGludG8KKyAqIHN5c3RlbSBtZW1vcnkuIE9rLCB0aGVyZSBvcGVyYXRpb24gb2YgdW5zd2FwcGluZyBpc24ndCByZWFsbHkgY2hlYXAgKGZvcgorICogZWFjaCBwYWdlLCBvbmUgaGFzIHRvIGdvIHRocm91Z2ggdGhlIHBhZ2UgdGFibGVzIG9mIGFsbCBwcm9jZXNzZXMpLCBidXQgaXQKKyAqIGRvZXNuJ3QgaGFwcGVuIHRoYXQgb2Z0ZW4gKG9ubHkgd2hlbiBhbGxvY2F0aW9uIFNULVJBTSwgaS5lLiB3aGVuIGxvYWRpbmcgYQorICogbW9kdWxlIHRoYXQgbmVlZHMgU1QtUkFNKS4gQnV0IGl0IGF0IGxlYXN0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxvYWQgc3VjaAorICogbW9kdWxlcyEKKyAqCisgKiBJdCBjb3VsZCBhbHNvIGJlIHRoYXQgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgaW5jcmVhc2VzIGEgYml0IGR1ZSB0bworICogU1QtUkFNIHN3YXBwaW5nLCBzaW5jZSBzbG93IFNULVJBTSBpc24ndCB1c2VkIGFueW1vcmUgZm9yIGhvbGRpbmcgZGF0YSBvcgorICogZXhlY3V0aW5nIGNvZGUgaW4uIEl0J3MgdGhlbiBqdXN0IGEgKHZlcnkgZmFzdCwgY29tcGFyZWQgdG8gZGlzaykgYmFjaworICogc3RvcmFnZSBmb3Igbm90LXNvLW9mdGVuIG5lZWRlZCBkYXRhLiAoQnV0IHRoaXMgZWZmZWN0IG11c3QgYmUgY29tcGFyZWQKKyAqIHdpdGggdGhlIGxvc3Mgb2YgdG90YWwgbWVtb3J5Li4uKSBEb24ndCBrbm93IGlmIHRoZSBlZmZlY3QgaXMgYWxyZWFkeQorICogdmlzaWJsZSBvbiBhIFRULCB3aGVyZSB0aGUgc3BlZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIFNULSBhbmQgVFQtUkFNIGlzbid0CisgKiB0aGF0IGRyYW1hdGljLCBidXQgaXQgc2hvdWxkIG9uIG1hY2hpbmVzIHdoZXJlIFRULVJBTSBpcyByZWFsbHkgbXVjaCBmYXN0ZXIKKyAqIChlLmcuIEFmdGVyYnVybmVyKS4KKyAqCisgKiAgIFsxXTogX19nZXRfZnJlZV9wYWdlcygpIGRvZXMgYSBmaW5lIGpvYiBpZiB5b3Ugb25seSB3YW50IG9uZSBwYWdlLCBidXQgaWYKKyAqIHlvdSB3YW50IG1vcmUgKGNvbnRpZ3VvdXMpIHBhZ2VzLCBpdCBjYW4gZ2l2ZSB5b3Ugc3VjaCBhIGJsb2NrIG9ubHkgaWYKKyAqIHRoZXJlJ3MgYWxyZWFkeSBhIGZyZWUgb25lLiBUaGUgYWxnb3JpdGhtIGNhbid0IHRyeSB0byBmcmVlIGJ1ZmZlcnMgb3Igc3dhcAorICogb3V0IHNvbWV0aGluZyBpbiBvcmRlciB0byBtYWtlIG1vcmUgZnJlZSBzcGFjZSwgc2luY2UgYWxsIHRoYXQgcGFnZS1mcmVlaW5nCisgKiBtZWNoYW5pc21zIHdvcmsgInRhcmdldC1sZXNzIiwgaS5lLiB0aGV5IGp1c3QgZnJlZSBzb21ldGhpbmcsIGJ1dCBub3QgaW4gYQorICogc3BlY2lmaWMgcGxhY2UuIEkuZS4sIF9fZ2V0X2ZyZWVfcGFnZXMoKSBjYW4ndCBkbyBhbnl0aGluZyB0byBmcmVlCisgKiAqYWRqYWNlbnQqIHBhZ2VzIDotKCBUaGlzIHNpdHVhdGlvbiBiZWNvbWVzIGV2ZW4gd29yc2UgZm9yIERNQSBtZW1vcnksCisgKiBzaW5jZSB0aGUgZnJlZWluZyBhbGdvcml0aG1zIGFyZSBhbHNvIGJsaW5kIHRvIERNQSBjYXBhYmlsaXR5IG9mIHBhZ2VzLgorICovCisKKy8qIDE5OTgtMTAtMjA6ICsrYW5kcmVhcworICAgdW5zd2FwX2J5X21vdmUgZGlzYWJsZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYW5kbGUgc3dhcHBlZCBzaG0gcGFnZXMuCisqLworCisvKiAyMDAwLTA1LTAxOiArK2FuZHJlYXMKKyAgIEludGVncmF0ZWQgd2l0aCBib290bWVtLiAgUmVtb3ZlIGFsbCB0cmFjZXMgb2YgdW5zd2FwX2J5X21vdmUuCisqLworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKyNkZWZpbmUgQUxJR05fSUZfU1dBUCh4KQlQQUdFX0FMSUdOKHgpCisjZWxzZQorI2RlZmluZSBBTElHTl9JRl9TV0FQKHgpCSh4KQorI2VuZGlmCisKKy8qIGdldCBpbmRleCBvZiBzd2FwIHBhZ2UgYXQgYWRkcmVzcyAnYWRkcicgKi8KKyNkZWZpbmUgU1dBUF9OUihhZGRyKQkJKCgoYWRkcikgLSBzd2FwX3N0YXJ0KSA+PiBQQUdFX1NISUZUKQorCisvKiBnZXQgYWRkcmVzcyBvZiBzd2FwIHBhZ2UgIyducicgKi8KKyNkZWZpbmUgU1dBUF9BRERSKG5yKQkJKHN3YXBfc3RhcnQgKyAoKG5yKSA8PCBQQUdFX1NISUZUKSkKKworLyogZ2V0IG51bWJlciBvZiBwYWdlcyBmb3IgJ24nIGJ5dGVzIChhbHJlYWR5IHBhZ2UtYWxpZ25lZCkgKi8KKyNkZWZpbmUgTl9QQUdFUyhuKQkJCSgobikgPj4gUEFHRV9TSElGVCkKKworLyogVGhlIGZvbGxvd2luZyB0d28gbnVtYmVycyBkZWZpbmUgdGhlIG1heGltdW0gZnJhY3Rpb24gb2YgU1QtUkFNIGluIHRvdGFsCisgKiBtZW1vcnksIGJlbG93IHRoYXQgdGhlIGtlcm5lbCB3b3VsZCBhdXRvbWF0aWNhbGx5IHVzZSBTVC1SQU0gYXMgc3dhcAorICogc3BhY2UuIFRoaXMgZGVjaXNpb24gY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBzdHJhbV9zd2FwPSAqLworI2RlZmluZSBNQVhfU1RSQU1fRlJBQ1RJT05fTk9NCQkxCisjZGVmaW5lIE1BWF9TVFJBTV9GUkFDVElPTl9ERU5PTQkzCisKKy8qIFN0YXJ0IGFuZCBlbmQgKHZpcnR1YWwpIG9mIFNULVJBTSAqLworc3RhdGljIHZvaWQgKnN0cmFtX3N0YXJ0LCAqc3RyYW1fZW5kOworCisvKiBzZXQgYWZ0ZXIgbWVtb3J5X2luaXQoKSBleGVjdXRlZCBhbmQgYWxsb2NhdGlvbnMgdmlhIHN0YXJ0X21lbSBhcmVuJ3QKKyAqIHBvc3NpYmxlIGFueW1vcmUgKi8KK3N0YXRpYyBpbnQgbWVtX2luaXRfZG9uZTsKKworLyogc2V0IGlmIGtlcm5lbCBpcyBpbiBTVC1SQU0gKi8KK3N0YXRpYyBpbnQga2VybmVsX2luX3N0cmFtOworCit0eXBlZGVmIHN0cnVjdCBzdHJhbV9ibG9jayB7CisJc3RydWN0IHN0cmFtX2Jsb2NrICpuZXh0OworCXZvaWQgKnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBmbGFnczsKKwljb25zdCBjaGFyICpvd25lcjsKK30gQkxPQ0s7CisKKy8qIHZhbHVlcyBmb3IgZmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgQkxPQ0tfRlJFRQkJMHgwMQkvKiBmcmVlIHN0cnVjdHVyZSBpbiB0aGUgQkxPQ0tzIHBvb2wgKi8KKyNkZWZpbmUgQkxPQ0tfS01BTExPQ0VECTB4MDIJLyogc3RydWN0dXJlIGFsbG9jYXRlZCBieSBrbWFsbG9jKCkgKi8KKyNkZWZpbmUgQkxPQ0tfR0ZQCQkweDA4CS8qIGJsb2NrIGFsbG9jYXRlZCB3aXRoIF9fZ2V0X2RtYV9wYWdlcygpICovCisjZGVmaW5lIEJMT0NLX0lOU1dBUAkweDEwCS8qIGJsb2NrIGFsbG9jYXRlZCBpbiBzd2FwIHNwYWNlICovCisKKy8qIGxpc3Qgb2YgYWxsb2NhdGVkIGJsb2NrcyAqLworc3RhdGljIEJMT0NLICphbGxvY19saXN0OworCisvKiBXZSBjYW4ndCBhbHdheXMgdXNlIGttYWxsb2MoKSB0byBhbGxvY2F0ZSBCTE9DSyBzdHJ1Y3R1cmVzLCBzaW5jZQorICogc3RyYW1fYWxsb2MoKSBjYW4gYmUgY2FsbGVkIHJhdGhlciBlYXJseS4gU28gd2UgbmVlZCBzb21lIHBvb2wgb2YKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMuIDIwIG9mIHRoZW0gaXMgbW9yZSB0aGFuIGVub3VnaCwgc28gaW4gbW9zdAorICogY2FzZXMgd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdG8gY2FsbCBrbWFsbG9jKCkuICovCisjZGVmaW5lIE5fU1RBVElDX0JMT0NLUwkyMAorc3RhdGljIEJMT0NLIHN0YXRpY19ibG9ja3NbTl9TVEFUSUNfQkxPQ0tTXTsKKworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisvKiBtYXguIG51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIHN3YXBwaW5nCisgKiAgMCA9IG5vIFNULVJBTSBzd2FwcGluZworICogLTEgPSBkbyBzd2FwcGluZyAodG8gd2hvbGUgU1QtUkFNKSBpZiBpdCdzIGxlc3MgdGhhbiBNQVhfU1RSQU1fRlJBQ1RJT04gb2YKKyAqICAgICAgdG90YWwgbWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgbWF4X3N3YXBfc2l6ZSA9IC0xOworCisvKiBzdGFydCBhbmQgZW5kIG9mIHN3YXBwaW5nIGFyZWEgKi8KK3N0YXRpYyB2b2lkICpzd2FwX3N0YXJ0LCAqc3dhcF9lbmQ7CisKKy8qIFRoZSBTVC1SQU0ncyBzd2FwIGluZm8gc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnN0cmFtX3N3YXBfaW5mbzsKKworLyogVGhlIFNULVJBTSdzIHN3YXAgdHlwZSAqLworc3RhdGljIGludCBzdHJhbV9zd2FwX3R5cGU7CisKKy8qIFNlbWFwaG9yZSBmb3IgZ2V0X3N0cmFtX3JlZ2lvbi4gICovCitzdGF0aWMgREVDTEFSRV9NVVRFWChzdHJhbV9zd2FwX3NlbSk7CisKKy8qIG1ham9yIGFuZCBtaW5vciBkZXZpY2UgbnVtYmVyIG9mIHRoZSBTVC1SQU0gZGV2aWNlOyBmb3IgdGhlIG1ham9yLCB3ZSB1c2UKKyAqIHRoZSBzYW1lIGFzIEFtaWdhIHoycmFtLCB3aGljaCBpcyByZWFsbHkgc2ltaWxhciBhbmQgaW1wb3NzaWJsZSBvbiBBdGFyaSwKKyAqIGFuZCBmb3IgdGhlIG1pbm9yIGEgcmVsYXRpdmVseSBvZGQgbnVtYmVyIHRvIGF2b2lkIHRoZSB1c2VyIGNyZWF0aW5nIGFuZAorICogdXNpbmcgdGhhdCBkZXZpY2UuICovCisjZGVmaW5lCVNUUkFNX01BSk9SCQlaMlJBTV9NQUpPUgorI2RlZmluZQlTVFJBTV9NSU5PUgkJMTMKKworLyogU29tZSBpbXBvc3NpYmxlIHBvaW50ZXIgdmFsdWUgKi8KKyNkZWZpbmUgTUFHSUNfRklMRV9QCShzdHJ1Y3QgZmlsZSAqKTB4ZmZmZmRlYWQKKworI2lmZGVmIERPX1BST0MKK3N0YXRpYyB1bnNpZ25lZCBzdGF0X3N3YXBfcmVhZDsKK3N0YXRpYyB1bnNpZ25lZCBzdGF0X3N3YXBfd3JpdGU7CitzdGF0aWMgdW5zaWduZWQgc3RhdF9zd2FwX2ZvcmNlOworI2VuZGlmIC8qIERPX1BST0MgKi8KKworI2VuZGlmIC8qIENPTkZJR19TVFJBTV9TV0FQICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKK3N0YXRpYyBpbnQgc3dhcF9pbml0KHZvaWQgKnN0YXJ0X21lbSwgdm9pZCAqc3dhcF9kYXRhKTsKK3N0YXRpYyB2b2lkICpnZXRfc3RyYW1fcmVnaW9uKCB1bnNpZ25lZCBsb25nIG5fcGFnZXMgKTsKK3N0YXRpYyB2b2lkIGZyZWVfc3RyYW1fcmVnaW9uKCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBuX3BhZ2VzCisJCQkgICAgICAgKTsKK3N0YXRpYyBpbnQgaW5fc29tZV9yZWdpb24odm9pZCAqYWRkcik7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2ZyZWVfcmVnaW9uKCB1bnNpZ25lZCBsb25nIG5fcGFnZXMsIHVuc2lnbmVkIGxvbmcKKwkJCQkgICAgICAgKnRvdGFsX2ZyZWUsIHVuc2lnbmVkIGxvbmcKKwkJCQkgICAgICAgKnJlZ2lvbl9mcmVlICk7CitzdGF0aWMgdm9pZCBkb19zdHJhbV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqKTsKK3N0YXRpYyBpbnQgc3RyYW1fb3Blbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKTsKK3N0YXRpYyBpbnQgc3RyYW1fcmVsZWFzZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKTsKK3N0YXRpYyB2b2lkIHJlc2VydmVfcmVnaW9uKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpOworI2VuZGlmCitzdGF0aWMgQkxPQ0sgKmFkZF9yZWdpb24oIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSApOworc3RhdGljIEJMT0NLICpmaW5kX3JlZ2lvbiggdm9pZCAqYWRkciApOworc3RhdGljIGludCByZW1vdmVfcmVnaW9uKCBCTE9DSyAqYmxvY2sgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwwKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoJCQkJCQkJICAgUHVibGljIEludGVyZmFjZQkJCQkJCQkJKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhpcyBpbml0IGZ1bmN0aW9uIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5IGJ5IGF0YXJpL2NvbmZpZy5jCisgKiBJdCBpbml0aWFsaXplcyBzb21lIGludGVybmFsIHZhcmlhYmxlcyBuZWVkZWQgZm9yIHN0cmFtX2FsbG9jKCkKKyAqLwordm9pZCBfX2luaXQgYXRhcmlfc3RyYW1faW5pdCh2b2lkKQoreworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBzdGF0aWMgYmxvY2tzICovCisJZm9yKCBpID0gMDsgaSA8IE5fU1RBVElDX0JMT0NLUzsgKytpICkKKwkJc3RhdGljX2Jsb2Nrc1tpXS5mbGFncyA9IEJMT0NLX0ZSRUU7CisKKwkvKiBkZXRlcm1pbmUgd2hldGhlciBrZXJuZWwgY29kZSByZXNpZGVzIGluIFNULVJBTSAodGhlbiBTVC1SQU0gaXMgdGhlCisJICogZmlyc3QgbWVtb3J5IGJsb2NrIGF0IHZpcnR1YWwgMHgwKSAqLworCXN0cmFtX3N0YXJ0ID0gcGh5c190b192aXJ0KDApOworCWtlcm5lbF9pbl9zdHJhbSA9IChzdHJhbV9zdGFydCA9PSAwKTsKKworCWZvciggaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7ICsraSApIHsKKwkJaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIgPT0gMCkgeworCQkJLyogc2tpcCBmaXJzdCAya0Igb3IgcGFnZSAoc3VwZXJ2aXNvci1vbmx5ISkgKi8KKwkJCXN0cmFtX2VuZCA9IHN0cmFtX3N0YXJ0ICsgbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBTaG91bGQgbmV2ZXIgY29tZSBoZXJlISAoVGhlcmUgaXMgYWx3YXlzIFNULVJhbSEpICovCisJcGFuaWMoICJhdGFyaV9zdHJhbV9pbml0OiBubyBTVC1SQU0gZm91bmQhIiApOworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNldHVwX2FyY2goKSB0byByZXNlcnZlIHRoZSBwYWdlcyBuZWVkZWQgZm9yCisgKiBTVC1SQU0gbWFuYWdlbWVudC4KKyAqLwordm9pZCBfX2luaXQgYXRhcmlfc3RyYW1fcmVzZXJ2ZV9wYWdlcyh2b2lkICpzdGFydF9tZW0pCit7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwkvKiBpZiBtYXhfc3dhcF9zaXplIGlzIG5lZ2F0aXZlIChpLmUuIG5vIHN0cmFtX3N3YXA9IG9wdGlvbiBnaXZlbiksCisJICogZGV0ZXJtaW5lIGF0IHJ1biB0aW1lIHdoZXRoZXIgdG8gdXNlIFNULVJBTSBzd2FwcGluZyAqLworCWlmIChtYXhfc3dhcF9zaXplIDwgMCkKKwkJLyogVXNlIHN3YXBwaW5nIGlmIFNULVJBTSBkb2Vzbid0IG1ha2UgdXAgbW9yZSB0aGFuIE1BWF9TVFJBTV9GUkFDVElPTgorCQkgKiBvZiB0b3RhbCBtZW1vcnkuIEluIHRoYXQgY2FzZSwgdGhlIG1heC4gc2l6ZSBpcyBzZXQgdG8gMTYgTUIsCisJCSAqIGJlY2F1c2UgU1QtUkFNIGNhbiBuZXZlciBiZSBiaWdnZXIgdGhhbiB0aGF0LgorCQkgKiBBbHNvLCBuZXZlciB1c2Ugc3dhcHBpbmcgb24gYSBIYWRlcywgdGhlcmUncyBubyBzZXBhcmF0ZSBTVC1SQU0gaW4KKwkJICogdGhhdCBtYWNoaW5lLiAqLworCQltYXhfc3dhcF9zaXplID0KKwkJCSghTUFDSF9JU19IQURFUyAmJgorCQkJIChOX1BBR0VTKHN0cmFtX2VuZC1zdHJhbV9zdGFydCkqTUFYX1NUUkFNX0ZSQUNUSU9OX0RFTk9NIDw9CisJCQkgICgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeT4+UEFHRV9TSElGVCkqTUFYX1NUUkFNX0ZSQUNUSU9OX05PTSkpID8gMTYqMTAyNCoxMDI0IDogMDsKKwlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fcmVzZXJ2ZV9wYWdlczogbWF4X3N3YXBfc2l6ZSA9ICVkXG4iLCBtYXhfc3dhcF9zaXplICk7CisjZW5kaWYKKworCS8qIGFsd2F5cyByZXNlcnZlIGZpcnN0IHBhZ2Ugb2YgU1QtUkFNLCB0aGUgZmlyc3QgMiBrQiBhcmUKKwkgKiBzdXBlcnZpc29yLW9ubHkhICovCisJaWYgKCFrZXJuZWxfaW5fc3RyYW0pCisJCXJlc2VydmVfYm9vdG1lbSAoMCwgUEFHRV9TSVpFKTsKKworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisJeworCQl2b2lkICpzd2FwX2RhdGE7CisKKwkJc3RhcnRfbWVtID0gKHZvaWQgKikgUEFHRV9BTElHTiAoKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X21lbSk7CisJCS8qIGRldGVybWluZSBmaXJzdCBwYWdlIHRvIHVzZSBhcyBzd2FwOiBpZiB0aGUga2VybmVsIGlzCisJCSAgIGluIFRULVJBTSwgdGhpcyBpcyB0aGUgZmlyc3QgcGFnZSBvZiAodXNhYmxlKSBTVC1SQU07CisJCSAgIG90aGVyd2lzZSBqdXN0IHVzZSB0aGUgZW5kIG9mIGtlcm5lbCBkYXRhICg9IHN0YXJ0X21lbSkgKi8KKwkJc3dhcF9zdGFydCA9ICFrZXJuZWxfaW5fc3RyYW0gPyBzdHJhbV9zdGFydCArIFBBR0VfU0laRSA6IHN0YXJ0X21lbTsKKwkJLyogZGVjcmVtZW50IGJ5IG9uZSBwYWdlLCByZXN0IG9mIGtlcm5lbCBhc3N1bWVzIHRoYXQgZmlyc3Qgc3dhcCBwYWdlCisJCSAqIGlzIGFsd2F5cyByZXNlcnZlZCBhbmQgbWF5YmUgZG9lc24ndCBoYW5kbGUgc3dwX2VudHJ5ID09IDAKKwkJICogY29ycmVjdGx5ICovCisJCXN3YXBfc3RhcnQgLT0gUEFHRV9TSVpFOworCQlzd2FwX2VuZCA9IHN0cmFtX2VuZDsKKwkJaWYgKHN3YXBfZW5kLXN3YXBfc3RhcnQgPiBtYXhfc3dhcF9zaXplKQorCQkJc3dhcF9lbmQgPSAgc3dhcF9zdGFydCArIG1heF9zd2FwX3NpemU7CisJCURQUklOVEsoICJhdGFyaV9zdHJhbV9yZXNlcnZlX3BhZ2VzOiBzd2FwcGluZyBlbmFibGVkOyAiCisJCQkJICJzd2FwPSVwLSVwXG4iLCBzd2FwX3N0YXJ0LCBzd2FwX2VuZCk7CisKKwkJLyogcmVzZXJ2ZSBzb21lIGFtb3VudCBvZiBtZW1vcnkgZm9yIG1haW50YWluYW5jZSBvZgorCQkgKiBzd2FwcGluZyBpdHNlbGY6IG9uZSBwYWdlIGZvciBlYWNoIDIwNDggKFBBR0VfU0laRS8yKQorCQkgKiBzd2FwIHBhZ2VzLiAoMiBieXRlcyBmb3IgZWFjaCBwYWdlKSAqLworCQlzd2FwX2RhdGEgPSBzdGFydF9tZW07CisJCXN0YXJ0X21lbSArPSAoKFNXQVBfTlIoc3dhcF9lbmQpICsgUEFHRV9TSVpFLzIgLSAxKQorCQkJICAgICAgPj4gKFBBR0VfU0hJRlQtMSkpIDw8IFBBR0VfU0hJRlQ7CisJCS8qIGNvcnJlY3Qgc3dhcF9zdGFydCBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKHN3YXBfc3RhcnQgKyBQQUdFX1NJWkUgPT0gc3dhcF9kYXRhKQorCQkJc3dhcF9zdGFydCA9IHN0YXJ0X21lbSAtIFBBR0VfU0laRTsKKworCQlpZiAoIXN3YXBfaW5pdCggc3RhcnRfbWVtLCBzd2FwX2RhdGEgKSkgeworCQkJcHJpbnRrKCBLRVJOX0VSUiAiU1QtUkFNIHN3YXAgc3BhY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iICk7CisJCQltYXhfc3dhcF9zaXplID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQkvKiByZXNlcnZlIHJlZ2lvbiBmb3Igc3dhcHBpbmcgbWV0YS1kYXRhICovCisJCXJlc2VydmVfcmVnaW9uKHN3YXBfZGF0YSwgc3RhcnRfbWVtKTsKKwkJLyogcmVzZXJ2ZSBzd2FwcGluZyBhcmVhIGl0c2VsZiAqLworCQlyZXNlcnZlX3JlZ2lvbihzd2FwX3N0YXJ0ICsgUEFHRV9TSVpFLCBzd2FwX2VuZCk7CisKKwkJLyoKKwkJICogSWYgdGhlIHdob2xlIFNULVJBTSBpcyB1c2VkIGZvciBzd2FwcGluZywgdGhlcmUgYXJlIG5vIGFsbG9jYXRhYmxlCisJCSAqIGRtYSBwYWdlcyBsZWZ0LiBCdXQgdW5mb3J0dW5hdGVseSwgc29tZSBzaGFyZWQgcGFydHMgb2YgdGhlIGtlcm5lbAorCQkgKiAocGFydGljdWxhcmx5IHRoZSBTQ1NJIG1pZC1sZXZlbCkgY2FsbCBfX2dldF9kbWFfcGFnZXMoKQorCQkgKiB1bmNvbmRpdGlvbmFsbHkgOi0oIFRoZXNlIGNhbGxzIHRoZW4gZmFpbCwgYW5kIHNjc2kuYyBldmVuIGRvZXNuJ3QKKwkJICogY2hlY2sgZm9yIE5VTEwgcmV0dXJuIHZhbHVlcyBhbmQganVzdCBjcmFzaGVzLiBUaGUgcXVpY2sgZml4IGZvcgorCQkgKiB0aGlzIChpbnN0ZWFkIG9mIGRvaW5nIG11Y2ggY2xlYW4gdXAgd29yayBpbiB0aGUgU0NTSSBjb2RlKSBpcyB0bworCQkgKiBwcmV0ZW5kIGFsbCBwYWdlcyBhcmUgRE1BLWFibGUgYnkgc2V0dGluZyBtYWNoX21heF9kbWFfYWRkcmVzcyB0bworCQkgKiBVTE9OR19NQVguIFRoaXMgZG9lc24ndCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxpdHkgc28gZmFyLCBzaW5jZQorCQkgKiBnZXRfZG1hX3BhZ2VzKCkgc2hvdWxkbid0IGJlIHVzZWQgb24gQXRhcmkgYW55d2F5IGFueW1vcmUgKGJldHRlcgorCQkgKiB1c2UgYXRhcmlfc3RyYW1fYWxsb2MoKSksIGFuZCB0aGUgQXRhcmkgU0NTSSBkcml2ZXJzIGRvbid0IG5lZWQgRE1BCisJCSAqIG1lbW9yeS4gQnV0IHVuZm9ydHVuYXRlbHkgdGhlcmUncyBub3cgbm8ga2luZCBvZiB3YXJuaW5nIChldmVuIG5vdAorCQkgKiBhIE5VTEwgcmV0dXJuIHZhbHVlKSBpZiB5b3UgdXNlIGdldF9kbWFfcGFnZXMoKSBuZXZlcnRoZWxlc3MgOi0oCisJCSAqIFlvdSBqdXN0IHdpbGwgZ2V0IG5vbi1ETUEtYWJsZSBtZW1vcnkuLi4KKwkJICovCisJCW1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmZmZjsKKwl9CisjZW5kaWYKK30KKwordm9pZCBhdGFyaV9zdHJhbV9tZW1faW5pdF9ob29rICh2b2lkKQoreworCW1lbV9pbml0X2RvbmUgPSAxOworfQorCisKKy8qCisgKiBUaGlzIGlzIG1haW4gcHVibGljIGludGVyZmFjZTogc29tZWhvdyBhbGxvY2F0ZSBhIFNULVJBTSBibG9jaworICogVGhlcmUgYXJlIHRocmVlIHN0cmF0ZWdpZXM6CisgKgorICogIC0gSWYgd2UncmUgYmVmb3JlIG1lbV9pbml0KCksIHdlIGhhdmUgdG8gbWFrZSBhIHN0YXRpYyBhbGxvY2F0aW9uLiBUaGUKKyAqICAgIHJlZ2lvbiBpcyB0YWtlbiBpbiB0aGUga2VybmVsIGRhdGEgYXJlYSAoaWYgdGhlIGtlcm5lbCBpcyBpbiBTVC1SQU0pIG9yCisgKiAgICBmcm9tIHRoZSBzdGFydCBvZiBTVC1SQU0gKGlmIHRoZSBrZXJuZWwgaXMgaW4gVFQtUkFNKSBhbmQgYWRkZWQgdG8gdGhlCisgKiAgICByc3ZkX3N0cmFtXyogcmVnaW9uLiBUaGUgU1QtUkFNIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIGtlcm5lbAorICogICAgYWRkcmVzcyBzcGFjZSBpbiB0aGUgbGF0dGVyIGNhc2UuCisgKgorICogIC0gSWYgbWVtX2luaXQoKSBhbHJlYWR5IGhhcyBiZWVuIGNhbGxlZCBhbmQgU1QtUkFNIHN3YXBwaW5nIGlzIGVuYWJsZWQsCisgKiAgICB0cnkgdG8gZ2V0IHRoZSBtZW1vcnkgZnJvbSB0aGUgKHBzZXVkbykgc3dhcC1zcGFjZSwgZWl0aGVyIGZyZWUgYWxyZWFkeQorICogICAgb3IgYnkgbW92aW5nIHNvbWUgb3RoZXIgcGFnZXMgb3V0IG9mIHRoZSBzd2FwLgorICoKKyAqICAtIElmIG1lbV9pbml0KCkgYWxyZWFkeSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBTVC1SQU0gc3dhcHBpbmcgaXMgbm90CisgKiAgICBlbmFibGVkLCB0aGUgb25seSBwb3NzaWJpbGl0eSBpcyB0byB0cnkgd2l0aCBfX2dldF9kbWFfcGFnZXMoKS4gVGhpcyBoYXMKKyAqICAgIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCBpdCdzIHZlcnkgaGFyZCB0byBnZXQgbW9yZSB0aGFuIDEgcGFnZSwgYW5kIGl0IGlzCisgKiAgICBsaWtlbHkgdG8gZmFpbCA6LSgKKyAqCisgKi8KK3ZvaWQgKmF0YXJpX3N0cmFtX2FsbG9jKGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqb3duZXIpCit7CisJdm9pZCAqYWRkciA9IE5VTEw7CisJQkxPQ0sgKmJsb2NrOworCWludCBmbGFnczsKKworCURQUklOVEsoImF0YXJpX3N0cmFtX2FsbG9jKHNpemU9JTA4bHgsb3duZXI9JXMpXG4iLCBzaXplLCBvd25lcik7CisKKwlzaXplID0gQUxJR05fSUZfU1dBUChzaXplKTsKKwlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fYWxsb2M6IHJvdW5kZWQgc2l6ZSA9ICUwOGx4XG4iLCBzaXplICk7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwlpZiAobWF4X3N3YXBfc2l6ZSkgeworCQkvKiBJZiBzd2FwcGluZyBpcyBhY3RpdmU6IG1ha2Ugc29tZSBmcmVlIHNwYWNlIGluIHRoZSBzd2FwCisJCSAgICJkZXZpY2UiLiAqLworCQlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fYWxsb2M6IGFmdGVyIG1lbV9pbml0LCBzd2FwcGluZyBvaywgIgorCQkJCSAiY2FsbGluZyBnZXRfcmVnaW9uXG4iICk7CisJCWFkZHIgPSBnZXRfc3RyYW1fcmVnaW9uKCBOX1BBR0VTKHNpemUpICk7CisJCWZsYWdzID0gQkxPQ0tfSU5TV0FQOworCX0KKwllbHNlCisjZW5kaWYKKwlpZiAoIW1lbV9pbml0X2RvbmUpCisJCXJldHVybiBhbGxvY19ib290bWVtX2xvdyhzaXplKTsKKwllbHNlIHsKKwkJLyogQWZ0ZXIgbWVtX2luaXQoKSBhbmQgbm8gc3dhcHBpbmc6IGNhbiBvbmx5IHJlc29ydCB0bworCQkgKiBfX2dldF9kbWFfcGFnZXMoKSAqLworCQlhZGRyID0gKHZvaWQgKilfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKTsKKwkJZmxhZ3MgPSBCTE9DS19HRlA7CisJCURQUklOVEsoICJhdGFyaV9zdHJhbV9hbGxvYzogYWZ0ZXIgbWVtX2luaXQsIHN3YXBwaW5nIG9mZiwgIgorCQkJCSAiZ2V0X3BhZ2VzPSVwXG4iLCBhZGRyICk7CisJfQorCisJaWYgKGFkZHIpIHsKKwkJaWYgKCEoYmxvY2sgPSBhZGRfcmVnaW9uKCBhZGRyLCBzaXplICkpKSB7CisJCQkvKiBvdXQgb2YgbWVtb3J5IGZvciBCTE9DSyBzdHJ1Y3R1cmUgOi0oICovCisJCQlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fYWxsb2M6IG91dCBvZiBtZW0gZm9yIEJMT0NLIC0tICIKKwkJCQkJICJmcmVlaW5nIGFnYWluXG4iICk7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwkJCWlmIChmbGFncyA9PSBCTE9DS19JTlNXQVApCisJCQkJZnJlZV9zdHJhbV9yZWdpb24oIFNXQVBfTlIoYWRkciksIE5fUEFHRVMoc2l6ZSkgKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKKwkJCXJldHVybiggTlVMTCApOworCQl9CisJCWJsb2NrLT5vd25lciA9IG93bmVyOworCQlibG9jay0+ZmxhZ3MgfD0gZmxhZ3M7CisJfQorCXJldHVybiggYWRkciApOworfQorCit2b2lkIGF0YXJpX3N0cmFtX2ZyZWUoIHZvaWQgKmFkZHIgKQorCit7CisJQkxPQ0sgKmJsb2NrOworCisJRFBSSU5USyggImF0YXJpX3N0cmFtX2ZyZWUoYWRkcj0lcClcbiIsIGFkZHIgKTsKKworCWlmICghKGJsb2NrID0gZmluZF9yZWdpb24oIGFkZHIgKSkpIHsKKwkJcHJpbnRrKCBLRVJOX0VSUiAiQXR0ZW1wdCB0byBmcmVlIG5vbi1hbGxvY2F0ZWQgU1QtUkFNIGJsb2NrIGF0ICVwICIKKwkJCQkiZnJvbSAlcFxuIiwgYWRkciwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApICk7CisJCXJldHVybjsKKwl9CisJRFBSSU5USyggImF0YXJpX3N0cmFtX2ZyZWU6IGZvdW5kIGJsb2NrICglcCk6IHNpemU9JTA4bHgsIG93bmVyPSVzLCAiCisJCQkgImZsYWdzPSUwMnhcbiIsIGJsb2NrLCBibG9jay0+c2l6ZSwgYmxvY2stPm93bmVyLCBibG9jay0+ZmxhZ3MgKTsKKworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisJaWYgKCFtYXhfc3dhcF9zaXplKSB7CisjZW5kaWYKKwkJaWYgKGJsb2NrLT5mbGFncyAmIEJMT0NLX0dGUCkgeworCQkJRFBSSU5USygiYXRhcmlfc3RyYW1fZnJlZTogaXMga21hbGxvY2VkLCBvcmRlcl9zaXplPSVkXG4iLAorCQkJCWdldF9vcmRlcihibG9jay0+c2l6ZSkpOworCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhZGRyLCBnZXRfb3JkZXIoYmxvY2stPnNpemUpKTsKKwkJfQorCQllbHNlCisJCQlnb3RvIGZhaWw7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwl9CisJZWxzZSBpZiAoYmxvY2stPmZsYWdzICYgQkxPQ0tfSU5TV0FQKSB7CisJCURQUklOVEsoICJhdGFyaV9zdHJhbV9mcmVlOiBpcyBzd2FwLWFsbG9jZWRcbiIgKTsKKwkJZnJlZV9zdHJhbV9yZWdpb24oIFNXQVBfTlIoYmxvY2stPnN0YXJ0KSwgTl9QQUdFUyhibG9jay0+c2l6ZSkgKTsKKwl9CisJZWxzZQorCQlnb3RvIGZhaWw7CisjZW5kaWYKKwlyZW1vdmVfcmVnaW9uKCBibG9jayApOworCXJldHVybjsKKworICBmYWlsOgorCXByaW50ayggS0VSTl9FUlIgImF0YXJpX3N0cmFtX2ZyZWU6IGNhbm5vdCBmcmVlIGJsb2NrIGF0ICVwICIKKwkJCSIoY2FsbGVkIGZyb20gJXApXG4iLCBhZGRyLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkgKTsKK30KKworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCSAgIE1haW4gU3dhcHBpbmcgRnVuY3Rpb25zCQkJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKgorICogSW5pdGlhbGl6ZSBTVC1SQU0gc3dhcCBkZXZpY2UKKyAqIChsb3RzIGNvcGllZCBhbmQgbW9kaWZpZWQgZnJvbSBzeXNfc3dhcG9uKCkgaW4gbW0vc3dhcGZpbGUuYykKKyAqLworc3RhdGljIGludCBfX2luaXQgc3dhcF9pbml0KHZvaWQgKnN0YXJ0X21lbSwgdm9pZCAqc3dhcF9kYXRhKQoreworCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5IGZha2VfZGVudHJ5OworCXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgZmFrZV92ZnNtbnQ7CisJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnA7CisJc3RydWN0IGlub2RlIHN3YXBfaW5vZGU7CisJdW5zaWduZWQgaW50IHR5cGU7CisJdm9pZCAqYWRkcjsKKwlpbnQgaSwgaiwgaywgcHJldjsKKworCURQUklOVEsoInN3YXBfaW5pdChzdGFydF9tZW09JXAsIHN3YXBfZGF0YT0lcClcbiIsCisJCXN0YXJ0X21lbSwgc3dhcF9kYXRhKTsKKworCS8qIG5lZWQgYXQgbGVhc3Qgb25lIHBhZ2UgZm9yIHN3YXBwaW5nIHRvIChhbmQgdGhpcyBhbHNvIGlzbid0IHZlcnkKKwkgKiBtdWNoLi4uIDotKSAqLworCWlmIChzd2FwX2VuZCAtIHN3YXBfc3RhcnQgPCAyKlBBR0VfU0laRSkgeworCQlwcmludGsoIEtFUk5fV0FSTklORyAic3RyYW1fc3dhcF9pbml0OiBzd2FwIHNwYWNlIHRvbyBzbWFsbFxuIiApOworCQlyZXR1cm4oIDAgKTsKKwl9CisKKwkvKiBmaW5kIGZyZWUgc2xvdCBpbiBzd2FwX2luZm8gKi8KKwlmb3IoIHAgPSBzd2FwX2luZm8sIHR5cGUgPSAwOyB0eXBlIDwgbnJfc3dhcGZpbGVzOyB0eXBlKyssIHArKyApCisJCWlmICghKHAtPmZsYWdzICYgU1dQX1VTRUQpKQorCQkJYnJlYWs7CisJaWYgKHR5cGUgPj0gTUFYX1NXQVBGSUxFUykgeworCQlwcmludGsoIEtFUk5fV0FSTklORyAic3RyYW1fc3dhcF9pbml0OiBtYXguIG51bWJlciBvZiAiCisJCQkJInN3YXAgZGV2aWNlcyBleGhhdXN0ZWRcbiIgKTsKKwkJcmV0dXJuKCAwICk7CisJfQorCWlmICh0eXBlID49IG5yX3N3YXBmaWxlcykKKwkJbnJfc3dhcGZpbGVzID0gdHlwZSsxOworCisJc3RyYW1fc3dhcF9pbmZvID0gcDsKKwlzdHJhbV9zd2FwX3R5cGUgPSB0eXBlOworCisJLyogZmFrZSBzb21lIGRpciBjYWNoZSBlbnRyaWVzIHRvIGdpdmUgdXMgc29tZSBuYW1lIGluIC9kZXYvc3dhcHMgKi8KKwlmYWtlX2RlbnRyeS5kX3BhcmVudCA9ICZmYWtlX2RlbnRyeTsKKwlmYWtlX2RlbnRyeS5kX25hbWUubmFtZSA9ICJzdHJhbSAoaW50ZXJuYWwpIjsKKwlmYWtlX2RlbnRyeS5kX25hbWUubGVuID0gMTY7CisJZmFrZV92ZnNtbnQubW50X3BhcmVudCA9ICZmYWtlX3Zmc21udDsKKworCXAtPmZsYWdzICAgICAgICA9IFNXUF9VU0VEOworCXAtPnN3YXBfZmlsZSAgICA9ICZmYWtlX2RlbnRyeTsKKwlwLT5zd2FwX3Zmc21udCAgPSAmZmFrZV92ZnNtbnQ7CisJcC0+c3dhcF9tYXAJPSBzd2FwX2RhdGE7CisJcC0+Y2x1c3Rlcl9uciAgID0gMDsKKwlwLT5uZXh0ICAgICAgICAgPSAtMTsKKwlwLT5wcmlvICAgICAgICAgPSAweDdmZjA7CS8qIGEgcmF0aGVyIGhpZ2ggcHJpb3JpdHksIGJ1dCBub3QgdGhlIGhpZ2VzdAorCQkJCQkJCQkgKiB0byBnaXZlIHRoZSB1c2VyIGEgY2hhbmNlIHRvIG92ZXJyaWRlICovCisKKwkvKiBjYWxsIHN0cmFtX29wZW4oKSBkaXJlY3RseSwgYXZvaWRzIGF0IGxlYXN0IHRoZSBvdmVyaGVhZCBpbgorCSAqIGNvbnN0cnVjdGluZyBhIGR1bW15IGZpbGUgc3RydWN0dXJlLi4uICovCisJc3dhcF9pbm9kZS5pX3JkZXYgPSBNS0RFViggU1RSQU1fTUFKT1IsIFNUUkFNX01JTk9SICk7CisJc3RyYW1fb3BlbiggJnN3YXBfaW5vZGUsIE1BR0lDX0ZJTEVfUCApOworCXAtPm1heCA9IFNXQVBfTlIoc3dhcF9lbmQpOworCisJLyogaW5pdGlhbGl6ZSBzd2FwX21hcDogc2V0IHJlZ2lvbnMgdGhhdCBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgb3IgYmVsb25nCisJICogdG8ga2VybmVsIGRhdGEgc3BhY2UgdG8gU1dBUF9NQVBfQkFELCBvdGhlcndpc2UgdG8gZnJlZSAqLworCWogPSAwOyAvKiAjIG9mIGZyZWUgcGFnZXMgKi8KKwlrID0gMDsgLyogIyBvZiBhbHJlYWR5IGFsbG9jYXRlZCBwYWdlcyAoZnJvbSBwcmUtbWVtX2luaXQgc3RyYW1fYWxsb2MoKSkgKi8KKwlwLT5sb3dlc3RfYml0ID0gMDsKKwlwLT5oaWdoZXN0X2JpdCA9IDA7CisJZm9yKCBpID0gMSwgYWRkciA9IFNXQVBfQUREUigxKTsgaSA8IHAtPm1heDsKKwkJIGkrKywgYWRkciArPSBQQUdFX1NJWkUgKSB7CisJCWlmIChpbl9zb21lX3JlZ2lvbiggYWRkciApKSB7CisJCQlwLT5zd2FwX21hcFtpXSA9IFNXQVBfTUFQX0JBRDsKKwkJCSsrazsKKwkJfQorCQllbHNlIGlmIChrZXJuZWxfaW5fc3RyYW0gJiYgYWRkciA8IHN0YXJ0X21lbSApIHsKKwkJCXAtPnN3YXBfbWFwW2ldID0gU1dBUF9NQVBfQkFEOworCQl9CisJCWVsc2UgeworCQkJcC0+c3dhcF9tYXBbaV0gPSAwOworCQkJKytqOworCQkJaWYgKCFwLT5sb3dlc3RfYml0KSBwLT5sb3dlc3RfYml0ID0gaTsKKwkJCXAtPmhpZ2hlc3RfYml0ID0gaTsKKwkJfQorCX0KKwkvKiBmaXJzdCBwYWdlIGFsd2F5cyByZXNlcnZlZCAoYW5kIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyB0byBzd2FwIHNwYWNlKSAqLworCXAtPnN3YXBfbWFwWzBdID0gU1dBUF9NQVBfQkFEOworCisJLyogbm93IHN3YXBwaW5nIHRvIHRoaXMgZGV2aWNlIG9rICovCisJcC0+cGFnZXMgPSBqICsgazsKKwlzd2FwX2xpc3RfbG9jaygpOworCW5yX3N3YXBfcGFnZXMgKz0gajsKKwlwLT5mbGFncyA9IFNXUF9XUklURU9LOworCisJLyogaW5zZXJ0IHN3YXAgc3BhY2UgaW50byBzd2FwX2xpc3QgKi8KKwlwcmV2ID0gLTE7CisJZm9yIChpID0gc3dhcF9saXN0LmhlYWQ7IGkgPj0gMDsgaSA9IHN3YXBfaW5mb1tpXS5uZXh0KSB7CisJCWlmIChwLT5wcmlvID49IHN3YXBfaW5mb1tpXS5wcmlvKSB7CisJCQlicmVhazsKKwkJfQorCQlwcmV2ID0gaTsKKwl9CisJcC0+bmV4dCA9IGk7CisJaWYgKHByZXYgPCAwKSB7CisJCXN3YXBfbGlzdC5oZWFkID0gc3dhcF9saXN0Lm5leHQgPSBwIC0gc3dhcF9pbmZvOworCX0gZWxzZSB7CisJCXN3YXBfaW5mb1twcmV2XS5uZXh0ID0gcCAtIHN3YXBfaW5mbzsKKwl9CisJc3dhcF9saXN0X3VubG9jaygpOworCisJcHJpbnRrKCBLRVJOX0lORk8gIlVzaW5nICVkayAoJWQgcGFnZXMpIG9mIFNULVJBTSBhcyBzd2FwIHNwYWNlLlxuIiwKKwkJCXAtPnBhZ2VzIDw8IDIsIHAtPnBhZ2VzICk7CisJcmV0dXJuKCAxICk7Cit9CisKKworLyoKKyAqIFRoZSBzd2FwIGVudHJ5IGhhcyBiZWVuIHJlYWQgaW4gYWR2YW5jZSwgYW5kIHdlIHJldHVybiAxIHRvIGluZGljYXRlCisgKiB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuIHVzZWQgb3IgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAqCisgKiBBbHdheXMgc2V0IHRoZSByZXN1bHRpbmcgcHRlIHRvIGJlIG5vd3JpdGUgKHRoZSBzYW1lIGFzIENPVyBwYWdlcworICogYWZ0ZXIgb25lIHByb2Nlc3MgaGFzIGV4aXRlZCkuICBXZSBkb24ndCBrbm93IGp1c3QgaG93IG1hbnkgUFRFcyB3aWxsCisgKiBzaGFyZSB0aGlzIHN3YXAgZW50cnksIHNvIGJlIGNhdXRpb3VzIGFuZCBsZXQgZG9fd3BfcGFnZSB3b3JrIG91dAorICogd2hhdCB0byBkbyBpZiBhIHdyaXRlIGlzIHJlcXVlc3RlZCBsYXRlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVuc3dhcF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nCisJCQkgICAgICBhZGRyZXNzLCBwdGVfdCAqZGlyLCBzd3BfZW50cnlfdCBlbnRyeSwKKwkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXB0ZV90IHB0ZSA9ICpkaXI7CisKKwlpZiAocHRlX25vbmUocHRlKSkKKwkJcmV0dXJuOworCWlmIChwdGVfcHJlc2VudChwdGUpKSB7CisJCS8qIElmIHRoaXMgZW50cnkgaXMgc3dhcC1jYWNoZWQsIHRoZW4gcGFnZSBtdXN0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICBob2xkIHRoZSByaWdodCBhZGRyZXNzIGZvciBhbnkgY29waWVzIGluIHBoeXNpY2FsCisgICAgICAgICAgICAgICAgICAgbWVtb3J5ICovCisJCWlmIChwdGVfcGFnZShwdGUpICE9IHBhZ2UpCisJCQlyZXR1cm47CisJCS8qIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhlIHN3YXAgY2FjaGUgaW4gYSBtb21lbnQsIHNvLi4uICovCisJCXNldF9wdGUoZGlyLCBwdGVfbWtkaXJ0eShwdGUpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocHRlX3ZhbChwdGUpICE9IGVudHJ5LnZhbCkKKwkJcmV0dXJuOworCisJRFBSSU5USygidW5zd2FwX3B0ZTogcmVwbGFjaW5nIGVudHJ5ICUwOGx4IGJ5IG5ldyBwYWdlICVwIiwKKwkJZW50cnkudmFsLCBwYWdlKTsKKwlzZXRfcHRlKGRpciwgcHRlX21rZGlydHkobWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KSkpOworCXN3YXBfZnJlZShlbnRyeSk7CisJZ2V0X3BhZ2UocGFnZSk7CisJaW5jX21tX2NvdW50ZXIodm1hLT52bV9tbSwgcnNzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVuc3dhcF9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCBwbWRfdCAqZGlyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc3dwX2VudHJ5X3QgZW50cnksCisJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlwdGVfdCAqIHB0ZTsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKworCWlmIChwbWRfbm9uZSgqZGlyKSkKKwkJcmV0dXJuOworCWlmIChwbWRfYmFkKCpkaXIpKSB7CisJCXBtZF9FUlJPUigqZGlyKTsKKwkJcG1kX2NsZWFyKGRpcik7CisJCXJldHVybjsKKwl9CisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKTsKKwlvZmZzZXQgKz0gYWRkcmVzcyAmIFBNRF9NQVNLOworCWFkZHJlc3MgJj0gflBNRF9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCWlmIChlbmQgPiBQTURfU0laRSkKKwkJZW5kID0gUE1EX1NJWkU7CisJZG8geworCQl1bnN3YXBfcHRlKHZtYSwgb2Zmc2V0K2FkZHJlc3Mtdm1hLT52bV9zdGFydCwgcHRlLCBlbnRyeSwgcGFnZSk7CisJCWFkZHJlc3MgKz0gUEFHRV9TSVpFOworCQlwdGUrKzsKKwl9IHdoaWxlIChhZGRyZXNzIDwgZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVuc3dhcF9wZ2Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCBwZ2RfdCAqZGlyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcG1kX3QgKiBwbWQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGVuZDsKKworCWlmIChwZ2Rfbm9uZSgqZGlyKSkKKwkJcmV0dXJuOworCWlmIChwZ2RfYmFkKCpkaXIpKSB7CisJCXBnZF9FUlJPUigqZGlyKTsKKwkJcGdkX2NsZWFyKGRpcik7CisJCXJldHVybjsKKwl9CisJcG1kID0gcG1kX29mZnNldChkaXIsIGFkZHJlc3MpOworCW9mZnNldCA9IGFkZHJlc3MgJiBQR0RJUl9NQVNLOworCWFkZHJlc3MgJj0gflBHRElSX01BU0s7CisJZW5kID0gYWRkcmVzcyArIHNpemU7CisJaWYgKGVuZCA+IFBHRElSX1NJWkUpCisJCWVuZCA9IFBHRElSX1NJWkU7CisJZG8geworCQl1bnN3YXBfcG1kKHZtYSwgcG1kLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBvZmZzZXQsIGVudHJ5LAorCQkJICAgcGFnZSk7CisJCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOworCQlwbWQrKzsKKwl9IHdoaWxlIChhZGRyZXNzIDwgZW5kKTsKK30KKworc3RhdGljIHZvaWQgdW5zd2FwX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHBnZF90ICpwZ2RpciwKKwkJICAgICAgIHN3cF9lbnRyeV90IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydCwgZW5kID0gdm1hLT52bV9lbmQ7CisKKwlkbyB7CisJCXVuc3dhcF9wZ2Qodm1hLCBwZ2Rpciwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBlbnRyeSwgcGFnZSk7CisJCXN0YXJ0ID0gKHN0YXJ0ICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOworCQlwZ2RpcisrOworCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKK30KKworc3RhdGljIHZvaWQgdW5zd2FwX3Byb2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqIG1tLCBzd3BfZW50cnlfdCBlbnRyeSwKKwkJCSAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCogdm1hOworCisJLyoKKwkgKiBHbyB0aHJvdWdoIHByb2Nlc3MnIHBhZ2UgZGlyZWN0b3J5LgorCSAqLworCWlmICghbW0pCisJCXJldHVybjsKKwlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQlwZ2RfdCAqIHBnZCA9IHBnZF9vZmZzZXQobW0sIHZtYS0+dm1fc3RhcnQpOworCQl1bnN3YXBfdm1hKHZtYSwgcGdkLCBlbnRyeSwgcGFnZSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgdW5zd2FwX2J5X3JlYWQodW5zaWduZWQgc2hvcnQgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXgsCisJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbl9wYWdlcykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3dwX2VudHJ5X3QgZW50cnk7CisJdW5zaWduZWQgbG9uZyBpOworCisJRFBSSU5USyggInVuc3dhcHBpbmcgJWx1Li4lbHUgYnkgcmVhZGluZyBpblxuIiwKKwkJCSBzdGFydCwgc3RhcnQrbl9wYWdlcy0xICk7CisKKwlmb3IoIGkgPSBzdGFydDsgaSA8IHN0YXJ0K25fcGFnZXM7ICsraSApIHsKKwkJaWYgKG1hcFtpXSA9PSBTV0FQX01BUF9CQUQpIHsKKwkJCXByaW50ayggS0VSTl9FUlIgImdldF9zdHJhbV9yZWdpb246IHBhZ2UgJWx1IGFscmVhZHkgIgorCQkJCQkicmVzZXJ2ZWQ/P1xuIiwgaSApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobWFwW2ldKSB7CisJCQllbnRyeSA9IHN3cF9lbnRyeShzdHJhbV9zd2FwX3R5cGUsIGkpOworCQkJRFBSSU5USygidW5zd2FwOiBtYXBbaT0lbHVdPSV1IG5yX3N3YXA9JWxkXG4iLAorCQkJCWksIG1hcFtpXSwgbnJfc3dhcF9wYWdlcyk7CisKKwkJCXN3YXBfZGV2aWNlX2xvY2soc3RyYW1fc3dhcF9pbmZvKTsKKwkJCW1hcFtpXSsrOworCQkJc3dhcF9kZXZpY2VfdW5sb2NrKHN0cmFtX3N3YXBfaW5mbyk7CisJCQkvKiBHZXQgYSBwYWdlIGZvciB0aGUgZW50cnksIHVzaW5nIHRoZSBleGlzdGluZworCQkJICAgc3dhcCBjYWNoZSBwYWdlIGlmIHRoZXJlIGlzIG9uZS4gIE90aGVyd2lzZSwKKwkJCSAgIGdldCBhIGNsZWFuIHBhZ2UgYW5kIHJlYWQgdGhlIHN3YXAgaW50byBpdC4gKi8KKwkJCXBhZ2UgPSByZWFkX3N3YXBfY2FjaGVfYXN5bmMoZW50cnksIE5VTEwsIDApOworCQkJaWYgKCFwYWdlKSB7CisJCQkJc3dhcF9mcmVlKGVudHJ5KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCQlmb3JfZWFjaF9wcm9jZXNzKHApCisJCQkJdW5zd2FwX3Byb2Nlc3MocC0+bW0sIGVudHJ5LCBwYWdlKTsKKwkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCXNobWVtX3VudXNlKGVudHJ5LCBwYWdlKTsKKwkJCS8qIE5vdyBnZXQgcmlkIG9mIHRoZSBleHRyYSByZWZlcmVuY2UgdG8gdGhlCisJCQkgICB0ZW1wb3JhcnkgcGFnZSB3ZSd2ZSBiZWVuIHVzaW5nLiAqLworCQkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCQkJZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwYWdlKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCSNpZmRlZiBET19QUk9DCisJCQlzdGF0X3N3YXBfZm9yY2UrKzsKKwkjZW5kaWYKKwkJfQorCisJCURQUklOVEsoICJ1bnN3YXA6IG1hcFtpPSVsdV09JXUgbnJfc3dhcD0lbGRcbiIsCisJCQkJIGksIG1hcFtpXSwgbnJfc3dhcF9wYWdlcyApOworCQlzd2FwX2xpc3RfbG9jaygpOworCQlzd2FwX2RldmljZV9sb2NrKHN0cmFtX3N3YXBfaW5mbyk7CisJCW1hcFtpXSA9IFNXQVBfTUFQX0JBRDsKKwkJaWYgKHN0cmFtX3N3YXBfaW5mby0+bG93ZXN0X2JpdCA9PSBpKQorCQkJc3RyYW1fc3dhcF9pbmZvLT5sb3dlc3RfYml0Kys7CisJCWlmIChzdHJhbV9zd2FwX2luZm8tPmhpZ2hlc3RfYml0ID09IGkpCisJCQlzdHJhbV9zd2FwX2luZm8tPmhpZ2hlc3RfYml0LS07CisJCS0tbnJfc3dhcF9wYWdlczsKKwkJc3dhcF9kZXZpY2VfdW5sb2NrKHN0cmFtX3N3YXBfaW5mbyk7CisJCXN3YXBfbGlzdF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc2VydmUgYSByZWdpb24gaW4gU1QtUkFNIHN3YXAgc3BhY2UgZm9yIGFuIGFsbG9jYXRpb24KKyAqLworc3RhdGljIHZvaWQgKmdldF9zdHJhbV9yZWdpb24oIHVuc2lnbmVkIGxvbmcgbl9wYWdlcyApCit7CisJdW5zaWduZWQgc2hvcnQgKm1hcCA9IHN0cmFtX3N3YXBfaW5mby0+c3dhcF9tYXA7CisJdW5zaWduZWQgbG9uZyBtYXggPSBzdHJhbV9zd2FwX2luZm8tPm1heDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB0b3RhbF9mcmVlLCByZWdpb25fZnJlZTsKKwlpbnQgZXJyOworCXZvaWQgKnJldCA9IE5VTEw7CisKKwlEUFJJTlRLKCAiZ2V0X3N0cmFtX3JlZ2lvbihuX3BhZ2VzPSVsdSlcbiIsIG5fcGFnZXMgKTsKKworCWRvd24oJnN0cmFtX3N3YXBfc2VtKTsKKworCS8qIGRpc2FsbG93IHdyaXRpbmcgdG8gdGhlIHN3YXAgZGV2aWNlIG5vdyAqLworCXN0cmFtX3N3YXBfaW5mby0+ZmxhZ3MgPSBTV1BfVVNFRDsKKworCS8qIGZpbmQgYSByZWdpb24gb2Ygbl9wYWdlcyBwYWdlcyBpbiB0aGUgc3dhcCBzcGFjZSBpbmNsdWRpbmcgYXMgbXVjaCBmcmVlCisJICogcGFnZXMgYXMgcG9zc2libGUgKGFuZCBleGNsdWRpbmcgYW55IGFscmVhZHktcmVzZXJ2ZWQgcGFnZXMpLiAqLworCWlmICghKHN0YXJ0ID0gZmluZF9mcmVlX3JlZ2lvbiggbl9wYWdlcywgJnRvdGFsX2ZyZWUsICZyZWdpb25fZnJlZSApKSkKKwkJZ290byBlbmQ7CisJRFBSSU5USyggImdldF9zdHJhbV9yZWdpb246IHJlZ2lvbiBzdGFydHMgYXQgJWx1LCBoYXMgJWx1IGZyZWUgcGFnZXNcbiIsCisJCQkgc3RhcnQsIHJlZ2lvbl9mcmVlICk7CisKKwllcnIgPSB1bnN3YXBfYnlfcmVhZChtYXAsIG1heCwgc3RhcnQsIG5fcGFnZXMpOworCWlmIChlcnIpCisJCWdvdG8gZW5kOworCisJcmV0ID0gU1dBUF9BRERSKHN0YXJ0KTsKKyAgZW5kOgorCS8qIGFsbG93IHVzaW5nIHN3YXAgZGV2aWNlIGFnYWluICovCisJc3RyYW1fc3dhcF9pbmZvLT5mbGFncyA9IFNXUF9XUklURU9LOworCXVwKCZzdHJhbV9zd2FwX3NlbSk7CisJRFBSSU5USyggImdldF9zdHJhbV9yZWdpb246IHJldHVybmluZyAlcFxuIiwgcmV0ICk7CisJcmV0dXJuKCByZXQgKTsKK30KKworCisvKgorICogZnJlZSBhIHJlc2VydmVkIHJlZ2lvbiBpbiBTVC1SQU0gc3dhcCBzcGFjZQorICovCitzdGF0aWMgdm9pZCBmcmVlX3N0cmFtX3JlZ2lvbiggdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbl9wYWdlcyApCit7CisJdW5zaWduZWQgc2hvcnQgKm1hcCA9IHN0cmFtX3N3YXBfaW5mby0+c3dhcF9tYXA7CisKKwlEUFJJTlRLKCAiZnJlZV9zdHJhbV9yZWdpb24ob2Zmc2V0PSVsdSxuX3BhZ2VzPSVsdSlcbiIsIG9mZnNldCwgbl9wYWdlcyApOworCisJaWYgKG9mZnNldCA8IDEgfHwgb2Zmc2V0ICsgbl9wYWdlcyA+IHN0cmFtX3N3YXBfaW5mby0+bWF4KSB7CisJCXByaW50ayggS0VSTl9FUlIgImZyZWVfc3RyYW1fcmVnaW9uOiBUcnlpbmcgdG8gZnJlZSBub24tU1QtUkFNXG4iICk7CisJCXJldHVybjsKKwl9CisKKwlzd2FwX2xpc3RfbG9jaygpOworCXN3YXBfZGV2aWNlX2xvY2soc3RyYW1fc3dhcF9pbmZvKTsKKwkvKiB1bi1yZXNlcnZlIHRoZSBmcmVlZCBwYWdlcyAqLworCWZvciggOyBuX3BhZ2VzID4gMDsgKytvZmZzZXQsIC0tbl9wYWdlcyApIHsKKwkJaWYgKG1hcFtvZmZzZXRdICE9IFNXQVBfTUFQX0JBRCkKKwkJCXByaW50ayggS0VSTl9FUlIgImZyZWVfc3RyYW1fcmVnaW9uOiBTd2FwIHBhZ2UgJWx1IHdhcyBub3QgIgorCQkJCQkicmVzZXJ2ZWRcbiIsIG9mZnNldCApOworCQltYXBbb2Zmc2V0XSA9IDA7CisJfQorCisJLyogdXBkYXRlIHN3YXBwaW5nIG1ldGEtZGF0YSAqLworCWlmIChvZmZzZXQgPCBzdHJhbV9zd2FwX2luZm8tPmxvd2VzdF9iaXQpCisJCXN0cmFtX3N3YXBfaW5mby0+bG93ZXN0X2JpdCA9IG9mZnNldDsKKwlpZiAob2Zmc2V0K25fcGFnZXMtMSA+IHN0cmFtX3N3YXBfaW5mby0+aGlnaGVzdF9iaXQpCisJCXN0cmFtX3N3YXBfaW5mby0+aGlnaGVzdF9iaXQgPSBvZmZzZXQrbl9wYWdlcy0xOworCWlmIChzdHJhbV9zd2FwX2luZm8tPnByaW8gPiBzd2FwX2luZm9bc3dhcF9saXN0Lm5leHRdLnByaW8pCisJCXN3YXBfbGlzdC5uZXh0ID0gc3dhcF9saXN0LmhlYWQ7CisJbnJfc3dhcF9wYWdlcyArPSBuX3BhZ2VzOworCXN3YXBfZGV2aWNlX3VubG9jayhzdHJhbV9zd2FwX2luZm8pOworCXN3YXBfbGlzdF91bmxvY2soKTsKK30KKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCVV0aWxpdHkgRnVuY3Rpb25zIGZvciBTd2FwcGluZwkJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBpcyBhZGRyIGluIHNvbWUgb2YgdGhlIGFsbG9jYXRlZCByZWdpb25zPyAqLworc3RhdGljIGludCBpbl9zb21lX3JlZ2lvbih2b2lkICphZGRyKQoreworCUJMT0NLICpwOworCisJZm9yKCBwID0gYWxsb2NfbGlzdDsgcDsgcCA9IHAtPm5leHQgKSB7CisJCWlmIChwLT5zdGFydCA8PSBhZGRyICYmIGFkZHIgPCBwLT5zdGFydCArIHAtPnNpemUpCisJCQlyZXR1cm4oIDEgKTsKKwl9CisJcmV0dXJuKCAwICk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nIG5fcGFnZXMsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfZnJlZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpyZWdpb25fZnJlZSkKK3sKKwl1bnNpZ25lZCBzaG9ydCAqbWFwID0gc3RyYW1fc3dhcF9pbmZvLT5zd2FwX21hcDsKKwl1bnNpZ25lZCBsb25nIG1heCA9IHN0cmFtX3N3YXBfaW5mby0+bWF4OworCXVuc2lnbmVkIGxvbmcgaGVhZCwgdGFpbCwgbWF4X3N0YXJ0OworCWxvbmcgbmZyZWUsIG1heF9mcmVlOworCisJLyogZmlyc3Qgc2NhbiB0aGUgc3dhcCBzcGFjZSBmb3IgYSBzdWl0YWJsZSBwbGFjZSBmb3IgdGhlIGFsbG9jYXRpb24gKi8KKwloZWFkID0gMTsKKwltYXhfc3RhcnQgPSAwOworCW1heF9mcmVlID0gLTE7CisJKnRvdGFsX2ZyZWUgPSAwOworCisgIHN0YXJ0X292ZXI6CisJLyogaW5jcmVtZW50IHRhaWwgdW50aWwgZmluYWwgd2luZG93IHNpemUgcmVhY2hlZCwgYW5kIGNvdW50IGZyZWUgcGFnZXMgKi8KKwluZnJlZSA9IDA7CisJZm9yKCB0YWlsID0gaGVhZDsgdGFpbC1oZWFkIDwgbl9wYWdlcyAmJiB0YWlsIDwgbWF4OyArK3RhaWwgKSB7CisJCWlmIChtYXBbdGFpbF0gPT0gU1dBUF9NQVBfQkFEKSB7CisJCQloZWFkID0gdGFpbCsxOworCQkJZ290byBzdGFydF9vdmVyOworCQl9CisJCWlmICghbWFwW3RhaWxdKSB7CisJCQkrK25mcmVlOworCQkJKysqdG90YWxfZnJlZTsKKwkJfQorCX0KKwlpZiAodGFpbC1oZWFkIDwgbl9wYWdlcykKKwkJZ290byBvdXQ7CisJaWYgKG5mcmVlID4gbWF4X2ZyZWUpIHsKKwkJbWF4X3N0YXJ0ID0gaGVhZDsKKwkJbWF4X2ZyZWUgID0gbmZyZWU7CisJCWlmIChtYXhfZnJlZSA+PSBuX3BhZ2VzKQorCQkJLyogZG9uJ3QgbmVlZCBtb3JlIGZyZWUgcGFnZXMuLi4gOi0pICovCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3cgc2hpZnQgdGhlIHdpbmRvdyBhbmQgbG9vayBmb3IgdGhlIGFyZWEgd2hlcmUgYXMgbXVjaCBwYWdlcyBhcworCSAqIHBvc3NpYmxlIGFyZSBmcmVlICovCisJd2hpbGUoIHRhaWwgPCBtYXggKSB7CisJCW5mcmVlIC09IChtYXBbaGVhZCsrXSA9PSAwKTsKKwkJaWYgKG1hcFt0YWlsXSA9PSBTV0FQX01BUF9CQUQpIHsKKwkJCWhlYWQgPSB0YWlsKzE7CisJCQlnb3RvIHN0YXJ0X292ZXI7CisJCX0KKwkJaWYgKCFtYXBbdGFpbF0pIHsKKwkJCSsrbmZyZWU7CisJCQkrKyp0b3RhbF9mcmVlOworCQl9CisJCSsrdGFpbDsKKwkJaWYgKG5mcmVlID4gbWF4X2ZyZWUpIHsKKwkJCW1heF9zdGFydCA9IGhlYWQ7CisJCQltYXhfZnJlZSAgPSBuZnJlZTsKKwkJCWlmIChtYXhfZnJlZSA+PSBuX3BhZ2VzKQorCQkJCS8qIGRvbid0IG5lZWQgbW9yZSBmcmVlIHBhZ2VzLi4uIDotKSAqLworCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisgIG91dDoKKwlpZiAobWF4X2ZyZWUgPCAwKSB7CisJCXByaW50ayggS0VSTl9OT1RJQ0UgImdldF9zdHJhbV9yZWdpb246IFNULVJBTSB0b28gZnVsbCBvciBmcmFnbWVudGVkICIKKwkJCQkiLS0gY2FuJ3QgYWxsb2NhdGUgJWx1IHBhZ2VzXG4iLCBuX3BhZ2VzICk7CisJCXJldHVybiggMCApOworCX0KKworCSpyZWdpb25fZnJlZSA9IG1heF9mcmVlOworCXJldHVybiggbWF4X3N0YXJ0ICk7Cit9CisKKworLyogc2V0dXAgcGFyYW1ldGVycyBmcm9tIGNvbW1hbmQgbGluZSAqLwordm9pZCBfX2luaXQgc3RyYW1fc3dhcF9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cykKK3sKKwlpZiAoaW50c1swXSA+PSAxKQorCQltYXhfc3dhcF9zaXplID0gKChpbnRzWzFdIDwgMCA/IDAgOiBpbnRzWzFdKSAqIDEwMjQpICYgUEFHRV9NQVNLOworfQorCisMCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCQkJCQkJCQlTVC1SQU0gZGV2aWNlCQkJCQkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgcmVmY250OworCitzdGF0aWMgdm9pZCBkb19zdHJhbV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCisJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpKSAhPSBOVUxMKSB7CisJCXZvaWQgKnN0YXJ0ID0gc3dhcF9zdGFydCArIChyZXEtPnNlY3RvciA8PCA5KTsKKwkJdW5zaWduZWQgbG9uZyBsZW4gPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PCA5OworCQlpZiAoKHN0YXJ0ICsgbGVuKSA+IHN3YXBfZW5kKSB7CisJCQlwcmludGsoIEtFUk5fRVJSICJzdHJhbTogYmFkIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZTogIgorCQkJCQkiYmxvY2s9JWxkLCBjb3VudD0lZFxuIiwKKwkJCQkJcmVxLT5zZWN0b3IsCisJCQkJCXJlcS0+Y3VycmVudF9ucl9zZWN0b3JzICk7CisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVxLT5jbWQgPT0gUkVBRCkgeworCQkJbWVtY3B5KHJlcS0+YnVmZmVyLCBzdGFydCwgbGVuKTsKKyNpZmRlZiBET19QUk9DCisJCQlzdGF0X3N3YXBfcmVhZCArPSBOX1BBR0VTKGxlbik7CisjZW5kaWYKKwkJfQorCQllbHNlIHsKKwkJCW1lbWNweShzdGFydCwgcmVxLT5idWZmZXIsIGxlbik7CisjaWZkZWYgRE9fUFJPQworCQkJc3RhdF9zd2FwX3dyaXRlICs9IE5fUEFHRVMobGVuKTsKKyNlbmRpZgorCQl9CisJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgc3RyYW1fb3Blbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKQoreworCWlmIChmaWxwICE9IE1BR0lDX0ZJTEVfUCkgeworCQlwcmludGsoIEtFUk5fTk9USUNFICJPbmx5IGtlcm5lbCBjYW4gb3BlbiBTVC1SQU0gZGV2aWNlXG4iICk7CisJCXJldHVybiggLUVQRVJNICk7CisJfQorCWlmIChyZWZjbnQpCisJCXJldHVybiggLUVCVVNZICk7CisJKytyZWZjbnQ7CisJcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3RyYW1fcmVsZWFzZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKQoreworCWlmIChmaWxwICE9IE1BR0lDX0ZJTEVfUCkgeworCQlwcmludGsoIEtFUk5fTk9USUNFICJPbmx5IGtlcm5lbCBjYW4gY2xvc2UgU1QtUkFNIGRldmljZVxuIiApOworCQlyZXR1cm4oIC1FUEVSTSApOworCX0KKwlpZiAocmVmY250ID4gMCkKKwkJLS1yZWZjbnQ7CisJcmV0dXJuKCAwICk7Cit9CisKKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBzdHJhbV9mb3BzID0geworCS5vcGVuID0JCXN0cmFtX29wZW4sCisJLnJlbGVhc2UgPQlzdHJhbV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5kaXNrICpzdHJhbV9kaXNrOworc3RhdGljIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpzdHJhbV9xdWV1ZTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3RyYW1fbG9jayk7CisKK2ludCBfX2luaXQgc3RyYW1fZGV2aWNlX2luaXQodm9pZCkKK3sKKwlpZiAoIU1BQ0hfSVNfQVRBUkkpCisJCS8qIG5vIHBvaW50IGluIGluaXRpYWxpemluZyB0aGlzLCBJIGhvcGUgKi8KKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmICghbWF4X3N3YXBfc2l6ZSkKKwkJLyogc3dhcHBpbmcgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuIC1FTlhJTzsKKwlzdHJhbV9kaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIXN0cmFtX2Rpc2spCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHJlZ2lzdGVyX2Jsa2RldihTVFJBTV9NQUpPUiwgInN0cmFtIikpIHsKKwkJcHV0X2Rpc2soc3RyYW1fZGlzayk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJc3RyYW1fcXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19zdHJhbV9yZXF1ZXN0LCAmc3RyYW1fbG9jayk7CisJaWYgKCFzdHJhbV9xdWV1ZSkgeworCQl1bnJlZ2lzdGVyX2Jsa2RldihTVFJBTV9NQUpPUiwgInN0cmFtIik7CisJCXB1dF9kaXNrKHN0cmFtX2Rpc2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzdHJhbV9kaXNrLT5tYWpvciA9IFNUUkFNX01BSk9SOworCXN0cmFtX2Rpc2stPmZpcnN0X21pbm9yID0gU1RSQU1fTUlOT1I7CisJc3RyYW1fZGlzay0+Zm9wcyA9ICZzdHJhbV9mb3BzOworCXN0cmFtX2Rpc2stPnF1ZXVlID0gc3RyYW1fcXVldWU7CisJc3ByaW50ZihzdHJhbV9kaXNrLT5kaXNrX25hbWUsICJzdHJhbSIpOworCXNldF9jYXBhY2l0eShzdHJhbV9kaXNrLCAoc3dhcF9lbmQgLSBzd2FwX3N0YXJ0KS81MTIpOworCWFkZF9kaXNrKHN0cmFtX2Rpc2spOworCXJldHVybiAwOworfQorCisKKwwKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoJCQkJCQkJTWlzYyBVdGlsaXR5IEZ1bmN0aW9ucwkJCQkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIHJlc2VydmUgYSByYW5nZSBvZiBwYWdlcyAqLworc3RhdGljIHZvaWQgcmVzZXJ2ZV9yZWdpb24odm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlyZXNlcnZlX2Jvb3RtZW0gKHZpcnRfdG9fcGh5cyhzdGFydCksIGVuZCAtIHN0YXJ0KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TVFJBTV9TV0FQICovCisKKwwKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoJCQkJCQkJICBSZWdpb24gTWFuYWdlbWVudAkJCQkJCQkJKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIGluc2VydCBhIHJlZ2lvbiBpbnRvIHRoZSBhbGxvY2VkIGxpc3QgKHNvcnRlZCkgKi8KK3N0YXRpYyBCTE9DSyAqYWRkX3JlZ2lvbiggdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplICkKK3sKKwlCTE9DSyAqKnAsICpuID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciggaSA9IDA7IGkgPCBOX1NUQVRJQ19CTE9DS1M7ICsraSApIHsKKwkJaWYgKHN0YXRpY19ibG9ja3NbaV0uZmxhZ3MgJiBCTE9DS19GUkVFKSB7CisJCQluID0gJnN0YXRpY19ibG9ja3NbaV07CisJCQluLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIW4gJiYgbWVtX2luaXRfZG9uZSkgeworCQkvKiBpZiBzdGF0aWNzIGJsb2NrIHBvb2wgZXhoYXVzdGVkIGFuZCB3ZSBjYW4gY2FsbCBrbWFsbG9jKCkgYWxyZWFkeQorCQkgKiAoYWZ0ZXIgbWVtX2luaXQoKSksIHRyeSB0aGF0ICovCisJCW4gPSBrbWFsbG9jKCBzaXplb2YoQkxPQ0spLCBHRlBfS0VSTkVMICk7CisJCWlmIChuKQorCQkJbi0+ZmxhZ3MgPSBCTE9DS19LTUFMTE9DRUQ7CisJfQorCWlmICghbikgeworCQlwcmludGsoIEtFUk5fRVJSICJPdXQgb2YgbWVtb3J5IGZvciBTVC1SQU0gZGVzY3JpcHRvciBibG9ja3NcbiIgKTsKKwkJcmV0dXJuKCBOVUxMICk7CisJfQorCW4tPnN0YXJ0ID0gYWRkcjsKKwluLT5zaXplICA9IHNpemU7CisKKwlmb3IoIHAgPSAmYWxsb2NfbGlzdDsgKnA7IHAgPSAmKCgqcCktPm5leHQpICkKKwkJaWYgKCgqcCktPnN0YXJ0ID4gYWRkcikgYnJlYWs7CisJbi0+bmV4dCA9ICpwOworCSpwID0gbjsKKworCXJldHVybiggbiApOworfQorCisKKy8qIGZpbmQgYSByZWdpb24gKGJ5IHN0YXJ0IGFkZHIpIGluIHRoZSBhbGxvY2VkIGxpc3QgKi8KK3N0YXRpYyBCTE9DSyAqZmluZF9yZWdpb24oIHZvaWQgKmFkZHIgKQoreworCUJMT0NLICpwOworCisJZm9yKCBwID0gYWxsb2NfbGlzdDsgcDsgcCA9IHAtPm5leHQgKSB7CisJCWlmIChwLT5zdGFydCA9PSBhZGRyKQorCQkJcmV0dXJuKCBwICk7CisJCWlmIChwLT5zdGFydCA+IGFkZHIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuKCBOVUxMICk7Cit9CisKKworLyogcmVtb3ZlIGEgYmxvY2sgZnJvbSB0aGUgYWxsb2NlZCBsaXN0ICovCitzdGF0aWMgaW50IHJlbW92ZV9yZWdpb24oIEJMT0NLICpibG9jayApCit7CisJQkxPQ0sgKipwOworCisJZm9yKCBwID0gJmFsbG9jX2xpc3Q7ICpwOyBwID0gJigoKnApLT5uZXh0KSApCisJCWlmICgqcCA9PSBibG9jaykgYnJlYWs7CisJaWYgKCEqcCkKKwkJcmV0dXJuKCAwICk7CisKKwkqcCA9IGJsb2NrLT5uZXh0OworCWlmIChibG9jay0+ZmxhZ3MgJiBCTE9DS19LTUFMTE9DRUQpCisJCWtmcmVlKCBibG9jayApOworCWVsc2UKKwkJYmxvY2stPmZsYWdzIHw9IEJMT0NLX0ZSRUU7CisJcmV0dXJuKCAxICk7Cit9CisKKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCSAvcHJvYyBzdGF0aXN0aWNzIGZpbGUgc3R1ZmYJCQkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBET19QUk9DCisKKyNkZWZpbmUJUFJJTlRfUFJPQyhmbXQsYXJncy4uLikgbGVuICs9IHNwcmludGYoIGJ1ZitsZW4sIGZtdCwgIyNhcmdzICkKKworaW50IGdldF9zdHJhbV9saXN0KCBjaGFyICpidWYgKQoreworCWludCBsZW4gPSAwOworCUJMT0NLICpwOworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgKm1hcCA9IHN0cmFtX3N3YXBfaW5mby0+c3dhcF9tYXA7CisJdW5zaWduZWQgbG9uZyBtYXggPSBzdHJhbV9zd2FwX2luZm8tPm1heDsKKwl1bnNpZ25lZCBmcmVlID0gMCwgdXNlZCA9IDAsIHJzdmQgPSAwOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCWlmIChtYXhfc3dhcF9zaXplKSB7CisJCWZvciggaSA9IDE7IGkgPCBtYXg7ICsraSApIHsKKwkJCWlmICghbWFwW2ldKQorCQkJCSsrZnJlZTsKKwkJCWVsc2UgaWYgKG1hcFtpXSA9PSBTV0FQX01BUF9CQUQpCisJCQkJKytyc3ZkOworCQkJZWxzZQorCQkJCSsrdXNlZDsKKwkJfQorCQlQUklOVF9QUk9DKAorCQkJIlRvdGFsIFNULVJBTTogICAgICAlOHUga0JcbiIKKwkJCSJUb3RhbCBTVC1SQU0gc3dhcDogJThsdSBrQlxuIgorCQkJIkZyZWUgc3dhcDogICAgICAgICAlOHUga0JcbiIKKwkJCSJVc2VkIHN3YXA6ICAgICAgICAgJTh1IGtCXG4iCisJCQkiQWxsb2NhdGVkIHN3YXA6ICAgICU4dSBrQlxuIgorCQkJIlN3YXAgUmVhZHM6ICAgICAgICAlOHVcbiIKKwkJCSJTd2FwIFdyaXRlczogICAgICAgJTh1XG4iCisJCQkiU3dhcCBGb3JjZWQgUmVhZHM6ICU4dVxuIiwKKwkJCShzdHJhbV9lbmQgLSBzdHJhbV9zdGFydCkgPj4gMTAsCisJCQkobWF4LTEpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJCWZyZWUgPDwgKFBBR0VfU0hJRlQtMTApLAorCQkJdXNlZCA8PCAoUEFHRV9TSElGVC0xMCksCisJCQlyc3ZkIDw8IChQQUdFX1NISUZULTEwKSwKKwkJCXN0YXRfc3dhcF9yZWFkLAorCQkJc3RhdF9zd2FwX3dyaXRlLAorCQkJc3RhdF9zd2FwX2ZvcmNlICk7CisJfQorCWVsc2UgeworI2VuZGlmCisJCVBSSU5UX1BST0MoICJTVC1SQU0gc3dhcHBpbmcgZGlzYWJsZWRcbiIgKTsKKwkJUFJJTlRfUFJPQygiVG90YWwgU1QtUkFNOiAgICAgICU4dSBrQlxuIiwKKwkJCSAgIChzdHJhbV9lbmQgLSBzdHJhbV9zdGFydCkgPj4gMTApOworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisJfQorI2VuZGlmCisKKwlQUklOVF9QUk9DKCAiQWxsb2NhdGVkIHJlZ2lvbnM6XG4iICk7CisJZm9yKCBwID0gYWxsb2NfbGlzdDsgcDsgcCA9IHAtPm5leHQgKSB7CisJCWlmIChsZW4gKyA1MCA+PSBQQUdFX1NJWkUpCisJCQlicmVhazsKKwkJUFJJTlRfUFJPQygiMHglMDhseC0weCUwOGx4OiAlcyAoIiwKKwkJCSAgIHZpcnRfdG9fcGh5cyhwLT5zdGFydCksCisJCQkgICB2aXJ0X3RvX3BoeXMocC0+c3RhcnQrcC0+c2l6ZS0xKSwKKwkJCSAgIHAtPm93bmVyKTsKKwkJaWYgKHAtPmZsYWdzICYgQkxPQ0tfR0ZQKQorCQkJUFJJTlRfUFJPQyggInBhZ2UtYWxsb2NlZClcbiIgKTsKKwkJZWxzZSBpZiAocC0+ZmxhZ3MgJiBCTE9DS19JTlNXQVApCisJCQlQUklOVF9QUk9DKCAiaW4gc3dhcClcbiIgKTsKKwkJZWxzZQorCQkJUFJJTlRfUFJPQyggIj8/KVxuIiApOworCX0KKworCXJldHVybiggbGVuICk7Cit9CisKKyNlbmRpZgorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDQKKyAqICB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYyBiL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmN2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvYXRhcmkvdGltZS5jCisgKgorICogQXRhcmkgdGltZSBhbmQgcmVhbCB0aW1lIGNsb2NrIHN0dWZmCisgKgorICogQXNzZW1ibGVkIG9mIHBhcnRzIG9mIGZvcm1lciBhdGFyaS9jb25maWcuYyA5Ny0xMi0xOCBieSBSb21hbiBIb2RlaworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKworI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKwordm9pZCBfX2luaXQKK2F0YXJpX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp0aW1lcl9yb3V0aW5lKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisgICAgLyogc2V0IFRpbWVyIEMgZGF0YSBSZWdpc3RlciAqLworICAgIG1mcC50aW1fZHRfYyA9IElOVF9USUNLUzsKKyAgICAvKiBzdGFydCB0aW1lciBDLCBkaXYgPSAxOjEwMCAqLworICAgIG1mcC50aW1fY3RfY2QgPSAobWZwLnRpbV9jdF9jZCAmIDE1KSB8IDB4NjA7CisgICAgLyogaW5zdGFsbCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBNRlAgVGltZXIgQyAqLworICAgIHJlcXVlc3RfaXJxKElSUV9NRlBfVElNQywgdGltZXJfcm91dGluZSwgSVJRX1RZUEVfU0xPVywKKyAgICAgICAgICAgICAgICAidGltZXIiLCB0aW1lcl9yb3V0aW5lKTsKK30KKworLyogKythbmRyZWFzOiBnZXR0aW1lb2Zmc2V0IGZpeGVkIHRvIGNoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdCAqLworCisjZGVmaW5lIFRJQ0tfU0laRSAxMDAwMAorCisvKiBUaGlzIGlzIGFsd2F5cyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICAqLwordW5zaWduZWQgbG9uZyBhdGFyaV9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworICB1bnNpZ25lZCBsb25nIHRpY2tzLCBvZmZzZXQgPSAwOworCisgIC8qIHJlYWQgTUZQIHRpbWVyIEMgY3VycmVudCB2YWx1ZSAqLworICB0aWNrcyA9IG1mcC50aW1fZHRfYzsKKyAgLyogVGhlIHByb2JhYmlsaXR5IG9mIHVuZGVyZmxvdyBpcyBsZXNzIHRoYW4gMiUgKi8KKyAgaWYgKHRpY2tzID4gSU5UX1RJQ0tTIC0gSU5UX1RJQ0tTIC8gNTApCisgICAgLyogQ2hlY2sgZm9yIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0ICovCisgICAgaWYgKG1mcC5pbnRfcG5fYiAmICgxIDw8IDUpKQorICAgICAgb2Zmc2V0ID0gVElDS19TSVpFOworCisgIHRpY2tzID0gSU5UX1RJQ0tTIC0gdGlja3M7CisgIHRpY2tzID0gdGlja3MgKiAxMDAwMEwgLyBJTlRfVElDS1M7CisKKyAgcmV0dXJuIHRpY2tzICsgb2Zmc2V0OworfQorCisKK3N0YXRpYyB2b2lkIG1zdGVfcmVhZChzdHJ1Y3QgTVNURV9SVEMgKnZhbCkKK3sKKyNkZWZpbmUgQ09QWSh2KSB2YWwtPnY9KG1zdGVfcnRjLnYgJiAweGYpCisJZG8geworCQlDT1BZKHNlY19vbmVzKSA7IENPUFkoc2VjX3RlbnMpIDsgQ09QWShtaW5fb25lcykgOworCQlDT1BZKG1pbl90ZW5zKSA7IENPUFkoaHJfb25lcykgOyBDT1BZKGhyX3RlbnMpIDsKKwkJQ09QWSh3ZWVrZGF5KSA7IENPUFkoZGF5X29uZXMpIDsgQ09QWShkYXlfdGVucykgOworCQlDT1BZKG1vbl9vbmVzKSA7IENPUFkobW9uX3RlbnMpIDsgQ09QWSh5ZWFyX29uZXMpIDsKKwkJQ09QWSh5ZWFyX3RlbnMpIDsKKwkvKiBwcmV2ZW50IGZyb20gcmVhZGluZyB0aGUgY2xvY2sgd2hpbGUgaXQgY2hhbmdlZCAqLworCX0gd2hpbGUgKHZhbC0+c2VjX29uZXMgIT0gKG1zdGVfcnRjLnNlY19vbmVzICYgMHhmKSk7CisjdW5kZWYgQ09QWQorfQorCitzdGF0aWMgdm9pZCBtc3RlX3dyaXRlKHN0cnVjdCBNU1RFX1JUQyAqdmFsKQoreworI2RlZmluZSBDT1BZKHYpIG1zdGVfcnRjLnY9dmFsLT52CisJZG8geworCQlDT1BZKHNlY19vbmVzKSA7IENPUFkoc2VjX3RlbnMpIDsgQ09QWShtaW5fb25lcykgOworCQlDT1BZKG1pbl90ZW5zKSA7IENPUFkoaHJfb25lcykgOyBDT1BZKGhyX3RlbnMpIDsKKwkJQ09QWSh3ZWVrZGF5KSA7IENPUFkoZGF5X29uZXMpIDsgQ09QWShkYXlfdGVucykgOworCQlDT1BZKG1vbl9vbmVzKSA7IENPUFkobW9uX3RlbnMpIDsgQ09QWSh5ZWFyX29uZXMpIDsKKwkJQ09QWSh5ZWFyX3RlbnMpIDsKKwkvKiBwcmV2ZW50IGZyb20gd3JpdGluZyB0aGUgY2xvY2sgd2hpbGUgaXQgY2hhbmdlZCAqLworCX0gd2hpbGUgKHZhbC0+c2VjX29uZXMgIT0gKG1zdGVfcnRjLnNlY19vbmVzICYgMHhmKSk7CisjdW5kZWYgQ09QWQorfQorCisjZGVmaW5lCVJUQ19SRUFEKHJlZykJCQkJXAorICAgICh7CXVuc2lnbmVkIGNoYXIJX192YWw7CQkJXAorCQkodm9pZCkgYXRhcmlfd3JpdGViKHJlZywmdHRfcnRjLnJlZ3NlbCk7CVwKKwkJX192YWwgPSB0dF9ydGMuZGF0YTsJCVwKKwkJX192YWw7CQkJCVwKKwl9KQorCisjZGVmaW5lCVJUQ19XUklURShyZWcsdmFsKQkJCVwKKyAgICBkbyB7CQkJCQlcCisJCWF0YXJpX3dyaXRlYihyZWcsJnR0X3J0Yy5yZWdzZWwpOwlcCisJCXR0X3J0Yy5kYXRhID0gKHZhbCk7CQlcCisJfSB3aGlsZSgwKQorCisKKyNkZWZpbmUgSFdDTEtfUE9MTF9JTlRFUlZBTAk1CisKK2ludCBhdGFyaV9tc3RlX2h3Y2xrKCBpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCApCit7CisgICAgaW50IGhvdXIsIHllYXI7CisgICAgaW50IGhyMjQ9MDsKKyAgICBzdHJ1Y3QgTVNURV9SVEMgdmFsOworCisgICAgbXN0ZV9ydGMubW9kZT0obXN0ZV9ydGMubW9kZSB8IDEpOworICAgIGhyMjQ9bXN0ZV9ydGMubW9uX3RlbnMgJiAxOworICAgIG1zdGVfcnRjLm1vZGU9KG1zdGVfcnRjLm1vZGUgJiB+MSk7CisKKyAgICBpZiAob3ApIHsKKyAgICAgICAgLyogd3JpdGU6IHByZXBhcmUgdmFsdWVzICovCisKKyAgICAgICAgdmFsLnNlY19vbmVzID0gdC0+dG1fc2VjICUgMTA7CisgICAgICAgIHZhbC5zZWNfdGVucyA9IHQtPnRtX3NlYyAvIDEwOworICAgICAgICB2YWwubWluX29uZXMgPSB0LT50bV9taW4gJSAxMDsKKyAgICAgICAgdmFsLm1pbl90ZW5zID0gdC0+dG1fbWluIC8gMTA7CisgICAgICAgIGhvdXIgPSB0LT50bV9ob3VyOworICAgICAgICBpZiAoIWhyMjQpIHsKKwkgICAgaWYgKGhvdXIgPiAxMSkKKwkJaG91ciArPSAyMCAtIDEyOworCSAgICBpZiAoaG91ciA9PSAwIHx8IGhvdXIgPT0gMjApCisJCWhvdXIgKz0gMTI7CisgICAgICAgIH0KKyAgICAgICAgdmFsLmhyX29uZXMgPSBob3VyICUgMTA7CisgICAgICAgIHZhbC5ocl90ZW5zID0gaG91ciAvIDEwOworICAgICAgICB2YWwuZGF5X29uZXMgPSB0LT50bV9tZGF5ICUgMTA7CisgICAgICAgIHZhbC5kYXlfdGVucyA9IHQtPnRtX21kYXkgLyAxMDsKKyAgICAgICAgdmFsLm1vbl9vbmVzID0gKHQtPnRtX21vbisxKSAlIDEwOworICAgICAgICB2YWwubW9uX3RlbnMgPSAodC0+dG1fbW9uKzEpIC8gMTA7CisgICAgICAgIHllYXIgPSB0LT50bV95ZWFyIC0gODA7CisgICAgICAgIHZhbC55ZWFyX29uZXMgPSB5ZWFyICUgMTA7CisgICAgICAgIHZhbC55ZWFyX3RlbnMgPSB5ZWFyIC8gMTA7CisgICAgICAgIHZhbC53ZWVrZGF5ID0gdC0+dG1fd2RheTsKKyAgICAgICAgbXN0ZV93cml0ZSgmdmFsKTsKKyAgICAgICAgbXN0ZV9ydGMubW9kZT0obXN0ZV9ydGMubW9kZSB8IDEpOworICAgICAgICB2YWwueWVhcl9vbmVzID0gKHllYXIgJSA0KTsJLyogbGVhcCB5ZWFyIHJlZ2lzdGVyICovCisgICAgICAgIG1zdGVfcnRjLm1vZGU9KG1zdGVfcnRjLm1vZGUgJiB+MSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtc3RlX3JlYWQoJnZhbCk7CisgICAgICAgIHQtPnRtX3NlYyA9IHZhbC5zZWNfb25lcyArIHZhbC5zZWNfdGVucyAqIDEwOworICAgICAgICB0LT50bV9taW4gPSB2YWwubWluX29uZXMgKyB2YWwubWluX3RlbnMgKiAxMDsKKyAgICAgICAgaG91ciA9IHZhbC5ocl9vbmVzICsgdmFsLmhyX3RlbnMgKiAxMDsKKwlpZiAoIWhyMjQpIHsKKwkgICAgaWYgKGhvdXIgPT0gMTIgfHwgaG91ciA9PSAxMiArIDIwKQorCQlob3VyIC09IDEyOworCSAgICBpZiAoaG91ciA+PSAyMCkKKyAgICAgICAgICAgICAgICBob3VyICs9IDEyIC0gMjA7CisgICAgICAgIH0KKwl0LT50bV9ob3VyID0gaG91cjsKKwl0LT50bV9tZGF5ID0gdmFsLmRheV9vbmVzICsgdmFsLmRheV90ZW5zICogMTA7CisgICAgICAgIHQtPnRtX21vbiAgPSB2YWwubW9uX29uZXMgKyB2YWwubW9uX3RlbnMgKiAxMCAtIDE7CisgICAgICAgIHQtPnRtX3llYXIgPSB2YWwueWVhcl9vbmVzICsgdmFsLnllYXJfdGVucyAqIDEwICsgODA7CisgICAgICAgIHQtPnRtX3dkYXkgPSB2YWwud2Vla2RheTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdGFyaV90dF9od2NsayggaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQgKQoreworICAgIGludCBzZWM9MCwgbWluPTAsIGhvdXI9MCwgZGF5PTAsIG1vbj0wLCB5ZWFyPTAsIHdkYXk9MDsKKyAgICB1bnNpZ25lZCBsb25nCWZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIJY3RybDsKKyAgICBpbnQgcG0gPSAwOworCisgICAgY3RybCA9IFJUQ19SRUFEKFJUQ19DT05UUk9MKTsgLyogY29udHJvbCByZWdpc3RlcnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5kZXBlbmRlbnQgZnJvbSB0aGUgVUlQICovCisKKyAgICBpZiAob3ApIHsKKyAgICAgICAgLyogd3JpdGU6IHByZXBhcmUgdmFsdWVzICovCisKKyAgICAgICAgc2VjICA9IHQtPnRtX3NlYzsKKyAgICAgICAgbWluICA9IHQtPnRtX21pbjsKKyAgICAgICAgaG91ciA9IHQtPnRtX2hvdXI7CisgICAgICAgIGRheSAgPSB0LT50bV9tZGF5OworICAgICAgICBtb24gID0gdC0+dG1fbW9uICsgMTsKKyAgICAgICAgeWVhciA9IHQtPnRtX3llYXIgLSBhdGFyaV9ydGNfeWVhcl9vZmZzZXQ7CisgICAgICAgIHdkYXkgPSB0LT50bV93ZGF5ICsgKHQtPnRtX3dkYXkgPj0gMCk7CisKKyAgICAgICAgaWYgKCEoY3RybCAmIFJUQ18yNEgpKSB7CisJICAgIGlmIChob3VyID4gMTEpIHsKKwkJcG0gPSAweDgwOworCQlpZiAoaG91ciAhPSAxMikKKwkJICAgIGhvdXIgLT0gMTI7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaG91ciA9PSAwKQorCQlob3VyID0gMTI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkpIHsKKyAgICAgICAgICAgIEJJTl9UT19CQ0Qoc2VjKTsKKyAgICAgICAgICAgIEJJTl9UT19CQ0QobWluKTsKKyAgICAgICAgICAgIEJJTl9UT19CQ0QoaG91cik7CisgICAgICAgICAgICBCSU5fVE9fQkNEKGRheSk7CisgICAgICAgICAgICBCSU5fVE9fQkNEKG1vbik7CisgICAgICAgICAgICBCSU5fVE9fQkNEKHllYXIpOworICAgICAgICAgICAgaWYgKHdkYXkgPj0gMCkgQklOX1RPX0JDRCh3ZGF5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFJlYWRpbmcvd3JpdGluZyB0aGUgY2xvY2sgcmVnaXN0ZXJzIGlzIGEgYml0IGNyaXRpY2FsIGR1ZSB0bworICAgICAqIHRoZSByZWd1bGFyIHVwZGF0ZSBjeWNsZSBvZiB0aGUgUlRDLiBXaGlsZSBhbiB1cGRhdGUgaXMgaW4KKyAgICAgKiBwcm9ncmVzcywgcmVnaXN0ZXJzIDAuLjkgc2hvdWxkbid0IGJlIHRvdWNoZWQuCisgICAgICogVGhlIHByb2JsZW0gaXMgc29sdmVkIGxpa2UgdGhhdDogSWYgYW4gdXBkYXRlIGlzIGN1cnJlbnRseSBpbgorICAgICAqIHByb2dyZXNzICh0aGUgVUlQIGJpdCBpcyBzZXQpLCB0aGUgcHJvY2VzcyBzbGVlcHMgZm9yIGEgd2hpbGUKKyAgICAgKiAoNTBtcykuIFRoaXMgcmVhbGx5IHNob3VsZCBiZSBlbm91Z2gsIHNpbmNlIHRoZSB1cGRhdGUgY3ljbGUKKyAgICAgKiBub3JtYWxseSBuZWVkcyAyIG1zLgorICAgICAqIElmIHRoZSBVSVAgYml0IHJlYWRzIGFzIDAsIHdlIGhhdmUgYXQgbGVhc3QgMjQ0IHVzZWNzIHVudGlsIHRoZQorICAgICAqIHVwZGF0ZSBzdGFydHMuIFRoaXMgc2hvdWxkIGJlIGVub3VnaC4uLiBCdXQgdG8gYmUgc3VyZSwKKyAgICAgKiBhZGRpdGlvbmFsbHkgdGhlIFJUQ19TRVQgYml0IGlzIHNldCB0byBwcmV2ZW50IGFuIHVwZGF0ZSBjeWNsZS4KKyAgICAgKi8KKworICAgIHdoaWxlKCBSVENfUkVBRChSVENfRlJFUV9TRUxFQ1QpICYgUlRDX1VJUCApIHsKKyAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisgICAgICAgIHNjaGVkdWxlX3RpbWVvdXQoSFdDTEtfUE9MTF9JTlRFUlZBTCk7CisgICAgfQorCisgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworICAgIFJUQ19XUklURSggUlRDX0NPTlRST0wsIGN0cmwgfCBSVENfU0VUICk7CisgICAgaWYgKCFvcCkgeworICAgICAgICBzZWMgID0gUlRDX1JFQUQoIFJUQ19TRUNPTkRTICk7CisgICAgICAgIG1pbiAgPSBSVENfUkVBRCggUlRDX01JTlVURVMgKTsKKyAgICAgICAgaG91ciA9IFJUQ19SRUFEKCBSVENfSE9VUlMgKTsKKyAgICAgICAgZGF5ICA9IFJUQ19SRUFEKCBSVENfREFZX09GX01PTlRIICk7CisgICAgICAgIG1vbiAgPSBSVENfUkVBRCggUlRDX01PTlRIICk7CisgICAgICAgIHllYXIgPSBSVENfUkVBRCggUlRDX1lFQVIgKTsKKyAgICAgICAgd2RheSA9IFJUQ19SRUFEKCBSVENfREFZX09GX1dFRUsgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFJUQ19XUklURSggUlRDX1NFQ09ORFMsIHNlYyApOworICAgICAgICBSVENfV1JJVEUoIFJUQ19NSU5VVEVTLCBtaW4gKTsKKyAgICAgICAgUlRDX1dSSVRFKCBSVENfSE9VUlMsIGhvdXIgKyBwbSk7CisgICAgICAgIFJUQ19XUklURSggUlRDX0RBWV9PRl9NT05USCwgZGF5ICk7CisgICAgICAgIFJUQ19XUklURSggUlRDX01PTlRILCBtb24gKTsKKyAgICAgICAgUlRDX1dSSVRFKCBSVENfWUVBUiwgeWVhciApOworICAgICAgICBpZiAod2RheSA+PSAwKSBSVENfV1JJVEUoIFJUQ19EQVlfT0ZfV0VFSywgd2RheSApOworICAgIH0KKyAgICBSVENfV1JJVEUoIFJUQ19DT05UUk9MLCBjdHJsICYgflJUQ19TRVQgKTsKKyAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKyAgICBpZiAoIW9wKSB7CisgICAgICAgIC8qIHJlYWQ6IGFkanVzdCB2YWx1ZXMgKi8KKworICAgICAgICBpZiAoaG91ciAmIDB4ODApIHsKKwkgICAgaG91ciAmPSB+MHg4MDsKKwkgICAgcG0gPSAxOworCX0KKworCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSkgeworICAgICAgICAgICAgQkNEX1RPX0JJTihzZWMpOworICAgICAgICAgICAgQkNEX1RPX0JJTihtaW4pOworICAgICAgICAgICAgQkNEX1RPX0JJTihob3VyKTsKKyAgICAgICAgICAgIEJDRF9UT19CSU4oZGF5KTsKKyAgICAgICAgICAgIEJDRF9UT19CSU4obW9uKTsKKyAgICAgICAgICAgIEJDRF9UT19CSU4oeWVhcik7CisgICAgICAgICAgICBCQ0RfVE9fQklOKHdkYXkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY3RybCAmIFJUQ18yNEgpKSB7CisJICAgIGlmICghcG0gJiYgaG91ciA9PSAxMikKKwkJaG91ciA9IDA7CisJICAgIGVsc2UgaWYgKHBtICYmIGhvdXIgIT0gMTIpCisJCWhvdXIgKz0gMTI7CisgICAgICAgIH0KKworICAgICAgICB0LT50bV9zZWMgID0gc2VjOworICAgICAgICB0LT50bV9taW4gID0gbWluOworICAgICAgICB0LT50bV9ob3VyID0gaG91cjsKKyAgICAgICAgdC0+dG1fbWRheSA9IGRheTsKKyAgICAgICAgdC0+dG1fbW9uICA9IG1vbiAtIDE7CisgICAgICAgIHQtPnRtX3llYXIgPSB5ZWFyICsgYXRhcmlfcnRjX3llYXJfb2Zmc2V0OworICAgICAgICB0LT50bV93ZGF5ID0gd2RheSAtIDE7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKworaW50IGF0YXJpX21zdGVfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKyAgICBzaG9ydCByZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjAsIHJlYWxfbWludXRlcyA9IChub3d0aW1lIC8gNjApICUgNjA7CisgICAgc3RydWN0IE1TVEVfUlRDIHZhbDsKKyAgICB1bnNpZ25lZCBjaGFyIHJ0Y19taW51dGVzOworCisgICAgbXN0ZV9yZWFkKCZ2YWwpOworICAgIHJ0Y19taW51dGVzPSB2YWwubWluX29uZXMgKyB2YWwubWluX3RlbnMgKiAxMDsKKyAgICBpZiAoKHJ0Y19taW51dGVzIDwgcmVhbF9taW51dGVzCisgICAgICAgICA/IHJlYWxfbWludXRlcyAtIHJ0Y19taW51dGVzCisgICAgICAgICA6IHJ0Y19taW51dGVzIC0gcmVhbF9taW51dGVzKSA8IDMwKQorICAgIHsKKyAgICAgICAgdmFsLnNlY19vbmVzID0gcmVhbF9zZWNvbmRzICUgMTA7CisgICAgICAgIHZhbC5zZWNfdGVucyA9IHJlYWxfc2Vjb25kcyAvIDEwOworICAgICAgICB2YWwubWluX29uZXMgPSByZWFsX21pbnV0ZXMgJSAxMDsKKyAgICAgICAgdmFsLm1pbl90ZW5zID0gcmVhbF9taW51dGVzIC8gMTA7CisgICAgICAgIG1zdGVfd3JpdGUoJnZhbCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiAwOworfQorCitpbnQgYXRhcmlfdHRfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKyAgICBzaG9ydCByZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjAsIHJlYWxfbWludXRlcyA9IChub3d0aW1lIC8gNjApICUgNjA7CisgICAgdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3QsIHJ0Y19taW51dGVzOworCisgICAgc2F2ZV9jb250cm9sID0gUlRDX1JFQUQgKFJUQ19DT05UUk9MKTsgLyogdGVsbCB0aGUgY2xvY2sgaXQncyBiZWluZyBzZXQgKi8KKyAgICBSVENfV1JJVEUgKFJUQ19DT05UUk9MLCBzYXZlX2NvbnRyb2wgfCBSVENfU0VUKTsKKworICAgIHNhdmVfZnJlcV9zZWxlY3QgPSBSVENfUkVBRCAoUlRDX0ZSRVFfU0VMRUNUKTsgLyogc3RvcCBhbmQgcmVzZXQgcHJlc2NhbGVyICovCisgICAgUlRDX1dSSVRFIChSVENfRlJFUV9TRUxFQ1QsIHNhdmVfZnJlcV9zZWxlY3QgfCBSVENfRElWX1JFU0VUMik7CisKKyAgICBydGNfbWludXRlcyA9IFJUQ19SRUFEIChSVENfTUlOVVRFUyk7CisgICAgaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkpCisgICAgICAgIEJDRF9UT19CSU4gKHJ0Y19taW51dGVzKTsKKworICAgIC8qIFNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsIGRvbid0IGludGVyZmVyZQorICAgICAgIHdpdGggaG91ciBvdmVyZmxvdy4gIFRoaXMgYXZvaWRzIG1lc3Npbmcgd2l0aCB1bmtub3duIHRpbWUgem9uZXMKKyAgICAgICBidXQgcmVxdWlyZXMgeW91ciBSVEMgbm90IHRvIGJlIG9mZiBieSBtb3JlIHRoYW4gMzAgbWludXRlcy4gICovCisgICAgaWYgKChydGNfbWludXRlcyA8IHJlYWxfbWludXRlcworICAgICAgICAgPyByZWFsX21pbnV0ZXMgLSBydGNfbWludXRlcworICAgICAgICAgOiBydGNfbWludXRlcyAtIHJlYWxfbWludXRlcykgPCAzMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBCSU5fVE9fQkNEIChyZWFsX3NlY29uZHMpOworICAgICAgICAgICAgICAgICAgICBCSU5fVE9fQkNEIChyZWFsX21pbnV0ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJUQ19XUklURSAoUlRDX1NFQ09ORFMsIHJlYWxfc2Vjb25kcyk7CisgICAgICAgICAgICBSVENfV1JJVEUgKFJUQ19NSU5VVEVTLCByZWFsX21pbnV0ZXMpOworICAgICAgICB9CisgICAgZWxzZQorICAgICAgICByZXR2YWwgPSAtMTsKKworICAgIFJUQ19XUklURSAoUlRDX0ZSRVFfU0VMRUNULCBzYXZlX2ZyZXFfc2VsZWN0KTsKKyAgICBSVENfV1JJVEUgKFJUQ19DT05UUk9MLCBzYXZlX2NvbnRyb2wpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDQKKyAqICB0YWItd2lkdGg6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL01ha2VmaWxlIGIvYXJjaC9tNjhrL2J2bWU2MDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDhlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYnZtZTYwMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvYnZtZTYwMDAgc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0gY29uZmlnLm8gYnZtZWludHMubyBydGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL2J2bWVpbnRzLmMgYi9hcmNoL202OGsvYnZtZTYwMDAvYnZtZWludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOThhOGRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2J2bWU2MDAwL2J2bWVpbnRzLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBhcmNoL202OGsvYnZtZTYwMDAvYnZtZWludHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEhpcnN0IFtyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWtdCisgKgorICogYmFzZWQgb24gYW1paW50cy5jIC0tIEFtaWdhIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCitzdGF0aWMgaXJxcmV0dXJuX3QgYnZtZTYwMDBfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworCisvKgorICogVGhpcyBzaG91bGQgaWRlYWxseSBiZSA0IGVsZW1lbnRzIG9ubHksIGZvciBzcGVlZC4KKyAqLworCitzdGF0aWMgc3RydWN0IHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKKwl1bnNpZ25lZAljb3VudDsKK30gaXJxX3RhYlsyNTZdOworCisvKgorICogdm9pZCBidm1lNjAwMF9pbml0X0lSUSAodm9pZCkKKyAqCisgKiBQYXJhbWV0ZXJzOglOb25lCisgKgorICogUmV0dXJuczoJTm90aGluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCisgKiB0aGUgYnZtZTYwMDAgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgorICovCisKK3ZvaWQgYnZtZTYwMDBfaW5pdF9JUlEgKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaXJxX3RhYltpXS5oYW5kbGVyID0gYnZtZTYwMDBfZGVmaGFuZDsKKwkJaXJxX3RhYltpXS5mbGFncyA9IElSUV9GTEdfU1REOworCQlpcnFfdGFiW2ldLmRldl9pZCA9IE5VTEw7CisJCWlycV90YWJbaV0uZGV2bmFtZSA9IE5VTEw7CisJCWlycV90YWJbaV0uY291bnQgPSAwOworCX0KK30KKworaW50IGJ2bWU2MDAwX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxID4gMjU1KSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWQgZnJvbSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKyNpZiAwCisJLyogTm90aGluZyBzcGVjaWFsIGFib3V0IGF1dG8tdmVjdG9yZWQgZGV2aWNlcyBmb3IgdGhlIEJWTUU2MDAwLAorCSAqIGJ1dCB0cmVhdCBpdCBzcGVjaWFsbHkgdG8gYXZvaWQgY2hhbmdlcyBlbHNld2hlcmUuCisJICovCisKKwlpZiAoaXJxID49IFZFQ19JTlQxICYmIGlycSA8PSBWRUNfSU5UNykKKwkJcmV0dXJuIGNwdV9yZXF1ZXN0X2lycShpcnEgLSBWRUNfU1BVUiwgaGFuZGxlciwgZmxhZ3MsCisJCQkJCQlkZXZuYW1lLCBkZXZfaWQpOworI2VuZGlmCisJaWYgKCEoaXJxX3RhYltpcnFdLmZsYWdzICYgSVJRX0ZMR19TVEQpKSB7CisJCWlmIChpcnFfdGFiW2lycV0uZmxhZ3MgJiBJUlFfRkxHX0xPQ0spIHsKKwkJCXByaW50aygiJXM6IElSUSAlZCBmcm9tICVzIGlzIG5vdCByZXBsYWNlYWJsZVxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBJUlFfRkxHX1JFUExBQ0UpIHsKKwkJCXByaW50aygiJXM6ICVzIGNhbid0IHJlcGxhY2UgSVJRICVkIGZyb20gJXNcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBkZXZuYW1lLCBpcnEsIGlycV90YWJbaXJxXS5kZXZuYW1lKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaXJxX3RhYltpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCWlycV90YWJbaXJxXS5mbGFncyAgID0gZmxhZ3M7CisJaXJxX3RhYltpcnFdLmRldl9pZCAgPSBkZXZfaWQ7CisJaXJxX3RhYltpcnFdLmRldm5hbWUgPSBkZXZuYW1lOworCXJldHVybiAwOworfQorCit2b2lkIGJ2bWU2MDAwX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxID4gMjU1KSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuOworCX0KKyNpZiAwCisJaWYgKGlycSA+PSBWRUNfSU5UMSAmJiBpcnEgPD0gVkVDX0lOVDcpIHsKKwkJY3B1X2ZyZWVfaXJxKGlycSAtIFZFQ19TUFVSLCBkZXZfaWQpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKGlycV90YWJbaXJxXS5kZXZfaWQgIT0gZGV2X2lkKQorCQlwcmludGsoIiVzOiBSZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycV0uZGV2bmFtZSk7CisKKwlpcnFfdGFiW2lycV0uaGFuZGxlciA9IGJ2bWU2MDAwX2RlZmhhbmQ7CisJaXJxX3RhYltpcnFdLmZsYWdzICAgPSBJUlFfRkxHX1NURDsKKwlpcnFfdGFiW2lycV0uZGV2X2lkICA9IE5VTEw7CisJaXJxX3RhYltpcnFdLmRldm5hbWUgPSBOVUxMOworfQorCitpcnFyZXR1cm5fdCBidm1lNjAwMF9wcm9jZXNzX2ludCAodW5zaWduZWQgbG9uZyB2ZWMsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpZiAodmVjID4gMjU1KSB7CisJCXByaW50ayAoImJ2bWU2MDAwX3Byb2Nlc3NfaW50OiBJbGxlZ2FsIHZlY3RvciAlbGQiLCB2ZWMpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIHsKKwkJaXJxX3RhYlt2ZWNdLmNvdW50Kys7CisJCWlycV90YWJbdmVjXS5oYW5kbGVyKHZlYywgaXJxX3RhYlt2ZWNdLmRldl9pZCwgZnApOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorfQorCitpbnQgc2hvd19idm1lNjAwMF9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpZiAoaXJxX3RhYltpXS5jb3VudCkKKwkJCXNlcV9wcmludGYocCwgIlZlYyAweCUwMng6ICU4ZCAgJXNcbiIsCisJCQkgICAgaSwgaXJxX3RhYltpXS5jb3VudCwKKwkJCSAgICBpcnFfdGFiW2ldLmRldm5hbWUgPyBpcnFfdGFiW2ldLmRldm5hbWUgOiAiZnJlZSIpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgYnZtZTYwMDBfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJcHJpbnRrICgiVW5rbm93biBpbnRlcnJ1cHQgMHglMDJ4XG4iLCBpcnEpOworCXJldHVybiBJUlFfTk9ORTsKK30KKwordm9pZCBidm1lNjAwMF9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCisKK3ZvaWQgYnZtZTYwMDBfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYyBiL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmZjODRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogIGFyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTcgUmljaGFyZCBIaXJzdCBbcmljaGFyZEBzbGVlcGllLmRlbW9uLmNvLnVrXQorICoKKyAqIEJhc2VkIG9uOgorICoKKyAqICBsaW51eC9hbWlnYS9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTMgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9idm1lNjAwMGh3Lmg+CisKK2V4dGVybiBpcnFyZXR1cm5fdCBidm1lNjAwMF9wcm9jZXNzX2ludCAoaW50IGxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBidm1lNjAwMF9pbml0X0lSUSAodm9pZCk7CitleHRlcm4gdm9pZCBidm1lNjAwMF9mcmVlX2lycSAodW5zaWduZWQgaW50LCB2b2lkICopOworZXh0ZXJuIGludCAgc2hvd19idm1lNjAwMF9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgYnZtZTYwMDBfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGJ2bWU2MDAwX2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgYnZtZTYwMDBfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKK3N0YXRpYyBpbnQgIGJ2bWU2MDAwX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gaW50ICBidm1lNjAwMF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIGJ2bWU2MDAwX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnZtZTYwMDBfZ2V0dGltZW9mZnNldCAodm9pZCk7CitleHRlcm4gaW50IGJ2bWU2MDAwX2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgYnZtZTYwMDBfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgYnZtZTYwMDBfcmVzZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgYnZtZTYwMDBfd2FpdGJ1dCh2b2lkKTsKK3ZvaWQgYnZtZTYwMDBfc2V0X3ZlY3RvcnMgKHZvaWQpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciBiY2QyYmluICh1bnNpZ25lZCBjaGFyIGIpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgYmluMmJjZCAodW5zaWduZWQgY2hhciBiKTsKKworLyogU2F2ZSB0aWNrIGhhbmRsZXIgcm91dGluZSBwb2ludGVyLCB3aWxsIHBvaW50IHRvIGRvX3RpbWVyKCkgaW4KKyAqIGtlcm5lbC9zY2hlZC5jLCBjYWxsZWQgdmlhIGJ2bWU2MDAwX3Byb2Nlc3NfaW50KCkgKi8KKworc3RhdGljIGlycXJldHVybl90ICgqdGlja19oYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKworaW50IGJ2bWU2MDAwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKmJpKQoreworCWlmIChiaS0+dGFnID09IEJJX1ZNRV9UWVBFKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCit2b2lkIGJ2bWU2MDAwX3Jlc2V0KHZvaWQpCit7CisJdm9sYXRpbGUgUGl0UmVnc1B0ciBwaXQgPSAoUGl0UmVnc1B0cilCVk1FX1BJVF9CQVNFOworCisJcHJpbnRrICgiXHJcblxuQ2FsbGVkIGJ2bWU2MDAwX3Jlc2V0XHJcbiIKKwkJCSJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHIiKTsKKwkvKiBUaGUgc3RyaW5nIG9mIHJldHVybnMgaXMgdG8gZGVsYXkgdGhlIHJlc2V0IHVudGlsIHRoZSB3aG9sZQorCSAqIG1lc3NhZ2UgaXMgb3V0cHV0LiAqLworCS8qIEVuYWJsZSB0aGUgd2F0Y2hkb2csIHZpYSBQSVQgcG9ydCBDIGJpdCA0ICovCisKKwlwaXQtPnBjZGRyCXw9IDB4MTA7CS8qIFdET0cgZW5hYmxlICovCisKKwl3aGlsZSgxKQorCQk7Cit9CisKK3N0YXRpYyB2b2lkIGJ2bWU2MDAwX2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKyAgICBzcHJpbnRmKG1vZGVsLCAiQlZNRSVkMDAwIiwgbTY4a19jcHV0eXBlID09IENQVV82ODA2MCA/IDYgOiA0KTsKK30KKworCisvKiBObyBoYXJkd2FyZSBvcHRpb25zIG9uIEJWTUU2MDAwPyAqLworCitzdGF0aWMgaW50IGJ2bWU2MDAwX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKK3sKKyAgICAqYnVmZmVyID0gJ1wwJzsKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCBjb25maWdfYnZtZTYwMDAodm9pZCkKK3sKKyAgICB2b2xhdGlsZSBQaXRSZWdzUHRyIHBpdCA9IChQaXRSZWdzUHRyKUJWTUVfUElUX0JBU0U7CisKKyAgICAvKiBCb2FyZCB0eXBlIGlzIG9ubHkgc2V0IGJ5IG5ld2VyIHZlcnNpb25zIG9mIHZtZWxpbG8vdGZ0cGxpbG8gKi8KKyAgICBpZiAoIXZtZV9icmR0eXBlKSB7CisJaWYgKG02OGtfY3B1dHlwZSA9PSBDUFVfNjgwNjApCisJICAgIHZtZV9icmR0eXBlID0gVk1FX1RZUEVfQlZNRTYwMDA7CisJZWxzZQorCSAgICB2bWVfYnJkdHlwZSA9IFZNRV9UWVBFX0JWTUU0MDAwOworICAgIH0KKyNpZiAwCisgICAgLyogQ2FsbCBidm1lNjAwMF9zZXRfdmVjdG9ycygpIHNvIEFCT1JUIHdpbGwgd29yaywgYWxvbmcgd2l0aCBCVk1CdWcKKyAgICAgKiBkZWJ1Z2dlci4gIE5vdGUgdHJhcF9pbml0KCkgd2lsbCBzcGxhdCB0aGUgYWJvcnQgdmVjdG9yLCBidXQKKyAgICAgKiBidm1lNjAwMF9pbml0X0lSUSgpIHdpbGwgcHV0IGl0IGJhY2sgYWdhaW4uICBIb3BlZnVsbHkuICovCisKKyAgICBidm1lNjAwMF9zZXRfdmVjdG9ycygpOworI2VuZGlmCisKKyAgICBtYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisgICAgbWFjaF9zY2hlZF9pbml0ICAgICAgPSBidm1lNjAwMF9zY2hlZF9pbml0OworICAgIG1hY2hfaW5pdF9JUlEgICAgICAgID0gYnZtZTYwMDBfaW5pdF9JUlE7CisgICAgbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBidm1lNjAwMF9nZXR0aW1lb2Zmc2V0OworICAgIG1hY2hfaHdjbGsgICAgICAgICAgID0gYnZtZTYwMDBfaHdjbGs7CisgICAgbWFjaF9zZXRfY2xvY2tfbW1zcwkgPSBidm1lNjAwMF9zZXRfY2xvY2tfbW1zczsKKyAgICBtYWNoX3Jlc2V0CQkgPSBidm1lNjAwMF9yZXNldDsKKyAgICBtYWNoX2ZyZWVfaXJxCSA9IGJ2bWU2MDAwX2ZyZWVfaXJxOworICAgIG1hY2hfcHJvY2Vzc19pbnQJID0gYnZtZTYwMDBfcHJvY2Vzc19pbnQ7CisgICAgbWFjaF9nZXRfaXJxX2xpc3QJID0gc2hvd19idm1lNjAwMF9pbnRlcnJ1cHRzOworICAgIG1hY2hfcmVxdWVzdF9pcnEJID0gYnZtZTYwMDBfcmVxdWVzdF9pcnE7CisgICAgZW5hYmxlX2lycQkJID0gYnZtZTYwMDBfZW5hYmxlX2lycTsKKyAgICBkaXNhYmxlX2lycSAgICAgICAgICA9IGJ2bWU2MDAwX2Rpc2FibGVfaXJxOworICAgIG1hY2hfZ2V0X21vZGVsICAgICAgID0gYnZtZTYwMDBfZ2V0X21vZGVsOworICAgIG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBidm1lNjAwMF9nZXRfaGFyZHdhcmVfbGlzdDsKKworICAgIHByaW50ayAoIkJvYXJkIGlzICVzY29uZmlndXJlZCBhcyBhIFN5c3RlbSBDb250cm9sbGVyXG4iLAorCQkqY29uZmlnX3JlZ19wdHIgJiBCVk1FX0NPTkZJR19TVzEgPyAiIiA6ICJub3QgIik7CisKKyAgICAvKiBOb3cgZG8gdGhlIFBJVCBjb25maWd1cmF0aW9uICovCisKKyAgICBwaXQtPnBnY3IJPSAweDAwOwkvKiBVbmlkaXJlY3Rpb25hbCA4IGJpdCwgbm8gaGFuZHNoYWtlIGZvciBub3cgKi8KKyAgICBwaXQtPnBzcnIJPSAweDE4OwkvKiBQSUFDSyBhbmQgUElSUSBmdWNudGlvbnMgZW5hYmxlZCAqLworICAgIHBpdC0+cGFjcgk9IDB4MDA7CS8qIFN1YiBNb2RlIDAwLCBIMiBpL3AsIG5vIERNQSAqLworICAgIHBpdC0+cGFkcgk9IDB4MDA7CS8qIEp1c3QgdG8gYmUgdGlkeSEgKi8KKyAgICBwaXQtPnBhZGRyCT0gMHgwMDsJLyogQWxsIGlucHV0cyBmb3Igbm93IChzYWZlc3QpICovCisgICAgcGl0LT5wYmNyCT0gMHg4MDsJLyogU3ViIE1vZGUgMXgsIEg0IGkvcCwgbm8gRE1BICovCisgICAgcGl0LT5wYmRyCT0gMHhiYyB8ICgqY29uZmlnX3JlZ19wdHIgJiBCVk1FX0NPTkZJR19TVzEgPyAwIDogMHg0MCk7CisJCQkvKiBQUkksIFNZU0NPTj8sIExldmVsMywgU0NDIGNsa3MgZnJvbSB4dGFsICovCisgICAgcGl0LT5wYmRkcgk9IDB4ZjM7CS8qIE1vc3RseSBvdXRwdXRzICovCisgICAgcGl0LT5wY2RyCT0gMHgwMTsJLyogUEEgdHJhbnNjZWl2ZXIgZGlzYWJsZWQgKi8KKyAgICBwaXQtPnBjZGRyCT0gMHgwMzsJLyogV0RPRyBkaXNhYmxlICovCisKKyAgICAvKiBEaXNhYmxlIHNub29waW5nIGZvciBFdGhlcm5ldCBhbmQgVk1FIGFjY2Vzc2VzICovCisKKyAgICBidm1lX2Fjcl9hZGRyY3RsID0gMDsKK30KKworCitpcnFyZXR1cm5fdCBidm1lNjAwMF9hYm9ydF9pbnQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworICAgICAgICB1bnNpZ25lZCBsb25nICpuZXcgPSAodW5zaWduZWQgbG9uZyAqKXZlY3RvcnM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKm9sZCA9ICh1bnNpZ25lZCBsb25nICopMHhmODAwMDAwMDsKKworICAgICAgICAvKiBXYWl0IGZvciBidXR0b24gcmVsZWFzZSAqLworICAgICAgICB3aGlsZSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9MT0NBTF9JUlFfU1RBVCAmIEJWTUVfQUJPUlRfU1RBVFVTKQorICAgICAgICAgICAgICAgIDsKKworICAgICAgICAqKG5ldys0KSA9ICoob2xkKzQpOyAgICAgICAgICAgIC8qIElsbGVnYWwgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAgKihuZXcrOSkgPSAqKG9sZCs5KTsgICAgICAgICAgICAvKiBUcmFjZSAqLworICAgICAgICAqKG5ldys0NykgPSAqKG9sZCs0Nyk7ICAgICAgICAgIC8qIFRyYXAgIzE1ICovCisgICAgICAgICoobmV3KzB4MWYpID0gKihvbGQrMHgxZik7ICAgICAgLyogQUJPUlQgc3dpdGNoICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBidm1lNjAwMF90aW1lcl9pbnQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworICAgIHZvbGF0aWxlIFJ0Y1B0cl90IHJ0YyA9IChSdGNQdHJfdClCVk1FX1JUQ19CQVNFOworICAgIHVuc2lnbmVkIGNoYXIgbXNyID0gcnRjLT5tc3IgJiAweGMwOworCisgICAgcnRjLT5tc3IgPSBtc3IgfCAweDIwOwkJLyogQWNrIHRoZSBpbnRlcnJ1cHQgKi8KKworICAgIHJldHVybiB0aWNrX2hhbmRsZXIoaXJxLCBkZXZfaWQsIGZwKTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgUlRDIHRpbWVyIDEgdG8gbW9kZSAyLCBzbyBUMSBvdXRwdXQgdG9nZ2xlcyBldmVyeSA1bXMKKyAqICg0MDAwMCB4IDEyNW5zKS4gIEl0IHdpbGwgaW50ZXJydXB0IGV2ZXJ5IDEwbXMsIHdoZW4gVDEgZ29lcyBsb3cuCisgKiBTbywgd2hlbiByZWFkaW5nIHRoZSBlbGFwc2VkIHRpbWUsIHlvdSBzaG91bGQgcmVhZCB0aW1lcjEsCisgKiBzdWJ0cmFjdCBpdCBmcm9tIDM5OTk5LCBhbmQgdGhlbiBhZGQgNDAwMDAgaWYgVDEgaXMgaGlnaC4KKyAqIFRoYXQgZ2l2ZXMgeW91IHRoZSBudW1iZXIgb2YgMTI1bnMgdGlja3MgaW4gdG8gdGhlIDEwbXMgcGVyaW9kLAorICogc28gZGl2aWRlIGJ5IDggdG8gZ2V0IHRoZSBtaWNyb3NlY29uZCByZXN1bHQuCisgKi8KKwordm9pZCBidm1lNjAwMF9zY2hlZF9pbml0IChpcnFyZXR1cm5fdCAoKnRpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKyAgICB2b2xhdGlsZSBSdGNQdHJfdCBydGMgPSAoUnRjUHRyX3QpQlZNRV9SVENfQkFTRTsKKyAgICB1bnNpZ25lZCBjaGFyIG1zciA9IHJ0Yy0+bXNyICYgMHhjMDsKKworICAgIHJ0Yy0+bXNyID0gMDsJLyogRW5zdXJlIHRpbWVyIHJlZ2lzdGVycyBhY2Nlc3NpYmxlICovCisKKyAgICB0aWNrX2hhbmRsZXIgPSB0aW1lcl9yb3V0aW5lOworICAgIGlmIChyZXF1ZXN0X2lycShCVk1FX0lSUV9SVEMsIGJ2bWU2MDAwX3RpbWVyX2ludCwgMCwKKwkJCQkidGltZXIiLCBidm1lNjAwMF90aW1lcl9pbnQpKQorCXBhbmljICgiQ291bGRuJ3QgcmVnaXN0ZXIgdGltZXIgaW50Iik7CisKKyAgICBydGMtPnQxY3Jfb21yID0gMHgwNDsJLyogTW9kZSAyLCBleHQgY2xrICovCisgICAgcnRjLT50MW1zYiA9IDM5OTk5ID4+IDg7CisgICAgcnRjLT50MWxzYiA9IDM5OTk5ICYgMHhmZjsKKyAgICBydGMtPmlycl9pY3IxICY9IDB4ZWY7CS8qIFJvdXRlIHRpbWVyIDEgdG8gSU5UUiBwaW4gKi8KKyAgICBydGMtPm1zciA9IDB4NDA7CQkvKiBBY2Nlc3MgaW50LmNudHJsLCBldGMgKi8KKyAgICBydGMtPnBmcl9pY3IwID0gMHg4MDsJLyogSnVzdCB0aW1lciAxIGludHMgZW5hYmxlZCAqLworICAgIHJ0Yy0+aXJyX2ljcjEgPSAwOworICAgIHJ0Yy0+dDFjcl9vbXIgPSAweDBhOwkvKiBJTlRSK1QxIGFjdGl2ZSBsbywgcHVzaC1wdWxsICovCisgICAgcnRjLT50MGNyX3J0bXIgJj0gMHhkZjsJLyogU3RvcCB0aW1lcnMgaW4gc3RhbmRieSAqLworICAgIHJ0Yy0+bXNyID0gMDsJCS8qIEFjY2VzcyB0aW1lciAxIGNvbnRyb2wgKi8KKyAgICBydGMtPnQxY3Jfb21yID0gMHgwNTsJLyogTW9kZSAyLCBleHQgY2xrLCBHTyAqLworCisgICAgcnRjLT5tc3IgPSBtc3I7CisKKyAgICBpZiAocmVxdWVzdF9pcnEoQlZNRV9JUlFfQUJPUlQsIGJ2bWU2MDAwX2Fib3J0X2ludCwgMCwKKwkJCQkiYWJvcnQiLCBidm1lNjAwMF9hYm9ydF9pbnQpKQorCXBhbmljICgiQ291bGRuJ3QgcmVnaXN0ZXIgYWJvcnQgaW50Iik7Cit9CisKKworLyogVGhpcyBpcyBhbHdheXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgKi8KKworLyoKKyAqIE5PVEU6ICBEb24ndCBhY2NlcHQgYW55IHJlYWRpbmdzIHdpdGhpbiA1dXMgb2Ygcm9sbG92ZXIsIGFzCisgKiB0aGUgVDFJTlQgYml0IG1heSBiZSBhIGxpdHRsZSBzbG93IGdldHRpbmcgc2V0LiAgVGhlcmUgaXMgYWxzbworICogYSBmYXVsdCBpbiB0aGUgY2hpcCwgbWVhbmluZyB0aGF0IHJlYWRzIG1heSBwcm9kdWNlIGludmFsaWQKKyAqIHJlc3VsdHMuLi4KKyAqLworCit1bnNpZ25lZCBsb25nIGJ2bWU2MDAwX2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisgICAgdm9sYXRpbGUgUnRjUHRyX3QgcnRjID0gKFJ0Y1B0cl90KUJWTUVfUlRDX0JBU0U7CisgICAgdm9sYXRpbGUgUGl0UmVnc1B0ciBwaXQgPSAoUGl0UmVnc1B0cilCVk1FX1BJVF9CQVNFOworICAgIHVuc2lnbmVkIGNoYXIgbXNyID0gcnRjLT5tc3IgJiAweGMwOworICAgIHVuc2lnbmVkIGNoYXIgdDFpbnQsIHQxb3A7CisgICAgdW5zaWduZWQgbG9uZyB2ID0gODAwMDAwLCBvdjsKKworICAgIHJ0Yy0+bXNyID0gMDsJLyogRW5zdXJlIHRpbWVyIHJlZ2lzdGVycyBhY2Nlc3NpYmxlICovCisKKyAgICBkbyB7CisJb3YgPSB2OworCXQxaW50ID0gcnRjLT5tc3IgJiAweDIwOworCXQxb3AgID0gcGl0LT5wY2RyICYgMHgwNDsKKwlydGMtPnQxY3Jfb21yIHw9IDB4NDA7CQkvKiBMYXRjaCB0aW1lcjEgKi8KKwl2ID0gcnRjLT50MW1zYiA8PCA4OwkJLyogUmVhZCB0aW1lcjEgKi8KKwl2IHw9IHJ0Yy0+dDFsc2I7CQkvKiBSZWFkIHRpbWVyMSAqLworICAgIH0gd2hpbGUgKHQxaW50ICE9IChydGMtPm1zciAmIDB4MjApIHx8CisJCXQxb3AgIT0gKHBpdC0+cGNkciAmIDB4MDQpIHx8CisJCQlhYnMob3YtdikgPiA4MCB8fAorCQkJCXYgPiAzOTk2MCk7CisKKyAgICB2ID0gMzk5OTkgLSB2OworICAgIGlmICghdDFvcCkJCQkJLyogSWYgaW4gc2Vjb25kIGhhbGYgY3ljbGUuLiAqLworCXYgKz0gNDAwMDA7CisgICAgdiAvPSA4OwkJCQkvKiBDb252ZXJ0IHRpY2tzIHRvIG1pY3Jvc2Vjb25kcyAqLworICAgIGlmICh0MWludCkKKwl2ICs9IDEwMDAwOwkJCS8qIEludCBwZW5kaW5nLCArIDEwbXMgKi8KKyAgICBydGMtPm1zciA9IG1zcjsKKworICAgIHJldHVybiB2OworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBiY2QyYmluICh1bnNpZ25lZCBjaGFyIGIpCit7CisJcmV0dXJuICgoYj4+NCkqMTAgKyAoYiYxNSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBjaGFyIGIpCit7CisJcmV0dXJuICgoKGIvMTApKjE2KSArIChiJTEwKSk7Cit9CisKKworLyoKKyAqIExvb2tzIGxpa2Ugb3AgaXMgbm9uLXplcm8gZm9yIHNldHRpbmcgdGhlIGNsb2NrLCBhbmQgemVybyBmb3IKKyAqIHJlYWRpbmcgdGhlIGNsb2NrLgorICoKKyAqICBzdHJ1Y3QgaHdjbGtfdGltZSB7CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBzZWM7ICAgICAgIDAuLjU5CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBtaW47ICAgICAgIDAuLjU5CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBob3VyOyAgICAgIDAuLjIzCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBkYXk7ICAgICAgIDEuLjMxCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBtb247ICAgICAgIDAuLjExCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICB5ZWFyOyAgICAgIDAwLi4uCisgKiAgICAgICAgIGludCAgICAgICAgICAgICB3ZGF5OyAgICAgIDAuLjYsIDAgaXMgU3VuZGF5LCAtMSBtZWFucyB1bmtub3duL2Rvbid0IHNldAorICogfTsKKyAqLworCitpbnQgYnZtZTYwMDBfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJdm9sYXRpbGUgUnRjUHRyX3QgcnRjID0gKFJ0Y1B0cl90KUJWTUVfUlRDX0JBU0U7CisJdW5zaWduZWQgY2hhciBtc3IgPSBydGMtPm1zciAmIDB4YzA7CisKKwlydGMtPm1zciA9IDB4NDA7CS8qIEVuc3VyZSBjbG9jayBhbmQgcmVhbC10aW1lLW1vZGUtcmVnaXN0ZXIKKwkJCQkgKiBhcmUgYWNjZXNzaWJsZSAqLworCWlmIChvcCkKKwl7CS8qIFdyaXRlLi4uLiAqLworCQlydGMtPnQwY3JfcnRtciA9IHQtPnRtX3llYXIlNDsKKwkJcnRjLT5iY2RfdGVubXMgPSAwOworCQlydGMtPmJjZF9zZWMgPSBiaW4yYmNkKHQtPnRtX3NlYyk7CisJCXJ0Yy0+YmNkX21pbiA9IGJpbjJiY2QodC0+dG1fbWluKTsKKwkJcnRjLT5iY2RfaHIgID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwkJcnRjLT5iY2RfZG9tID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwkJcnRjLT5iY2RfbXRoID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsKKwkJcnRjLT5iY2RfeWVhciA9IGJpbjJiY2QodC0+dG1feWVhciUxMDApOworCQlpZiAodC0+dG1fd2RheSA+PSAwKQorCQkJcnRjLT5iY2RfZG93ID0gYmluMmJjZCh0LT50bV93ZGF5KzEpOworCQlydGMtPnQwY3JfcnRtciA9IHQtPnRtX3llYXIlNCB8IDB4MDg7CisJfQorCWVsc2UKKwl7CS8qIFJlYWQuLi4uICAqLworCQlkbyB7CisJCQl0LT50bV9zZWMgID0gYmNkMmJpbihydGMtPmJjZF9zZWMpOworCQkJdC0+dG1fbWluICA9IGJjZDJiaW4ocnRjLT5iY2RfbWluKTsKKwkJCXQtPnRtX2hvdXIgPSBiY2QyYmluKHJ0Yy0+YmNkX2hyKTsKKwkJCXQtPnRtX21kYXkgPSBiY2QyYmluKHJ0Yy0+YmNkX2RvbSk7CisJCQl0LT50bV9tb24gID0gYmNkMmJpbihydGMtPmJjZF9tdGgpLTE7CisJCQl0LT50bV95ZWFyID0gYmNkMmJpbihydGMtPmJjZF95ZWFyKTsKKwkJCWlmICh0LT50bV95ZWFyIDwgNzApCisJCQkJdC0+dG1feWVhciArPSAxMDA7CisJCQl0LT50bV93ZGF5ID0gYmNkMmJpbihydGMtPmJjZF9kb3cpLTE7CisJCX0gd2hpbGUgKHQtPnRtX3NlYyAhPSBiY2QyYmluKHJ0Yy0+YmNkX3NlYykpOworCX0KKworCXJ0Yy0+bXNyID0gbXNyOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIG1pbnV0ZXMgYW5kIHNlY29uZHMgZnJvbSBzZWNvbmRzIHZhbHVlICdub3d0aW1lJy4gIEZhaWwgaWYKKyAqIGNsb2NrIGlzIG91dCBieSA+IDMwIG1pbnV0ZXMuICBMb2dpYyBsaWZ0ZWQgZnJvbSBhdGFyaSBjb2RlLgorICogQWxnb3JpdGhtIGlzIHRvIHdhaXQgZm9yIHRoZSAxMG1zIHJlZ2lzdGVyIHRvIGNoYW5nZSwgYW5kIHRoZW4gdG8KKyAqIHdhaXQgYSBzaG9ydCB3aGlsZSwgYW5kIHRoZW4gc2V0IGl0LgorICovCisKK2ludCBidm1lNjAwMF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworCWludCByZXR2YWwgPSAwOworCXNob3J0IHJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MCwgcmVhbF9taW51dGVzID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKKwl1bnNpZ25lZCBjaGFyIHJ0Y19taW51dGVzLCBydGNfdGVubXM7CisJdm9sYXRpbGUgUnRjUHRyX3QgcnRjID0gKFJ0Y1B0cl90KUJWTUVfUlRDX0JBU0U7CisJdW5zaWduZWQgY2hhciBtc3IgPSBydGMtPm1zciAmIDB4YzA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2xhdGlsZSBpbnQgaTsKKworCXJ0Yy0+bXNyID0gMDsJCS8qIEVuc3VyZSBjbG9jayBhY2Nlc3NpYmxlICovCisJcnRjX21pbnV0ZXMgPSBiY2QyYmluIChydGMtPmJjZF9taW4pOworCisJaWYgKChydGNfbWludXRlcyA8IHJlYWxfbWludXRlcworCQk/IHJlYWxfbWludXRlcyAtIHJ0Y19taW51dGVzCisJCQk6IHJ0Y19taW51dGVzIC0gcmVhbF9taW51dGVzKSA8IDMwKQorCXsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlydGNfdGVubXMgPSBydGMtPmJjZF90ZW5tczsKKwkJd2hpbGUgKHJ0Y190ZW5tcyA9PSBydGMtPmJjZF90ZW5tcykKKwkJCTsKKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKwkJCTsKKwkJcnRjLT5iY2RfbWluID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOworCQlydGMtPmJjZF9zZWMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJZWxzZQorCQlyZXR2YWwgPSAtMTsKKworCXJ0Yy0+bXNyID0gbXNyOworCisJcmV0dXJuIHJldHZhbDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jIGIvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjJhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKglSZWFsIFRpbWUgQ2xvY2sgaW50ZXJmYWNlIGZvciBMaW51eCBvbiB0aGUgQlZNRTYwMDAKKyAqCisgKiBCYXNlZCBvbiB0aGUgUEMgZHJpdmVyIGJ5IFBhdWwgR29ydG1ha2VyLgorICovCisKKyNkZWZpbmUgUlRDX1ZFUlNJT04JCSIxLjAwIgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIEZvciBzdHJ1Y3QgcnRjX3RpbWUgYW5kIGlvY3RscywgZXRjICovCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYnZtZTYwMDBody5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKy8qCisgKglXZSBzcG9uZ2UgYSBtaW5vciBvZmYgb2YgdGhlIG1pc2MgbWFqb3IuIE5vIG5lZWQgc2x1cnBpbmcKKyAqCXVwIGFub3RoZXIgdmFsdWFibGUgbWFqb3IgZGV2IG51bWJlciBmb3IgdGhpcy4gSWYgeW91IGFkZAorICoJYW4gaW9jdGwsIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgY29uZmxpY3Qgd2l0aCBTUEFSQydzIFJUQworICoJaW9jdGxzLgorICovCisKKyNkZWZpbmUgQkNEMkJJTih2YWwpICgoKHZhbCkmMTUpICsgKCh2YWwpPj40KSoxMCkKKyNkZWZpbmUgQklOMkJDRCh2YWwpICgoKCh2YWwpLzEwKTw8NCkgKyAodmFsKSUxMCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF5c19pbl9tb1tdID0KK3swLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfTsKKworc3RhdGljIGNoYXIgcnRjX3N0YXR1czsKKworc3RhdGljIGludCBydGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9sYXRpbGUgUnRjUHRyX3QgcnRjID0gKFJ0Y1B0cl90KUJWTUVfUlRDX0JBU0U7CisJdW5zaWduZWQgY2hhciBtc3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcnRjX3RpbWUgd3RpbWU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUlRDX1JEX1RJTUU6CS8qIFJlYWQgdGhlIHRpbWUvZGF0ZSBmcm9tIFJUQwkqLworCXsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkvKiBFbnN1cmUgY2xvY2sgYW5kIHJlYWwtdGltZS1tb2RlLXJlZ2lzdGVyIGFyZSBhY2Nlc3NpYmxlICovCisJCW1zciA9IHJ0Yy0+bXNyICYgMHhjMDsKKwkJcnRjLT5tc3IgPSAweDQwOworCQltZW1zZXQoJnd0aW1lLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7CisJCWRvIHsKKwkJCXd0aW1lLnRtX3NlYyA9ICBCQ0QyQklOKHJ0Yy0+YmNkX3NlYyk7CisJCQl3dGltZS50bV9taW4gPSAgQkNEMkJJTihydGMtPmJjZF9taW4pOworCQkJd3RpbWUudG1faG91ciA9IEJDRDJCSU4ocnRjLT5iY2RfaHIpOworCQkJd3RpbWUudG1fbWRheSA9ICBCQ0QyQklOKHJ0Yy0+YmNkX2RvbSk7CisJCQl3dGltZS50bV9tb24gPSAgQkNEMkJJTihydGMtPmJjZF9tdGgpLTE7CisJCQl3dGltZS50bV95ZWFyID0gQkNEMkJJTihydGMtPmJjZF95ZWFyKTsKKwkJCWlmICh3dGltZS50bV95ZWFyIDwgNzApCisJCQkJd3RpbWUudG1feWVhciArPSAxMDA7CisJCQl3dGltZS50bV93ZGF5ID0gQkNEMkJJTihydGMtPmJjZF9kb3cpLTE7CisJCX0gd2hpbGUgKHd0aW1lLnRtX3NlYyAhPSBCQ0QyQklOKHJ0Yy0+YmNkX3NlYykpOworCQlydGMtPm1zciA9IG1zcjsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkICopYXJnLCAmd3RpbWUsIHNpemVvZiB3dGltZSkgPworCQkJCQkJCQktRUZBVUxUIDogMDsKKwl9CisJY2FzZSBSVENfU0VUX1RJTUU6CS8qIFNldCB0aGUgUlRDICovCisJeworCQlzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCQl1bnNpZ25lZCBjaGFyIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjLCBsZWFwX3lyOworCQl1bnNpZ25lZCBpbnQgeXJzOworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcnRjX3RtLCAoc3RydWN0IHJ0Y190aW1lKilhcmcsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJeXJzID0gcnRjX3RtLnRtX3llYXI7CisJCWlmICh5cnMgPCAxOTAwKQorCQkJeXJzICs9IDE5MDA7CisJCW1vbiA9IHJ0Y190bS50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCQlkYXkgPSBydGNfdG0udG1fbWRheTsKKwkJaHJzID0gcnRjX3RtLnRtX2hvdXI7CisJCW1pbiA9IHJ0Y190bS50bV9taW47CisJCXNlYyA9IHJ0Y190bS50bV9zZWM7CisKKwkJbGVhcF95ciA9ICgoISh5cnMgJSA0KSAmJiAoeXJzICUgMTAwKSkgfHwgISh5cnMgJSA0MDApKTsKKworCQlpZiAoKG1vbiA+IDEyKSB8fCAobW9uIDwgMSkgfHwgKGRheSA9PSAwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChkYXkgPiAoZGF5c19pbl9tb1ttb25dICsgKChtb24gPT0gMikgJiYgbGVhcF95cikpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKChocnMgPj0gMjQpIHx8IChtaW4gPj0gNjApIHx8IChzZWMgPj0gNjApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHlycyA+PSAyMDcwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkvKiBFbnN1cmUgY2xvY2sgYW5kIHJlYWwtdGltZS1tb2RlLXJlZ2lzdGVyIGFyZSBhY2Nlc3NpYmxlICovCisJCW1zciA9IHJ0Yy0+bXNyICYgMHhjMDsKKwkJcnRjLT5tc3IgPSAweDQwOworCisJCXJ0Yy0+dDBjcl9ydG1yID0geXJzJTQ7CisJCXJ0Yy0+YmNkX3Rlbm1zID0gMDsKKwkJcnRjLT5iY2Rfc2VjICAgPSBCSU4yQkNEKHNlYyk7CisJCXJ0Yy0+YmNkX21pbiAgID0gQklOMkJDRChtaW4pOworCQlydGMtPmJjZF9ociAgICA9IEJJTjJCQ0QoaHJzKTsKKwkJcnRjLT5iY2RfZG9tICAgPSBCSU4yQkNEKGRheSk7CisJCXJ0Yy0+YmNkX210aCAgID0gQklOMkJDRChtb24pOworCQlydGMtPmJjZF95ZWFyICA9IEJJTjJCQ0QoeXJzJTEwMCk7CisJCWlmIChydGNfdG0udG1fd2RheSA+PSAwKQorCQkJcnRjLT5iY2RfZG93ID0gQklOMkJDRChydGNfdG0udG1fd2RheSsxKTsKKwkJcnRjLT50MGNyX3J0bXIgPSB5cnMlNCB8IDB4MDg7CisKKwkJcnRjLT5tc3IgPSBtc3I7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqCVdlIGVuZm9yY2Ugb25seSBvbmUgdXNlciBhdCBhIHRpbWUgaGVyZSB3aXRoIHRoZSBvcGVuL2Nsb3NlLgorICoJQWxzbyBjbGVhciB0aGUgcHJldmlvdXMgaW50ZXJydXB0IGRhdGEgb24gYW4gb3BlbiwgYW5kIGNsZWFuCisgKgl1cCB0aGluZ3Mgb24gYSBjbG9zZS4KKyAqLworCitzdGF0aWMgaW50IHJ0Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmKHJ0Y19zdGF0dXMpCisJCXJldHVybiAtRUJVU1k7CisKKwlydGNfc3RhdHVzID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlsb2NrX2tlcm5lbCgpOworCXJ0Y19zdGF0dXMgPSAwOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCVRoZSB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucyB3ZSBzdXBwb3J0LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19mb3BzID0geworCS5pb2N0bCA9CXJ0Y19pb2N0bCwKKwkub3BlbiA9CQlydGNfb3BlbiwKKwkucmVsZWFzZSA9CXJ0Y19yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHJ0Y19kZXYgPSB7CisJLm1pbm9yID0JUlRDX01JTk9SLAorCS5uYW1lID0JCSJydGMiLAorCS5mb3BzID0JCSZydGNfZm9wcworfTsKKworaW50IF9faW5pdCBydGNfRFA4NTcwQV9pbml0KHZvaWQpCit7CisJaWYgKCFNQUNIX0lTX0JWTUU2MDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gIkRQODU3MEEgUmVhbCBUaW1lIENsb2NrIERyaXZlciB2JXNcbiIsIFJUQ19WRVJTSU9OKTsKKwlyZXR1cm4gbWlzY19yZWdpc3RlcigmcnRjX2Rldik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWIyMzMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTAtbTY4aworIyBTdW4gRGVjIDI2IDExOjIyOjU0IDIwMDQKKyMKK0NPTkZJR19NNjhLPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1hbWlnYSIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQT15CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCitDT05GSUdfTTY4MDIwPXkKK0NPTkZJR19NNjgwMzA9eQorQ09ORklHX002ODA0MD15CitDT05GSUdfTTY4MDYwPXkKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorQ09ORklHX002OEtGUFVfRU1VPXkKK0NPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfWk9SUk89eQorQ09ORklHX0FNSUdBX1BDTUNJQT15CisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorQ09ORklHX0lTQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19aT1JST19OQU1FUz15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD1tCisjIENPTkZJR19QQVJQT1JUX1BDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX0FNSUdBPW0KK0NPTkZJR19QQVJQT1JUX01GQzM9bQorIyBDT05GSUdfUEFSUE9SVF9PVEhFUiBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF8xMjg0PXkKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0FNSUdBX0ZMT1BQWT15CitDT05GSUdfQU1JR0FfWjJSQU09eQorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERVRBUEU9bQorQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0FZTEU9eQorQ09ORklHX0JMS19ERVZfSURFRE9VQkxFUj15CitDT05GSUdfQkxLX0RFVl9CVURESEE9eQorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODBfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQTMwMDBfU0NTST15CitDT05GSUdfQTIwOTFfU0NTST15CitDT05GSUdfR1ZQMTFfU0NTST15CitDT05GSUdfQ1lCRVJTVE9STV9TQ1NJPXkKK0NPTkZJR19DWUJFUlNUT1JNSUlfU0NTST15CitDT05GSUdfQkxaMjA2MF9TQ1NJPXkKK0NPTkZJR19CTFoxMjMwX1NDU0k9eQorQ09ORklHX0ZBU1RMQU5FX1NDU0k9eQorQ09ORklHX09LVEFHT05fU0NTST15CisKKyMKKyMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKKyMKKyMgQ09ORklHX0NEX05PX0lERVNDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorQ09ORklHX0FSSUFETkU9bQorQ09ORklHX0EyMDY1PW0KK0NPTkZJR19IWURSQT1tCitDT05GSUdfWk9SUk84MzkwPW0KK0NPTkZJR19BUE5FPW0KKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUExJUD1tCitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPW0KK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQU1JR0E9eQorQ09ORklHX0lOUFVUX01PVVNFPXkKKyMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfQU1JR0E9eQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQorIyBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1NUSU5HRVIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfVFdJRERMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfREI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0dBTUVDT04gaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfVFVSQk9HUkFGWCBpcyBub3Qgc2V0CitDT05GSUdfSk9ZU1RJQ0tfQU1JR0E9bQorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0EyMjMyPW0KKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfUFJJTlRFUj1tCisjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX0NJUlJVUz1tCitDT05GSUdfRkJfQU1JR0E9eQorQ09ORklHX0ZCX0FNSUdBX09DUz15CitDT05GSUdfRkJfQU1JR0FfRUNTPXkKK0NPTkZJR19GQl9BTUlHQV9BR0E9eQorQ09ORklHX0ZCX0ZNMj15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19GT05UX1BFQVJMXzh4OD15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorQ09ORklHX0RNQVNPVU5EX1BBVUxBPW0KK0NPTkZJR19ETUFTT1VORD1tCisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKKyMgQ09ORklHX1dISVBQRVRfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWT1tCisjIENPTkZJR19TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9eQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4MzYxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcKQEAgLTAsMCArMSw4MjUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjI6NTggMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWFwb2xsbyIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CitDT05GSUdfQVBPTExPPXkKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCitDT05GSUdfTTY4MDIwPXkKK0NPTkZJR19NNjgwMzA9eQorQ09ORklHX002ODA0MD15CitDT05GSUdfTTY4MDYwPXkKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorQ09ORklHX002OEtGUFVfRU1VPXkKK0NPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfSEVBUlRCRUFUPXkKK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19BUE9MTE9fRUxQTFVTPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89bQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX0ROX1NFUklBTD15CitDT05GSUdfU0VSSUFMX0NPTlNPTEU9eQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCisjIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYjI1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcKQEAgLTAsMCArMSw4ODAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6MTEgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWF0YXJpIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorQ09ORklHX0FUQVJJPXkKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorIyBDT05GSUdfVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKK0NPTkZJR19NNjgwMjA9eQorQ09ORklHX002ODAzMD15CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19TVFJBTV9QUk9DPXkKK0NPTkZJR19IRUFSVEJFQVQ9eQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1BBUlBPUlQ9bQorIyBDT05GSUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF9BVEFSST1tCisjIENPTkZJR19QQVJQT1JUX09USEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19BVEFSSV9GTE9QUFk9eQorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUZMT1BQWT1tCisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0ZBTENPTl9JREU9eQorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorQ09ORklHX0FUQVJJTEFOQ0U9bQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX002OEtfQkVFUD1tCitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX1BSSU5URVI9bQorIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUERFViBpcyBub3Qgc2V0CisjIENPTkZJR19USVBBUiBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKK0NPTkZJR19HRU5fUlRDPXkKK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KK0NPTkZJR19ETUFTT1VORF9BVEFSST1tCitDT05GSUdfRE1BU09VTkQ9bQorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19BVEFSSV9NRlBTRVI9bQorQ09ORklHX0FUQVJJX1NDQz15CitDT05GSUdfQVRBUklfU0NDX0RNQT15CitDT05GSUdfQVRBUklfTUlEST1tCitDT05GSUdfQVRBUklfRFNQNTZLPW0KKyMgQ09ORklHX1NFUklBTF9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYyY2YwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsODI0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTAtbTY4aworIyBTdW4gRGVjIDI2IDExOjIzOjE1IDIwMDQKKyMKK0NPTkZJR19NNjhLPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1idm1lNjAwMCIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorQ09ORklHX1ZNRT15CisjIENPTkZJR19NVk1FMTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01WTUUxNnggaXMgbm90IHNldAorQ09ORklHX0JWTUU2MDAwPXkKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKKyMgQ09ORklHX002ODAyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NNjgwMzAgaXMgbm90IHNldAorQ09ORklHX002ODA0MD15CitDT05GSUdfTTY4MDYwPXkKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorQ09ORklHX0JWTUU2MDAwX05FVD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89bQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX0JWTUU2MDAwX1NDQz15CitDT05GSUdfU0VSSUFMX0NPTlNPTEU9eQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCisjIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9bQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGRlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4MjQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6NDAgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWhwMzAwIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CisjIENPTkZJR19WTUUgaXMgbm90IHNldAorQ09ORklHX0hQMzAwPXkKK0NPTkZJR19ESU89eQorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworQ09ORklHX002ODAyMD15CitDT05GSUdfTTY4MDMwPXkKK0NPTkZJR19NNjgwNDA9eQorQ09ORklHX002ODA2MD15CitDT05GSUdfTU1VX01PVE9ST0xBPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0hFQVJUQkVBVD15CitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfSFBMQU5DRT15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPW0KK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTJkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTAzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTAtbTY4aworIyBTdW4gRGVjIDI2IDExOjIzOjQ0IDIwMDQKKyMKK0NPTkZJR19NNjhLPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1tYWMiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDPXkKK0NPTkZJR19OVUJVUz15CitDT05GSUdfTTY4S19MMl9DQUNIRT15CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorIyBDT05GSUdfVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKK0NPTkZJR19NNjgwMjA9eQorQ09ORklHX002ODAzMD15CitDT05GSUdfTTY4MDQwPXkKKyMgQ09ORklHX002ODA2MCBpcyBub3Qgc2V0CitDT05GSUdfTU1VX01PVE9ST0xBPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUZMT1BQWT1tCisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX01BQ19JREU9eQorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfU0NTST15CitDT05GSUdfU0NTSV9NQUNfRVNQPXkKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQURCPXkKK0NPTkZJR19BREJfTUFDSUk9eQorQ09ORklHX0FEQl9NQUNJSVNJPXkKK0NPTkZJR19BREJfSU9QPXkKK0NPTkZJR19BREJfUE1VNjhLPXkKK0NPTkZJR19BREJfQ1VEQT15CitDT05GSUdfSU5QVVRfQURCSElEPXkKK0NPTkZJR19NQUNfRU1VTU9VU0VCVE49eQorCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KK0NPTkZJR19ERVZfQVBQTEVUQUxLPXkKK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODM5MD15CitDT05GSUdfTUFDODl4MD15CitDT05GSUdfTUFDU09OSUM9eQorQ09ORklHX01BQ01BQ0U9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKKyMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89bQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9WQUxLWVJJRT15CitDT05GSUdfRkJfTUFDPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0ZPTlRfNngxMT15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX0xPR09fTUFDX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX01BQ19TQ0M9eQorQ09ORklHX01BQ19ISUQ9eQorQ09ORklHX01BQ19BREJLRVlDT0RFUz15CitDT05GSUdfU0VSSUFMX0NPTlNPTEU9eQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCisjIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9eQorQ09ORklHX0hGU1BMVVNfRlM9eQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX0JTRF9ESVNLTEFCRUw9eQorQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKK0NPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQorQ09ORklHX0xETV9QQVJUSVRJT049eQorQ09ORklHX0xETV9ERUJVRz15CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NVTl9QQVJUSVRJT049eQorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTM4ZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcKQEAgLTAsMCArMSw4NDMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6NDkgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLW12bWUxNDciCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKK0NPTkZJR19WTUU9eQorQ09ORklHX01WTUUxNDc9eQorIyBDT05GSUdfTVZNRTE2eCBpcyBub3Qgc2V0CisjIENPTkZJR19CVk1FNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCisjIENPTkZJR19NNjgwMjAgaXMgbm90IHNldAorQ09ORklHX002ODAzMD15CisjIENPTkZJR19NNjgwNDAgaXMgbm90IHNldAorIyBDT05GSUdfTTY4MDYwIGlzIG5vdCBzZXQKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVk1FMTQ3X1NDU0k9eQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfTVZNRTE0N19ORVQ9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX01WTUUxNDdfU0NDPXkKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorIyBDT05GSUdfREVWRlNfTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19ORlNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfT1MyX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzMWE2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnCkBAIC0wLDAgKzEsODQyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTAtbTY4aworIyBTdW4gRGVjIDI2IDExOjIzOjUzIDIwMDQKKyMKK0NPTkZJR19NNjhLPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1tdm1lMTZ4IgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CitDT05GSUdfVk1FPXkKKyMgQ09ORklHX01WTUUxNDcgaXMgbm90IHNldAorQ09ORklHX01WTUUxNng9eQorIyBDT05GSUdfQlZNRTYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworIyBDT05GSUdfTTY4MDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX002ODAzMCBpcyBub3Qgc2V0CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfTVZNRTE2eF9ORVQ9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX01WTUUxNjJfU0NDPXkKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorIyBDT05GSUdfREVWRlNfTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19ORlNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfT1MyX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzAyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTE1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTAtbTY4aworIyBTdW4gRGVjIDI2IDExOjIzOjU3IDIwMDQKKyMKK0NPTkZJR19NNjhLPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1xNDAiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CitDT05GSUdfUTQwPXkKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworIyBDT05GSUdfTTY4MDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX002ODAzMCBpcyBub3Qgc2V0CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfSVNBPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9RNDBJREU9eQorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQV9QSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKQorIworIyBDT05GSUdfQ0RfTk9fSURFU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorQ09ORklHX05FMjAwMD1tCisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fUTQwS0JEPW0KKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9RNDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorQ09ORklHX0RNQVNPVU5EX1E0MD15CitDT05GSUdfRE1BU09VTkQ9eQorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorQ09ORklHX1VGU19GU19XUklURT15CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2M0ZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcKQEAgLTAsMCArMSw4MzEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjQ6MDEgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXN1bjMiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworQ09ORklHX1NVTjM9eQorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCitDT05GSUdfTTY4MDIwPXkKK0NPTkZJR19NTVVfU1VOMz15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1VOM19TQ1NJPXkKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfU1VOM0xBTkNFPXkKK0NPTkZJR19TVU4zXzgyNTg2PXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9TVU5LQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKKyMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorQ09ORklHX1VGU19GU19XUklURT15CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfU1VOX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDA4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcKQEAgLTAsMCArMSw4NDEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjQ6MDUgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXN1bjN4IgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CisjIENPTkZJR19WTUUgaXMgbm90IHNldAorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorQ09ORklHX1NVTjNYPXkKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKKyMgQ09ORklHX002ODAyMCBpcyBub3Qgc2V0CitDT05GSUdfTTY4MDMwPXkKKyMgQ09ORklHX002ODA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19NNjgwNjAgaXMgbm90IHNldAorQ09ORklHX01NVV9NT1RPUk9MQT15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1VOM1hfRVNQPXkKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfU1VOM0xBTkNFPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9TVU5LQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfREVWRlNfRlM9eQorQ09ORklHX0RFVkZTX01PVU5UPXkKKyMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorQ09ORklHX1VGU19GU19XUklURT15CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfU1VOX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmNTdkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9kZWZjb25maWcKQEAgLTAsMCArMSw2MjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6MzYgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CitDT05GSUdfQU1JR0E9eQorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CisjIENPTkZJR19WTUUgaXMgbm90IHNldAorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworQ09ORklHX002ODAyMD15CitDT05GSUdfTTY4MDMwPXkKK0NPTkZJR19NNjgwNDA9eQorIyBDT05GSUdfTTY4MDYwIGlzIG5vdCBzZXQKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfWk9SUk89eQorIyBDT05GSUdfQU1JR0FfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisjIENPTkZJR19aT1JST19OQU1FUyBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19BTUlHQV9GTE9QUFk9eQorIyBDT05GSUdfQU1JR0FfWjJSQU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9eQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BMzAwMF9TQ1NJPXkKK0NPTkZJR19BMjA5MV9TQ1NJPXkKK0NPTkZJR19HVlAxMV9TQ1NJPXkKKyMgQ09ORklHX0NZQkVSU1RPUk1fU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19DWUJFUlNUT1JNSUlfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTFoyMDYwX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxaMTIzMF9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBU1RMQU5FX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfT0tUQUdPTl9TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0FNSUdBIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0EyMjMyIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQU1JR0E9eQorQ09ORklHX0ZCX0FNSUdBX09DUz15CitDT05GSUdfRkJfQU1JR0FfRUNTPXkKK0NPTkZJR19GQl9BTUlHQV9BR0E9eQorIyBDT05GSUdfRkJfRk0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTD15CisjIENPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19HVlBJT0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorIyBDT05GSUdfRVhQT1JURlMgaXMgbm90IHNldAorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9mcHNwMDQwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTRkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvZnBzcDA0MCBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15ICAgIDo9IGJpbmRlYy5vIGJpbnN0ci5vIGRlY2Jpbi5vIGRvX2Z1bmMubyBnZW5fZXhjZXB0Lm8gZ2V0X29wLm8gXAorCSAgICBrZXJuZWxfZXgubyByZXNfZnVuYy5vIHJvdW5kLm8gc2Fjb3MubyBzYXNpbi5vIHNhdGFuLm8gc2F0YW5oLm8gXAorCSAgICBzY29zaC5vIHNldG94Lm8gc2dldGVtLm8gc2ludC5vIHNsb2cyLm8gc2xvZ24ubyBcCisJICAgIHNtb3ZlY3IubyBzcmVtX21vZC5vIHNjYWxlLm8gXAorCSAgICBzc2luLm8gc3NpbmgubyBzdGFuLm8gc3RhbmgubyBzdG9fcmVzLm8gc3R3b3RveC5vIHRibGRvLm8gdXRpbC5vIFwKKwkgICAgeF9ic3VuLm8geF9mbGluZS5vIHhfb3BlcnIubyB4X292ZmwubyB4X3NuYW4ubyB4X3N0b3JlLm8gXAorCSAgICB4X3VuZmwubyB4X3VuaW1wLm8geF91bnN1cHAubyBidWdmaXgubyBza2VsZXRvbi5vCisKK0VYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKK0VYVFJBX0xERkxBR1MgOj0gLXgKKworJChPU19PQkpTKTogZnBzcC5oCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9SRUFETUUgYi9hcmNoL202OGsvZnBzcDA0MC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3NDk0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL1JFQURNRQpAQCAtMCwwICsxLDMwIEBACisKK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDQwIFNvZnR3YXJlIFBhY2thZ2UKKworTTY4MDQwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IChjKSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBhbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGgKK3JlZ2FyZCB0byB0aGUgU09GVFdBUkUgKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikKK2FuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUworUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUgorT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorU09GVFdBUkUuICBNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UKK2FuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQKK2Rpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFIHNvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkCit3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vciByZWRpc3RyaWJ1dGVkIHZlcnNpb25zLAorYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlCit1bmRlciBhbnkgcGF0ZW50cyBvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9iaW5kZWMuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTQ0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9iaW5kZWMuUwpAQCAtMCwwICsxLDkyMCBAQAorfAorfAliaW5kZWMuc2EgMy40IDEvMy85MQorfAorfAliaW5kZWMKK3wKK3wJRGVzY3JpcHRpb246Cit8CQlDb252ZXJ0cyBhbiBpbnB1dCBpbiBleHRlbmRlZCBwcmVjaXNpb24gZm9ybWF0Cit8CQl0byBiY2QgZm9ybWF0LgorfAorfAlJbnB1dDoKK3wJCWEwIHBvaW50cyB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlCit8CQl2YWx1ZSBpbiBtZW1vcnk7IGQwIGNvbnRhaW5zIHRoZSBrLWZhY3RvciBzaWduLWV4dGVuZGVkCit8CQl0byAzMi1iaXRzLiAgVGhlIGlucHV0IG1heSBiZSBlaXRoZXIgbm9ybWFsaXplZCwKK3wJCXVubm9ybWFsaXplZCwgb3IgZGVub3JtYWxpemVkLgorfAorfAlPdXRwdXQ6CXJlc3VsdCBpbiB0aGUgRlBfU0NSMSBzcGFjZSBvbiB0aGUgc3RhY2suCit8Cit8CVNhdmVzIGFuZCBNb2RpZmllczogRDItRDcsQTIsRlAyCit8Cit8CUFsZ29yaXRobToKK3wKK3wJQTEuCVNldCBSTSBhbmQgc2l6ZSBleHQ7ICBTZXQgU0lHTUEgPSBzaWduIG9mIGlucHV0LgorfAkJVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuIENsZWFyIHRoZQorfAkJQklOREVDX0ZMRyBmb3Igc2VwYXJhdGluZyBub3JtYWxpemVkL2Rlbm9ybWFsaXplZAorfAkJaW5wdXQuICBJZiBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQgb3IgZGVub3JtYWxpemVkLAorfAkJbm9ybWFsaXplIGl0LgorfAorfAlBMi4JU2V0IFggPSBhYnMoaW5wdXQpLgorfAorfAlBMy4JQ29tcHV0ZSBJTE9HLgorfAkJSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMKK3wJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAorfAkJdmFsdWUgaXMgdmlld2VkIGFzIDJeXmUgKiAxLmYgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLgorfAkJVGhpcyB2YWx1ZSBpcyBzdG9yZWQgaW4gZDYuCit8Cit8CUE0LglDbHIgSU5FWCBiaXQuCit8CQlUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KK3wKK3wJQTUuCVNldCBJQ1RSID0gMDsKK3wJCUlDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQorfAkJbG9vcCBlbnRyeSBBNi4KK3wKK3wJQTYuCUNhbGN1bGF0ZSBMRU4uCit8CQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCit8CQlrLWZhY3RvciBjYW4gZGljdGF0ZSBlaXRoZXIgdGhlIHRvdGFsIG51bWJlciBvZiBkaWdpdHMsCit8CQlpZiBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciwgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMKK3wJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcworfAkJc2lnbmlmaWNhbnQuICBTZWUgdGhlIDY4ODgyIG1hbnVhbCBmb3IgZXhhbXBsZXMuCit8CQlJZiBMRU4gaXMgY29tcHV0ZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDE3LCBzZXQgT1BFUlIgaW4KK3wJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCit8Cit8CUE3LglDYWxjdWxhdGUgU0NBTEUuCit8CQlTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCit8CQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cworfAkJaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUKK3wJCXNpZ24gb2YgSVNDQUxFLCB1c2VkIGluIEE5LiBGcDEgY29udGFpbnMKK3wJCTEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nIGEgcm91bmRpbmcgbW9kZSB3aGljaCBpcyBhCit8CQlmdW5jdGlvbiBvZiB0aGUgb3JpZ2luYWwgcm91bmRpbmcgbW9kZSBhbmQgdGhlIHNpZ25zCit8CQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgorfAorfAlBOC4JQ2xyIElORVg7IEZvcmNlIFJaLgorfAkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCit8CQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQorfAkJb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgorfAkJdGhlIElORVggZmxhZyBmb3IgdXNlIGluIEExMC4KK3wKK3wJQTkuCVNjYWxlIFggLT4gWS4KK3wJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCit8CQlzaWduaWZpY2FudCBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkCit8CQlpbiBJTkVYMi4KK3wKK3wJQTEwLglPciBpbiBJTkVYLgorfAkJSWYgSU5FWCBpcyBzZXQsIHJvdW5kIGVycm9yIG9jY3VycmVkLiAgVGhpcyBpcworfAkJY29tcGVuc2F0ZWQgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvCit8CQl0aGUgbHNiIG9mIFkuCit8Cit8CUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCit8CQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4KK3wJCUtlZXAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuCit8Cit8CUExMi4JQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcKK3wJCW1vZGUuICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dAorfAkJaXMgaW4gZnAwLgorfAorfAlBMTMuCUNoZWNrIGZvciBMRU4gZGlnaXRzLgorfAkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKK3wJCW9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KK3wJCUE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCit8CQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKK3wJCXRoZSBtYW50aXNzYSBieSAxMC4KK3wKK3wJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCit8CQlUaGUgYmluc3RyIHJvdXRpbmUgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBMRU4gZGlnaXQKK3wJCW1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCit8CQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAorfAkJc3VjaCB0aGF0IHRoZSBkZWNpbWFsIHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9mIGJpdCA2My4KK3wJCVRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4KK3wJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCit8Cit8CUExNS4JQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorfAkJQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQorfAkJZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGZpbmFsIHN0cmluZy4KK3wJCVRlc3QgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgZXhwb25lbnQgc3RyaW5nLiAgSWYgdGhlCit8CQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgorfAorfAlBMTYuCVdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCit8Cit8CUltcGxlbWVudGF0aW9uIE5vdGVzOgorfAorfAlUaGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGZvbGxvd3M6Cit8Cit8CQlkMDogc2NyYXRjaDsgTEVOIGlucHV0IHRvIGJpbnN0cgorfAkJZDE6IHNjcmF0Y2gKK3wJCWQyOiB1cHBlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKK3wJCWQzOiBzY3JhdGNoO2xvd2VyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgorfAkJZDQ6IExFTgorfAkJZDU6IExBTUJEQS9JQ1RSCit8CQlkNjogSUxPRworfAkJZDc6IGstZmFjdG9yCit8CQlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorfAkJYTE6IHNjcmF0Y2ggcG9pbnRlcgorfAkJYTI6IHBvaW50ZXIgdG8gRlBfWDsgYWJzKG9yaWdpbmFsIHZhbHVlKSBpbiBleHQKK3wJCWZwMDogc2NyYXRjaAorfAkJZnAxOiBzY3JhdGNoCit8CQlmcDI6IHNjcmF0Y2gKK3wJCUZfU0NSMToKK3wJCUZfU0NSMjoKK3wJCUxfU0NSMToKK3wJCUxfU0NSMjoKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfEJJTkRFQyAgICBpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8c2VjdGlvbgk4CisKK3wgQ29uc3RhbnRzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorTE9HMjoJLmxvbmcJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTgsMHgwMDAwMDAwMAorTE9HMlVQMToJLmxvbmcJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAorCit8IENvbnN0YW50cyBpbiBzaW5nbGUgcHJlY2lzaW9uCitGT05FOgkubG9uZwkweDNGODAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVFdPOgkubG9uZwkweDQwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVEVOOgkubG9uZwkweDQxMjAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGNDkzMzoJLmxvbmcJMHg0NTlBMjgwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitSQkRUQkw6CS5ieXRlCTAsMCwwLDAKKwkuYnl0ZQkzLDMsMiwyCisJLmJ5dGUJMywyLDIsMworCS5ieXRlCTIsMywzLDIKKworCXx4cmVmCWJpbnN0cgorCXx4cmVmCXNpbnRkbworCXx4cmVmCXB0ZW5ybixwdGVucm0scHRlbnJwCisKKwkuZ2xvYmFsCWJpbmRlYworCS5nbG9iYWwJc2NfbXVsCitiaW5kZWM6CisJbW92ZW1sCSVkMi0lZDcvJWEyLC0oJWE3KQorCWZtb3ZlbXggJWZwMC0lZnAyLC0oJWE3KQorCit8IEExLiBTZXQgUk0gYW5kIHNpemUgZXh0LiBTZXQgU0lHTUEgPSBzaWduIGlucHV0OworfCAgICAgVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuICBDbGVhciBCSU5ERUNfRkxHIGZvcgorfCAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKK3wgICAgIGlzIGEgZGVub3JtYWxpemVkIG51bWJlciwgc2V0IHRoZSBCSU5ERUNfRkxHIG1lbW9yeSB3b3JkCit8ICAgICB0byBzaWduYWwgZGVub3JtLiAgSWYgdGhlIGlucHV0IGlzIHVubm9ybWFsaXplZCwgbm9ybWFsaXplCit8ICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCit8CisJZm1vdmVsCSNybV9tb2RlLCVGUENSCXxzZXQgUk0gYW5kIGV4dAorCW1vdmVsCSglYTApLExfU0NSMiglYTYpCXxzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCisJbW92ZWwJJWQwLCVkNwkJfG1vdmUgay1mYWN0b3IgdG8gZDcKKwljbHJiCUJJTkRFQ19GTEcoJWE2KQl8Y2xyIG5vcm0vZGVub3JtIGZsYWcKKwltb3ZldwlTVEFHKCVhNiksJWQwCXxnZXQgc3RhZworCWFuZGl3CSMweGUwMDAsJWQwCXxpc29sYXRlIHN0YWcgYml0cworCWJlcQlBMl9zdHIJCXxpZiB6ZXJvLCBpbnB1dCBpcyBub3JtCit8Cit8IE5vcm1hbGl6ZSB0aGUgZGVub3JtCit8Cit1bl9kZV9ub3JtOgorCW1vdmV3CSglYTApLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCXxzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92ZWwJNCglYTApLCVkMQorCW1vdmVsCTgoJWEwKSwlZDIKK25vcm1fbG9vcDoKKwlzdWJ3CSMxLCVkMAorCWxzbGwJIzEsJWQyCisJcm94bGwJIzEsJWQxCisJdHN0bAklZDEKKwliZ2VzCW5vcm1fbG9vcAorfAorfCBUZXN0IGlmIHRoZSBub3JtYWxpemVkIGlucHV0IGlzIGRlbm9ybWFsaXplZAorfAorCXRzdHcJJWQwCisJYmd0cwlwb3NfZXhwCQl8aWYgZ3JlYXRlciB0aGFuIHplcm8sIGl0IGlzIGEgbm9ybQorCXN0CUJJTkRFQ19GTEcoJWE2KQl8c2V0IGZsYWcgZm9yIGRlbm9ybQorcG9zX2V4cDoKKwlhbmRpdwkjMHg3ZmZmLCVkMAl8c3RyaXAgc2lnbiBvZiBub3JtYWxpemVkIGV4cAorCW1vdmV3CSVkMCwoJWEwKQorCW1vdmVsCSVkMSw0KCVhMCkKKwltb3ZlbAklZDIsOCglYTApCisKK3wgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KK3wKK0EyX3N0cjoKKwltb3ZlbAkoJWEwKSxGUF9TQ1IyKCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3ZlbAk0KCVhMCksRlBfU0NSMis0KCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3ZlbAk4KCVhMCksRlBfU0NSMis4KCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwlhbmRpbAkjMHg3ZmZmZmZmZixGUF9TQ1IyKCVhNikgfGNyZWF0ZSBhYnMoWCkKKworfCBBMy4gQ29tcHV0ZSBJTE9HLgorfCAgICAgSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMgYXBwcm94LQorfCAgICAgaW1hdGVkIGJ5IGFkZGluZyBlICsgMC5mIHdoZW4gdGhlIG9yaWdpbmFsIHZhbHVlIGlzIHZpZXdlZAorfCAgICAgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uICBUaGlzIHZhbHVlIGlzIHN0b3JlZAorfCAgICAgaW4gZDYuCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IGstZmFjdG9yL2V4cG9uZW50Cit8CWQyOiB4L3gKK3wJZDM6IHgveAorfAlkNDogeC94Cit8CWQ1OiB4L3gKK3wJZDY6IHgvSUxPRworfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3gKK3wJYTI6IHgveAorfAlmcDA6IHgvZmxvYXQoSUxPRykKK3wJZnAxOiB4L3gKK3wJZnAyOiB4L3gKK3wJRl9TQ1IxOngveAorfAlGX1NDUjI6QWJzKFgpL0FicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50Cit8CUxfU0NSMTp4L3gKK3wJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKKwl0c3RiCUJJTkRFQ19GTEcoJWE2KQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcXMJQTNfY29udAkJfGlmIGNsciwgY29udGludWUgd2l0aCBub3JtCisJbW92ZWwJIy00OTMzLCVkNgl8Zm9yY2UgSUxPRyA9IC00OTMzCisJYnJhcwlBNF9zdHIKK0EzX2NvbnQ6CisJbW92ZXcJRlBfU0NSMiglYTYpLCVkMAl8bW92ZSBleHAgdG8gZDAKKwltb3ZldwkjMHgzZmZmLEZQX1NDUjIoJWE2KSB8cmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgorCWZtb3ZleAlGUF9TQ1IyKCVhNiksJWZwMAl8bm93IGZwMCBoYXMgMS5mCisJc3VidwkjMHgzZmZmLCVkMAl8c3RyaXAgb2ZmIGJpYXMKKwlmYWRkdwklZDAsJWZwMAkJfGFkZCBpbiBleHAKKwlmc3VicwlGT05FLCVmcDAJfHN1YnRyYWN0IG9mZiAxLjAKKwlmYmdlCXBvc19yZXMJCXxpZiBwb3MsIGJyYW5jaAorCWZtdWx4CUxPRzJVUDEsJWZwMAl8aWYgbmVnLCBtdWwgYnkgTE9HMlVQMQorCWZtb3ZlbAklZnAwLCVkNgkJfHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKwlicmFzCUE0X3N0cgkJfGdvIG1vdmUgb3V0IElMT0cKK3Bvc19yZXM6CisJZm11bHgJTE9HMiwlZnAwCXxpZiBwb3MsIG11bCBieSBMT0cyCisJZm1vdmVsCSVmcDAsJWQ2CQl8cHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCisKK3wgQTQuIENsciBJTkVYIGJpdC4KK3wgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorCitBNF9zdHI6CisJZm1vdmVsCSMwLCVGUFNSCQl8emVybyBhbGwgb2YgZnBzciAtIG5vdGhpbmcgbmVlZGVkCisKKworfCBBNS4gU2V0IElDVFIgPSAwOworfCAgICAgSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCit8ICAgICBsb29wIGVudHJ5IEE2LiBUaGUgbG93ZXIgd29yZCBvZiBkNSBpcyB1c2VkIGZvciBJQ1RSLgorCisJY2xydwklZDUJCXxjbGVhciBJQ1RSCisKKworfCBBNi4gQ2FsY3VsYXRlIExFTi4KK3wgICAgIExFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUgay1mYWN0b3IKK3wgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKK3wgICAgIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKK3wgICAgIG9yaWdpbmFsIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCit8ICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KK3wgICAgIElmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgorfCAgICAgVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCit8CWQyOiB4L3gvc2NyYXRjaAorfAlkMzogeC94Cit8CWQ0OiBleGMgcGljdHVyZS9MRU4KK3wJZDU6IElDVFIvVW5jaGFuZ2VkCit8CWQ2OiBJTE9HL1VuY2hhbmdlZAorfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3gKK3wJYTI6IHgveAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IHgveAorfAlmcDI6IHgveAorfAlGX1NDUjE6eC94Cit8CUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKK3wJTF9TQ1IxOngveAorfAlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTZfc3RyOgorCXRzdGwJJWQ3CQl8YnJhbmNoIG9uIHNpZ24gb2YgaworCWJsZXMJa19uZWcJCXxpZiBrIDw9IDAsIExFTiA9IElMT0cgKyAxIC0gaworCW1vdmVsCSVkNywlZDQJCXxpZiBrID4gMCwgTEVOID0gaworCWJyYXMJbGVuX2NrCQl8c2tpcCB0byBMRU4gY2hlY2sKK2tfbmVnOgorCW1vdmVsCSVkNiwlZDQJCXxmaXJzdCBsb2FkIElMT0cgdG8gZDQKKwlzdWJsCSVkNywlZDQJCXxzdWJ0cmFjdCBvZmYgaworCWFkZHFsCSMxLCVkNAkJfGFkZCBpbiB0aGUgMQorbGVuX2NrOgorCXRzdGwJJWQ0CQl8TEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KKwlibGVzCUxFTl9uZwkJfGlmIG5lZywgc2V0IExFTiA9IDEKKwljbXBsCSMxNywlZDQJCXx0ZXN0IGlmIExFTiA+IDE3CisJYmxlcwlBN19zdHIJCXxpZiBub3QsIGZvcmdldCBpdAorCW1vdmVsCSMxNywlZDQJCXxzZXQgbWF4IExFTiA9IDE3CisJdHN0bAklZDcJCXxpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCisJYmxlcwlBN19zdHIJCXxpZiBwb3NpdGl2ZSwgY29udGludWUKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisJYnJhcwlBN19zdHIJCXxmaW5pc2hlZCBoZXJlCitMRU5fbmc6CisJbW92ZXFsCSMxLCVkNAkJfG1pbiBMRU4gaXMgMQorCisKK3wgQTcuIENhbGN1bGF0ZSBTQ0FMRS4KK3wgICAgIFNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIKK3wgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCit8ICAgICBpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZSBzaWduCit8ICAgICBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuICBGcDEgY29udGFpbnMgMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcKK3wgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQorfCAgICAgQ29vbmVuLCBwLiA3LjIzIGFzIHJlZi47IGhvd2V2ZXIsIHRoZSBTQ0FMRSB2YXJpYWJsZSBpcworfCAgICAgb2Ygb3Bwb3NpdGUgc2lnbiBpbiBiaW5kZWMuc2EgZnJvbSBDb29uZW4pLgorfAorfAlJbml0aWFsCQkJCQlVU0UKK3wJRlBDUls2OjVdCUxBTUJEQQlTSUdOKFgpCQlGUENSWzY6NV0KK3wJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfAkgUk4JMDAJICAgMAkgICAwCQkwMC8wCVJOCit8CSBSTgkwMAkgICAwCSAgIDEJCTAwLzAJUk4KK3wJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgorfAkgUk4JMDAJICAgMQkgICAxCQkwMC8wCVJOCit8CSBSWgkwMQkgICAwCSAgIDAJCTExLzMJUlAKK3wJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAorfAkgUloJMDEJICAgMQkgICAwCQkxMC8yCVJNCit8CSBSWgkwMQkgICAxCSAgIDEJCTEwLzIJUk0KK3wJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAorfAkgUk0JMTAJICAgMAkgICAxCQkxMC8yCVJNCit8CSBSTQkxMAkgICAxCSAgIDAJCTEwLzIJUk0KK3wJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAorfAkgUlAJMTEJICAgMAkgICAwCQkxMC8yCVJNCit8CSBSUAkxMQkgICAwCSAgIDEJCTExLzMJUlAKK3wJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAorfAkgUlAJMTEJICAgMQkgICAxCQkxMC8yCVJNCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IGV4cG9uZW50L3NjcmF0Y2ggLSBmaW5hbCBpcyAwCit8CWQyOiB4LzAgb3IgMjQgZm9yIEE5Cit8CWQzOiB4L3NjcmF0Y2ggLSBvZmZzZXQgcHRyIGludG8gUFRFTlJNIGFycmF5Cit8CWQ0OiBMRU4vVW5jaGFuZ2VkCit8CWQ1OiAwL0lDVFI6TEFNQkRBCit8CWQ2OiBJTE9HL0lMT0cgb3IgayBpZiAoKGs8PTApJihJTE9HPGspKQorfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3B0ciB0byBQVEVOUk0gYXJyYXkKK3wJYTI6IHgveAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IHgvMTBeSVNDQUxFCit8CWZwMjogeC94Cit8CUZfU0NSMTp4L3gKK3wJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorfAlMX1NDUjE6eC94Cit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBN19zdHI6CisJdHN0bAklZDcJCXx0ZXN0IHNpZ24gb2YgaworCWJndHMJa19wb3MJCXxpZiBwb3MgYW5kID4gMCwgc2tpcCB0aGlzCisJY21wbAklZDYsJWQ3CQl8dGVzdCBrIC0gSUxPRworCWJsdHMJa19wb3MJCXxpZiBJTE9HID49IGssIHNraXAgdGhpcworCW1vdmVsCSVkNywlZDYJCXxpZiAoKGs8MCkgJiAoSUxPRyA8IGspKSBJTE9HID0gawora19wb3M6CisJbW92ZWwJJWQ2LCVkMAkJfGNhbGMgSUxPRyArIDEgLSBMRU4gaW4gZDAKKwlhZGRxbAkjMSwlZDAJCXxhZGQgdGhlIDEKKwlzdWJsCSVkNCwlZDAJCXxzdWIgb2ZmIExFTgorCXN3YXAJJWQ1CQl8dXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQorCWNscncJJWQ1CQl8c2V0IGl0IHplcm8gaW5pdGlhbGx5CisJY2xydwklZDIJCXxzZXQgdXAgZDIgZm9yIHZlcnkgc21hbGwgY2FzZQorCXRzdGwJJWQwCQl8dGVzdCBzaWduIG9mIElTQ0FMRQorCWJnZXMJaXNjYWxlCQl8aWYgcG9zLCBza2lwIG5leHQgaW5zdAorCWFkZHF3CSMxLCVkNQkJfGlmIG5lZywgc2V0IExBTUJEQSB0cnVlCisJY21wbAkjMHhmZmZmZWNkNCwlZDAJfHRlc3QgaXNjYWxlIDw9IC00OTA4CisJYmd0cwlub19pbmYJCXxpZiBmYWxzZSwgc2tpcCByZXN0CisJYWRkaWwJIzI0LCVkMAkJfGFkZCBpbiAyNCB0byBpc2NhbGUKKwltb3ZlbAkjMjQsJWQyCQl8cHV0IDI0IGluIGQyIGZvciBBOQorbm9faW5mOgorCW5lZ2wJJWQwCQl8YW5kIHRha2UgYWJzIG9mIElTQ0FMRQoraXNjYWxlOgorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwliZmV4dHUJVVNFUl9GUENSKCVhNil7IzI2OiMyfSwlZDEgfGdldCBpbml0aWFsIHJtb2RlIGJpdHMKKwlsc2x3CSMxLCVkMQkJfHB1dCB0aGVtIGluIGJpdHMgMjoxCisJYWRkdwklZDUsJWQxCQl8YWRkIGluIExBTUJEQQorCWxzbHcJIzEsJWQxCQl8cHV0IHRoZW0gaW4gYml0cyAzOjEKKwl0c3RsCUxfU0NSMiglYTYpCXx0ZXN0IHNpZ24gb2Ygb3JpZ2luYWwgeAorCWJnZXMJeF9wb3MJCXxpZiBwb3MsIGRvbid0IHNldCBiaXQgMAorCWFkZHFsCSMxLCVkMQkJfGlmIG5lZywgc2V0IGJpdCAwCit4X3BvczoKKwlsZWFsCVJCRFRCTCwlYTIJfGxvYWQgcmJkdGJsIGJhc2UKKwltb3ZlYgkoJWEyLCVkMSksJWQzCXxsb2FkIGQzIHdpdGggbmV3IHJtb2RlCisJbHNsbAkjNCwlZDMJCXxwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwlmbW92ZWwJJWQzLCVmcGNyCQl8bG9hZCBiaXRzIGludG8gZnB1CisJbHNybAkjNCwlZDMJCXxwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwl0c3RiCSVkMwkJfGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKKwlibmVzCW5vdF9ybgkJfGlmIHplcm8sIGl0IGlzIFJOCisJbGVhbAlQVEVOUk4sJWExCXxsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQorCWJyYXMJcm1vZGUJCXxleGl0IGRlY29kZQorbm90X3JuOgorCWxzcmIJIzEsJWQzCQl8Z2V0IGxzYiBpbiBjYXJyeQorCWJjY3MJbm90X3JwCQl8aWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCisJbGVhbAlQVEVOUlAsJWExCXxsb2FkIGExIHdpdGggUlAgdGFibGUgYmFzZQorCWJyYXMJcm1vZGUJCXxleGl0IGRlY29kZQorbm90X3JwOgorCWxlYWwJUFRFTlJNLCVhMQl8bG9hZCBhMSB3aXRoIFJNIHRhYmxlIGJhc2UKK3Jtb2RlOgorCWNscmwJJWQzCQl8Y2xyIHRhYmxlIGluZGV4CitlX2xvb3A6CisJbHNybAkjMSwlZDAJCXxzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjcwllX25leHQJCXxpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVseAkoJWExLCVkMyksJWZwMQl8bXVsIGJ5IDEwKiooZDNfYml0X25vKQorZV9uZXh0OgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8dGVzdCBpZiBJU0NBTEUgaXMgemVybworCWJuZXMJZV9sb29wCQl8aWYgbm90LCBsb29wCisKKworfCBBOC4gQ2xyIElORVg7IEZvcmNlIFJaLgorfCAgICAgVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCit8ICAgICBSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQorfCAgICAgb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgorfCAgICAgdGhlIElORVggZmxhZyBmb3IgdXNlIGluIEExMC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorCisJZm1vdmVsCSMwLCVGUFNSCQl8Y2xyIElORVgKKwlmbW92ZWwJI3J6X21vZGUsJUZQQ1IJfHNldCBSWiByb3VuZGluZyBtb2RlCisKKworfCBBOS4gU2NhbGUgWCAtPiBZLgorfCAgICAgVGhlIG1hbnRpc3NhIGlzIHNjYWxlZCB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQKK3wgICAgIGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQgaW4gSU5FWDIuIElmIG11bCwKK3wgICAgIENoZWNrIGQyIGZvciBleGNlc3MgMTAgZXhwb25lbnRpYWwgdmFsdWUuICBJZiBub3QgemVybywKK3wgICAgIHRoZSBpc2NhbGUgdmFsdWUgd291bGQgaGF2ZSBjYXVzZWQgdGhlIHB3cnRlbiBjYWxjdWxhdGlvbgorfCAgICAgdG8gb3ZlcmZsb3cuICBPbmx5IGEgbmVnYXRpdmUgaXNjYWxlIGNhbiBjYXVzZSB0aGlzLCBzbworfCAgICAgbXVsdGlwbHkgYnkgMTBeKGQyKSwgd2hpY2ggaXMgbm93IG9ubHkgYWxsb3dlZCB0byBiZSAyNCwKK3wgICAgIHdpdGggYSBtdWx0aXBseSBieSAxMF44IGFuZCAxMF4xNiwgd2hpY2ggaXMgZXhhY3Qgc2luY2UKK3wgICAgIDEwXjI0IGlzIGV4YWN0LiAgSWYgdGhlIGlucHV0IHdhcyBkZW5vcm1hbGl6ZWQsIHdlIG11c3QKK3wgICAgIGNyZWF0ZSBhIGJ1c3kgc3RhY2sgZnJhbWUgd2l0aCB0aGUgbXVsIGNvbW1hbmQgYW5kIHRoZQorfCAgICAgdHdvIG9wZXJhbmRzLCBhbmQgYWxsb3cgdGhlIGZwdSB0byBjb21wbGV0ZSB0aGUgbXVsdGlwbHkuCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IEZQQ1Igd2l0aCBSWiBtb2RlL1VuY2hhbmdlZAorfAlkMjogMCBvciAyNC91bmNoYW5nZWQKK3wJZDM6IHgveAorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKK3wJYTE6IHB0ciB0byBQVEVOUk0gYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiB4L3gKK3wJZnAwOiBmbG9hdChJTE9HKS9YIGFkanVzdGVkIGZvciBTQ0FMRSAoWSkKK3wJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCit8CWZwMjogeC94Cit8CUZfU0NSMTp4L3gKK3wJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorfAlMX1NDUjE6eC94Cit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBOV9zdHI6CisJZm1vdmV4CSglYTApLCVmcDAJfGxvYWQgWCBmcm9tIG1lbW9yeQorCWZhYnN4CSVmcDAJCXx1c2UgYWJzKFgpCisJdHN0dwklZDUJCXxMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQorCWJuZQlzY19tdWwJCXxpZiBuZWcgKExBTUJEQSA9IDEpLCBzY2FsZSBieSBtdWwKKwlmZGl2eAklZnAxLCVmcDAJCXxjYWxjdWxhdGUgWCAvIFNDQUxFIC0+IFkgdG8gZnAwCisJYnJhcwlBMTBfc3QJCXxicmFuY2ggdG8gQTEwCisKK3NjX211bDoKKwl0c3RiCUJJTkRFQ19GTEcoJWE2KQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcXMJQTlfbm9ybQkJfGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggbXVsCisJZm1vdmVteCAlZnAxLSVmcDEsLSglYTcpCXxsb2FkIEVURU1QIHdpdGggMTBeSVNDQUxFCisJbW92ZWwJOCglYTApLC0oJWE3KQl8bG9hZCBGUFRFTVAgd2l0aCBpbnB1dCBhcmcKKwltb3ZlbAk0KCVhMCksLSglYTcpCisJbW92ZWwJKCVhMCksLSglYTcpCisJbW92ZWwJIzE4LCVkMwkJfGxvYWQgY291bnQgZm9yIGJ1c3kgc3RhY2sKK0E5X2xvb3A6CisJY2xybAktKCVhNykJCXxjbGVhciBsd29yZCBvbiBzdGFjaworCWRiZgklZDMsQTlfbG9vcAorCW1vdmViCVZFUl9UTVAoJWE2KSwoJWE3KSB8d3JpdGUgY3VycmVudCB2ZXJzaW9uIG51bWJlcgorCW1vdmViCSNCVVNZX1NJWkUtNCwxKCVhNykgfHdyaXRlIGN1cnJlbnQgYnVzeSBzaXplCisJbW92ZWIJIzB4MTAsMHg0NCglYTcpCXxzZXQgZmNlZnB0ZVsxNV0gYml0CisJbW92ZXcJIzB4MDAyMywweDQwKCVhNykJfGxvYWQgY21kcmVnMWIgd2l0aCBtdWwgY29tbWFuZAorCW1vdmViCSMweGZlLDB4OCglYTcpCXxsb2FkIGFsbCAxcyB0byBjdSBzYXZlcGMKKwlmcmVzdG9yZSAoJWE3KSsJCXxyZXN0b3JlIGZyYW1lIHRvIGZwdSBmb3IgY29tcGxldGlvbgorCWZtdWx4CTM2KCVhMSksJWZwMAl8bXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVseAk0OCglYTEpLCVmcDAJfG11bHRpcGx5IGZwMCBieSAxMF4xNgorCWJyYXMJQTEwX3N0CitBOV9ub3JtOgorCXRzdHcJJWQyCQl8dGVzdCBmb3Igc21hbGwgZXhwIGNhc2UKKwliZXFzCUE5X2NvbgkJfGlmIHplcm8sIGNvbnRpbnVlIGFzIG5vcm1hbAorCWZtdWx4CTM2KCVhMSksJWZwMAl8bXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVseAk0OCglYTEpLCVmcDAJfG11bHRpcGx5IGZwMCBieSAxMF4xNgorQTlfY29uOgorCWZtdWx4CSVmcDEsJWZwMAkJfGNhbGN1bGF0ZSBYICogU0NBTEUgLT4gWSB0byBmcDAKKworCit8IEExMC4gT3IgaW4gSU5FWC4KK3wgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCit8ICAgICAgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvIHRoZSBsc2Igb2YgWS4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogRlBDUiB3aXRoIFJaIG1vZGUvRlBTUiB3aXRoIElORVgyIGlzb2xhdGVkCit8CWQyOiB4L3gKK3wJZDM6IHgveAorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKK3wJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiB4L3B0ciB0byBGUF9TQ1IyKGE2KQorfAlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4L3gKKworQTEwX3N0OgorCWZtb3ZlbAklRlBTUiwlZDAJCXxnZXQgRlBTUgorCWZtb3ZleAklZnAwLEZQX1NDUjIoJWE2KQl8bW92ZSBZIHRvIG1lbW9yeQorCWxlYWwJRlBfU0NSMiglYTYpLCVhMgl8bG9hZCBhMiB3aXRoIHB0ciB0byBGUF9TQ1IyCisJYnRzdGwJIzksJWQwCQl8Y2hlY2sgaWYgSU5FWDIgc2V0CisJYmVxcwlBMTFfc3QJCXxpZiBjbGVhciwgc2tpcCByZXN0CisJb3JpbAkjMSw4KCVhMikJfG9yIGluIDEgdG8gbHNiIG9mIG1hbnRpc3NhCisJZm1vdmV4CUZQX1NDUjIoJWE2KSwlZnAwCXx3cml0ZSBhZGp1c3RlZCBZIGJhY2sgdG8gZnB1CisKKworfCBBMTEuIFJlc3RvcmUgb3JpZ2luYWwgRlBDUjsgc2V0IHNpemUgZXh0LgorfCAgICAgIFBlcmZvcm0gRklOVCBvcGVyYXRpb24gaW4gdGhlIHVzZXIncyByb3VuZGluZyBtb2RlLiAgS2VlcAorfCAgICAgIHRoZSBzaXplIHRvIGV4dGVuZGVkLiAgVGhlIHNpbnRkbyBlbnRyeSBwb2ludCBpbiB0aGUgc2ludAorfCAgICAgIHJvdXRpbmUgZXhwZWN0cyB0aGUgRlBDUiB2YWx1ZSB0byBiZSBpbiBVU0VSX0ZQQ1IgZm9yCit8ICAgICAgbW9kZSBhbmQgcHJlY2lzaW9uLiAgVGhlIG9yaWdpbmFsIEZQQ1IgaXMgc2F2ZWQgaW4gTF9TQ1IxLgorCitBMTFfc3Q6CisJbW92ZWwJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikgfHNhdmUgaXQgZm9yIGxhdGVyCisJYW5kaWwJIzB4MDAwMDAwMzAsVVNFUl9GUENSKCVhNikgfHNldCBzaXplIHRvIGV4dCwKK3wJCQkJCTtibG9jayBleGNlcHRpb25zCisKKworfCBBMTIuIENhbGN1bGF0ZSBZSU5UID0gRklOVChZKSBhY2NvcmRpbmcgdG8gdXNlcidzIHJvdW5kaW5nIG1vZGUuCit8ICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wJSW5wdXQvT3V0cHV0Cit8CWQwOiBGUFNSIHdpdGggQUlORVggY2xlYXJlZC9GUENSIHdpdGggc2l6ZSBzZXQgdG8gZXh0Cit8CWQyOiB4L3gvc2NyYXRjaAorfAlkMzogeC94Cit8CWQ0OiBMRU4vVW5jaGFuZ2VkCit8CWQ1OiBJQ1RSOkxBTUJEQS9VbmNoYW5nZWQKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9zcmMgcHRyIGZvciBzaW50ZG8KK3wJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiBwdHIgdG8gRlBfU0NSMihhNikvVW5jaGFuZ2VkCit8CWE2OiB0ZW1wIHBvaW50ZXIgdG8gRlBfU0NSMihhNikgLSBvcmlnIHZhbHVlIHNhdmVkIGFuZCByZXN0b3JlZAorfAlmcDA6IFkvWUlOVAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4L3gKK3wJRl9TQ1IxOngveAorfAlGX1NDUjI6WSBhZGp1c3RlZCBmb3IgaW5leC9ZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQKK3wJTF9TQ1IxOngvb3JpZ2luYWwgVVNFUl9GUENSCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTJfc3Q6CisJbW92ZW1sCSVkMC0lZDEvJWEwLSVhMSwtKCVhNykJfHNhdmUgcmVncyB1c2VkIGJ5IHNpbnRkMAorCW1vdmVsCUxfU0NSMSglYTYpLC0oJWE3KQorCW1vdmVsCUxfU0NSMiglYTYpLC0oJWE3KQorCWxlYWwJRlBfU0NSMiglYTYpLCVhMAkJfGEwIGlzIHB0ciB0byBGX1NDUjIoYTYpCisJZm1vdmV4CSVmcDAsKCVhMCkJCXxtb3ZlIFkgdG8gbWVtb3J5IGF0IEZQX1NDUjIoYTYpCisJdHN0bAlMX1NDUjIoJWE2KQkJfHRlc3Qgc2lnbiBvZiBvcmlnaW5hbCBvcGVyYW5kCisJYmdlcwlkb19maW50CQkJfGlmIHBvcywgdXNlIFkKKwlvcmwJIzB4ODAwMDAwMDAsKCVhMCkJCXxpZiBuZWcsIHVzZSAtWQorZG9fZmludDoKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKwlic3IJc2ludGRvCQkJfHNpbnQgcm91dGluZSByZXR1cm5zIGludCBpbiBmcDAKKwltb3ZlYgkoJWE3KSxVU0VSX0ZQU1IoJWE2KQorCWFkZGwJIzQsJWE3CisJbW92ZWwJKCVhNykrLExfU0NSMiglYTYpCisJbW92ZWwJKCVhNykrLExfU0NSMSglYTYpCisJbW92ZW1sCSglYTcpKywlZDAtJWQxLyVhMC0lYTEJfHJlc3RvcmUgcmVncyB1c2VkIGJ5IHNpbnQKKwltb3ZlbAlMX1NDUjIoJWE2KSxGUF9TQ1IyKCVhNikJfHJlc3RvcmUgb3JpZ2luYWwgZXhwb25lbnQKKwltb3ZlbAlMX1NDUjEoJWE2KSxVU0VSX0ZQQ1IoJWE2KSB8cmVzdG9yZSB1c2VyJ3MgRlBDUgorCisKK3wgQTEzLiBDaGVjayBmb3IgTEVOIGRpZ2l0cy4KK3wgICAgICBJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAorfCAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KK3wgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQorfCAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQorfCAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Cit8ICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKK3wgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KK3wgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KK3wKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogRlBDUiB3aXRoIHNpemUgc2V0IHRvIGV4dC9zY3JhdGNoIGZpbmFsID0gMAorfAlkMjogeC94Cit8CWQzOiB4L3NjcmF0Y2ggZmluYWwgPSB4Cit8CWQ0OiBMRU4vTEVOIGFkanVzdGVkCit8CWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorfAlkNjogSUxPRy9JTE9HIGFkanVzdGVkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorfAlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKK3wJYTI6IHB0ciB0byBGUF9TQ1IyKGE2KS9VbmNoYW5nZWQKK3wJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4LzEwXkxFTgorfAlGX1NDUjE6eC94Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTNfc3Q6CisJc3dhcAklZDUJCXxwdXQgSUNUUiBpbiBsb3dlciB3b3JkIG9mIGQ1CisJdHN0dwklZDUJCXxjaGVjayBpZiBJQ1RSID0gMAorCWJuZQlub3RfenIJCXxpZiBub24temVybywgZ28gdG8gc2Vjb25kIHRlc3QKK3wKK3wgQ29tcHV0ZSAxMF4oTEVOLTEpCit8CisJZm1vdmVzCUZPTkUsJWZwMgl8aW5pdCBmcDIgdG8gMS4wCisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAKKwlzdWJxbAkjMSwlZDAJCXxkMCA9IExFTiAtMQorCWNscmwJJWQzCQl8Y2xyIHRhYmxlIGluZGV4CitsX2xvb3A6CisJbHNybAkjMSwlZDAJCXxzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjcwlsX25leHQJCXxpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVseAkoJWExLCVkMyksJWZwMgl8bXVsIGJ5IDEwKiooZDNfYml0X25vKQorbF9uZXh0OgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8dGVzdCBpZiBMRU4gaXMgemVybworCWJuZXMJbF9sb29wCQl8aWYgbm90LCBsb29wCit8Cit8IDEwXkxFTi0xIGlzIGNvbXB1dGVkIGZvciB0aGlzIHRlc3QgYW5kIEExNC4gIElmIHRoZSBpbnB1dCB3YXMKK3wgZGVub3JtYWxpemVkLCBjaGVjayBvbmx5IHRoZSBjYXNlIGluIHdoaWNoIFlJTlQgPiAxMF5MRU4uCit8CisJdHN0YglCSU5ERUNfRkxHKCVhNikJfGNoZWNrIGlmIGlucHV0IHdhcyBub3JtCisJYmVxcwlBMTNfY29uCQl8aWYgbm9ybSwgY29udGludWUgd2l0aCBjaGVja2luZworCWZhYnN4CSVmcDAJCXx0YWtlIGFicyBvZiBZSU5UCisJYnJhCXRlc3RfMgorfAorfCBDb21wYXJlIGFicyhZSU5UKSB0byAxMF4oTEVOLTEpIGFuZCAxMF5MRU4KK3wKK0ExM19jb246CisJZmFic3gJJWZwMAkJfHRha2UgYWJzIG9mIFlJTlQKKwlmY21weAklZnAyLCVmcDAJCXxjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXihMRU4tMSkKKwlmYmdlCXRlc3RfMgkJfGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAorCXN1YnFsCSMxLCVkNgkJfHN1YnRyYWN0IDEgZnJvbSBJTE9HCisJbW92ZXcJIzEsJWQ1CQl8c2V0IElDVFIKKwlmbW92ZWwJI3JtX21vZGUsJUZQQ1IJfHNldCBybW9kZSB0byBSTQorCWZtdWxzCUZURU4sJWZwMgl8Y29tcHV0ZSAxMF5MRU4KKwlicmEJQTZfc3RyCQl8cmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAordGVzdF8yOgorCWZtdWxzCUZURU4sJWZwMgl8Y29tcHV0ZSAxMF5MRU4KKwlmY21weAklZnAyLCVmcDAJCXxjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXkxFTgorCWZibHQJQTE0X3N0CQl8aWYgbGVzcywgYWxsIGlzIG9rLCBnbyB0byBBMTQKKwlmYmd0CWZpeF9leAkJfGlmIGdyZWF0ZXIsIGZpeCBhbmQgcmVkbworCWZkaXZzCUZURU4sJWZwMAl8aWYgZXF1YWwsIGRpdmlkZSBieSAxMAorCWFkZHFsCSMxLCVkNgkJfCBhbmQgaW5jIElMT0cKKwlicmFzCUExNF9zdAkJfCBhbmQgY29udGludWUgZWxzZXdoZXJlCitmaXhfZXg6CisJYWRkcWwJIzEsJWQ2CQl8aW5jcmVtZW50IElMT0cgYnkgMQorCW1vdmV3CSMxLCVkNQkJfHNldCBJQ1RSCisJZm1vdmVsCSNybV9tb2RlLCVGUENSCXxzZXQgcm1vZGUgdG8gUk0KKwlicmEJQTZfc3RyCQl8cmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAorfAorfCBTaW5jZSBJQ1RSIDw+IDAsIHdlIGhhdmUgYWxyZWFkeSBiZWVuIHRocm91Z2ggb25lIGFkanVzdG1lbnQsCit8IGFuZCBzaG91bGRuJ3QgaGF2ZSBhbm90aGVyOyB0aGlzIGlzIHRvIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgorfCAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCit8IHZhbHVlIGNhbGN1bGF0ZWQgY2Fubm90IGJlIGluZXhhY3QuCit8Citub3RfenI6CisJZm1vdmVzCUZPTkUsJWZwMgl8aW5pdCBmcDIgdG8gMS4wCisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAKKwljbHJsCSVkMwkJfGNsciB0YWJsZSBpbmRleAorel9sb29wOgorCWxzcmwJIzEsJWQwCQl8c2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjY3MJel9uZXh0CQl8aWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bHgJKCVhMSwlZDMpLCVmcDIJfG11bCBieSAxMCoqKGQzX2JpdF9ubykKK3pfbmV4dDoKKwlhZGRsCSMxMiwlZDMJCXxpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3RsCSVkMAkJfHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmVzCXpfbG9vcAkJfGlmIG5vdCwgbG9vcAorCWZhYnN4CSVmcDAJCXxnZXQgYWJzKFlJTlQpCisJZmNtcHgJJWZwMiwlZnAwCQl8Y2hlY2sgaWYgYWJzKFlJTlQpID0gMTBeTEVOCisJZmJuZQlBMTRfc3QJCXxpZiBub3QsIHNraXAgdGhpcworCWZkaXZzCUZURU4sJWZwMAl8ZGl2aWRlIGFicyhZSU5UKSBieSAxMAorCWFkZHFsCSMxLCVkNgkJfGFuZCBpbmMgSUxPRyBieSAxCisJYWRkcWwJIzEsJWQ0CQl8IGFuZCBpbmMgTEVOCisJZm11bHMJRlRFTiwlZnAyCXwgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgorCisKK3wgQTE0LiBDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCit8ICAgICAgVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0Cit8ICAgICAgbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMKK3wgICAgICB0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAorfCAgICAgIHN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCit8ICAgICAgVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgorfCAgICAgIHRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCit8Cit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IHgvTEVOIGNhbGwgdG8gYmluc3RyIC0gZmluYWwgaXMgMAorfAlkMTogeC8wCit8CWQyOiB4L21zIDMyLWJpdHMgb2YgbWFudCBvZiBhYnMoWUlOVCkKK3wJZDM6IHgvbHMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKK3wJZDY6IElMT0cKK3wJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorfAlhMDogcG9pbnRlciBpbnRvIG1lbW9yeSBmb3IgcGFja2VkIGJjZCBzdHJpbmcgZm9ybWF0aW9uCit8CSAgICAvcHRyIHRvIGZpcnN0IG1hbnRpc3NhIGJ5dGUgaW4gcmVzdWx0IHN0cmluZworfAlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKK3wJYTI6IHB0ciB0byBGUF9TQ1IyKGE2KS9VbmNoYW5nZWQKK3wJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTp4L1dvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTRfc3Q6CisJZm1vdmVsCSNyel9tb2RlLCVGUENSCXxmb3JjZSByeiBmb3IgY29udmVyc2lvbgorCWZkaXZ4CSVmcDIsJWZwMAkJfGRpdmlkZSBhYnMoWUlOVCkgYnkgMTBeTEVOCisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCisJZm1vdmV4CSVmcDAsKCVhMCkJfG1vdmUgYWJzKFlJTlQpLzEwXkxFTiB0byBtZW1vcnkKKwltb3ZlbAk0KCVhMCksJWQyCXxtb3ZlIDJuZCB3b3JkIG9mIEZQX1JFUyB0byBkMgorCW1vdmVsCTgoJWEwKSwlZDMJfG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCisJY2xybAk0KCVhMCkJCXx6ZXJvIHdvcmQgMiBvZiBGUF9SRVMKKwljbHJsCTgoJWEwKQkJfHplcm8gd29yZCAzIG9mIEZQX1JFUworCW1vdmVsCSglYTApLCVkMAkJfG1vdmUgZXhwb25lbnQgdG8gZDAKKwlzd2FwCSVkMAkJfHB1dCBleHBvbmVudCBpbiBsb3dlciB3b3JkCisJYmVxcwlub19zZnQJCXxpZiB6ZXJvLCBkb24ndCBzaGlmdAorCXN1YmlsCSMweDNmZmQsJWQwCXxzdWIgYmlhcyBsZXNzIDIgdG8gbWFrZSBmcmFjdAorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgPiAxCisJYmd0cwlub19zZnQJCXxpZiBzbywgZG9uJ3Qgc2hpZnQKKwluZWdsCSVkMAkJfG1ha2UgZXhwIHBvc2l0aXZlCittX2xvb3A6CisJbHNybAkjMSwlZDIJCXxzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCisJcm94cmwJIzEsJWQzCQl8dGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYJJWQwLG1fbG9vcAl8Z2l2ZW4gaW4gZDAKK25vX3NmdDoKKwl0c3RsCSVkMgkJfGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCisJYm5lcwlub196cgkJfGlmIG5vdCwgZ28gb24KKwl0c3RsCSVkMwkJfGNvbnRpbnVlIHplcm8gY2hlY2sKKwliZXFzCXplcl9tCQl8aWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCitub196cjoKKwljbHJsCSVkMQkJfHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkaWwJIzB4MDAwMDAwODAsJWQzCXxpbmMgYXQgYml0IDcKKwlhZGR4bAklZDEsJWQyCQl8Y29udGludWUgaW5jCisJYW5kaWwJIzB4ZmZmZmZmODAsJWQzCXxzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgoremVyX206CisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJYWRkcWwJIzMsJWEwCQl8YTAgcG9pbnRzIHRvIE0xNiBieXRlIGluIHJlc3VsdAorCWJzcgliaW5zdHIJCXxjYWxsIGJpbnN0ciB0byBjb252ZXJ0IG1hbnQKKworCit8IEExNS4gQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorfCAgICAgIEFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUKK3wgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgorfAorfCAgICAgIERpZ2l0cyBhcmUgc3RvcmVkIGluIExfU0NSMShhNikgb24gcmV0dXJuIGZyb20gQklOREVDIGFzOgorfAorfAkgMzIgICAgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICAgICAwCit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8CXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8Cit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8IEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjEuICBJZiBkaWdpdCBlNAorfCBpcyBub24temVybywgT1BFUlIgaXMgc2lnbmFsZWQuICBJbiBhbGwgY2FzZXMsIGFsbCA0IGRpZ2l0cyBhcmUKK3wgd3JpdHRlbiBhcyBzcGVjaWZpZWQgaW4gdGhlIDg4MS84ODIgbWFudWFsIGZvciBwYWNrZWQgZGVjaW1hbC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCit8CWQxOiB4L3NjcmF0Y2ggKDApO3NoaWZ0IGNvdW50IGZvciBmaW5hbCBleHBvbmVudCBwYWNraW5nCit8CWQyOiB4L21zIDMyLWJpdHMgb2YgZXhwIGZyYWN0aW9uL3NjcmF0Y2gKK3wJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KK3wJZDQ6IExFTi9VbmNoYW5nZWQKK3wJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCit8CWQ2OiBJTE9HCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciB0byByZXN1bHQgc3RyaW5nL3B0ciB0byBMX1NDUjEoYTYpCit8CWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorfAlhMjogcHRyIHRvIEZQX1NDUjIoYTYpL1VuY2hhbmdlZAorfAlmcDA6IGFicyhZSU5UKSBhZGp1c3RlZC9mbG9hdChJTE9HKQorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTpXb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdC9CQ0QgcmVzdWx0Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40Cit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvRXhwb25lbnQgZGlnaXRzIG9uIHJldHVybiBmcm9tIGJpbnN0cgorfAlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE1X3N0OgorCXRzdGIJQklOREVDX0ZMRyglYTYpCXxjaGVjayBmb3IgZGVub3JtCisJYmVxcwlub3RfZGVub3JtCisJZnRzdHgJJWZwMAkJfHRlc3QgZm9yIHplcm8KKwlmYmVxCWRlbl96ZXJvCXxpZiB6ZXJvLCB1c2Ugay1mYWN0b3Igb3IgNDkzMworCWZtb3ZlbAklZDYsJWZwMAkJfGZsb2F0IElMT0cKKwlmYWJzeAklZnAwCQl8Z2V0IGFicyBvZiBJTE9HCisJYnJhcwljb252cnQKK2Rlbl96ZXJvOgorCXRzdGwJJWQ3CQl8Y2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKKwlibHRzCXVzZV9pbG9nCXxpZiBuZWdhdGl2ZSwgdXNlIElMT0cKKwlmbW92ZXMJRjQ5MzMsJWZwMAl8Zm9yY2UgZXhwb25lbnQgdG8gNDkzMworCWJyYXMJY29udnJ0CQl8ZG8gaXQKK3VzZV9pbG9nOgorCWZtb3ZlbAklZDYsJWZwMAkJfGZsb2F0IElMT0cKKwlmYWJzeAklZnAwCQl8Z2V0IGFicyBvZiBJTE9HCisJYnJhcwljb252cnQKK25vdF9kZW5vcm06CisJZnRzdHgJJWZwMAkJfHRlc3QgZm9yIHplcm8KKwlmYm5lCW5vdF96ZXJvCXxpZiB6ZXJvLCBmb3JjZSBleHBvbmVudAorCWZtb3ZlcwlGT05FLCVmcDAJfGZvcmNlIGV4cG9uZW50IHRvIDEKKwlicmFzCWNvbnZydAkJfGRvIGl0Citub3RfemVybzoKKwlmbW92ZWwJJWQ2LCVmcDAJCXxmbG9hdCBJTE9HCisJZmFic3gJJWZwMAkJfGdldCBhYnMgb2YgSUxPRworY29udnJ0OgorCWZkaXZ4CTI0KCVhMSksJWZwMAl8Y29tcHV0ZSBJTE9HLzEwXjQKKwlmbW92ZXgJJWZwMCxGUF9TQ1IyKCVhNikJfHN0b3JlIGZwMCBpbiBtZW1vcnkKKwltb3ZlbAk0KCVhMiksJWQyCXxtb3ZlIHdvcmQgMiB0byBkMgorCW1vdmVsCTgoJWEyKSwlZDMJfG1vdmUgd29yZCAzIHRvIGQzCisJbW92ZXcJKCVhMiksJWQwCQl8bW92ZSBleHAgdG8gZDAKKwliZXFzCXhfbG9vcF9maW4JfGlmIHplcm8sIHNraXAgdGhlIHNoaWZ0CisJc3ViaXcJIzB4M2ZmZCwlZDAJfHN1YnRyYWN0IG9mZiBiaWFzCisJbmVndwklZDAJCXxtYWtlIGV4cCBwb3NpdGl2ZQoreF9sb29wOgorCWxzcmwJIzEsJWQyCQl8c2hpZnQgZDI6ZDMgcmlnaHQKKwlyb3hybAkjMSwlZDMJCXx0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZgklZDAseF9sb29wCXxnaXZlbiBpbiBkMAoreF9sb29wX2ZpbjoKKwljbHJsCSVkMQkJfHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkaWwJIzB4MDAwMDAwODAsJWQzCXxpbmMgYXQgYml0IDYKKwlhZGR4bAklZDEsJWQyCQl8Y29udGludWUgaW5jCisJYW5kaWwJIzB4ZmZmZmZmODAsJWQzCXxzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgorCW1vdmVsCSM0LCVkMAkJfHB1dCA0IGluIGQwIGZvciBiaW5zdHIgY2FsbAorCWxlYWwJTF9TQ1IxKCVhNiksJWEwCXxhMCBpcyBwdHIgdG8gTF9TQ1IxIGZvciBleHAgZGlnaXRzCisJYnNyCWJpbnN0cgkJfGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCisJbW92ZWwJTF9TQ1IxKCVhNiksJWQwCXxsb2FkIExfU0NSMSBsd29yZCB0byBkMAorCW1vdmVsCSMxMiwlZDEJCXx1c2UgZDEgZm9yIHNoaWZ0IGNvdW50CisJbHNybAklZDEsJWQwCQl8c2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyM0OiMxMn0gfHB1dCBlMzplMjplMSBpbiBGUF9TQ1IxCisJbHNybAklZDEsJWQwCQl8c2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyMxNjojNH0gfHB1dCBlNCBpbiBGUF9TQ1IxCisJdHN0YgklZDAJCXxjaGVjayBpZiBlNCBpcyB6ZXJvCisJYmVxcwlBMTZfc3QJCXxpZiB6ZXJvLCBza2lwIHJlc3QKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisKKworfCBBMTYuIFdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCit8CSAgIFNpZ21hIGlzIGJpdCAzMSBvZiBpbml0aWFsIHZhbHVlOyBSSE8gaXMgYml0IDMxIG9mIGQ2IChJTE9HKS4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAorfAlkMjogeC94Cit8CWQzOiB4L3gKK3wJZDQ6IExFTi9VbmNoYW5nZWQKK3wJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCit8CWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKK3wJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorfAlhMDogcHRyIHRvIExfU0NSMShhNikvVW5jaGFuZ2VkCit8CWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorfAlhMjogcHRyIHRvIEZQX1NDUjIoYTYpL1VuY2hhbmdlZAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTpCQ0QgcmVzdWx0IHdpdGggY29ycmVjdCBzaWducworfAlGX1NDUjI6SUxPRy8xMF40Cit8CUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTZfc3Q6CisJY2xybAklZDAJCXxjbHIgZDAgZm9yIGNvbGxlY3Rpb24gb2Ygc2lnbnMKKwlhbmRpYgkjMHgwZixGUF9TQ1IxKCVhNikgfGNsZWFyIGZpcnN0IG5pYmJsZSBvZiBGUF9TQ1IxCisJdHN0bAlMX1NDUjIoJWE2KQl8Y2hlY2sgc2lnbiBvZiBvcmlnaW5hbCBtYW50aXNzYQorCWJnZXMJbWFudF9wCQl8aWYgcG9zLCBkb24ndCBzZXQgU00KKwltb3ZlcWwJIzIsJWQwCQl8bW92ZSAyIGluIHRvIGQwIGZvciBTTQorbWFudF9wOgorCXRzdGwJJWQ2CQl8Y2hlY2sgc2lnbiBvZiBJTE9HCisJYmdlcwl3cl9zZ24JCXxpZiBwb3MsIGRvbid0IHNldCBTRQorCWFkZHFsCSMxLCVkMAkJfHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKK3dyX3NnbjoKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyMwOiMyfSB8aW5zZXJ0IFNNIGFuZCBTRSBpbnRvIEZQX1NDUjEKKworfCBDbGVhbiB1cCBhbmQgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzIHVzZWQuCisKKwlmbW92ZWwJIzAsJUZQU1IJCXxjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCisJZm1vdmVteCAoJWE3KSssJWZwMC0lZnAyCisJbW92ZW1sCSglYTcpKywlZDItJWQ3LyVhMgorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvYmluc3RyLlMgYi9hcmNoL202OGsvZnBzcDA0MC9iaW5zdHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTM1NTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvYmluc3RyLlMKQEAgLTAsMCArMSwxNDAgQEAKK3wKK3wJYmluc3RyLnNhIDMuMyAxMi8xOS85MAorfAorfAorfAlEZXNjcmlwdGlvbjogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgorfAorfAlJbnB1dDogNjQtYml0IGJpbmFyeSBpbnRlZ2VyIGluIGQyOmQzLCBkZXNpcmVkIGxlbmd0aCAoTEVOKSBpbgorfCAgICAgICAgICBkMCwgYW5kIGEgIHBvaW50ZXIgdG8gc3RhcnQgaW4gbWVtb3J5IGZvciBiY2QgY2hhcmFjdGVycworfCAgICAgICAgICBpbiBkMC4gKFRoaXMgcG9pbnRlciBtdXN0IHBvaW50IHRvIGJ5dGUgNCBvZiB0aGUgZmlyc3QKK3wgICAgICAgICAgbHdvcmQgb2YgdGhlIHBhY2tlZCBkZWNpbWFsIG1lbW9yeSBzdHJpbmcuKQorfAorfAlPdXRwdXQ6CUxFTiBiY2QgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgNjQtYml0IGludGVnZXIuCit8Cit8CUFsZ29yaXRobToKK3wJCVRoZSA2NC1iaXQgYmluYXJ5IGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGRlY2ltYWwgcG9pbnQgYmVmb3JlCit8CQliaXQgNjMuICBUaGUgZnJhY3Rpb24gaXMgbXVsdGlwbGllZCBieSAxMCB1c2luZyBhIG11bCBieSAyCit8CQlzaGlmdCBhbmQgYSBtdWwgYnkgOCBzaGlmdC4gIFRoZSBiaXRzIHNoaWZ0ZWQgb3V0IG9mIHRoZQorfAkJbXNiIGZvcm0gYSBkZWNpbWFsIGRpZ2l0LiAgVGhpcyBwcm9jZXNzIGlzIGl0ZXJhdGVkIHVudGlsCit8CQlMRU4gZGlnaXRzIGFyZSBmb3JtZWQuCit8Cit8CUExLiBJbml0IGQ3IHRvIDEuICBENyBpcyB0aGUgYnl0ZSBkaWdpdCBjb3VudGVyLCBhbmQgaWYgMSwgdGhlCit8CQlkaWdpdCBmb3JtZWQgd2lsbCBiZSBhc3N1bWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudC4gIFRoaXMgaXMKK3wJCXRvIGZvcmNlIHRoZSBmaXJzdCBieXRlIGZvcm1lZCB0byBoYXZlIGEgMCBpbiB0aGUgdXBwZXIgNCBiaXRzLgorfAorfAlBMi4gQmVnaW5uaW5nIG9mIHRoZSBsb29wOgorfAkJQ29weSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgdG8gZDQ6ZDUuCit8Cit8CUEzLiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgYnkgOCB1c2luZyBiaXQtZmllbGQKK3wJCWV4dHJhY3RzIGFuZCBzaGlmdHMuICBUaGUgdGhyZWUgbXNicyBmcm9tIGQyIHdpbGwgZ28gaW50bworfAkJZDEuCit8Cit8CUE0LiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDQ6ZDUgYnkgMiB1c2luZyBzaGlmdHMuICBUaGUgbXNiCit8CQl3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCit8Cit8CUE1LiBBZGQgdXNpbmcgdGhlIGNhcnJ5IHRoZSA2NC1iaXQgcXVhbnRpdGllcyBpbiBkMjpkMyBhbmQgZDQ6ZDUKK3wJCWludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCit8Cit8CUE2LiBUZXN0IGQ3LiAgSWYgemVybywgdGhlIGRpZ2l0IGZvcm1lZCBpcyB0aGUgbXMgZGlnaXQuICBJZiBub24tCit8CQl6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUKK3wJCXVwcGVyIHdvcmQgb2YgZDAuICBJZiBpdCBpcyB0aGUgbHMgZGlnaXQsIHdyaXRlIHRoZSB3b3JkCit8CQlmcm9tIGQwIHRvIG1lbW9yeS4KK3wKK3wJQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4KK3wKK3wJSW1wbGVtZW50YXRpb24gTm90ZXM6Cit8Cit8CVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKK3wKK3wJCWQwOiBMRU4gY291bnRlcgorfAkJZDE6IHRlbXAgdXNlZCB0byBmb3JtIHRoZSBkaWdpdAorfAkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSA4Cit8CQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKK3wJCWQ0OiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgorfAkJZDU6IGxvd2VyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCit8CQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCit8CQlkNzogYnl0ZSBkaWdpdCBmb3JtYXRpb24gd29yZDtkaWdpdCBjb3VudCB7MCwxfQorfAkJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8QklOU1RSICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCS5nbG9iYWwJYmluc3RyCitiaW5zdHI6CisJbW92ZW1sCSVkMC0lZDcsLSglYTcpCit8Cit8IEExOiBJbml0IGQ3Cit8CisJbW92ZXFsCSMxLCVkNwkJCXxpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKKwlzdWJxbAkjMSwlZDAJCQl8Zm9yIGRiZiBkMCB3b3VsZCBoYXZlIExFTisxIHBhc3NlcworfAorfCBBMi4gQ29weSBkMjpkMyB0byBkNDpkNS4gIFN0YXJ0IGxvb3AuCit8Citsb29wOgorCW1vdmVsCSVkMiwlZDQJCQl8Y29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKKwltb3ZlbAklZDMsJWQ1CQkJfHRvIGQ0OmQ1Cit8Cit8IEEzLiBNdWx0aXBseSBkMjpkMyBieSA4OyBleHRyYWN0IG1zYnMgaW50byBkMS4KK3wKKwliZmV4dHUJJWQyeyMwOiMzfSwlZDEJCXxjb3B5IDMgbXNicyBvZiBkMiBpbnRvIGQxCisJYXNsbAkjMywlZDIJCQl8c2hpZnQgZDIgbGVmdCBieSAzIHBsYWNlcworCWJmZXh0dQklZDN7IzA6IzN9LCVkNgkJfGNvcHkgMyBtc2JzIG9mIGQzIGludG8gZDYKKwlhc2xsCSMzLCVkMwkJCXxzaGlmdCBkMyBsZWZ0IGJ5IDMgcGxhY2VzCisJb3JsCSVkNiwlZDIJCQl8b3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKK3wKK3wgQTQuIE11bHRpcGx5IGQ0OmQ1IGJ5IDI7IGFkZCBjYXJyeSBvdXQgdG8gZDEuCit8CisJYXNsbAkjMSwlZDUJCQl8bXVsIGQ1IGJ5IDIKKwlyb3hsbAkjMSwlZDQJCQl8bXVsIGQ0IGJ5IDIKKwlzd2FwCSVkNgkJCXxwdXQgMCBpbiBkNiBsb3dlciB3b3JkCisJYWRkeHcJJWQ2LCVkMQkJCXxhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKK3wKK3wgQTUuIEFkZCBtdWwgYnkgOCB0byBtdWwgYnkgMi4gIEQxIGNvbnRhaW5zIHRoZSBkaWdpdCBmb3JtZWQuCit8CisJYWRkbAklZDUsJWQzCQkJfGFkZCBsb3dlciAzMiBiaXRzCisJbm9wCQkJCXxFUlJBVEEgOyBGSVggIzEzIChSZXYuIDEuMiA2LzYvOTApCisJYWRkeGwJJWQ0LCVkMgkJCXxhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cworCW5vcAkJCQl8RVJSQVRBIDsgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHh3CSVkNiwlZDEJCQl8YWRkIGluIGV4dGVuZCBmcm9tIGFkZCB0byBkMQorCXN3YXAJJWQ2CQkJfHdpdGggZDYgPSAwOyBwdXQgMCBpbiB1cHBlciB3b3JkCit8Cit8IEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCit8CisJdHN0dwklZDcJCQl8aWYgemVybywgc3RvcmUgZGlnaXQgJiB0byBsb29wCisJYmVxcwlmaXJzdF9kCQkJfGlmIG5vbi16ZXJvLCBmb3JtIGJ5dGUgJiB3cml0ZQorc2VjX2Q6CisJc3dhcAklZDcJCQl8YnJpbmcgZmlyc3QgZGlnaXQgdG8gd29yZCBkN2IKKwlhc2x3CSM0LCVkNwkJCXxmaXJzdCBkaWdpdCBpbiB1cHBlciA0IGJpdHMgZDdiCisJYWRkdwklZDEsJWQ3CQkJfGFkZCBpbiBscyBkaWdpdCB0byBkN2IKKwltb3ZlYgklZDcsKCVhMCkrCQl8c3RvcmUgZDdiIGJ5dGUgaW4gbWVtb3J5CisJc3dhcAklZDcJCQl8cHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCisJY2xydwklZDcJCQl8c2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKKwlkYmYJJWQwLGxvb3AJCXxkbyBsb29wIHNvbWUgbW9yZSEKKwlicmFzCWVuZF9ic3RyCQl8ZmluaXNoZWQsIHNvIGV4aXQKK2ZpcnN0X2Q6CisJc3dhcAklZDcJCQl8cHV0IGRpZ2l0IHdvcmQgaW4gZDdiCisJbW92ZXcJJWQxLCVkNwkJCXxwdXQgbmV3IGRpZ2l0IGluIGQ3YgorCXN3YXAJJWQ3CQkJfHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWFkZHF3CSMxLCVkNwkJCXxzZXQgZDdhIHRvIHNpZ25hbCBmaXJzdCBkaWdpdCBkb25lCisJZGJmCSVkMCxsb29wCQl8ZG8gbG9vcCBzb21lIG1vcmUhCisJc3dhcAklZDcJCQl8cHV0IGxhc3QgZGlnaXQgaW4gc3RyaW5nCisJbHNsdwkjNCwlZDcJCQl8bW92ZSBpdCB0byB1cHBlciA0IGJpdHMKKwltb3ZlYgklZDcsKCVhMCkrCQl8c3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZworfAorfCBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KK3wKK2VuZF9ic3RyOgorCW1vdmVtbAkoJWE3KSssJWQwLSVkNworCXJ0cworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL2J1Z2ZpeC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvYnVnZml4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyYzRmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2J1Z2ZpeC5TCkBAIC0wLDAgKzEsNDk2IEBACit8Cit8CWJ1Z2ZpeC5zYSAzLjIgMS8zMS85MQorfAorfAorfAlUaGlzIGZpbGUgY29udGFpbnMgd29ya2Fyb3VuZHMgZm9yIGJ1Z3MgaW4gdGhlIDA0MAorfAlyZWxhdGluZyB0byB0aGUgRmxvYXRpbmctUG9pbnQgU29mdHdhcmUgUGFja2FnZSAoRlBTUCkKK3wKK3wJRml4ZXMgZm9yIGJ1Z3M6IDEyMzgKK3wKK3wJQnVnOiAxMjM4Cit8Cit8Cit8ICAgIC8qIFRoZSBmb2xsb3dpbmcgZGlydHlfYml0IGNsZWFyIHNob3VsZCBiZSBsZWZ0IGluCit8ICAgICAqIHRoZSBoYW5kbGVyIHBlcm1hbmVudGx5IHRvIGltcHJvdmUgdGhyb3VnaHB1dC4KK3wgICAgICogVGhlIGRpcnR5X2JpdHMgYXJlIGxvY2F0ZWQgYXQgYml0cyBbMjM6MTZdIGluCit8ICAgICAqIGxvbmd3b3JkICQwOCBpbiB0aGUgYnVzeSBmcmFtZSAkNHg2MC4gIEJpdCAxNgorfCAgICAgKiBjb3JyZXNwb25kcyB0byBGUDAsIGJpdCAxNyBjb3JyZXNwb25kcyB0byBGUDEsCit8ICAgICAqIGFuZCBzbyBvbi4KK3wgICAgICovCit8ICAgIGlmICAoRTNfZXhjZXB0aW9uX2p1c3Rfc2VydmljZWQpICAgeworfCAgICAgICAgIGRpcnR5X2JpdFtjbWRyZWczYls5OjddXSA9IDA7Cit8ICAgICAgICAgfQorfAorfCAgICBpZiAgKGZzYXZlX2Zvcm1hdF92ZXJzaW9uICE9ICQ0MCkgIHtnb3RvIE5PRklYfQorfAorfCAgICBpZiAhKEUzX2V4Y2VwdGlvbl9qdXN0X3NlcnZpY2VkKSAgIHtnb3RvIE5PRklYfQorfCAgICBpZiAgKGN1cGMgPT0gMDAwMDAwMCkgICAgICAgICAgICAgIHtnb3RvIE5PRklYfQorfCAgICBpZiAgKChjbWRyZWcxYlsxNToxM10gIT0gMDAwKSAmJgorfCAgICAgICAgIChjbWRyZWcxYlsxNToxMF0gIT0gMDEwMDAxKSkgIHtnb3RvIE5PRklYfQorfCAgICBpZiAoKChjbWRyZWcxYlsxNToxM10gIT0gMDAwKSB8fCAoKGNtZHJlZzFiWzEyOjEwXSAhPSBjbWRyZWcyYls5OjddKSAmJgorfAkJCQkgICAgICAoY21kcmVnMWJbMTI6MTBdICE9IGNtZHJlZzNiWzk6N10pKSAgKSAmJgorfAkgKChjbWRyZWcxYlsgOTogN10gIT0gY21kcmVnMmJbOTo3XSkgJiYKK3wJICAoY21kcmVnMWJbIDk6IDddICE9IGNtZHJlZzNiWzk6N10pKSApICB7Z290byBOT0ZJWH0KK3wKK3wgICAgLyogTm90ZTogZm9yIDZkNDNiIG9yIDhkNDNiLCB5b3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgY29kZQorfCAgICAgKiB0byBnZXQgYmV0dGVyIGNvdmVyYWdlLiAgKElmIHlvdSBkbyBub3QgaW5zZXJ0IHRoaXMgY29kZSwgdGhlIHBhcnQKK3wgICAgICogd29uJ3QgbG9jayB1cDsgaXQgd2lsbCBzaW1wbHkgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIuKQorfCAgICAgKiBEbyBOT1QgaW5zZXJ0IHRoaXMgY29kZSBmb3IgMTBkNDNiIG9yIGxhdGVyIHBhcnRzLgorfCAgICAgKgorfCAgICAgKiAgaWYgKGZwaWFyY3UgPT0gaW50ZWdlciBzdGFjayByZXR1cm4gYWRkcmVzcykgeworfCAgICAgKiAgICAgICBjdXBjID0gMDAwMDAwMDsKK3wgICAgICogICAgICAgZ290byBOT0ZJWDsKK3wgICAgICogICAgICAgfQorfCAgICAgKi8KK3wKK3wgICAgaWYgKGNtZHJlZzFiWzE1OjEzXSAhPSAwMDApICAge2dvdG8gRklYX09QQ0xBU1MyfQorfCAgICBGSVhfT1BDTEFTUzA6Cit8ICAgIGlmICgoKGNtZHJlZzFiWzEyOjEwXSA9PSBjbWRyZWcyYls5OjddKSB8fAorfAkgKGNtZHJlZzFiWyA5OiA3XSA9PSBjbWRyZWcyYls5OjddKSkgJiYKK3wJKGNtZHJlZzFiWzEyOjEwXSAhPSBjbWRyZWczYls5OjddKSAmJgorfAkoY21kcmVnMWJbIDk6IDddICE9IGNtZHJlZzNiWzk6N10pKSAgeyAgLyogeHUgY29uZmxpY3Qgb25seSAqLworfAkvKiBXZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpZiB0aGVyZSBpcyBhbgorfAkgICB4dSBjb25mbGljdCBhbmQgTk9UIGFuIG51IGNvbmZsaWN0ICovCit8Cit8CS8qIGZpcnN0IHNhdmUgc29tZSB2YWx1ZXMgb24gdGhlIGZzYXZlIGZyYW1lICovCit8CXN0YWdfdGVtcCAgICAgPSBTVEFHW2ZzYXZlX2ZyYW1lXTsKK3wJY21kcmVnMWJfdGVtcCA9IENNRFJFRzFCW2ZzYXZlX2ZyYW1lXTsKK3wJZHRhZ190ZW1wICAgICA9IERUQUdbZnNhdmVfZnJhbWVdOworfAlldGUxNV90ZW1wICAgID0gRVRFMTVbZnNhdmVfZnJhbWVdOworfAorfAlDVVBDW2ZzYXZlX2ZyYW1lXSA9IDAwMDAwMDA7Cit8CUZSRVNUT1JFCit8CUZTQVZFCit8Cit8CS8qIElmIHRoZSB4dSBpbnN0cnVjdGlvbiBpcyBleGNlcHRpb25hbCwgd2UgcHVudC4KK3wJICogT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIHRvIGluY2x1ZGUgT1ZGTC9VTkZMIGhhbmRsZXIKK3wJICogY29kZSBoZXJlIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuCit8CSAqLworfAlpZiAoZnNhdmVfZnJhbWVfZm9ybWF0ID09ICQ0MDYwKSB7Z290byBLSUxMX1BST0NFU1N9Cit8Cit8CWZzYXZlX2ZyYW1lID0gLyogYnVpbGQgYSBsb25nIGZyYW1lIG9mIGFsbCB6ZXJvcyAqLworfAlmc2F2ZV9mcmFtZV9mb3JtYXQgPSAkNDA2MDsgIC8qIGxhYmVsIGl0IGFzIGxvbmcgZnJhbWUgKi8KK3wKK3wJLyogbG9hZCBpdCB3aXRoIHRoZSB0ZW1wcyB3ZSBzYXZlZCAqLworfAlTVEFHW2ZzYXZlX2ZyYW1lXSAgICAgPSAgc3RhZ190ZW1wOworfAlDTURSRUcxQltmc2F2ZV9mcmFtZV0gPSAgY21kcmVnMWJfdGVtcDsKK3wJRFRBR1tmc2F2ZV9mcmFtZV0gICAgID0gIGR0YWdfdGVtcDsKK3wJRVRFMTVbZnNhdmVfZnJhbWVdICAgID0gIGV0ZTE1X3RlbXA7Cit8Cit8CS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBjbWRyZWczYiBkZXN0IHJlZyBpcyBub3QgZ29pbmcgdG8KK3wJICogYmUgZGVzdHJveWVkIGJ5IGEgRk1PVkVNIGF0IHRoZSBlbmQgb2YgYWxsIHRoaXMgY29kZS4KK3wJICogSWYgaXQgaXMsIHlvdSBzaG91bGQgbW92ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVnCit8CSAqIG9udG8gdGhlIHN0YWNrIHNvIHRoYXQgdGhlIHJlZyB3aWxsIGxvYWRlZCB3aXRoIHRoYXQgdmFsdWUuCit8CSAqLworfAorfAkvKiBBbGwgZG9uZS4gIFByb2NlZWQgd2l0aCB0aGUgY29kZSBiZWxvdyAqLworfCAgICB9Cit8Cit8ICAgIGV0ZW1wICA9IEZQX3JlZ19bY21kcmVnMWJbMTI6MTBdXTsKK3wgICAgZXRlMTUgID0gfmV0ZTE0OworfCAgICBjbWRyZWcxYlsxNToxMF0gPSAwMTAwMTA7Cit8ICAgIGNsZWFyKGJ1Z19mbGFnX3Byb2NJRHh4eHgpOworfCAgICBGUkVTVE9SRSBhbmQgcmV0dXJuOworfAorfAorfCAgICBGSVhfT1BDTEFTUzI6Cit8ICAgIGlmICgoY21kcmVnMWJbOTo3XSA9PSBjbWRyZWcyYls5OjddKSAmJgorfAkoY21kcmVnMWJbOTo3XSAhPSBjbWRyZWczYls5OjddKSkgIHsgIC8qIHh1IGNvbmZsaWN0IG9ubHkgKi8KK3wJLyogV2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvZGUgaWYgdGhlcmUgaXMgYW4KK3wJICAgeHUgY29uZmxpY3QgYW5kIE5PVCBhbiBudSBjb25mbGljdCAqLworfAorfAkvKiBmaXJzdCBzYXZlIHNvbWUgdmFsdWVzIG9uIHRoZSBmc2F2ZSBmcmFtZSAqLworfAlzdGFnX3RlbXAgICAgID0gU1RBR1tmc2F2ZV9mcmFtZV07Cit8CWNtZHJlZzFiX3RlbXAgPSBDTURSRUcxQltmc2F2ZV9mcmFtZV07Cit8CWR0YWdfdGVtcCAgICAgPSBEVEFHW2ZzYXZlX2ZyYW1lXTsKK3wJZXRlMTVfdGVtcCAgICA9IEVURTE1W2ZzYXZlX2ZyYW1lXTsKK3wJZXRlbXBfdGVtcCAgICA9IEVURU1QW2ZzYXZlX2ZyYW1lXTsKK3wKK3wJQ1VQQ1tmc2F2ZV9mcmFtZV0gPSAwMDAwMDAwOworfAlGUkVTVE9SRQorfAlGU0FWRQorfAorfAorfAkvKiBJZiB0aGUgeHUgaW5zdHJ1Y3Rpb24gaXMgZXhjZXB0aW9uYWwsIHdlIHB1bnQuCit8CSAqIE90aGVyd2lzZSwgd2Ugd291bGQgaGF2ZSB0byBpbmNsdWRlIE9WRkwvVU5GTCBoYW5kbGVyCit8CSAqIGNvZGUgaGVyZSB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyLgorfAkgKi8KK3wJaWYgKGZzYXZlX2ZyYW1lX2Zvcm1hdCA9PSAkNDA2MCkge2dvdG8gS0lMTF9QUk9DRVNTfQorfAorfAlmc2F2ZV9mcmFtZSA9IC8qIGJ1aWxkIGEgbG9uZyBmcmFtZSBvZiBhbGwgemVyb3MgKi8KK3wJZnNhdmVfZnJhbWVfZm9ybWF0ID0gJDQwNjA7ICAvKiBsYWJlbCBpdCBhcyBsb25nIGZyYW1lICovCit8Cit8CS8qIGxvYWQgaXQgd2l0aCB0aGUgdGVtcHMgd2Ugc2F2ZWQgKi8KK3wJU1RBR1tmc2F2ZV9mcmFtZV0gICAgID0gIHN0YWdfdGVtcDsKK3wJQ01EUkVHMUJbZnNhdmVfZnJhbWVdID0gIGNtZHJlZzFiX3RlbXA7Cit8CURUQUdbZnNhdmVfZnJhbWVdICAgICA9ICBkdGFnX3RlbXA7Cit8CUVURTE1W2ZzYXZlX2ZyYW1lXSAgICA9ICBldGUxNV90ZW1wOworfAlFVEVNUFtmc2F2ZV9mcmFtZV0gICAgPSAgZXRlbXBfdGVtcDsKK3wKK3wJLyogTWFrZSBzdXJlIHRoYXQgdGhlIGNtZHJlZzNiIGRlc3QgcmVnIGlzIG5vdCBnb2luZyB0bworfAkgKiBiZSBkZXN0cm95ZWQgYnkgYSBGTU9WRU0gYXQgdGhlIGVuZCBvZiBhbGwgdGhpcyBjb2RlLgorfAkgKiBJZiBpdCBpcywgeW91IHNob3VsZCBtb3ZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWcKK3wJICogb250byB0aGUgc3RhY2sgc28gdGhhdCB0aGUgcmVnIHdpbGwgbG9hZGVkIHdpdGggdGhhdCB2YWx1ZS4KK3wJICovCit8Cit8CS8qIEFsbCBkb25lLiAgUHJvY2VlZCB3aXRoIHRoZSBjb2RlIGJlbG93ICovCit8ICAgIH0KK3wKK3wgICAgaWYgKGV0ZW1wX2V4cG9uZW50ID09IG1pbl9zZ2wpICAgZXRlbXBfZXhwb25lbnQgPSBtaW5fZGJsOworfCAgICBpZiAoZXRlbXBfZXhwb25lbnQgPT0gbWF4X3NnbCkgICBldGVtcF9leHBvbmVudCA9IG1heF9kYmw7Cit8ICAgIGNtZHJlZzFiWzE1OjEwXSA9IDAxMDEwMTsKK3wgICAgY2xlYXIoYnVnX2ZsYWdfcHJvY0lEeHh4eCk7Cit8ICAgIEZSRVNUT1JFIGFuZCByZXR1cm47Cit8Cit8Cit8ICAgIE5PRklYOgorfCAgICBjbGVhcihidWdfZmxhZ19wcm9jSUR4eHh4KTsKK3wgICAgRlJFU1RPUkUgYW5kIHJldHVybjsKK3wKKworCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8QlVHRklYICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWZwc3BfZm10X2Vycm9yCisKKwkuZ2xvYmFsCWIxMjM4X2ZpeAorYjEyMzhfZml4OgorfAorfCBUaGlzIGNvZGUgaXMgZW50ZXJlZCBvbmx5IG9uIGNvbXBsZXRpb24gb2YgdGhlIGhhbmRsaW5nIG9mIGFuCit8IG51LWdlbmVyYXRlZCBvdmZsLCB1bmZsLCBvciBpbmV4IGV4Y2VwdGlvbi4gIElmIHRoZSB2ZXJzaW9uCit8IG51bWJlciBvZiB0aGUgZnNhdmUgaXMgbm90ICQ0MCwgdGhpcyBoYW5kbGVyIGlzIG5vdCBuZWNlc3NhcnkuCit8IFNpbXBseSBicmFuY2ggdG8gZml4X2RvbmUgYW5kIGV4aXQgbm9ybWFsbHkuCit8CisJY21waWIJI1ZFUl80MCw0KCVhNykKKwlibmUJZml4X2RvbmUKK3wKK3wgVGVzdCBmb3IgY3Vfc2F2ZXBjIGVxdWFsIHRvIHplcm8uICBJZiBub3QsIHRoaXMgaXMgbm90IGEgYnVnCit8ICMxMjM4IGNhc2UuCit8CisJbW92ZWIJQ1VfU0FWRVBDKCVhNiksJWQwCisJYW5kaWIJIzB4RkUsJWQwCisJYmVxCWZpeF9kb25lCXxpZiB6ZXJvLCB0aGlzIGlzIG5vdCBidWcgIzEyMzgKKworfAorfCBUZXN0IHRoZSByZWdpc3RlciBjb25mbGljdCBhc3BlY3QuICBJZiBvcGNsYXNzMCwgY2hlY2sgZm9yCit8IGN1IHNyYyBlcXVhbCB0byB4dSBkZXN0IG9yIGVxdWFsIHRvIG51IGRlc3QuICBJZiBzbywgZ28gdG8KK3wgb3AwLiAgRWxzZSwgb3IgaWYgb3BjbGFzczIsIGNoZWNrIGZvciBjdSBkZXN0IGVxdWFsIHRvCit8IHh1IGRlc3Qgb3IgZXF1YWwgdG8gbnUgZGVzdC4gIElmIHNvLCBnbyB0byB0c3Rfb3BjbC4gIEVsc2UsCit8IGV4aXQsIGl0IGlzIG5vdCB0aGUgYnVnIGNhc2UuCit8Cit8IENoZWNrIGZvciBvcGNsYXNzIDAuICBJZiBub3QsIGdvIGFuZCBjaGVjayBmb3Igb3BjbGFzcyAyIGFuZCBzZ2wuCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlhbmRpdwkjMHhFMDAwLCVkMAkJfHN0cmlwIGFsbCBidXQgb3BjbGFzcworCWJuZQlvcDJzZ2wJCQl8bm90IG9wY2xhc3MgMCwgY2hlY2sgb3AyCit8Cit8IENoZWNrIGZvciBjdSBhbmQgbnUgcmVnaXN0ZXIgY29uZmxpY3QuICBJZiBvbmUgZXhpc3RzLCB0aGlzIHRha2VzCit8IHByaW9yaXR5IG92ZXIgYSBjdSBhbmQgeHUgY29uZmxpY3QuCit8CisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzM6IzN9LCVkMAl8Z2V0IDFzdCBzcmMKKwliZmV4dHUJQ01EUkVHM0IoJWE2KXsjNjojM30sJWQxCXxnZXQgM3JkIGRlc3QKKwljbXBiCSVkMCwlZDEKKwliZXFzCW9wMAkJCXxpZiBlcXVhbCwgY29udGludWUgYnVnZml4Cit8Cit8IENoZWNrIGZvciBjdSBkZXN0IGVxdWFsIHRvIG51IGRlc3QuICBJZiBzbywgZ28gYW5kIGZpeCB0aGUKK3wgYnVnIGNvbmRpdGlvbi4gIE90aGVyd2lzZSwgZXhpdC4KK3wKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxnZXQgMXN0IGRlc3QKKwljbXBiCSVkMCwlZDEJCQl8Y21wIDFzdCBkZXN0IHdpdGggM3JkIGRlc3QKKwliZXFzCW9wMAkJCXxpZiBlcXVhbCwgY29udGludWUgYnVnZml4Cit8Cit8IENoZWNrIGZvciBjdSBhbmQgeHUgcmVnaXN0ZXIgY29uZmxpY3QuCit8CisJYmZleHR1CUNNRFJFRzJCKCVhNil7IzY6IzN9LCVkMQl8Z2V0IDJuZCBkZXN0CisJY21wYgklZDAsJWQxCQkJfGNtcCAxc3QgZGVzdCB3aXRoIDJuZCBkZXN0CisJYmVxcwlvcDBfeHUJCQl8aWYgZXF1YWwsIGNvbnRpbnVlIGJ1Z2ZpeAorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDAJfGdldCAxc3Qgc3JjCisJY21wYgklZDAsJWQxCQkJfGNtcCAxc3Qgc3JjIHdpdGggMm5kIGRlc3QKKwliZXEJb3AwX3h1CisJYm5lCWZpeF9kb25lCQl8aWYgdGhlIHJlZyBjaGVja3MgZmFpbCwgZXhpdAorfAorfCBXZSBoYXZlIHRoZSBvcGNsYXNzIDAgc2l0dWF0aW9uLgorfAorb3AwOgorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDAJfGdldCBzb3VyY2UgcmVnaXN0ZXIgbm8KKwltb3ZlbAkjNywlZDEKKwlzdWJsCSVkMCwlZDEKKwljbHJsCSVkMAorCWJzZXRsCSVkMSwlZDAKKwlmbW92ZW14ICVkMCxFVEVNUCglYTYpCQl8bG9hZCBzb3VyY2UgdG8gRVRFTVAKKworCW1vdmViCSMweDEyLCVkMAorCWJmaW5zCSVkMCxDTURSRUcxQiglYTYpeyMwOiM2fQl8b3BjbGFzcyAyLCBleHRlbmRlZAorfAorfAlTZXQgRVRFTVAgZXhwb25lbnQgYml0IDE1IGFzIHRoZSBvcHBvc2l0ZSBvZiBldGUxNAorfAorCWJ0c3QJIzYsRVRFTVBfRVgoJWE2KQkJfGNoZWNrIGV0ZW1wIGV4cG9uZW50IGJpdCAxNAorCWJlcQlzZXRldGUxNQorCWJjbHIJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKK3NldGV0ZTE1OgorCWJzZXQJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKKworfAorfCBXZSBoYXZlIHRoZSBjYXNlIGluIHdoaWNoIGEgY29uZmxpY3QgZXhpc3RzIGJldHdlZW4gdGhlIGN1IHNyYyBvcgorfCBkZXN0IGFuZCB0aGUgZGVzdCBvZiB0aGUgeHUuICBXZSBtdXN0IGNsZWFyIHRoZSBpbnN0cnVjdGlvbiBpbgorfCB0aGUgY3UgYW5kIHJlc3RvcmUgdGhlIHN0YXRlLCBhbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlCit8IHh1IHRvIGNvbXBsZXRlLiAgUmVtZW1iZXIsIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUgbnUKK3wgd2FzIGV4Y2VwdGlvbmFsLCBhbmQgd2FzIGNvbXBsZXRlZCBieSB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlci4KK3wgSWYgdGhlIHJlc3VsdCBvZiB0aGUgeHUgaW5zdHJ1Y3Rpb24gaXMgbm90IGV4Y2VwdGlvbmFsLCB3ZSBjYW4KK3wgcmVzdG9yZSB0aGUgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgY3UgdG8gdGhlIGZyYW1lIGFuZCBjb250aW51ZQorfCBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uICBJZiB0aGUgcmVzdWx0IGlzIGFsc28KK3wgZXhjZXB0aW9uYWwsIHdlIGNob29zZSB0byBraWxsIHRoZSBwcm9jZXNzLgorfAorfAlJdGVtcyBzYXZlZCBmcm9tIHRoZSBzdGFjazoKK3wKK3wJCSQzYyBzdGFnICAgICAtIExfU0NSMQorfAkJJDQwIGNtZHJlZzFiIC0gTF9TQ1IyCit8CQkkNDQgZHRhZyAgICAgLSBMX1NDUjMKK3wKK3wgVGhlIGN1IHNhdmVwYyBpcyBzZXQgdG8gemVybywgYW5kIHRoZSBmcmFtZSBpcyByZXN0b3JlZCB0byB0aGUKK3wgZnB1LgorfAorb3AwX3h1OgorCW1vdmVsCVNUQUcoJWE2KSxMX1NDUjEoJWE2KQorCW1vdmVsCUNNRFJFRzFCKCVhNiksTF9TQ1IyKCVhNikKKwltb3ZlbAlEVEFHKCVhNiksTF9TQ1IzKCVhNikKKwlhbmRpbAkjMHhlMDAwMDAwMCxMX1NDUjMoJWE2KQorCW1vdmViCSMwLENVX1NBVkVQQyglYTYpCisJbW92ZWwJKCVhNykrLCVkMQkJfHNhdmUgcmV0dXJuIGFkZHJlc3MgZnJvbSBic3IKKwlmcmVzdG9yZSAoJWE3KSsKKwlmc2F2ZQktKCVhNykKK3wKK3wgQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIHdoaWNoIGp1c3QgY29tcGxldGVkIHdhcyBleGNlcHRpb25hbC4KK3wKKwljbXB3CSMweDQwNjAsKCVhNykKKwliZXEJb3AwX3hiCit8Cit8IEl0IGlzIG5lY2Vzc2FyeSB0byBpc29sYXRlIHRoZSByZXN1bHQgb2YgdGhlIGluc3RydWN0aW9uIGluIHRoZQorfCB4dSBpZiBpdCBpcyB0byBmcDAgLSBmcDMgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlIFVTRVJfRlBuCit8IGxvY2F0aW9ucyBvbiB0aGUgc3RhY2suICBUaGUgY29ycmVjdCBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBpbgorfCBjbWRyZWcyYi4KK3wKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWdpc3RlciBubworCWNtcGlsCSMzLCVkMAorCWJndHMJb3AwX3hpCisJYmVxcwlvcDBfZnAzCisJY21waWwJIzEsJWQwCisJYmx0cwlvcDBfZnAwCisJYmVxcwlvcDBfZnAxCitvcDBfZnAyOgorCWZtb3ZlbXggJWZwMi0lZnAyLFVTRVJfRlAyKCVhNikKKwlicmFzCW9wMF94aQorb3AwX2ZwMToKKwlmbW92ZW14ICVmcDEtJWZwMSxVU0VSX0ZQMSglYTYpCisJYnJhcwlvcDBfeGkKK29wMF9mcDA6CisJZm1vdmVteCAlZnAwLSVmcDAsVVNFUl9GUDAoJWE2KQorCWJyYXMJb3AwX3hpCitvcDBfZnAzOgorCWZtb3ZlbXggJWZwMy0lZnAzLFVTRVJfRlAzKCVhNikKK3wKK3wgVGhlIGZyYW1lIHJldHVybmVkIGlzIGlkbGUuICBXZSBtdXN0IGJ1aWxkIGEgYnVzeSBmcmFtZSB0byBob2xkCit8IHRoZSBjdSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgc2V0dXAgZXRlbXAuCit8CitvcDBfeGk6CisJbW92ZWwJIzIyLCVkMAkJfGNsZWFyIDIzIGx3b3JkcworCWNscmwJKCVhNykKK29wMF9sb29wOgorCWNscmwJLSglYTcpCisJZGJmCSVkMCxvcDBfbG9vcAorCW1vdmVsCSMweDQwNjAwMDAwLC0oJWE3KQorCW1vdmVsCUxfU0NSMSglYTYpLFNUQUcoJWE2KQorCW1vdmVsCUxfU0NSMiglYTYpLENNRFJFRzFCKCVhNikKKwltb3ZlbAlMX1NDUjMoJWE2KSxEVEFHKCVhNikKKwltb3ZlYgkjMHg2LENVX1NBVkVQQyglYTYpCisJbW92ZWwJJWQxLC0oJWE3KQkJfHJldHVybiBic3IgcmV0dXJuIGFkZHJlc3MKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMzojM30sJWQwCXxnZXQgc291cmNlIHJlZ2lzdGVyIG5vCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCisJZm1vdmVteCAlZDAsRVRFTVAoJWE2KQkJfGxvYWQgc291cmNlIHRvIEVURU1QCisKKwltb3ZlYgkjMHgxMiwlZDAKKwliZmlucwklZDAsQ01EUkVHMUIoJWE2KXsjMDojNn0JfG9wY2xhc3MgMiwgZXh0ZW5kZWQKK3wKK3wJU2V0IEVURU1QIGV4cG9uZW50IGJpdCAxNSBhcyB0aGUgb3Bwb3NpdGUgb2YgZXRlMTQKK3wKKwlidHN0CSM2LEVURU1QX0VYKCVhNikJCXxjaGVjayBldGVtcCBleHBvbmVudCBiaXQgMTQKKwliZXEJb3AwX3NldGUxNQorCWJjbHIJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKK29wMF9zZXRlMTU6CisJYnNldAkjZXRlbXAxNV9iaXQsU1RBRyglYTYpCisJYnJhCWZpbmlzaAorCit8Cit8IFRoZSBmcmFtZSByZXR1cm5lZCBpcyBidXN5LiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlY29uc3RydWN0Cit8IHRoZSBjb2RlIHNlcXVlbmNlIHRvIGFsbG93IGNvbXBsZXRpb24uICBXZSB3aWxsIGp1bXAgdG8KK3wgZnBzcF9mbXRfZXJyb3IgYW5kIGFsbG93IHRoZSBrZXJuZWwgdG8ga2lsbCB0aGUgcHJvY2Vzcy4KK3wKK29wMF94YjoKKwlqbXAJZnBzcF9mbXRfZXJyb3IKKworfAorfCBDaGVjayBmb3Igb3BjbGFzcyAyIGFuZCBzaW5nbGUgc2l6ZS4gIElmIG5vdCBib3RoLCBleGl0LgorfAorb3Ayc2dsOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYW5kaXcJIzB4RkMwMCwlZDAJCXxzdHJpcCBhbGwgYnV0IG9wY2xhc3MgYW5kIHNpemUKKwljbXBpdwkjMHg0NDAwLCVkMAkJfHRlc3QgZm9yIG9wY2xhc3MgMiBhbmQgc2l6ZT1zZ2wKKwlibmUJZml4X2RvbmUJCXxpZiBub3QsIGl0IGlzIG5vdCBidWcgMTIzOAorfAorfCBDaGVjayBmb3IgY3UgZGVzdCBlcXVhbCB0byBudSBkZXN0IG9yIGVxdWFsIHRvIHh1IGRlc3QsIHdpdGgKK3wgYSBjdSBhbmQgbnUgY29uZmxpY3QgdGFraW5nIHByaW9yaXR5IGFuIG51IGNvbmZsaWN0LiAgSWYgZWl0aGVyLAorfCBnbyBhbmQgZml4IHRoZSBidWcgY29uZGl0aW9uLiAgT3RoZXJ3aXNlLCBleGl0LgorfAorCWJmZXh0dQlDTURSRUcxQiglYTYpeyM2OiMzfSwlZDAJfGdldCAxc3QgZGVzdAorCWJmZXh0dQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDEJfGdldCAzcmQgZGVzdAorCWNtcGIJJWQwLCVkMQkJCXxjbXAgMXN0IGRlc3Qgd2l0aCAzcmQgZGVzdAorCWJlcQlvcDJfY29tCQkJfGlmIGVxdWFsLCBjb250aW51ZSBidWdmaXgKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQxCXxnZXQgMm5kIGRlc3QKKwljbXBiCSVkMCwlZDEJCQl8Y21wIDFzdCBkZXN0IHdpdGggMm5kIGRlc3QKKwlibmUJZml4X2RvbmUJCXxpZiB0aGUgcmVnIGNoZWNrcyBmYWlsLCBleGl0Cit8Cit8IFdlIGhhdmUgdGhlIGNhc2UgaW4gd2hpY2ggYSBjb25mbGljdCBleGlzdHMgYmV0d2VlbiB0aGUgY3Ugc3JjIG9yCit8IGRlc3QgYW5kIHRoZSBkZXN0IG9mIHRoZSB4dS4gIFdlIG11c3QgY2xlYXIgdGhlIGluc3RydWN0aW9uIGluCit8IHRoZSBjdSBhbmQgcmVzdG9yZSB0aGUgc3RhdGUsIGFsbG93aW5nIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUKK3wgeHUgdG8gY29tcGxldGUuICBSZW1lbWJlciwgdGhlIGluc3RydWN0aW9uIGluIHRoZSBudQorfCB3YXMgZXhjZXB0aW9uYWwsIGFuZCB3YXMgY29tcGxldGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLgorfCBJZiB0aGUgcmVzdWx0IG9mIHRoZSB4dSBpbnN0cnVjdGlvbiBpcyBub3QgZXhjZXB0aW9uYWwsIHdlIGNhbgorfCByZXN0b3JlIHRoZSBpbnN0cnVjdGlvbiBmcm9tIHRoZSBjdSB0byB0aGUgZnJhbWUgYW5kIGNvbnRpbnVlCit8IHByb2Nlc3NpbmcgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbi4gIElmIHRoZSByZXN1bHQgaXMgYWxzbworfCBleGNlcHRpb25hbCwgd2UgY2hvb3NlIHRvIGtpbGwgdGhlIHByb2Nlc3MuCit8Cit8CUl0ZW1zIHNhdmVkIGZyb20gdGhlIHN0YWNrOgorfAorfAkJJDNjIHN0YWcgICAgIC0gTF9TQ1IxCit8CQkkNDAgY21kcmVnMWIgLSBMX1NDUjIKK3wJCSQ0NCBkdGFnICAgICAtIExfU0NSMworfAkJZXRlbXAgICAgICAgIC0gRlBfU0NSMgorfAorfCBUaGUgY3Ugc2F2ZXBjIGlzIHNldCB0byB6ZXJvLCBhbmQgdGhlIGZyYW1lIGlzIHJlc3RvcmVkIHRvIHRoZQorfCBmcHUuCit8CitvcDJfeHU6CisJbW92ZWwJU1RBRyglYTYpLExfU0NSMSglYTYpCisJbW92ZWwJQ01EUkVHMUIoJWE2KSxMX1NDUjIoJWE2KQorCW1vdmVsCURUQUcoJWE2KSxMX1NDUjMoJWE2KQorCWFuZGlsCSMweGUwMDAwMDAwLExfU0NSMyglYTYpCisJbW92ZWIJIzAsQ1VfU0FWRVBDKCVhNikKKwltb3ZlbAlFVEVNUCglYTYpLEZQX1NDUjIoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksRlBfU0NSMis0KCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEZQX1NDUjIrOCglYTYpCisJbW92ZWwJKCVhNykrLCVkMQkJfHNhdmUgcmV0dXJuIGFkZHJlc3MgZnJvbSBic3IKKwlmcmVzdG9yZSAoJWE3KSsKKwlmc2F2ZQktKCVhNykKK3wKK3wgQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIHdoaWNoIGp1c3QgY29tcGxldGVkIHdhcyBleGNlcHRpb25hbC4KK3wKKwljbXB3CSMweDQwNjAsKCVhNykKKwliZXEJb3AyX3hiCit8Cit8IEl0IGlzIG5lY2Vzc2FyeSB0byBpc29sYXRlIHRoZSByZXN1bHQgb2YgdGhlIGluc3RydWN0aW9uIGluIHRoZQorfCB4dSBpZiBpdCBpcyB0byBmcDAgLSBmcDMgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlIFVTRVJfRlBuCit8IGxvY2F0aW9ucyBvbiB0aGUgc3RhY2suICBUaGUgY29ycmVjdCBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBpbgorfCBjbWRyZWcyYi4KK3wKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWdpc3RlciBubworCWNtcGlsCSMzLCVkMAorCWJndHMJb3AyX3hpCisJYmVxcwlvcDJfZnAzCisJY21waWwJIzEsJWQwCisJYmx0cwlvcDJfZnAwCisJYmVxcwlvcDJfZnAxCitvcDJfZnAyOgorCWZtb3ZlbXggJWZwMi0lZnAyLFVTRVJfRlAyKCVhNikKKwlicmFzCW9wMl94aQorb3AyX2ZwMToKKwlmbW92ZW14ICVmcDEtJWZwMSxVU0VSX0ZQMSglYTYpCisJYnJhcwlvcDJfeGkKK29wMl9mcDA6CisJZm1vdmVteCAlZnAwLSVmcDAsVVNFUl9GUDAoJWE2KQorCWJyYXMJb3AyX3hpCitvcDJfZnAzOgorCWZtb3ZlbXggJWZwMy0lZnAzLFVTRVJfRlAzKCVhNikKK3wKK3wgVGhlIGZyYW1lIHJldHVybmVkIGlzIGlkbGUuICBXZSBtdXN0IGJ1aWxkIGEgYnVzeSBmcmFtZSB0byBob2xkCit8IHRoZSBjdSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgZml4IHVwIGV0ZW1wLgorfAorb3AyX3hpOgorCW1vdmVsCSMyMiwlZDAJCXxjbGVhciAyMyBsd29yZHMKKwljbHJsCSglYTcpCitvcDJfbG9vcDoKKwljbHJsCS0oJWE3KQorCWRiZgklZDAsb3AyX2xvb3AKKwltb3ZlbAkjMHg0MDYwMDAwMCwtKCVhNykKKwltb3ZlbAlMX1NDUjEoJWE2KSxTVEFHKCVhNikKKwltb3ZlbAlMX1NDUjIoJWE2KSxDTURSRUcxQiglYTYpCisJbW92ZWwJTF9TQ1IzKCVhNiksRFRBRyglYTYpCisJbW92ZWIJIzB4NixDVV9TQVZFUEMoJWE2KQorCW1vdmVsCUZQX1NDUjIoJWE2KSxFVEVNUCglYTYpCisJbW92ZWwJRlBfU0NSMis0KCVhNiksRVRFTVBfSEkoJWE2KQorCW1vdmVsCUZQX1NDUjIrOCglYTYpLEVURU1QX0xPKCVhNikKKwltb3ZlbAklZDEsLSglYTcpCisJYnJhCW9wMl9jb20KKworfAorfCBXZSBoYXZlIHRoZSBvcGNsYXNzIDIgc2luZ2xlIHNvdXJjZSBzaXR1YXRpb24uCit8CitvcDJfY29tOgorCW1vdmViCSMweDE1LCVkMAorCWJmaW5zCSVkMCxDTURSRUcxQiglYTYpeyMwOiM2fQl8b3BjbGFzcyAyLCBkb3VibGUKKworCWNtcHcJIzB4NDA3RixFVEVNUF9FWCglYTYpCXxzaW5nbGUgK21heAorCWJuZXMJY2FzZTIKKwltb3ZldwkjMHg0M0ZGLEVURU1QX0VYKCVhNikJfHRvIGRvdWJsZSArbWF4CisJYnJhCWZpbmlzaAorY2FzZTI6CisJY21wdwkjMHhDMDdGLEVURU1QX0VYKCVhNikJfHNpbmdsZSAtbWF4CisJYm5lcwljYXNlMworCW1vdmV3CSMweEMzRkYsRVRFTVBfRVgoJWE2KQl8dG8gZG91YmxlIC1tYXgKKwlicmEJZmluaXNoCitjYXNlMzoKKwljbXB3CSMweDNGODAsRVRFTVBfRVgoJWE2KQl8c2luZ2xlICttaW4KKwlibmVzCWNhc2U0CisJbW92ZXcJIzB4M0MwMCxFVEVNUF9FWCglYTYpCXx0byBkb3VibGUgK21pbgorCWJyYQlmaW5pc2gKK2Nhc2U0OgorCWNtcHcJIzB4QkY4MCxFVEVNUF9FWCglYTYpCXxzaW5nbGUgLW1pbgorCWJuZQlmaXhfZG9uZQorCW1vdmV3CSMweEJDMDAsRVRFTVBfRVgoJWE2KQl8dG8gZG91YmxlIC1taW4KKwlicmEJZmluaXNoCit8Cit8IFRoZSBmcmFtZSByZXR1cm5lZCBpcyBidXN5LiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlY29uc3RydWN0Cit8IHRoZSBjb2RlIHNlcXVlbmNlIHRvIGFsbG93IGNvbXBsZXRpb24uICBmcHNwX2ZtdF9lcnJvciBjYXVzZXMKK3wgYW4gZmxpbmUgaWxsZWdhbCBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZC4KK3wKK3wgWW91IHNob3VsZCByZXBsYWNlIHRoZSBqdW1wIHRvIGZwc3BfZm10X2Vycm9yIHdpdGggYSBqdW1wCit8IHRvIHRoZSBlbnRyeSBwb2ludCB1c2VkIHRvIGtpbGwgYSBwcm9jZXNzLgorfAorb3AyX3hiOgorCWptcAlmcHNwX2ZtdF9lcnJvcgorCit8Cit8IEVudGVyIGhlcmUgaWYgdGhlIGNhc2UgaXMgbm90IG9mIHRoZSBzaXR1YXRpb25zIGFmZmVjdGVkIGJ5Cit8IGJ1ZyAjMTIzOCwgb3IgaWYgdGhlIGZpeCBpcyBjb21wbGV0ZWQsIGFuZCBleGl0LgorfAorZmluaXNoOgorZml4X2RvbmU6CisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9kZWNiaW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2RlY2Jpbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjA2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9kZWNiaW4uUwpAQCAtMCwwICsxLDUwNiBAQAorfAorfAlkZWNiaW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CURlc2NyaXB0aW9uOiBDb252ZXJ0cyBub3JtYWxpemVkIHBhY2tlZCBiY2QgdmFsdWUgcG9pbnRlZCB0byBieQorfAlyZWdpc3RlciBBNiB0byBleHRlbmRlZC1wcmVjaXNpb24gdmFsdWUgaW4gRlAwLgorfAorfAlJbnB1dDogTm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIGluIEVURU1QKGE2KS4KK3wKK3wJT3V0cHV0OglFeGFjdCBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFja2VkIGJjZCB2YWx1ZS4KK3wKK3wJU2F2ZXMgYW5kIE1vZGlmaWVzOiBEMi1ENQorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gZGVjYmluIHRha2VzID8/PyBjeWNsZXMgdG8gZXhlY3V0ZS4KK3wKK3wJT2JqZWN0IFNpemU6Cit8Cit8CUV4dGVybmFsIFJlZmVyZW5jZShzKTogTm9uZS4KK3wKK3wJQWxnb3JpdGhtOgorfAlFeHBlY3RlZCBpcyBhIG5vcm1hbCBiY2QgKGkuZS4gbm9uLWV4Y2VwdGlvbmFsOyBhbGwgaW5mLCB6ZXJvLAorfAlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQorfAl2YWx1ZSBpbiA2ODg4MS84ODIgZm9ybWF0IGF0IGxvY2F0aW9uIEVURU1QKEE2KS4KK3wKK3wJQTEuCUNvbnZlcnQgdGhlIGJjZCBleHBvbmVudCB0byBiaW5hcnkgYnkgc3VjY2Vzc2l2ZSBhZGRzIGFuZCBtdWxzLgorfAlTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCit8CWZvciB0aGUgbWFudGlzc2Egd2hpY2ggaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgMTcgaW50ZWdlcgorfAlkaWdpdHMsIHJhdGhlciB0aGFuIDEgaW50ZWdlciBhbmQgMTYgZnJhY3Rpb24gZGlnaXRzLgorfAlOb3RlOiB0aGlzIG9wZXJhdGlvbiBjYW4gbmV2ZXIgb3ZlcmZsb3cuCit8Cit8CUEyLiBDb252ZXJ0IHRoZSBiY2QgbWFudGlzc2EgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUKK3wJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCit8CVRoZSBtYW50aXNzYSBkaWdpdHMgd2lsbCBiZSBjb252ZXJ0ZWQgd2l0aCB0aGUgZGVjaW1hbCBwb2ludAorfAlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCit8CU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4KK3wKK3wJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUKK3wJYmNkIHN0cmluZy4gIElmIFNFIGlzIHBvc2l0aXZlLCBjb3VudCB0aGUgbGVhZGluZyB6ZXJvczsKK3wJaWYgbmVnYXRpdmUsIGNvdW50IHRoZSB0cmFpbGluZyB6ZXJvcy4gIFNldCB0aGUgYWRqdXN0ZWQKK3wJZXhwb25lbnQgZXF1YWwgdG8gdGhlIGV4cG9uZW50IGZyb20gQTEgYW5kIHRoZSB6ZXJvIGNvdW50Cit8CWFkZGVkIGlmIFNNID0gMSBhbmQgc3VidHJhY3RlZCBpZiBTTSA9IDAuICBTY2FsZSB0aGUKK3wJbWFudGlzc2EgdGhlIGVxdWl2YWxlbnQgb2YgZm9yY2luZyBpbiB0aGUgYmNkIHZhbHVlOgorfAorfAlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgorfAlTTSA9IDEJYSBub24temVybyBkaWdpdCBpbiBNYW50MCwgbHNkIG9mIHRoZSBmcmFjdGlvbgorfAorfAl0aGlzIHdpbGwgaW5zdXJlIHRoYXQgYW55IHZhbHVlLCByZWdhcmRsZXNzIG9mIGl0cworfAlyZXByZXNlbnRhdGlvbiAoZXguIDAuMUUyLCAxRTEsIDEwRTAsIDEwMEUtMSksIGlzIGNvbnZlcnRlZAorfAljb25zaXN0ZW50bHkuCit8Cit8CUE0LiBDYWxjdWxhdGUgdGhlIGZhY3RvciAxMF5leHAgaW4gRlAxIHVzaW5nIGEgdGFibGUgb2YKK3wJMTBeKDJebikgdmFsdWVzLiAgVG8gcmVkdWNlIHRoZSBlcnJvciBpbiBmb3JtaW5nIGZhY3RvcnMKK3wJZ3JlYXRlciB0aGFuIDEwXjI3LCBhIGRpcmVjdGVkIHJvdW5kaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGgKK3wJdGFibGVzIHJvdW5kZWQgdG8gUk4sIFJNLCBhbmQgUlAsIGFjY29yZGluZyB0byB0aGUgdGFibGUKK3wJaW4gdGhlIGNvbW1lbnRzIG9mIHRoZSBwd3J0ZW4gc2VjdGlvbi4KK3wKK3wJQTUuIEZvcm0gdGhlIGZpbmFsIGJpbmFyeSBudW1iZXIgYnkgc2NhbGluZyB0aGUgbWFudGlzc2EgYnkKK3wJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUKK3wJbWFudGlzc2EgaW4gRlAwIGJ5IHRoZSBmYWN0b3IgaW4gRlAxIGlmIHRoZSBhZGp1c3RlZAorfAlleHBvbmVudCBzaWduIGlzIHBvc2l0aXZlLCBhbmQgZGl2aWRpbmcgRlAwIGJ5IEZQMSBpZgorfAlpdCBpcyBuZWdhdGl2ZS4KK3wKK3wJQ2xlYW4gdXAgYW5kIHJldHVybi4gIENoZWNrIGlmIHRoZSBmaW5hbCBtdWwgb3IgZGl2IHJlc3VsdGVkCit8CWluIGFuIGluZXgyIGV4Y2VwdGlvbi4gIElmIHNvLCBzZXQgaW5leDEgaW4gdGhlIGZwc3IgYW5kCit8CWNoZWNrIGlmIHRoZSBpbmV4MSBleGNlcHRpb24gaXMgZW5hYmxlZC4gIElmIHNvLCBzZXQgZDcgdXBwZXIKK3wJd29yZCB0byAkMDEwMC4gIFRoaXMgd2lsbCBzaWduYWwgdW5pbXAuc2EgdGhhdCBhbiBlbmFibGVkIGluZXgxCit8CWV4Y2VwdGlvbiBvY2N1cnJlZC4gIFVuaW1wIHdpbGwgZml4IHRoZSBzdGFjay4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfERFQ0JJTiAgICBpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK3wKK3wJUFRFTlJOLCBQVEVOUk0sIGFuZCBQVEVOUlAgYXJlIGFycmF5cyBvZiBwb3dlcnMgb2YgMTAgcm91bmRlZAorfAl0byBuZWFyZXN0LCBtaW51cywgYW5kIHBsdXMsIHJlc3BlY3RpdmVseS4gIFRoZSB0YWJsZXMgaW5jbHVkZQorfAkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKK3wJaXMgcmVxdWlyZWQgdW50aWwgdGhlIHBvd2VyIGlzIGdyZWF0ZXIgdGhhbiAyNywgaG93ZXZlciwgYWxsCit8CXRhYmxlcyBpbmNsdWRlIHRoZSBmaXJzdCA1IGZvciBlYXNlIG9mIGluZGV4aW5nLgorfAorCXx4cmVmCVBURU5STgorCXx4cmVmCVBURU5STQorCXx4cmVmCVBURU5SUAorCitSVEFCTEU6CS5ieXRlCTAsMCwwLDAKKwkuYnl0ZQkyLDMsMiwzCisJLmJ5dGUJMiwzLDMsMgorCS5ieXRlCTMsMiwyLDMKKworCS5nbG9iYWwJZGVjYmluCisJLmdsb2JhbAljYWxjX2UKKwkuZ2xvYmFsCXB3cnRlbgorCS5nbG9iYWwJY2FsY19tCisJLmdsb2JhbAlub3JtCisJLmdsb2JhbAlhcF9zdF96CisJLmdsb2JhbAlhcF9zdF9uCit8CisJLnNldAlGTklCUyw3CisJLnNldAlGU1RSVCwwCit8CisJLnNldAlFU1RSVCw0CisJLnNldAlFRElHSVRTLDIJfAorfAorfCBDb25zdGFudHMgaW4gc2luZ2xlIHByZWNpc2lvbgorRlpFUk86CS5sb25nCTB4MDAwMDAwMDAKK0ZPTkU6CS5sb25nCTB4M0Y4MDAwMDAKK0ZURU46CS5sb25nCTB4NDEyMDAwMDAKKworCS5zZXQJVEVOLDEwCisKK3wKK2RlY2JpbjoKKwl8IGZtb3ZlbAkjMCxGUENSCQk7Y2xyIHJlYWwgZnBjcgorCW1vdmVtbAklZDItJWQ1LC0oJWE3KQorfAorfCBDYWxjdWxhdGUgZXhwb25lbnQ6Cit8ICAxLiBDb3B5IGJjZCB2YWx1ZSBpbiBtZW1vcnkgZm9yIHVzZSBhcyBhIHdvcmtpbmcgY29weS4KK3wgIDIuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBleHBvbmVudCBpbiBkMSBieSBtdWwgYW5kIGFkZC4KK3wgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCit8ICA0LiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlIGZvciBpbnRlcnByZXRpbmcgdGhlIG1hbnQgYXMgYWxsIGludGVnZXIgZGlnaXRzLgorfCAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8Cit8ICBjYWxjX2U6Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiBhY2N1bXVsYXRvciBmb3IgYmluYXJ5IGV4cG9uZW50Cit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCit8CSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKK3wJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCopICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCit8CSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKK3wKK2NhbGNfZToKKwltb3ZlbAkjRURJR0lUUywlZDIJfCMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0CisJbW92ZXFsCSNFU1RSVCwlZDMJfGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwlsZWFsCUZQX1NDUjEoJWE2KSwlYTAJfGxvYWQgdG1wIGJjZCBzdG9yYWdlIGFkZHJlc3MKKwltb3ZlbAlFVEVNUCglYTYpLCglYTApCXxzYXZlIGlucHV0IGJjZCB2YWx1ZQorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApIHxzYXZlIHdvcmRzIDIgYW5kIDMKKwltb3ZlbAlFVEVNUF9MTyglYTYpLDgoJWEwKSB8YW5kIHdvcmsgd2l0aCB0aGVzZQorCW1vdmVsCSglYTApLCVkNAl8Z2V0IGZpcnN0IHdvcmQgb2YgYmNkCisJY2xybAklZDEJCXx6ZXJvIGQxIGZvciBhY2N1bXVsYXRvcgorZV9nZDoKKwltdWx1bAkjVEVOLCVkMQl8bXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKKwliZmV4dHUJJWQ0eyVkMzojNH0sJWQwCXxnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZCBpbnRvIGQwCisJYWRkbAklZDAsJWQxCQl8ZDEgPSBkMSArIGQwCisJYWRkcWIJIzQsJWQzCQl8YWR2YW5jZSBkMyB0byB0aGUgbmV4dCBkaWdpdAorCWRiZgklZDIsZV9nZAl8aWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCisJYnRzdAkjMzAsJWQ0CQl8Z2V0IFNFCisJYmVxcwllX3BvcwkJfGRvbid0IG5lZ2F0ZSBpZiBwb3MKKwluZWdsCSVkMQkJfG5lZ2F0ZSBiZWZvcmUgc3VidHJhY3RpbmcKK2VfcG9zOgorCXN1YmwJIzE2LCVkMQkJfHN1YiB0byBjb21wZW5zYXRlIGZvciBzaGlmdCBvZiBtYW50CisJYmdlcwllX3NhdmUJCXxpZiBzdGlsbCBwb3MsIGRvIG5vdCBuZWcKKwluZWdsCSVkMQkJfG5vdyBuZWdhdGl2ZSwgbWFrZSBwb3MgYW5kIHNldCBTRQorCW9ybAkjMHg0MDAwMDAwMCwlZDQJfHNldCBTRSBpbiBkNCwKKwlvcmwJIzB4NDAwMDAwMDAsKCVhMCkJfGFuZCBpbiB3b3JraW5nIGJjZAorZV9zYXZlOgorCW1vdmVsCSVkMSxMX1NDUjEoJWE2KQl8c2F2ZSBleHAgaW4gbWVtb3J5Cit8Cit8Cit8IENhbGN1bGF0ZSBtYW50aXNzYToKK3wgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCit8ICAyLiBDb3JyZWN0IGZvciBtYW50aXNzYSBzaWduLgorfCAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8Cit8ICBjYWxjX206Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiBsd29yZCBjb3VudGVyCit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IHdvcmRzIDIgYW5kIDMgb2YgYmNkCit8CSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKK3wJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKK3wJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCit8CSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKK3wKK2NhbGNfbToKKwltb3ZlcWwJIzEsJWQxCQl8d29yZCBjb3VudGVyLCBpbml0IHRvIDEKKwlmbW92ZXMJRlpFUk8sJWZwMAl8YWNjdW11bGF0b3IKK3wKK3wKK3wgIFNpbmNlIHRoZSBwYWNrZWQgbnVtYmVyIGhhcyBhIGxvbmcgd29yZCBiZXR3ZWVuIHRoZSBmaXJzdCAmIHNlY29uZCBwYXJ0cywKK3wgIGdldCB0aGUgaW50ZWdlciBkaWdpdCB0aGVuIHNraXAgZG93biAmIGdldCB0aGUgcmVzdCBvZiB0aGUKK3wgIG1hbnRpc3NhLiAgV2Ugd2lsbCB1bnJvbGwgdGhlIGxvb3Agb25jZS4KK3wKKwliZmV4dHUJKCVhMCl7IzI4OiM0fSwlZDAJfGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKKwlmYWRkYgklZDAsJWZwMAkJfGFkZCBkaWdpdCB0byBzdW0gaW4gZnAwCit8Cit8Cit8ICBHZXQgdGhlIHJlc3Qgb2YgdGhlIG1hbnRpc3NhLgorfAorbG9hZGx3OgorCW1vdmVsCSglYTAsJWQxLkwqNCksJWQ0CXxsb2FkIG1hbnRpc3NhIGxvbmd3b3JkIGludG8gZDQKKwltb3ZlcWwJI0ZTVFJULCVkMwl8Y291bnRlciB0byBwaWNrIHVwIGRpZ2l0cworCW1vdmVxbAkjRk5JQlMsJWQyCXxyZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKK21kMmI6CisJZm11bHMJRlRFTiwlZnAwCXxmcDAgPSBmcDAgKiAxMAorCWJmZXh0dQklZDR7JWQzOiM0fSwlZDAJfGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kCisJZmFkZGIJJWQwLCVmcDAJfGZwMCA9IGZwMCArIGRpZ2l0Cit8Cit8Cit8ICBJZiBhbGwgdGhlIGRpZ2l0cyAoOCkgaW4gdGhhdCBsb25nIHdvcmQgaGF2ZSBiZWVuIGNvbnZlcnRlZCAoZDI9MCksCit8ICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAorfCAgdG8gaW5pdGlhbGl6ZSB0aGUgZGlnaXQgb2Zmc2V0LCBhbmQgc2V0IGQyIHRvIDcgZm9yIHRoZSBkaWdpdCBjb3VudDsKK3wgIGVsc2UgY29udGludWUgd2l0aCB0aGlzIGxvbmcgd29yZC4KK3wKKwlhZGRxYgkjNCwlZDMJCXxhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmCSVkMixtZDJiCQl8Y2hlY2sgZm9yIGxhc3QgZGlnaXQgaW4gdGhpcyBsdworbmV4dGx3OgorCWFkZHFsCSMxLCVkMQkJfGluYyBsdyBwb2ludGVyIGluIG1hbnRpc3NhCisJY21wbAkjMiwlZDEJCXx0ZXN0IGZvciBsYXN0IGx3CisJYmxlCWxvYWRsdwkJfGlmIG5vdCwgZ2V0IGxhc3Qgb25lCisKK3wKK3wgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBtYW50IGFuZCBtYWtlIHRoZSB2YWx1ZSBpbiBmcDAgdGhlIHNhbWUgc2lnbi4KK3wKK21fc2lnbjoKKwlidHN0CSMzMSwoJWEwKQl8dGVzdCBzaWduIG9mIHRoZSBtYW50aXNzYQorCWJlcQlhcF9zdF96CQl8aWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcworCWZuZWd4CSVmcDAJCXxpZiBzZXQsIG5lZ2F0ZSBmcDAKKworfAorfCBBcHBlbmQvc3RyaXAgemVyb3M6Cit8Cit8ICBGb3IgYWRqdXN0ZWQgZXhwb25lbnRzIHdoaWNoIGhhdmUgYW4gYWJzb2x1dGUgdmFsdWUgZ3JlYXRlciB0aGFuIDI3KiwKK3wgIHRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBhbW91bnQgbmVlZGVkIHRvIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EKK3wgIGZvciB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuICBUaGF0IG51bWJlciBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGV4cAorfCAgaWYgdGhlIGV4cCB3YXMgcG9zaXRpdmUsIGFuZCBhZGRlZCBpZiBpdCB3YXMgbmVnYXRpdmUuICBUaGUgcHVycG9zZQorfCAgb2YgdGhpcyBpcyB0byByZWR1Y2UgdGhlIHZhbHVlIG9mIHRoZSBleHBvbmVudCBhbmQgdGhlIHBvc3NpYmlsaXR5Cit8ICBvZiBlcnJvciBpbiBjYWxjdWxhdGlvbiBvZiBwd3J0ZW4uCit8Cit8ICAxLiBCcmFuY2ggb24gdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cG9uZW50LgorfCAgMnAuKHBvc2l0aXZlIGV4cCkKK3wgICAyLiBDaGVjayBNMTYgYW5kIHRoZSBkaWdpdHMgaW4gbHdvcmRzIDIgYW5kIDMgaW4gZGVzY2VuZGluZyBvcmRlci4KK3wgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KK3wgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgorfCAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgbWFrZSB0aGUgZXhwIGFicworfAkgICBhbmQgc2V0IFNFLgorfAk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgorfCAgMm4uKG5lZ2F0aXZlIGV4cCkKK3wgICAyLiBDaGVjayB0aGUgZGlnaXRzIGluIGx3b3JkcyAzIGFuZCAyIGluIGRlc2NlbmRpbmcgb3JkZXIuCit8ICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCit8ICAgNC4gQWRkIHRoZSBjb3VudCB0byB0aGUgZXhwLgorfCAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCit8ICAgNi4gRGl2aWRlIHRoZSBtYW50aXNzYSBieSAxMCoqY291bnQuCit8Cit8ICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KK3wgICBhbnkgYWRqdXN0bWVudCBkdWUgdG8gYXBwZW5kL3N0cmlwIHplcm9zIHdpbGwgZHJpdmUgdGhlIHJlc3VsdGFudAorfCAgIGV4cG9uZW50IHRvd2FyZHMgemVyby4gIFNpbmNlIGFsbCBwd3J0ZW4gY29uc3RhbnRzIHdpdGggYSBwb3dlcgorfCAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KK3wgICBhdHRlbXB0IHRvIGxlc3NlbiB0aGUgcmVzdWx0YW50IGV4cG9uZW50LgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wKK3wgIGFwX3N0X3o6Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiB6ZXJvIGNvdW50Cit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCit8CSgqKSAgZDU6IGx3b3JkIGNvdW50ZXIKK3wJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorfAkoICkgIEZQX1NDUjE6IHdvcmtpbmcgY29weSBvZiBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAorfAorfAorfCBGaXJzdCBjaGVjayB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IHRvIHNlZSBpZiB0aGlzCit8IHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50Cit8IGFuZCBkbyBhcHBlbmQgKCspIG9yIHN0cmlwICgtKSB6ZXJvcyBhY2NvcmRpbmdseS4KK3wgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBwb3NpdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KK3wKK2FwX3N0X3o6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQxCXxsb2FkIGV4cEEgZm9yIHJhbmdlIHRlc3QKKwljbXBsCSMyNywlZDEJCXx0ZXN0IGlzIHdpdGggMjcKKwlibGUJcHdydGVuCQl8aWYgYWJzKGV4cEEpIDwyOCwgc2tpcCBhcC9zdCB6ZXJvcworCWJ0c3QJIzMwLCglYTApCXxjaGVjayBzaWduIG9mIGV4cAorCWJuZQlhcF9zdF9uCQl8aWYgbmVnLCBnbyB0byBuZWcgc2lkZQorCWNscmwJJWQxCQl8emVybyBjb3VudCByZWcKKwltb3ZlbAkoJWEwKSwlZDQJCXxsb2FkIGx3b3JkIDEgdG8gZDQKKwliZmV4dHUJJWQ0eyMyODojNH0sJWQwCXxnZXQgTTE2IGluIGQwCisJYm5lcwlhcF9wX2Z4CQl8aWYgTTE2IGlzIG5vbi16ZXJvLCBnbyBmaXggZXhwCisJYWRkcWwJIzEsJWQxCQl8aW5jIHplcm8gY291bnQKKwltb3ZlcWwJIzEsJWQ1CQl8aW5pdCBsd29yZCBjb3VudGVyCisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAyIHRvIGQ0CisJYm5lcwlhcF9wX2NsCQl8aWYgbHcgMiBpcyB6ZXJvLCBza2lwIGl0CisJYWRkcWwJIzgsJWQxCQl8YW5kIGluYyBjb3VudCBieSA4CisJYWRkcWwJIzEsJWQ1CQl8aW5jIGx3b3JkIGNvdW50ZXIKKwltb3ZlbAkoJWEwLCVkNS5MKjQpLCVkNAl8Z2V0IGx3b3JkIDMgdG8gZDQKK2FwX3BfY2w6CisJY2xybAklZDMJCXxpbml0IG9mZnNldCByZWcKKwltb3ZlcWwJIzcsJWQyCQl8aW5pdCBkaWdpdCBjb3VudGVyCithcF9wX2dkOgorCWJmZXh0dQklZDR7JWQzOiM0fSwlZDAJfGdldCBkaWdpdAorCWJuZXMJYXBfcF9meAkJfGlmIG5vbi16ZXJvLCBnbyB0byBmaXggZXhwCisJYWRkcWwJIzQsJWQzCQl8cG9pbnQgdG8gbmV4dCBkaWdpdAorCWFkZHFsCSMxLCVkMQkJfGluYyBkaWdpdCBjb3VudGVyCisJZGJmCSVkMixhcF9wX2dkCXxnZXQgbmV4dCBkaWdpdAorYXBfcF9meDoKKwltb3ZlbAklZDEsJWQwCQl8Y29weSBjb3VudGVyIHRvIGQyCisJbW92ZWwJTF9TQ1IxKCVhNiksJWQxCXxnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CisJc3VibAklZDAsJWQxCQl8c3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ2VzCWFwX3BfZm0JCXxpZiBzdGlsbCBwb3MsIGdvIHRvIHB3cnRlbgorCW5lZ2wJJWQxCQl8bm93IGl0cyBuZWc7IGdldCBhYnMKKwltb3ZlbAkoJWEwKSwlZDQJCXxsb2FkIGx3b3JkIDEgdG8gZDQKKwlvcmwJIzB4NDAwMDAwMDAsJWQ0CXwgYW5kIHNldCBTRSBpbiBkNAorCW9ybAkjMHg0MDAwMDAwMCwoJWEwKQl8IGFuZCBpbiBtZW1vcnkKK3wKK3wgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgorfCB6ZXJvcyBmcm9tIHRoZSBtYW50aXNzYS4KK3wKK2FwX3BfZm06CisJbW92ZWwJI1BURU5STiwlYTEJfGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQorCWNscmwJJWQzCQl8aW5pdCB0YWJsZSBpbmRleAorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwltb3ZlcWwJIzMsJWQyCQl8aW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKK2FwX3BfZWw6CisJYXNybAkjMSwlZDAJCXxzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjY3MJYXBfcF9lbgkJfGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWx4CSglYTEsJWQzKSwlZnAxCXxtdWwgYnkgMTAqKihkM19iaXRfbm8pCithcF9wX2VuOgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgZDAgaXMgemVybworCWJuZXMJYXBfcF9lbAkJfGlmIG5vdCwgZ2V0IG5leHQgYml0CisJZm11bHgJJWZwMSwlZnAwCQl8bXVsIG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQorCWJyYQlwd3J0ZW4JCXxnbyBjYWxjIHB3cnRlbgorfAorfCBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIG5lZ2F0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorfAorYXBfc3RfbjoKKwljbHJsCSVkMQkJfGNsciBjb3VudGVyCisJbW92ZXFsCSMyLCVkNQkJfHNldCB1cCBkNSB0byBwb2ludCB0byBsd29yZCAzCisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAzCisJYm5lcwlhcF9uX2NsCQl8aWYgbm90IHplcm8sIGNoZWNrIGRpZ2l0cworCXN1YmwJIzEsJWQ1CQl8ZGVjIGQ1IHRvIHBvaW50IHRvIGx3b3JkIDIKKwlhZGRxbAkjOCwlZDEJCXxpbmMgY291bnRlciBieSA4CisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAyCithcF9uX2NsOgorCW1vdmVsCSMyOCwlZDMJCXxwb2ludCB0byBsYXN0IGRpZ2l0CisJbW92ZXFsCSM3LCVkMgkJfGluaXQgZGlnaXQgY291bnRlcgorYXBfbl9nZDoKKwliZmV4dHUJJWQ0eyVkMzojNH0sJWQwCXxnZXQgZGlnaXQKKwlibmVzCWFwX25fZngJCXxpZiBub24temVybywgZ28gdG8gZXhwIGZpeAorCXN1YnFsCSM0LCVkMwkJfHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CisJYWRkcWwJIzEsJWQxCQl8aW5jIGRpZ2l0IGNvdW50ZXIKKwlkYmYJJWQyLGFwX25fZ2QJfGdldCBuZXh0IGRpZ2l0CithcF9uX2Z4OgorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGNvdW50ZXIgdG8gZDAKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDEJfGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWJsCSVkMCwlZDEJCXxzdWJ0cmFjdCBjb3VudCBmcm9tIGV4cAorCWJndHMJYXBfbl9mbQkJfGlmIHN0aWxsIHBvcywgZ28gZml4IG1hbnRpc3NhCisJbmVnbAklZDEJCXx0YWtlIGFicyBvZiBleHAgYW5kIGNsciBTRQorCW1vdmVsCSglYTApLCVkNAkJfGxvYWQgbHdvcmQgMSB0byBkNAorCWFuZGwJIzB4YmZmZmZmZmYsJWQ0CXwgYW5kIGNsciBTRSBpbiBkNAorCWFuZGwJIzB4YmZmZmZmZmYsKCVhMCkJfCBhbmQgaW4gbWVtb3J5Cit8Cit8IENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCit8IHplcm9zIHRvIHRoZSBtYW50aXNzYS4KK3wKK2FwX25fZm06CisJbW92ZWwJI1BURU5STiwlYTEJfGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQorCWNscmwJJWQzCQl8aW5pdCB0YWJsZSBpbmRleAorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwltb3ZlcWwJIzMsJWQyCQl8aW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKK2FwX25fZWw6CisJYXNybAkjMSwlZDAJCXxzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjY3MJYXBfbl9lbgkJfGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWx4CSglYTEsJWQzKSwlZnAxCXxtdWwgYnkgMTAqKihkM19iaXRfbm8pCithcF9uX2VuOgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgZDAgaXMgemVybworCWJuZXMJYXBfbl9lbAkJfGlmIG5vdCwgZ2V0IG5leHQgYml0CisJZmRpdngJJWZwMSwlZnAwCQl8ZGl2IG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQorfAorfAorfCBDYWxjdWxhdGUgcG93ZXItb2YtdGVuIGZhY3RvciBmcm9tIGFkanVzdGVkIGFuZCBzaGlmdGVkIGV4cG9uZW50LgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wKK3wgIHB3cnRlbjoKK3wJKCopICBkMDogdGVtcAorfAkoICkgIGQxOiBleHBvbmVudAorfAkoKikgIGQyOiB7RlBDUls2OjVdLFNNLFNFfSBhcyBpbmRleCBpbiBSVEFCTEU7IHRlbXAKK3wJKCopICBkMzogRlBDUiB3b3JrIGNvcHkKK3wJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKK3wJKCopICBhMTogUlRBQkxFIHBvaW50ZXIKK3wgIGNhbGNfcDoKK3wJKCopICBkMDogdGVtcAorfAkoICkgIGQxOiBleHBvbmVudAorfAkoKikgIGQzOiBQV1JUeHggdGFibGUgaW5kZXgKK3wJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGNvcHkgb2YgYmNkCit8CSgqKSAgYTE6IFBXUlR4eCBwb2ludGVyCit8CSgqKSBmcDE6IHBvd2VyLW9mLXRlbiBhY2N1bXVsYXRvcgorfAorfCBQd3J0ZW4gY2FsY3VsYXRlcyB0aGUgZXhwb25lbnQgZmFjdG9yIGluIHRoZSBzZWxlY3RlZCByb3VuZGluZyBtb2RlCit8IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOgorfAorfAlTaWduIG9mIE1hbnQgIFNpZ24gb2YgRXhwICBSb3VuZGluZyBNb2RlICBQV1JURU4gUm91bmRpbmcgTW9kZQorfAorfAlBTlkJICBBTlkJUk4JUk4KK3wKK3wJICsJICAgKwlSUAlSUAorfAkgLQkgICArCVJQCVJNCit8CSArCSAgIC0JUlAJUk0KK3wJIC0JICAgLQlSUAlSUAorfAorfAkgKwkgICArCVJNCVJNCit8CSAtCSAgICsJUk0JUlAKK3wJICsJICAgLQlSTQlSUAorfAkgLQkgICAtCVJNCVJNCit8Cit8CSArCSAgICsJUloJUk0KK3wJIC0JICAgKwlSWglSTQorfAkgKwkgICAtCVJaCVJQCit8CSAtCSAgIC0JUloJUlAKK3wKK3wKK3B3cnRlbjoKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDMgfGdldCB1c2VyJ3MgRlBDUgorCWJmZXh0dQklZDN7IzI2OiMyfSwlZDIJfGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCisJbW92ZWwJKCVhMCksJWQ0CQl8cmVsb2FkIDFzdCBiY2Qgd29yZCB0byBkNAorCWFzbGwJIzIsJWQyCQl8Zm9ybWF0IGQyIHRvIGJlCisJYmZleHR1CSVkNHsjMDojMn0sJWQwCXwge0ZQQ1JbNl0sRlBDUls1XSxTTSxTRX0KKwlhZGRsCSVkMCwlZDIJCXxpbiBkMiBhcyBpbmRleCBpbnRvIFJUQUJMRQorCWxlYWwJUlRBQkxFLCVhMQl8bG9hZCBydGFibGUgYmFzZQorCW1vdmViCSglYTEsJWQyKSwlZDAJfGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQorCWNscmwJJWQzCQkJfGNsZWFyIGQzIHRvIGZvcmNlIG5vIGV4YyBhbmQgZXh0ZW5kZWQKKwliZmlucwklZDAsJWQzeyMyNjojMn0JfHN0dWZmIG5ldyByb3VuZGluZyBiaXRzIGluIEZQQ1IKKwlmbW92ZWwJJWQzLCVGUENSCQl8d3JpdGUgbmV3IEZQQ1IKKwlhc3JsCSMxLCVkMAkJfHdyaXRlIGNvcnJlY3QgUFRFTnh4IHRhYmxlCisJYmNjcwlub3RfcnAJCXx0byBhMQorCWxlYWwJUFRFTlJQLCVhMQl8aXQgaXMgUlAKKwlicmFzCWNhbGNfcAkJfGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JwOgorCWFzcmwJIzEsJWQwCQl8a2VlcCBjaGVja2luZworCWJjY3MJbm90X3JtCisJbGVhbAlQVEVOUk0sJWExCXxpdCBpcyBSTQorCWJyYXMJY2FsY19wCQl8Z28gdG8gaW5pdCBzZWN0aW9uCitub3Rfcm06CisJbGVhbAlQVEVOUk4sJWExCXxpdCBpcyBSTgorY2FsY19wOgorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGV4cCB0byBkMDt1c2UgZDAKKwlicGxzCW5vX25lZwkJfGlmIGV4cCBpcyBuZWdhdGl2ZSwKKwluZWdsCSVkMAkJfGludmVydCBpdAorCW9ybAkjMHg0MDAwMDAwMCwoJWEwKQl8YW5kIHNldCBTRSBiaXQKK25vX25lZzoKKwljbHJsCSVkMwkJfHRhYmxlIGluZGV4CisJZm1vdmVzCUZPTkUsJWZwMQl8aW5pdCBmcDEgdG8gMQorZV9sb29wOgorCWFzcmwJIzEsJWQwCQl8c2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjY3MJZV9uZXh0CQl8aWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bHgJKCVhMSwlZDMpLCVmcDEJfG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDoKKwlhZGRsCSMxMiwlZDMJCXxpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKKwl0c3RsCSVkMAkJfGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmVzCWVfbG9vcAkJfG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZworfAorfAorfCAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQorfCAgc2FtZSBzaWduLiBJZiB0aGUgZXhwIHdhcyBwb3MgdGhlbiBtdWx0aXBseSBmcDEqZnAwOworfCAgZWxzZSBkaXZpZGUgZnAwL2ZwMS4KK3wKK3wgUmVnaXN0ZXIgVXNhZ2U6Cit8ICBub3JtOgorfAkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCit8CSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCit8CSggKSBmcDE6IHNjYWxpbmcgZmFjdG9yIC0gMTAqKihhYnMoZXhwKSkKK3wKK25vcm06CisJYnRzdAkjMzAsKCVhMCkJfHRlc3QgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CisJYmVxcwltdWwJCXxpZiBjbGVhciwgZ28gdG8gbXVsdGlwbHkKK2RpdjoKKwlmZGl2eAklZnAxLCVmcDAJCXxleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAorCWJyYXMJZW5kX2RlYworbXVsOgorCWZtdWx4CSVmcDEsJWZwMAkJfGV4cCBpcyBwb3NpdGl2ZSwgc28gbXVsdGlwbHkgYnkgZXhwCit8Cit8Cit8IENsZWFuIHVwIGFuZCByZXR1cm4gd2l0aCByZXN1bHQgaW4gZnAwLgorfAorfCBJZiB0aGUgZmluYWwgbXVsL2RpdiBpbiBkZWNiaW4gaW5jdXJyZWQgYW4gaW5leCBleGNlcHRpb24sCit8IGl0IHdpbGwgYmUgaW5leDIsIGJ1dCB3aWxsIGJlIHJlcG9ydGVkIGFzIGluZXgxIGJ5IGdldF9vcC4KK3wKK2VuZF9kZWM6CisJZm1vdmVsCSVGUFNSLCVkMAkJfGdldCBzdGF0dXMgcmVnaXN0ZXIKKwliY2xybAkjaW5leDJfYml0KzgsJWQwCXx0ZXN0IGZvciBpbmV4MiBhbmQgY2xlYXIgaXQKKwlmbW92ZWwJJWQwLCVGUFNSCQl8cmV0dXJuIHN0YXR1cyByZWcgdy9vIGluZXgyCisJYmVxcwlub19leGMJCXxza2lwIHRoaXMgaWYgbm8gZXhjCisJb3JsCSNpbngxYV9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgaW5leDEvYWluZXgKK25vX2V4YzoKKwltb3ZlbWwJKCVhNykrLCVkMi0lZDUKKwlydHMKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9kb19mdW5jLlMgYi9hcmNoL202OGsvZnBzcDA0MC9kb19mdW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmNmE5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2RvX2Z1bmMuUwpAQCAtMCwwICsxLDU1OSBAQAorfAorfAlkb19mdW5jLnNhIDMuNCAyLzE4LzkxCit8Cit8IERvX2Z1bmMgcGVyZm9ybXMgdGhlIHVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uLiAgVGhlIG9wZXJhdGlvbgorfCB0byBiZSBwZXJmb3JtZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBsb3dlciA3IGJpdHMgb2YgdGhlCit8IGV4dGVuc2lvbiB3b3JkIChleGNlcHQgaW4gdGhlIGNhc2Ugb2YgZm1vdmVjciBhbmQgZnNpbmNvcykuCit8IFRoZSBvcGNvZGUgYW5kIHRhZyBiaXRzIGZvcm0gYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgaW4KK3wgdGJsZG8uc2EuICBDYXNlcyBvZiB6ZXJvLCBpbmZpbml0eSBhbmQgTmFOIGFyZSBoYW5kbGVkIGluCit8IGRvX2Z1bmMgYnkgZm9yY2luZyB0aGUgZGVmYXVsdCByZXN1bHQuICBOb3JtYWxpemVkIGFuZAorfCBkZW5vcm1hbGl6ZWQgKHRoZXJlIGFyZSBubyB1bm5vcm1hbGl6ZWQgbnVtYmVycyBhdCB0aGlzCit8IHBvaW50KSBhcmUgcGFzc2VkIG9udG8gdGhlIGVtdWxhdGlvbiBjb2RlLgorfAorfCBDTURSRUcxQiBhbmQgU1RBRyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIGZzYXZlIGZyYW1lCit8IGFuZCBjb21iaW5lZCB0byBmb3JtIHRoZSB0YWJsZSBpbmRleC4gIFRoZSBmdW5jdGlvbiBjYWxsZWQKK3wgd2lsbCBzdGFydCB3aXRoIGEwIHBvaW50aW5nIHRvIHRoZSBFVEVNUCBvcGVyYW5kLiAgRHlhZGljCit8IGZ1bmN0aW9ucyBjYW4gZmluZCBGUFRFTVAgYXQgLTEyKGEwKS4KK3wKK3wgQ2FsbGVkIGZ1bmN0aW9ucyByZXR1cm4gdGhlaXIgcmVzdWx0IGluIGZwMC4gIFNpbmNvcyByZXR1cm5zCit8IHNpbih4KSBpbiBmcDAgYW5kIGNvcyh4KSBpbiBmcDEuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0RPX0ZVTkM6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZgl0X2R6MgorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2lueDIKKwl8eHJlZgl0X3Jlc2Rucm0KKwl8eHJlZglkc3RfbmFuCisJfHhyZWYJc3JjX25hbgorCXx4cmVmCW5ybV9zZXQKKwl8eHJlZglzdG9fY29zCisKKwl8eHJlZgl0YmxwcmUKKwl8eHJlZglzbG9nbnAxLHNsb2duLHNsb2cxMCxzbG9nMgorCXx4cmVmCXNsb2duZCxzbG9nMTBkLHNsb2cyZAorCXx4cmVmCXNtb2Qsc3JlbQorCXx4cmVmCXNzY2FsZQorCXx4cmVmCXNtb3ZjcgorCitQT05FOgkubG9uZwkweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAl8KzEKK01PTkU6CS5sb25nCTB4YmZmZjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwCXwtMQorUFpFUk86CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwrMAorTVpFUk86CS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwtMAorUElORjoJLmxvbmcJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJfCtpbmYKK01JTkY6CS5sb25nCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwtaW5mCitRTkFOOgkubG9uZwkweDdmZmYwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZgl8bm9uLXNpZ25hbGluZyBuYW4KK1BQSUJZMjogIC5sb25nCTB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1CXwrUEkvMgorTVBJQlkyOiAgLmxvbmcJMHhiRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUJfC1QSS8yCisKKwkuZ2xvYmFsCWRvX2Z1bmMKK2RvX2Z1bmM6CisJY2xyYglDVV9PTkxZKCVhNikKK3wKK3wgQ2hlY2sgZm9yIGZtb3ZlY3IuICBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIGZvcm1hdCBvZiBmcCBnZW4KK3wgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMuICBUaGUgdGVzdCBpcyBvbiB0aGUgdXBwZXIgNiBiaXRzOworfCBpZiB0aGV5IGFyZSAkMTcsIHRoZSBpbnN0IGlzIGZtb3ZlY3IuICBDYWxsIGVudHJ5IHNtb3ZjcgorfCBkaXJlY3RseS4KK3wKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMDojNn0sJWQwIHxnZXQgb3BjbGFzcyBhbmQgc3JjIGZpZWxkcworCWNtcGlsCSMweDE3LCVkMAkJfGlmIG9wIGNsYXNzIGFuZCBzaXplIGZpZWxkcyBhcmUgJDE3LAorfAkJCQk7aXQgaXMgRk1PVkVDUjsgaWYgbm90LCBjb250aW51ZQorCWJuZXMJbm90X2Ztb3ZlY3IKKwlqbXAJc21vdmNyCQl8Zm1vdmVjcjsgam1wIGRpcmVjdGx5IHRvIGVtdWxhdGlvbgorCitub3RfZm1vdmVjcjoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWFuZGwJIzB4N0YsJWQwCisJY21waWwJIzB4MzgsJWQwCQl8aWYgdGhlIGV4dGVuc2lvbiBpcyA+PSAkMzgsCisJYmdlCXNlcnJvcgkJfGl0IGlzIGlsbGVnYWwKKwliZmV4dHUJU1RBRyglYTYpeyMwOiMzfSwlZDEKKwlsc2xsCSMzLCVkMAkJfG1ha2Ugcm9vbSBmb3IgU1RBRworCWFkZGwJJWQxLCVkMAkJfGNvbWJpbmUgZm9yIGZpbmFsIGluZGV4IGludG8gdGFibGUKKwlsZWFsCXRibHByZSwlYTEJfHN0YXJ0IG9mIG1vbnN0ZXIganVtcCB0YWJsZQorCW1vdmVsCSglYTEsJWQwLncqNCksJWExCXxyZWFsIHRhcmdldCBhZGRyZXNzCisJbGVhbAlFVEVNUCglYTYpLCVhMAl8YTAgaXMgcG9pbnRlciB0byBzcmMgb3AKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRsCSMweEZGLCVkMQkJfCBkaXNjYXJkIGFsbCBidXQgcm91bmRpbmcgbW9kZS9wcmVjCisJZm1vdmVsCSMwLCVmcGNyCisJam1wCSglYTEpCit8Cit8CUVSUk9SCit8CisJLmdsb2JhbAlzZXJyb3IKK3NlcnJvcjoKKwlzdAlTVE9SRV9GTEcoJWE2KQorCXJ0cworfAorfCBUaGVzZSByb3V0aW5lcyBsb2FkIGZvcmNlZCB2YWx1ZXMgaW50byBmcDAuICBUaGV5IGFyZSBjYWxsZWQKK3wgYnkgaW5kZXggaW50byB0Ymxkby4KK3wKK3wgTG9hZCBhIHNpZ25lZCB6ZXJvIHRvIGZwMCBhbmQgc2V0IGluZXgyL2FpbmV4Cit8CisJLmdsb2JhbAlzbnpyaW54CitzbnpyaW54OgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgc2lnbiBvZiBzb3VyY2Ugb3BlcmFuZAorCWJuZXMJbGRfbXppbngJfGlmIG5lZ2F0aXZlLCBicmFuY2gKKwlic3IJbGRfcHplcm8JfGJzciBzbyB3ZSBjYW4gcmV0dXJuIGFuZCBzZXQgaW54CisJYnJhCXRfaW54MgkJfG5vdywgc2V0IHRoZSBpbnggZm9yIHRoZSBuZXh0IGluc3QKK2xkX216aW54OgorCWJzcglsZF9temVybwl8aWYgbmVnLCBsb2FkIG5lZyB6ZXJvLCByZXR1cm4gaGVyZQorCWJyYQl0X2lueDIJCXxub3csIHNldCB0aGUgaW54IGZvciB0aGUgbmV4dCBpbnN0Cit8Cit8IExvYWQgYSBzaWduZWQgemVybyB0byBmcDA7IGRvIG5vdCBzZXQgaW5leDIvYWluZXgKK3wKKwkuZ2xvYmFsCXN6ZXJvCitzemVybzoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKSB8Z2V0IHNpZ24gb2Ygc291cmNlIG9wZXJhbmQKKwlibmUJbGRfbXplcm8JfGlmIG5lZywgbG9hZCBuZWcgemVybworCWJyYQlsZF9wemVybwl8bG9hZCBwb3NpdGl2ZSB6ZXJvCit8Cit8IExvYWQgYSBzaWduZWQgaW5maW5pdHkgdG8gZnAwOyBkbyBub3Qgc2V0IGluZXgyL2FpbmV4Cit8CisJLmdsb2JhbAlzaW5mCitzaW5mOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgc2lnbiBvZiBzb3VyY2Ugb3BlcmFuZAorCWJuZQlsZF9taW5mCQkJfGlmIG5lZ2F0aXZlIGJyYW5jaAorCWJyYQlsZF9waW5mCit8Cit8IExvYWQgYSBzaWduZWQgb25lIHRvIGZwMDsgZG8gbm90IHNldCBpbmV4Mi9haW5leAorfAorCS5nbG9iYWwJc29uZQorc29uZToKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbW9uZQorCWJyYQlsZF9wb25lCit8Cit8IExvYWQgYSBzaWduZWQgcGkvMiB0byBmcDA7IGRvIG5vdCBzZXQgaW5leDIvYWluZXgKK3wKKwkuZ2xvYmFsCXNwaV8yCitzcGlfMjoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbXBpMgorCWJyYQlsZF9wcGkyCit8Cit8IExvYWQgZWl0aGVyIGEgKzAgb3IgK2luZiBmb3IgcGx1cy9taW51cyBvcGVyYW5kCit8CisJLmdsb2JhbAlzenJfaW5mCitzenJfaW5mOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxjaGVjayBzaWduIG9mIHNvdXJjZQorCWJuZQlsZF9wemVybworCWJyYQlsZF9waW5mCit8Cit8IFJlc3VsdCBpcyBlaXRoZXIgYW4gb3BlcnIgb3IgK2luZiBmb3IgcGx1cy9taW51cyBvcGVyYW5kCit8IFtVc2VkIGJ5IHNsb2duLCBzbG9nbnAxLCBzbG9nMTAsIGFuZCBzbG9nMl0KK3wKKwkuZ2xvYmFsCXNvcHJfaW5mCitzb3ByX2luZjoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJdF9vcGVycgorCWJyYQlsZF9waW5mCit8Cit8CUZMT0dOUDEKK3wKKwkuZ2xvYmFsCXNzbG9nbnAxCitzc2xvZ25wMToKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAorCWZjbXBiCSMtMSwlZnAwCisJZmJndAlzbG9nbnAxCisJZmJlcQl0X2R6MgkJfGlmID0gLTEsIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbgorCWZtb3ZlbAkjMCwlRlBTUgkJfGNsciBOIGZsYWcKKwlicmEJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IC0xCit8Cit8CUZFVE9YTTEKK3wKKwkuZ2xvYmFsCXNldG94bTFpCitzZXRveG0xaToKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbW9uZQorCWJyYQlsZF9waW5mCit8Cit8CUZMT0dOCit8Cit8IFRlc3QgZm9yIDEuMCBhcyBhbiBpbnB1dCBhcmd1bWVudCwgcmV0dXJuaW5nICt6ZXJvLiAgQWxzbyBjaGVjaworfCB0aGUgc2lnbiBhbmQgcmV0dXJuIG9wZXJyIGlmIG5lZ2F0aXZlLgorfAorCS5nbG9iYWwJc3Nsb2duCitzc2xvZ246CisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlibmUJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IDAKKwljbXBpdwkjMHgzZmZmLExPQ0FMX0VYKCVhMCkgfHRlc3QgZm9yIDEuMCBpbnB1dAorCWJuZQlzbG9nbgorCWNtcGlsCSMweDgwMDAwMDAwLExPQ0FMX0hJKCVhMCkKKwlibmUJc2xvZ24KKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmUJc2xvZ24KKwlmbW92ZXgJUFpFUk8sJWZwMAorCXJ0cworCisJLmdsb2JhbAlzc2xvZ25kCitzc2xvZ25kOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYmVxCXNsb2duZAorCWJyYQl0X29wZXJyCQl8dGFrZSBjYXJlIG9mIG9wZXJhbmRzIDwgMAorCit8Cit8CUZMT0cxMAorfAorCS5nbG9iYWwJc3Nsb2cxMAorc3Nsb2cxMDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJuZQl0X29wZXJyCQl8dGFrZSBjYXJlIG9mIG9wZXJhbmRzIDwgMAorCWNtcGl3CSMweDNmZmYsTE9DQUxfRVgoJWEwKSB8dGVzdCBmb3IgMS4wIGlucHV0CisJYm5lCXNsb2cxMAorCWNtcGlsCSMweDgwMDAwMDAwLExPQ0FMX0hJKCVhMCkKKwlibmUJc2xvZzEwCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lCXNsb2cxMAorCWZtb3ZleAlQWkVSTywlZnAwCisJcnRzCisKKwkuZ2xvYmFsCXNzbG9nMTBkCitzc2xvZzEwZDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcQlzbG9nMTBkCisJYnJhCXRfb3BlcnIJCXx0YWtlIGNhcmUgb2Ygb3BlcmFuZHMgPCAwCisKK3wKK3wJRkxPRzIKK3wKKwkuZ2xvYmFsCXNzbG9nMgorc3Nsb2cyOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYm5lCXRfb3BlcnIJCXx0YWtlIGNhcmUgb2Ygb3BlcmFuZHMgPCAwCisJY21waXcJIzB4M2ZmZixMT0NBTF9FWCglYTApIHx0ZXN0IGZvciAxLjAgaW5wdXQKKwlibmUJc2xvZzIKKwljbXBpbAkjMHg4MDAwMDAwMCxMT0NBTF9ISSglYTApCisJYm5lCXNsb2cyCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lCXNsb2cyCisJZm1vdmV4CVBaRVJPLCVmcDAKKwlydHMKKworCS5nbG9iYWwJc3Nsb2cyZAorc3Nsb2cyZDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcQlzbG9nMmQKKwlicmEJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IDAKKworfAorfAlGTU9ECit8CitwbW9kdDoKK3wJCQkJOyQyMSBmbW9kCit8CQkJCTtkdGFnLHN0YWcKKwkubG9uZwlzbW9kCQl8ICAwMCwwMCAgbm9ybSxub3JtID0gbm9ybWFsCisJLmxvbmcJc21vZF9vcGVyCXwgIDAwLDAxICBub3JtLHplcm8gPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNtb2RfZnBuCXwgIDAwLDEwICBub3JtLGluZiAgPSBmcG4KKwkubG9uZwlzbW9kX3NuYW4JfCAgMDAsMTEgIG5vcm0sbmFuICA9IG5hbgorCS5sb25nCXNtb2RfenJvCXwgIDAxLDAwICB6ZXJvLG5vcm0gPSArLXplcm8KKwkubG9uZwlzbW9kX29wZXIJfCAgMDEsMDEgIHplcm8semVybyA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc21vZF96cm8JfCAgMDEsMTAgIHplcm8saW5mICA9ICstemVybworCS5sb25nCXNtb2Rfc25hbgl8ICAwMSwxMSAgemVybyxuYW4gID0gbmFuCisJLmxvbmcJc21vZF9vcGVyCXwgIDEwLDAwICBpbmYsbm9ybSAgPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNtb2Rfb3Blcgl8ICAxMCwwMSAgaW5mLHplcm8gID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzbW9kX29wZXIJfCAgMTAsMTAgIGluZixpbmYgICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc21vZF9zbmFuCXwgIDEwLDExICBpbmYsbmFuICAgPSBuYW4KKwkubG9uZwlzbW9kX2RuYW4JfCAgMTEsMDAgIG5hbixub3JtICA9IG5hbgorCS5sb25nCXNtb2RfZG5hbgl8ICAxMSwwMSAgbmFuLHplcm8gID0gbmFuCisJLmxvbmcJc21vZF9kbmFuCXwgIDExLDEwICBuYW4saW5mICAgPSBuYW4KKwkubG9uZwlzbW9kX2RuYW4JfCAgMTEsMTEgIG5hbixuYW4gICA9IG5hbgorCisJLmdsb2JhbAlwbW9kCitwbW9kOgorCWNscmIJRlBTUl9RQllURSglYTYpIHwgY2xlYXIgcXVvdGllbnQgZmllbGQKKwliZmV4dHUJU1RBRyglYTYpeyMwOiMzfSwlZDAgfHN0YWcgPSBkMAorCWJmZXh0dQlEVEFHKCVhNil7IzA6IzN9LCVkMSB8ZHRhZyA9IGQxCisKK3wKK3wgQWxpYXMgZXh0ZW5kZWQgZGVub3JtcyB0byBub3JtcyBmb3IgdGhlIGp1bXAgdGFibGUuCit8CisJYmNscmwJIzIsJWQwCisJYmNscmwJIzIsJWQxCisKKwlsc2xiCSMyLCVkMQorCW9yYgklZDAsJWQxCQl8ZDF7MzoyfSA9IGR0YWcsIGQxezE6MH0gPSBzdGFnCit8CQkJCTtUYWcgdmFsdWVzOgorfAkJCQk7MDAgPSBub3JtIG9yIGRlbm9ybQorfAkJCQk7MDEgPSB6ZXJvCit8CQkJCTsxMCA9IGluZgorfAkJCQk7MTEgPSBuYW4KKwlsZWEJcG1vZHQsJWExCisJbW92ZWwJKCVhMSwlZDEudyo0KSwlYTEKKwlqbXAJKCVhMSkKKworc21vZF9zbmFuOgorCWJyYQlzcmNfbmFuCitzbW9kX2RuYW46CisJYnJhCWRzdF9uYW4KK3Ntb2Rfb3BlcjoKKwlicmEJdF9vcGVycgorc21vZF96cm86CisJbW92ZWIJRVRFTVAoJWE2KSwlZDEJfGdldCBzaWduIG9mIHNyYyBvcAorCW1vdmViCUZQVEVNUCglYTYpLCVkMAl8Z2V0IHNpZ24gb2YgZHN0IG9wCisJZW9yYgklZDAsJWQxCQl8Z2V0IGV4b3Igb2Ygc2lnbiBiaXRzCisJYnRzdGwJIzcsJWQxCQl8dGVzdCBmb3Igc2lnbgorCWJlcXMJc21vZF96c24JfGlmIGNsciwgZG8gbm90IHNldCBzaWduIGJpZworCWJzZXRiCSNxX3NuX2JpdCxGUFNSX1FCWVRFKCVhNikgfHNldCBxLWJ5dGUgc2lnbiBiaXQKK3Ntb2RfenNuOgorCWJ0c3RsCSM3LCVkMAkJfHRlc3QgaWYgKyBvciAtCisJYmVxCWxkX3B6ZXJvCXxpZiBwb3MgdGhlbiBsb2FkICswCisJYnJhCWxkX216ZXJvCXxlbHNlIG5lZyBsb2FkIC0wCisKK3Ntb2RfZnBuOgorCW1vdmViCUVURU1QKCVhNiksJWQxCXxnZXQgc2lnbiBvZiBzcmMgb3AKKwltb3ZlYglGUFRFTVAoJWE2KSwlZDAJfGdldCBzaWduIG9mIGRzdCBvcAorCWVvcmIJJWQwLCVkMQkJfGdldCBleG9yIG9mIHNpZ24gYml0cworCWJ0c3RsCSM3LCVkMQkJfHRlc3QgZm9yIHNpZ24KKwliZXFzCXNtb2RfZnNuCXxpZiBjbHIsIGRvIG5vdCBzZXQgc2lnbiBiaWcKKwlic2V0YgkjcV9zbl9iaXQsRlBTUl9RQllURSglYTYpIHxzZXQgcS1ieXRlIHNpZ24gYml0CitzbW9kX2ZzbjoKKwl0c3RiCURUQUcoJWE2KQl8ZmlsdGVyIG91dCBkZW5vcm1hbCBkZXN0aW5hdGlvbiBjYXNlCisJYnBscwlzbW9kX25ybQl8CisJbGVhbAlGUFRFTVAoJWE2KSwlYTAJfGEwPC0gYWRkcihGUFRFTVApCisJYnJhCXRfcmVzZG5ybQl8Zm9yY2UgVU5GTChidXQgZXhhY3QpIHJlc3VsdAorc21vZF9ucm06CisJZm1vdmVsIFVTRVJfRlBDUiglYTYpLCVmcGNyIHx1c2UgdXNlcidzIHJtb2RlIGFuZCBwcmVjaXNpb24KKwlmbW92ZXggRlBURU1QKCVhNiksJWZwMAl8cmV0dXJuIGRlc3QgdG8gZnAwCisJcnRzCisKK3wKK3wJRlJFTQorfAorcHJlbXQ6Cit8CQkJCTskMjUgZnJlbQorfAkJCQk7ZHRhZyxzdGFnCisJLmxvbmcJc3JlbQkJfCAgMDAsMDAgIG5vcm0sbm9ybSA9IG5vcm1hbAorCS5sb25nCXNyZW1fb3Blcgl8ICAwMCwwMSAgbm9ybSx6ZXJvID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzcmVtX2Zwbgl8ICAwMCwxMCAgbm9ybSxpbmYgID0gZnBuCisJLmxvbmcJc3JlbV9zbmFuCXwgIDAwLDExICBub3JtLG5hbiAgPSBuYW4KKwkubG9uZwlzcmVtX3pybwl8ICAwMSwwMCAgemVybyxub3JtID0gKy16ZXJvCisJLmxvbmcJc3JlbV9vcGVyCXwgIDAxLDAxICB6ZXJvLHplcm8gPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNyZW1fenJvCXwgIDAxLDEwICB6ZXJvLGluZiAgPSArLXplcm8KKwkubG9uZwlzcmVtX3NuYW4JfCAgMDEsMTEgIHplcm8sbmFuICA9IG5hbgorCS5sb25nCXNyZW1fb3Blcgl8ICAxMCwwMCAgaW5mLG5vcm0gID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzcmVtX29wZXIJfCAgMTAsMDEgIGluZix6ZXJvICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc3JlbV9vcGVyCXwgIDEwLDEwICBpbmYsaW5mICAgPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNyZW1fc25hbgl8ICAxMCwxMSAgaW5mLG5hbiAgID0gbmFuCisJLmxvbmcJc3JlbV9kbmFuCXwgIDExLDAwICBuYW4sbm9ybSAgPSBuYW4KKwkubG9uZwlzcmVtX2RuYW4JfCAgMTEsMDEgIG5hbix6ZXJvICA9IG5hbgorCS5sb25nCXNyZW1fZG5hbgl8ICAxMSwxMCAgbmFuLGluZiAgID0gbmFuCisJLmxvbmcJc3JlbV9kbmFuCXwgIDExLDExICBuYW4sbmFuICAgPSBuYW4KKworCS5nbG9iYWwJcHJlbQorcHJlbToKKwljbHJiCUZQU1JfUUJZVEUoJWE2KSAgIHxjbGVhciBxdW90aWVudCBmaWVsZAorCWJmZXh0dQlTVEFHKCVhNil7IzA6IzN9LCVkMCB8c3RhZyA9IGQwCisJYmZleHR1CURUQUcoJWE2KXsjMDojM30sJWQxIHxkdGFnID0gZDEKK3wKK3wgQWxpYXMgZXh0ZW5kZWQgZGVub3JtcyB0byBub3JtcyBmb3IgdGhlIGp1bXAgdGFibGUuCit8CisJYmNscgkjMiwlZDAKKwliY2xyCSMyLCVkMQorCisJbHNsYgkjMiwlZDEKKwlvcmIJJWQwLCVkMQkJfGQxezM6Mn0gPSBkdGFnLCBkMXsxOjB9ID0gc3RhZworfAkJCQk7VGFnIHZhbHVlczoKK3wJCQkJOzAwID0gbm9ybSBvciBkZW5vcm0KK3wJCQkJOzAxID0gemVybworfAkJCQk7MTAgPSBpbmYKK3wJCQkJOzExID0gbmFuCisJbGVhCXByZW10LCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK3NyZW1fc25hbjoKKwlicmEJc3JjX25hbgorc3JlbV9kbmFuOgorCWJyYQlkc3RfbmFuCitzcmVtX29wZXI6CisJYnJhCXRfb3BlcnIKK3NyZW1fenJvOgorCW1vdmViCUVURU1QKCVhNiksJWQxCXxnZXQgc2lnbiBvZiBzcmMgb3AKKwltb3ZlYglGUFRFTVAoJWE2KSwlZDAJfGdldCBzaWduIG9mIGRzdCBvcAorCWVvcmIJJWQwLCVkMQkJfGdldCBleG9yIG9mIHNpZ24gYml0cworCWJ0c3RsCSM3LCVkMQkJfHRlc3QgZm9yIHNpZ24KKwliZXFzCXNyZW1fenNuCXxpZiBjbHIsIGRvIG5vdCBzZXQgc2lnbiBiaWcKKwlic2V0YgkjcV9zbl9iaXQsRlBTUl9RQllURSglYTYpIHxzZXQgcS1ieXRlIHNpZ24gYml0CitzcmVtX3pzbjoKKwlidHN0bAkjNywlZDAJCXx0ZXN0IGlmICsgb3IgLQorCWJlcQlsZF9wemVybwl8aWYgcG9zIHRoZW4gbG9hZCArMAorCWJyYQlsZF9temVybwl8ZWxzZSBuZWcgbG9hZCAtMAorCitzcmVtX2ZwbjoKKwltb3ZlYglFVEVNUCglYTYpLCVkMQl8Z2V0IHNpZ24gb2Ygc3JjIG9wCisJbW92ZWIJRlBURU1QKCVhNiksJWQwCXxnZXQgc2lnbiBvZiBkc3Qgb3AKKwllb3JiCSVkMCwlZDEJCXxnZXQgZXhvciBvZiBzaWduIGJpdHMKKwlidHN0bAkjNywlZDEJCXx0ZXN0IGZvciBzaWduCisJYmVxcwlzcmVtX2Zzbgl8aWYgY2xyLCBkbyBub3Qgc2V0IHNpZ24gYmlnCisJYnNldGIJI3Ffc25fYml0LEZQU1JfUUJZVEUoJWE2KSB8c2V0IHEtYnl0ZSBzaWduIGJpdAorc3JlbV9mc246CisJdHN0YglEVEFHKCVhNikJfGZpbHRlciBvdXQgZGVub3JtYWwgZGVzdGluYXRpb24gY2FzZQorCWJwbHMJc3JlbV9ucm0JfAorCWxlYWwJRlBURU1QKCVhNiksJWEwCXxhMDwtIGFkZHIoRlBURU1QKQorCWJyYQl0X3Jlc2Rucm0JfGZvcmNlIFVORkwoYnV0IGV4YWN0KSByZXN1bHQKK3NyZW1fbnJtOgorCWZtb3ZlbCBVU0VSX0ZQQ1IoJWE2KSwlZnBjciB8dXNlIHVzZXIncyBybW9kZSBhbmQgcHJlY2lzaW9uCisJZm1vdmV4IEZQVEVNUCglYTYpLCVmcDAJfHJldHVybiBkZXN0IHRvIGZwMAorCXJ0cworfAorfAlGU0NBTEUKK3wKK3BzY2FsZXQ6Cit8CQkJCTskMjYgZnNjYWxlCit8CQkJCTtkdGFnLHN0YWcKKwkubG9uZwlzc2NhbGUJCXwgIDAwLDAwICBub3JtLG5vcm0gPSByZXN1bHQKKwkubG9uZwlzc2NhbGUJCXwgIDAwLDAxICBub3JtLHplcm8gPSBmcG4KKwkubG9uZwlzY2xfb3ByCQl8ICAwMCwxMCAgbm9ybSxpbmYgID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzY2xfc25hbgl8ICAwMCwxMSAgbm9ybSxuYW4gID0gbmFuCisJLmxvbmcJc2NsX3pybwkJfCAgMDEsMDAgIHplcm8sbm9ybSA9ICstemVybworCS5sb25nCXNjbF96cm8JCXwgIDAxLDAxICB6ZXJvLHplcm8gPSArLXplcm8KKwkubG9uZwlzY2xfb3ByCQl8ICAwMSwxMCAgemVybyxpbmYgID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzY2xfc25hbgl8ICAwMSwxMSAgemVybyxuYW4gID0gbmFuCisJLmxvbmcJc2NsX2luZgkJfCAgMTAsMDAgIGluZixub3JtICA9ICstaW5mCisJLmxvbmcJc2NsX2luZgkJfCAgMTAsMDEgIGluZix6ZXJvICA9ICstaW5mCisJLmxvbmcJc2NsX29wcgkJfCAgMTAsMTAgIGluZixpbmYgICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc2NsX3NuYW4JfCAgMTAsMTEgIGluZixuYW4gICA9IG5hbgorCS5sb25nCXNjbF9kbmFuCXwgIDExLDAwICBuYW4sbm9ybSAgPSBuYW4KKwkubG9uZwlzY2xfZG5hbgl8ICAxMSwwMSAgbmFuLHplcm8gID0gbmFuCisJLmxvbmcJc2NsX2RuYW4JfCAgMTEsMTAgIG5hbixpbmYgICA9IG5hbgorCS5sb25nCXNjbF9kbmFuCXwgIDExLDExICBuYW4sbmFuICAgPSBuYW4KKworCS5nbG9iYWwJcHNjYWxlCitwc2NhbGU6CisJYmZleHR1CVNUQUcoJWE2KXsjMDojM30sJWQwIHxzdGFnIGluIGQwCisJYmZleHR1CURUQUcoJWE2KXsjMDojM30sJWQxIHxkdGFnIGluIGQxCisJYmNscmwJIzIsJWQwCQl8YWxpYXMgIGRlbm9ybSBpbnRvIG5vcm0KKwliY2xybAkjMiwlZDEJCXxhbGlhcyAgZGVub3JtIGludG8gbm9ybQorCWxzbGIJIzIsJWQxCisJb3JiCSVkMCwlZDEJCXxkMXs0OjJ9ID0gZHRhZywgZDF7MTowfSA9IHN0YWcKK3wJCQkJO2R0YWcgdmFsdWVzICAgICBzdGFnIHZhbHVlczoKK3wJCQkJOzAwMCA9IG5vcm0gICAgICAwMCA9IG5vcm0KK3wJCQkJOzAwMSA9IHplcm8JIDAxID0gemVybworfAkJCQk7MDEwID0gaW5mCSAxMCA9IGluZgorfAkJCQk7MDExID0gbmFuCSAxMSA9IG5hbgorfAkJCQk7MTAwID0gZG5ybQorfAorfAorCWxlYWwJcHNjYWxldCwlYTEJfGxvYWQgc3RhcnQgb2YganVtcCB0YWJsZQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCXxsb2FkIGExIHdpdGggbGFiZWwgZGVwZW5kaW5nIG9uIHRhZworCWptcAkoJWExKQkJfGdvIHRvIHRoZSByb3V0aW5lCisKK3NjbF9vcHI6CisJYnJhCXRfb3BlcnIKKworc2NsX2RuYW46CisJYnJhCWRzdF9uYW4KKworc2NsX3pybzoKKwlidHN0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikJfHRlc3QgaWYgKyBvciAtCisJYmVxCWxkX3B6ZXJvCQl8aWYgcG9zIHRoZW4gbG9hZCArMAorCWJyYQlsZF9temVybwkJfGlmIG5lZyB0aGVuIGxvYWQgLTAKK3NjbF9pbmY6CisJYnRzdGIJI3NpZ25fYml0LEZQVEVNUF9FWCglYTYpCXx0ZXN0IGlmICsgb3IgLQorCWJlcQlsZF9waW5mCQkJfGlmIHBvcyB0aGVuIGxvYWQgK2luZgorCWJyYQlsZF9taW5mCQkJfGVsc2UgbmVnIGxvYWQgLWluZgorc2NsX3NuYW46CisJYnJhCXNyY19uYW4KK3wKK3wJRlNJTkNPUworfAorCS5nbG9iYWwJc3NpbmNvc3oKK3NzaW5jb3N6OgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUCglYTYpCXxnZXQgc2lnbgorCWJlcXMJc2luY29zcAorCWZtb3ZleAlNWkVSTywlZnAwCisJYnJhcwlzaW5jb3Njb20KK3NpbmNvc3A6CisJZm1vdmV4IFBaRVJPLCVmcDAKK3NpbmNvc2NvbToKKwlmbW92ZW14IFBPTkUsJWZwMS0lZnAxCXxkbyBub3QgYWxsb3cgRlBTUiB0byBiZSBhZmZlY3RlZAorCWJyYQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCisJLmdsb2JhbAlzc2luY29zaQorc3NpbmNvc2k6CisJZm1vdmV4IFFOQU4sJWZwMQl8bG9hZCBOQU4KKwlic3IJc3RvX2NvcwkJfHN0b3JlIGNvc2luZSByZXN1bHQKKwlmbW92ZXggUU5BTiwlZnAwCXxsb2FkIE5BTgorCWJyYQl0X29wZXJyCisKKwkuZ2xvYmFsCXNzaW5jb3NuYW4KK3NzaW5jb3NuYW46CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUF9TQ1IxKCVhNikKKwltb3ZlbAlFVEVNUF9ISSglYTYpLEZQX1NDUjErNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxGUF9TQ1IxKzgoJWE2KQorCWJzZXRiCSNzaWduYW5fYml0LEZQX1NDUjErNCglYTYpCisJZm1vdmVteCBGUF9TQ1IxKCVhNiksJWZwMS0lZnAxCisJYnNyCXN0b19jb3MKKwlicmEJc3JjX25hbgorfAorfCBUaGlzIGNvZGUgZm9yY2VzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgemVybywgaW5mLCBhbmQgbmFuIGNhc2VzCit8IGluIHRoZSB0cmFuc2NlbmRlbnRhbHMgY29kZS4gIFRoZSBDQyBiaXRzIG11c3QgYmUgc2V0IGluIHRoZQorfCBzdGFja2VkIEZQU1IgdG8gYmUgY29ycmVjdGx5IHJlcG9ydGVkLgorfAorfCoqUmV0dXJucyArUEkvMgorCS5nbG9iYWwJbGRfcHBpMgorbGRfcHBpMjoKKwlmbW92ZXggUFBJQlkyLCVmcDAJCXxsb2FkICtwaS8yCisJYnJhCXRfaW54MgkJCXxzZXQgaW5leDIgZXhjCisKK3wqKlJldHVybnMgLVBJLzIKKwkuZ2xvYmFsCWxkX21waTIKK2xkX21waTI6CisJZm1vdmV4IE1QSUJZMiwlZnAwCQl8bG9hZCAtcGkvMgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBOIGJpdAorCWJyYQl0X2lueDIJCQl8c2V0IGluZXgyIGV4YworCit8KipSZXR1cm5zICtpbmYKKwkuZ2xvYmFsCWxkX3BpbmYKK2xkX3BpbmY6CisJZm1vdmV4IFBJTkYsJWZwMAkJfGxvYWQgK2luZgorCW9ybAkjaW5mX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBJIGJpdAorCXJ0cworCit8KipSZXR1cm5zIC1pbmYKKwkuZ2xvYmFsCWxkX21pbmYKK2xkX21pbmY6CisJZm1vdmV4IE1JTkYsJWZwMAkJfGxvYWQgLWluZgorCW9ybAkjbmVnX21hc2sraW5mX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBOIGFuZCBJIGJpdHMKKwlydHMKKworfCoqUmV0dXJucyArMQorCS5nbG9iYWwJbGRfcG9uZQorbGRfcG9uZToKKwlmbW92ZXggUE9ORSwlZnAwCQl8bG9hZCArMQorCXJ0cworCit8KipSZXR1cm5zIC0xCisJLmdsb2JhbAlsZF9tb25lCitsZF9tb25lOgorCWZtb3ZleCBNT05FLCVmcDAJCXxsb2FkIC0xCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IE4gYml0CisJcnRzCisKK3wqKlJldHVybnMgKzAKKwkuZ2xvYmFsCWxkX3B6ZXJvCitsZF9wemVybzoKKwlmbW92ZXggUFpFUk8sJWZwMAkJfGxvYWQgKzAKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IFogYml0CisJcnRzCisKK3wqKlJldHVybnMgLTAKKwkuZ2xvYmFsCWxkX216ZXJvCitsZF9temVybzoKKwlmbW92ZXggTVpFUk8sJWZwMAkJfGxvYWQgLTAKKwlvcmwJI25lZ19tYXNrK3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IE4gYW5kIFogYml0cworCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvZnBzcC5oIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZnBzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NGE0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9mcHNwLmgKQEAgLTAsMCArMSwzNDggQEAKK3wKK3wJZnBzcC5oIDMuMyAzLjMKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfAlmcHNwLmggLS0tIHN0YWNrIGZyYW1lIG9mZnNldHMgZHVyaW5nIEZQU1AgZXhjZXB0aW9uIGhhbmRsaW5nCit8Cit8CVRoZXNlIGVxdWF0ZXMgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZSBleGNlcHRpb24gZnJhbWUsIHRoZSBmc2F2ZQorfAlmcmFtZSBhbmQgYW55IGxvY2FsIHZhcmlhYmxlcyBuZWVkZWQgYnkgdGhlIEZQU1AgcGFja2FnZS4KK3wKK3wJQWxsIEZQU1AgaGFuZGxlcnMgYmVnaW4gYnkgZXhlY3V0aW5nOgorfAorfAkJbGluawlhNiwjLUxPQ0FMX1NJWkUKK3wJCWZzYXZlCS0oYTcpCit8CQltb3ZlbS5sCWQwLWQxL2EwLWExLFVTRVJfREEoYTYpCit8CQlmbW92ZW0ueCBmcDAtZnAzLFVTRVJfRlAwKGE2KQorfAkJZm1vdmUubAlmcHNyL2ZwY3IvZnBpYXIsVVNFUl9GUFNSKGE2KQorfAorfAlBZnRlciBpbml0aWFsaXphdGlvbiwgdGhlIHN0YWNrIGxvb2tzIGxpa2UgdGhpczoKK3wKK3wJQTcgLS0tPgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wJCXwJCQkJfAorfAkJfAlGUFUgZnNhdmUgYXJlYQkJfAorfAkJfAkJCQl8Cit8CQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wJCXwJCQkJfAorfAkJfAlGUFNQIExvY2FsIFZhcmlhYmxlcwl8Cit8CQl8CSAgICAgaW5jbHVkaW5nCQl8Cit8CQl8CSAgc2F2ZWQgcmVnaXN0ZXJzCXwKK3wJCXwJCQkJfAorfAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8CUE2IC0tLT4JfAlTYXZlZCBBNgkJfAorfAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8CQl8CQkJCXwKK3wJCXwJRXhjZXB0aW9uIEZyYW1lCQl8Cit8CQl8CQkJCXwKK3wJCXwJCQkJfAorfAorfAlQb3NpdGl2ZSBvZmZzZXRzIGZyb20gQTYgcmVmZXIgdG8gdGhlIGV4Y2VwdGlvbiBmcmFtZS4gIE5lZ2F0aXZlCit8CW9mZnNldHMgcmVmZXIgdG8gdGhlIExvY2FsIFZhcmlhYmxlIGFyZWEgYW5kIHRoZSBmc2F2ZSBhcmVhLgorfAlUaGUgZnNhdmUgZnJhbWUgaXMgYWxzbyBhY2Nlc3NpYmxlIGZyb20gdGhlIHRvcCB2aWEgQTcuCit8Cit8CU9uIGV4aXQsIHRoZSBoYW5kbGVycyBleGVjdXRlOgorfAorfAkJbW92ZW0ubAlVU0VSX0RBKGE2KSxkMC1kMS9hMC1hMQorfAkJZm1vdmVtLnggVVNFUl9GUDAoYTYpLGZwMC1mcDMKK3wJCWZtb3ZlLmwJVVNFUl9GUFNSKGE2KSxmcHNyL2ZwY3IvZnBpYXIKK3wJCWZyZXN0b3JlIChhNykrCit8CQl1bmxrCWE2Cit8Cit8CWFuZCB0aGVuIGVpdGhlciAiYnJhIGZwc3BfZG9uZSIgaWYgdGhlIGV4Y2VwdGlvbiB3YXMgY29tcGxldGVseQorfAloYW5kbGVkCWJ5IHRoZSBwYWNrYWdlLCBvciAiYnJhIHJlYWxfeHh4eCIgd2hpY2ggaXMgYW4gZXh0ZXJuYWwKK3wJbGFiZWwgdG8gYSByb3V0aW5lIHRoYXQgd2lsbCBwcm9jZXNzIGEgcmVhbCBleGNlcHRpb24gb2YgdGhlCit8CXR5cGUgdGhhdCB3YXMgZ2VuZXJhdGVkLiAgU29tZSBoYW5kbGVycyBtYXkgb21pdCB0aGUgImZyZXN0b3JlIgorfAlpZiB0aGUgRlBVIHN0YXRlIGFmdGVyIHRoZSBleGNlcHRpb24gaXMgaWRsZS4KK3wKK3wJU29tZXRpbWVzIHRoZSBleGNlcHRpb24gaGFuZGxlciB3aWxsIHRyYW5zZm9ybSB0aGUgZnNhdmUgYXJlYQorfAliZWNhdXNlIGl0IG5lZWRzIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gYmFjayB0byB0aGUgdXNlci4gIFRoaXMKK3wJY2FuIGhhcHBlbiBpZiB0aGUgcGFja2FnZSBpcyBlbnRlcmVkIGZvciBhbiB1bmltcGxlbWVudGVkIGZsb2F0Cit8CWluc3RydWN0aW9uIHRoYXQgZ2VuZXJhdGVzIChzYXkpIGFuIHVuZGVyZmxvdy4gIEFsdGVybmF0aXZlbHksCit8CWEgc2Vjb25kIGZzYXZlIGZyYW1lIGNhbiBiZSBwdXNoZWQgb250byB0aGUgc3RhY2sgYW5kIHRoZQorfAloYW5kbGVyCWV4aXQgY29kZSB3aWxsIHJlbG9hZCB0aGUgbmV3IGZyYW1lIGFuZCBkaXNjYXJkIHRoZSBvbGQuCit8Cit8CVRoZSByZWdpc3RlcnMgZDAsIGQxLCBhMCwgYTEgYW5kIGZwMC1mcDMgYXJlIGFsd2F5cyBzYXZlZCBhbmQKK3wJcmVzdG9yZWQgZnJvbSB0aGUgImxvY2FsIHZhcmlhYmxlIiBhcmVhIGFuZCBjYW4gYmUgdXNlZCBhcworfAl0ZW1wb3Jhcmllcy4gIElmIGEgcm91dGluZSBuZWVkcyB0byBjaGFuZ2UgYW55Cit8CW9mIHRoZXNlIHJlZ2lzdGVycywgaXQgc2hvdWxkIG1vZGlmeSB0aGUgc2F2ZWQgY29weSBhbmQgbGV0Cit8CXRoZSBoYW5kbGVyIGV4aXQgY29kZSByZXN0b3JlIHRoZSB2YWx1ZS4KK3wKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CUxvY2FsIFZhcmlhYmxlcyBvbiB0aGUgc3RhY2sKK3wKKwkuc2V0CUxPQ0FMX1NJWkUsMTkyCQl8IGJ5dGVzIG5lZWRlZCBmb3IgbG9jYWwgdmFyaWFibGVzCisJLnNldAlMViwtTE9DQUxfU0laRQl8IGNvbnZlbmllbnQgYmFzZSB2YWx1ZQorfAorCS5zZXQJVVNFUl9EQSxMViswCQl8IHNhdmUgc3BhY2UgZm9yIEQwLUQxLEEwLUExCisJLnNldAlVU0VSX0QwLExWKzAJCXwgc2F2ZWQgdXNlciBEMAorCS5zZXQJVVNFUl9EMSxMVis0CQl8IHNhdmVkIHVzZXIgRDEKKwkuc2V0CVVTRVJfQTAsTFYrOAkJfCBzYXZlZCB1c2VyIEEwCisJLnNldAlVU0VSX0ExLExWKzEyCQl8IHNhdmVkIHVzZXIgQTEKKwkuc2V0CVVTRVJfRlAwLExWKzE2CQl8IHNhdmVkIHVzZXIgRlAwCisJLnNldAlVU0VSX0ZQMSxMVisyOAkJfCBzYXZlZCB1c2VyIEZQMQorCS5zZXQJVVNFUl9GUDIsTFYrNDAJCXwgc2F2ZWQgdXNlciBGUDIKKwkuc2V0CVVTRVJfRlAzLExWKzUyCQl8IHNhdmVkIHVzZXIgRlAzCisJLnNldAlVU0VSX0ZQQ1IsTFYrNjQJCXwgc2F2ZWQgdXNlciBGUENSCisJLnNldAlGUENSX0VOQUJMRSxVU0VSX0ZQQ1IrMgl8CUZQQ1IgZXhjZXB0aW9uIGVuYWJsZQorCS5zZXQJRlBDUl9NT0RFLFVTRVJfRlBDUiszCXwJRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKKwkuc2V0CVVTRVJfRlBTUixMVis2OAkJfCBzYXZlZCB1c2VyIEZQU1IKKwkuc2V0CUZQU1JfQ0MsVVNFUl9GUFNSKzAJfAlGUFNSIGNvbmRpdGlvbiBjb2RlCisJLnNldAlGUFNSX1FCWVRFLFVTRVJfRlBTUisxCXwJRlBTUiBxdW90aWVudAorCS5zZXQJRlBTUl9FWENFUFQsVVNFUl9GUFNSKzIJfAlGUFNSIGV4Y2VwdGlvbgorCS5zZXQJRlBTUl9BRVhDRVBULFVTRVJfRlBTUiszCXwJRlBTUiBhY2NydWVkIGV4Y2VwdGlvbgorCS5zZXQJVVNFUl9GUElBUixMVis3MgkJfCBzYXZlZCB1c2VyIEZQSUFSCisJLnNldAlGUF9TQ1IxLExWKzc2CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlGUF9TQ1IyLExWKzkyCQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlMX1NDUjEsTFYrMTA4CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGxvbmcgdmFsdWUKKwkuc2V0CUxfU0NSMixMVisxMTIJCXwgcm9vbSBmb3IgYSB0ZW1wb3JhcnkgbG9uZyB2YWx1ZQorCS5zZXQJU1RPUkVfRkxHLExWKzExNgorCS5zZXQJQklOREVDX0ZMRyxMVisxMTcJCXwgdXNlZCBpbiBiaW5kZWMKKwkuc2V0CUROUk1fRkxHLExWKzExOAkJfCB1c2VkIGluIHJlc19mdW5jCisJLnNldAlSRVNfRkxHLExWKzExOQkJfCB1c2VkIGluIHJlc19mdW5jCisJLnNldAlEWV9NT19GTEcsTFYrMTIwCQl8IGR5YWRpYy9tb25hZGljIGZsYWcKKwkuc2V0CVVGTEdfVE1QLExWKzEyMQkJfCB0ZW1wb3JhcnkgZm9yIHVmbGFnIGVycmF0YQorCS5zZXQJQ1VfT05MWSxMVisxMjIJCXwgY3Utb25seSBmbGFnCisJLnNldAlWRVJfVE1QLExWKzEyMwkJfCB0ZW1wIGhvbGRpbmcgZm9yIHZlcnNpb24gbnVtYmVyCisJLnNldAlMX1NDUjMsTFYrMTI0CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGxvbmcgdmFsdWUKKwkuc2V0CUZQX1NDUjMsTFYrMTI4CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlGUF9TQ1I0LExWKzE0NAkJfCByb29tIGZvciBhIHRlbXBvcmFyeSBmbG9hdCB2YWx1ZQorCS5zZXQJRlBfU0NSNSxMVisxNjAJCXwgcm9vbSBmb3IgYSB0ZW1wb3JhcnkgZmxvYXQgdmFsdWUKKwkuc2V0CUZQX1NDUjYsTFYrMTc2Cit8Cit8TkVYVAkJZXF1CUxWKzE5MgkJO25lZWQgdG8gaW5jcmVhc2UgTE9DQUxfU0laRQorfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CWZzYXZlIG9mZnNldHMgYW5kIGJpdCBkZWZpbml0aW9ucworfAorfAlPZmZzZXRzIGFyZSBkZWZpbmVkIGZyb20gdGhlIGVuZCBvZiBhbiBmc2F2ZSBiZWNhdXNlIHRoZSBsYXN0IDEwCit8CXdvcmRzIG9mIGEgYnVzeSBmcmFtZSBhcmUgdGhlIHNhbWUgYXMgdGhlIHVuaW1wbGVtZW50ZWQgZnJhbWUuCit8CisJLnNldAlDVV9TQVZFUEMsTFYtOTIJCXwgbWljcm8tcGMgZm9yIENVICgxIGJ5dGUpCisJLnNldAlGUFJfRElSVFlfQklUUyxMVi05MQkJfCBmcHIgZGlydHkgYml0cworfAorCS5zZXQJV0JURU1QLExWLTc2CQl8IHdyaXRlIGJhY2sgdGVtcCAoMTIgYnl0ZXMpCisJLnNldAlXQlRFTVBfRVgsV0JURU1QCQl8IHdidGVtcCBzaWduIGFuZCBleHBvbmVudCAoMiBieXRlcykKKwkuc2V0CVdCVEVNUF9ISSxXQlRFTVArNAl8IHdidGVtcCBtYW50aXNzYSBbNjM6MzJdICg0IGJ5dGVzKQorCS5zZXQJV0JURU1QX0xPLFdCVEVNUCs4CXwgd2J0ZW1wIG1hbnRpc3NhIFszMTowMF0gKDQgYnl0ZXMpCit8CisJLnNldAlXQlRFTVBfU0dOLFdCVEVNUCsyCXwgdXNlZCB0byBzdG9yZSBzaWduCit8CisJLnNldAlGUFNSX1NIQURPVyxMVi02NAkJfCBmcHNyIHNoYWRvdyByZWcKK3wKKwkuc2V0CUZQSUFSQ1UsTFYtNjAJCXwgSW5zdHIuIGFkZHIuIHJlZy4gZm9yIENVICg0IGJ5dGVzKQorfAorCS5zZXQJQ01EUkVHMkIsTFYtNTIJCXwgY21kIHJlZyBmb3IgbWFjaGluZSAyCisJLnNldAlDTURSRUczQixMVi00OAkJfCBjbWQgcmVnIGZvciBFMyBleGNlcHRpb25zICgyIGJ5dGVzKQorfAorCS5zZXQJTk1ORVhDLExWLTQ0CQl8IE5NTkVYQyAodW5zdXAsc25hbiBiaXRzIG9ubHkpCisJLnNldAlubW5fdW5zdXBfYml0LDEJfAorCS5zZXQJbm1uX3NuYW5fYml0LDAJfAorfAorCS5zZXQJTk1DRVhDLExWLTQzCQl8IE5NTkVYQyAmIE5NQ0VYQworCS5zZXQJbm1uX29wZXJyX2JpdCw3CisJLnNldAlubW5fb3ZmbF9iaXQsNgorCS5zZXQJbm1uX3VuZmxfYml0LDUKKwkuc2V0CW5tY191bnN1cF9iaXQsNAorCS5zZXQJbm1jX3NuYW5fYml0LDMKKwkuc2V0CW5tY19vcGVycl9iaXQsMgorCS5zZXQJbm1jX292ZmxfYml0LDEKKwkuc2V0CW5tY191bmZsX2JpdCwwCit8CisJLnNldAlTVEFHLExWLTQwCQl8IHNvdXJjZSB0YWcgKDEgYnl0ZSkKKwkuc2V0CVdCVEVNUF9HUlMsTFYtNDAJCXwgYWxpYXMgd2J0ZW1wIGd1YXJkLCByb3VuZCwgc3RpY2t5CisJLnNldAlndWFyZF9iaXQsMQkJfCBndWFyZCBiaXQgaXMgYml0IG51bWJlciAxCisJLnNldAlyb3VuZF9iaXQsMAkJfCByb3VuZCBiaXQgaXMgYml0IG51bWJlciAwCisJLnNldAlzdGFnX21hc2ssMHhFMAkJfCB1cHBlciAzIGJpdHMgYXJlIHNvdXJjZSB0YWcgdHlwZQorCS5zZXQJZGVub3JtX2JpdCw3CQl8IGJpdCBkZXRlcm1pbmVzIGlmIGRlbm9ybSBvciB1bm5vcm0KKwkuc2V0CWV0ZW1wMTVfYml0LDQJCXwgZXRlbXAgZXhwb25lbnQgYml0ICMxNQorCS5zZXQJd2J0ZW1wNjZfYml0LDIJCXwgd2J0ZW1wIG1hbnRpc3NhIGJpdCAjNjYKKwkuc2V0CXdidGVtcDFfYml0LDEJCXwgd2J0ZW1wIG1hbnRpc3NhIGJpdCAjMQorCS5zZXQJd2J0ZW1wMF9iaXQsMAkJfCB3YnRlbXAgbWFudGlzc2EgYml0ICMwCit8CisJLnNldAlTVElDS1ksTFYtMzkJCXwgaG9sZHMgc3RpY2t5IGJpdAorCS5zZXQJc3RpY2t5X2JpdCw3Cit8CisJLnNldAlDTURSRUcxQixMVi0zNgkJfCBjbWQgcmVnIGZvciBFMSBleGNlcHRpb25zICgyIGJ5dGVzKQorCS5zZXQJa2ZhY3RfYml0LDEyCQl8IGRpc3Rpbmd1aXNoZXMgc3RhdGljL2R5bmFtaWMgay1mYWN0b3IKK3wJCQkJCTtvbiBwYWNrZWQgbW92ZSBvdXRzLiAgTk9URTogdGhpcworfAkJCQkJO2VxdWF0ZSBvbmx5IHdvcmtzIHdoZW4gQ01EUkVHMUIgaXMgaW4KK3wJCQkJCTthIHJlZ2lzdGVyLgorfAorCS5zZXQJQ01EV09SRCxMVi0zNQkJfCBjb21tYW5kIHdvcmQgaW4gY21kMWIKKwkuc2V0CWRpcmVjdGlvbl9iaXQsNQkJfCBiaXQgMCBpbiBvcGNsYXNzCisJLnNldAlzaXplX2JpdDIsMTIJCXwgYml0IDIgaW4gc2l6ZSBmaWVsZAorfAorCS5zZXQJRFRBRyxMVi0zMgkJfCBkZXN0IHRhZyAoMSBieXRlKQorCS5zZXQJZHRhZ19tYXNrLDB4RTAJCXwgdXBwZXIgMyBiaXRzIGFyZSBkZXN0IHR5cGUgdGFnCisJLnNldAlmcHRlbXAxNV9iaXQsNAkJfCBmcHRlbXAgZXhwb25lbnQgYml0ICMxNQorfAorCS5zZXQJV0JfQllURSxMVi0zMQkJfCBob2xkcyBXQlRFMTUgYml0ICgxIGJ5dGUpCisJLnNldAl3YnRlbXAxNV9iaXQsNAkJfCB3YnRlbXAgZXhwb25lbnQgYml0ICMxNQorfAorCS5zZXQJRV9CWVRFLExWLTI4CQl8IGhvbGRzIEUxIGFuZCBFMyBiaXRzICgxIGJ5dGUpCisJLnNldAlFMSwyCQl8IHdoaWNoIGJpdCBpcyBFMSBmbGFnCisJLnNldAlFMywxCQl8IHdoaWNoIGJpdCBpcyBFMyBmbGFnCisJLnNldAlTRkxBRywwCQl8IHdoaWNoIGJpdCBpcyBTIGZsYWcKK3wKKwkuc2V0CVRfQllURSxMVi0yNwkJfCBob2xkcyBUIGFuZCBVIGJpdHMgKDEgYnl0ZSkKKwkuc2V0CVhGTEFHLDcJCXwgd2hpY2ggYml0IGlzIFggZmxhZworCS5zZXQJVUZMQUcsNQkJfCB3aGljaCBiaXQgaXMgVSBmbGFnCisJLnNldAlURkxBRyw0CQl8IHdoaWNoIGJpdCBpcyBUIGZsYWcKK3wKKwkuc2V0CUZQVEVNUCxMVi0yNAkJfCBmcHRlbXAgKDEyIGJ5dGVzKQorCS5zZXQJRlBURU1QX0VYLEZQVEVNUAkJfCBmcHRlbXAgc2lnbiBhbmQgZXhwb25lbnQgKDIgYnl0ZXMpCisJLnNldAlGUFRFTVBfSEksRlBURU1QKzQJfCBmcHRlbXAgbWFudGlzc2EgWzYzOjMyXSAoNCBieXRlcykKKwkuc2V0CUZQVEVNUF9MTyxGUFRFTVArOAl8IGZwdGVtcCBtYW50aXNzYSBbMzE6MDBdICg0IGJ5dGVzKQorfAorCS5zZXQJRlBURU1QX1NHTixGUFRFTVArMgl8IHVzZWQgdG8gc3RvcmUgc2lnbgorfAorCS5zZXQJRVRFTVAsTFYtMTIJCXwgZXRlbXAgKDEyIGJ5dGVzKQorCS5zZXQJRVRFTVBfRVgsRVRFTVAJCXwgZXRlbXAgc2lnbiBhbmQgZXhwb25lbnQgKDIgYnl0ZXMpCisJLnNldAlFVEVNUF9ISSxFVEVNUCs0CQl8IGV0ZW1wIG1hbnRpc3NhIFs2MzozMl0gKDQgYnl0ZXMpCisJLnNldAlFVEVNUF9MTyxFVEVNUCs4CQl8IGV0ZW1wIG1hbnRpc3NhIFszMTowMF0gKDQgYnl0ZXMpCit8CisJLnNldAlFVEVNUF9TR04sRVRFTVArMgkJfCB1c2VkIHRvIHN0b3JlIHNpZ24KK3wKKwkuc2V0CUVYQ19TUiw0CQl8IGV4Y2VwdGlvbiBmcmFtZSBzdGF0dXMgcmVnaXN0ZXIKKwkuc2V0CUVYQ19QQyw2CQl8IGV4Y2VwdGlvbiBmcmFtZSBwcm9ncmFtIGNvdW50ZXIKKwkuc2V0CUVYQ19WRUMsMTAJCXwgZXhjZXB0aW9uIGZyYW1lIHZlY3RvciAoZm9ybWF0K3ZlY3RvciMpCisJLnNldAlFWENfRUEsMTIJCXwgZXhjZXB0aW9uIGZyYW1lIGVmZmVjdGl2ZSBhZGRyZXNzCit8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJRlBTUi9GUENSIGJpdHMKK3wKKwkuc2V0CW5lZ19iaXQsMwl8ICBuZWdhdGl2ZSByZXN1bHQKKwkuc2V0CXpfYml0LDIJfCAgemVybyByZXN1bHQKKwkuc2V0CWluZl9iaXQsMQl8ICBpbmZpbml0eSByZXN1bHQKKwkuc2V0CW5hbl9iaXQsMAl8ICBub3QtYS1udW1iZXIgcmVzdWx0Cit8CisJLnNldAlxX3NuX2JpdCw3CXwgIHNpZ24gYml0IG9mIHF1b3RpZW50IGJ5dGUKK3wKKwkuc2V0CWJzdW5fYml0LDcJfCAgYnJhbmNoIG9uIHVub3JkZXJlZAorCS5zZXQJc25hbl9iaXQsNgl8ICBzaWduYWxsaW5nIG5hbgorCS5zZXQJb3BlcnJfYml0LDUJfCAgb3BlcmFuZCBlcnJvcgorCS5zZXQJb3ZmbF9iaXQsNAl8ICBvdmVyZmxvdworCS5zZXQJdW5mbF9iaXQsMwl8ICB1bmRlcmZsb3cKKwkuc2V0CWR6X2JpdCwyCXwgIGRpdmlkZSBieSB6ZXJvCisJLnNldAlpbmV4Ml9iaXQsMQl8ICBpbmV4YWN0IHJlc3VsdCAyCisJLnNldAlpbmV4MV9iaXQsMAl8ICBpbmV4YWN0IHJlc3VsdCAxCit8CisJLnNldAlhaW9wX2JpdCw3CXwgIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KKwkuc2V0CWFvdmZsX2JpdCw2CXwgIGFjY3J1ZWQgb3ZlcmZsb3cKKwkuc2V0CWF1bmZsX2JpdCw1CXwgIGFjY3J1ZWQgdW5kZXJmbG93CisJLnNldAlhZHpfYml0LDQJfCAgYWNjcnVlZCBkaXZpZGUgYnkgemVybworCS5zZXQJYWluZXhfYml0LDMJfCAgYWNjcnVlZCBpbmV4YWN0Cit8Cit8CUZQU1IgaW5kaXZpZHVhbCBiaXQgbWFza3MKK3wKKwkuc2V0CW5lZ19tYXNrLDB4MDgwMDAwMDAKKwkuc2V0CXpfbWFzaywweDA0MDAwMDAwCisJLnNldAlpbmZfbWFzaywweDAyMDAwMDAwCisJLnNldAluYW5fbWFzaywweDAxMDAwMDAwCit8CisJLnNldAlic3VuX21hc2ssMHgwMDAwODAwMAl8CisJLnNldAlzbmFuX21hc2ssMHgwMDAwNDAwMAorCS5zZXQJb3BlcnJfbWFzaywweDAwMDAyMDAwCisJLnNldAlvdmZsX21hc2ssMHgwMDAwMTAwMAorCS5zZXQJdW5mbF9tYXNrLDB4MDAwMDA4MDAKKwkuc2V0CWR6X21hc2ssMHgwMDAwMDQwMAorCS5zZXQJaW5leDJfbWFzaywweDAwMDAwMjAwCisJLnNldAlpbmV4MV9tYXNrLDB4MDAwMDAxMDAKK3wKKwkuc2V0CWFpb3BfbWFzaywweDAwMDAwMDgwCXwgIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KKwkuc2V0CWFvdmZsX21hc2ssMHgwMDAwMDA0MAl8ICBhY2NydWVkIG92ZXJmbG93CisJLnNldAlhdW5mbF9tYXNrLDB4MDAwMDAwMjAJfCAgYWNjcnVlZCB1bmRlcmZsb3cKKwkuc2V0CWFkel9tYXNrLDB4MDAwMDAwMTAJfCAgYWNjcnVlZCBkaXZpZGUgYnkgemVybworCS5zZXQJYWluZXhfbWFzaywweDAwMDAwMDA4CXwgIGFjY3J1ZWQgaW5leGFjdAorfAorfAlGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQCit8CisJLnNldAlkemluZl9tYXNrLGluZl9tYXNrK2R6X21hc2srYWR6X21hc2sKKwkuc2V0CW9wbmFuX21hc2ssbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKKwkuc2V0CW56aV9tYXNrLDB4MDFmZmZmZmYJfCAgY2xlYXJzIE4sIFosIGFuZCBJCisJLnNldAl1bmZpbnhfbWFzayx1bmZsX21hc2sraW5leDJfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKKwkuc2V0CXVuZjJpbnhfbWFzayx1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCisJLnNldAlvdmZpbnhfbWFzayxvdmZsX21hc2sraW5leDJfbWFzaythb3ZmbF9tYXNrK2FpbmV4X21hc2sKKwkuc2V0CWlueDFhX21hc2ssaW5leDFfbWFzaythaW5leF9tYXNrCisJLnNldAlpbngyYV9tYXNrLGluZXgyX21hc2srYWluZXhfbWFzaworCS5zZXQJc25hbmlvcF9tYXNrLG5hbl9tYXNrK3NuYW5fbWFzaythaW9wX21hc2sKKwkuc2V0CW5hbmlvcF9tYXNrLG5hbl9tYXNrK2Fpb3BfbWFzaworCS5zZXQJbmVnaW5mX21hc2ssbmVnX21hc2sraW5mX21hc2sKKwkuc2V0CWluZmFpb3BfbWFzayxpbmZfbWFzaythaW9wX21hc2sKKwkuc2V0CW5lZ3pfbWFzayxuZWdfbWFzayt6X21hc2sKKwkuc2V0CW9wYW9wX21hc2ssb3BlcnJfbWFzaythaW9wX21hc2sKKwkuc2V0CXVuZmxfaW54X21hc2ssdW5mbF9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzaworCS5zZXQJb3ZmbF9pbnhfbWFzayxvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCit8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJRlBDUiByb3VuZGluZyBtb2RlcworfAorCS5zZXQJeF9tb2RlLDB4MDAJfCAgcm91bmQgdG8gZXh0ZW5kZWQKKwkuc2V0CXNfbW9kZSwweDQwCXwgIHJvdW5kIHRvIHNpbmdsZQorCS5zZXQJZF9tb2RlLDB4ODAJfCAgcm91bmQgdG8gZG91YmxlCit8CisJLnNldAlybl9tb2RlLDB4MDAJfCAgcm91bmQgbmVhcmVzdAorCS5zZXQJcnpfbW9kZSwweDEwCXwgIHJvdW5kIHRvIHplcm8KKwkuc2V0CXJtX21vZGUsMHgyMAl8ICByb3VuZCB0byBtaW51cyBpbmZpbml0eQorCS5zZXQJcnBfbW9kZSwweDMwCXwgIHJvdW5kIHRvIHBsdXMgaW5maW5pdHkKK3wKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfAorfAlNaXNjZWxsYW5lb3VzIGVxdWF0ZXMKK3wKKwkuc2V0CXNpZ25hbl9iaXQsNgl8ICBzaWduYWxsaW5nIG5hbiBiaXQgaW4gbWFudGlzc2EKKwkuc2V0CXNpZ25fYml0LDcKK3wKKwkuc2V0CXJuZF9zdGt5X2JpdCwyOQl8ICByb3VuZC9zdGlja3kgYml0IG9mIG1hbnRpc3NhCit8CQkJCXRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpZiBpbiBhIGRhdGEgcmVnaXN0ZXIKKwkuc2V0CXN4X21hc2ssMHgwMTgwMDAwMCB8ICBzZXQgcyBhbmQgeCBiaXRzIGluIHdvcmQgJDQ4Cit8CisJLnNldAlMT0NBTF9FWCwwCisJLnNldAlMT0NBTF9TR04sMgorCS5zZXQJTE9DQUxfSEksNAorCS5zZXQJTE9DQUxfTE8sOAorCS5zZXQJTE9DQUxfR1JTLDEyCXwgIHZhbGlkIE9OTFkgZm9yIEZQX1NDUjEsIEZQX1NDUjIKK3wKK3wKKwkuc2V0CW5vcm1fdGFnLDB4MDAJfCAgdGFnIGJpdHMgaW4gezc6NX0gcG9zaXRpb24KKwkuc2V0CXplcm9fdGFnLDB4MjAKKwkuc2V0CWluZl90YWcsMHg0MAorCS5zZXQJbmFuX3RhZywweDYwCisJLnNldAlkbnJtX3RhZywweDgwCit8Cit8CWZzYXZlIHNpemVzIGFuZCBmb3JtYXRzCit8CisJLnNldAlWRVJfNCwweDQwCQl8ICBmcHNwIGNvbXBhdGlibGUgdmVyc2lvbiBudW1iZXJzCit8CQkJCQlhcmUgaW4gdGhlICQ0MHMgeyQ0MC0kNGZ9CisJLnNldAlWRVJfNDAsMHg0MAkJfCAgb3JpZ2luYWwgdmVyc2lvbiBudW1iZXIKKwkuc2V0CVZFUl80MSwweDQxCQl8ICByZXZpc2lvbiB2ZXJzaW9uIG51bWJlcgorfAorCS5zZXQJQlVTWV9TSVpFLDEwMAkJfCAgc2l6ZSBvZiBidXN5IGZyYW1lCisJLnNldAlCVVNZX0ZSQU1FLExWLUJVU1lfU0laRQl8ICBzdGFydCBvZiBidXN5IGZyYW1lCit8CisJLnNldAlVTklNUF80MF9TSVpFLDQ0CQl8ICBzaXplIG9mIG9yaWcgdW5pbXAgZnJhbWUKKwkuc2V0CVVOSU1QXzQxX1NJWkUsNTIJCXwgIHNpemUgb2YgcmV2IHVuaW1wIGZyYW1lCit8CisJLnNldAlJRExFX1NJWkUsNAkJfCAgc2l6ZSBvZiBpZGxlIGZyYW1lCisJLnNldAlJRExFX0ZSQU1FLExWLUlETEVfU0laRQl8ICBzdGFydCBvZiBpZGxlIGZyYW1lCit8Cit8CWV4Y2VwdGlvbiB2ZWN0b3JzCit8CisJLnNldAlUUkFDRV9WRUMsMHgyMDI0CQl8ICB0cmFjZSB0cmFwCisJLnNldAlGTElORV9WRUMsMHgwMDJDCQl8ICByZWFsIEYtbGluZQorCS5zZXQJVU5JTVBfVkVDLDB4MjAyQwkJfCAgdW5pbXBsZW1lbnRlZAorCS5zZXQJSU5FWF9WRUMsMHgwMEM0Cit8CisJLnNldAlkYmxfdGhyZXNoLDB4M0MwMQorCS5zZXQJc2dsX3RocmVzaCwweDNGODEKK3wKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL2dlbl9leGNlcHQuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2dlbl9leGNlcHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFkMDZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZ2VuX2V4Y2VwdC5TCkBAIC0wLDAgKzEsNDY4IEBACit8Cit8CWdlbl9leGNlcHQuc2EgMy43IDEvMTYvOTIKK3wKK3wJZ2VuX2V4Y2VwdCAtLS0gRlBTUCByb3V0aW5lIHRvIGRldGVjdCByZXBvcnRhYmxlIGV4Y2VwdGlvbnMKK3wKK3wJVGhpcyByb3V0aW5lIGNvbXBhcmVzIHRoZSBleGNlcHRpb24gZW5hYmxlIGJ5dGUgb2YgdGhlCit8CXVzZXJfZnBjciBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgZXhjZXB0aW9uIHN0YXR1cyBieXRlCit8CW9mIHRoZSB1c2VyX2Zwc3IuCit8Cit8CUFueSByb3V0aW5lIHdoaWNoIG1heSByZXBvcnQgYW4gZXhjZXB0aW9ucyBtdXN0IGxvYWQKK3wJdGhlIHN0YWNrIGZyYW1lIGluIG1lbW9yeSB3aXRoIHRoZSBleGNlcHRpb25hbCBvcGVyYW5kKHMpLgorfAorfAlQcmlvcml0eSBmb3IgZXhjZXB0aW9ucyBpczoKK3wKK3wJSGlnaGVzdDoJYnN1bgorfAkJCXNuYW4KK3wJCQlvcGVycgorfAkJCW92ZmwKK3wJCQl1bmZsCit8CQkJZHoKK3wJCQlpbmV4MgorfAlMb3dlc3Q6CQlpbmV4MQorfAorfAlOb3RlOiBUaGUgSUVFRSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbmV4MiBpcyB0byBiZQorfAlyZXBvcnRlZCBpZiBvdmZsIG9jY3VycyBhbmQgdGhlIG92ZmwgZW5hYmxlIGJpdCBpcyBub3QKK3wJc2V0IGJ1dCB0aGUgaW5leDIgZW5hYmxlIGJpdCBpcy4KK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0dFTl9FWENFUFQ6ICAgIHxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbiA4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglyZWFsX3RyYWNlCisJfHhyZWYJZnBzcF9kb25lCisJfHhyZWYJZnBzcF9mbXRfZXJyb3IKKworZXhjX3RibDoKKwkubG9uZwlic3VuX2V4YworCS5sb25nCWNvbW1vbkUxCisJLmxvbmcJY29tbW9uRTEKKwkubG9uZwlvdmZsX3VuZmwKKwkubG9uZwlvdmZsX3VuZmwKKwkubG9uZwljb21tb25FMQorCS5sb25nCWNvbW1vbkUzCisJLmxvbmcJY29tbW9uRTMKKwkubG9uZwlub19tYXRjaAorCisJLmdsb2JhbAlnZW5fZXhjZXB0CitnZW5fZXhjZXB0OgorCWNtcGliCSNJRExFX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIGlkbGUgZnJhbWUKKwliZXEJZG9fY2hlY2sJCXxnbyBoYW5kbGUgaWRsZSBmcmFtZQorCWNtcGliCSNVTklNUF80MF9TSVpFLTQsMSglYTcpCXx0ZXN0IGZvciBvcmlnIHVuaW1wIGZyYW1lCisJYmVxcwl1bmltcF94CQkJfGdvIGhhbmRsZSB1bmltcCBmcmFtZQorCWNtcGliCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCXx0ZXN0IGZvciByZXYgdW5pbXAgZnJhbWUKKwliZXFzCXVuaW1wX3gJCQl8Z28gaGFuZGxlIHVuaW1wIGZyYW1lCisJY21waWIJI0JVU1lfU0laRS00LDEoJWE3KQl8aWYgc2l6ZSA8PiAkNjAsIGZtdCBlcnJvcgorCWJuZWwJZnBzcF9mbXRfZXJyb3IKKwlsZWFsCUJVU1lfU0laRStMT0NBTF9TSVpFKCVhNyksJWExIHxpbml0IGExIHNvIGZwc3AuaAorfAkJCQkJO2VxdWF0ZXMgd2lsbCB3b3JrCit8IEZpeCB1cCB0aGUgbmV3IGJ1c3kgZnJhbWUgd2l0aCBlbnRyaWVzIGZyb20gdGhlIHVuaW1wIGZyYW1lCit8CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxFVEVNUF9FWCglYTEpIHxjb3B5IGV0ZW1wIGZyb20gdW5pbXAKKwltb3ZlbAlFVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhMSkgfGZyYW1lIHRvIGJ1c3kgZnJhbWUKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEVURU1QX0xPKCVhMSkKKwltb3ZlbAlDTURSRUcxQiglYTYpLENNRFJFRzFCKCVhMSkgfHNldCBpbnN0IGluIGZyYW1lIHRvIHVuaW1wCisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJCXxmaXggY21kMWIgdG8gbWFrZSBpdAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTEpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKK3wKK3wgT3IgaW4gdGhlIEZQU1IgZnJvbSB0aGUgZW11bGF0aW9uIHdpdGggdGhlIFVTRVJfRlBTUiBvbiB0aGUgc3RhY2suCit8CisJZm1vdmVsCSVGUFNSLCVkMAorCW9ybAklZDAsVVNFUl9GUFNSKCVhNikKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTEpIHxzZXQgZXhjIGJpdHMKKwlvcmwJI3N4X21hc2ssRV9CWVRFKCVhMSkKKwlicmEJZG9fY2xlYW4KKworfAorfCBGcmFtZSBpcyBhbiB1bmltcCBmcmFtZSBwb3NzaWJsZSByZXN1bHRpbmcgZnJvbSBhbiBmbW92ZSA8ZWE+LGZwMAorfCB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24KK3wKK3wgYTEgaXMgbW9kaWZpZWQgdG8gcG9pbnQgaW50byB0aGUgbmV3IGZyYW1lIGFsbG93aW5nIGZwc3AgZXF1YXRlcworfCB0byBiZSB2YWxpZC4KK3wKK3VuaW1wX3g6CisJY21waWIJI1VOSU1QXzQwX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIG9yaWcgdW5pbXAgZnJhbWUKKwlibmVzCXRlc3RfcmV2CisJbGVhbAlVTklNUF80MF9TSVpFK0xPQ0FMX1NJWkUoJWE3KSwlYTEKKwlicmFzCXVuaW1wX2NvbgordGVzdF9yZXY6CisJY21waWIJI1VOSU1QXzQxX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIHJldiB1bmltcCBmcmFtZQorCWJuZWwJZnBzcF9mbXRfZXJyb3IJCXxpZiBub3QgJDI4IG9yICQzMAorCWxlYWwJVU5JTVBfNDFfU0laRStMT0NBTF9TSVpFKCVhNyksJWExCisKK3VuaW1wX2NvbjoKK3wKK3wgRml4IHVwIHRoZSBuZXcgdW5pbXAgZnJhbWUgd2l0aCBlbnRyaWVzIGZyb20gdGhlIG9sZCB1bmltcCBmcmFtZQorfAorCW1vdmVsCUNNRFJFRzFCKCVhNiksQ01EUkVHMUIoJWExKSB8c2V0IGluc3QgaW4gZnJhbWUgdG8gdW5pbXAKK3wKK3wgT3IgaW4gdGhlIEZQU1IgZnJvbSB0aGUgZW11bGF0aW9uIHdpdGggdGhlIFVTRVJfRlBTUiBvbiB0aGUgc3RhY2suCit8CisJZm1vdmVsCSVGUFNSLCVkMAorCW9ybAklZDAsVVNFUl9GUFNSKCVhNikKKwlicmEJZG9fY2xlYW4KKworfAorfCBGcmFtZSBpcyBpZGxlLCBzbyBjaGVjayBmb3IgZXhjZXB0aW9ucyByZXBvcnRlZCB0aHJvdWdoCit8IFVTRVJfRlBTUiBhbmQgc2V0IHRoZSB1bmltcCBmcmFtZSBhY2NvcmRpbmdseS4KK3wgQTcgbXVzdCBiZSBpbmNyZW1lbnRlZCB0byB0aGUgcG9pbnQgYmVmb3JlIHRoZQorfCBpZGxlIGZzYXZlIHZlY3RvciB0byB0aGUgdW5pbXAgdmVjdG9yLgorfAorCitkb19jaGVjazoKKwlhZGRsCSM0LCVhNwkJCXxwb2ludCBBNyBiYWNrIHRvIHVuaW1wIGZyYW1lCit8Cit8IE9yIGluIHRoZSBGUFNSIGZyb20gdGhlIGVtdWxhdGlvbiB3aXRoIHRoZSBVU0VSX0ZQU1Igb24gdGhlIHN0YWNrLgorfAorCWZtb3ZlbAklRlBTUiwlZDAKKwlvcmwJJWQwLFVTRVJfRlBTUiglYTYpCit8Cit8IE9uIGEgYnVzeSBmcmFtZSwgd2UgbXVzdCBjbGVhciB0aGUgbm1uZXhjIGJpdHMuCit8CisJY21waWIJI0JVU1lfU0laRS00LDEoJWE3KQl8Y2hlY2sgZnJhbWUgdHlwZQorCWJuZXMJY2hlY2tfZnIJCXxpZiBidXN5LCBjbHIgbm1uZXhjCisJY2xydwlOTU5FWEMoJWE2KQkJfGNsciBubW5leGMgJiBubWNleGMKKwlidHN0YgkjNSxDTURSRUcxQiglYTYpCQl8dGVzdCBmb3IgZm1vdmUgb3V0CisJYm5lcwlmcmFtZV9jb20KKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpIHxzZXQgZXhjIGJpdHMKKwlvcmwJI3N4X21hc2ssRV9CWVRFKCVhNikKKwlicmFzCWZyYW1lX2NvbQorY2hlY2tfZnI6CisJY21wYgkjVU5JTVBfNDBfU0laRS00LDEoJWE3KQorCWJlcXMJZnJhbWVfY29tCisJY2xydwlOTU5FWEMoJWE2KQorZnJhbWVfY29tOgorCW1vdmViCUZQQ1JfRU5BQkxFKCVhNiksJWQwCXxnZXQgZnBjciBlbmFibGUgYnl0ZQorCWFuZGIJRlBTUl9FWENFUFQoJWE2KSwlZDAJfGFuZCBpbiB0aGUgZnBzciBleGMgYnl0ZQorCWJmZmZvCSVkMHsjMjQ6Izh9LCVkMQkJfHRlc3QgZm9yIGZpcnN0IHNldCBiaXQKKwlsZWFsCWV4Y190YmwsJWEwCQl8bG9hZCBqbXAgdGFibGUgYWRkcmVzcworCXN1YmliCSMyNCwlZDEJCQl8bm9ybWFsaXplIGJpdCBvZmZzZXQgdG8gMC04CisJbW92ZWwJKCVhMCwlZDEudyo0KSwlYTAJCXxsb2FkIHJvdXRpbmUgYWRkcmVzcyBiYXNlZAorfAkJCQkJO2Jhc2VkIG9uIGZpcnN0IGVuYWJsZWQgZXhjCisJam1wCSglYTApCQkJfGp1bXAgdG8gcm91dGluZQorfAorfCBCc3VuIGlzIG5vdCBwb3NzaWJsZSBpbiB1bmltcCBvciB1bnN1cHAKK3wKK2JzdW5fZXhjOgorCWJyYQlkb19jbGVhbgorfAorfCBUaGUgdHlwaWNhbCB3b3JrIHRvIGJlIGRvbmUgdG8gdGhlIHVuaW1wIGZyYW1lIHRvIHJlcG9ydCBhbgorfCBleGNlcHRpb24gaXMgdG8gc2V0IHRoZSBFMS9FMyBieXRlIGFuZCBjbHIgdGhlIFUgZmxhZy4KK3wgY29tbW9uRTEgZG9lcyB0aGlzIGZvciBFMSBleGNlcHRpb25zLCB3aGljaCBhcmUgc25hbiwKK3wgb3BlcnIsIGFuZCBkei4gIGNvbW1vbkUzIGRvZXMgdGhpcyBmb3IgRTMgZXhjZXB0aW9ucywgd2hpY2gKK3wgYXJlIGluZXgyIGFuZCBpbmV4MSwgYW5kIGFsc28gY2xlYXJzIHRoZSBFMSBleGNlcHRpb24gYml0Cit8IGxlZnQgb3ZlciBmcm9tIHRoZSB1bmltcCBleGNlcHRpb24uCit8Citjb21tb25FMToKKwlic2V0YgkjRTEsRV9CWVRFKCVhNikJCXxzZXQgRTEgZmxhZworCWJyYQljb21tb25FCQkJfGdvIGNsZWFuIGFuZCBleGl0CisKK2NvbW1vbkUzOgorCXRzdGIJVUZMR19UTVAoJWE2KQkJfHRlc3QgZmxhZyBmb3IgdW5zdXAvdW5pbXAgc3RhdGUKKwlibmVzCXVuc0UzCit1bmlFMzoKKwlic2V0YgkjRTMsRV9CWVRFKCVhNikJCXxzZXQgRTMgZmxhZworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQkJfGNsciBFMSBmcm9tIHVuaW1wCisJYnJhCWNvbW1vbkUKKwordW5zRTM6CisJdHN0YglSRVNfRkxHKCVhNikKKwlibmVzCXVuc0UzXzAKK3Vuc0UzXzE6CisJYnNldGIJI0UzLEVfQllURSglYTYpCQl8c2V0IEUzIGZsYWcKK3Vuc0UzXzA6CisJYmNscmIJI0UxLEVfQllURSglYTYpCQl8Y2xyIEUxIGZsYWcKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTYpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKKworY29tbW9uRToKKwliY2xyYgkjVUZMQUcsVF9CWVRFKCVhNikJfGNsciBVIGZsYWcgZnJvbSB1bmltcAorCWJyYQlkb19jbGVhbgkJfGdvIGNsZWFuIGFuZCBleGl0Cit8Cit8IE5vIGJpdHMgaW4gdGhlIGVuYWJsZSBieXRlIG1hdGNoIGV4aXN0aW5nIGV4Y2VwdGlvbnMuICBDaGVjayBmb3IKK3wgdGhlIGNhc2Ugb2YgdGhlIG92ZmwgZXhjIHdpdGhvdXQgdGhlIG92ZmwgZW5hYmxlZCwgYnV0IHdpdGgKK3wgaW5leDIgZW5hYmxlZC4KK3wKK25vX21hdGNoOgorCWJ0c3RiCSNpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8Y2hlY2sgZm9yIG92ZmwvaW5leDIgY2FzZQorCWJlcXMJbm9fZXhjCQkJfGlmIGNsZWFyLCBleGl0CisJYnRzdGIJI292ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgfG5vdyBjaGVjayBvdmZsCisJYmVxcwlub19leGMJCQl8aWYgY2xlYXIsIGV4aXQKKwlicmFzCW92ZmxfdW5mbAkJfGdvIHRvIHVuZmxfb3ZmbCB0byBkZXRlcm1pbmUgaWYKK3wJCQkJCTtpdCBpcyBhbiB1bnN1cHAgb3IgdW5pbXAgZXhjCisKK3wgTm8gZXhjZXB0aW9ucyBhcmUgdG8gYmUgcmVwb3J0ZWQuICBJZiB0aGUgaW5zdHJ1Y3Rpb24gd2FzCit8IHVuaW1wbGVtZW50ZWQsIG5vIEZQVSByZXN0b3JlIGlzIG5lY2Vzc2FyeS4gIElmIGl0IHdhcworfCB1bnN1cHBvcnRlZCwgd2UgbXVzdCBwZXJmb3JtIHRoZSByZXN0b3JlLgorbm9fZXhjOgorCXRzdGIJVUZMR19UTVAoJWE2KQl8dGVzdCBmbGFnIGZvciB1bnN1cHAvdW5pbXAgc3RhdGUKKwliZXFzCXVuaV9ub19leGMKK3Vuc19ub19leGM6CisJdHN0YglSRVNfRkxHKCVhNikJfGNoZWNrIGlmIGZyZXN0b3JlIGlzIG5lZWRlZAorCWJuZQlkb19jbGVhbgl8aWYgY2xlYXIsIG5vIGZyZXN0b3JlIG5lZWRlZAordW5pX25vX2V4YzoKKwltb3ZlbWwJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXggVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sIFVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCXVubGsJJWE2CisJYnJhCWZpbmlzaF91cAorfAorfCBVbnN1cHBvcnRlZCBEYXRhIFR5cGUgSGFuZGxlcjoKK3wgT3ZmbDoKK3wgICBBbiBmbW92ZW91dCB0aGF0IHJlc3VsdHMgaW4gYW4gb3ZlcmZsb3cgaXMgcmVwb3J0ZWQgdGhpcyB3YXkuCit8IFVuZmw6Cit8ICAgQW4gZm1vdmVvdXQgdGhhdCByZXN1bHRzIGluIGFuIHVuZGVyZmxvdyBpcyByZXBvcnRlZCB0aGlzIHdheS4KK3wKK3wgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbiBIYW5kbGVyOgorfCBPdmZsOgorfCAgIE9ubHkgc2Nvc2gsIHNldG94LCBzc2luaCwgc3R3b3RveCwgYW5kIHNjYWxlIGNhbiBzZXQgb3ZlcmZsb3cgaW4KK3wgICB0aGlzIG1hbm5lci4KK3wgVW5mbDoKK3wgICBTdHdvdG94LCBzZXRveCwgYW5kIHNjYWxlIGNhbiBzZXQgdW5kZXJmbG93IGluIHRoaXMgbWFubmVyLgorfCAgIEFueSBvZiB0aGUgb3RoZXIgTGlicmFyeSBSb3V0aW5lcyBzdWNoIHRoYXQgZih4KT14IGluIHdoaWNoCit8ICAgeCBpcyBhbiBleHRlbmRlZCBkZW5vcm0gY2FuIHJlcG9ydCBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uLgorfCAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZXhjZXB0aW9uLWNhdXNpbmcgZXhjZXB0aW9uCit8ICAgdG8gbWFrZSBzdXJlIHRoYXQgV0JURU1QIGlzIGNvcnJlY3QuCit8Cit8ICAgVGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQgaXMgaW4gRlBfU0NSMS4KK3wKK292ZmxfdW5mbDoKKwl0c3RiCVVGTEdfVE1QKCVhNikJfHRlc3QgZmxhZyBmb3IgdW5zdXBwL3VuaW1wIHN0YXRlCisJYmVxcwlvZnVmX2NvbgorfAorfCBUaGUgY2FsbGVyIHdhcyBmcm9tIGFuIHVuc3VwcG9ydGVkIGRhdGEgdHlwZSB0cmFwLiAgVGVzdCBpZiB0aGUKK3wgY2FsbGVyIHNldCBDVV9PTkxZLiAgSWYgc28sIHRoZSBleGNlcHRpb25hbCBvcGVyYW5kIGlzIGV4cGVjdGVkIGluCit8IEZQVEVNUCwgcmF0aGVyIHRoYW4gV0JURU1QLgorfAorCXRzdGIJQ1VfT05MWSglYTYpCQl8dGVzdCBpZiBpbnN0IGlzIGN1LW9ubHkKKwliZXEJdW5zRTMKK3wJbW92ZS53CSMkZmUsQ1VfU0FWRVBDKCVhNikKKwljbHJiCUNVX1NBVkVQQyglYTYpCisJYnNldGIJI0UxLEVfQllURSglYTYpCQl8c2V0IEUxIGV4Y2VwdGlvbiBmbGFnCisJbW92ZXcJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksRlBURU1QX0hJKCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEZQVEVNUF9MTyglYTYpCisJYnNldGIJI2ZwdGVtcDE1X2JpdCxEVEFHKCVhNikJfHNldCBmcHRlMTUKKwliY2xyYgkjVUZMQUcsVF9CWVRFKCVhNikJfGNsciBVIGZsYWcgZnJvbSB1bmltcAorCWJyYQlkb19jbGVhbgkJfGdvIGNsZWFuIGFuZCBleGl0CisKK29mdWZfY29uOgorCW1vdmViCSglYTcpLFZFUl9UTVAoJWE2KQl8c2F2ZSB2ZXJzaW9uIG51bWJlcgorCWNtcGliCSNCVVNZX1NJWkUtNCwxKCVhNykJfGNoZWNrIGZvciBidXN5IGZyYW1lCisJYmVxcwlidXN5X2ZyCQkJfGlmIHVuaW1wLCBncm93IHRvIGJ1c3kKKwljbXBpYgkjVkVSXzQwLCglYTcpCQl8dGVzdCBmb3Igb3JpZyB1bmltcCBmcmFtZQorCWJuZXMJdHJ5XzQxCQkJfGlmIG5vdCwgdGVzdCBmb3IgcmV2IGZyYW1lCisJbW92ZXFsCSMxMywlZDAJCQl8bmVlZCB0byB6ZXJvIDE0IGx3b3JkcworCWJyYXMJb2Z1Zl9maW4KK3RyeV80MToKKwljbXBpYgkjVkVSXzQxLCglYTcpCQl8dGVzdCBmb3IgcmV2IHVuaW1wIGZyYW1lCisJYm5lbAlmcHNwX2ZtdF9lcnJvcgkJfGlmIG5laXRoZXIsIGV4aXQgd2l0aCBlcnJvcgorCW1vdmVxbAkjMTEsJWQwCQkJfG5lZWQgdG8gemVybyAxMiBsd29yZHMKKworb2Z1Zl9maW46CisJY2xybAkoJWE3KQorbG9vcDE6CisJY2xybAktKCVhNykJCQl8Y2xlYXIgYW5kIGRlYyBhNworCWRicmEJJWQwLGxvb3AxCisJbW92ZWIJVkVSX1RNUCglYTYpLCglYTcpCisJbW92ZWIJI0JVU1lfU0laRS00LDEoJWE3KQkJfHdyaXRlIGJ1c3kgZm10IHdvcmQuCitidXN5X2ZyOgorCW1vdmVsCUZQX1NDUjEoJWE2KSxXQlRFTVBfRVgoJWE2KQl8d3JpdGUKKwltb3ZlbAlGUF9TQ1IxKzQoJWE2KSxXQlRFTVBfSEkoJWE2KQl8ZXhjZXB0aW9uYWwgb3AgdG8KKwltb3ZlbAlGUF9TQ1IxKzgoJWE2KSxXQlRFTVBfTE8oJWE2KQl8d2J0ZW1wCisJYnNldGIJI0UzLEVfQllURSglYTYpCQkJfHNldCBFMyBmbGFnCisJYmNscmIJI0UxLEVfQllURSglYTYpCQkJfG1ha2Ugc3VyZSBFMSBpcyBjbGVhcgorCWJjbHJiCSNVRkxBRyxUX0JZVEUoJWE2KQkJfGNsciBVIGZsYWcKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJCXxmaXggY21kMWIgdG8gbWFrZSBpdAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTYpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKKworfAorfCBDaGVjayBpZiB0aGUgZnJhbWUgdG8gYmUgcmVzdG9yZWQgaXMgYnVzeSBvciB1bmltcC4KK3wqKiBOT1RFICoqKiBCdWcgZml4IGZvciBlcnJhdGEgKDBkNDNiICMzKQorfCBJZiB0aGUgZnJhbWUgaXMgdW5pbXAsIHdlIG11c3QgY3JlYXRlIGEgYnVzeSBmcmFtZSB0bworfCBmaXggdGhlIGJ1ZyB3aXRoIHRoZSBubW5leGMgYml0cyBpbiBjYXNlcyBpbiB3aGljaCB0aGV5Cit8IGFyZSBzZXQgYnkgYSBwcmV2aW91cyBpbnN0cnVjdGlvbiBhbmQgbm90IGNsZWFyZWQgYnkKK3wgdGhlIHNhdmUuIFRoZSBmcmFtZSB3aWxsIGJlIHVuaW1wIG9ubHkgaWYgdGhlIGZpbmFsCit8IGluc3RydWN0aW9uIGluIGFuIGVtdWxhdGlvbiByb3V0aW5lIGNhdXNlZCB0aGUgZXhjZXB0aW9uCit8IGJ5IGRvaW5nIGFuIGZtb3ZlIDxlYT4sZnAwLiAgVGhlIGV4Y2VwdGlvbiBvcGVyYW5kLCBpbgorfCBpbnRlcm5hbCBmb3JtYXQsIGlzIGluIGZwdGVtcC4KK3wKK2RvX2NsZWFuOgorCWNtcGliCSNVTklNUF80MF9TSVpFLTQsMSglYTcpCisJYm5lcwlkb19jb24KKwltb3ZlcWwJIzEzLCVkMAkJCXxpbiBvcmlnLCBuZWVkIHRvIHplcm8gMTQgbHdvcmRzCisJYnJhcwlkb19idWlsZAorZG9fY29uOgorCWNtcGliCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCisJYm5lcwlkb19yZXN0b3JlCQl8ZnJhbWUgbXVzdCBiZSBidXN5CisJbW92ZXFsCSMxMSwlZDAJCQl8aW4gcmV2LCBuZWVkIHRvIHplcm8gMTIgbHdvcmRzCisKK2RvX2J1aWxkOgorCW1vdmViCSglYTcpLFZFUl9UTVAoJWE2KQorCWNscmwJKCVhNykKK2xvb3AyOgorCWNscmwJLSglYTcpCQkJfGNsZWFyIGFuZCBkZWMgYTcKKwlkYnJhCSVkMCxsb29wMgorfAorfCBVc2UgYTEgYXMgcG9pbnRlciBpbnRvIG5ldyBmcmFtZS4gIGE2IGlzIG5vdCBjb3JyZWN0IGlmIGFuIHVuaW1wIG9yCit8IGJ1c3kgZnJhbWUgd2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBvZiBhbiBleGNlcHRpb24gb24gdGhlIGZpbmFsCit8IGluc3RydWN0aW9uIG9mIGFuIGVtdWxhdGlvbiByb3V0aW5lLgorfAorfCBXZSBuZWVkIHRvIHNldCB0aGUgbm1jZXhjIGJpdHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBFMS4gT3RoZXJ3aXNlLAorfCB0aGUgZXhjIHRha2VuIHdpbGwgYmUgaW5leDIuCit8CisJbGVhbAlCVVNZX1NJWkUrTE9DQUxfU0laRSglYTcpLCVhMQl8aW5pdCBhMSBmb3IgbmV3IGZyYW1lCisJbW92ZWIJVkVSX1RNUCglYTYpLCglYTcpCXx3cml0ZSBidXN5IGZtdCB3b3JkCisJbW92ZWIJI0JVU1lfU0laRS00LDEoJWE3KQorCW1vdmVsCUZQX1NDUjEoJWE2KSxXQlRFTVBfRVgoJWExKQl8d3JpdGUKKwltb3ZlbAlGUF9TQ1IxKzQoJWE2KSxXQlRFTVBfSEkoJWExKQl8ZXhjZXB0aW9uYWwgb3AgdG8KKwltb3ZlbAlGUF9TQ1IxKzgoJWE2KSxXQlRFTVBfTE8oJWExKQl8d2J0ZW1wCit8CWJ0c3QuYgkjRTEsRV9CWVRFKCVhMSkKK3wJYmVxLmIJZG9fcmVzdG9yZQorCWJmZXh0dQlVU0VSX0ZQU1IoJWE2KXsjMTc6IzR9LCVkMAl8Z2V0IHNuYW4vb3BlcnIvb3ZmbC91bmZsIGJpdHMKKwliZmlucwklZDAsTk1DRVhDKCVhMSl7IzQ6IzR9CXxhbmQgaW5zZXJ0IHRoZW0gaW4gbm1jZXhjCisJbW92ZWwJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWExKSB8c2V0IGV4YyBiaXRzCisJb3JsCSNzeF9tYXNrLEVfQllURSglYTEpCisKK2RvX3Jlc3RvcmU6CisJbW92ZW1sCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14IFVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbCBVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZSAoJWE3KSsKKwl0c3RiCVJFU19GTEcoJWE2KQl8UkVTX0ZMRyBpbmRpY2F0ZXMgYSAiY29udGludWF0aW9uIiBmcmFtZQorCWJlcQljb250CisJYnNyCWJ1ZzEzODQKK2NvbnQ6CisJdW5sawklYTYKK3wKK3wgSWYgdHJhY2UgbW9kZSBlbmFibGVkLCB0aGVuIGdvIHRvIHRyYWNlIGhhbmRsZXIuICBUaGlzIGhhbmRsZXIKK3wgY2Fubm90IGhhdmUgYW55IGZwIGluc3RydWN0aW9ucy4gIElmIHRoZXJlIGFyZSBmcCBpbnN0J3MgYW5kIGFuCit8IGV4Y2VwdGlvbiBoYXMgYmVlbiByZXN0b3JlZCBpbnRvIHRoZSBtYWNoaW5lIHRoZW4gdGhlIGV4Y2VwdGlvbgorfCB3aWxsIG9jY3VyIHVwb24gZXhlY3V0aW9uIG9mIHRoZSBmcCBpbnN0LiAgVGhpcyBpcyBub3QgZGVzaXJhYmxlCit8IGluIHRoZSBrZXJuZWwgKHN1cGVydmlzb3IgbW9kZSkuICBTZWUgTUM2ODA0MCBtYW51YWwgU2VjdGlvbiA5LjMuOC4KK3wKK2ZpbmlzaF91cDoKKwlidHN0YgkjNywoJWE3KQkJfHRlc3QgVDEgaW4gU1IKKwlibmVzCWdfdHJhY2UKKwlidHN0YgkjNiwoJWE3KQkJfHRlc3QgVDAgaW4gU1IKKwlibmVzCWdfdHJhY2UKKwlicmFsCWZwc3BfZG9uZQorfAorfCBDaGFuZ2UgaW50ZWdlciBzdGFjayB0byBsb29rIGxpa2UgdHJhY2Ugc3RhY2sKK3wgVGhlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZQorfCBleGNlcHRpb24gaXMgYWxyZWFkeSBpbiB0aGUgaW50ZWdlciBzdGFjayAoaXMKK3wgdGhlIHNhbWUgYXMgdGhlIHNhdmVkIGZyaWFyKQorfAorfCBJZiB0aGUgY3VycmVudCBmcmFtZSBpcyBhbHJlYWR5IGEgNi13b3JkIHN0YWNrIHRoZW4gYWxsCit8IHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBpcyB0byBjaGFuZ2UgdGhlIHZlY3RvciMgdG8gVFJBQ0UuCit8IElmIHRoZSBmcmFtZSBpcyBvbmx5IGEgNC13b3JkIHN0YWNrIChtZWFuaW5nIHdlIGdvdCBoZXJlCit8IG9uIGFuIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSBleGNlcHRpb24pLCB0aGVuIHdlIG5lZWQgdG8gZ3JvdworfCB0aGUgc3RhY2sgYW4gZXh0cmEgMiB3b3JkcyBhbmQgZ2V0IHRoZSBGUElBUiBmcm9tIHRoZSBGUFUuCit8CitnX3RyYWNlOgorCWJmdHN0CUVYQ19WRUMtNCglc3ApeyMwOiM0fQorCWJuZQlnX2Vhc3kKKworCXN1YncJIzQsJXNwCQl8IG1ha2Ugcm9vbQorCW1vdmVsCTQoJXNwKSwoJXNwKQorCW1vdmVsCTgoJXNwKSw0KCVzcCkKKwlzdWJ3CSNCVVNZX1NJWkUsJXNwCisJZnNhdmUJKCVzcCkKKwlmbW92ZWwJJWZwaWFyLEJVU1lfU0laRStFWENfRUEtNCglc3ApCisJZnJlc3RvcmUgKCVzcCkKKwlhZGR3CSNCVVNZX1NJWkUsJXNwCisKK2dfZWFzeToKKwltb3ZldwkjVFJBQ0VfVkVDLEVYQ19WRUMtNCglYTcpCisJYnJhbAlyZWFsX3RyYWNlCit8Cit8ICBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGhhcmR3YXJlIGJ1ZyAxMzg0LgorfAorYnVnMTM4NDoKKwlsaW5rCSVhNSwjMAorCWZzYXZlCS0oJXNwKQorCWNtcGliCSMweDQxLCglc3ApCXwgY2hlY2sgZm9yIGNvcnJlY3QgZnJhbWUKKwliZXEJZnJhbWVfNDEKKwliZ3QJbm9maXgJCXwgaWYgbW9yZSBhZHZhbmNlZCBtYXNrLCBkbyBuYWRhCisKK2ZyYW1lXzQwOgorCXRzdGIJMSglc3ApCQl8IGNoZWNrIHRvIHNlZSBpZiBpZGxlCisJYm5lCW5vdGlkbGUKK2lkbGU0MDoKKwljbHJsCSglc3ApCQl8IGdldCByaWQgb2Ygb2xkIGZzYXZlIGZyYW1lCisgICAgICAgIG1vdmVsICAlZDEsVVNFUl9EMSglYTYpICB8IHNhdmUgZDEKKwltb3ZldwkjOCwlZDEJCXwgcGxhY2UgdW5pbXAgZnJhbWUgaW5zdGVhZAorbG9vcDQwOgljbHJsCS0oJXNwKQorCWRicmEJJWQxLGxvb3A0MAorICAgICAgICBtb3ZlbCAgVVNFUl9EMSglYTYpLCVkMSAgfCByZXN0b3JlIGQxCisJbW92ZWwJIzB4NDAyODAwMDAsLSglc3ApCisJZnJlc3RvcmUgKCVzcCkrCisJdW5sawklYTUKKwlydHMKKworZnJhbWVfNDE6CisJdHN0YgkxKCVzcCkJCXwgY2hlY2sgdG8gc2VlIGlmIGlkbGUKKwlibmUJbm90aWRsZQoraWRsZTQxOgorCWNscmwJKCVzcCkJCXwgZ2V0IHJpZCBvZiBvbGQgZnNhdmUgZnJhbWUKKyAgICAgICAgbW92ZWwgICVkMSxVU0VSX0QxKCVhNikgIHwgc2F2ZSBkMQorCW1vdmV3CSMxMCwlZDEJCXwgcGxhY2UgdW5pbXAgZnJhbWUgaW5zdGVhZAorbG9vcDQxOgljbHJsCS0oJXNwKQorCWRicmEJJWQxLGxvb3A0MQorICAgICAgICBtb3ZlbCAgVVNFUl9EMSglYTYpLCVkMSAgfCByZXN0b3JlIGQxCisJbW92ZWwJIzB4NDEzMDAwMDAsLSglc3ApCisJZnJlc3RvcmUgKCVzcCkrCisJdW5sawklYTUKKwlydHMKKworbm90aWRsZToKKwliY2xyYgkjZXRlbXAxNV9iaXQsLTQwKCVhNSkKKwlmcmVzdG9yZSAoJXNwKSsKKwl1bmxrCSVhNQorCXJ0cworCitub2ZpeDoKKwlmcmVzdG9yZSAoJXNwKSsKKwl1bmxrCSVhNQorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvZ2V0X29wLlMgYi9hcmNoL202OGsvZnBzcDA0MC9nZXRfb3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MyZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZ2V0X29wLlMKQEAgLTAsMCArMSw2NzYgQEAKK3wKK3wJZ2V0X29wLnNhIDMuNiA1LzE5LzkyCit8Cit8CWdldF9vcC5zYSAzLjUgNC8yNi85MQorfAorfCAgRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHVuc3VwcG9ydGVkIGZvcm1hdC9kYXRhCit8IHR5cGUgZXhjZXB0aW9uIGhhbmRsZXIgKCd1bnN1cHAnIC0gdmVjdG9yIDU1KSBhbmQgdGhlIHVuaW1wbGVtZW50ZWQKK3wgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGhhbmRsZXIgKCd1bmltcCcgLSB2ZWN0b3IgMTEpLiAgJ2dldF9vcCcKK3wgZGV0ZXJtaW5lcyB0aGUgb3BjbGFzcyAoMCwgMiwgb3IgMykgYW5kIGJyYW5jaGVzIHRvIHRoZQorfCBvcGNsYXNzIGhhbmRsZXIgcm91dGluZS4gIFNlZSA2ODg4MS8yIFVzZXIncyBNYW51YWwgdGFibGUgNC0xMQorfCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3BjbGFzc2VzLgorfAorfCBGb3IgVU5TVVBQT1JURUQgZGF0YS9mb3JtYXQgKGV4Y2VwdGlvbiB2ZWN0b3IgNTUpIGFuZCBmb3IKK3wgVU5JTVBMRU1FTlRFRCBpbnN0cnVjdGlvbnMgKGV4Y2VwdGlvbiB2ZWN0b3IgMTEpIHRoZSBmb2xsb3dpbmcKK3wgYXBwbGllczoKK3wKK3wgLSBGb3IgdW5ub3JtYWxpemVkIG51bWJlcnMgKG9wY2xhc3MgMCwgMiwgb3IgMykgdGhlCit8IG51bWJlcihzKSBpcyBub3JtYWxpemVkIGFuZCB0aGUgb3BlcmFuZCB0eXBlIHRhZyBpcyB1cGRhdGVkLgorfAorfCAtIEZvciBhIHBhY2tlZCBudW1iZXIgKG9wY2xhc3MgMikgdGhlIG51bWJlciBpcyB1bnBhY2tlZCBhbmQgdGhlCit8IG9wZXJhbmQgdHlwZSB0YWcgaXMgdXBkYXRlZC4KK3wKK3wgLSBGb3IgZGVub3JtYWxpemVkIG51bWJlcnMgKG9wY2xhc3MgMCBvciAyKSB0aGUgbnVtYmVyKHMpIGlzIG5vdAorfCBjaGFuZ2VkIGJ1dCBwYXNzZWQgdG8gdGhlIG5leHQgbW9kdWxlLiAgVGhlIG5leHQgbW9kdWxlIGZvcgorfCB1bmltcCBpcyBkb19mdW5jLCB0aGUgbmV4dCBtb2R1bGUgZm9yIHVuc3VwcCBpcyByZXNfZnVuYy4KK3wKK3wgRm9yIFVOU1VQUE9SVEVEIGRhdGEvZm9ybWF0IChleGNlcHRpb24gdmVjdG9yIDU1KSBvbmx5IHRoZQorfCBmb2xsb3dpbmcgYXBwbGllczoKK3wKK3wgLSBJZiB0aGVyZSBpcyBhIG1vdmUgb3V0IHdpdGggYSBwYWNrZWQgbnVtYmVyIChvcGNsYXNzIDMpIHRoZQorfCBudW1iZXIgaXMgcGFja2VkIGFuZCB3cml0dGVuIHRvIHVzZXIgbWVtb3J5LiAgRm9yIHRoZSBvdGhlcgorfCBvcGNsYXNzZXMgdGhlIG51bWJlcihzKSBhcmUgd3JpdHRlbiBiYWNrIHRvIHRoZSBmc2F2ZSBzdGFjaworfCBhbmQgdGhlIGluc3RydWN0aW9uIGlzIHRoZW4gcmVzdG9yZWQgYmFjayBpbnRvIHRoZSAnMDQwLiAgVGhlCit8ICcwNDAgaXMgdGhlbiBhYmxlIHRvIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKK3wgRm9yIGV4YW1wbGU6Cit8IGZhZGQueCBmcG0sZnBuIHdoZXJlIHRoZSBmcG0gY29udGFpbnMgYW4gdW5ub3JtYWxpemVkIG51bWJlci4KK3wgVGhlICcwNDAgdGFrZXMgYW4gdW5zdXBwb3J0ZWQgZGF0YSB0cmFwIGFuZCBnZXRzIHRvIHRoaXMKK3wgcm91dGluZS4gIFRoZSBudW1iZXIgaXMgbm9ybWFsaXplZCwgcHV0IGJhY2sgb24gdGhlIHN0YWNrIGFuZAorfCB0aGVuIGFuIGZyZXN0b3JlIGlzIGRvbmUgdG8gcmVzdG9yZSB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBpbnRvCit8IHRoZSAnMDQwLiAgVGhlICcwNDAgdGhlbiByZS1leGVjdXRlcyB0aGUgZmFkZC54IGZwbSxmcG4gd2l0aAorfCBhIG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzb3VyY2UgYW5kIHRoZSBpbnN0cnVjdGlvbiBpcworfCBzdWNjZXNzZnVsLgorfAorfCBOZXh0IGNvbnNpZGVyIGlmIGluIHRoZSBwcm9jZXNzIG9mIG5vcm1hbGl6aW5nIHRoZSB1bi0KK3wgbm9ybWFsaXplZCBudW1iZXIgaXQgYmVjb21lcyBhIGRlbm9ybWFsaXplZCBudW1iZXIuICBUaGUKK3wgcm91dGluZSB3aGljaCBjb252ZXJ0cyB0aGUgdW5ub3JtIHRvIGEgbm9ybSAoY2FsbGVkIG1rX25vcm0pCit8IGRldGVjdHMgdGhpcyBhbmQgdGFncyB0aGUgbnVtYmVyIGFzIGEgZGVub3JtLiAgVGhlIHJvdXRpbmUKK3wgcmVzX2Z1bmMgc2VlcyB0aGUgZGVub3JtIHRhZyBhbmQgY29udmVydHMgdGhlIGRlbm9ybSB0byBhCit8IG5vcm0uICBUaGUgaW5zdHJ1Y3Rpb24gaXMgdGhlbiByZXN0b3JlZCBiYWNrIGludG8gdGhlICcwNDAKK3wgd2hpY2ggcmVfZXhlY3V0ZXMgdGhlIGluc3RydWN0aW9uLgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworR0VUX09QOiAgICB8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJLmdsb2JhbAlQSVJOLFBJUlpSTSxQSVJQCisJLmdsb2JhbAlTTUFMUk4sU01BTFJaUk0sU01BTFJQCisJLmdsb2JhbAlCSUdSTixCSUdSWlJNLEJJR1JQCisKK1BJUk46CisJLmxvbmcgMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUgICAgfHBpCitQSVJaUk06CisJLmxvbmcgMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzQgICAgfHBpCitQSVJQOgorCS5sb25nIDB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1ICAgIHxwaQorCit8cm91bmQgdG8gbmVhcmVzdAorU01BTFJOOgorCS5sb25nIDB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4ICAgIHxsb2cxMCgyKQorCS5sb25nIDB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhICAgIHxlCisJLmxvbmcgMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmMgICAgfGxvZzIoZSkKKwkubG9uZyAweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NSAgICB8bG9nMTAoZSkKKwkubG9uZyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MC4wCit8IHJvdW5kIHRvIHplcm87cm91bmQgdG8gbmVnYXRpdmUgaW5maW5pdHkKK1NNQUxSWlJNOgorCS5sb25nIDB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4ICAgIHxsb2cxMCgyKQorCS5sb25nIDB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhICAgIHxlCisJLmxvbmcgMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmIgICAgfGxvZzIoZSkKKwkubG9uZyAweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NSAgICB8bG9nMTAoZSkKKwkubG9uZyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MC4wCit8IHJvdW5kIHRvIHBvc2l0aXZlIGluZmluaXR5CitTTUFMUlA6CisJLmxvbmcgMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTkgICAgfGxvZzEwKDIpCisJLmxvbmcgMHg0MDAwMDAwMCwweGFkZjg1NDU4LDB4YTJiYjRhOWIgICAgfGUKKwkubG9uZyAweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYyAgICB8bG9nMihlKQorCS5sb25nIDB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1ICAgIHxsb2cxMChlKQorCS5sb25nIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICAgIHwwLjAKKworfHJvdW5kIHRvIG5lYXJlc3QKK0JJR1JOOgorCS5sb25nIDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjICAgIHxsbigyKQorCS5sb25nIDB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3ICAgIHxsbigxMCkKKwkubG9uZyAweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAwCisKKwkuZ2xvYmFsCVBURU5STgorUFRFTlJOOgorCS5sb25nIDB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDEKKwkubG9uZyAweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAyCisJLmxvbmcgMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gNAorCS5sb25nIDB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDgKKwkubG9uZyAweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMCAgICB8MTAgXiAxNgorCS5sb25nIDB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFICAgIHwxMCBeIDMyCisJLmxvbmcgMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDUgICAgfDEwIF4gNjQKKwkubG9uZyAweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMCAgICB8MTAgXiAxMjgKKwkubG9uZyAweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RSAgICB8MTAgXiAyNTYKKwkubG9uZyAweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNyAgICB8MTAgXiA1MTIKKwkubG9uZyAweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNyAgICB8MTAgXiAxMDI0CisJLmxvbmcgMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUgICAgfDEwIF4gMjA0OAorCS5sb25nIDB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCICAgIHwxMCBeIDQwOTYKK3xyb3VuZCB0byBtaW51cyBpbmZpbml0eQorQklHUlpSTToKKwkubG9uZyAweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYiAgICB8bG4oMikKKwkubG9uZyAweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNiAgICB8bG4oMTApCisJLmxvbmcgMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gMAorCisJLmdsb2JhbAlQVEVOUk0KK1BURU5STToKKwkubG9uZyAweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAxCisJLmxvbmcgMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gMgorCS5sb25nIDB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDQKKwkubG9uZyAweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiA4CisJLmxvbmcgMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAgICAgfDEwIF4gMTYKKwkubG9uZyAweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RCAgICB8MTAgXiAzMgorCS5sb25nIDB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1ICAgIHwxMCBeIDY0CisJLmxvbmcgMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDREYgICAgfDEwIF4gMTI4CisJLmxvbmcgMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEQgICAgfDEwIF4gMjU2CisJLmxvbmcgMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzYgICAgfDEwIF4gNTEyCisJLmxvbmcgMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcgICAgfDEwIF4gMTAyNAorCS5sb25nIDB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1ICAgIHwxMCBeIDIwNDgKKwkubG9uZyAweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QSAgICB8MTAgXiA0MDk2Cit8cm91bmQgdG8gcG9zaXRpdmUgaW5maW5pdHkKK0JJR1JQOgorCS5sb25nIDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjICAgIHxsbigyKQorCS5sb25nIDB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3ICAgIHxsbigxMCkKKwkubG9uZyAweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAwCisKKwkuZ2xvYmFsCVBURU5SUAorUFRFTlJQOgorCS5sb25nIDB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDEKKwkubG9uZyAweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAyCisJLmxvbmcgMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gNAorCS5sb25nIDB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDgKKwkubG9uZyAweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMCAgICB8MTAgXiAxNgorCS5sb25nIDB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFICAgIHwxMCBeIDMyCisJLmxvbmcgMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDYgICAgfDEwIF4gNjQKKwkubG9uZyAweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMCAgICB8MTAgXiAxMjgKKwkubG9uZyAweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RSAgICB8MTAgXiAyNTYKKwkubG9uZyAweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNyAgICB8MTAgXiA1MTIKKwkubG9uZyAweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOCAgICB8MTAgXiAxMDI0CisJLmxvbmcgMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTYgICAgfDEwIF4gMjA0OAorCS5sb25nIDB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCICAgIHwxMCBeIDQwOTYKKworCXx4cmVmCW5ybV96ZXJvCisJfHhyZWYJZGVjYmluCisJfHhyZWYJcm91bmQKKworCS5nbG9iYWwgICAgZ2V0X29wCisJLmdsb2JhbCAgICB1bnNfZ2V0b3AKKwkuZ2xvYmFsICAgIHVuaV9nZXRvcAorZ2V0X29wOgorCWNscmIJRFlfTU9fRkxHKCVhNikKKwl0c3RiCVVGTEdfVE1QKCVhNikJfHRlc3QgZmxhZyBmb3IgdW5zdXBwL3VuaW1wIHN0YXRlCisJYmVxCXVuaV9nZXRvcAorCit1bnNfZ2V0b3A6CisJYnRzdGIJI2RpcmVjdGlvbl9iaXQsQ01EUkVHMUIoJWE2KQorCWJuZQlvcGNsYXNzMwl8YnJhbmNoIGlmIGEgZm1vdmUgb3V0IChhbnkga2luZCkKKwlidHN0YgkjNixDTURSRUcxQiglYTYpCisJYmVxcwl1bnNfbm90cGFja2VkCisKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMzojM30sJWQwCisJY21wYgkjMywlZDAKKwliZXEJcGFja19zb3VyY2UJfGNoZWNrIGZvciBhIHBhY2tlZCBzcmMgb3AsIGJyYW5jaCBpZiBzbwordW5zX25vdHBhY2tlZDoKKwlic3IJY2hrX2R5X21vCXxzZXQgdGhlIGR5YWRpYy9tb25hZGljIGZsYWcKKwl0c3RiCURZX01PX0ZMRyglYTYpCisJYmVxcwlzcmNfb3BfY2sJfGlmIG1vbmFkaWMsIGdvIGNoZWNrIHNyYyBvcAorfAkJCQk7ZWxzZSwgY2hlY2sgZHN0IG9wIChmYWxsIHRocm91Z2gpCisKKwlidHN0YgkjNyxEVEFHKCVhNikKKwliZXFzCXNyY19vcF9jawl8aWYgZHN0IG9wIGlzIG5vcm0sIGNoZWNrIHNyYyBvcAorCWJyYXMJZHN0X2V4X2Rucm0JfGVsc2UsIGhhbmRsZSBkZXN0aW5hdGlvbiB1bm5vcm0vZG5ybQorCit1bmlfZ2V0b3A6CisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzA6IzZ9LCVkMCB8Z2V0IG9wY2xhc3MgYW5kIHNyYyBmaWVsZHMKKwljbXBpbAkjMHgxNywlZDAJCXxpZiBvcCBjbGFzcyBhbmQgc2l6ZSBmaWVsZHMgYXJlICQxNywKK3wJCQkJO2l0IGlzIEZNT1ZFQ1I7IGlmIG5vdCwgY29udGludWUKK3wKK3wgSWYgdGhlIGluc3RydWN0aW9uIGlzIGZtb3ZlY3IsIGV4aXQgZ2V0X29wLiAgSXQgaXMgaGFuZGxlZAorfCBpbiBkb19mdW5jIGFuZCBzbW92ZWNyLnNhLgorfAorCWJuZQlub3RfZm1vdmVjcgl8aGFuZGxlIGZtb3ZlY3IgYXMgYW4gdW5pbXBsZW1lbnRlZCBpbnN0CisJcnRzCisKK25vdF9mbW92ZWNyOgorCWJ0c3RiCSNFMSxFX0JZVEUoJWE2KQl8aWYgc2V0LCB0aGVyZSBpcyBhIHBhY2tlZCBvcGVyYW5kCisJYm5lCXBhY2tfc291cmNlCXxjaGVjayBmb3IgcGFja2VkIHNyYyBvcCwgYnJhbmNoIGlmIHNvCisKK3wgVGhlIGZvbGxvd2luZyBsaW5lcyBvZiBhcmUgY29kZWQgdG8gb3B0aW1pemUgb24gbm9ybWFsaXplZCBvcGVyYW5kcworCW1vdmViCVNUQUcoJWE2KSwlZDAKKwlvcmIJRFRBRyglYTYpLCVkMAl8Y2hlY2sgaWYgZWl0aGVyIG9mIFNUQUcvRFRBRyBtc2Igc2V0CisJYm1pcwlkZXN0X29wX2NrCXxpZiBzbywgc29tZSBvcCBuZWVkcyB0byBiZSBmaXhlZAorCXJ0cworCitkZXN0X29wX2NrOgorCWJ0c3RiCSM3LERUQUcoJWE2KQl8Y2hlY2sgZm9yIHVuc3VwcG9ydGVkIGRhdGEgdHlwZXMgaW4KKwliZXFzCXNyY19vcF9jawl8dGhlIGRlc3RpbmF0aW9uLCBpZiBub3QsIGNoZWNrIHNyYyBvcAorCWJzcgljaGtfZHlfbW8JfHNldCBkeWFkaWMvbW9uYWRpYyBmbGFnCisJdHN0YglEWV9NT19GTEcoJWE2KQl8CisJYmVxcwlzcmNfb3BfY2sJfGlmIG1vbmFkaWMsIGNoZWNrIHNyYyBvcAorfAorfCBBdCB0aGlzIHBvaW50LCBkZXN0aW5hdGlvbiBoYXMgYW4gZXh0ZW5kZWQgZGVub3JtIG9yIHVubm9ybS4KK3wKK2RzdF9leF9kbnJtOgorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMCB8Z2V0IGRlc3RpbmF0aW9uIGV4cG9uZW50CisJYW5kaXcJIzB4N2ZmZiwlZDAJfG1hc2sgc2lnbiwgY2hlY2sgaWYgZXhwID0gMDAwMAorCWJlcXMJc3JjX29wX2NrCXxpZiBkZW5vcm0gdGhlbiBjaGVjayBzb3VyY2Ugb3AuCit8CQkJCTtkZW5vcm1zIGFyZSB0YWtlbiBjYXJlIG9mIGluIHJlc19mdW5jCit8CQkJCTsodW5zdXBwKSBvciBkb19mdW5jICh1bmltcCkKK3wJCQkJO2Vsc2UgdW5ub3JtIGZhbGwgdGhyb3VnaAorCWxlYWwJRlBURU1QKCVhNiksJWEwCXxwb2ludCBhMCB0byBkb3AgLSB1c2VkIGluIG1rX25vcm0KKwlic3IJbWtfbm9ybQkJfGdvIG5vcm1hbGl6ZSAtIG1rX25vcm0gcmV0dXJuczoKK3wJCQkJO0xfU0NSMXs3OjV9ID0gb3BlcmFuZCB0YWcKK3wJCQkJOwkoMDAwID0gbm9ybSwgMTAwID0gZGVub3JtKQorfAkJCQk7TF9TQ1IxezR9ID0gZnB0ZTE1IG9yIGV0ZTE1Cit8CQkJCTsJMCA9IGV4cCA+ICAkM2ZmZgorfAkJCQk7CTEgPSBleHAgPD0gJDNmZmYKK3wJCQkJO2FuZCBwdXRzIHRoZSBub3JtYWxpemVkIG51bSBiYWNrCit8CQkJCTtvbiB0aGUgZnNhdmUgc3RhY2sKK3wKKwltb3ZlYiBMX1NDUjEoJWE2KSxEVEFHKCVhNikgfHdyaXRlIHRoZSBuZXcgdGFnICYgZnB0ZTE1Cit8CQkJCTt0byB0aGUgZnNhdmUgc3RhY2sgYW5kIGZhbGwKK3wJCQkJO3Rocm91Z2ggdG8gY2hlY2sgc291cmNlIG9wZXJhbmQKK3wKK3NyY19vcF9jazoKKwlidHN0YgkjNyxTVEFHKCVhNikKKwliZXEJZW5kX2dldG9wCXxjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlcyBvbiB0aGUKK3wJCQkJO3NvdXJjZSBvcGVyYW5kCisJYnRzdGIJIzUsU1RBRyglYTYpCisJYm5lcwlzcmNfc2RfZG5ybQl8aWYgYml0IDUgc2V0LCBoYW5kbGUgc2dsL2RibCBkZW5vcm1zCit8Cit8IEF0IHRoaXMgcG9pbnQgb25seSB1bm5vcm1zIG9yIGV4dGVuZGVkIGRlbm9ybXMgYXJlIHBvc3NpYmxlLgorfAorc3JjX2V4X2Rucm06CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAgfGdldCBzb3VyY2UgZXhwb25lbnQKKwlhbmRpdwkjMHg3ZmZmLCVkMAl8bWFzayBzaWduLCBjaGVjayBpZiBleHAgPSAwMDAwCisJYmVxCWVuZF9nZXRvcAl8aWYgZGVub3JtIHRoZW4gZXhpdCwgZGVub3JtcyBhcmUKK3wJCQkJO2hhbmRsZWQgaW4gZG9fZnVuYworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHNvcCAtIHVzZWQgaW4gbWtfbm9ybQorCWJzcglta19ub3JtCQl8Z28gbm9ybWFsaXplIC0gbWtfbm9ybSByZXR1cm5zOgorfAkJCQk7TF9TQ1Ixezc6NX0gPSBvcGVyYW5kIHRhZworfAkJCQk7CSgwMDAgPSBub3JtLCAxMDAgPSBkZW5vcm0pCit8CQkJCTtMX1NDUjF7NH0gPSBmcHRlMTUgb3IgZXRlMTUKK3wJCQkJOwkwID0gZXhwID4gICQzZmZmCit8CQkJCTsJMSA9IGV4cCA8PSAkM2ZmZgorfAkJCQk7YW5kIHB1dHMgdGhlIG5vcm1hbGl6ZWQgbnVtIGJhY2sKK3wJCQkJO29uIHRoZSBmc2F2ZSBzdGFjaworfAorCW1vdmViCUxfU0NSMSglYTYpLFNUQUcoJWE2KSB8d3JpdGUgdGhlIG5ldyB0YWcgJiBldGUxNQorCXJ0cwkJCXxlbmRfZ2V0b3AKKworfAorfCBBdCB0aGlzIHBvaW50LCBvbmx5IHNpbmdsZSBvciBkb3VibGUgZGVub3JtcyBhcmUgcG9zc2libGUuCit8IElmIHRoZSBpbnN0IGlzIG5vdCBmbW92ZSwgbm9ybWFsaXplIHRoZSBzb3VyY2UuICBJZiBpdCBpcywKK3wgZG8gbm90aGluZyB0byB0aGUgaW5wdXQuCit8CitzcmNfc2RfZG5ybToKKwlidHN0YgkjNCxDTURSRUcxQiglYTYpCXxkaWZmZXJlbnRpYXRlIGJldHdlZW4gc2dsL2RibCBkZW5vcm0KKwlibmVzCWlzX2RvdWJsZQoraXNfc2luZ2xlOgorCW1vdmV3CSMweDNmODEsJWQxCXx3cml0ZSBiaWFzIGZvciBzZ2wgZGVub3JtCisJYnJhcwljb21tb24JCXxnb3RvIHRoZSBjb21tb24gY29kZQoraXNfZG91YmxlOgorCW1vdmV3CSMweDNjMDEsJWQxCXx3cml0ZSB0aGUgYmlhcyBmb3IgYSBkYmwgZGVub3JtCitjb21tb246CisJYnRzdGIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikgfGdyYWIgc2lnbiBiaXQgb2YgbWFudGlzc2EKKwliZXFzCXBvcworCWJzZXQJIzE1LCVkMQkJfHNldCBzaWduIGJpdCBiZWNhdXNlIGl0IGlzIG5lZ2F0aXZlCitwb3M6CisJbW92ZXcJJWQxLEVURU1QX0VYKCVhNikKK3wJCQkJO3B1dCBleHBvbmVudCBvbiBzdGFjaworCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDEKKwlhbmR3CSMweGUzZmYsJWQxCXxjbGVhciBvdXQgc291cmNlIHNwZWNpZmllcgorCW9ydwkjMHgwODAwLCVkMQl8c2V0IHNvdXJjZSBzcGVjaWZpZXIgdG8gZXh0ZW5kZWQgcHJlYworCW1vdmV3CSVkMSxDTURSRUcxQiglYTYpCXx3cml0ZSBiYWNrIHRvIHRoZSBjb21tYW5kIHdvcmQgaW4gc3RhY2sKK3wJCQkJO3RoaXMgaXMgbmVlZGVkIHRvIGZpeCB1bnN1cHAgZGF0YSBzdGFjaworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHNvcAorCisJYnNyCW1rX25vcm0JCXxjb252ZXJ0IHNnbC9kYmwgZGVub3JtIHRvIG5vcm0KKwltb3ZlYglMX1NDUjEoJWE2KSxTVEFHKCVhNikgfHB1dCB0YWcgaW50byBzb3VyY2UgdGFnIHJlZyAtIGQwCisJcnRzCQkJfGVuZF9nZXRvcAorfAorfCBBdCB0aGlzIHBvaW50LCB0aGUgc291cmNlIGlzIGRlZmluaXRlbHkgcGFja2VkLCB3aGV0aGVyCit8IGluc3RydWN0aW9uIGlzIGR5YWRpYyBvciBtb25hZGljIGlzIHN0aWxsIHVua25vd24KK3wKK3BhY2tfc291cmNlOgorCW1vdmVsCUZQVEVNUF9MTyglYTYpLEVURU1QKCVhNikJfHdyaXRlIG1zIHBhcnQgb2YgcGFja2VkCit8CQkJCTtudW1iZXIgdG8gZXRlbXAgc2xvdAorCWJzcgljaGtfZHlfbW8JfHNldCBkeWFkaWMvbW9uYWRpYyBmbGFnCisJYnNyCXVucGFjaworCisJdHN0YglEWV9NT19GTEcoJWE2KQorCWJlcXMJZW5kX2dldG9wCXxpZiBtb25hZGljLCBleGl0Cit8CQkJCTtlbHNlLCBmaXggRlBURU1QCitwYWNrX2R5YToKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwIHxleHRyYWN0IGRlc3QgZnAgcmVnCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCQl8c2V0IHVwIGQwIGFzIGEgZHluYW1pYyByZWdpc3RlciBtYXNrCisJZm1vdmVteCAlZDAsRlBURU1QKCVhNikJfHdyaXRlIHRvIEZQVEVNUAorCisJYnRzdGIJIzcsRFRBRyglYTYpCXxjaGVjayBkZXN0IHRhZyBmb3IgdW5ub3JtIG9yIGRlbm9ybQorCWJuZQlkc3RfZXhfZG5ybQl8ZWxzZSwgaGFuZGxlIHRoZSB1bm5vcm0gb3IgZXh0IGRlbm9ybQorfAorfCBEZXN0IGlzIG5vdCBkZW5vcm1hbGl6ZWQuICBDaGVjayBmb3Igbm9ybSwgYW5kIHNldCBmcHRlMTUKK3wgYWNjb3JkaW5nbHkuCit8CisJbW92ZWIJRFRBRyglYTYpLCVkMAorCWFuZGliCSMweGYwLCVkMAkJfHN0cmlwIHRvIG9ubHkgZHRhZzpmcHRlMTUKKwl0c3RiCSVkMAkJfGNoZWNrIGZvciBub3JtYWxpemVkIHZhbHVlCisJYm5lcwllbmRfZ2V0b3AJfGlmIGluZi9uYW4vemVybyBsZWF2ZSBnZXRfb3AKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg3ZmZmLCVkMAorCWNtcGl3CSMweDNmZmYsJWQwCXxjaGVjayBpZiBmcHRlMTUgbmVlZHMgc2V0dGluZworCWJnZXMJZW5kX2dldG9wCXxpZiA+PSAkM2ZmZiwgbGVhdmUgZnB0ZTE1PTAKKwlvcmIJIzB4MTAsRFRBRyglYTYpCisJYnJhcwllbmRfZ2V0b3AKKworfAorfCBBdCB0aGlzIHBvaW50LCBpdCBpcyBlaXRoZXIgYW4gZm1vdmVvdXQgcGFja2VkLCB1bm5vcm0gb3IgZGVub3JtCit8CitvcGNsYXNzMzoKKwljbHJiCURZX01PX0ZMRyglYTYpCXxzZXQgZHlhZGljL21vbmFkaWMgZmxhZyB0byBtb25hZGljCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzQ6IzJ9LCVkMAorCWNtcGliCSMzLCVkMAorCWJuZQlzcmNfZXhfZG5ybQl8aWYgbm90IGVxdWFsLCBtdXN0IGJlIHVubm9ybSBvciBkZW5vcm0KK3wJCQkJO2Vsc2UgaXQgaXMgYSBwYWNrZWQgbW92ZSBvdXQKK3wJCQkJO2V4aXQKK2VuZF9nZXRvcDoKKwlydHMKKworfAorfCBTZXRzIHRoZSBEWV9NT19GTEcgY29ycmVjdGx5LiBUaGlzIGlzIHVzZWQgb25seSBvbiBpZiBpdCBpcyBhbgorfCB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9uLiAgU2V0IGlmIGR5YWRpYy4KK3wKK2Noa19keV9tbzoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM1LCVkMAkJfHRlc3RpbmcgZXh0ZW5zaW9uIGNvbW1hbmQgd29yZAorCWJlcXMJc2V0X21vbgkJfGlmIGJpdCA1ID0gMCB0aGVuIG1vbmFkaWMKKwlidHN0bAkjNCwlZDAJCXxrbm93IHRoYXQgYml0IDUgPSAxCisJYmVxcwlzZXRfZHlhCQl8aWYgYml0IDQgPSAwIHRoZW4gZHlhZGljCisJYW5kaXcJIzB4MDA3ZiwlZDAJfGdldCByaWQgb2YgYWxsIGJ1dCBleHRlbnNpb24gYml0cyB7NjowfQorCWNtcGl3CSMweDAwMzgsJWQwCXxpZiBleHRlbnNpb24gPSAkMzggdGhlbiBmY21wIChkeWFkaWMpCisJYm5lcwlzZXRfbW9uCitzZXRfZHlhOgorCXN0CURZX01PX0ZMRyglYTYpCXxzZXQgdGhlIGluc3QgZmxhZyB0eXBlIHRvIGR5YWRpYworCXJ0cworc2V0X21vbjoKKwljbHJiCURZX01PX0ZMRyglYTYpCXxzZXQgdGhlIGluc3QgZmxhZyB0eXBlIHRvIG1vbmFkaWMKKwlydHMKK3wKK3wJTUtfTk9STQorfAorfCBOb3JtYWxpemVzIHVubm9ybWFsaXplZCBudW1iZXJzLCBzZXRzIHRhZyB0byBub3JtIG9yIGRlbm9ybSwgc2V0cyB1bmZsCit8IGV4Y2VwdGlvbiBpZiBkZW5vcm0uCit8Cit8IENBU0Ugb3BjbGFzcyAweDAgdW5zdXBwCit8CW1rX25vcm0gdGlsbCBtc2Igc2V0Cit8CXNldCB0YWcgPSBub3JtCit8Cit8IENBU0Ugb3BjbGFzcyAweDAgdW5pbXAKK3wJbWtfbm9ybSB0aWxsIG1zYiBzZXQgb3IgZXhwID0gMAorfAlpZiBpbnRlZ2VyIGJpdCA9IDAKK3wJICAgdGFnID0gZGVub3JtCit8CWVsc2UKK3wJICAgdGFnID0gbm9ybQorfAorfCBDQVNFIG9wY2xhc3MgMDExIHVuc3VwcAorfAlta19ub3JtIHRpbGwgbXNiIHNldCBvciBleHAgPSAwCit8CWlmIGludGVnZXIgYml0ID0gMAorfAkgICB0YWcgPSBkZW5vcm0KK3wJICAgc2V0IHVuZmxfbm1jZXhlID0gMQorfAllbHNlCit8CSAgIHRhZyA9IG5vcm0KK3wKK3wgaWYgZXhwIDw9ICQzZmZmCit8ICAgc2V0IGV0ZTE1IG9yIGZwdGUxNSA9IDEKK3wgZWxzZSBzZXQgZXRlMTUgb3IgZnB0ZTE1ID0gMAorCit8IGlucHV0OgorfAlhMCA9IHBvaW50cyB0byBvcGVyYW5kIHRvIGJlIG5vcm1hbGl6ZWQKK3wgb3V0cHV0OgorfAlMX1NDUjF7Nzo1fSA9IG9wZXJhbmQgdGFnICgwMDAgPSBub3JtLCAxMDAgPSBkZW5vcm0pCit8CUxfU0NSMXs0fSAgID0gZnB0ZTE1IG9yIGV0ZTE1ICgwID0gZXhwID4gJDNmZmYsIDEgPSBleHAgPD0kM2ZmZikKK3wJdGhlIG5vcm1hbGl6ZWQgb3BlcmFuZCBpcyBwbGFjZWQgYmFjayBvbiB0aGUgZnNhdmUgc3RhY2sKK21rX25vcm06CisJY2xybAlMX1NDUjEoJWE2KQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCXx0cmFuc2Zvcm0gaW50byBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKKworCWNtcGliCSMweDJjLDErRVhDX1ZFQyglYTYpIHxjaGVjayBpZiB1bmltcAorCWJuZXMJdW5zX2RhdGEJfGJyYW5jaCBpZiB1bnN1cHAKKwlic3IJdW5pX2luc3QJfGNhbGwgaWYgdW5pbXAgKG9wY2xhc3MgMHgwKQorCWJyYXMJcmVsb2FkCit1bnNfZGF0YToKKwlidHN0YgkjZGlyZWN0aW9uX2JpdCxDTURSRUcxQiglYTYpIHxjaGVjayB0cmFuc2ZlciBkaXJlY3Rpb24KKwlibmVzCWJpdF9zZXQJCXxicmFuY2ggaWYgc2V0IChvcGNsYXNzIDAxMSkKKwlic3IJdW5zX29weAkJfGNhbGwgaWYgb3BjbGFzcyAweDAKKwlicmFzCXJlbG9hZAorYml0X3NldDoKKwlic3IJdW5zX29wMwkJfG9wY2xhc3MgMDExCityZWxvYWQ6CisJY21wdwkjMHgzZmZmLExPQ0FMX0VYKCVhMCkgfGlmIGV4cCA+ICQzZmZmCisJYmd0cwllbmRfbWsJCXwgICBmcHRlMTUvZXRlMTUgYWxyZWFkeSBzZXQgdG8gMAorCWJzZXRiCSM0LExfU0NSMSglYTYpCXxlbHNlIHNldCBmcHRlMTUvZXRlMTUgdG8gMQorfAkJCQk7Y2FsbGluZyByb3V0aW5lIGFjdHVhbGx5IHNldHMgdGhlCit8CQkJCTt2YWx1ZSBvbiB0aGUgc3RhY2sgKGFsb25nIHdpdGggdGhlCit8CQkJCTt0YWcpLCBzaW5jZSB0aGlzIHJvdXRpbmUgZG9lc24ndAorfAkJCQk7a25vdyBpZiBpdCBzaG91bGQgc2V0IGV0ZTE1IG9yIGZwdGUxNQorfAkJCQk7aWUsIGl0IGRvZXNuJ3Qga25vdyBpZiB0aGlzIGlzIHRoZQorfAkJCQk7c3JjIG9wIG9yIGRlc3Qgb3AuCitlbmRfbWs6CisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CisJYmVxcwllbmRfbWtfcG9zCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkgfGNvbnZlcnQgYmFjayB0byBJRUVFIGZvcm1hdAorZW5kX21rX3BvczoKKwlydHMKK3wKK3wgICAgIENBU0Ugb3BjbGFzcyAwMTEgdW5zdXBwCit8Cit1bnNfb3AzOgorCWJzcglucm1femVybwl8bm9ybWFsaXplIHRpbGwgbXNiID0gMSBvciBleHAgPSB6ZXJvCisJYnRzdGIJIzcsTE9DQUxfSEkoJWEwKQl8aWYgbXNiID0gMQorCWJuZXMJbm9fdW5mbAkJfHRoZW4gYnJhbmNoCitzZXRfdW5mbDoKKwlvcncJI2Rucm1fdGFnLExfU0NSMSglYTYpIHxzZXQgZGVub3JtIHRhZworCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpIHxzZXQgdW5mbCBleGNlcHRpb24gYml0Citub191bmZsOgorCXJ0cworfAorfCAgICAgQ0FTRSBvcGNsYXNzIDB4MCB1bnN1cHAKK3wKK3Vuc19vcHg6CisJYnNyCW5ybV96ZXJvCXxub3JtYWxpemUgdGhlIG51bWJlcgorCWJ0c3RiCSM3LExPQ0FMX0hJKCVhMCkJfGNoZWNrIGlmIGludGVnZXIgYml0IChqLWJpdCkgaXMgc2V0CisJYmVxcwl1bnNfZGVuCQl8aWYgY2xlYXIgdGhlbiBub3cgaGF2ZSBhIGRlbm9ybQordW5zX25ybToKKwlvcmIJI25vcm1fdGFnLExfU0NSMSglYTYpIHxzZXQgdGFnIHRvIG5vcm0KKwlydHMKK3Vuc19kZW46CisJb3JiCSNkbnJtX3RhZyxMX1NDUjEoJWE2KSB8c2V0IHRhZyB0byBkZW5vcm0KKwlydHMKK3wKK3wgICAgIENBU0Ugb3BjbGFzcyAweDAgdW5pbXAKK3wKK3VuaV9pbnN0OgorCWJzcglucm1femVybworCWJ0c3RiCSM3LExPQ0FMX0hJKCVhMCkJfGNoZWNrIGlmIGludGVnZXIgYml0IChqLWJpdCkgaXMgc2V0CisJYmVxcwl1bmlfZGVuCQl8aWYgY2xlYXIgdGhlbiBub3cgaGF2ZSBhIGRlbm9ybQordW5pX25ybToKKwlvcmIJI25vcm1fdGFnLExfU0NSMSglYTYpIHxzZXQgdGFnIHRvIG5vcm0KKwlydHMKK3VuaV9kZW46CisJb3JiCSNkbnJtX3RhZyxMX1NDUjEoJWE2KSB8c2V0IHRhZyB0byBkZW5vcm0KKwlydHMKKworfAorfAlEZWNpbWFsIHRvIGJpbmFyeSBjb252ZXJzaW9uCit8Cit8IFNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU5zIGFyZSBjb21wbGV0ZWQgb3V0c2lkZSBvZiBkZWNiaW4uCit8IElmIHRoZSBpbnB1dCBpcyBhbiBzbmFuLCB0aGUgc25hbiBiaXQgaXMgbm90IHNldC4KK3wKK3wgaW5wdXQ6Cit8CUVURU1QKGE2KQktIHBvaW50cyB0byBwYWNrZWQgZGVjaW1hbCBzdHJpbmcgaW4gbWVtb3J5Cit8IG91dHB1dDoKK3wJZnAwCS0gY29udGFpbnMgcGFja2VkIHN0cmluZyBjb252ZXJ0ZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uCit8CUVURU1QCS0gc2FtZSBhcyBmcDAKK3VucGFjazoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAl8ZXhhbWluZSBjb21tYW5kIHdvcmQsIGxvb2tpbmcgZm9yIGZtb3ZlJ3MKKwlhbmR3CSMweDNiLCVkMAorCWJlcQltb3ZlX3VucGFjawl8c3BlY2lhbCBoYW5kbGluZyBmb3IgZm1vdmU6IG11c3Qgc2V0IEZQU1JfQ0MKKworCW1vdmV3CUVURU1QKCVhNiksJWQwCXxnZXQgd29yZCB3aXRoIGluZiBpbmZvcm1hdGlvbgorCWJmZXh0dQklZDB7IzIwOiMxMn0sJWQxCXxnZXQgZXhwb25lbnQgaW50byBkMQorCWNtcGl3CSMweDBmZmYsJWQxCXx0ZXN0IGZvciBpbmYgb3IgTmFOCisJYm5lcwl0cnlfemVybwl8aWYgbm90IGVxdWFsLCBpdCBpcyBub3Qgc3BlY2lhbAorCWJmZXh0dQklZDB7IzE3OiMzfSwlZDEJfGdldCBTRSBhbmQgeSBiaXRzIGludG8gZDEKKwljbXBpdwkjNywlZDEJCXxTRSBhbmQgeSBiaXRzIG11c3QgYmUgb24gZm9yIHNwZWNpYWwKKwlibmVzCXRyeV96ZXJvCXxpZiBub3Qgb24sIGl0IGlzIG5vdCBzcGVjaWFsCit8aW5wdXQgaXMgb2YgdGhlIHNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU4KKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIG1zIG1hbnRpc3NhCisJYm5lcwlmaXhfbmFuCQl8aWYgbm9uLXplcm8sIGl0IGlzIGEgTmFOCisJdHN0bAlFVEVNUF9MTyglYTYpCXxjaGVjayBscyBtYW50aXNzYQorCWJuZXMJZml4X25hbgkJfGlmIG5vbi16ZXJvLCBpdCBpcyBhIE5hTgorCWJyYQlmaW5pc2gJCXxzcGVjaWFsIGFscmVhZHkgb24gc3RhY2sKK2ZpeF9uYW46CisJYnRzdGIJI3NpZ25hbl9iaXQsRVRFTVBfSEkoJWE2KSB8dGVzdCBmb3Igc25hbgorCWJuZQlmaW5pc2gKKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8YWx3YXlzIHNldCBzbmFuIGlmIGl0IGlzIHNvCisJYnJhCWZpbmlzaAordHJ5X3plcm86CisJbW92ZXcJRVRFTVBfRVgrMiglYTYpLCVkMCB8Z2V0IHdvcmQgNAorCWFuZGl3CSMweDAwMGYsJWQwCXxjbGVhciBhbGwgYnV0IGxhc3QgbmkoeSliYmxlCisJdHN0dwklZDAJCXxjaGVjayBmb3IgemVyby4KKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIHdvcmRzIDMgYW5kIDIKKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QX0xPKCVhNikJfGNoZWNrIHdvcmRzIDEgYW5kIDAKKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QKCVhNikJfHRlc3Qgc2lnbiBvZiB0aGUgemVybworCWJnZXMJcG9zX3plcm8KKwltb3ZlbAkjMHg4MDAwMDAwMCxFVEVNUCglYTYpIHx3cml0ZSBuZWcgemVybyB0byBldGVtcAorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYQlmaW5pc2gKK3Bvc196ZXJvOgorCWNscmwJRVRFTVAoJWE2KQorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYQlmaW5pc2gKKworbm90X3NwZWM6CisJZm1vdmVteCAlZnAwLSVmcDEsLSglYTcpCXxzYXZlIGZwMCAtIGRlY2JpbiByZXR1cm5zIGluIGl0CisJYnNyCWRlY2JpbgorCWZtb3ZleCAlZnAwLEVURU1QKCVhNikJfHB1dCB0aGUgdW5wYWNrZWQgc29wIGluIHRoZSBmc2F2ZSBzdGFjaworCWZtb3ZlbXggKCVhNykrLCVmcDAtJWZwMQorCWZtb3ZlbAkjMCwlRlBTUgkJfGNsciBmcHNyIGZyb20gZGVjYmluCisJYnJhCWZpbmlzaAorCit8Cit8IFNwZWNpYWwgaGFuZGxpbmcgZm9yIHBhY2tlZCBtb3ZlIGluOiAgU2FtZSByZXN1bHRzIGFzIGFsbCBvdGhlcgorfCBwYWNrZWQgY2FzZXMsIGJ1dCB3ZSBtdXN0IHNldCB0aGUgRlBTUiBjb25kaXRpb24gY29kZXMgcHJvcGVybHkuCit8Cittb3ZlX3VucGFjazoKKwltb3ZldwlFVEVNUCglYTYpLCVkMAl8Z2V0IHdvcmQgd2l0aCBpbmYgaW5mb3JtYXRpb24KKwliZmV4dHUJJWQweyMyMDojMTJ9LCVkMQl8Z2V0IGV4cG9uZW50IGludG8gZDEKKwljbXBpdwkjMHgwZmZmLCVkMQl8dGVzdCBmb3IgaW5mIG9yIE5hTgorCWJuZXMJbXRyeV96ZXJvCXxpZiBub3QgZXF1YWwsIGl0IGlzIG5vdCBzcGVjaWFsCisJYmZleHR1CSVkMHsjMTc6IzN9LCVkMQl8Z2V0IFNFIGFuZCB5IGJpdHMgaW50byBkMQorCWNtcGl3CSM3LCVkMQkJfFNFIGFuZCB5IGJpdHMgbXVzdCBiZSBvbiBmb3Igc3BlY2lhbAorCWJuZXMJbXRyeV96ZXJvCXxpZiBub3Qgb24sIGl0IGlzIG5vdCBzcGVjaWFsCit8aW5wdXQgaXMgb2YgdGhlIHNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU4KKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIG1zIG1hbnRpc3NhCisJYm5lcwltZml4X25hbgkJfGlmIG5vbi16ZXJvLCBpdCBpcyBhIE5hTgorCXRzdGwJRVRFTVBfTE8oJWE2KQl8Y2hlY2sgbHMgbWFudGlzc2EKKwlibmVzCW1maXhfbmFuCQl8aWYgbm9uLXplcm8sIGl0IGlzIGEgTmFOCit8aW5wdXQgaXMgaW5mCisJb3JsCSNpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IEkgYml0CisJdHN0bAlFVEVNUCglYTYpCXxjaGVjayBzaWduCisJYmdlCWZpbmlzaAorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOIGJpdAorCWJyYQlmaW5pc2gJCXxzcGVjaWFsIGFscmVhZHkgb24gc3RhY2sKK21maXhfbmFuOgorCW9ybAkjbmFuX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOYU4gYml0CisJbW92ZWIJI25hbl90YWcsU1RBRyglYTYpCXxzZXQgc3RhZyB0byBOYU4KKwlidHN0Ygkjc2lnbmFuX2JpdCxFVEVNUF9ISSglYTYpIHx0ZXN0IGZvciBzbmFuCisJYm5lcwltbl9zbmFuCisJb3JsCSNzbmFuaW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBzbmFuIGJpdAorCWJ0c3RiCSNzbmFuX2JpdCxGUENSX0VOQUJMRSglYTYpIHx0ZXN0IGZvciBzbmFuIGVuYWJsZWQKKwlibmVzCW1uX3NuYW4KKwlic2V0Ygkjc2lnbmFuX2JpdCxFVEVNUF9ISSglYTYpIHxmb3JjZSBzbmFucyB0byBxbmFucworbW5fc25hbjoKKwl0c3RsCUVURU1QKCVhNikJfGNoZWNrIGZvciBzaWduCisJYmdlCWZpbmlzaAkJfGlmIGNsciwgZ28gb24KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTiBiaXQKKwlicmEJZmluaXNoCisKK210cnlfemVybzoKKwltb3ZldwlFVEVNUF9FWCsyKCVhNiksJWQwIHxnZXQgd29yZCA0CisJYW5kaXcJIzB4MDAwZiwlZDAJfGNsZWFyIGFsbCBidXQgbGFzdCBuaSh5KWJibGUKKwl0c3R3CSVkMAkJfGNoZWNrIGZvciB6ZXJvLgorCWJuZXMJbW5vdF9zcGVjCisJdHN0bAlFVEVNUF9ISSglYTYpCXxjaGVjayB3b3JkcyAzIGFuZCAyCisJYm5lcwltbm90X3NwZWMKKwl0c3RsCUVURU1QX0xPKCVhNikJfGNoZWNrIHdvcmRzIDEgYW5kIDAKKwlibmVzCW1ub3Rfc3BlYworCXRzdGwJRVRFTVAoJWE2KQl8dGVzdCBzaWduIG9mIHRoZSB6ZXJvCisJYmdlcwltcG9zX3plcm8KKwlvcmwJI25lZ19tYXNrK3pfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE4gYW5kIFoKKwltb3ZlbAkjMHg4MDAwMDAwMCxFVEVNUCglYTYpIHx3cml0ZSBuZWcgemVybyB0byBldGVtcAorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYXMJZmluaXNoCittcG9zX3plcm86CisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBaCisJY2xybAlFVEVNUCglYTYpCisJY2xybAlFVEVNUF9ISSglYTYpCisJY2xybAlFVEVNUF9MTyglYTYpCisJYnJhcwlmaW5pc2gKKworbW5vdF9zcGVjOgorCWZtb3ZlbXggJWZwMC0lZnAxLC0oJWE3KQl8c2F2ZSBmcDAgLGZwMSAtIGRlY2JpbiByZXR1cm5zIGluIGZwMAorCWJzcglkZWNiaW4KKwlmbW92ZXggJWZwMCxFVEVNUCglYTYpCit8CQkJCTtwdXQgdGhlIHVucGFja2VkIHNvcCBpbiB0aGUgZnNhdmUgc3RhY2sKKwlmbW92ZW14ICglYTcpKywlZnAwLSVmcDEKKworZmluaXNoOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCXxnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZHcJIzB4ZmJmZiwlZDAJfGNoYW5nZSB0aGUgc291cmNlIHNwZWNpZmllciBmaWVsZCB0bworfAkJCQk7ZXh0ZW5kZWQgKHdhcyBwYWNrZWQpLgorCW1vdmV3CSVkMCxDTURSRUcxQiglYTYpCXx3cml0ZSBjb21tYW5kIHdvcmQgYmFjayB0byBmc2F2ZSBzdGFjaworfAkJCQk7d2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSAwNDAgd2lsbAorfAkJCQk7cmUtZXhlY3V0ZSB0aGUgaW5zdC4gd2l0aG91dCB0YWtpbmcKK3wJCQkJO2Fub3RoZXIgcGFja2VkIHRyYXAuCisKK2ZpeF9zdGFnOgorfENvbnZlcnRlZCByZXN1bHQgaXMgbm93IGluIGV0ZW1wIG9uIGZzYXZlIHN0YWNrLCBub3cgc2V0IHRoZSBzb3VyY2UKK3x0YWcgKHN0YWcpCit8CWlmIChldGUgPSQ3ZmZmKSB0aGVuIElORiBvciBOQU4KK3wJCWlmIChldGVtcCA9ICR4LjAtLS0tMCkgdGhlbgorfAkJCXN0YWcgPSBJTkYKK3wJCWVsc2UKK3wJCQlzdGFnID0gTkFOCit8CWVsc2UKK3wJCWlmIChldGUgPSAkMDAwMCkgdGhlbgorfAkJCXN0YWcgPSBaRVJPCit8CQllbHNlCit8CQkJc3RhZyA9IE5PUk0KK3wKK3wgTm90ZSBhbHNvIHRoYXQgdGhlIGV0ZW1wXzE1IGJpdCAoanVzdCByaWdodCBvZiB0aGUgc3RhZykgbXVzdAorfCBiZSBzZXQgYWNjb3JkaW5nbHkuCit8CisJbW92ZXcJCUVURU1QX0VYKCVhNiksJWQxCisJYW5kaXcJCSMweDdmZmYsJWQxICAgfHN0cmlwIHNpZ24KKwljbXB3CQkjMHg3ZmZmLCVkMQorCWJuZXMJCXpfb3JfbnJtCisJbW92ZWwJCUVURU1QX0hJKCVhNiksJWQxCisJYm5lcwkJaXNfbmFuCisJbW92ZWwJCUVURU1QX0xPKCVhNiksJWQxCisJYm5lcwkJaXNfbmFuCitpc19pbmY6CisJbW92ZWIJCSMweDQwLFNUQUcoJWE2KQorCW1vdmVsCQkjMHg0MCwlZDAKKwlydHMKK2lzX25hbjoKKwltb3ZlYgkJIzB4NjAsU1RBRyglYTYpCisJbW92ZWwJCSMweDYwLCVkMAorCXJ0cworel9vcl9ucm06CisJdHN0dwkJJWQxCisJYm5lcwkJaXNfbnJtCitpc196cm86Cit8IEZvciBhIHplcm8sIHNldCBldGVtcF8xNQorCW1vdmViCQkjMHgzMCxTVEFHKCVhNikKKwltb3ZlbAkJIzB4MjAsJWQwCisJcnRzCitpc19ucm06Cit8IEZvciBhIG5vcm0sIGNoZWNrIGlmIHRoZSBleHAgPD0gJDNmZmY7IGlmIHNvLCBzZXQgZXRlbXBfMTUKKwljbXBpdwkJIzB4M2ZmZiwlZDEKKwlibGVzCQlzZXRfYml0MTUKKwltb3ZlYgkJIzAsU1RBRyglYTYpCisJYnJhcwkJZW5kX2lzX25ybQorc2V0X2JpdDE1OgorCW1vdmViCQkjMHgxMCxTVEFHKCVhNikKK2VuZF9pc19ucm06CisJbW92ZWwJCSMwLCVkMAorZW5kX2ZpeDoKKwlydHMKKworZW5kX2dldDoKKwlydHMKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9rZXJuZWxfZXguUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2tlcm5lbF9leC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NmI3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9rZXJuZWxfZXguUwpAQCAtMCwwICsxLDQ5NCBAQAorfAorfAlrZXJuZWxfZXguc2EgMy4zIDEyLzE5LzkwCit8Cit8IFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byBmb3JjZSBleGNlcHRpb24gc3RhdHVzIGluIHRoZQorfCBmcHUgZm9yIGV4Y2VwdGlvbmFsIGNhc2VzIGRldGVjdGVkIG9yIHJlcG9ydGVkIHdpdGhpbiB0aGUKK3wgdHJhbnNjZW5kZW50YWwgZnVuY3Rpb25zLiAgVHlwaWNhbGx5LCB0aGUgdF94eCByb3V0aW5lIHdpbGwKK3wgc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIHRoZSBVU0VSX0ZQU1Igd29yZCBvbiB0aGUgc3RhY2suCit8IFRoZSBiaXRzIGFyZSB0ZXN0ZWQgaW4gZ2VuX2V4Y2VwdC5zYSB0byBkZXRlcm1pbmUgaWYgYW4gZXhjZXB0aW9uYWwKK3wgc2l0dWF0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWQgb24gcmV0dXJuIGZyb20gdGhlIEZQU1AuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0tFUk5FTF9FWDogICAgfGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uICAgIDgKKworI2luY2x1ZGUgImZwc3AuaCIKKworbW5zX2luZjogIC5sb25nIDB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitwbHNfaW5mOiAgLmxvbmcgMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK25hbjogICAgICAubG9uZyAweDdmZmYwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZgoraHVnZTogICAgIC5sb25nIDB4N2ZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmCisKKwl8eHJlZgkgIG92Zl9yX2sKKwl8eHJlZgkgIHVuZl9zdWIKKwl8eHJlZgkgIG5ybV9zZXQKKworCS5nbG9iYWwJICB0X2R6CisJLmdsb2JhbCAgICAgIHRfZHoyCisJLmdsb2JhbCAgICAgIHRfb3BlcnIKKwkuZ2xvYmFsICAgICAgdF91bmZsCisJLmdsb2JhbCAgICAgIHRfb3ZmbAorCS5nbG9iYWwgICAgICB0X292ZmwyCisJLmdsb2JhbCAgICAgIHRfaW54MgorCS5nbG9iYWwJICB0X2ZyY2lueAorCS5nbG9iYWwJICB0X2V4dGRucm0KKwkuZ2xvYmFsCSAgdF9yZXNkbnJtCisJLmdsb2JhbAkgIGRzdF9uYW4KKwkuZ2xvYmFsCSAgc3JjX25hbgorfAorfAlEWiBleGNlcHRpb24KK3wKK3wKK3wJaWYgZHogdHJhcCBkaXNhYmxlZAorfAkJc3RvcmUgcHJvcGVybHkgc2lnbmVkIGluZiAodXNlIHNpZ24gb2YgZXRlbXApIGludG8gZnAwCit8CQlzZXQgRlBTUiBleGNlcHRpb24gc3RhdHVzIGR6IGJpdCwgY29uZGl0aW9uIGNvZGUKK3wJCWluZiBiaXQsIGFuZCBhY2NydWVkIGR6IGJpdAorfAkJcmV0dXJuCit8CQlmcmVzdG9yZSB0aGUgZnJhbWUgaW50byB0aGUgbWFjaGluZSAoZG9uZSBieSB1bmltcF9oZCkKK3wKK3wJZWxzZSBkeiB0cmFwIGVuYWJsZWQKK3wJCXNldCBleGNlcHRpb24gc3RhdHVzIGJpdCAmIGFjY3J1ZWQgYml0cyBpbiBGUFNSCit8CQlzZXQgZmxhZyB0byBkaXNhYmxlIHN0b19yZXMgZnJvbSBjb3JydXB0aW5nIGZwIHJlZ2lzdGVyCit8CQlyZXR1cm4KK3wJCWZyZXN0b3JlIHRoZSBmcmFtZSBpbnRvIHRoZSBtYWNoaW5lIChkb25lIGJ5IHVuaW1wX2hkKQorfAorfCB0X2R6MiBpcyB1c2VkIGJ5IG1vbmFkaWMgZnVuY3Rpb25zIHN1Y2ggYXMgZmxvZ24gKGZyb20gZG9fZnVuYykuCit8IHRfZHogaXMgdXNlZCBieSBtb25hZGljIGZ1bmN0aW9ucyBzdWNoIGFzIHNhdGFuaCAoZnJvbSB0aGUKK3wgdHJhbnNjZW5kZW50YWwgZnVuY3Rpb24pLgorfAordF9kejI6CisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCisJZm1vdmVsCSMwLCVGUFNSCQkJfGNsciBzdGF0dXMgYml0cyAoWiBzZXQpCisJYnRzdGIJI2R6X2JpdCxGUENSX0VOQUJMRSglYTYpCXx0ZXN0IEZQQ1IgZm9yIGR6IGV4YyBlbmFibGVkCisJYm5lcwlkel9lbmFfZW5kCisJYnJhcwltX2luZgkJCXxmbG9neCBhbHdheXMgcmV0dXJucyAtaW5mCit0X2R6OgorCWZtb3ZlbAkjMCwlRlBTUgkJCXxjbHIgc3RhdHVzIGJpdHMgKFogc2V0KQorCWJ0c3RiCSNkel9iaXQsRlBDUl9FTkFCTEUoJWE2KQl8dGVzdCBGUENSIGZvciBkeiBleGMgZW5hYmxlZAorCWJuZXMJZHpfZW5hCit8Cit8CWR6IGRpc2FibGVkCit8CisJYnRzdGIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikJfGNoZWNrIHNpZ24gZm9yIG5lZyBvciBwb3MKKwliZXFzCXBfaW5mCQkJfGJyYW5jaCBpZiBwb3Mgc2lnbgorCittX2luZjoKKwlmbW92ZW14IG1uc19pbmYsJWZwMC0lZnAwCQl8bG9hZCAtaW5mCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCisJYnJhcwlzZXRfZnBzcgorcF9pbmY6CisJZm1vdmVteCBwbHNfaW5mLCVmcDAtJWZwMAkJfGxvYWQgK2luZgorc2V0X2Zwc3I6CisJb3JsCSNkemluZl9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgSSxEWixBRFoKKwlydHMKK3wKK3wJZHogZW5hYmxlZAorfAorZHpfZW5hOgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCXxjaGVjayBzaWduIGZvciBuZWcgb3IgcG9zCisJYmVxcwlkel9lbmFfZW5kCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCitkel9lbmFfZW5kOgorCW9ybAkjZHppbmZfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IEksRFosQURaCisJc3QJU1RPUkVfRkxHKCVhNikKKwlydHMKK3wKK3wJT1BFUlIgZXhjZXB0aW9uCit8Cit8CWlmIChvcGVyciB0cmFwIGRpc2FibGVkKQorfAkJc2V0IEZQU1IgZXhjZXB0aW9uIHN0YXR1cyBvcGVyciBiaXQsIGNvbmRpdGlvbiBjb2RlCit8CQluYW4gYml0OyBTdG9yZSBkZWZhdWx0IE5BTiBpbnRvIGZwMAorfAkJZnJlc3RvcmUgdGhlIGZyYW1lIGludG8gdGhlIG1hY2hpbmUgKGRvbmUgYnkgdW5pbXBfaGQpCit8Cit8CWVsc2UgKG9wZXJyIHRyYXAgZW5hYmxlZCkKK3wJCXNldCBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgb3BlcnIgYml0LCBhY2NydWVkIG9wZXJyIGJpdAorfAkJc2V0IGZsYWcgdG8gZGlzYWJsZSBzdG9fcmVzIGZyb20gY29ycnVwdGluZyBmcCByZWdpc3RlcgorfAkJZnJlc3RvcmUgdGhlIGZyYW1lIGludG8gdGhlIG1hY2hpbmUgKGRvbmUgYnkgdW5pbXBfaGQpCit8Cit0X29wZXJyOgorCW9ybAkjb3BuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5hTiwgT1BFUlIsIEFJT1AKKworCWJ0c3RiCSNvcGVycl9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8dGVzdCBGUENSIGZvciBvcGVyciBlbmFibGVkCisJYm5lcwlvcF9lbmEKKworCWZtb3ZlbXggbmFuLCVmcDAtJWZwMAkJfGxvYWQgZGVmYXVsdCBuYW4KKwlydHMKK29wX2VuYToKKwlzdAlTVE9SRV9GTEcoJWE2KQkJfGRvIG5vdCBjb3JydXB0IGRlc3RpbmF0aW9uCisJcnRzCisKK3wKK3wJdF91bmZsIC0tLSBVTkZMIGV4Y2VwdGlvbgorfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgYWxsIHJvdXRpbmVzIHJlcXVpcmluZyB1bmZsLCBpbmV4MiwKK3wgYXVuZmwsIGFuZCBhaW5leCB0byBiZSBzZXQgb24gZXhpdC4KK3wKK3wgT24gZW50cnksIGEwIHBvaW50cyB0byB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZC4gIFRoZSBmaW5hbCBleGNlcHRpb25hbAorfCBvcGVyYW5kIGlzIGJ1aWx0IGluIEZQX1NDUjEgYW5kIG9ubHkgdGhlIHNpZ24gZnJvbSB0aGUgb3JpZ2luYWwgb3BlcmFuZAorfCBpcyB1c2VkLgorfAordF91bmZsOgorCWNscmwJRlBfU0NSMSglYTYpCQl8c2V0IGV4Y2VwdGlvbmFsIG9wZXJhbmQgdG8gemVybworCWNscmwJRlBfU0NSMSs0KCVhNikKKwljbHJsCUZQX1NDUjErOCglYTYpCisJdHN0YgkoJWEwKQkJCXxleHRyYWN0IHNpZ24gZnJvbSBjYWxsZXIncyBleG9wCisJYnBscwl1bmZsX3NpZ25vaworCWJzZXQJI3NpZ25fYml0LEZQX1NDUjEoJWE2KQordW5mbF9zaWdub2s6CisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAkJCQkJO3NldCBVTkZMLCBJTkVYMiwgQVVORkwsIEFJTkVYCit1bmZsX2NvbjoKKwlidHN0YgkjdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJlcXMJdW5mbF9kaXMKKwordW5mbF9lbmE6CisJYmZjbHIJU1RBRyglYTYpeyM1OiMzfQkJfGNsZWFyIHdidG02Nix3YnRtMSx3YnRtMAorCWJzZXRiCSN3YnRlbXAxNV9iaXQsV0JfQllURSglYTYpIHxzZXQgd2J0ZW1wMTUKKwlic2V0Ygkjc3RpY2t5X2JpdCxTVElDS1koJWE2KQl8c2V0IHN0aWNreSBiaXQKKworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorCit1bmZsX2RpczoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzA6IzJ9LCVkMAl8Z2V0IHJvdW5kIHByZWNpc2lvbgorCisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKworCWJzcgl1bmZfc3ViCQkJfHJldHVybnMgSUVFRSByZXN1bHQgYXQgYTAKK3wJCQkJCTthbmQgc2V0cyBGUFNSX0NDIGFjY29yZGluZ2x5CisKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXVuZmxfZmluCisKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJzZXRiCSNzaWduX2JpdCxGUF9TQ1IxKCVhNikJfHNldCBzaWduIGJpdCBvZiBleGMgb3BlcmFuZAorCit1bmZsX2ZpbjoKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAkJfHN0b3JlIHJlc3VsdCBpbiBmcDAKKwlydHMKKworCit8Cit8CXRfb3ZmbDIgLS0tIE9WRkwgZXhjZXB0aW9uICh3aXRob3V0IGluZXgyIHJldHVybmVkKQorfAorfCBUaGlzIGVudHJ5IGlzIHVzZWQgYnkgc2NhbGUgdG8gZm9yY2UgY2F0YXN0cm9waGljIG92ZXJmbG93LiAgVGhlCit8IG92ZmwsIGFvdmZsLCBhbmQgYWluZXggYml0cyBhcmUgc2V0LCBidXQgbm90IHRoZSBpbmV4MiBiaXQuCit8Cit0X292ZmwyOgorCW9ybAkjb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW1vdmVsCUVURU1QKCVhNiksRlBfU0NSMSglYTYpCisJbW92ZWwJRVRFTVBfSEkoJWE2KSxGUF9TQ1IxKzQoJWE2KQorCW1vdmVsCUVURU1QX0xPKCVhNiksRlBfU0NSMSs4KCVhNikKK3wKK3wgQ2hlY2sgZm9yIHNpbmdsZSBvciBkb3VibGUgcm91bmQgcHJlY2lzaW9uLiAgSWYgc2luZ2xlLCBjaGVjayBpZgorfCB0aGUgbG93ZXIgNDAgYml0cyBvZiBFVEVNUCBhcmUgemVybzsgaWYgbm90LCBzZXQgaW5leDIuICBJZiBkb3VibGUsCit8IGNoZWNrIGlmIHRoZSBsb3dlciAyMSBiaXRzIGFyZSB6ZXJvOyBpZiBub3QsIHNldCBpbmV4Mi4KK3wKKwltb3ZlYglGUENSX01PREUoJWE2KSwlZDAKKwlhbmRpYgkjMHhjMCwlZDAKKwliZXEJdF93b3JrCQl8aWYgZXh0ZW5kZWQsIGZpbmlzaCBvdmZsIHByb2Nlc3NpbmcKKwljbXBpYgkjMHg0MCwlZDAJCXx0ZXN0IGZvciBzaW5nbGUKKwlibmVzCXRfZGJsCit0X3NnbDoKKwl0c3RiCUVURU1QX0xPKCVhNikKKwlibmVzCXRfc2V0aW54MgorCW1vdmVsCUVURU1QX0hJKCVhNiksJWQwCisJYW5kaWwJIzB4ZmYsJWQwCQl8bG9vayBhdCBvbmx5IGxvd2VyIDggYml0cworCWJuZXMJdF9zZXRpbngyCisJYnJhCXRfd29yawordF9kYmw6CisJbW92ZWwJRVRFTVBfTE8oJWE2KSwlZDAKKwlhbmRpbAkjMHg3ZmYsJWQwCXxsb29rIGF0IG9ubHkgbG93ZXIgMTEgYml0cworCWJlcQl0X3dvcmsKK3Rfc2V0aW54MjoKKwlvcmwJI2luZXgyX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmFzCXRfd29yaworfAorfAl0X292ZmwgLS0tIE9WRkwgZXhjZXB0aW9uCit8Cit8KiogTm90ZTogdGhlIGV4YyBvcGVyYW5kIGlzIHJldHVybmVkIGluIEVURU1QLgorfAordF9vdmZsOgorCW9ybAkjb3ZmaW54X21hc2ssVVNFUl9GUFNSKCVhNikKK3Rfd29yazoKKwlidHN0Ygkjb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8dGVzdCBGUENSIGZvciBvdmZsIGVuYWJsZWQKKwliZXFzCW92Zl9kaXMKKworb3ZmX2VuYToKKwljbHJsCUZQX1NDUjEoJWE2KQkJfHNldCBleGNlcHRpb25hbCBvcGVyYW5kCisJY2xybAlGUF9TQ1IxKzQoJWE2KQorCWNscmwJRlBfU0NSMSs4KCVhNikKKworCWJmY2xyCVNUQUcoJWE2KXsjNTojM30JCXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAKKwliY2xyYgkjd2J0ZW1wMTVfYml0LFdCX0JZVEUoJWE2KSB8Y2xlYXIgd2J0ZW1wMTUKKwlic2V0Ygkjc3RpY2t5X2JpdCxTVElDS1koJWE2KQl8c2V0IHN0aWNreSBiaXQKKworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorfAkJCQkJO2ZhbGwgdGhyb3VnaCB0byBkaXNhYmxlZCBjYXNlCisKK3wgRm9yIGRpc2FibGVkIG92ZXJmbG93IGNhbGwgJ292Zl9yX2snLiAgVGhpcyByb3V0aW5lIGxvYWRzIHRoZQorfCBjb3JyZWN0IHJlc3VsdCBiYXNlZCBvbiB0aGUgcm91bmRpbmcgcHJlY2lzaW9uLCBkZXN0aW5hdGlvbgorfCBmb3JtYXQsIHJvdW5kaW5nIG1vZGUgYW5kIHNpZ24uCit8CitvdmZfZGlzOgorCWJzcglvdmZfcl9rCQkJfHJldHVybnMgdW5zaWduZWQgRVRFTVBfRVgKK3wJCQkJCTthbmQgc2V0cyBGUFNSX0NDIGFjY29yZGluZ2x5LgorCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQl8Zml4IHNpZ24KKwliZXFzCW92Zl9wb3MKKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorCWJzZXRiCSNzaWduX2JpdCxGUF9TQ1IxKCVhNikJfHNldCBleGNlcHRpb25hbCBvcGVyYW5kIHNpZ24KK292Zl9wb3M6CisJZm1vdmVteCBFVEVNUCglYTYpLCVmcDAtJWZwMAkJfG1vdmUgdGhlIHJlc3VsdCB0byBmcDAKKwlydHMKKworCit8Cit8CUlORVgyIGV4Y2VwdGlvbgorfAorfCBUaGUgaW5leDIgYW5kIGFpbmV4IGJpdHMgYXJlIHNldC4KK3wKK3RfaW54MjoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBJTkVYMiwgQUlORVgKKwlydHMKKworfAorfAlGb3JjZSBJbmV4MgorfAorfCBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSB0cmFuc2NlbmRlbnRhbCByb3V0aW5lcyB0byBmb3JjZQorfCB0aGUgaW5leDIgZXhjZXB0aW9uIGJpdHMgc2V0IGluIHRoZSBGUFNSLiAgSWYgdGhlIHVuZGVyZmxvdyBiaXQKK3wgaXMgc2V0LCBidXQgdGhlIHVuZGVyZmxvdyB0cmFwIHdhcyBub3QgdGFrZW4sIHRoZSBhdW5mbCBiaXQgaW4KK3wgdGhlIEZQU1IgbXVzdCBiZSBzZXQuCit8Cit0X2ZyY2lueDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBJTkVYMiwgQUlORVgKKwlidHN0YgkjdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSB8dGVzdCBmb3IgdW5mbCBiaXQgc2V0CisJYmVxcwlub191YWNjMQkJfGlmIGNsZWFyLCBkbyBub3Qgc2V0IGF1bmZsCisJYnNldGIJI2F1bmZsX2JpdCxGUFNSX0FFWENFUFQoJWE2KQorbm9fdWFjYzE6CisJcnRzCisKK3wKK3wJRFNUX05BTgorfAorfCBEZXRlcm1pbmUgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbiBpcyBzaWduYWxsaW5nIG9yIG5vbi1zaWduYWxsaW5nLAorfCBhbmQgc2V0IHRoZSBGUFNSIGJpdHMgYWNjb3JkaW5nbHkuICBTZWUgdGhlIE1DNjgwNDAgVXNlcidzIE1hbnVhbAorfCBzZWN0aW9uIDMuMi4yLjUgTk9ULUEtTlVNQkVSUy4KK3wKK2RzdF9uYW46CisJYnRzdGIJI3NpZ25fYml0LEZQVEVNUF9FWCglYTYpIHx0ZXN0IHNpZ24gb2YgbmFuCisJYmVxcwlkc3RfcG9zCQkJfGlmIGNsciwgaXQgd2FzIHBvc2l0aXZlCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgTiBiaXQKK2RzdF9wb3M6CisJYnRzdGIJI3NpZ25hbl9iaXQsRlBURU1QX0hJKCVhNikgfGNoZWNrIGlmIHNpZ25hbGxpbmcKKwliZXFzCWRzdF9zbmFuCQl8YnJhbmNoIGlmIHNpZ25hbGxpbmcKKworCWZtb3ZlbAklZDEsJWZwY3IJCQl8cmVzdG9yZSB1c2VyJ3Mgcm1vZGUvcHJlYworCWZtb3ZleCBGUFRFTVAoJWE2KSwlZnAwCQl8cmV0dXJuIHRoZSBub24tc2lnbmFsbGluZyBuYW4KK3wKK3wgQ2hlY2sgdGhlIHNvdXJjZSBuYW4uICBJZiBpdCBpcyBzaWduYWxsaW5nLCBzbmFuIHdpbGwgYmUgcmVwb3J0ZWQuCit8CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWFuZGliCSMweGUwLCVkMAorCWNtcGliCSMweDYwLCVkMAorCWJuZXMJbm9fc25hbgorCWJ0c3RiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfGNoZWNrIGlmIHNpZ25hbGxpbmcKKwlibmVzCW5vX3NuYW4KKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5BTiwgU05BTiwgQUlPUAorbm9fc25hbjoKKwlydHMKKworZHN0X3NuYW46CisJYnRzdGIJI3NuYW5fYml0LEZQQ1JfRU5BQkxFKCVhNikgfGNoZWNrIGlmIHRyYXAgZW5hYmxlZAorCWJlcXMJZHN0X2RpcwkJCXxicmFuY2ggaWYgZGlzYWJsZWQKKworCW9yYgkjbmFuX3RhZyxEVEFHKCVhNikJfHNldCB1cCBkdGFnIGZvciBuYW4KKwlzdAlTVE9SRV9GTEcoJWE2KQkJfGRvIG5vdCBzdG9yZSBhIHJlc3VsdAorCW9ybAkjc25hbmlvcF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTkFOLCBTTkFOLCBBSU9QCisJcnRzCisKK2RzdF9kaXM6CisJYnNldGIJI3NpZ25hbl9iaXQsRlBURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlmbW92ZWwJJWQxLCVmcGNyCQkJfHJlc3RvcmUgdXNlcidzIHJtb2RlL3ByZWMKKwlmbW92ZXggRlBURU1QKCVhNiksJWZwMAkJfGxvYWQgbm9uLXNpZ24uIG5hbgorCW9ybAkjc25hbmlvcF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTkFOLCBTTkFOLCBBSU9QCisJcnRzCisKK3wKK3wJU1JDX05BTgorfAorfCBEZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBuYW4gaXMgc2lnbmFsbGluZyBvciBub24tc2lnbmFsbGluZywKK3wgYW5kIHNldCB0aGUgRlBTUiBiaXRzIGFjY29yZGluZ2x5LiAgU2VlIHRoZSBNQzY4MDQwIFVzZXIncyBNYW51YWwKK3wgc2VjdGlvbiAzLjIuMi41IE5PVC1BLU5VTUJFUlMuCit8CitzcmNfbmFuOgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpIHx0ZXN0IHNpZ24gb2YgbmFuCisJYmVxcwlzcmNfcG9zCQkJfGlmIGNsciwgaXQgd2FzIHBvc2l0aXZlCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgTiBiaXQKK3NyY19wb3M6CisJYnRzdGIJI3NpZ25hbl9iaXQsRVRFTVBfSEkoJWE2KSB8Y2hlY2sgaWYgc2lnbmFsbGluZworCWJlcXMJc3JjX3NuYW4JCXxicmFuY2ggaWYgc2lnbmFsbGluZworCWZtb3ZlbAklZDEsJWZwY3IJCQl8cmVzdG9yZSB1c2VyJ3Mgcm1vZGUvcHJlYworCWZtb3ZleCBFVEVNUCglYTYpLCVmcDAJCXxyZXR1cm4gdGhlIG5vbi1zaWduYWxsaW5nIG5hbgorCXJ0cworCitzcmNfc25hbjoKKwlidHN0Ygkjc25hbl9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8Y2hlY2sgaWYgdHJhcCBlbmFibGVkCisJYmVxcwlzcmNfZGlzCQkJfGJyYW5jaCBpZiBkaXNhYmxlZAorCWJzZXRiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlvcmIJI25vcm1fdGFnLERUQUcoJWE2KQl8c2V0IHVwIGR0YWcgZm9yIG5vcm0KKwlvcmIJI25hbl90YWcsU1RBRyglYTYpCXxzZXQgdXAgc3RhZyBmb3IgbmFuCisJc3QJU1RPUkVfRkxHKCVhNikJCXxkbyBub3Qgc3RvcmUgYSByZXN1bHQKKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5BTiwgU05BTiwgQUlPUAorCXJ0cworCitzcmNfZGlzOgorCWJzZXRiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlmbW92ZWwJJWQxLCVmcGNyCQkJfHJlc3RvcmUgdXNlcidzIHJtb2RlL3ByZWMKKwlmbW92ZXggRVRFTVAoJWE2KSwlZnAwCQl8bG9hZCBub24tc2lnbi4gbmFuCisJb3JsCSNzbmFuaW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOQU4sIFNOQU4sIEFJT1AKKwlydHMKKworfAorfCBGb3IgYWxsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBkZW5vcm1hbGl6ZWQgaW5wdXQgYW5kIHRoYXQgZih4KT14LAorfCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludAorfAordF9leHRkbnJtOgorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKK3wJCQkJCTtzZXQgVU5GTCwgSU5FWDIsIEFVTkZMLCBBSU5FWAorCWJyYXMJeGRucm1fY29uCit8Cit8IEVudHJ5IHBvaW50IGZvciBzY2FsZSB3aXRoIGV4dGVuZGVkIGRlbm9ybS4gIFRoZSBmdW5jdGlvbiBkb2VzCit8IG5vdCBzZXQgaW5leDIsIGF1bmZsLCBvciBhaW5leC4KK3wKK3RfcmVzZG5ybToKKwlvcmwJI3VuZmxfbWFzayxVU0VSX0ZQU1IoJWE2KQorCit4ZG5ybV9jb246CisJYnRzdGIJI3VuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCXhkbnJtX2RpcworCit8Cit8IElmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQsIHRoZSBhZGRpdGlvbmFsIHRhc2sgb2Ygc2V0dGluZyB1cCBXQlRFTVAKK3wgaXMgbmVlZGVkIHNvIHRoYXQgd2hlbiB0aGUgdW5kZXJmbG93IGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsCit8IHRoZSB1c2VyIHBlcmNlaXZlcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gd2hhdCB0aGUgMDQwIHByb3ZpZGVzIHZzLgorfCB3aGF0IHRoZSBGUFNQIHByb3ZpZGVzLgorfAoreGRucm1fZW5hOgorCW1vdmVsCSVhMCwtKCVhNykKKworCW1vdmVsCUxPQ0FMX0VYKCVhMCksRlBfU0NSMSglYTYpCisJbW92ZWwJTE9DQUxfSEkoJWEwKSxGUF9TQ1IxKzQoJWE2KQorCW1vdmVsCUxPQ0FMX0xPKCVhMCksRlBfU0NSMSs4KCVhNikKKworCWxlYQlGUF9TQ1IxKCVhNiksJWEwCisKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZXh0IGZvcm1hdAorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIGlmIGlucHV0IGlzIGRlbm9ybQorCWJlcXMJeGRucm1fZG4JCXxpZiBzbywgc2tpcCBucm1fc2V0CisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHRoZSByZXN1bHQgKGV4cG9uZW50Cit8CQkJCQk7d2lsbCBiZSBuZWdhdGl2ZQoreGRucm1fZG46CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfHRha2Ugb2ZmIGZhbHNlIHNpZ24KKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJeGRlcAorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCit4ZGVwOgorCWJmY2xyCVNUQUcoJWE2KXsjNTojM30JCXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAKKwlic2V0Ygkjd2J0ZW1wMTVfYml0LFdCX0JZVEUoJWE2KSB8c2V0IHdidGVtcDE1CisJYmNscmIJI3N0aWNreV9iaXQsU1RJQ0tZKCVhNikJfGNsZWFyIHN0aWNreSBiaXQKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwltb3ZlbAkoJWE3KSssJWEwCit4ZG5ybV9kaXM6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGdldCByb3VuZCBwcmVjaXNpb24KKwlibmVzCW5vdF9leHQJCQl8aWYgbm90IHJvdW5kIGV4dGVuZGVkLCBzdG9yZQorfAkJCQkJO0lFRUUgZGVmYXVsdHMKK2lzX2V4dDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcXMJeGRucm1fc3RvcmUKKworCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQl8c2V0IE4gYml0IGluIEZQU1JfQ0MKKworCWJyYXMJeGRucm1fc3RvcmUKKworbm90X2V4dDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZXh0IGZvcm1hdAorCWJzcgl1bmZfc3ViCQkJfHJldHVybnMgSUVFRSByZXN1bHQgcG9pbnRlZCBieQorfAkJCQkJO2EwOyBzZXRzIEZQU1JfQ0MgYWNjb3JkaW5nbHkKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXhkbnJtX3N0b3JlCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK3hkbnJtX3N0b3JlOgorCWZtb3ZlbXggKCVhMCksJWZwMC0lZnAwCQl8c3RvcmUgcmVzdWx0IGluIGZwMAorCXJ0cworCit8Cit8IFRoaXMgc3Vicm91dGluZSBpcyB1c2VkIGZvciBkeWFkaWMgb3BlcmF0aW9ucyB0aGF0IHVzZSBhbiBleHRlbmRlZAorfCBkZW5vcm0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBhcHByb2FjaCB1c2VkIGlzIHRvIGNhcHR1cmUgdGhlIGZyYW1lLAorfCBmaXgvcmVzdG9yZS4KK3wKKwkuZ2xvYmFsCXRfYXZvaWRfdW5zdXBwCit0X2F2b2lkX3Vuc3VwcDoKKwlsaW5rCSVhMiwjLUxPQ0FMX1NJWkUJCXxzbyB0aGF0IGEyIGZwc3AuaCBuZWdhdGl2ZQorfAkJCQkJO29mZnNldHMgbWF5IGJlIHVzZWQKKwlmc2F2ZQktKCVhNykKKwl0c3RiCTEoJWE3KQkJCXxjaGVjayBpZiBpZGxlLCBleGl0IGlmIHNvCisJYmVxCWlkbGVfZW5kCisJYnRzdGIJI0UxLEVfQllURSglYTIpCQl8Y2hlY2sgZm9yIGFuIEUxIGV4Y2VwdGlvbiBpZgorfAkJCQkJO2VuYWJsZWQsIHRoZXJlIGlzIGFuIHVuc3VwcAorCWJlcQllbmRfYXZ1bgkJfGVsc2UsIGV4aXQKKwlidHN0YgkjNyxEVEFHKCVhMikJCXxjaGVjayBmb3IgZGVub3JtIGRlc3RpbmF0aW9uCisJYmVxcwlzcmNfZGVuCQkJfGVsc2UsIG11c3QgYmUgYSBzb3VyY2UgZGVub3JtCit8Cit8IGhhbmRsZSBkZXN0aW5hdGlvbiBkZW5vcm0KK3wKKwlsZWEJRlBURU1QKCVhMiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKwliY2xyYgkjNyxEVEFHKCVhMikJCXxzZXQgRFRBRyB0byBub3JtCisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHJlc3VsdCwgZXhwb25lbnQKK3wJCQkJCTt3aWxsIGJlY29tZSBuZWdhdGl2ZQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgcmlkIG9mIGZha2Ugc2lnbgorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJY2tfc3JjX2RlbgkJfGNoZWNrIGlmIHNvdXJjZSBpcyBhbHNvIGRlbm9ybQorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCitja19zcmNfZGVuOgorCWJ0c3RiCSM3LFNUQUcoJWEyKQorCWJlcXMJZW5kX2F2dW4KK3NyY19kZW46CisJbGVhCUVURU1QKCVhMiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKwliY2xyYgkjNyxTVEFHKCVhMikJCXxzZXQgU1RBRyB0byBub3JtCisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHJlc3VsdCwgZXhwb25lbnQKK3wJCQkJCTt3aWxsIGJlY29tZSBuZWdhdGl2ZQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgcmlkIG9mIGZha2Ugc2lnbgorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJZGVuX2NvbQorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCitkZW5fY29tOgorCW1vdmViCSMweGZlLENVX1NBVkVQQyglYTIpCXxzZXQgY29udGludWUgZnJhbWUKKwljbHJ3CU5NTkVYQyglYTIpCQl8Y2xlYXIgTk1ORVhDCisJYmNscmIJI0UxLEVfQllURSglYTIpCit8CWZtb3ZlLmwJJUZQU1IsRlBTUl9TSEFET1coJWEyKQorfAlic2V0LmIJI1NGTEFHLEVfQllURSglYTIpCit8CWJzZXQuYgkjWEZMQUcsVF9CWVRFKCVhMikKK2VuZF9hdnVuOgorCWZyZXN0b3JlICglYTcpKworCXVubGsJJWEyCisJcnRzCitpZGxlX2VuZDoKKwlhZGRsCSM0LCVhNworCXVubGsJJWEyCisJcnRzCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvcmVzX2Z1bmMuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Jlc19mdW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2Yjk1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Jlc19mdW5jLlMKQEAgLTAsMCArMSwyMDQwIEBACit8Cit8CXJlc19mdW5jLnNhIDMuOSA3LzI5LzkxCit8Cit8IE5vcm1hbGl6ZXMgZGVub3JtYWxpemVkIG51bWJlcnMgaWYgbmVjZXNzYXJ5IGFuZCB1cGRhdGVzIHRoZQorfCBzdGFjayBmcmFtZS4gIFRoZSBmdW5jdGlvbiBpcyB0aGVuIHJlc3RvcmVkIGJhY2sgaW50byB0aGUKK3wgbWFjaGluZSBhbmQgdGhlIDA0MCBjb21wbGV0ZXMgdGhlIG9wZXJhdGlvbi4gIFRoaXMgcm91dGluZQorfCBpcyBvbmx5IHVzZWQgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgdHlwZS9mb3JtYXQgaGFuZGxlci4KK3wgKEV4Y2VwdGlvbiB2ZWN0b3IgNTUpLgorfAorfCBGb3IgcGFja2VkIG1vdmUgb3V0IChmbW92ZS5wIGZwbSw8ZWE+KSB0aGUgb3BlcmF0aW9uIGlzCit8IGNvbXBsZXRlZCBoZXJlOyBkYXRhIGlzIHBhY2tlZCBhbmQgbW92ZWQgdG8gdXNlciBtZW1vcnkuCit8IFRoZSBzdGFjayBpcyByZXN0b3JlZCB0byB0aGUgMDQwIG9ubHkgaW4gdGhlIGNhc2Ugb2YgYQorfCByZXBvcnRhYmxlIGV4Y2VwdGlvbiBpbiB0aGUgY29udmVyc2lvbi4KK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1JFU19GVU5DOiAgICB8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitzcF9ibmRzOgkuc2hvcnQJMHgzZjgxLDB4NDA3ZQorCQkuc2hvcnQJMHgzZjZhLDB4MDAwMAorZHBfYm5kczoJLnNob3J0CTB4M2MwMSwweDQzZmUKKwkJLnNob3J0CTB4M2JjZCwweDAwMDAKKworCXx4cmVmCW1lbV93cml0ZQorCXx4cmVmCWJpbmRlYworCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCXJvdW5kCisJfHhyZWYJZGVub3JtCisJfHhyZWYJZGVzdF9leHQKKwl8eHJlZglkZXN0X2RibAorCXx4cmVmCWRlc3Rfc2dsCisJfHhyZWYJdW5mX3N1YgorCXx4cmVmCW5ybV9zZXQKKwl8eHJlZglkbnJtX2xwCisJfHhyZWYJb3ZmX3JlcworCXx4cmVmCXJlZ19kZXN0CisJfHhyZWYJdF9vdmZsCisJfHhyZWYJdF91bmZsCisKKwkuZ2xvYmFsCXJlc19mdW5jCisJLmdsb2JhbAlwX21vdmUKKworcmVzX2Z1bmM6CisJY2xyYglETlJNX0ZMRyglYTYpCisJY2xyYglSRVNfRkxHKCVhNikKKwljbHJiCUNVX09OTFkoJWE2KQorCXRzdGIJRFlfTU9fRkxHKCVhNikKKwliZXFzCW1vbmFkaWMKK2R5YWRpYzoKKwlidHN0YgkjNyxEVEFHKCVhNikJfGlmIGRvcCA9IG5vcm09MDAwLCB6ZXJvPTAwMSwKK3wJCQkJO2luZj0wMTAgb3IgbmFuPTAxMQorCWJlcXMJbW9uYWRpYwkJfHRoZW4gYnJhbmNoCit8CQkJCTtlbHNlIGRlbm9ybQorfCBIQU5ETEUgREVTVElOQVRJT04gREVOT1JNIEhFUkUKK3wJCQkJO3NldCBkdGFnIHRvIG5vcm0KK3wJCQkJO3dyaXRlIHRoZSB0YWcgJiBmcHRlMTUgdG8gdGhlIGZzdGFjaworCWxlYWwJRlBURU1QKCVhNiksJWEwCisKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCisJYnNyCW5ybV9zZXQJCXxub3JtYWxpemUgbnVtYmVyIChleHAgd2lsbCBnbyBuZWdhdGl2ZSkKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKSB8Z2V0IHJpZCBvZiBmYWxzZSBzaWduCisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CXxjaGFuZ2UgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWRwb3MKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorZHBvczoKKwliZmNscglEVEFHKCVhNil7IzA6IzR9CXxzZXQgdGFnIHRvIG5vcm1hbGl6ZWQsIEZQVEUxNSA9IDAKKwlic2V0YgkjNCxEVEFHKCVhNikJfHNldCBGUFRFMTUKKwlvcmIJIzB4MGYsRE5STV9GTEcoJWE2KQorbW9uYWRpYzoKKwlsZWFsCUVURU1QKCVhNiksJWEwCisJYnRzdGIJI2RpcmVjdGlvbl9iaXQsQ01EUkVHMUIoJWE2KQl8Y2hlY2sgZGlyZWN0aW9uCisJYm5lCW9wY2xhc3MzCQkJfGl0IGlzIGEgbXYgb3V0Cit8Cit8IEF0IHRoaXMgcG9pbnQsIG9ubHkgb3BjbGFzcyAwIGFuZCAyIHBvc3NpYmxlCit8CisJYnRzdGIJIzcsU1RBRyglYTYpCXxpZiBzb3AgPSBub3JtPTAwMCwgemVybz0wMDEsCit8CQkJCTtpbmY9MDEwIG9yIG5hbj0wMTEKKwlibmUJbW9uX2Rucm0JfGVsc2UgZGVub3JtCisJdHN0YglEWV9NT19GTEcoJWE2KQl8YWxsIGNhc2VzIG9mIGR5YWRpYyBpbnN0cnVjdGlvbnMgd291bGQKKwlibmUJbm9ybWFsCQl8cmVxdWlyZSBub3JtYWxpemF0aW9uIG9mIGRlbm9ybQorCit8IEF0IHRoaXMgcG9pbnQ6Cit8CW1vbmFkaWMgaW5zdHJ1Y3Rpb25zOglmYWJzICA9ICQxOCAgZm5lZyAgID0gJDFhICBmdHN0ICAgPSAkM2EKK3wJCQkJZm1vdmUgPSAkMDAgIGZzbW92ZSA9ICQ0MCAgZmRtb3ZlID0gJDQ0Cit8CQkJCWZzcXJ0ID0gJDA1KiBmc3NxcnQgPSAkNDEgIGZkc3FydCA9ICQ0NQorfAkJCQkoKmZzcXJ0IHJlZW5jb2RlZCB0byAkMDUpCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCBjb21tYW5kIHJlZ2lzdGVyCisJYW5kaWwJIzB4N2YsJWQwCQkJfHN0cmlwIHRvIG9ubHkgY29tbWFuZCB3b3JkCit8Cit8IEF0IHRoaXMgcG9pbnQsIGZhYnMsIGZuZWcsIGZzbW92ZSwgZmRtb3ZlLCBmdHN0LCBmc3FydCwgZnNzcXJ0LCBhbmQKK3wgZmRzcXJ0IGFyZSBwb3NzaWJsZS4KK3wgRm9yIGNhc2VzIGZhYnMsIGZuZWcsIGZzbW92ZSwgYW5kIGZkbW92ZSBnb3RvIHNwb3MgKGRvIG5vdCBub3JtYWxpemUpCit8IEZvciBjYXNlcyBmc3FydCwgZnNzcXJ0LCBhbmQgZmRzcXJ0IGdvdG8gbnJtX3NyYyAoZG8gbm9ybWFsaXplKQorfAorCWJ0c3RsCSMwLCVkMAorCWJuZQlub3JtYWwJCQl8d2VlZCBvdXQgZnNxcnQgaW5zdHJ1Y3Rpb25zCit8Cit8IGN1X25vcm0gaGFuZGxlcyBmbW92ZSBpbiBpbnN0cnVjdGlvbnMgd2l0aCBub3JtYWxpemVkIGlucHV0cy4KK3wgVGhlIHJvdXRpbmUgcm91bmQgaXMgdXNlZCB0byBjb3JyZWN0bHkgcm91bmQgdGhlIGlucHV0IGZvciB0aGUKK3wgZGVzdGluYXRpb24gcHJlY2lzaW9uIGFuZCBtb2RlLgorfAorY3Vfbm9ybToKKwlzdAlDVV9PTkxZKCVhNikJCXxzZXQgY3Utb25seSBpbnN0IGZsYWcKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWFuZGliCSMweDNiLCVkMAkJfGlzb2xhdGUgYml0cyB0byBzZWxlY3QgaW5zdAorCXRzdGIJJWQwCisJYmVxbAljdV9ubW92ZQl8aWYgemVybywgaXQgaXMgYW4gZm1vdmUKKwljbXBpYgkjMHgxOCwlZDAKKwliZXFsCWN1X25hYnMJCXxpZiAkMTgsIGl0IGlzIGZhYnMKKwljbXBpYgkjMHgxYSwlZDAKKwliZXFsCWN1X25uZWcJCXxpZiAkMWEsIGl0IGlzIGZuZWcKK3wKK3wgSW5zdCBpcyBmdHN0LiAgQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzZXQgdGhlIGNjJ3MgYWNjb3JkaW5nbHkuCit8IE5vIHdyaXRlIGlzIGRvbmUsIHNvIHNpbXBseSBydHMuCit8CitjdV9udHN0OgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQwCisJYmNscmwJIzE1LCVkMAorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJlcXMJY3VfbnRwbworCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCitjdV9udHBvOgorCWNtcGl3CSMweDdmZmYsJWQwCXx0ZXN0IGZvciBpbmYvbmFuCisJYm5lcwljdV9udGN6CisJdHN0bAlMT0NBTF9ISSglYTApCisJYm5lcwljdV9udG4KKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVzCWN1X250bgorCW9ybAkjaW5mX21hc2ssVVNFUl9GUFNSKCVhNikKKwlydHMKK2N1X250bjoKKwlvcmwJI25hbl9tYXNrLFVTRVJfRlBTUiglYTYpCisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQl8c2V0IHVwIGZwdGVtcCBzaWduIGZvcgorfAkJCQkJCTtzbmFuIGhhbmRsZXIKKworCXJ0cworY3VfbnRjejoKKwl0c3RsCUxPQ0FMX0hJKCVhMCkKKwlibmVsCWN1X250c3gKKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVsCWN1X250c3gKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQorY3VfbnRzeDoKKwlydHMKK3wKK3wgSW5zdCBpcyBmYWJzLiAgRXhlY3V0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb24gb24gdGhlIGlucHV0LgorfCBCcmFuY2ggdG8gdGhlIGZtb3ZlIGNvZGUuICBJZiB0aGUgb3BlcmFuZCBpcyBOYU4sIGRvIG5vdGhpbmcuCit8CitjdV9uYWJzOgorCW1vdmViCVNUQUcoJWE2KSwlZDAKKwlidHN0bAkjNSwlZDAJCQl8dGVzdCBmb3IgTmFOIG9yIHplcm8KKwlibmUJd3JfZXRlbXAJCXxpZiBlaXRoZXIsIHNpbXBseSB3cml0ZSBpdAorCWJjbHJiCSM3LExPQ0FMX0VYKCVhMCkJCXxkbyBhYnMKKwlicmFzCWN1X25tb3ZlCQl8Zm1vdmUgY29kZSB3aWxsIGZpbmlzaAorfAorfCBJbnN0IGlzIGZuZWcuICBFeGVjdXRlIHRoZSBuZWdhdGUgdmFsdWUgZnVuY3Rpb24gb24gdGhlIGlucHV0LgorfCBGYWxsIHRob3VnaCB0byB0aGUgZm1vdmUgY29kZS4gIElmIHRoZSBvcGVyYW5kIGlzIE5hTiwgZG8gbm90aGluZy4KK3wKK2N1X25uZWc6CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWJ0c3RsCSM1LCVkMAkJCXx0ZXN0IGZvciBOYU4gb3IgemVybworCWJuZQl3cl9ldGVtcAkJfGlmIGVpdGhlciwgc2ltcGx5IHdyaXRlIGl0CisJYmNoZ2IJIzcsTE9DQUxfRVgoJWEwKQkJfGRvIG5lZworfAorfCBJbnN0IGlzIGZtb3ZlLiAgVGhpcyBjb2RlIGFsc28gaGFuZGxlcyBhbGwgcmVzdWx0IHdyaXRlcy4KK3wgSWYgYml0IDIgaXMgc2V0LCByb3VuZCBpcyBmb3JjZWQgdG8gZG91YmxlLiAgSWYgaXQgaXMgY2xlYXIsCit8IGFuZCBiaXQgNiBpcyBzZXQsIHJvdW5kIGlzIGZvcmNlZCB0byBzaW5nbGUuICBJZiBib3RoIGFyZSBjbGVhciwKK3wgdGhlIHJvdW5kIHByZWNpc2lvbiBpcyBmb3VuZCBpbiB0aGUgZnBjci4gIElmIHRoZSByb3VuZGluZyBwcmVjaXNpb24KK3wgaXMgZG91YmxlIG9yIHNpbmdsZSwgcm91bmQgdGhlIHJlc3VsdCBiZWZvcmUgdGhlIHdyaXRlLgorfAorY3Vfbm1vdmU6CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWFuZGliCSMweGUwLCVkMAkJCXxpc29sYXRlIHN0YWcgYml0cworCWJuZQl3cl9ldGVtcAkJfGlmIG5vdCBub3JtLCBzaW1wbHkgd3JpdGUgaXQKKwlidHN0YgkjMixDTURSRUcxQisxKCVhNikJfGNoZWNrIGZvciByZAorCWJuZQljdV9ubXJkCisJYnRzdGIJIzYsQ01EUkVHMUIrMSglYTYpCXxjaGVjayBmb3IgcnMKKwlibmUJY3Vfbm1ycworfAorfCBUaGUgbW92ZSBvciBvcGVyYXRpb24gaXMgbm90IHdpdGggZm9yY2VkIHByZWNpc2lvbi4gIFRlc3QgZm9yCit8IG5hbiBvciBpbmYgYXMgdGhlIGlucHV0OyBpZiBzbywgc2ltcGx5IHdyaXRlIGl0IHRvIEZQbi4gIFVzZSB0aGUKK3wgRlBDUl9NT0RFIGJ5dGUgdG8gZ2V0IHJvdW5kaW5nIG9uIG5vcm1zIGFuZCB6ZXJvcy4KK3wKK2N1X25tbnI6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAKKwl0c3RiCSVkMAkJCXxjaGVjayBmb3IgZXh0ZW5kZWQKKwliZXEJY3Vfd3JleG4JCXxpZiBzbywganVzdCB3cml0ZSByZXN1bHQKKwljbXBpYgkjMSwlZDAJCQl8Y2hlY2sgZm9yIHNpbmdsZQorCWJlcQljdV9ubXJzCQkJfGZhbGwgdGhyb3VnaCB0byBkb3VibGUKK3wKK3wgVGhlIG1vdmUgaXMgZmRtb3ZlIG9yIHJvdW5kIHByZWNpc2lvbiBpcyBkb3VibGUuCit8CitjdV9ubXJkOgorCW1vdmVsCSMyLCVkMAkJCXxzZXQgdXAgdGhlIHNpemUgZm9yIGRlbm9ybQorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQxCQl8Y29tcGFyZSBleHBvbmVudCB0byBkb3VibGUgdGhyZXNob2xkCisJYW5kdwkjMHg3ZmZmLCVkMQorCWNtcHcJIzB4M2MwMSwlZDEKKwlibHMJY3VfbnVuZmwKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8Z2V0IHJtb2RlCisJb3JsCSMweDAwMDIwMDAwLCVkMQkJfG9yIGluIHJwcmVjIChkb3VibGUpCisJY2xybAklZDAJCQl8Y2xlYXIgZyxyLHMgZm9yIHJvdW5kCisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZm9ybWF0CisJc25lCUxPQ0FMX1NHTiglYTApCisJYnNybAlyb3VuZAorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQorCWJlcXMJY3Vfbm1yZGMKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorY3Vfbm1yZGM6CisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDEJCXxjaGVjayBmb3Igb3ZlcmZsb3cKKwlhbmR3CSMweDdmZmYsJWQxCisJY21wdwkjMHg0M2ZmLCVkMQorCWJnZQljdV9ub3ZmbAkJfHRha2UgY2FyZSBvZiBvdmVyZmxvdyBjYXNlCisJYnJhCWN1X3dyZXhuCit8Cit8IFRoZSBtb3ZlIGlzIGZzbW92ZSBvciByb3VuZCBwcmVjaXNpb24gaXMgc2luZ2xlLgorfAorY3Vfbm1yczoKKwltb3ZlbAkjMSwlZDAKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMQorCWFuZHcJIzB4N2ZmZiwlZDEKKwljbXB3CSMweDNmODEsJWQxCisJYmxzCWN1X251bmZsCisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEKKwlvcmwJIzB4MDAwMTAwMDAsJWQxCisJY2xybAklZDAKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcmwJcm91bmQKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0KKwliZXFzCWN1X25tcnNjCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X25tcnNjOgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQxCisJYW5kdwkjMHg3RkZGLCVkMQorCWNtcHcJIzB4NDA3ZiwlZDEKKwlibHQJY3Vfd3JleG4KK3wKK3wgVGhlIG9wZXJhbmQgaXMgYWJvdmUgcHJlY2lzaW9uIGJvdW5kYXJpZXMuICBVc2UgdF9vdmZsIHRvCit8IGdlbmVyYXRlIHRoZSBjb3JyZWN0IHZhbHVlLgorfAorY3Vfbm92Zmw6CisJYnNyCXRfb3ZmbAorCWJyYQljdV93cmV4bgorfAorfCBUaGUgb3BlcmFuZCBpcyBiZWxvdyBwcmVjaXNpb24gYm91bmRhcmllcy4gIFVzZSBkZW5vcm0gdG8KK3wgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgdmFsdWUuCit8CitjdV9udW5mbDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcglkZW5vcm0KKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJY3VfbnVjb250CisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X251Y29udDoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQorCWJ0c3RiCSMyLENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJkCisJYm5lCWluc3RfZAorCWJ0c3RiCSM2LENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJzCisJYm5lCWluc3RfcworCXN3YXAJJWQxCisJbW92ZWIJRlBDUl9NT0RFKCVhNiksJWQxCisJbHNyYgkjNiwlZDEKKwlzd2FwCSVkMQorCWJyYQlpbnN0X3NkCitpbnN0X2Q6CisJb3JsCSMweDAwMDIwMDAwLCVkMQorCWJyYQlpbnN0X3NkCitpbnN0X3M6CisJb3JsCSMweDAwMDEwMDAwLCVkMQoraW5zdF9zZDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcmwJcm91bmQKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0KKwliZXFzCWN1X251ZmxwCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X251ZmxwOgorCWJ0c3RiCSNpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcXMJY3VfbnVuaW54CisJb3JsCSNhdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiB0aGUgcm91bmQgd2FzIGluZXgsIHNldCBBVU5GTAorY3VfbnVuaW54OgorCXRzdGwJTE9DQUxfSEkoJWEwKQkJfHRlc3QgZm9yIHplcm8KKwlibmVzCWN1X251bnpybworCXRzdGwJTE9DQUxfTE8oJWEwKQorCWJuZXMJY3VfbnVuenJvCit8Cit8IFRoZSBtYW50aXNzYSBpcyB6ZXJvIGZyb20gdGhlIGRlbm9ybSBsb29wLiAgQ2hlY2sgc2lnbiBhbmQgcm1vZGUKK3wgdG8gc2VlIGlmIHJvdW5kaW5nIHNob3VsZCBoYXZlIG9jY3VycmVkIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBsc2IuCit8CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCQl8aXNvbGF0ZSBybW9kZQorCWNtcGlsCSMweDIwLCVkMAorCWJsdHMJY3VfbnpybworCWJuZXMJY3VfbnJwCitjdV9ucm06CisJdHN0dwlMT0NBTF9FWCglYTApCXxpZiBwb3NpdGl2ZSwgc2V0IGxzYgorCWJnZXMJY3VfbnpybworCWJ0c3RiCSM3LEZQQ1JfTU9ERSglYTYpIHxjaGVjayBmb3IgZG91YmxlCisJYmVxcwljdV9uaW5jcworCWJyYXMJY3VfbmluY2QKK2N1X25ycDoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJfGlmIHBvc2l0aXZlLCBzZXQgbHNiCisJYmx0cwljdV9uenJvCisJYnRzdGIJIzcsRlBDUl9NT0RFKCVhNikgfGNoZWNrIGZvciBkb3VibGUKKwliZXFzCWN1X25pbmNzCitjdV9uaW5jZDoKKwlvcmwJIzB4ODAwLExPQ0FMX0xPKCVhMCkgfGluYyBmb3IgZG91YmxlCisJYnJhCWN1X251bnpybworY3VfbmluY3M6CisJb3JsCSMweDEwMCxMT0NBTF9ISSglYTApIHxpbmMgZm9yIHNpbmdsZQorCWJyYQljdV9udW56cm8KK2N1X256cm86CisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwltb3ZlYglTVEFHKCVhNiksJWQwCisJYW5kaWIJIzB4ZTAsJWQwCisJY21waWIJIzB4NDAsJWQwCQl8Y2hlY2sgaWYgaW5wdXQgd2FzIHRhZ2dlZCB6ZXJvCisJYmVxcwljdV9udW12CitjdV9udW56cm86CisJb3JsCSN1bmZsX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCB1bmZsCitjdV9udW12OgorCW1vdmVsCSglYTApLEVURU1QKCVhNikKKwltb3ZlbAk0KCVhMCksRVRFTVBfSEkoJWE2KQorCW1vdmVsCTgoJWEwKSxFVEVNUF9MTyglYTYpCit8Cit8IFdyaXRlIHRoZSByZXN1bHQgdG8gbWVtb3J5LCBzZXR0aW5nIHRoZSBmcHNyIGNjIGJpdHMuICBOYU4gYW5kIEluZgorfCBieXBhc3MgY3Vfd3JleG4uCit8CitjdV93cmV4bjoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJCXx0ZXN0IGZvciB6ZXJvCisJYmVxcwljdV93cnplcm8KKwljbXB3CSMweDgwMDAsTE9DQUxfRVgoJWEwKQl8dGVzdCBmb3IgemVybworCWJuZXMJY3Vfd3Jlb24KK2N1X3dyemVybzoKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IFogYml0CitjdV93cmVvbjoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkKKwlicGwJd3JfZXRlbXAKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCisKK3wKK3wgSEFORExFIFNPVVJDRSBERU5PUk0gSEVSRQorfAorfAkJCQk7Y2xlYXIgZGVub3JtIHN0YWcgdG8gbm9ybQorfAkJCQk7d3JpdGUgdGhlIG5ldyB0YWcgJiBldGUxNSB0byB0aGUgZnN0YWNrCittb25fZG5ybToKK3wKK3wgQXQgdGhpcyBwb2ludCwgY2hlY2sgZm9yIHRoZSBjYXNlcyBpbiB3aGljaCBub3JtYWxpemluZyB0aGUKK3wgZGVub3JtIHByb2R1Y2VzIGluY29ycmVjdCByZXN1bHRzLgorfAorCXRzdGIJRFlfTU9fRkxHKCVhNikJfGFsbCBjYXNlcyBvZiBkeWFkaWMgaW5zdHJ1Y3Rpb25zIHdvdWxkCisJYm5lcwlucm1fc3JjCQl8cmVxdWlyZSBub3JtYWxpemF0aW9uIG9mIGRlbm9ybQorCit8IEF0IHRoaXMgcG9pbnQ6Cit8CW1vbmFkaWMgaW5zdHJ1Y3Rpb25zOglmYWJzICA9ICQxOCAgZm5lZyAgID0gJDFhICBmdHN0ICAgPSAkM2EKK3wJCQkJZm1vdmUgPSAkMDAgIGZzbW92ZSA9ICQ0MCAgZmRtb3ZlID0gJDQ0Cit8CQkJCWZzcXJ0ID0gJDA1KiBmc3NxcnQgPSAkNDEgIGZkc3FydCA9ICQ0NQorfAkJCQkoKmZzcXJ0IHJlZW5jb2RlZCB0byAkMDUpCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCBjb21tYW5kIHJlZ2lzdGVyCisJYW5kaWwJIzB4N2YsJWQwCQkJfHN0cmlwIHRvIG9ubHkgY29tbWFuZCB3b3JkCit8Cit8IEF0IHRoaXMgcG9pbnQsIGZhYnMsIGZuZWcsIGZzbW92ZSwgZmRtb3ZlLCBmdHN0LCBmc3FydCwgZnNzcXJ0LCBhbmQKK3wgZmRzcXJ0IGFyZSBwb3NzaWJsZS4KK3wgRm9yIGNhc2VzIGZhYnMsIGZuZWcsIGZzbW92ZSwgYW5kIGZkbW92ZSBnb3RvIHNwb3MgKGRvIG5vdCBub3JtYWxpemUpCit8IEZvciBjYXNlcyBmc3FydCwgZnNzcXJ0LCBhbmQgZmRzcXJ0IGdvdG8gbnJtX3NyYyAoZG8gbm9ybWFsaXplKQorfAorCWJ0c3RsCSMwLCVkMAorCWJuZXMJbnJtX3NyYwkJfHdlZWQgb3V0IGZzcXJ0IGluc3RydWN0aW9ucworCXN0CUNVX09OTFkoJWE2KQl8c2V0IGN1LW9ubHkgaW5zdCBmbGFnCisJYnJhCWN1X2Rucm0JCXxmbW92ZSwgZmFicywgZm5lZywgZnRzdAorfAkJCQk7Y2FzZXMgZ28gdG8gY3VfZG5ybQorbnJtX3NyYzoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcglucm1fc2V0CQl8bm9ybWFsaXplIG51bWJlciAoZXhwb25lbnQgd2lsbCBnbworfAkJCQk7IG5lZ2F0aXZlKQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApIHxnZXQgcmlkIG9mIGZhbHNlIHNpZ24KKworCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y2hhbmdlIGJhY2sgdG8gSUVFRSBleHQgZm9ybWF0CisJYmVxcwlzcG9zCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK3Nwb3M6CisJYmZjbHIJU1RBRyglYTYpeyMwOiM0fQl8c2V0IHRhZyB0byBub3JtYWxpemVkLCBGUFRFMTUgPSAwCisJYnNldGIJIzQsU1RBRyglYTYpCXxzZXQgRVRFMTUKKwlvcmIJIzB4ZjAsRE5STV9GTEcoJWE2KQorbm9ybWFsOgorCXRzdGIJRE5STV9GTEcoJWE2KQl8Y2hlY2sgaWYgYW55IG9mIHRoZSBvcHMgd2VyZSBkZW5vcm1zCisJYm5lCWNrX3dyYXAJCXxpZiBzbywgY2hlY2sgaWYgaXQgaXMgYSBwb3RlbnRpYWwKK3wJCQkJO3dyYXAtYXJvdW5kIGNhc2UKK2ZpeF9zdGs6CisJbW92ZWIJIzB4ZmUsQ1VfU0FWRVBDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKworCWNscncJTk1ORVhDKCVhNikKKworCXN0CVJFU19GTEcoJWE2KQl8aW5kaWNhdGUgdGhhdCBhIHJlc3RvcmUgaXMgbmVlZGVkCisJcnRzCisKK3wKK3wgY3VfZG5ybSBoYW5kbGVzIGFsbCBjdS1vbmx5IGluc3RydWN0aW9ucyAoZm1vdmUsIGZhYnMsIGZuZWcsIGFuZAorfCBmdHN0KSBjb21wbGV0ZWx5IGluIHNvZnR3YXJlIHdpdGhvdXQgYW4gZnJlc3RvcmUgdG8gdGhlIDA0MC4KK3wKK2N1X2Rucm06CisJc3QJQ1VfT05MWSglYTYpCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlhbmRpYgkjMHgzYiwlZDAJCXxpc29sYXRlIGJpdHMgdG8gc2VsZWN0IGluc3QKKwl0c3RiCSVkMAorCWJlcWwJY3VfZG1vdmUJfGlmIHplcm8sIGl0IGlzIGFuIGZtb3ZlCisJY21waWIJIzB4MTgsJWQwCisJYmVxbAljdV9kYWJzCQl8aWYgJDE4LCBpdCBpcyBmYWJzCisJY21waWIJIzB4MWEsJWQwCisJYmVxbAljdV9kbmVnCQl8aWYgJDFhLCBpdCBpcyBmbmVnCit8Cit8IEluc3QgaXMgZnRzdC4gIENoZWNrIHRoZSBzb3VyY2Ugb3BlcmFuZCBhbmQgc2V0IHRoZSBjYydzIGFjY29yZGluZ2x5LgorfCBObyB3cml0ZSBpcyBkb25lLCBzbyBzaW1wbHkgcnRzLgorfAorY3VfZHRzdDoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAorCWJjbHJsCSMxNSwlZDAKKwlzbmUJTE9DQUxfU0dOKCVhMCkKKwliZXFzCWN1X2R0cG8KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorY3VfZHRwbzoKKwljbXBpdwkjMHg3ZmZmLCVkMAl8dGVzdCBmb3IgaW5mL25hbgorCWJuZXMJY3VfZHRjegorCXRzdGwJTE9DQUxfSEkoJWEwKQorCWJuZXMJY3VfZHRuCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lcwljdV9kdG4KKwlvcmwJI2luZl9tYXNrLFVTRVJfRlBTUiglYTYpCisJcnRzCitjdV9kdG46CisJb3JsCSNuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KQorCW1vdmVsCUVURU1QX0VYKCVhNiksRlBURU1QX0VYKCVhNikJfHNldCB1cCBmcHRlbXAgc2lnbiBmb3IKK3wJCQkJCQk7c25hbiBoYW5kbGVyCisJcnRzCitjdV9kdGN6OgorCXRzdGwJTE9DQUxfSEkoJWEwKQorCWJuZWwJY3VfZHRzeAorCXRzdGwJTE9DQUxfTE8oJWEwKQorCWJuZWwJY3VfZHRzeAorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCitjdV9kdHN4OgorCXJ0cworfAorfCBJbnN0IGlzIGZhYnMuICBFeGVjdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbiBvbiB0aGUgaW5wdXQuCit8IEJyYW5jaCB0byB0aGUgZm1vdmUgY29kZS4KK3wKK2N1X2RhYnM6CisJYmNscmIJIzcsTE9DQUxfRVgoJWEwKQkJfGRvIGFicworCWJyYXMJY3VfZG1vdmUJCXxmbW92ZSBjb2RlIHdpbGwgZmluaXNoCit8Cit8IEluc3QgaXMgZm5lZy4gIEV4ZWN1dGUgdGhlIG5lZ2F0ZSB2YWx1ZSBmdW5jdGlvbiBvbiB0aGUgaW5wdXQuCit8IEZhbGwgdGhvdWdoIHRvIHRoZSBmbW92ZSBjb2RlLgorfAorY3VfZG5lZzoKKwliY2hnYgkjNyxMT0NBTF9FWCglYTApCQl8ZG8gbmVnCit8Cit8IEluc3QgaXMgZm1vdmUuICBUaGlzIGNvZGUgYWxzbyBoYW5kbGVzIGFsbCByZXN1bHQgd3JpdGVzLgorfCBJZiBiaXQgMiBpcyBzZXQsIHJvdW5kIGlzIGZvcmNlZCB0byBkb3VibGUuICBJZiBpdCBpcyBjbGVhciwKK3wgYW5kIGJpdCA2IGlzIHNldCwgcm91bmQgaXMgZm9yY2VkIHRvIHNpbmdsZS4gIElmIGJvdGggYXJlIGNsZWFyLAorfCB0aGUgcm91bmQgcHJlY2lzaW9uIGlzIGZvdW5kIGluIHRoZSBmcGNyLiAgSWYgdGhlIHJvdW5kaW5nIHByZWNpc2lvbgorfCBpcyBkb3VibGUgb3Igc2luZ2xlLCB0aGUgcmVzdWx0IGlzIHplcm8sIGFuZCB0aGUgbW9kZSBpcyBjaGVja2VkCit8IHRvIGRldGVybWluZSBpZiB0aGUgbHNiIG9mIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNldC4KK3wKK2N1X2Rtb3ZlOgorCWJ0c3RiCSMyLENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJkCisJYm5lCWN1X2RtcmQKKwlidHN0YgkjNixDTURSRUcxQisxKCVhNikJfGNoZWNrIGZvciBycworCWJuZQljdV9kbXJzCit8Cit8IFRoZSBtb3ZlIG9yIG9wZXJhdGlvbiBpcyBub3Qgd2l0aCBmb3JjZWQgcHJlY2lzaW9uLiAgVXNlIHRoZQorfCBGUENSX01PREUgYnl0ZSB0byBnZXQgcm91bmRpbmcuCit8CitjdV9kbW5yOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwCisJdHN0YgklZDAJCQl8Y2hlY2sgZm9yIGV4dGVuZGVkCisJYmVxCWN1X3dyZXhkCQl8aWYgc28sIGp1c3Qgd3JpdGUgcmVzdWx0CisJY21waWIJIzEsJWQwCQkJfGNoZWNrIGZvciBzaW5nbGUKKwliZXEJY3VfZG1ycwkJCXxmYWxsIHRocm91Z2ggdG8gZG91YmxlCit8Cit8IFRoZSBtb3ZlIGlzIGZkbW92ZSBvciByb3VuZCBwcmVjaXNpb24gaXMgZG91YmxlLiAgUmVzdWx0IGlzIHplcm8uCit8IENoZWNrIHJtb2RlIGZvciBycCBvciBybSBhbmQgc2V0IGxzYiBhY2NvcmRpbmdseS4KK3wKK2N1X2RtcmQ6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEJfGdldCBybW9kZQorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwlibHRzCWN1X2RtZG4KKwljbXBpYgkjMywlZDEJCQl8Y2hlY2sgZm9yIHJwCisJYm5lCWN1X2RwZAkJCXxsb2FkIGRvdWJsZSBwb3MgemVybworCWJyYQljdV9kcGRyCQkJfGxvYWQgZG91YmxlIHBvcyB6ZXJvIHcvbHNiCitjdV9kbWRuOgorCWNtcGliCSMyLCVkMQkJCXxjaGVjayBmb3Igcm0KKwlibmUJY3VfZG5kCQkJfGxvYWQgZG91YmxlIG5lZyB6ZXJvCisJYnJhCWN1X2RuZHIJCQl8bG9hZCBkb3VibGUgbmVnIHplcm8gdy9sc2IKK3wKK3wgVGhlIG1vdmUgaXMgZnNtb3ZlIG9yIHJvdW5kIHByZWNpc2lvbiBpcyBzaW5nbGUuICBSZXN1bHQgaXMgemVyby4KK3wgQ2hlY2sgZm9yIHJwIG9yIHJtIGFuZCBzZXQgbHNiIGFjY29yZGluZ2x5LgorfAorY3VfZG1yczoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8Z2V0IHJtb2RlCisJdHN0dwlMT0NBTF9FWCglYTApCQl8Y2hlY2sgc2lnbgorCWJsdHMJY3VfZG1zbgorCWNtcGliCSMzLCVkMQkJCXxjaGVjayBmb3IgcnAKKwlibmUJY3Vfc3BkCQkJfGxvYWQgc2luZ2xlIHBvcyB6ZXJvCisJYnJhCWN1X3NwZHIJCQl8bG9hZCBzaW5nbGUgcG9zIHplcm8gdy9sc2IKK2N1X2Rtc246CisJY21waWIJIzIsJWQxCQkJfGNoZWNrIGZvciBybQorCWJuZQljdV9zbmQJCQl8bG9hZCBzaW5nbGUgbmVnIHplcm8KKwlicmEJY3Vfc25kcgkJCXxsb2FkIHNpbmdsZSBuZWcgemVybyB3L2xzYgorfAorfCBUaGUgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLCBzbyB0aGUgcmVzdWx0IGluIGV0ZW1wIGlzIGNvcnJlY3QuCit8IFNpbXBseSBzZXQgdW5mbCAobm90IGluZXgyIG9yIGF1bmZsKSBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0bworfCB0aGUgY29ycmVjdCBmcCByZWdpc3Rlci4KK2N1X3dyZXhkOgorCW9ybAkjdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpCisJdHN0dwlMT0NBTF9FWCglYTApCisJYmVxCXdyX2V0ZW1wCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorfAorfCBUaGVzZSByb3V0aW5lcyB3cml0ZSArLy0gemVybyBpbiBkb3VibGUgZm9ybWF0LiAgVGhlIHJvdXRpbmVzCit8IGN1X2RwZHIgYW5kIGN1X2RuZHIgc2V0IHRoZSBkb3VibGUgbHNiLgorfAorY3VfZHBkOgorCW1vdmVsCSMweDNjMDEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBkb3VibGUgemVybworCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3VfZHBkcjoKKwltb3ZlbAkjMHgzYzAxMDAwMCxMT0NBTF9FWCglYTApCXxmb3JjZSBwb3MgZG91YmxlIHplcm8KKwljbHJsCUxPQ0FMX0hJKCVhMCkKKwltb3ZlbAkjMHg4MDAsTE9DQUxfTE8oJWEwKQl8d2l0aCBsc2Igc2V0CisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3VfZG5kOgorCW1vdmVsCSMweGJjMDEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBkb3VibGUgemVybworCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJd3JfZXRlbXAKK2N1X2RuZHI6CisJbW92ZWwJIzB4YmMwMTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIGRvdWJsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJbW92ZWwJIzB4ODAwLExPQ0FMX0xPKCVhMCkJfHdpdGggbHNiIHNldAorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCit8Cit8IFRoZXNlIHJvdXRpbmVzIHdyaXRlICsvLSB6ZXJvIGluIHNpbmdsZSBmb3JtYXQuICBUaGUgcm91dGluZXMKK3wgY3VfZHBkciBhbmQgY3VfZG5kciBzZXQgdGhlIHNpbmdsZSBsc2IuCit8CitjdV9zcGQ6CisJbW92ZWwJIzB4M2Y4MTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIHNpbmdsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCitjdV9zcGRyOgorCW1vdmVsCSMweDNmODEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBzaW5nbGUgemVybworCW1vdmVsCSMweDEwMCxMT0NBTF9ISSglYTApCXx3aXRoIGxzYiBzZXQKKwljbHJsCUxPQ0FMX0xPKCVhMCkKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCitjdV9zbmQ6CisJbW92ZWwJIzB4YmY4MTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIHNpbmdsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3Vfc25kcjoKKwltb3ZlbAkjMHhiZjgxMDAwMCxMT0NBTF9FWCglYTApCXxmb3JjZSBwb3Mgc2luZ2xlIHplcm8KKwltb3ZlbAkjMHgxMDAsTE9DQUxfSEkoJWEwKQl8d2l0aCBsc2Igc2V0CisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJd3JfZXRlbXAKKworfAorfCBUaGlzIGNvZGUgY2hlY2tzIGZvciAxNi1iaXQgb3ZlcmZsb3cgY29uZGl0aW9ucyBvbiBkeWFkaWMKK3wgb3BlcmF0aW9ucyB3aGljaCBhcmUgbm90IHJlc3RvcmFibGUgaW50byB0aGUgZmxvYXRpbmctcG9pbnQKK3wgdW5pdCBhbmQgbXVzdCBiZSBjb21wbGV0ZWQgaW4gc29mdHdhcmUuICBCYXNpY2FsbHksIHRoaXMKK3wgY29uZGl0aW9uIGV4aXN0cyB3aXRoIGEgdmVyeSBsYXJnZSBub3JtIGFuZCBhIGRlbm9ybS4gIE9uZQorfCBvZiB0aGUgb3BlcmFuZHMgbXVzdCBiZSBkZW5vcm1hbGl6ZWQgdG8gZW50ZXIgdGhpcyBjb2RlLgorfAorfCBGbGFncyB1c2VkOgorfAlEWV9NT19GTEcgY29udGFpbnMgMCBmb3IgbW9uYWRpYyBvcCwgJGZmIGZvciBkeWFkaWMKK3wJRE5STV9GTEcgY29udGFpbnMgJDAwIGZvciBuZWl0aGVyIG9wIGRlbm9ybWFsaXplZAorfAkgICAgICAgICAgICAgICAgICAkMGYgZm9yIHRoZSBkZXN0aW5hdGlvbiBvcCBkZW5vcm1hbGl6ZWQKK3wJICAgICAgICAgICAgICAgICAgJGYwIGZvciB0aGUgc291cmNlIG9wIGRlbm9ybWFsaXplZAorfAkgICAgICAgICAgICAgICAgICAkZmYgZm9yIGJvdGggb3BzIGRlbm9ybWFsaXplZAorfAorfCBUaGUgd3JhcC1hcm91bmQgY29uZGl0aW9uIG9jY3VycyBmb3IgYWRkLCBzdWIsIGRpdiwgYW5kIGNtcAorfCB3aGVuCit8Cit8CWFicyhkZXN0X2V4cCAtIHNyY19leHApID49ICQ4MDAwCit8Cit8IGFuZCBmb3IgbXVsIHdoZW4KK3wKK3wJKGRlc3RfZXhwICsgc3JjX2V4cCkgPCAkMAorfAorfCB3ZSBtdXN0IHByb2Nlc3MgdGhlIG9wZXJhdGlvbiBoZXJlIGlmIHRoaXMgY2FzZSBpcyB0cnVlLgorfAorfCBUaGUgcnRzIGZvbGxvd2luZyB0aGUgZnJjZnBuIHJvdXRpbmUgaXMgdGhlIGV4aXQgZnJvbSByZXNfZnVuYworfCBmb3IgdGhpcyBjb25kaXRpb24uICBUaGUgcmVzdG9yZSBmbGFnIChSRVNfRkxHKSBpcyBsZWZ0IGNsZWFyLgorfCBObyBmcmVzdG9yZSBpcyBkb25lIHVubGVzcyBhbiBleGNlcHRpb24gaXMgdG8gYmUgcmVwb3J0ZWQuCit8Cit8IEZvciBmYWRkOgorfAlpZihzaWduX29mKGRlc3QpICE9IHNpZ25fb2Yoc3JjKSkKK3wJCXJlcGxhY2UgZXhwb25lbnQgb2Ygc3JjIHdpdGggJDNmZmYgKGtlZXAgc2lnbikKK3wJCXVzZSBmcHUgdG8gcGVyZm9ybSBkZXN0K25ld19zcmMgKHVzZXIncyBybW9kZSBhbmQgWCkKK3wJCWNsciBzdGlja3kKK3wJZWxzZQorfAkJc2V0IHN0aWNreQorfAljYWxsIHJvdW5kIHdpdGggdXNlcidzIHByZWNpc2lvbiBhbmQgbW9kZQorfAltb3ZlIHJlc3VsdCB0byBmcG4gYW5kIHdidGVtcAorfAorfCBGb3IgZnN1YjoKK3wJaWYoc2lnbl9vZihkZXN0KSA9PSBzaWduX29mKHNyYykpCit8CQlyZXBsYWNlIGV4cG9uZW50IG9mIHNyYyB3aXRoICQzZmZmIChrZWVwIHNpZ24pCit8CQl1c2UgZnB1IHRvIHBlcmZvcm0gZGVzdCtuZXdfc3JjICh1c2VyJ3Mgcm1vZGUgYW5kIFgpCit8CQljbHIgc3RpY2t5Cit8CWVsc2UKK3wJCXNldCBzdGlja3kKK3wJY2FsbCByb3VuZCB3aXRoIHVzZXIncyBwcmVjaXNpb24gYW5kIG1vZGUKK3wJbW92ZSByZXN1bHQgdG8gZnBuIGFuZCB3YnRlbXAKK3wKK3wgRm9yIGZkaXYvZnNnbGRpdjoKK3wJaWYoYm90aCBvcGVyYW5kcyBhcmUgZGVub3JtKQorfAkJcmVzdG9yZV90b19mcHU7Cit8CWlmKGRlc3QgaXMgbm9ybSkKK3wJCWZvcmNlX292ZjsKK3wJZWxzZShkZXN0IGlzIGRlbm9ybSkKK3wJCWZvcmNlX3VuZjoKK3wKK3wgRm9yIGZjbXA6Cit8CWlmKGRlc3QgaXMgbm9ybSkKK3wJCU4gPSBzaWduX29mKGRlc3QpOworfAllbHNlKGRlc3QgaXMgZGVub3JtKQorfAkJTiA9IHNpZ25fb2Yoc3JjKTsKK3wKK3wgRm9yIGZtdWw6Cit8CWlmKGJvdGggb3BlcmFuZHMgYXJlIGRlbm9ybSkKK3wJCWZvcmNlX3VuZjsKK3wJaWYoKGRlc3RfZXhwICsgc3JjX2V4cCkgPCAwKQorfAkJZm9yY2VfdW5mOgorfAllbHNlCit8CQlyZXN0b3JlX3RvX2ZwdTsKK3wKK3wgbG9jYWwgZXF1YXRlczoKKwkuc2V0CWFkZGNvZGUsMHgyMgorCS5zZXQJc3ViY29kZSwweDI4CisJLnNldAltdWxjb2RlLDB4MjMKKwkuc2V0CWRpdmNvZGUsMHgyMAorCS5zZXQJY21wY29kZSwweDM4Citja193cmFwOgorCXwgdHN0YglEWV9NT19GTEcoJWE2KQk7Y2hlY2sgZm9yIGZzcXJ0CisJYmVxCWZpeF9zdGsJCXxpZiB6ZXJvLCBpdCBpcyBmc3FydAorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYW5kaXcJIzB4M2IsJWQwCQl8c3RyaXAgdG8gY29tbWFuZCBiaXRzCisJY21waXcJI2FkZGNvZGUsJWQwCisJYmVxCXdyYXBfYWRkCisJY21waXcJI3N1YmNvZGUsJWQwCisJYmVxCXdyYXBfc3ViCisJY21waXcJI211bGNvZGUsJWQwCisJYmVxCXdyYXBfbXVsCisJY21waXcJI2NtcGNvZGUsJWQwCisJYmVxCXdyYXBfY21wCit8Cit8IEluc3QgaXMgZmRpdi4KK3wKK3dyYXBfZGl2OgorCWNtcGIJIzB4ZmYsRE5STV9GTEcoJWE2KSB8aWYgYm90aCBvcHMgZGVub3JtLAorCWJlcQlmaXhfc3RrCQkgfHJlc3RvcmUgdG8gZnB1Cit8Cit8IE9uZSBvZiB0aGUgb3BzIGlzIGRlbm9ybWFsaXplZC4gIFRlc3QgZm9yIHdyYXAgY29uZGl0aW9uCit8IGFuZCBmb3JjZSB0aGUgcmVzdWx0LgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwlkaXZfc3JjZAorZGl2X2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3QgZGVzdCBmcm9tIHNyYworCWNtcGwJIzB4N2ZmZiwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJY2xyYglXQlRFTVBfU0dOKCVhNikKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAkJfGZpbmQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYmVxCWZvcmNlX3VuZgorCXN0CVdCVEVNUF9TR04oJWE2KQorCWJyYQlmb3JjZV91bmYKKworY2tpbmZfbnM6CisJbW92ZWIJU1RBRyglYTYpLCVkMAkJfGNoZWNrIHNvdXJjZSB0YWcgZm9yIGluZiBvciBuYW4KKwlicmEJY2tfaW5fY29tCitja2luZl9uZDoKKwltb3ZlYglEVEFHKCVhNiksJWQwCQl8Y2hlY2sgZGVzdGluYXRpb24gdGFnIGZvciBpbmYgb3IgbmFuCitja19pbl9jb206CisJYW5kaWIJIzB4NjAsJWQwCQkJfGlzb2xhdGUgdGFnIGJpdHMKKwljbXBiCSMweDQwLCVkMAkJCXxpcyBpdCBpbmY/CisJYmVxCW5hbl9vcl9pbmYJCXxub3Qgd3JhcCBjYXNlCisJY21wYgkjMHg2MCwlZDAJCQl8aXMgaXQgbmFuPworCWJlcQluYW5fb3JfaW5mCQl8eWVzLCBub3Qgd3JhcCBjYXNlPworCWNtcGIJIzB4MjAsJWQwCQkJfGlzIGl0IGEgemVybz8KKwliZXEJbmFuX29yX2luZgkJfHllcworCWNscmwJJWQwCisJcnRzCQkJCXx0aGVuIDsgaXQgaXMgZWl0aGVyIGEgemVybyBvZiBub3JtLAorfAkJCQkJO2NoZWNrIHdyYXAgY2FzZQorbmFuX29yX2luZjoKKwltb3ZlcWwJIy0xLCVkMAorCXJ0cworCisKKworZGl2X3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKKwljbHJiCVdCVEVNUF9TR04oJWE2KQorCW1vdmV3CUVURU1QX0VYKCVhNiksJWQwCQl8ZmluZCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0CisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQxCisJZW9ydwklZDEsJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwliZXFzCWZvcmNlX292ZgorCXN0CVdCVEVNUF9TR04oJWE2KQorfAorfCBUaGlzIGNvZGUgaGFuZGxlcyB0aGUgY2FzZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gcmVzdWx0aW5nIGluCit8IGFuIG92ZXJmbG93IGNvbmRpdGlvbi4KK3wKK2ZvcmNlX292ZjoKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwlvcmwJI292ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwljbHJ3CU5NTkVYQyglYTYpCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJCXxwb2ludCBhMCB0byBtZW1vcnkgbG9jYXRpb24KKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM2LCVkMAkJCXx0ZXN0IGZvciBmb3JjZWQgcHJlY2lzaW9uCisJYmVxcwlmcmNvdmZfZnBjcgorCWJ0c3RsCSMyLCVkMAkJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlmcmNvdmZfZGJsCisJbW92ZWwJIzB4MSwlZDAJCQl8aW5zdCBpcyBmb3JjZWQgc2luZ2xlCisJYnJhcwlmcmNvdmZfcm5kCitmcmNvdmZfZGJsOgorCW1vdmVsCSMweDIsJWQwCQkJfGluc3QgaXMgZm9yY2VkIGRvdWJsZQorCWJyYXMJZnJjb3ZmX3JuZAorZnJjb3ZmX2ZwY3I6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGluc3Qgbm90IGZvcmNlZCAtIHVzZSBmcGNyIHByZWMKK2ZyY292Zl9ybmQ6CisKK3wgVGhlIDg4MS84ODIgZG9lcyBub3Qgc2V0IGluZXgyIGZvciB0aGUgZm9sbG93aW5nIGNhc2UsIHNvIHRoZQorfCBsaW5lIGlzIGNvbW1lbnRlZCBvdXQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIDg4MS84ODIKK3wJdHN0LmIJJWQwCit8CWJlcS5iCWZyY292Zl94Cit8CW9yLmwJI2luZXgyX21hc2ssVVNFUl9GUFNSKCVhNikgO2lmIHByZWMgaXMgcyBvciBkLCBzZXQgaW5leDIKKworfGZyY292Zl94OgorCWJzcmwJb3ZmX3JlcwkJCXxnZXQgY29ycmVjdCByZXN1bHQgYmFzZWQgb24KK3wJCQkJCTtyb3VuZCBwcmVjaXNpb24vbW9kZS4gIFRoaXMKK3wJCQkJCTtzZXRzIEZQU1JfQ0MgY29ycmVjdGx5Cit8CQkJCQk7cmV0dXJucyBpbiBleHRlcm5hbCBmb3JtYXQKKwliZmNscglXQlRFTVBfU0dOKCVhNil7IzA6Izh9CisJYmVxCWZyY2ZwbgorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCWJyYQlmcmNmcG4KK3wKK3wgSW5zdCBpcyBmYWRkLgorfAord3JhcF9hZGQ6CisJY21wYgkjMHhmZixETlJNX0ZMRyglYTYpIHxpZiBib3RoIG9wcyBkZW5vcm0sCisJYmVxCWZpeF9zdGsJCSB8cmVzdG9yZSB0byBmcHUKK3wKK3wgT25lIG9mIHRoZSBvcHMgaXMgZGVub3JtYWxpemVkLiAgVGVzdCBmb3Igd3JhcCBjb25kaXRpb24KK3wgYW5kIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGNoZWNrIGZvciBkZXN0IGRlbm9ybQorCWJuZXMJYWRkX3NyY2QKK2FkZF9kZXN0ZDoKKwlic3JsCWNraW5mX25zCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IHNyYyBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBuZWcpCisJc3VibAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwljbXBsCSMweDgwMDAsJWQwCisJYmx0CWZpeF9zdGsJCQl8aWYgbGVzcywgbm90IHdyYXAgY2FzZQorCWJyYQlhZGRfd3JhcAorYWRkX3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKK3wKK3wgQ2hlY2sgdGhlIHNpZ25zIG9mIHRoZSBvcGVyYW5kcy4gIElmIHRoZXkgYXJlIHVubGlrZSwgdGhlIGZwdQorfCBjYW4gYmUgdXNlZCB0byBhZGQgdGhlIG5vcm0gYW5kIDEuMCB3aXRoIHRoZSBzaWduIG9mIHRoZQorfCBkZW5vcm0gYW5kIGl0IHdpbGwgY29ycmVjdGx5IGdlbmVyYXRlIHRoZSByZXN1bHQgaW4gZXh0ZW5kZWQKK3wgcHJlY2lzaW9uLiAgV2UgY2FuIHRoZW4gY2FsbCByb3VuZCB3aXRoIG5vIHN0aWNreSBhbmQgdGhlIHJlc3VsdAorfCB3aWxsIGJlIGNvcnJlY3QgZm9yIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSBhbmQgcHJlY2lzaW9uLiAgSWYKK3wgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZSwgd2UgY2FsbCByb3VuZCB3aXRoIHRoZSBzdGlja3kgYml0IHNldAorfCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIGNvcnJlY3QgZm9yIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSBhbmQKK3wgcHJlY2lzaW9uLgorfAorYWRkX3dyYXA6CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDEKKwllb3J3CSVkMSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCWJlcQlhZGRfc2FtZQorfAorfCBUaGUgc2lnbnMgYXJlIHVubGlrZS4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGlzIGRlc3QgdGhlIGRlbm9ybT8KKwlibmVzCWFkZF91X3NyY2QKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCW9ydwkjMHgzZmZmLCVkMAl8Zm9yY2UgdGhlIGV4cG9uZW50IHRvICsvLSAxCisJbW92ZXcJJWQwLEZQVEVNUF9FWCglYTYpIHxpbiB0aGUgZGVub3JtCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJZm1vdmVsCSVkMCwlZnBjcgkJfHNldCB1cCB1c2VycyBybW9kZSBhbmQgWAorCWZtb3ZleAlFVEVNUCglYTYpLCVmcDAKKwlmYWRkeAlGUFRFTVAoJWE2KSwlZnAwCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHdidGVtcCBpbiBmcmFtZQorCWZtb3ZlbAklZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpIHxjYXB0dXJlIGNjJ3MgYW5kIGluZXggZnJvbSBmYWRkCisJZm1vdmV4CSVmcDAsV0JURU1QKCVhNikJfHdyaXRlIHJlc3VsdCB0byBtZW1vcnkKKwlsc3JsCSM0LCVkMAkJfHB1dCBybW9kZSBpbiBsb3dlciAyIGJpdHMKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRpbAkjMHhjMCwlZDEKKwlsc3JsCSM2LCVkMQkJfHB1dCBwcmVjaXNpb24gaW4gdXBwZXIgd29yZAorCXN3YXAJJWQxCisJb3JsCSVkMCwlZDEJCXxzZXQgdXAgZm9yIHJvdW5kIGNhbGwKKwljbHJsCSVkMAkJfGZvcmNlIHN0aWNreSB0byB6ZXJvCisJYmNscmIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJc25lCVdCVEVNUF9TR04oJWE2KQorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK2FkZF91X3NyY2Q6CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCW9ydwkjMHgzZmZmLCVkMAl8Zm9yY2UgdGhlIGV4cG9uZW50IHRvICsvLSAxCisJbW92ZXcJJWQwLEVURU1QX0VYKCVhNikgfGluIHRoZSBkZW5vcm0KKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDAKKwlhbmRpbAkjMHgzMCwlZDAKKwlmbW92ZWwJJWQwLCVmcGNyCQl8c2V0IHVwIHVzZXJzIHJtb2RlIGFuZCBYCisJZm1vdmV4CUVURU1QKCVhNiksJWZwMAorCWZhZGR4CUZQVEVNUCglYTYpLCVmcDAKKwlmbW92ZWwJJWZwc3IsJWQxCisJb3JsCSVkMSxVU0VSX0ZQU1IoJWE2KSB8Y2FwdHVyZSBjYydzIGFuZCBpbmV4IGZyb20gZmFkZAorCWxlYWwJV0JURU1QKCVhNiksJWEwCXxwb2ludCBhMCB0byB3YnRlbXAgaW4gZnJhbWUKKwlmbW92ZXgJJWZwMCxXQlRFTVAoJWE2KQl8d3JpdGUgcmVzdWx0IHRvIG1lbW9yeQorCWxzcmwJIzQsJWQwCQl8cHV0IHJtb2RlIGluIGxvd2VyIDIgYml0cworCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQorCWFuZGlsCSMweGMwLCVkMQorCWxzcmwJIzYsJWQxCQl8cHV0IHByZWNpc2lvbiBpbiB1cHBlciB3b3JkCisJc3dhcAklZDEKKwlvcmwJJWQwLCVkMQkJfHNldCB1cCBmb3Igcm91bmQgY2FsbAorCWNscmwJJWQwCQl8Zm9yY2Ugc3RpY2t5IHRvIHplcm8KKwliY2xyYgkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKKwlzbmUJV0JURU1QX1NHTiglYTYpCXx1c2UgaW50ZXJuYWwgZm9ybWF0IGZvciByb3VuZAorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK3wKK3wgU2lnbnMgYXJlIGFsaWtlOgorfAorYWRkX3NhbWU6CisJY21wYgkjMHgwZixETlJNX0ZMRyglYTYpIHxpcyBkZXN0IHRoZSBkZW5vcm0/CisJYm5lcwlhZGRfc19zcmNkCithZGRfc19kZXN0ZDoKKwlsZWFsCUVURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCisJc25lCUVURU1QX1NHTiglYTYpCisJYnNybAlyb3VuZAkJfHJvdW5kIHJlc3VsdCB0byB1c2VycyBybW9kZSAmIHByZWMKKwliZmNscglFVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWFkZF9zX2RjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorYWRkX3NfZGNscjoKKwlsZWFsCVdCVEVNUCglYTYpLCVhMAorCW1vdmVsCUVURU1QKCVhNiksKCVhMCkJfHdyaXRlIHJlc3VsdCB0byB3YnRlbXAKKwltb3ZlbAlFVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUVURU1QX0xPKCVhNiksOCglYTApCisJdHN0dwlFVEVNUF9FWCglYTYpCisJYmd0CWFkZF9ja292ZgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJYWRkX2Nrb3ZmCithZGRfc19zcmNkOgorCWxlYWwJRlBURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxGUFRFTVBfRVgoJWE2KQorCXNuZQlGUFRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUZQVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWFkZF9zX3NjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikKK2FkZF9zX3NjbHI6CisJbGVhbAlXQlRFTVAoJWE2KSwlYTAKKwltb3ZlbAlGUFRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUZQVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUZQVEVNUF9MTyglYTYpLDgoJWEwKQorCXRzdHcJRlBURU1QX0VYKCVhNikKKwliZ3QJYWRkX2Nrb3ZmCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorYWRkX2Nrb3ZmOgorCW1vdmV3CVdCVEVNUF9FWCglYTYpLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCisJY21waXcJIzB4N2ZmZiwlZDAKKwlibmUJZnJjZnBucgorfAorfCBUaGUgcmVzdWx0IGhhcyBvdmVyZmxvd2VkIHRvICQ3ZmZmIGV4cG9uZW50LiAgU2V0IEksIG92ZmwsCit8IGFuZCBhb3ZmbCwgYW5kIGNsciB0aGUgbWFudGlzc2EgKGluY29ycmVjdGx5IHNldCBieSB0aGUKK3wgcm91bmQgcm91dGluZS4pCit8CisJb3JsCSNpbmZfbWFzaytvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJY2xybAk0KCVhMCkKKwlicmEJZnJjZnBucgorfAorfCBJbnN0IGlzIGZzdWIuCit8Cit3cmFwX3N1YjoKKwljbXBiCSMweGZmLEROUk1fRkxHKCVhNikgfGlmIGJvdGggb3BzIGRlbm9ybSwKKwliZXEJZml4X3N0awkJIHxyZXN0b3JlIHRvIGZwdQorfAorfCBPbmUgb2YgdGhlIG9wcyBpcyBkZW5vcm1hbGl6ZWQuICBUZXN0IGZvciB3cmFwIGNvbmRpdGlvbgorfCBhbmQgY29tcGxldGUgdGhlIGluc3RydWN0aW9uLgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwlzdWJfc3JjZAorc3ViX2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3Qgc3JjIGZyb20gZGVzdAorCWNtcGwJIzB4ODAwMCwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJYnJhCXN1Yl93cmFwCitzdWJfc3JjZDoKKwlic3JsCWNraW5mX25kCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDAJfGdldCBkZXN0IGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMQl8Z2V0IHNyYyBleHAgKGFsd2F5cyBuZWcpCisJc3VibAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwljbXBsCSMweDgwMDAsJWQwCisJYmx0CWZpeF9zdGsJCQl8aWYgbGVzcywgbm90IHdyYXAgY2FzZQorfAorfCBDaGVjayB0aGUgc2lnbnMgb2YgdGhlIG9wZXJhbmRzLiAgSWYgdGhleSBhcmUgYWxpa2UsIHRoZSBmcHUKK3wgY2FuIGJlIHVzZWQgdG8gc3VidHJhY3QgZnJvbSB0aGUgbm9ybSAxLjAgd2l0aCB0aGUgc2lnbiBvZiB0aGUKK3wgZGVub3JtIGFuZCBpdCB3aWxsIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGUgcmVzdWx0IGluIGV4dGVuZGVkCit8IHByZWNpc2lvbi4gIFdlIGNhbiB0aGVuIGNhbGwgcm91bmQgd2l0aCBubyBzdGlja3kgYW5kIHRoZSByZXN1bHQKK3wgd2lsbCBiZSBjb3JyZWN0IGZvciB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gIElmCit8IHRoZSBzaWducyBhcmUgdW5saWtlLCB3ZSBjYWxsIHJvdW5kIHdpdGggdGhlIHN0aWNreSBiaXQgc2V0Cit8IGFuZCB0aGUgcmVzdWx0IHdpbGwgYmUgY29ycmVjdCBmb3IgdGhlIHVzZXIncyByb3VuZGluZyBtb2RlIGFuZAorfCBwcmVjaXNpb24uCit8CitzdWJfd3JhcDoKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYm5lCXN1Yl9kaWZmCit8Cit8IFRoZSBzaWducyBhcmUgYWxpa2UuCit8CisJY21wYgkjMHgwZixETlJNX0ZMRyglYTYpIHxpcyBkZXN0IHRoZSBkZW5vcm0/CisJYm5lcwlzdWJfdV9zcmNkCisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwlvcncJIzB4M2ZmZiwlZDAJfGZvcmNlIHRoZSBleHBvbmVudCB0byArLy0gMQorCW1vdmV3CSVkMCxGUFRFTVBfRVgoJWE2KSB8aW4gdGhlIGRlbm9ybQorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMAorCWFuZGlsCSMweDMwLCVkMAorCWZtb3ZlbAklZDAsJWZwY3IJCXxzZXQgdXAgdXNlcnMgcm1vZGUgYW5kIFgKKwlmbW92ZXgJRlBURU1QKCVhNiksJWZwMAorCWZzdWJ4CUVURU1QKCVhNiksJWZwMAorCWZtb3ZlbAklZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpIHxjYXB0dXJlIGNjJ3MgYW5kIGluZXggZnJvbSBmYWRkCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHdidGVtcCBpbiBmcmFtZQorCWZtb3ZleAklZnAwLFdCVEVNUCglYTYpCXx3cml0ZSByZXN1bHQgdG8gbWVtb3J5CisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJY2xybAklZDAJCXxmb3JjZSBzdGlja3kgdG8gemVybworCWJjbHJiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCXNuZQlXQlRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCVdCVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXEJZnJjZnBucgorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCWJyYQlmcmNmcG5yCitzdWJfdV9zcmNkOgorCW1vdmV3CUVURU1QX0VYKCVhNiksJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwlvcncJIzB4M2ZmZiwlZDAJfGZvcmNlIHRoZSBleHBvbmVudCB0byArLy0gMQorCW1vdmV3CSVkMCxFVEVNUF9FWCglYTYpIHxpbiB0aGUgZGVub3JtCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJZm1vdmVsCSVkMCwlZnBjcgkJfHNldCB1cCB1c2VycyBybW9kZSBhbmQgWAorCWZtb3ZleAlGUFRFTVAoJWE2KSwlZnAwCisJZnN1YngJRVRFTVAoJWE2KSwlZnAwCisJZm1vdmVsCSVmcHNyLCVkMQorCW9ybAklZDEsVVNFUl9GUFNSKCVhNikgfGNhcHR1cmUgY2MncyBhbmQgaW5leCBmcm9tIGZhZGQKKwlsZWFsCVdCVEVNUCglYTYpLCVhMAl8cG9pbnQgYTAgdG8gd2J0ZW1wIGluIGZyYW1lCisJZm1vdmV4CSVmcDAsV0JURU1QKCVhNikJfHdyaXRlIHJlc3VsdCB0byBtZW1vcnkKKwlsc3JsCSM0LCVkMAkJfHB1dCBybW9kZSBpbiBsb3dlciAyIGJpdHMKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRpbAkjMHhjMCwlZDEKKwlsc3JsCSM2LCVkMQkJfHB1dCBwcmVjaXNpb24gaW4gdXBwZXIgd29yZAorCXN3YXAJJWQxCisJb3JsCSVkMCwlZDEJCXxzZXQgdXAgZm9yIHJvdW5kIGNhbGwKKwljbHJsCSVkMAkJfGZvcmNlIHN0aWNreSB0byB6ZXJvCisJYmNscmIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJc25lCVdCVEVNUF9TR04oJWE2KQorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK3wKK3wgU2lnbnMgYXJlIHVubGlrZToKK3wKK3N1Yl9kaWZmOgorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8aXMgZGVzdCB0aGUgZGVub3JtPworCWJuZXMJc3ViX3Nfc3JjZAorc3ViX3NfZGVzdGQ6CisJbGVhbAlFVEVNUCglYTYpLCVhMAorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMAorCWFuZGlsCSMweDMwLCVkMAorCWxzcmwJIzQsJWQwCQl8cHV0IHJtb2RlIGluIGxvd2VyIDIgYml0cworCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQorCWFuZGlsCSMweGMwLCVkMQorCWxzcmwJIzYsJWQxCQl8cHV0IHByZWNpc2lvbiBpbiB1cHBlciB3b3JkCisJc3dhcAklZDEKKwlvcmwJJWQwLCVkMQkJfHNldCB1cCBmb3Igcm91bmQgY2FsbAorCW1vdmVsCSMweDIwMDAwMDAwLCVkMAl8c2V0IHN0aWNreSBmb3Igcm91bmQKK3wKK3wgU2luY2UgdGhlIGRlc3QgaXMgdGhlIGRlbm9ybSwgdGhlIHNpZ24gaXMgdGhlIG9wcG9zaXRlIG9mIHRoZQorfCBub3JtIHNpZ24uCit8CisJZW9yaXcJIzB4ODAwMCxFVEVNUF9FWCglYTYpCXxmbGlwIHNpZ24gb24gcmVzdWx0CisJdHN0dwlFVEVNUF9FWCglYTYpCisJYmd0cwlzdWJfc19kd3IKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCitzdWJfc19kd3I6CisJYmNscmIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikKKwlzbmUJRVRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJc3ViX3NfZGNscgorCWJzZXRiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCitzdWJfc19kY2xyOgorCWxlYWwJV0JURU1QKCVhNiksJWEwCisJbW92ZWwJRVRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApCisJbW92ZWwJRVRFTVBfTE8oJWE2KSw4KCVhMCkKKwlicmEJc3ViX2Nrb3ZmCitzdWJfc19zcmNkOgorCWxlYWwJRlBURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxGUFRFTVBfRVgoJWE2KQorCXNuZQlGUFRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUZQVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXN1Yl9zX3NjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikKK3N1Yl9zX3NjbHI6CisJbGVhbAlXQlRFTVAoJWE2KSwlYTAKKwltb3ZlbAlGUFRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUZQVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUZQVEVNUF9MTyglYTYpLDgoJWEwKQorCXRzdHcJRlBURU1QX0VYKCVhNikKKwliZ3QJc3ViX2Nrb3ZmCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorc3ViX2Nrb3ZmOgorCW1vdmV3CVdCVEVNUF9FWCglYTYpLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCisJY21waXcJIzB4N2ZmZiwlZDAKKwlibmUJZnJjZnBucgorfAorfCBUaGUgcmVzdWx0IGhhcyBvdmVyZmxvd2VkIHRvICQ3ZmZmIGV4cG9uZW50LiAgU2V0IEksIG92ZmwsCit8IGFuZCBhb3ZmbCwgYW5kIGNsciB0aGUgbWFudGlzc2EgKGluY29ycmVjdGx5IHNldCBieSB0aGUKK3wgcm91bmQgcm91dGluZS4pCit8CisJb3JsCSNpbmZfbWFzaytvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJY2xybAk0KCVhMCkKKwlicmEJZnJjZnBucgorfAorfCBJbnN0IGlzIGZjbXAuCit8Cit3cmFwX2NtcDoKKwljbXBiCSMweGZmLEROUk1fRkxHKCVhNikgfGlmIGJvdGggb3BzIGRlbm9ybSwKKwliZXEJZml4X3N0awkJIHxyZXN0b3JlIHRvIGZwdQorfAorfCBPbmUgb2YgdGhlIG9wcyBpcyBkZW5vcm1hbGl6ZWQuICBUZXN0IGZvciB3cmFwIGNvbmRpdGlvbgorfCBhbmQgY29tcGxldGUgdGhlIGluc3RydWN0aW9uLgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwljbXBfc3JjZAorY21wX2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3QgZGVzdCBmcm9tIHNyYworCWNtcGwJIzB4ODAwMCwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJdHN0dwlFVEVNUF9FWCglYTYpCQl8c2V0IE4gdG8gfnNpZ25fb2Yoc3JjKQorCWJnZQljbXBfc2V0bgorCXJ0cworY21wX3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKKwl0c3R3CUZQVEVNUF9FWCglYTYpCQl8c2V0IE4gdG8gc2lnbl9vZihkZXN0KQorCWJsdAljbXBfc2V0bgorCXJ0cworY21wX3NldG46CisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCXJ0cworCit8Cit8IEluc3QgaXMgZm11bC4KK3wKK3dyYXBfbXVsOgorCWNtcGIJIzB4ZmYsRE5STV9GTEcoJWE2KSB8aWYgYm90aCBvcHMgZGVub3JtLAorCWJlcQlmb3JjZV91bmYJfGZvcmNlIGFuIHVuZGVyZmxvdyAocmVhbGx5ISkKK3wKK3wgT25lIG9mIHRoZSBvcHMgaXMgZGVub3JtYWxpemVkLiAgVGVzdCBmb3Igd3JhcCBjb25kaXRpb24KK3wgYW5kIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGNoZWNrIGZvciBkZXN0IGRlbm9ybQorCWJuZXMJbXVsX3NyY2QKK211bF9kZXN0ZDoKKwlic3JsCWNraW5mX25zCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IHNyYyBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBuZWcpCisJYWRkbAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwliZ3QJZml4X3N0aworCWJyYQlmb3JjZV91bmYKK211bF9zcmNkOgorCWJzcmwJY2tpbmZfbmQKKwlibmUJZml4X3N0aworCWJmZXh0dQlGUFRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IGRlc3QgZXhwIChhbHdheXMgcG9zKQorCWJmZXh0cwlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgc3JjIGV4cCAoYWx3YXlzIG5lZykKKwlhZGRsCSVkMSwlZDAJCQl8c3VidHJhY3Qgc3JjIGZyb20gZGVzdAorCWJndAlmaXhfc3RrCisKK3wKK3wgVGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNhc2Ugb2YgdGhlIGluc3RydWN0aW9uIHJlc3VsdGluZyBpbgorfCBhbiB1bmRlcmZsb3cgY29uZGl0aW9uLgorfAorZm9yY2VfdW5mOgorCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwljbHJ3CU5NTkVYQyglYTYpCisJY2xyYglXQlRFTVBfU0dOKCVhNikKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAkJfGZpbmQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYmVxcwlmcmN1bmZjb250CisJc3QJV0JURU1QX1NHTiglYTYpCitmcmN1bmZjb250OgorCWxlYQlXQlRFTVAoJWE2KSwlYTAJCXxwb2ludCBhMCB0byBtZW1vcnkgbG9jYXRpb24KKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM2LCVkMAkJCXx0ZXN0IGZvciBmb3JjZWQgcHJlY2lzaW9uCisJYmVxcwlmcmN1bmZfZnBjcgorCWJ0c3RsCSMyLCVkMAkJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlmcmN1bmZfZGJsCisJbW92ZWwJIzB4MSwlZDAJCQl8aW5zdCBpcyBmb3JjZWQgc2luZ2xlCisJYnJhcwlmcmN1bmZfcm5kCitmcmN1bmZfZGJsOgorCW1vdmVsCSMweDIsJWQwCQkJfGluc3QgaXMgZm9yY2VkIGRvdWJsZQorCWJyYXMJZnJjdW5mX3JuZAorZnJjdW5mX2ZwY3I6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGluc3Qgbm90IGZvcmNlZCAtIHVzZSBmcGNyIHByZWMKK2ZyY3VuZl9ybmQ6CisJYnNybAl1bmZfc3ViCQkJfGdldCBjb3JyZWN0IHJlc3VsdCBiYXNlZCBvbgorfAkJCQkJO3JvdW5kIHByZWNpc2lvbi9tb2RlLiAgVGhpcworfAkJCQkJO3NldHMgRlBTUl9DQyBjb3JyZWN0bHkKKwliZmNscglXQlRFTVBfU0dOKCVhNil7IzA6Izh9CXxjb252ZXJ0IGJhY2sgdG8gSUVFRSBleHQgZm9ybWF0CisJYmVxcwlmcmNmcG4KKwlic2V0Ygkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKKwlicmEJZnJjZnBuCisKK3wKK3wgV3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgdXNlcidzIGZwbi4gIEFsbCByZXN1bHRzIG11c3QgYmUgSFVHRSB0byBiZQorfCB3cml0dGVuOyBvdGhlcndpc2UgdGhlIHJlc3VsdHMgd291bGQgaGF2ZSBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkLgorfCBJZiB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUsIHRoZSBvdmZfcmVzIHJvdXRpbmUKK3wgaXMgbmVlZGVkIHRvIGNvcnJlY3RseSBzdXBwbHkgdGhlIG1heCB2YWx1ZS4KK3wKK2ZyY2ZwbnI6CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlidHN0bAkjNiwlZDAJCQl8dGVzdCBmb3IgZm9yY2VkIHByZWNpc2lvbgorCWJlcXMJZnJjZnBuX2ZwY3IKKwlidHN0bAkjMiwlZDAJCQl8Y2hlY2sgZm9yIGRvdWJsZQorCWJuZXMJZnJjZnBuX2RibAorCW1vdmVsCSMweDEsJWQwCQkJfGluc3QgaXMgZm9yY2VkIHNpbmdsZQorCWJyYXMJZnJjZnBuX3JuZAorZnJjZnBuX2RibDoKKwltb3ZlbAkjMHgyLCVkMAkJCXxpbnN0IGlzIGZvcmNlZCBkb3VibGUKKwlicmFzCWZyY2Zwbl9ybmQKK2ZyY2Zwbl9mcGNyOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwCXxpbnN0IG5vdCBmb3JjZWQgLSB1c2UgZnBjciBwcmVjCisJdHN0YgklZDAKKwliZXFzCWZyY2ZwbgkJCXxpZiBleHRlbmRlZCwgd3JpdGUgd2hhdCB5b3UgZ290CitmcmNmcG5fcm5kOgorCWJjbHJiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCXNuZQlXQlRFTVBfU0dOKCVhNikKKwlic3JsCW92Zl9yZXMJCQl8Z2V0IGNvcnJlY3QgcmVzdWx0IGJhc2VkIG9uCit8CQkJCQk7cm91bmQgcHJlY2lzaW9uL21vZGUuICBUaGlzCit8CQkJCQk7c2V0cyBGUFNSX0NDIGNvcnJlY3RseQorCWJmY2xyCVdCVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWZyY2Zwbl9jbHIKKwlic2V0Ygkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKK2ZyY2Zwbl9jbHI6CisJb3JsCSNvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAorfCBQZXJmb3JtIHRoZSB3cml0ZS4KK3wKK2ZyY2ZwbjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGZwIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJIzMsJWQwCisJYmxlcwlmcmMwMTIzCQkJfGNoZWNrIGlmIGRlc3QgaXMgZnAwLWZwMworCW1vdmVsCSM3LCVkMQorCXN1YmwJJWQwLCVkMQorCWNscmwJJWQwCisJYnNldGwJJWQxLCVkMAorCWZtb3ZlbXggV0JURU1QKCVhNiksJWQwCisJcnRzCitmcmMwMTIzOgorCWNtcGliCSMwLCVkMAorCWJlcXMJZnJjMF9kc3QKKwljbXBpYgkjMSwlZDAKKwliZXFzCWZyYzFfZHN0CisJY21waWIJIzIsJWQwCisJYmVxcwlmcmMyX2RzdAorZnJjM19kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDMoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAzKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAzKzgoJWE2KQorCXJ0cworZnJjMl9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDIoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAyKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAyKzgoJWE2KQorCXJ0cworZnJjMV9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDEoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAxKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAxKzgoJWE2KQorCXJ0cworZnJjMF9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDAoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAwKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAwKzgoJWE2KQorCXJ0cworCit8Cit8IFdyaXRlIGV0ZW1wIHRvIGZwbi4KK3wgQSBjaGVjayBpcyBtYWRlIG9uIGVuYWJsZWQgYW5kIHNpZ25hbGxlZCBzbmFuIGV4Y2VwdGlvbnMsCit8IGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG92ZXJ3cml0dGVuIGlmIHRoaXMgY29uZGl0aW9uIGV4aXN0cy4KK3wgVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1ha2UgZm1vdmVpbnMgb2YgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlcworfCBmYXN0ZXIuCit8Cit3cl9ldGVtcDoKKwlidHN0Ygkjc25hbl9iaXQsRlBTUl9FWENFUFQoJWE2KQl8aWYgc25hbiBpcyBzZXQsIGFuZAorCWJlcXMJZm1vdmVpbmMJCXxlbmFibGVkLCBmb3JjZSByZXN0b3JlCisJYnRzdGIJI3NuYW5fYml0LEZQQ1JfRU5BQkxFKCVhNikgfGFuZCBkb24ndCBvdmVyd3JpdGUKKwliZXFzCWZtb3ZlaW5jCQl8dGhlIGRlc3QKKwltb3ZlbAlFVEVNUF9FWCglYTYpLEZQVEVNUF9FWCglYTYpCXxzZXQgdXAgZnB0ZW1wIHNpZ24gZm9yCit8CQkJCQkJO3NuYW4gaGFuZGxlcgorCXRzdGIJRVRFTVAoJWE2KQkJfGNoZWNrIGZvciBuZWdhdGl2ZQorCWJsdHMJc25hbl9uZWcKKwlydHMKK3NuYW5fbmVnOgorCW9ybAkjbmVnX2JpdCxVU0VSX0ZQU1IoJWE2KQl8c25hbiBpcyBuZWdhdGl2ZTsgc2V0IE4KKwlydHMKK2Ztb3ZlaW5jOgorCWNscncJTk1ORVhDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwltb3ZlYglTVEFHKCVhNiksJWQwCQl8Y2hlY2sgaWYgc3RhZyBpcyBpbmYKKwlhbmRpYgkjMHhlMCwlZDAKKwljbXBpYgkjMHg0MCwlZDAKKwlibmVzCWZtaW5jX2NuYW4KKwlvcmwJI2luZl9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiBpbmYsIG5vdGhpbmcgeWV0IGhhcyBzZXQgSQorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwliZ2VzCWZtaW5jX2NvbgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZm1pbmNfY29uCitmbWluY19jbmFuOgorCWNtcGliCSMweDYwLCVkMAkJCXxjaGVjayBpZiBzdGFnIGlzIE5hTgorCWJuZXMJZm1pbmNfY3plcm8KKwlvcmwJI25hbl9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiBuYW4sIG5vdGhpbmcgeWV0IGhhcyBzZXQgTmFOCisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQl8c2V0IHVwIGZwdGVtcCBzaWduIGZvcgorfAkJCQkJCTtzbmFuIGhhbmRsZXIKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJCXxjaGVjayBzaWduCisJYmdlcwlmbWluY19jb24KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCWZtaW5jX2NvbgorZm1pbmNfY3plcm86CisJY21waWIJIzB4MjAsJWQwCQkJfGNoZWNrIGlmIHplcm8KKwlibmVzCWZtaW5jX2NvbgorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCXxpZiB6ZXJvLCBzZXQgWgorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwliZ2VzCWZtaW5jX2NvbgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKK2ZtaW5jX2NvbjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGZwIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJIzMsJWQwCisJYmxlcwlmcDAxMjMJCQl8Y2hlY2sgaWYgZGVzdCBpcyBmcDAtZnAzCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCisJZm1vdmVteCBFVEVNUCglYTYpLCVkMAorCXJ0cworCitmcDAxMjM6CisJY21waWIJIzAsJWQwCisJYmVxcwlmcDBfZHN0CisJY21waWIJIzEsJWQwCisJYmVxcwlmcDFfZHN0CisJY21waWIJIzIsJWQwCisJYmVxcwlmcDJfZHN0CitmcDNfZHN0OgorCW1vdmVsCUVURU1QX0VYKCVhNiksVVNFUl9GUDMoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksVVNFUl9GUDMrNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxVU0VSX0ZQMys4KCVhNikKKwlydHMKK2ZwMl9kc3Q6CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxVU0VSX0ZQMiglYTYpCisJbW92ZWwJRVRFTVBfSEkoJWE2KSxVU0VSX0ZQMis0KCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLFVTRVJfRlAyKzgoJWE2KQorCXJ0cworZnAxX2RzdDoKKwltb3ZlbAlFVEVNUF9FWCglYTYpLFVTRVJfRlAxKCVhNikKKwltb3ZlbAlFVEVNUF9ISSglYTYpLFVTRVJfRlAxKzQoJWE2KQorCW1vdmVsCUVURU1QX0xPKCVhNiksVVNFUl9GUDErOCglYTYpCisJcnRzCitmcDBfZHN0OgorCW1vdmVsCUVURU1QX0VYKCVhNiksVVNFUl9GUDAoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksVVNFUl9GUDArNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxVU0VSX0ZQMCs4KCVhNikKKwlydHMKKworb3BjbGFzczM6CisJc3QJQ1VfT05MWSglYTYpCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGNoZWNrIGlmIHBhY2tlZCBtb3Zlb3V0CisJYW5kaXcJIzB4MGMwMCwlZDAJfGlzb2xhdGUgbGFzdCAyIGJpdHMgb2Ygc2l6ZSBmaWVsZAorCWNtcGl3CSMweDBjMDAsJWQwCXxpZiBzaXplIGlzIDAxMSBvciAxMTEsIGl0IGlzIHBhY2tlZAorCWJlcQlwYWNrX291dAl8ZWxzZSBpdCBpcyBub3JtIG9yIGRlbm9ybQorCWJyYQltdl9vdXQKKworCit8Cit8CU1PVkUgT1VUCit8CisKK212X3RibDoKKwkubG9uZwlsaQorCS5sb25nCXNncAorCS5sb25nCXhwCisJLmxvbmcJbXZvdXRfZW5kCXxzaG91bGQgbmV2ZXIgYmUgdGFrZW4KKwkubG9uZwl3aQorCS5sb25nCWRwCisJLmxvbmcJYmkKKwkubG9uZwltdm91dF9lbmQJfHNob3VsZCBuZXZlciBiZSB0YWtlbgorbXZfb3V0OgorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDEJfHB1dCBzb3VyY2Ugc3BlY2lmaWVyIGluIGQxCisJbGVhbAltdl90YmwsJWEwCisJbW92ZWwJJWEwQCglZDE6bDo0KSwlYTAKKwlqbXAJKCVhMCkKKworfAorfCBUaGlzIGV4aXQgaXMgZm9yIG1vdmUtb3V0IHRvIG1lbW9yeS4gIFRoZSBhdW5mbCBiaXQgaXMKK3wgc2V0IGlmIHRoZSByZXN1bHQgaXMgaW5leCBhbmQgdW5mbCBpcyBzaWduYWxsZWQuCit8Cittdm91dF9lbmQ6CisJYnRzdGIJI2luZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYmVxcwlub19hdWZsCisJYnRzdGIJI3VuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKKwliZXFzCW5vX2F1ZmwKKwlic2V0YgkjYXVuZmxfYml0LEZQU1JfQUVYQ0VQVCglYTYpCitub19hdWZsOgorCWNscncJTk1ORVhDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwlmbW92ZWwJIzAsJUZQU1IJCQl8Y2xlYXIgYW55IGNjIGJpdHMgZnJvbSByZXNfZnVuYworfAorfCBSZXR1cm4gRVRFTVAgdG8gZXh0ZW5kZWQgZm9ybWF0IGZyb20gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0IHNvCit8IHRoYXQgZ2VuX2V4Y2VwdCB3aWxsIGhhdmUgYSBjb3JyZWN0bHkgc2lnbmVkIHZhbHVlIGZvciBvdmZsL3VuZmwKK3wgaGFuZGxlcnMuCit8CisJYmZjbHIJRVRFTVBfU0dOKCVhNil7IzA6Izh9CisJYmVxcwltdm91dF9jb24KKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorbXZvdXRfY29uOgorCXJ0cworfAorfCBUaGlzIGV4aXQgaXMgZm9yIG1vdmUtb3V0IHRvIGludCByZWdpc3Rlci4gIFRoZSBhdW5mbCBiaXQgaXMKK3wgbm90IHNldCBpbiBhbnkgY2FzZSBmb3IgdGhpcyBtb3ZlLgorfAorbXZvdXRpX2VuZDoKKwljbHJ3CU5NTkVYQyglYTYpCisJYmNscmIJI0UxLEVfQllURSglYTYpCisJZm1vdmVsCSMwLCVGUFNSCQkJfGNsZWFyIGFueSBjYyBiaXRzIGZyb20gcmVzX2Z1bmMKK3wKK3wgUmV0dXJuIEVURU1QIHRvIGV4dGVuZGVkIGZvcm1hdCBmcm9tIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCBzbworfCB0aGF0IGdlbl9leGNlcHQgd2lsbCBoYXZlIGEgY29ycmVjdGx5IHNpZ25lZCB2YWx1ZSBmb3Igb3ZmbC91bmZsCit8IGhhbmRsZXJzLgorfAorCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQorCWJlcXMJbXZvdXRpX2NvbgorCWJzZXRiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCittdm91dGlfY29uOgorCXJ0cworfAorfCBsaSBpcyB1c2VkIHRvIGhhbmRsZSBhIGxvbmcgaW50ZWdlciBzb3VyY2Ugc3BlY2lmaWVyCit8CisKK2xpOgorCW1vdmVxbAkjNCwlZDAJCXxzZXQgYnl0ZSBjb3VudAorCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCWludF9kbnJtCXxpZiBzbywgYnJhbmNoCisKKwlmbW92ZW14IEVURU1QKCVhNiksJWZwMC0lZnAwCisJZmNtcGQJIzB4NDFkZmZmZmZmZmMwMDAwMCwlZnAwCit8IDQxZGZmZmZmZmZjMDAwMDAgaW4gZGJsIHByZWMgPSA0MDFkMDAwMGZmZmZmZmZlMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmdlCWxvX3BscmcKKwlmY21wZAkjMHhjMWUwMDAwMDAwMDAwMDAwLCVmcDAKK3wgYzFlMDAwMDAwMDAwMDAwMCBpbiBkYmwgcHJlYyA9IGMwMWUwMDAwODAwMDAwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibGUJbG9fbmxyZworfAorfCBhdCB0aGlzIHBvaW50LCB0aGUgYW5zd2VyIGlzIGJldHdlZW4gdGhlIGxhcmdlc3QgcG9zIGFuZCBuZWcgdmFsdWVzCit8CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCXx1c2UgdXNlcidzIHJvdW5kaW5nIG1vZGUKKwlhbmRpbAkjMHgzMCwlZDEKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm1vdmVsCSVmcDAsTF9TQ1IxKCVhNikJfGxldCB0aGUgMDQwIHBlcmZvcm0gY29udmVyc2lvbgorCWZtb3ZlbCAlZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpCXxjYXB0dXJlIGluZXgyL2FpbmV4IGlmIHNldAorCWJyYQlpbnRfd3J0CisKKworbG9fcGxyZzoKKwltb3ZlbAkjMHg3ZmZmZmZmZixMX1NDUjEoJWE2KQl8YW5zd2VyIGlzIGxhcmdlc3QgcG9zaXRpdmUgaW50CisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBkCSMweDQxZGZmZmZmZmZlMDAwMDAsJWZwMAorfCA0MWRmZmZmZmZmZTAwMDAwIGluIGRibCBwcmVjID0gNDAxZDAwMDBmZmZmZmZmZjAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCitsb19ubHJnOgorCW1vdmVsCSMweDgwMDAwMDAwLExfU0NSMSglYTYpCisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBkCSMweGMxZTAwMDAwMDAxMDAwMDAsJWZwMAorfCBjMWUwMDAwMDAwMTAwMDAwIGluIGRibCBwcmVjID0gYzAxZTAwMDA4MDAwMDAwMDgwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJsdAlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCit8Cit8IHdpIGlzIHVzZWQgdG8gaGFuZGxlIGEgd29yZCBpbnRlZ2VyIHNvdXJjZSBzcGVjaWZpZXIKK3wKKword2k6CisJbW92ZXFsCSMyLCVkMAkJfHNldCBieXRlIGNvdW50CisKKwlidHN0YgkjNyxTVEFHKCVhNikJfGNoZWNrIGZvciBleHRlbmRlZCBkZW5vcm0KKwlibmUJaW50X2Rucm0JfGJyYW5jaCBpZiBzbworCisJZm1vdmVteCBFVEVNUCglYTYpLCVmcDAtJWZwMAorCWZjbXBzCSMweDQ2ZmZmZTAwLCVmcDAKK3wgNDZmZmZlMDAgaW4gc2dsIHByZWMgPSA0MDBkMDAwMGZmZmUwMDAwMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmdlCXdvX3BscmcKKwlmY21wcwkjMHhjNzAwMDAwMCwlZnAwCit8IGM3MDAwMDAwIGluIHNnbCBwcmVjID0gYzAwZTAwMDA4MDAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJsZQl3b19ubHJnCisKK3wKK3wgYXQgdGhpcyBwb2ludCwgdGhlIGFuc3dlciBpcyBiZXR3ZWVuIHRoZSBsYXJnZXN0IHBvcyBhbmQgbmVnIHZhbHVlcworfAorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQl8dXNlIHVzZXIncyByb3VuZGluZyBtb2RlCisJYW5kaWwJIzB4MzAsJWQxCisJZm1vdmVsCSVkMSwlZnBjcgorCWZtb3ZldwklZnAwLExfU0NSMSglYTYpCXxsZXQgdGhlIDA0MCBwZXJmb3JtIGNvbnZlcnNpb24KKwlmbW92ZWwgJWZwc3IsJWQxCisJb3JsCSVkMSxVU0VSX0ZQU1IoJWE2KQl8Y2FwdHVyZSBpbmV4Mi9haW5leCBpZiBzZXQKKwlicmEJaW50X3dydAorCit3b19wbHJnOgorCW1vdmV3CSMweDdmZmYsTF9TQ1IxKCVhNikJfGFuc3dlciBpcyBsYXJnZXN0IHBvc2l0aXZlIGludAorCWZiZXEJaW50X3dydAkJCXxleGFjdCBhbnN3ZXIKKwlmY21wcwkjMHg0NmZmZmYwMCwlZnAwCit8IDQ2ZmZmZjAwIGluIHNnbCBwcmVjID0gNDAwZDAwMDBmZmZmMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCit3b19ubHJnOgorCW1vdmV3CSMweDgwMDAsTF9TQ1IxKCVhNikKKwlmYmVxCWludF93cnQJCQl8ZXhhY3QgYW5zd2VyCisJZmNtcHMJIzB4YzcwMDAwODAsJWZwMAorfCBjNzAwMDA4MCBpbiBzZ2wgcHJlYyA9IGMwMGUwMDAwODAwMDgwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibHQJaW50X29wZXJyCQl8c2V0IG9wZXJyCisJYnJhCWludF9pbngJCQl8c2V0IGluZXhhY3QKKworfAorfCBiaSBpcyB1c2VkIHRvIGhhbmRsZSBhIGJ5dGUgaW50ZWdlciBzb3VyY2Ugc3BlY2lmaWVyCit8CisKK2JpOgorCW1vdmVxbAkjMSwlZDAJCXxzZXQgYnl0ZSBjb3VudAorCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCWludF9kbnJtCXxicmFuY2ggaWYgc28KKworCWZtb3ZlbXggRVRFTVAoJWE2KSwlZnAwLSVmcDAKKwlmY21wcwkjMHg0MmZlMDAwMCwlZnAwCit8IDQyZmUwMDAwIGluIHNnbCBwcmVjID0gNDAwNTAwMDBmZTAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlieV9wbHJnCisJZmNtcHMJIzB4YzMwMDAwMDAsJWZwMAorfCBjMzAwMDAwMCBpbiBzZ2wgcHJlYyA9IGMwMDYwMDAwODAwMDAwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibGUJYnlfbmxyZworCit8Cit8IGF0IHRoaXMgcG9pbnQsIHRoZSBhbnN3ZXIgaXMgYmV0d2VlbiB0aGUgbGFyZ2VzdCBwb3MgYW5kIG5lZyB2YWx1ZXMKK3wKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEJfHVzZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZQorCWFuZGlsCSMweDMwLCVkMQorCWZtb3ZlbAklZDEsJWZwY3IKKwlmbW92ZWIJJWZwMCxMX1NDUjEoJWE2KQl8bGV0IHRoZSAwNDAgcGVyZm9ybSBjb252ZXJzaW9uCisJZm1vdmVsICVmcHNyLCVkMQorCW9ybAklZDEsVVNFUl9GUFNSKCVhNikJfGNhcHR1cmUgaW5leDIvYWluZXggaWYgc2V0CisJYnJhCWludF93cnQKKworYnlfcGxyZzoKKwltb3ZlYgkjMHg3ZixMX1NDUjEoJWE2KQkJfGFuc3dlciBpcyBsYXJnZXN0IHBvc2l0aXZlIGludAorCWZiZXEJaW50X3dydAkJCXxleGFjdCBhbnN3ZXIKKwlmY21wcwkjMHg0MmZmMDAwMCwlZnAwCit8IDQyZmYwMDAwIGluIHNnbCBwcmVjID0gNDAwNTAwMDBmZjAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCitieV9ubHJnOgorCW1vdmViCSMweDgwLExfU0NSMSglYTYpCisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBzCSMweGMzMDA4MDAwLCVmcDAKK3wgYzMwMDgwMDAgaW4gc2dsIHByZWMgPSBjMDA2MDAwMDgwODAwMDAwMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmx0CWludF9vcGVycgkJfHNldCBvcGVycgorCWJyYQlpbnRfaW54CQkJfHNldCBpbmV4YWN0CisKK3wKK3wgQ29tbW9uIGludGVnZXIgcm91dGluZXMKK3wKK3wgaW50X2RybnJtLS0tYWNjb3VudCBmb3IgcG9zc2libGUgbm9uemVybyByZXN1bHQgZm9yIHJvdW5kIHVwIHdpdGggcG9zaXRpdmUKK3wgb3BlcmFuZCBhbmQgcm91bmQgZG93biBmb3IgbmVnYXRpdmUgYW5zd2VyLiAgSW4gdGhlIGZpcnN0IGNhc2UgKHJlc3VsdCA9IDEpCit8IGJ5dGUtd2lkdGggKHN0b3JlIGluIGQwKSBvZiByZXN1bHQgbXVzdCBiZSBob25vcmVkLiAgSW4gdGhlIHNlY29uZCBjYXNlLAorfCAtMSBpbiBMX1NDUjEoYTYpIHdpbGwgY292ZXIgYWxsIGNvbnRpbmdlbmNpZXMgKEZNT1ZFLkIvVy9MIG91dCkuCisKK2ludF9kbnJtOgorCW1vdmVsCSMwLExfU0NSMSglYTYpCXwgaW5pdGlhbGl6ZSByZXN1bHQgdG8gMAorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxCXwgZDEgaXMgdGhlIHJvdW5kaW5nIG1vZGUKKwljbXBiCSMyLCVkMQorCWJtaXMJaW50X2lueAkJfCBpZiBSTiBvciBSWiwgZG9uZQorCWJuZXMJaW50X3JwCQl8IGlmIFJQLCBjb250aW51ZSBiZWxvdworCXRzdHcJRVRFTVAoJWE2KQl8IFJNOiBzdG9yZSAtMSBpbiBMX1NDUjEgaWYgc3JjIGlzIG5lZ2F0aXZlCisJYnBscwlpbnRfaW54CQl8IG90aGVyd2lzZSByZXN1bHQgaXMgMAorCW1vdmVsCSMtMSxMX1NDUjEoJWE2KQorCWJyYXMJaW50X2lueAoraW50X3JwOgorCXRzdHcJRVRFTVAoJWE2KQl8IFJQOiBzdG9yZSArMSBvZiBwcm9wZXIgd2lkdGggaW4gTF9TQ1IxIGlmCit8CQkJCTsgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiAwCisJYm1pcwlpbnRfaW54CQl8IG90aGVyd2lzZSwgcmVzdWx0IGlzIDAKKwlsZWEJTF9TQ1IxKCVhNiksJWExCXwgYTEgaXMgYWRkcmVzcyBvZiBMX1NDUjEKKwlhZGRhbAklZDAsJWExCQl8IG9mZnNldCBieSBkZXN0aW5hdGlvbiB3aWR0aCAtMQorCXN1YmFsCSMxLCVhMQorCWJzZXRiCSMwLCglYTEpCQl8IHNldCBsb3cgYml0IGF0IGExIGFkZHJlc3MKK2ludF9pbng6CisJb3JpbAkjaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYXMJaW50X3dydAoraW50X29wZXJyOgorCWZtb3ZlbXggJWZwMC0lZnAwLEZQVEVNUCglYTYpCXxGUFRFTVAgbXVzdCBjb250YWluIHRoZSBleHRlbmRlZAorfAkJCQk7cHJlY2lzaW9uIHNvdXJjZSB0aGF0IG5lZWRzIHRvIGJlCit8CQkJCTtjb252ZXJ0ZWQgdG8gaW50ZWdlciB0aGlzIGlzIHJlcXVpcmVkCit8CQkJCTtpZiB0aGUgb3BlcnIgZXhjZXB0aW9uIGlzIGVuYWJsZWQuCit8CQkJCTtzZXQgb3BlcnIvYWlvcCAobm8gaW5leDIgb24gaW50IG92ZmwpCisKKwlvcmlsCSNvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCit8CQkJCTtmYWxsIHRocm91Z2ggdG8gcGVyZm9ybSBpbnRfd3J0CitpbnRfd3J0OgorCW1vdmVsCUVYQ19FQSglYTYpLCVhMQl8bG9hZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisJdHN0bAklYTEJCXxjaGVjayB0byBzZWUgaWYgaXQgaXMgYSBkZXN0IHJlZ2lzdGVyCisJYmVxcwl3cnRfZG4JCXx3cml0ZSBkYXRhIHJlZ2lzdGVyCisJbGVhCUxfU0NSMSglYTYpLCVhMAl8cG9pbnQgdG8gc3VwZXJ2aXNvciBzb3VyY2UgYWRkcmVzcworCWJzcmwJbWVtX3dyaXRlCisJYnJhCW12b3V0aV9lbmQKKword3J0X2RuOgorCW1vdmVsCSVkMCwtKCVzcCkJfGQwIGN1cnJlbnRseSBjb250YWlucyB0aGUgc2l6ZSB0byB3cml0ZQorCWJzcmwJZ2V0X2ZsaW5lCXxnZXRfZmxpbmUgcmV0dXJucyBEbiBpbiBkMAorCWFuZGl3CSMweDcsJWQwCQl8aXNvbGF0ZSByZWdpc3RlcgorCW1vdmVsCSglc3ApKywlZDEJfGdldCBzaXplCisJY21waWwJIzQsJWQxCQl8bW9zdCBmcmVxdWVudCBjYXNlCisJYmVxcwlzel9sb25nCisJY21waWwJIzIsJWQxCisJYm5lcwlzel9jb24KKwlvcmwJIzgsJWQwCQl8YWRkICd3b3JkJyBzaXplIHRvIHJlZ2lzdGVyIworCWJyYXMJc3pfY29uCitzel9sb25nOgorCW9ybAkjMHgxMCwlZDAJCXxhZGQgJ2xvbmcnIHNpemUgdG8gcmVnaXN0ZXIjCitzel9jb246CisJbW92ZWwJJWQwLCVkMQkJfHJlZ19kZXN0IGV4cGVjdHMgc2l6ZTpyZWcgaW4gZDEKKwlic3JsCXJlZ19kZXN0CXxsb2FkIHByb3BlciBkYXRhIHJlZ2lzdGVyCisJYnJhCW12b3V0aV9lbmQKK3hwOgorCWxlYQlFVEVNUCglYTYpLCVhMAorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCXhkbnJtCisJY2xybAklZDAKKwlicmFzCWRvX2ZwCQl8ZG8gbm9ybWFsIGNhc2UKK3NncDoKKwlsZWEJRVRFTVAoJWE2KSwlYTAKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJ0c3RiCSM3LFNUQUcoJWE2KQl8Y2hlY2sgZm9yIGV4dGVuZGVkIGRlbm9ybQorCWJuZQlzcF9jYXRhcwl8YnJhbmNoIGlmIHNvCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAKKwlsZWEJc3BfYm5kcywlYTEKKwljbXB3CSglYTEpLCVkMAorCWJsdAlzcF91bmRlcgorCWNtcHcJMiglYTEpLCVkMAorCWJndAlzcF9vdmVyCisJbW92ZWwJIzEsJWQwCQl8c2V0IGRlc3RpbmF0aW9uIGZvcm1hdCB0byBzaW5nbGUKKwlicmFzCWRvX2ZwCQl8ZG8gbm9ybWFsIGNhc2UKK2RwOgorCWxlYQlFVEVNUCglYTYpLCVhMAorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCisKKwlidHN0YgkjNyxTVEFHKCVhNikJfGNoZWNrIGZvciBleHRlbmRlZCBkZW5vcm0KKwlibmUJZHBfY2F0YXMJfGJyYW5jaCBpZiBzbworCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAKKwlsZWEJZHBfYm5kcywlYTEKKworCWNtcHcJKCVhMSksJWQwCisJYmx0CWRwX3VuZGVyCisJY21wdwkyKCVhMSksJWQwCisJYmd0CWRwX292ZXIKKworCW1vdmVsCSMyLCVkMAkJfHNldCBkZXN0aW5hdGlvbiBmb3JtYXQgdG8gZG91YmxlCit8CQkJCTtmYWxsIHRocm91Z2ggdG8gZG9fZnAKK3wKK2RvX2ZwOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxCXxybmQgbW9kZSBpbiBkMQorCXN3YXAJJWQwCQkJfHJuZCBwcmVjIGluIHVwcGVyIHdvcmQKKwlhZGRsCSVkMCwlZDEJCQl8ZDEgaGFzIFBSRUMvTU9ERSBpbmZvCisKKwljbHJsCSVkMAkJCXxjbGVhciBnLHIscworCisJYnNybAlyb3VuZAkJCXxyb3VuZAorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAorCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzM6IzN9LCVkMQl8ZXh0cmFjdCBkZXN0aW5hdGlvbiBmb3JtYXQKK3wJCQkJCTthdCB0aGlzIHBvaW50IG9ubHkgdGhlIGRlc3QKK3wJCQkJCTtmb3JtYXRzIHNnbCwgZGJsLCBleHQgYXJlCit8CQkJCQk7cG9zc2libGUKKwljbXBiCSMyLCVkMQorCWJndHMJZGRibAkJCXxkb3VibGU9NSwgZXh0ZW5kZWQ9Miwgc2luZ2xlPTEKKwlibmVzCWRzZ2wKK3wJCQkJCTtmYWxsIHRocm91Z2ggdG8gZGV4dAorZGV4dDoKKwlic3JsCWRlc3RfZXh0CisJYnJhCW12b3V0X2VuZAorZHNnbDoKKwlic3JsCWRlc3Rfc2dsCisJYnJhCW12b3V0X2VuZAorZGRibDoKKwlic3JsCWRlc3RfZGJsCisJYnJhCW12b3V0X2VuZAorCit8Cit8IEhhbmRsZSBwb3NzaWJsZSBkZW5vcm0gb3IgY2F0YXN0cm9waGljIHVuZGVyZmxvdyBjYXNlcyBoZXJlCit8Cit4ZG5ybToKKwlic3IJc2V0X3hvcAkJfGluaXRpYWxpemUgV0JURU1QCisJYnNldGIJI3didGVtcDE1X2JpdCxXQl9CWVRFKCVhNikgfHNldCB3YnRlbXAxNQorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAl8YTAgaGFzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyCisJYnNybAlkZXN0X2V4dAl8c3RvcmUgdG8gbWVtb3J5CisJYnNldGIJI3VuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK3NwX3VuZGVyOgorCWJzZXRiCSNldGVtcDE1X2JpdCxTVEFHKCVhNikKKworCWNtcHcJNCglYTEpLCVkMAorCWJsdHMJc3BfY2F0YXMJfGNhdGFzdHJvcGhpYyB1bmRlcmZsb3cgY2FzZQorCisJbW92ZWwJIzEsJWQwCQl8bG9hZCBpbiByb3VuZCBwcmVjaXNpb24KKwltb3ZlbAkjc2dsX3RocmVzaCwlZDEJfGxvYWQgaW4gc2luZ2xlIGRlbm9ybSB0aHJlc2hvbGQKKwlic3JsCWRwc3BkbnJtCXxleHBlY3RzIGQxIHRvIGhhdmUgdGhlIHByb3BlcgorfAkJCQk7ZGVub3JtIHRocmVzaG9sZAorCWJzcmwJZGVzdF9zZ2wJfHN0b3JlcyB2YWx1ZSB0byBkZXN0aW5hdGlvbgorCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYnJhCW12b3V0X2VuZAl8ZXhpdAorCitkcF91bmRlcjoKKwlic2V0YgkjZXRlbXAxNV9iaXQsU1RBRyglYTYpCisKKwljbXB3CTQoJWExKSwlZDAKKwlibHRzCWRwX2NhdGFzCXxjYXRhc3Ryb3BoaWMgdW5kZXJmbG93IGNhc2UKKworCW1vdmVsCSNkYmxfdGhyZXNoLCVkMQl8bG9hZCBpbiBkb3VibGUgcHJlY2lzaW9uIHRocmVzaG9sZAorCW1vdmVsCSMyLCVkMAorCWJzcmwJZHBzcGRucm0JfGV4cGVjdHMgZDEgdG8gaGF2ZSBwcm9wZXIKK3wJCQkJO2Rlbm9ybSB0aHJlc2hvbGQKK3wJCQkJO2V4cGVjdHMgZDAgdG8gaGF2ZSByb3VuZCBwcmVjaXNpb24KKwlic3JsCWRlc3RfZGJsCXxzdG9yZSB2YWx1ZSB0byBkZXN0aW5hdGlvbgorCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYnJhCW12b3V0X2VuZAl8ZXhpdAorCit8Cit8IEhhbmRsZSBjYXRhc3Ryb3BoaWMgdW5kZXJmbG93IGNhc2VzIGhlcmUKK3wKK3NwX2NhdGFzOgorfCBUZW1wIGZpeCBmb3IgeiBiaXQgc2V0IGluIHVuZl9zdWIKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKworCW1vdmVsCSMxLCVkMAkJfHNldCByb3VuZCBwcmVjaXNpb24gdG8gc2dsCisKKwlic3JsCXVuZl9zdWIJCXxhMCBwb2ludHMgdG8gcmVzdWx0CisKKwltb3ZlbAkoJWE3KSssVVNFUl9GUFNSKCVhNikKKworCW1vdmVsCSMxLCVkMAorCXN1YncJJWQwLExPQ0FMX0VYKCVhMCkgfGFjY291bnQgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbgorfAkJCQk7ZGVub3JtL25vcm0gYmlhcworCisJbW92ZWwJJWEwLCVhMQkJfGExIGhhcyB0aGUgb3BlcmFuZCBpbnB1dAorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAl8YTAgaGFzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyCisKKwlic3JsCWRlc3Rfc2dsCXxzdG9yZSB0aGUgcmVzdWx0CisJb3JpbAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK2RwX2NhdGFzOgorfCBUZW1wIGZpeCBmb3IgeiBiaXQgc2V0IGluIHVuZl9zdWIKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKworCW1vdmVsCSMyLCVkMAkJfHNldCByb3VuZCBwcmVjaXNpb24gdG8gZGJsCisJYnNybAl1bmZfc3ViCQl8YTAgcG9pbnRzIHRvIHJlc3VsdAorCisJbW92ZWwJKCVhNykrLFVTRVJfRlBTUiglYTYpCisKKwltb3ZlbAkjMSwlZDAKKwlzdWJ3CSVkMCxMT0NBTF9FWCglYTApIHxhY2NvdW50IGZvciBkaWZmZXJlbmNlIGJldHdlZW4KK3wJCQkJO2Rlbm9ybS9ub3JtIGJpYXMKKworCW1vdmVsCSVhMCwlYTEJCXxhMSBoYXMgdGhlIG9wZXJhbmQgaW5wdXQKKwltb3ZlbAlFWENfRUEoJWE2KSwlYTAJfGEwIGhhcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlcgorCisJYnNybAlkZXN0X2RibAl8c3RvcmUgdGhlIHJlc3VsdAorCW9yaWwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCW12b3V0X2VuZAorCit8Cit8IEhhbmRsZSBjYXRhc3Ryb3BoaWMgb3ZlcmZsb3cgY2FzZXMgaGVyZQorfAorc3Bfb3ZlcjoKK3wgVGVtcCBmaXggZm9yIHogYml0IHNldCBpbiB1bmZfc3ViCisJbW92ZWwJVVNFUl9GUFNSKCVhNiksLSglYTcpCisKKwltb3ZlbAkjMSwlZDAKKwlsZWFsCUZQX1NDUjEoJWE2KSwlYTAJfHVzZSBGUF9TQ1IxIGZvciBjcmVhdGluZyByZXN1bHQKKwltb3ZlbAlFVEVNUF9FWCglYTYpLCglYTApCisJbW92ZWwJRVRFTVBfSEkoJWE2KSw0KCVhMCkKKwltb3ZlbAlFVEVNUF9MTyglYTYpLDgoJWEwKQorCWJzcmwJb3ZmX3JlcworCisJbW92ZWwJKCVhNykrLFVTRVJfRlBTUiglYTYpCisKKwltb3ZlbAklYTAsJWExCisJbW92ZWwJRVhDX0VBKCVhNiksJWEwCisJYnNybAlkZXN0X3NnbAorCW9ybAkjb3ZmaW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK2RwX292ZXI6Cit8IFRlbXAgZml4IGZvciB6IGJpdCBzZXQgaW4gb3ZmX3JlcworCW1vdmVsCVVTRVJfRlBTUiglYTYpLC0oJWE3KQorCisJbW92ZWwJIzIsJWQwCisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCXx1c2UgRlBfU0NSMSBmb3IgY3JlYXRpbmcgcmVzdWx0CisJbW92ZWwJRVRFTVBfRVgoJWE2KSwoJWEwKQorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApCisJbW92ZWwJRVRFTVBfTE8oJWE2KSw4KCVhMCkKKwlic3JsCW92Zl9yZXMKKworCW1vdmVsCSglYTcpKyxVU0VSX0ZQU1IoJWE2KQorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAorCWJzcmwJZGVzdF9kYmwKKwlvcmwJI292ZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCW12b3V0X2VuZAorCit8Cit8CURQU1BETlJNCit8Cit8IFRoaXMgc3Vicm91dGluZSB0YWtlcyBhbiBleHRlbmRlZCBub3JtYWxpemVkIG51bWJlciBhbmQgZGVub3JtYWxpemVzCit8IGl0IHRvIHRoZSBnaXZlbiByb3VuZCBwcmVjaXNpb24uIFRoaXMgc3Vicm91dGluZSBhbHNvIGRlY3JlbWVudHMKK3wgdGhlIGlucHV0IG9wZXJhbmQncyBleHBvbmVudCBieSAxIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQKK3wgZGVzdF9zZ2wgb3IgZGVzdF9kYmwgZXhwZWN0cyBhIG5vcm1hbGl6ZWQgbnVtYmVyJ3MgYmlhcy4KK3wKK3wgSW5wdXQ6IGEwICBwb2ludHMgdG8gYSBub3JtYWxpemVkIG51bWJlciBpbiBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wJIGQwICBpcyB0aGUgcm91bmQgcHJlY2lzaW9uICg9MSBmb3Igc2dsOyA9MiBmb3IgZGJsKQorfAkgZDEgIGlzIHRoZSBzaW5nbGUgcHJlY2lzaW9uIG9yIGRvdWJsZSBwcmVjaXNpb24KK3wJICAgICBkZW5vcm0gdGhyZXNob2xkCit8Cit8IE91dHB1dDogKEluIHRoZSBmb3JtYXQgZm9yIGRlc3Rfc2dsIG9yIGRlc3RfZGJsKQorfAkgYTAgICBwb2ludHMgdG8gdGhlIGRlc3RpbmF0aW9uCit8CSBhMSAgIHBvaW50cyB0byB0aGUgb3BlcmFuZAorfAorfCBFeGNlcHRpb25zOiBSZXBvcnRzIGluZXhhY3QgMiBleGNlcHRpb24gYnkgc2V0dGluZyBVU0VSX0ZQU1IgYml0cworfAorZHBzcGRucm06CisJbW92ZWwJJWQwLC0oJWE3KQl8c2F2ZSByb3VuZCBwcmVjaXNpb24KKwljbHJsCSVkMAkJfGNsZWFyIGluaXRpYWwgZyxyLHMKKwlic3JsCWRucm1fbHAJCXxjYXJlZnVsIHdpdGggZDAsIGl0J3MgbmVlZGVkIGJ5IHJvdW5kCisKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMSB8Z2V0IHJvdW5kaW5nIG1vZGUKKwlzd2FwCSVkMQorCW1vdmV3CTIoJWE3KSwlZDEJfHNldCByb3VuZGluZyBwcmVjaXNpb24KKwlzd2FwCSVkMQkJfGF0IHRoaXMgcG9pbnQgZDEgaGFzIFBSRUMvTU9ERSBpbmZvCisJYnNybAlyb3VuZAkJfHJvdW5kIHJlc3VsdCwgc2V0cyB0aGUgaW5leCBiaXQgaW4KK3wJCQkJO1VTRVJfRlBTUiBpZiBuZWVkZWQKKworCW1vdmV3CSMxLCVkMAorCXN1YncJJWQwLExPQ0FMX0VYKCVhMCkgfGFjY291bnQgZm9yIGRpZmZlcmVuY2UgaW4gZGVub3JtCit8CQkJCTt2cyBub3JtIGJpYXMKKworCW1vdmVsCSVhMCwlYTEJCXxhMSBoYXMgdGhlIG9wZXJhbmQgaW5wdXQKKwltb3ZlbAlFWENfRUEoJWE2KSwlYTAJfGEwIGhhcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlcgorCWFkZHcJIzQsJWE3CQl8cG9wIHN0YWNrCisJcnRzCit8Cit8IFNFVF9YT1AgaW5pdGlhbGl6ZWQgV0JURU1QIHdpdGggdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgYTAKK3wgaW5wdXQ6IGEwIHBvaW50cyB0byBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3NldF94b3A6CisJbW92ZWwJTE9DQUxfRVgoJWEwKSxXQlRFTVBfRVgoJWE2KQorCW1vdmVsCUxPQ0FMX0hJKCVhMCksV0JURU1QX0hJKCVhNikKKwltb3ZlbAlMT0NBTF9MTyglYTApLFdCVEVNUF9MTyglYTYpCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQorCWJlcXMJc3hvcAorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorc3hvcDoKKwliZmNscglTVEFHKCVhNil7IzU6IzR9CXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAsc2JpdAorCXJ0cworfAorfAlQX01PVkUKK3wKK3BfbW92ZXQ6CisJLmxvbmcJcF9tb3ZlCisJLmxvbmcJcF9tb3ZlegorCS5sb25nCXBfbW92ZWkKKwkubG9uZwlwX21vdmVuCisJLmxvbmcJcF9tb3ZlCitwX3JlZ2Q6CisJLmxvbmcJcF9keWQwCisJLmxvbmcJcF9keWQxCisJLmxvbmcJcF9keWQyCisJLmxvbmcJcF9keWQzCisJLmxvbmcJcF9keWQ0CisJLmxvbmcJcF9keWQ1CisJLmxvbmcJcF9keWQ2CisJLmxvbmcJcF9keWQ3CisKK3BhY2tfb3V0OgorCWxlYWwJcF9tb3ZldCwlYTAJfGxvYWQgam1wIHRhYmxlIGFkZHJlc3MKKwltb3ZldwlTVEFHKCVhNiksJWQwCXxnZXQgc291cmNlIHRhZworCWJmZXh0dQklZDB7IzE2OiMzfSwlZDAJfGlzb2xhdGUgc291cmNlIGJpdHMKKwltb3ZlbAkoJWEwLCVkMC53KjQpLCVhMAl8bG9hZCBhMCB3aXRoIHJvdXRpbmUgbGFiZWwgZm9yIHRhZworCWptcAkoJWEwKQkJfGdvIHRvIHRoZSByb3V0aW5lCisKK3Bfd3JpdGU6CisJbW92ZWwJIzB4MGMsJWQwCXxnZXQgYnl0ZSBjb3VudAorCW1vdmVsCUVYQ19FQSglYTYpLCVhMQl8Z2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisJYnNyCW1lbV93cml0ZQl8d3JpdGUgdGhlIHVzZXIncyBkZXN0aW5hdGlvbgorCW1vdmViCSMwLENVX1NBVkVQQyglYTYpIHxzZXQgdGhlIGN1IHNhdmUgcGMgdG8gYWxsIDAncworCit8Cit8IEFsc28gbm90ZSB0aGF0IHRoZSBkdGFnIG11c3QgYmUgc2V0IHRvIG5vcm0gaGVyZSAtIHRoaXMgaXMgYmVjYXVzZQorfCB0aGUgMDQwIHVzZXMgdGhlIGR0YWcgdG8gZXhlY3V0ZSB0aGUgY29ycmVjdCBtaWNyb2NvZGUuCit8CisgICAgICAgIGJmY2xyICAgIERUQUcoJWE2KXsjMDojM30gIHxzZXQgZHRhZyB0byBub3JtCisKKwlydHMKKworfCBOb3RlcyBvbiBoYW5kbGluZyBvZiBzcGVjaWFsIGNhc2UgKHplcm8sIGluZiwgYW5kIG5hbikgaW5wdXRzOgorfAkxLiBPcGVyciBpcyBub3Qgc2lnbmFsbGVkIGlmIHRoZSBrLWZhY3RvciBpcyBncmVhdGVyIHRoYW4gMTguCit8CTIuIFBlciB0aGUgbWFudWFsLCBzdGF0dXMgYml0cyBhcmUgbm90IHNldC4KK3wKKworcF9tb3ZlOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYnRzdGwJI2tmYWN0X2JpdCwlZDAJfHRlc3QgZm9yIGR5bmFtaWMgay1mYWN0b3IKKwliZXFzCXN0YXRpY2sJCXxpZiBjbGVhciwgay1mYWN0b3IgaXMgc3RhdGljCitkeW5hbWljazoKKwliZmV4dHUJJWQweyMyNTojM30sJWQwCXxpc29sYXRlIHJlZ2lzdGVyIGZvciBkeW5hbWljIGstZmFjdG9yCisJbGVhCXBfcmVnZCwlYTAKKwltb3ZlbAklYTBAKCVkMDpsOjQpLCVhMAorCWptcAkoJWEwKQorc3RhdGljazoKKwlhbmRpdwkjMHgwMDdmLCVkMAl8Z2V0IGstZmFjdG9yCisJYmZleHRzCSVkMHsjMjU6Izd9LCVkMAl8c2lnbiBleHRlbmQgZDAgZm9yIGJpbmRlYworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfGEwIHdpbGwgcG9pbnQgdG8gdGhlIHBhY2tlZCBkZWNpbWFsCisJYnNybAliaW5kZWMJCXxwZXJmb3JtIHRoZSBjb252ZXJ0OyBkYXRhIGF0IGE2CisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCXxsb2FkIGEwIHdpdGggcmVzdWx0IGFkZHJlc3MKKwlicmFsCXBfd3JpdGUKK3BfbW92ZXo6CisJbGVhbAlFVEVNUCglYTYpLCVhMAl8YTAgd2lsbCBwb2ludCB0byB0aGUgcGFja2VkIGRlY2ltYWwKKwljbHJ3CTIoJWEwKQkJfGNsZWFyIGxvd2VyIHdvcmQgb2YgZXhwCisJY2xybAk0KCVhMCkJCXxsb2FkIHNlY29uZCBsd29yZCBvZiBaRVJPCisJY2xybAk4KCVhMCkJCXxsb2FkIHRoaXJkIGx3b3JkIG9mIFpFUk8KKwlicmEJcF93cml0ZQkJfGdvIHdyaXRlIHJlc3VsdHMKK3BfbW92ZWk6CisJZm1vdmVsCSMwLCVGUFNSCQl8Y2xlYXIgYWlvcAorCWxlYWwJRVRFTVAoJWE2KSwlYTAJfGEwIHdpbGwgcG9pbnQgdG8gdGhlIHBhY2tlZCBkZWNpbWFsCisJY2xydwkyKCVhMCkJCXxjbGVhciBsb3dlciB3b3JkIG9mIGV4cAorCWJyYQlwX3dyaXRlCQl8Z28gd3JpdGUgdGhlIHJlc3VsdAorcF9tb3ZlbjoKKwlsZWFsCUVURU1QKCVhNiksJWEwCXxhMCB3aWxsIHBvaW50IHRvIHRoZSBwYWNrZWQgZGVjaW1hbAorCWNscncJMiglYTApCQl8Y2xlYXIgbG93ZXIgd29yZCBvZiBleHAKKwlicmEJcF93cml0ZQkJfGdvIHdyaXRlIHRoZSByZXN1bHQKKworfAorfCBSb3V0aW5lcyB0byByZWFkIHRoZSBkeW5hbWljIGstZmFjdG9yIGZyb20gRG4uCit8CitwX2R5ZDA6CisJbW92ZWwJVVNFUl9EMCglYTYpLCVkMAorCWJyYXMJc3RhdGljaworcF9keWQxOgorCW1vdmVsCVVTRVJfRDEoJWE2KSwlZDAKKwlicmFzCXN0YXRpY2sKK3BfZHlkMjoKKwltb3ZlbAklZDIsJWQwCisJYnJhcwlzdGF0aWNrCitwX2R5ZDM6CisJbW92ZWwJJWQzLCVkMAorCWJyYXMJc3RhdGljaworcF9keWQ0OgorCW1vdmVsCSVkNCwlZDAKKwlicmFzCXN0YXRpY2sKK3BfZHlkNToKKwltb3ZlbAklZDUsJWQwCisJYnJhcwlzdGF0aWNrCitwX2R5ZDY6CisJbW92ZWwJJWQ2LCVkMAorCWJyYQlzdGF0aWNrCitwX2R5ZDc6CisJbW92ZWwJJWQ3LCVkMAorCWJyYQlzdGF0aWNrCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9yb3VuZC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvcm91bmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvcm91bmQuUwpAQCAtMCwwICsxLDY0OSBAQAorfAorfAlyb3VuZC5zYSAzLjQgNy8yOS85MQorfAorfAloYW5kbGUgcm91bmRpbmcgYW5kIG5vcm1hbGl6YXRpb24gdGFza3MKK3wKK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xST1VORAlpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK3wKK3wJcm91bmQgLS0tIHJvdW5kIHJlc3VsdCBhY2NvcmRpbmcgdG8gcHJlY2lzaW9uL21vZGUKK3wKK3wJYTAgcG9pbnRzIHRvIHRoZSBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wJZDEoaGlnaCB3b3JkKSBjb250YWlucyByb3VuZGluZyBwcmVjaXNpb246Cit8CQlleHQgPSAkMDAwMHh4eHgKK3wJCXNnbCA9ICQwMDAxeHh4eAorfAkJZGJsID0gJDAwMDJ4eHh4Cit8CWQxKGxvdyB3b3JkKSBjb250YWlucyByb3VuZGluZyBtb2RlOgorfAkJUk4gID0gJHh4eHgwMDAwCit8CQlSWiAgPSAkeHh4eDAwMDEKK3wJCVJNICA9ICR4eHh4MDAxMAorfAkJUlAgID0gJHh4eHgwMDExCit8CWQwezMxOjI5fSBjb250YWlucyB0aGUgZyxyLHMgYml0cyAoZXh0ZW5kZWQpCit8Cit8CU9uIHJldHVybiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBhMCBpcyBjb3JyZWN0bHkgcm91bmRlZCwKK3wJYTAgaXMgcHJlc2VydmVkIGFuZCB0aGUgZy1yLXMgYml0cyBpbiBkMCBhcmUgY2xlYXJlZC4KK3wJVGhlIHJlc3VsdCBpcyBub3QgdHlwZWQgLSB0aGUgdGFnIGZpZWxkIGlzIGludmFsaWQuICBUaGUKK3wJcmVzdWx0IGlzIHN0aWxsIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQuCit8Cit8CVRoZSBJTkVYIGJpdCBvZiBVU0VSX0ZQU1Igd2lsbCBiZSBzZXQgaWYgdGhlIHJvdW5kZWQgcmVzdWx0IHdhcworfAlpbmV4YWN0IChpLmUuIGlmIGFueSBvZiB0aGUgZy1yLXMgYml0cyB3ZXJlIHNldCkuCit8CisKKwkuZ2xvYmFsCXJvdW5kCityb3VuZDoKK3wgSWYgZz1yPXM9MCB0aGVuIHJlc3VsdCBpcyBleGFjdCBhbmQgcm91bmQgaXMgZG9uZSwgZWxzZSBzZXQKK3wgdGhlIGluZXggZmxhZyBpbiBzdGF0dXMgcmVnIGFuZCBjb250aW51ZS4KK3wKKwlic3JzCWV4dF9ncnMJCQl8dGhpcyBzdWJyb3V0aW5lIGxvb2tzIGF0IHRoZQorfAkJCQkJOnJvdW5kaW5nIHByZWNpc2lvbiBhbmQgc2V0cworfAkJCQkJO3RoZSBhcHByb3ByaWF0ZSBnLXItcyBiaXRzLgorCXRzdGwJJWQwCQkJfGlmIGdycyBhcmUgemVybywgZ28gZm9yY2UKKwlibmUJcm5kX2NvbnQJCXxsb3dlciBiaXRzIHRvIHplcm8gZm9yIHNpemUKKworCXN3YXAJJWQxCQkJfHNldCB1cCBkMS53IGZvciByb3VuZCBwcmVjLgorCWJyYQl0cnVuY2F0ZQorCitybmRfY29udDoKK3wKK3wgVXNlIHJvdW5kaW5nIG1vZGUgYXMgYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgZm9yIHRoZXNlIG1vZGVzLgorfAorCW9ybAkjaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IGluZXgyL2FpbmV4CisJbGVhCW1vZGVfdGFiLCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCit8Cit8IEp1bXAgdGFibGUgaW5kZXhlZCBieSByb3VuZGluZyBtb2RlIGluIGQxLncuICBBbGwgZm9sbG93aW5nIGFzc3VtZXMKK3wgZ3JzICE9IDAuCit8Cittb2RlX3RhYjoKKwkubG9uZwlybmRfbmVhcgorCS5sb25nCXJuZF96ZXJvCisJLmxvbmcJcm5kX21udXMKKwkubG9uZwlybmRfcGx1cworfAorfAlST1VORCBQTFVTIElORklOSVRZCit8Cit8CUlmIHNpZ24gb2YgZnAgbnVtYmVyID0gMCAocG9zaXRpdmUpLCB0aGVuIGFkZCAxIHRvIGwuCit8CitybmRfcGx1czoKKwlzd2FwCSVkMQkJCXxzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisJdHN0YglMT0NBTF9TR04oJWEwKQkJfGNoZWNrIGZvciBzaWduCisJYm1pCXRydW5jYXRlCQl8aWYgcG9zaXRpdmUgdGhlbiB0cnVuY2F0ZQorCW1vdmVsCSMweGZmZmZmZmZmLCVkMAkJfGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKKwlsZWEJYWRkX3RvX2wsJWExCisJbW92ZWwJKCVhMSwlZDEudyo0KSwlYTEKKwlqbXAJKCVhMSkKK3wKK3wJUk9VTkQgTUlOVVMgSU5GSU5JVFkKK3wKK3wJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAxIChuZWdhdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4KK3wKK3JuZF9tbnVzOgorCXN3YXAJJWQxCQkJfHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKwl0c3RiCUxPQ0FMX1NHTiglYTApCQl8Y2hlY2sgZm9yIHNpZ24KKwlicGwJdHJ1bmNhdGUJCXxpZiBuZWdhdGl2ZSB0aGVuIHRydW5jYXRlCisJbW92ZWwJIzB4ZmZmZmZmZmYsJWQwCQl8Zm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncworCWxlYQlhZGRfdG9fbCwlYTEKKwltb3ZlbAkoJWExLCVkMS53KjQpLCVhMQorCWptcAkoJWExKQorfAorfAlST1VORCBaRVJPCit8Cit8CUFsd2F5cyB0cnVuY2F0ZS4KK3JuZF96ZXJvOgorCXN3YXAJJWQxCQkJfHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKwlicmEJdHJ1bmNhdGUKK3wKK3wKK3wJUk9VTkQgTkVBUkVTVAorfAorfAlJZiAoZz0xKSwgdGhlbiBhZGQgMSB0byBsIGFuZCBpZiAocj1zPTApLCB0aGVuIGNsZWFyIGwKK3wJTm90ZSB0aGF0IHRoaXMgd2lsbCByb3VuZCB0byBldmVuIGluIGNhc2Ugb2YgYSB0aWUuCit8CitybmRfbmVhcjoKKwlzd2FwCSVkMQkJCXxzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisJYXNsbAkjMSwlZDAJCQl8c2hpZnQgZy1iaXQgdG8gYy1iaXQKKwliY2MJdHJ1bmNhdGUJCXxpZiAoZz0xKSB0aGVuCisJbGVhCWFkZF90b19sLCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK3wKK3wJZXh0X2dycyAtLS0gZXh0cmFjdCBndWFyZCwgcm91bmQgYW5kIHN0aWNreSBiaXRzCit8Cit8IElucHV0OglkMSA9CQlQUkVDOlJPVU5ECit8IE91dHB1dDoJZDB7MzE6Mjl9PQlndWFyZCwgcm91bmQsIHN0aWNreQorfAorfCBUaGUgZXh0X2dycyBleHRyYWN0IHRoZSBndWFyZC9yb3VuZC9zdGlja3kgYml0cyBhY2NvcmRpbmcgdG8gdGhlCit8IHNlbGVjdGVkIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQgaXMgY2FsbGVkIGJ5IHRoZSByb3VuZCBzdWJyb3V0aW5lCit8IG9ubHkuICBBbGwgcmVnaXN0ZXJzIGV4Y2VwdCBkMCBhcmUga2VwdCBpbnRhY3QuIGQwIGJlY29tZXMgYW4KK3wgdXBkYXRlZCBndWFyZCxyb3VuZCxzdGlja3kgaW4gZDB7MzE6Mjl9Cit8Cit8IE5vdGVzOiB0aGUgZXh0X2dycyB1c2VzIHRoZSByb3VuZCBQUkVDLCBhbmQgdGhlcmVmb3JlIGhhcyB0byBzd2FwIGQxCit8CSBwcmlvciB0byB1c2FnZSwgYW5kIG5lZWRzIHRvIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwuCit8CitleHRfZ3JzOgorCXN3YXAJJWQxCQkJfGhhdmUgZDEudyBwb2ludCB0byByb3VuZCBwcmVjaXNpb24KKwljbXBpdwkjMCwlZDEKKwlibmVzCXNnbF9vcl9kYmwKKwlicmFzCWVuZF9leHRfZ3JzCisKK3NnbF9vcl9kYmw6CisJbW92ZW1sCSVkMi8lZDMsLSglYTcpCQl8bWFrZSBzb21lIHRlbXAgcmVnaXN0ZXJzCisJY21waXcJIzEsJWQxCisJYm5lcwlncnNfZGJsCitncnNfc2dsOgorCWJmZXh0dQlMT0NBTF9ISSglYTApeyMyNDojMn0sJWQzCXxzZ2wgcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKKwltb3ZlbAkjMzAsJWQyCQkJfG9mIHRoZSBzZ2wgcHJlYy4gbGltaXRzCisJbHNsbAklZDIsJWQzCQkJfHNoaWZ0IGctciBiaXRzIHRvIE1TQiBvZiBkMworCW1vdmVsCUxPQ0FMX0hJKCVhMCksJWQyCQl8Z2V0IHdvcmQgMiBmb3Igcy1iaXQgdGVzdAorCWFuZGlsCSMweDAwMDAwMDNmLCVkMgkJfHMgYml0IGlzIHRoZSBvciBvZiBhbGwgb3RoZXIKKwlibmVzCXN0X3N0a3kJCQl8Yml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCisJdHN0bAlMT0NBTF9MTyglYTApCQl8dGVzdCBsb3dlciBtYW50aXNzYQorCWJuZXMJc3Rfc3RreQkJCXxpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCXRzdGwJJWQwCQkJfHRlc3Qgb3JpZ2luYWwgZyxyLHMKKwlibmVzCXN0X3N0a3kJCQl8aWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKKwlicmFzCWVuZF9zZAkJCXxpZiB3b3JkcyAzIGFuZCA0IGFyZSBjbHIsIGV4aXQKK2dyc19kYmw6CisJYmZleHR1CUxPQ0FMX0xPKCVhMCl7IzIxOiMyfSwlZDMJfGRibC1wcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAorCW1vdmVsCSMzMCwlZDIJCQl8b2YgdGhlIGRibCBwcmVjLiBsaW1pdHMKKwlsc2xsCSVkMiwlZDMJCQl8c2hpZnQgZy1yIGJpdHMgdG8gdGhlIE1TQiBvZiBkMworCW1vdmVsCUxPQ0FMX0xPKCVhMCksJWQyCQl8Z2V0IGxvd2VyIG1hbnRpc3NhICBmb3Igcy1iaXQgdGVzdAorCWFuZGlsCSMweDAwMDAwMWZmLCVkMgkJfHMgYml0IGlzIHRoZSBvci1pbmcgb2YgYWxsCisJYm5lcwlzdF9zdGt5CQkJfG90aGVyIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgorCXRzdGwJJWQwCQkJfHRlc3Qgd29yZCBvcmlnaW5hbCBnLHIscworCWJuZXMJc3Rfc3RreQkJCXxpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCWJyYXMJZW5kX3NkCQkJfGlmIGNsZWFyLCBleGl0CitzdF9zdGt5OgorCWJzZXQJI3JuZF9zdGt5X2JpdCwlZDMKK2VuZF9zZDoKKwltb3ZlbAklZDMsJWQwCQkJfHJldHVybiBncnMgdG8gZDAKKwltb3ZlbWwJKCVhNykrLCVkMi8lZDMJCXxyZXN0b3JlIHNjcmF0Y2ggcmVnaXN0ZXJzCitlbmRfZXh0X2dyczoKKwlzd2FwCSVkMQkJCXxyZXN0b3JlIGQxIHRvIG9yaWdpbmFsCisJcnRzCisKK3wqKioqKioqKioqKioqKioqKioqICBMb2NhbCBFcXVhdGVzCisJLnNldAlhZF8xX3NnbCwweDAwMDAwMTAwCXwgIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIHNnbCBwcmVjCisJLnNldAlhZF8xX2RibCwweDAwMDAwODAwCXwgIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIGRibCBwcmVjCisKKworfEp1bXAgdGFibGUgZm9yIGFkZGluZyAxIHRvIHRoZSBsLWJpdCBpbmRleGVkIGJ5IHJuZCBwcmVjCisKK2FkZF90b19sOgorCS5sb25nCWFkZF9leHQKKwkubG9uZwlhZGRfc2dsCisJLmxvbmcJYWRkX2RibAorCS5sb25nCWFkZF9kYmwKK3wKK3wJQUREIFNJTkdMRQorfAorYWRkX3NnbDoKKwlhZGRsCSNhZF8xX3NnbCxMT0NBTF9ISSglYTApCisJYmNjcwlzY2NfY2xyCQkJfG5vIG1hbnRpc3NhIG92ZXJmbG93CisJcm94cncgIExPQ0FMX0hJKCVhMCkJCXxzaGlmdCB2LWJpdCBiYWNrIGluCisJcm94cncgIExPQ0FMX0hJKzIoJWEwKQkJfHNoaWZ0IHYtYml0IGJhY2sgaW4KKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8YW5kIGluY3IgZXhwb25lbnQKK3NjY19jbHI6CisJdHN0bAklZDAJCQl8dGVzdCBmb3IgcnMgPSAwCisJYm5lcwlzZ2xfZG9uZQorCWFuZGl3ICAjMHhmZTAwLExPQ0FMX0hJKzIoJWEwKQl8Y2xlYXIgdGhlIGwtYml0CitzZ2xfZG9uZToKKwlhbmRpbAkjMHhmZmZmZmYwMCxMT0NBTF9ISSglYTApIHx0cnVuY2F0ZSBiaXRzIGJleW9uZCBzZ2wgbGltaXQKKwljbHJsCUxPQ0FMX0xPKCVhMCkJCXxjbGVhciBkMgorCXJ0cworCit8Cit8CUFERCBFWFRFTkRFRAorfAorYWRkX2V4dDoKKwlhZGRxbCAgIzEsTE9DQUxfTE8oJWEwKQkJfGFkZCAxIHRvIGwtYml0CisJYmNjcwl4Y2NfY2xyCQkJfHRlc3QgZm9yIGNhcnJ5IG91dAorCWFkZHFsICAjMSxMT0NBTF9ISSglYTApCQl8cHJvcGFnYXRlIGNhcnJ5CisJYmNjcwl4Y2NfY2xyCisJcm94cncgIExPQ0FMX0hJKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3ICBMT0NBTF9ISSsyKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3CUxPQ0FMX0xPKCVhMCkKKwlyb3hydwlMT0NBTF9MTysyKCVhMCkKKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8YW5kIGluYyBleHAKK3hjY19jbHI6CisJdHN0bAklZDAJCQl8dGVzdCBycyA9IDAKKwlibmVzCWFkZF9leHRfZG9uZQorCWFuZGliCSMweGZlLExPQ0FMX0xPKzMoJWEwKQl8Y2xlYXIgdGhlIGwgYml0CithZGRfZXh0X2RvbmU6CisJcnRzCit8Cit8CUFERCBET1VCTEUKK3wKK2FkZF9kYmw6CisJYWRkbAkjYWRfMV9kYmwsTE9DQUxfTE8oJWEwKQorCWJjY3MJZGNjX2NscgorCWFkZHFsCSMxLExPQ0FMX0hJKCVhMCkJCXxwcm9wYWdhdGUgY2FycnkKKwliY2NzCWRjY19jbHIKKwlyb3hydwlMT0NBTF9ISSglYTApCQl8bWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hydwlMT0NBTF9ISSsyKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3CUxPQ0FMX0xPKCVhMCkKKwlyb3hydwlMT0NBTF9MTysyKCVhMCkKKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8aW5jciBleHBvbmVudAorZGNjX2NscjoKKwl0c3RsCSVkMAkJCXx0ZXN0IGZvciBycyA9IDAKKwlibmVzCWRibF9kb25lCisJYW5kaXcJIzB4ZjAwMCxMT0NBTF9MTysyKCVhMCkJfGNsZWFyIHRoZSBsLWJpdAorCitkYmxfZG9uZToKKwlhbmRpbAkjMHhmZmZmZjgwMCxMT0NBTF9MTyglYTApIHx0cnVuY2F0ZSBiaXRzIGJleW9uZCBkYmwgbGltaXQKKwlydHMKKworZXJyb3I6CisJcnRzCit8Cit8IFRydW5jYXRlIGFsbCBvdGhlciBiaXRzCit8Cit0cnVuY3Q6CisJLmxvbmcJZW5kX3JuZAorCS5sb25nCXNnbF9kb25lCisJLmxvbmcJZGJsX2RvbmUKKwkubG9uZwlkYmxfZG9uZQorCit0cnVuY2F0ZToKKwlsZWEJdHJ1bmN0LCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK2VuZF9ybmQ6CisJcnRzCisKK3wKK3wJTk9STUFMSVpFCit8Cit8IFRoZXNlIHJvdXRpbmVzIChucm1femVybyAmIG5ybV9zZXQpIG5vcm1hbGl6ZSB0aGUgdW5ub3JtLiAgVGhpcworfCBpcyBkb25lIGJ5IHNoaWZ0aW5nIHRoZSBtYW50aXNzYSBsZWZ0IHdoaWxlIGRlY3JlbWVudGluZyB0aGUKK3wgZXhwb25lbnQuCit8Cit8IE5STV9TRVQgc2hpZnRzIGFuZCBkZWNyZW1lbnRzIHVudGlsIHRoZXJlIGlzIGEgMSBzZXQgaW4gdGhlIGludGVnZXIKK3wgYml0IG9mIHRoZSBtYW50aXNzYSAobXNiIGluIGQxKS4KK3wKK3wgTlJNX1pFUk8gc2hpZnRzIGFuZCBkZWNyZW1lbnRzIHVudGlsIHRoZXJlIGlzIGEgMSBzZXQgaW4gdGhlIGludGVnZXIKK3wgYml0IG9mIHRoZSBtYW50aXNzYSAobXNiIGluIGQxKSB1bmxlc3MgdGhpcyB3b3VsZCBtZWFuIHRoZSBleHBvbmVudAorfCB3b3VsZCBnbyBsZXNzIHRoYW4gMC4gIEluIHRoYXQgY2FzZSB0aGUgbnVtYmVyIGJlY29tZXMgYSBkZW5vcm0gLSB0aGUKK3wgZXhwb25lbnQgKGQwKSBpcyBzZXQgdG8gMCBhbmQgdGhlIG1hbnRpc3NhIChkMSAmIGQyKSBpcyBub3QKK3wgbm9ybWFsaXplZC4KK3wKK3wgTm90ZSB0aGF0IGJvdGggcm91dGluZXMgaGF2ZSBiZWVuIG9wdGltaXplZCAoZm9yIHRoZSB3b3JzdCBjYXNlKSBhbmQKK3wgdGhlcmVmb3JlIGRvIG5vdCBoYXZlIHRoZSBlYXN5IHRvIGZvbGxvdyBkZWNyZW1lbnQvc2hpZnQgbG9vcC4KK3wKK3wJTlJNX1pFUk8KK3wKK3wJRGlzdGFuY2UgdG8gZmlyc3QgMSBiaXQgaW4gbWFudGlzc2EgPSBYCit8CURpc3RhbmNlIHRvIDAgZnJvbSBleHBvbmVudCA9IFkKK3wJSWYgWCA8IFkKK3wJVGhlbgorfAkgIG5ybV9zZXQKK3wJRWxzZQorfAkgIHNoaWZ0IG1hbnRpc3NhIGJ5IFkKK3wJICBzZXQgZXhwb25lbnQgPSAwCit8Cit8aW5wdXQ6Cit8CUZQX1NDUjEgPSBleHBvbmVudCwgbXMgbWFudGlzc2EgcGFydCwgbHMgbWFudGlzc2EgcGFydAorfG91dHB1dDoKK3wJTF9TQ1IxezR9ID0gZnB0ZTE1IG9yIGV0ZTE1IGJpdAorfAorCS5nbG9iYWwJbnJtX3plcm8KK25ybV96ZXJvOgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQwCisJY21wdyAgICM2NCwlZDAgICAgICAgICAgfHNlZSBpZiBleHAgPiA2NAorCWJtaXMJZDBfbGVzcworCWJzcglucm1fc2V0CQl8ZXhwID4gNjQgc28gZXhwIHdvbid0IGV4Y2VlZCAwCisJcnRzCitkMF9sZXNzOgorCW1vdmVtbAklZDIvJWQzLyVkNS8lZDYsLSglYTcpCisJbW92ZWwJTE9DQUxfSEkoJWEwKSwlZDEKKwltb3ZlbAlMT0NBTF9MTyglYTApLCVkMgorCisJYmZmZm8JJWQxeyMwOiMzMn0sJWQzCXxnZXQgdGhlIGRpc3RhbmNlIHRvIHRoZSBmaXJzdCAxCit8CQkJCTtpbiBtcyBtYW50CisJYmVxcwltc19jbHIJCXxicmFuY2ggaWYgbm8gYml0cyB3ZXJlIHNldAorCWNtcHcJJWQzLCVkMAkJfG9mIFg+WQorCWJtaXMJZ3JlYXRlcgkJfHRoZW4gZXhwIHdpbGwgZ28gcGFzdCAwIChuZWcpIGlmCit8CQkJCTtpdCBpcyBqdXN0IHNoaWZ0ZWQKKwlic3IJbnJtX3NldAkJfGVsc2UgZXhwIHdvbid0IGdvIHBhc3QgMAorCW1vdmVtbAkoJWE3KSssJWQyLyVkMy8lZDUvJWQ2CisJcnRzCitncmVhdGVyOgorCW1vdmVsCSVkMiwlZDYJCXxzYXZlIGxzIG1hbnQgaW4gZDYKKwlsc2xsCSVkMCwlZDIJCXxzaGlmdCBscyBtYW50IGJ5IGNvdW50CisJbHNsbAklZDAsJWQxCQl8c2hpZnQgbXMgbWFudCBieSBjb3VudAorCW1vdmVsCSMzMiwlZDUKKwlzdWJsCSVkMCwlZDUJCXxtYWtlIG9wIGEgZGVub3JtIGJ5IHNoaWZ0aW5nIGJpdHMKKwlsc3JsCSVkNSwlZDYJCXxieSB0aGUgbnVtYmVyIGluIHRoZSBleHAsIHRoZW4KK3wJCQkJO3NldCBleHAgPSAwLgorCW9ybAklZDYsJWQxCQl8c2hpZnQgdGhlIGxzIG1hbnQgYml0cyBpbnRvIHRoZSBtcyBtYW50CisJbW92ZWwJIzAsJWQwCQl8c2FtZSBhcyBpZiBkZWNyZW1lbnRlZCBleHAgdG8gMAorfAkJCQk7d2hpbGUgc2hpZnRpbmcKKwltb3ZldwklZDAsTE9DQUxfRVgoJWEwKQorCW1vdmVsCSVkMSxMT0NBTF9ISSglYTApCisJbW92ZWwJJWQyLExPQ0FMX0xPKCVhMCkKKwltb3ZlbWwJKCVhNykrLCVkMi8lZDMvJWQ1LyVkNgorCXJ0cworbXNfY2xyOgorCWJmZmZvCSVkMnsjMDojMzJ9LCVkMwl8Y2hlY2sgaWYgYW55IGJpdHMgc2V0IGluIGxzIG1hbnQKKwliZXFzCWFsbF9jbHIJCXxicmFuY2ggaWYgbm9uZSBzZXQKKwlhZGR3CSMzMiwlZDMKKwljbXB3CSVkMywlZDAJCXxpZiBYPlkKKwlibWlzCWdyZWF0ZXIJCXx0aGVuIGJyYW5jaAorCWJzcglucm1fc2V0CQl8ZWxzZSBleHAgd29uJ3QgZ28gcGFzdCAwCisJbW92ZW1sCSglYTcpKywlZDIvJWQzLyVkNS8lZDYKKwlydHMKK2FsbF9jbHI6CisJbW92ZXcJIzAsTE9DQUxfRVgoJWEwKQl8bm8gbWFudGlzc2EgYml0cyBzZXQuIFNldCBleHAgPSAwLgorCW1vdmVtbAkoJWE3KSssJWQyLyVkMy8lZDUvJWQ2CisJcnRzCit8Cit8CU5STV9TRVQKK3wKKwkuZ2xvYmFsCW5ybV9zZXQKK25ybV9zZXQ6CisJbW92ZWwJJWQ3LC0oJWE3KQorCWJmZmZvCUxPQ0FMX0hJKCVhMCl7IzA6IzMyfSwlZDcgfGZpbmQgZmlyc3QgMSBpbiBtcyBtYW50IHRvIGQ3KQorCWJlcXMJbG93ZXIJCXxicmFuY2ggaWYgbXMgbWFudCBpcyBhbGwgMCdzCisKKwltb3ZlbAklZDYsLSglYTcpCisKKwlzdWJ3CSVkNyxMT0NBTF9FWCglYTApCXxzdWIgZXhwb25lbnQgYnkgY291bnQKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAl8ZDAgaGFzIG1zIG1hbnQKKwltb3ZlbAlMT0NBTF9MTyglYTApLCVkMSB8ZDEgaGFzIGxzIG1hbnQKKworCWxzbGwJJWQ3LCVkMAkJfHNoaWZ0IGZpcnN0IDEgdG8gaiBiaXQgcG9zaXRpb24KKwltb3ZlbAklZDEsJWQ2CQl8Y29weSBscyBtYW50IGludG8gZDYKKwlsc2xsCSVkNywlZDYJCXxzaGlmdCBscyBtYW50IGJ5IGNvdW50CisJbW92ZWwJJWQ2LExPQ0FMX0xPKCVhMCkJfHN0b3JlIGxzIG1hbnQgaW50byBtZW1vcnkKKwltb3ZlcWwJIzMyLCVkNgorCXN1YmwJJWQ3LCVkNgkJfGNvbnRpbnVlIHNoaWZ0CisJbHNybAklZDYsJWQxCQl8c2hpZnQgb2ZmIGFsbCBiaXRzIGJ1dCB0aG9zZSB0aGF0IHdpbGwKK3wJCQkJO2JlIHNoaWZ0ZWQgaW50byBtcyBtYW50CisJb3JsCSVkMSwlZDAJCXxzaGlmdCB0aGUgbHMgbWFudCBiaXRzIGludG8gdGhlIG1zIG1hbnQKKwltb3ZlbAklZDAsTE9DQUxfSEkoJWEwKQl8c3RvcmUgbXMgbWFudCBpbnRvIG1lbW9yeQorCW1vdmVtbAkoJWE3KSssJWQ3LyVkNgl8cmVzdG9yZSByZWdpc3RlcnMKKwlydHMKKworfAorfCBXZSBnZXQgaGVyZSBpZiBtcyBtYW50IHdhcyA9IDAsIGFuZCB3ZSBhc3N1bWUgbHMgbWFudCBoYXMgYml0cworfCBzZXQgKG90aGVyd2lzZSB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0YWdnZWQgYSB6ZXJvIG5vdCBhIGRlbm9ybSkuCit8Citsb3dlcjoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8ZDAgaGFzIGV4cG9uZW50CisJbW92ZWwJTE9DQUxfTE8oJWEwKSwlZDEJfGQxIGhhcyBscyBtYW50CisJc3VidwkjMzIsJWQwCQl8YWNjb3VudCBmb3IgbXMgbWFudCBiZWluZyBhbGwgemVyb3MKKwliZmZmbwklZDF7IzA6IzMyfSwlZDcJfGZpbmQgZmlyc3QgMSBpbiBscyBtYW50IHRvIGQ3KQorCXN1YncJJWQ3LCVkMAkJfHN1YnRyYWN0IHNoaWZ0IGNvdW50IGZyb20gZXhwCisJbHNsbAklZDcsJWQxCQl8c2hpZnQgZmlyc3QgMSB0byBpbnRlZ2VyIGJpdCBpbiBtcyBtYW50CisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJfHN0b3JlIG1zIG1hbnQKKwltb3ZlbAklZDEsTE9DQUxfSEkoJWEwKQl8c3RvcmUgZXhwCisJY2xybAlMT0NBTF9MTyglYTApCXxjbGVhciBscyBtYW50CisJbW92ZWwJKCVhNykrLCVkNworCXJ0cworfAorfAlkZW5vcm0gLS0tIGRlbm9ybWFsaXplIGFuIGludGVybWVkaWF0ZSByZXN1bHQKK3wKK3wJVXNlZCBieSB1bmRlcmZsb3cuCit8Cit8IElucHV0OgorfAlhMAkgcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAorfAkJIChpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0KQorfAorfAlkMDoJIHJvdW5kaW5nIHByZWNpc2lvbgorfCBPdXRwdXQ6Cit8CWEwCSBwb2ludHMgdG8gdGhlIGRlbm9ybWFsaXplZCByZXN1bHQKK3wJCSAoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkKK3wKK3wJZDAJaXMgZ3VhcmQscm91bmQsc3RpY2t5Cit8Cit8IGQwIGNvbWVzIGludG8gdGhpcyByb3V0aW5lIHdpdGggdGhlIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQKK3wgaXMgdGhlbiBsb2FkZWQgd2l0aCB0aGUgZGVub3JtYWxpemVkIGV4cG9uZW50IHRocmVzaG9sZCBmb3IgdGhlCit8IHJvdW5kaW5nIHByZWNpc2lvbi4KK3wKKworCS5nbG9iYWwJZGVub3JtCitkZW5vcm06CisJYnRzdGIJIzYsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgZm9yIGV4cG9uZW50cyBiZXR3ZWVuICQ3ZmZmLSQ0MDAwCisJYmVxcwlub19zZ25fZXh0CisJYnNldGIJIzcsTE9DQUxfRVgoJWEwKQl8c2lnbiBleHRlbmQgaWYgaXQgaXMgc28KK25vX3Nnbl9leHQ6CisKKwljbXBpYgkjMCwlZDAJCXxpZiAwIHRoZW4gZXh0ZW5kZWQgcHJlY2lzaW9uCisJYm5lcwlub3RfZXh0CQl8ZWxzZSBicmFuY2gKKworCWNscmwJJWQxCQl8bG9hZCBkMSB3aXRoIGV4dCB0aHJlc2hvbGQKKwljbHJsCSVkMAkJfGNsZWFyIHRoZSBzdGlja3kgZmxhZworCWJzcglkbnJtX2xwCQl8ZGVub3JtYWxpemUgdGhlIG51bWJlcgorCXRzdGIJJWQxCQl8Y2hlY2sgZm9yIGluZXgKKwliZXEJbm9faW5leAkJfGlmIGNsciwgbm8gaW5leAorCWJyYXMJZG5ybV9pbmV4CXxpZiBzZXQsIHNldCBpbmV4CisKK25vdF9leHQ6CisJY21waWwJIzEsJWQwCQl8aWYgMSB0aGVuIHNpbmdsZSBwcmVjaXNpb24KKwliZXFzCWxvYWRfc2dsCXxlbHNlIG11c3QgYmUgMiwgZG91YmxlIHByZWMKKworbG9hZF9kYmw6CisJbW92ZXcJI2RibF90aHJlc2gsJWQxCXxwdXQgY29weSBvZiB0aHJlc2hvbGQgaW4gZDEKKwltb3ZlbAklZDEsJWQwCQl8Y29weSBkMSBpbnRvIGQwCisJc3VidwlMT0NBTF9FWCglYTApLCVkMAl8ZGlmZiA9IHRocmVzaG9sZCAtIGV4cAorCWNtcHcJIzY3LCVkMAkJfGlmIGRpZmYgPiA2NyAobWFudCArIGdycyBiaXRzKQorCWJwbHMJY2hrX3N0a3kJfHRoZW4gYnJhbmNoIChhbGwgYml0cyB3b3VsZCBiZQorfAkJCQk7IHNoaWZ0ZWQgb2ZmIGluIGRlbm9ybSByb3V0aW5lKQorCWNscmwJJWQwCQl8ZWxzZSBjbGVhciB0aGUgc3RpY2t5IGZsYWcKKwlic3IJZG5ybV9scAkJfGRlbm9ybWFsaXplIHRoZSBudW1iZXIKKwl0c3RiCSVkMQkJfGNoZWNrIGZsYWcKKwliZXFzCW5vX2luZXgJCXxpZiBjbHIsIG5vIGluZXgKKwlicmFzCWRucm1faW5leAl8aWYgc2V0LCBzZXQgaW5leAorCitsb2FkX3NnbDoKKwltb3Zldwkjc2dsX3RocmVzaCwlZDEJfHB1dCBjb3B5IG9mIHRocmVzaG9sZCBpbiBkMQorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGQxIGludG8gZDAKKwlzdWJ3CUxPQ0FMX0VYKCVhMCksJWQwCXxkaWZmID0gdGhyZXNob2xkIC0gZXhwCisJY21wdwkjNjcsJWQwCQl8aWYgZGlmZiA+IDY3IChtYW50ICsgZ3JzIGJpdHMpCisJYnBscwljaGtfc3RreQl8dGhlbiBicmFuY2ggKGFsbCBiaXRzIHdvdWxkIGJlCit8CQkJCTsgc2hpZnRlZCBvZmYgaW4gZGVub3JtIHJvdXRpbmUpCisJY2xybAklZDAJCXxlbHNlIGNsZWFyIHRoZSBzdGlja3kgZmxhZworCWJzcglkbnJtX2xwCQl8ZGVub3JtYWxpemUgdGhlIG51bWJlcgorCXRzdGIJJWQxCQl8Y2hlY2sgZmxhZworCWJlcXMJbm9faW5leAkJfGlmIGNsciwgbm8gaW5leAorCWJyYXMJZG5ybV9pbmV4CXxpZiBzZXQsIHNldCBpbmV4CisKK2Noa19zdGt5OgorCXRzdGwJTE9DQUxfSEkoJWEwKQl8Y2hlY2sgZm9yIGFueSBiaXRzIHNldAorCWJuZXMJc2V0X3N0a3kKKwl0c3RsCUxPQ0FMX0xPKCVhMCkJfGNoZWNrIGZvciBhbnkgYml0cyBzZXQKKwlibmVzCXNldF9zdGt5CisJYnJhcwljbHJfbWFudAorc2V0X3N0a3k6CisJb3JsCSNpbngyYV9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgaW5leDIvYWluZXgKKwltb3ZlbAkjMHgyMDAwMDAwMCwlZDAJfHNldCBzdGlja3kgYml0IGluIHJldHVybiB2YWx1ZQorY2xyX21hbnQ6CisJbW92ZXcJJWQxLExPQ0FMX0VYKCVhMCkJCXxsb2FkIGV4cCB3aXRoIHRocmVzaG9sZAorCW1vdmVsCSMwLExPQ0FMX0hJKCVhMCkJfHNldCBkMSA9IDAgKG1zIG1hbnRpc3NhKQorCW1vdmVsCSMwLExPQ0FMX0xPKCVhMCkJCXxzZXQgZDIgPSAwIChtcyBtYW50aXNzYSkKKwlydHMKK2Rucm1faW5leDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBpbmV4Mi9haW5leAorbm9faW5leDoKKwlydHMKKworfAorfAlkbnJtX2xwIC0tLSBub3JtYWxpemUgZXhwb25lbnQvbWFudGlzc2EgdG8gc3BlY2lmaWVkIHRocmVzaG9sZAorfAorfCBJbnB1dDoKK3wJYTAJCXBvaW50cyB0byB0aGUgb3BlcmFuZCB0byBiZSBkZW5vcm1hbGl6ZWQKK3wJZDB7MzE6Mjl9CWluaXRpYWwgZ3VhcmQscm91bmQsc3RpY2t5Cit8CWQxezE1OjB9CWRlbm9ybWFsaXphdGlvbiB0aHJlc2hvbGQKK3wgT3V0cHV0OgorfAlhMAkJcG9pbnRzIHRvIHRoZSBkZW5vcm1hbGl6ZWQgb3BlcmFuZAorfAlkMHszMToyOX0JZmluYWwgZ3VhcmQscm91bmQsc3RpY2t5Cit8CWQxLmIJCWluZXhhY3QgZmxhZzogIGFsbCBvbmVzIG1lYW5zIGluZXhhY3QgcmVzdWx0Cit8Cit8IFRoZSBMT0NBTF9MTyBhbmQgTE9DQUxfR1JTIHBhcnRzIG9mIHRoZSB2YWx1ZSBhcmUgY29waWVkIHRvIEZQX1NDUjIKK3wgc28gdGhhdCBiZmV4dCBjYW4gYmUgdXNlZCB0byBleHRyYWN0IHRoZSBuZXcgbG93IHBhcnQgb2YgdGhlIG1hbnRpc3NhLgorfCBEbnJtX2xwIGNhbiBiZSBjYWxsZWQgd2l0aCBhMCBwb2ludGluZyB0byBFVEVNUCBvciBXQlRFTVAgYW5kIHRoZXJlCit8IGlzIG5vIExPQ0FMX0dSUyBzY3JhdGNoIHdvcmQgZm9sbG93aW5nIGl0IG9uIHRoZSBmc2F2ZSBmcmFtZS4KK3wKKwkuZ2xvYmFsCWRucm1fbHAKK2Rucm1fbHA6CisJbW92ZWwJJWQyLC0oJXNwKQkJfHNhdmUgZDIgZm9yIHRlbXAgdXNlCisJYnRzdGIJI0UzLEVfQllURSglYTYpCQl8dGVzdCBmb3IgdHlwZSBFMyBleGNlcHRpb24KKwliZXFzCW5vdF9FMwkJCXxub3QgdHlwZSBFMyBleGNlcHRpb24KKwliZmV4dHUJV0JURU1QX0dSUyglYTYpeyM2OiMzfSwlZDIJfGV4dHJhY3QgZ3VhcmQscm91bmQsIHN0aWNreSAgYml0CisJbW92ZWwJIzI5LCVkMAorCWxzbGwJJWQwLCVkMgkJCXxzaGlmdCBnLHIscyB0byB0aGVpciBwb3NpdGlvbnMKKwltb3ZlbAklZDIsJWQwCitub3RfRTM6CisJbW92ZWwJKCVzcCkrLCVkMgkJfHJlc3RvcmUgZDIKKwltb3ZlbAlMT0NBTF9MTyglYTApLEZQX1NDUjIrTE9DQUxfTE8oJWE2KQorCW1vdmVsCSVkMCxGUF9TQ1IyK0xPQ0FMX0dSUyglYTYpCisJbW92ZWwJJWQxLCVkMAkJCXxjb3B5IHRoZSBkZW5vcm0gdGhyZXNob2xkCisJc3VidwlMT0NBTF9FWCglYTApLCVkMQkJfGQxID0gdGhyZXNob2xkIC0gdW5zIGV4cG9uZW50CisJYmxlcwlub19scAkJCXxkMSA8PSAwCisJY21wdwkjMzIsJWQxCisJYmx0cwljYXNlXzEJCQl8MCA9IGQxIDwgMzIKKwljbXB3CSM2NCwlZDEKKwlibHRzCWNhc2VfMgkJCXwzMiA8PSBkMSA8IDY0CisJYnJhCWNhc2VfMwkJCXxkMSA+PSA2NAorfAorfCBObyBub3JtYWxpemF0aW9uIG5lY2Vzc2FyeQorfAorbm9fbHA6CisJY2xyYgklZDEJCQl8c2V0IG5vIGluZXgyIHJlcG9ydGVkCisJbW92ZWwJRlBfU0NSMitMT0NBTF9HUlMoJWE2KSwlZDAJfHJlc3RvcmUgb3JpZ2luYWwgZyxyLHMKKwlydHMKK3wKK3wgY2FzZSAoMDxkMTwzMikKK3wKK2Nhc2VfMToKKwltb3ZlbAklZDIsLSglc3ApCisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJCXxleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKKwltb3ZlbAkjMzIsJWQwCisJc3VidwklZDEsJWQwCQkJfGQwID0gMzIgLSBkMQorCWJmZXh0dQlMT0NBTF9FWCglYTApeyVkMDojMzJ9LCVkMgorCWJmZXh0dQklZDJ7JWQxOiVkMH0sJWQyCQl8ZDIgPSBuZXcgTE9DQUxfSEkKKwliZmV4dHUJTE9DQUxfSEkoJWEwKXslZDA6IzMyfSwlZDEJfGQxID0gbmV3IExPQ0FMX0xPCisJYmZleHR1CUZQX1NDUjIrTE9DQUxfTE8oJWE2KXslZDA6IzMyfSwlZDAJfGQwID0gbmV3IEcsUixTCisJbW92ZWwJJWQyLExPQ0FMX0hJKCVhMCkJCXxzdG9yZSBuZXcgTE9DQUxfSEkKKwltb3ZlbAklZDEsTE9DQUxfTE8oJWEwKQkJfHN0b3JlIG5ldyBMT0NBTF9MTworCWNscmIJJWQxCisJYmZ0c3QJJWQweyMyOiMzMH0KKwliZXFzCWMxbnN0a3kKKwlic2V0bAkjcm5kX3N0a3lfYml0LCVkMAorCXN0CSVkMQorYzFuc3RreToKKwltb3ZlbAlGUF9TQ1IyK0xPQ0FMX0dSUyglYTYpLCVkMgl8cmVzdG9yZSBvcmlnaW5hbCBnLHIscworCWFuZGlsCSMweGUwMDAwMDAwLCVkMgkJfGNsZWFyIGFsbCBidXQgRyxSLFMKKwl0c3RsCSVkMgkJCXx0ZXN0IGlmIG9yaWdpbmFsIEcsUixTIGFyZSBjbGVhcgorCWJlcXMJZ3JzX2NsZWFyCisJb3JsCSMweDIwMDAwMDAwLCVkMAkJfHNldCBzdGlja3kgYml0IGluIGQwCitncnNfY2xlYXI6CisJYW5kaWwJIzB4ZTAwMDAwMDAsJWQwCQl8Y2xlYXIgYWxsIGJ1dCBHLFIsUworCW1vdmVsCSglc3ApKywlZDIKKwlydHMKK3wKK3wgY2FzZSAoMzI8PWQxPDY0KQorfAorY2FzZV8yOgorCW1vdmVsCSVkMiwtKCVzcCkKKwltb3ZldwklZDAsTE9DQUxfRVgoJWEwKQkJfHVuc2lnbmVkIGV4cG9uZW50ID0gdGhyZXNob2xkCisJc3VidwkjMzIsJWQxCQkJfGQxIG5vdyBiZXR3ZWVuIDAgYW5kIDMyCisJbW92ZWwJIzMyLCVkMAorCXN1YncJJWQxLCVkMAkJCXxkMCA9IDMyIC0gZDEKKwliZmV4dHUJTE9DQUxfRVgoJWEwKXslZDA6IzMyfSwlZDIKKwliZmV4dHUJJWQyeyVkMTolZDB9LCVkMgkJfGQyID0gbmV3IExPQ0FMX0xPCisJYmZleHR1CUxPQ0FMX0hJKCVhMCl7JWQwOiMzMn0sJWQxCXxkMSA9IG5ldyBHLFIsUworCWJmdHN0CSVkMXsjMjojMzB9CisJYm5lcwljMl9zc3RreQkJfGJyYSBpZiBzdGlja3kgYml0IHRvIGJlIHNldAorCWJmdHN0CUZQX1NDUjIrTE9DQUxfTE8oJWE2KXslZDA6IzMyfQorCWJuZXMJYzJfc3N0a3kJCXxicmEgaWYgc3RpY2t5IGJpdCB0byBiZSBzZXQKKwltb3ZlbAklZDEsJWQwCisJY2xyYgklZDEKKwlicmFzCWVuZF9jMgorYzJfc3N0a3k6CisJbW92ZWwJJWQxLCVkMAorCWJzZXRsCSNybmRfc3RreV9iaXQsJWQwCisJc3QJJWQxCitlbmRfYzI6CisJY2xybAlMT0NBTF9ISSglYTApCQl8c3RvcmUgTE9DQUxfSEkgPSAwCisJbW92ZWwJJWQyLExPQ0FMX0xPKCVhMCkJCXxzdG9yZSBMT0NBTF9MTworCW1vdmVsCUZQX1NDUjIrTE9DQUxfR1JTKCVhNiksJWQyCXxyZXN0b3JlIG9yaWdpbmFsIGcscixzCisJYW5kaWwJIzB4ZTAwMDAwMDAsJWQyCQl8Y2xlYXIgYWxsIGJ1dCBHLFIsUworCXRzdGwJJWQyCQkJfHRlc3QgaWYgb3JpZ2luYWwgRyxSLFMgYXJlIGNsZWFyCisJYmVxcwljbGVhcl9ncnMKKwlvcmwJIzB4MjAwMDAwMDAsJWQwCQl8c2V0IHN0aWNreSBiaXQgaW4gZDAKK2NsZWFyX2dyczoKKwlhbmRpbAkjMHhlMDAwMDAwMCwlZDAJCXxnZXQgcmlkIG9mIGFsbCBidXQgRyxSLFMKKwltb3ZlbAkoJXNwKSssJWQyCisJcnRzCit8Cit8IGQxID49IDY0IEZvcmNlIHRoZSBleHBvbmVudCB0byBiZSB0aGUgZGVub3JtIHRocmVzaG9sZCB3aXRoIHRoZQorfCBjb3JyZWN0IHNpZ24uCit8CitjYXNlXzM6CisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkKKwl0c3R3CUxPQ0FMX1NHTiglYTApCisJYmdlcwljM2NvbgorYzNuZWc6CisJb3JsCSMweDgwMDAwMDAwLExPQ0FMX0VYKCVhMCkKK2MzY29uOgorCWNtcHcJIzY0LCVkMQorCWJlcXMJc2l4dHlfZm91cgorCWNtcHcJIzY1LCVkMQorCWJlcXMJc2l4dHlfZml2ZQorfAorfCBTaGlmdCB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UuICBTZXQgZDEgZm9yIGluZXgyIGZsYWcgYW5kCit8IHJldHVybiBhIHplcm8gd2l0aCB0aGUgZ2l2ZW4gdGhyZXNob2xkLgorfAorCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW1vdmVsCSMweDIwMDAwMDAwLCVkMAorCXN0CSVkMQorCXJ0cworCitzaXh0eV9mb3VyOgorCW1vdmVsCUxPQ0FMX0hJKCVhMCksJWQwCisJYmZleHR1CSVkMHsjMjojMzB9LCVkMQorCWFuZGlsCSMweGMwMDAwMDAwLCVkMAorCWJyYXMJYzNjb20KKworc2l4dHlfZml2ZToKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAorCWJmZXh0dQklZDB7IzE6IzMxfSwlZDEKKwlhbmRpbAkjMHg4MDAwMDAwMCwlZDAKKwlsc3JsCSMxLCVkMAkJCXxzaGlmdCBoaWdoIGJpdCBpbnRvIFIgYml0CisKK2MzY29tOgorCXRzdGwJJWQxCisJYm5lcwljM3NzdGlja3kKKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVzCWMzc3N0aWNreQorCXRzdGIJRlBfU0NSMitMT0NBTF9HUlMoJWE2KQorCWJuZXMJYzNzc3RpY2t5CisJY2xyYgklZDEKKwlicmFzCWMzZW5kCisKK2Mzc3N0aWNreToKKwlic2V0bAkjcm5kX3N0a3lfYml0LCVkMAorCXN0CSVkMQorYzNlbmQ6CisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zYWNvcy5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2Fjb3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2IwMGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2Fjb3MuUwpAQCAtMCwwICsxLDExNSBAQAorfAorfAlzYWNvcy5zYSAzLjMgMTIvMTkvOTAKK3wKK3wJRGVzY3JpcHRpb246IFRoZSBlbnRyeSBwb2ludCBzQWNvcyBjb21wdXRlcyB0aGUgaW52ZXJzZSBjb3NpbmUgb2YKK3wJCWFuIGlucHV0IGFyZ3VtZW50OyBzQWNvc2QgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAkJaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgYXJjY29zKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNDT1MgdGFrZXMgYXBwcm94aW1hdGVseSAzMTAgY3ljbGVzLgorfAorfAlBbGdvcml0aG06Cit8Cit8CUFDT1MKK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYWNvcyhYKSBieQorfAkJeiA6PSAoMS1YKSAvICgxK1gpCit8CQlhY29zKFgpID0gMiAqIGF0YW4oIHNxcnQoeikgKS4KK3wJCUV4aXQuCit8Cit8CTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCit8Cit8CTQuICh8WHwgPSAxKSBJZiBYID4gMCwgcmV0dXJuIDAuIE90aGVyd2lzZSwgcmV0dXJuIFBpLiBFeGl0LgorfAorfAk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgorfAkJRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNBQ09TCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworUEk6CS5sb25nIDB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BJQlkyOgkubG9uZyAweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCisKKwl8eHJlZgl0X29wZXJyCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZglzYXRhbgorCisJLmdsb2JhbAlzYWNvc2QKK3NhY29zZDoKK3wtLUFDT1MoWCkgPSBQSS8yIEZPUiBERU5PUk1BTElaRUQgWAorCWZtb3ZlbAkJJWQxLCVmcGNyCQl8IC4uLmxvYWQgdXNlcidzIHJvdW5kaW5nIG1vZGUvcHJlY2lzaW9uCisJZm1vdmV4CQlQSUJZMiwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJLmdsb2JhbAlzYWNvcworc2Fjb3M6CisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAkJfCAuLi5wYWNrIGV4cG9uZW50IHdpdGggdXBwZXIgMTYgZnJhY3Rpb24KKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmdlcwkJQUNPU0JJRworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCit8LS1BQ09TKFgpID0gMiAqIEFUQU4oCVNRUlQoICgxLVgpLygxK1gpICkJKQorCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAxCisJZmFkZHgJCSVmcDAsJWZwMQkJfCAuLi4xK1gKKwlmbmVneAkJJWZwMAkJfCAuLi4gLVgKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMAl8IC4uLjEtWAorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uKDEtWCkvKDErWCkKKwlmc3FydHgJCSVmcDAJCXwgLi4uU1FSVCgoMS1YKS8oMStYKSkKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8IC4uLm92ZXJ3cml0ZSBpbnB1dAorCW1vdmVsCQklZDEsLSglc3ApCXxzYXZlIG9yaWdpbmFsIHVzZXJzIGZwY3IKKwljbHJsCQklZDEKKwlic3IJCXNhdGFuCQl8IC4uLkFUQU4oU1FSVChbMS1YXS9bMStYXSkpCisJZm1vdmVsCQkoJXNwKSssJWZwY3IJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZhZGR4CQklZnAwLCVmcDAJCXwgLi4uMiAqIEFUQU4oIFNUVUZGICkKKwlicmEJCXRfZnJjaW54CisKK0FDT1NCSUc6CisJZmFic3gJCSVmcDAKKwlmY21wcwkJIzB4M0Y4MDAwMDAsJWZwMAorCWZiZ3QJCXRfb3BlcnIJCXxjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KKworfC0tfFh8ID0gMSwgQUNPUyhYKSA9IDAgT1IgUEkKKwltb3ZlbAkJKCVhMCksJWQwCQl8IC4uLnBhY2sgZXhwb25lbnQgd2l0aCB1cHBlciAxNiBmcmFjdGlvbgorCW1vdmV3CQk0KCVhMCksJWQwCisJY21wbAkJIzAsJWQwCQl8RDAgaGFzIG9yaWdpbmFsIGV4cG9uZW50K2ZyYWN0aW9uCisJYmd0cwkJQUNPU1AxCisKK3wtLVggPSAtMQorfFJldHVybnMgUEkgYW5kIGluZXhhY3QgZXhjZXB0aW9uCisJZm1vdmV4CQlQSSwlZnAwCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4MDA4MDAwMDAsJWZwMAl8Y2F1c2UgYW4gaW5leGFjdCBleGNlcHRpb24gdG8gYmUgcHV0Cit8CQkJCQk7aW50byB0aGUgMDQwIC0gd2lsbCBub3QgdHJhcCB1bnRpbCBuZXh0Cit8CQkJCQk7ZnAgaW5zdC4KKwlicmEJCXRfZnJjaW54CisKK0FDT1NQMToKKwlmbW92ZWwJCSVkMSwlRlBDUgorCWZtb3ZlcwkJIzB4MDAwMDAwMDAsJWZwMAorCXJ0cwkJCQl8RmFjb3MgOyBvZiArMSBpcyBleGFjdAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2FzaW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Nhc2luLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0N2E2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Nhc2luLlMKQEAgLTAsMCArMSwxMDQgQEAKK3wKK3wJc2FzaW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CURlc2NyaXB0aW9uOiBUaGUgZW50cnkgcG9pbnQgc0FzaW4gY29tcHV0ZXMgdGhlIGludmVyc2Ugc2luZSBvZgorfAkJYW4gaW5wdXQgYXJndW1lbnQ7IHNBc2luZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCBmb3IgZGVub3JtYWxpemVkCit8CQlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBhcmNzaW4oWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgRnAwLgorfAorfAlBY2N1cmFjeSBhbmQgTW9ub3RvbmljaXR5OiBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc0FTSU4gdGFrZXMgYXBwcm94aW1hdGVseSAzMTAgY3ljbGVzLgorfAorfAlBbGdvcml0aG06Cit8Cit8CUFTSU4KK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXNpbihYKSBieQorfAkJeiA6PSBzcXJ0KCBbMS1YXVsxK1hdICkKK3wJCWFzaW4oWCkgPSBhdGFuKCB4IC8geiApLgorfAkJRXhpdC4KK3wKK3wJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4KK3wKK3wJNC4gKHxYfCA9IDEpIHNnbiA6PSBzaWduKFgpLCByZXR1cm4gYXNpbihYKSA6PSBzZ24gKiBQaS8yLiBFeGl0LgorfAorfAk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgorfAkJRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNBU0lOCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworUElCWTI6CS5sb25nIDB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKKworCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXNhdGFuCisKKwkuZ2xvYmFsCXNhc2luZAorc2FzaW5kOgorfC0tQVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCisKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzYXNpbgorc2FzaW46CisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAorCWNtcGlsCQkjMHgzRkZGODAwMCwlZDAKKwliZ2VzCQlhc2luYmlnCisKK3wtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKK3wtLUFTSU4oWCkgPSBBVEFOKCBYIC8gU1FSVCggKDEtWCkoMStYKSApICkKKworCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMQorCWZzdWJ4CQklZnAwLCVmcDEJCXwgLi4uMS1YCisJZm1vdmVteAklZnAyLSVmcDIsLSglYTcpCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAyCisJZmFkZHgJCSVmcDAsJWZwMgkJfCAuLi4xK1gKKwlmbXVseAkJJWZwMiwlZnAxCQl8IC4uLigxK1gpKDEtWCkKKwlmbW92ZW14CSglYTcpKywlZnAyLSVmcDIKKwlmc3FydHgJCSVmcDEJCXwgLi4uU1FSVChbMS1YXVsxK1hdKQorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uWC9TUVJUKFsxLVhdWzErWF0pCisJZm1vdmVteAklZnAwLSVmcDAsKCVhMCkKKwlic3IJCXNhdGFuCisJYnJhCQl0X2ZyY2lueAorCithc2luYmlnOgorCWZhYnN4CQklZnAwCSB8IC4uLnxYfAorCWZjbXBzCQkjMHgzRjgwMDAwMCwlZnAwCisJZmJndAkJdF9vcGVycgkJfGNhdXNlIGFuIG9wZXJyIGV4Y2VwdGlvbgorCit8LS18WHwgPSAxLCBBU0lOKFgpID0gKy0gUEkvMi4KKworCWZtb3ZleAkJUElCWTIsJWZwMAorCW1vdmVsCQkoJWEwKSwlZDAKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCXwgLi4uU0lHTiBCSVQgT0YgWAorCW9yaWwJCSMweDNGODAwMDAwLCVkMAl8IC4uListMSBJTiBTR0wgRk9STUFUCisJbW92ZWwJCSVkMCwtKCVzcCkJfCAuLi5wdXNoIFNJR04oWCkgSU4gU0dMLUZNVAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZm11bHMJCSglc3ApKywlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2F0YW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkYWUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuLlMKQEAgLTAsMCArMSw0NzggQEAKK3wKK3wJc2F0YW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzYXRhbiBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBhbgorfAlpbnB1dCB2YWx1ZS4gc2F0YW5kIGRvZXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBpbnB1dCB2YWx1ZSBpcyBhCit8CWRlbm9ybWFsaXplZCBudW1iZXIuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgdmFsdWUgaW4gbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYWRkcmVzcworfAkJcmVnaXN0ZXIgYTAuCit8Cit8CU91dHB1dDoJQXJjdGFuKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNhdGFuIHRha2VzIGFwcHJveGltYXRlbHkgMTYwIGN5Y2xlcyBmb3IgaW5wdXQKK3wJCWFyZ3VtZW50IFggc3VjaCB0aGF0IDEvMTYgPCB8WHwgPCAxNi4gRm9yIHRoZSBvdGhlciBhcmd1bWVudHMsCit8CQl0aGUgcHJvZ3JhbSB3aWxsIHJ1biBubyB3b3JzZSB0aGFuIDEwJSBzbG93ZXIuCit8Cit8CUFsZ29yaXRobToKK3wJU3RlcCAxLiBJZiB8WHwgPj0gMTYgb3IgfFh8IDwgMS8xNiwgZ28gdG8gU3RlcCA1LgorfAorfAlTdGVwIDIuIExldCBYID0gc2duICogMioqayAqIDEueHh4eHh4eHguLi54LiBOb3RlIHRoYXQgayA9IC00LCAtMywuLi4sIG9yIDMuCit8CQlEZWZpbmUgRiA9IHNnbiAqIDIqKmsgKiAxLnh4eHgxLCBpLmUuIHRoZSBmaXJzdCA1IHNpZ25pZmljYW50IGJpdHMKK3wJCW9mIFggd2l0aCBhIGJpdC0xIGF0dGFjaGVkIGF0IHRoZSA2LXRoIGJpdCBwb3NpdGlvbi4gRGVmaW5lIHUKK3wJCXRvIGJlIHUgPSAoWC1GKSAvICgxICsgWCpGKS4KK3wKK3wJU3RlcCAzLiBBcHByb3hpbWF0ZSBhcmN0YW4odSkgYnkgYSBwb2x5bm9taWFsIHBvbHkuCit8Cit8CVN0ZXAgNC4gUmV0dXJuIGFyY3RhbihGKSArIHBvbHksIGFyY3RhbihGKSBpcyBmZXRjaGVkIGZyb20gYSB0YWJsZSBvZiB2YWx1ZXMKK3wJCWNhbGN1bGF0ZWQgYmVmb3JlaGFuZC4gRXhpdC4KK3wKK3wJU3RlcCA1LiBJZiB8WHwgPj0gMTYsIGdvIHRvIFN0ZXAgNy4KK3wKK3wJU3RlcCA2LiBBcHByb3hpbWF0ZSBhcmN0YW4oWCkgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gWC4gRXhpdC4KK3wKK3wJU3RlcCA3LiBEZWZpbmUgWCcgPSAtMS9YLiBBcHByb3hpbWF0ZSBhcmN0YW4oWCcpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIFgnLgorfAkJQXJjdGFuKFgpID0gc2lnbihYKSpQaS8yICsgYXJjdGFuKFgnKS4gRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfHNhdGFuCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworQk9VTkRTMToJLmxvbmcgMHgzRkZCODAwMCwweDQwMDJGRkZGCisKK09ORToJLmxvbmcgMHgzRjgwMDAwMAorCisJLmxvbmcgMHgwMDAwMDAwMAorCitBVEFOQTM6CS5sb25nIDB4QkZGNjY4N0UsMHgzMTQ5ODdEOAorQVRBTkEyOgkubG9uZyAweDQwMDJBQzY5LDB4MzRBMjZEQjMKKworQVRBTkExOgkubG9uZyAweEJGQzI0NzZGLDB4NEUxREEyOEUKK0FUQU5CNjoJLmxvbmcgMHgzRkIzNDQ0NCwweDdGODc2OTg5CisKK0FUQU5CNToJLmxvbmcgMHhCRkI3NDRFRSwweDdGQUY0NURCCitBVEFOQjQ6CS5sb25nIDB4M0ZCQzcxQzYsMHg0Njk0MDIyMAorCitBVEFOQjM6CS5sb25nIDB4QkZDMjQ5MjQsMHg5MjE4NzJGOQorQVRBTkIyOgkubG9uZyAweDNGQzk5OTk5LDB4OTk5OThGQTkKKworQVRBTkIxOgkubG9uZyAweEJGRDU1NTU1LDB4NTU1NTU1NTUKK0FUQU5DNToJLmxvbmcgMHhCRkI3MEJGMywweDk4NTM5RTZBCisKK0FUQU5DNDoJLmxvbmcgMHgzRkJDNzE4NywweDk2MkQxRDdECitBVEFOQzM6CS5sb25nIDB4QkZDMjQ5MjQsMHg4MjcxMDdCOAorCitBVEFOQzI6CS5sb25nIDB4M0ZDOTk5OTksMHg5OTk2MjYzRQorQVRBTkMxOgkubG9uZyAweEJGRDU1NTU1LDB4NTU1NTU1MzYKKworUFBJQlkyOgkubG9uZyAweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitOUElCWTI6CS5sb25nIDB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BUSU5ZOgkubG9uZyAweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitOVElOWToJLmxvbmcgMHg4MDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitBVEFOVEJMOgorCS5sb25nCTB4M0ZGQjAwMDAsMHg4M0QxNTJDNSwweDA2MEI3QTUxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4OEJDODU0NDUsMHg2NTQ5OEI4QiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweDkzQkU0MDYwLDB4MTc2MjZCMEQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHg5QkIzMDc4RCwweDM1QUVDMjAyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4QTNBNjlBNTIsMHg1RERDRTdERSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEFCOThFOTQzLDB4NjI3NjU2MTksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhCMzg5RTUwMiwweEY5QzU5ODYyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4QkI3OTdFNDMsMHg2QjA5RTZGQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEMzNjdBNUM3LDB4MzlFNUY0NDYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhDQjU0NEM2MSwweENGRjdENUM2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4RDMzRjYyRjgsMHgyNDg4NTMzRSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweERCMjhEQTgxLDB4NjI0MDRDNzcsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhFMzEwQTQwNywweDhBRDM0RjE4LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4RUFGNkIwQTgsMHgxODhFRTFFQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEYyREFGMTk0LDB4OURCRTc5RDUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhGQUJENTgxMywweDYxRDQ3RTNFLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4ODM0NkFDMjEsMHgwOTU5RUNDNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweDhCMjMyQTA4LDB4MzA0MjgyRDgsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHg5MkZCNzBCOCwweEQyOUFFMkY5LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4OUFDRjQ3NkYsMHg1Q0NEMUNCNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEEyOUU3NjMwLDB4NDk1NEYyM0YsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhBQTY4QzVEMCwweDhBQjg1MjMwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4QjIyREZGRkQsMHg5RDUzOUY4MywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEI5RURFRjQ1LDB4M0U5MDBFQTUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhDMUE4NUYxQywweEM3NUUzRUE1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4Qzk1RDFCRTgsMHgyODEzOERFNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEQxMEJGMzAwLDB4ODQwRDJERTQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhEOEI0QjJCQSwweDZCQzA1RTdBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4RTA1NzJBNkIsMHhCNDIzMzVGNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEU3RjMyQTcwLDB4RUE5Q0FBOEYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhFRjg4ODQzMiwweDY0RUNFRkFBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4RjcxNzBBMjgsMHhFQ0MwNjY2NiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweDgxMkZEMjg4LDB4MzMyREFEMzIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHg4OEE4RDFCMSwweDIxOEU0RDY0LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4OTAxMkFCM0YsMHgyM0U0QUVFOCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweDk3NkNDM0Q0LDB4MTFFN0YxQjksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHg5RUI2ODk0OSwweDM4ODlBMjI3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4QTVFRjcyQzMsMHg0NDg3MzYxQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEFEMTcwMEJBLDB4RjA3QTcyMjcsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhCNDJDQkNGQSwweEZEMzdFRkI3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4QkIzMDNBOTQsMHgwQkE4MEY4OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEMyMjExNUM2LDB4RkNBRUJCQUYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhDOEZFRjNFNiwweDg2MzMxMjIxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4Q0ZDOTgzMzAsMHhCNDAwMEM3MCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEQ2ODA3QUExLDB4MTAyQzVCRjksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhERDIzOTlCQywweDMxMjUyQUEzLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4RTNCMkE4NTUsMHg2QjhGQzUxNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEVBMkQ3NjRGLDB4NjQzMTU5ODksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhGM0JGNUJGOCwweEJBRDFBMjFELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4ODAxQ0UzOUUsMHgwRDIwNUM5QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweDg2MzBBMkRBLDB4REExRUQwNjYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHg4QzFBRDQ0NSwweEYzRTA5QjhDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4OTFEQjhGMTYsMHg2NEYzNTBFMiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweDk3NzMxNDIwLDB4MzY1RTUzOEMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHg5Q0UxQzhFNiwweEEwQjhDREJBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QTIyODMyREIsMHhDQURBQUUwOSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEE3NDZGMkRELDB4Qjc2MDIyOTQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhBQzNFQzBGQiwweDk5N0RENkEyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QjExMDY4OEEsMHhFQkRDNkY2QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEI1QkNDNDkwLDB4NTlFQ0M0QjAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhCQTQ0QkM3RCwweEQ0NzA3ODJGLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QkVBOTQxNDQsMHhGRDA0OUFBQywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEMyRUI0QUJCLDB4NjYxNjI4QjYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhDNzBCRDU0QywweEU2MDJFRTE0LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4Q0QwMDA1NDksMHhBREVDNzE1OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEQ0ODQ1N0QyLDB4RDhFQTRFQTMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhEQjk0OERBNywweDEyREVDRTNCLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4RTIzODU1RjksMHg2OUU4MDk2QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEU4NzcxMTI5LDB4QzQzNTMyNTksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhFRTU3QzE2RSwweDBEMzc5QzBELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4RjNFMTAyMTEsMHhBODdDMzc3OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEY5MTkwMzlELDB4NzU4QjhENDEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhGRTA1OEI4RiwweDY0OTM1RkIzLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4ODE1NUZCNDksMHg3QjY4NUQwNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDgzODg5RTM1LDB4NDlEMTA4RTEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4NTlDRkE3NiwweDUxMUQ3MjRCLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4ODc5NTJFQ0YsMHhGRjgxMzFFNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDg5NzMyRkQxLDB4OTU1NzY0MUIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4QjM4Q0FEMSwweDAxOTMyQTM1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OENFN0E4RDgsMHgzMDFFRTZCNSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDhGNDZBMzlFLDB4MkVBRTUyODEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5MjJEQTdENywweDkxODg4NDg3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OTREMTlGQ0IsMHhERURGNTI0MSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDk3M0FCOTQ0LDB4MTlEMkEwOEIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5OTZGRjAwRSwweDA4RTEwQjk2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OUI3NzNGOTUsMHgxMjMyMURBNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDlENTVDQzMyLDB4MEY5MzU2MjQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5RjEwMDU3NSwweDAwNkNDNTcxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTBBOUMyOTAsMHhEOTdDQzA2QywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEEyMjY1OUVCLDB4RUJDMDYzMEEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBMzg4QjRBRiwweEY2RUYwRUM5LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTREMzVGMTAsMHg2MUQyOTJDNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEE2MDg5NURDLDB4RkJFMzE4N0UsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBNzJBNTFEQywweDczNjdCRUFDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTgzQTUxNTMsMHgwOTU2MTY4RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEE5M0EyMDA3LDB4NzUzOTU0NkUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBQTlFNzI0NSwweDAyM0IyNjA1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QUM0Qzg0QkEsMHg2RkU0RDU4RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEFEQ0U0QTRBLDB4NjA2Qjk3MTIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBRjJBMkRDRCwweDhEMjYzQzlDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjA2NTZGODEsMHhGMjIyNjVDNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEIxODQ2NTE1LDB4MEY3MTQ5NkEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCMjhBQUExNSwweDZGOUFEQTM1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjM3QjQ0RkYsMHgzNzY2Qjg5NSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI0NThDM0RDLDB4RTk2MzA0MzMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCNTI1NTI5RCwweDU2MjI0NkJELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjVFMkNDQTksMHg1RjlEODhDQywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI2OTJDQURBLDB4N0FDQTFBREEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCNzM2QUVBNywweEE2OTI1ODM4LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjdDRkFCMjgsMHg3RTlGN0IzNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI4NUVDQzY2LDB4Q0IyMTk4MzUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCOEU0RkQ1QSwweDIwQTU5M0RBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4Qjk5RjQxRjYsMHg0QUZGOUJCNSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJBN0YxRTE3LDB4ODQyQkJFN0IsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCQjQ3MTI4NSwweDc2MzdFMTdELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkJGQUJFOEEsMHg0Nzg4REY2RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJDOUQwRkFELDB4MkI2ODlENzksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRDMwNkEzOSwweDQ3MUVDRDg2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkRCNkM3MzEsMHg4NTZBRjE4QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJFMzFDQUM1LDB4MDJFODBENzAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRUEyRDU1QywweEUzMzE5NEUyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkYwQjEwQjcsMHhDMDMxMjhGMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJGNkI3QTE4LDB4REFDQjc3OEQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRkM0RUE0NiwweDYzRkExOEY2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QzAxODFCREUsMHg4Qjg5QTQ1NCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEMwNjVCMDY2LDB4Q0ZCRjY0MzksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhDMEFFMzQ1RiwweDU2MzQwQUU2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QzBGMjIyOTEsMHg5Q0I5RTZBNywweDAwMDAwMDAwCisKKwkuc2V0CVgsRlBfU0NSMQorCS5zZXQJWERDQVJFLFgrMgorCS5zZXQJWEZSQUMsWCs0CisJLnNldAlYRlJBQ0xPLFgrOAorCisJLnNldAlBVEFORixGUF9TQ1IyCisJLnNldAlBVEFORkhJLEFUQU5GKzQKKwkuc2V0CUFUQU5GTE8sQVRBTkYrOAorCisKKwl8IHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKworCS5nbG9iYWwJc2F0YW5kCitzYXRhbmQ6Cit8LS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCisKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzYXRhbgorc2F0YW46Cit8LS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKKworCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWZtb3ZleAkJJWZwMCxYKCVhNikKKwlhbmRpbAkJIzB4N0ZGRkZGRkYsJWQwCisKKwljbXBpbAkJIzB4M0ZGQjgwMDAsJWQwCQl8IC4uLnxYfCA+PSAxLzE2PworCWJnZXMJCUFUQU5PSzEKKwlicmEJCUFUQU5TTQorCitBVEFOT0sxOgorCWNtcGlsCQkjMHg0MDAyRkZGRiwlZDAJCXwgLi4ufFh8IDwgMTYgPworCWJsZXMJCUFUQU5NQUlOCisJYnJhCQlBVEFOQklHCisKKworfC0tVEhFIE1PU1QgTElLRUxZIENBU0UsIHxYfCBJTiBbMS8xNiwgMTYpLiBXRSBVU0UgVEFCTEUgVEVDSE5JUVVFCit8LS1USEUgSURFQSBJUyBBVEFOKFgpID0gQVRBTihGKSArIEFUQU4oIFtYLUZdIC8gWzErWEZdICkuCit8LS1TTyBJRiBGIElTIENIT1NFTiBUTyBCRSBDTE9TRSBUTyBYIEFORCBBVEFOKEYpIElTIFNUT1JFRCBJTgorfC0tQSBUQUJMRSwgQUxMIFdFIE5FRUQgSVMgVE8gQVBQUk9YSU1BVEUgQVRBTihVKSBXSEVSRQorfC0tVSA9IChYLUYpLygxK1hGKSBJUyBTTUFMTCAoUkVNRU1CRVIgRiBJUyBDTE9TRSBUTyBYKS4gSVQgSVMKK3wtLVRSVUUgVEhBVCBBIERJVklERSBJUyBOT1cgTkVFREVELCBCVVQgVEhFIEFQUFJPWElNQVRJT04gRk9SCit8LS1BVEFOKFUpIElTIEEgVkVSWSBTSE9SVCBQT0xZTk9NSUFMIEFORCBUSEUgSU5ERVhJTkcgVE8KK3wtLUZFVENIIEYgQU5EIFNBVklORyBPRiBSRUdJU1RFUlMgQ0FOIEJFIEFMTCBISURFRCBVTkRFUiBUSEUKK3wtLURJVklERS4gSU4gVEhFIEVORCBUSElTIE1FVEhPRCBJUyBNVUNIIEZBU1RFUiBUSEFOIEEgVFJBRElUSU9OQUwKK3wtLU9ORS4gTk9URSBBTFNPIFRIQVQgVEhFIFRSQURJVElPTkFMIFNDSEVNRSBUSEFUIEFQUFJPWElNQVRFCit8LS1BVEFOKFgpIERJUkVDVExZIFdJTEwgTkVFRCBUTyBVU0UgQSBSQVRJT05BTCBBUFBST1hJTUFUSU9OCit8LS0oRElWSVNJT04gTkVFREVEKSBBTllXQVkgQkVDQVVTRSBBIFBPTFlOT01JQUwgQVBQUk9YSU1BVElPTgorfC0tV0lMTCBJTlZPTFZFIEEgVkVSWSBMT05HIFBPTFlOT01JQUwuCisKK3wtLU5PVyBXRSBTRUUgWCBBUyArLTJeSyAqIDEuQkJCQkJCQi4uLi5CIDwtIDEuICsgNjMgQklUUworfC0tV0UgQ0hPU0UgRiBUTyBCRSArLTJeSyAqIDEuQkJCQjEKK3wtLVRIQVQgSVMgSVQgTUFUQ0hFUyBUSEUgRVhQT05FTlQgQU5EIEZJUlNUIDUgQklUUyBPRiBYLCBUSEUKK3wtLVNJWFRIIEJJVFMgSVMgU0VUIFRPIEJFIDEuIFNJTkNFIEsgPSAtNCwgLTMsIC4uLiwgMywgVEhFUkUKK3wtLUFSRSBPTkxZIDggVElNRVMgMTYgPSAyXjcgPSAxMjggfEZ8J1MuIFNJTkNFIEFUQU4oLXxGfCkgSVMKK3wtLSAtQVRBTih8RnwpLCBXRSBORUVEIFRPIFNUT1JFIE9OTFkgQVRBTih8RnwpLgorCitBVEFOTUFJTjoKKworCW1vdmV3CQkjMHgwMDAwLFhEQ0FSRSglYTYpCXwgLi4uQ0xFQU4gVVAgWCBKVVNUIElOIENBU0UKKwlhbmRpbAkJIzB4RjgwMDAwMDAsWEZSQUMoJWE2KQl8IC4uLkZJUlNUIDUgQklUUworCW9yaWwJCSMweDA0MDAwMDAwLFhGUkFDKCVhNikJfCAuLi5TRVQgNi1USCBCSVQgVE8gMQorCW1vdmVsCQkjMHgwMDAwMDAwMCxYRlJBQ0xPKCVhNikJfCAuLi5MT0NBVElPTiBPRiBYIElTIE5PVyBGCisKKwlmbW92ZXgJCSVmcDAsJWZwMQkJCXwgLi4uRlAxIElTIFgKKwlmbXVseAkJWCglYTYpLCVmcDEJCXwgLi4uRlAxIElTIFgqRiwgTk9URSBUSEFUIFgqRiA+IDAKKwlmc3VieAkJWCglYTYpLCVmcDAJCXwgLi4uRlAwIElTIFgtRgorCWZhZGRzCQkjMHgzRjgwMDAwMCwlZnAxCQl8IC4uLkZQMSBJUyAxICsgWCpGCisJZmRpdngJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIElTIFUgPSAoWC1GKS8oMStYKkYpCisKK3wtLVdISUxFIFRIRSBESVZJU0lPTiBJUyBUQUtJTkcgSVRTIFRJTUUsIFdFIEZFVENIIEFUQU4ofEZ8KQorfC0tQ1JFQVRFIEFUQU4oRikgQU5EIFNUT1JFIElUIElOIEFUQU5GLCBBTkQKK3wtLVNBVkUgUkVHSVNURVJTIEZQMi4KKworCW1vdmVsCQklZDIsLSglYTcpCXwgLi4uU0FWRSBkMiBURU1QT1JBUklMWQorCW1vdmVsCQklZDAsJWQyCQl8IC4uLlRIRSBFWFBPIEFORCAxNiBCSVRTIE9GIFgKKwlhbmRpbAkJIzB4MDAwMDc4MDAsJWQwCXwgLi4uNCBWQVJZSU5HIEJJVFMgT0YgRidTIEZSQUNUSU9OCisJYW5kaWwJCSMweDdGRkYwMDAwLCVkMgl8IC4uLkVYUE9ORU5UIE9GIEYKKwlzdWJpbAkJIzB4M0ZGQjAwMDAsJWQyCXwgLi4uSys0CisJYXNybAkJIzEsJWQyCisJYWRkbAkJJWQyLCVkMAkJfCAuLi5USEUgNyBCSVRTIElERU5USUZZSU5HIEYKKwlhc3JsCQkjNywlZDAJCXwgLi4uSU5ERVggSU5UTyBUQkwgT0YgQVRBTih8RnwpCisJbGVhCQlBVEFOVEJMLCVhMQorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgT0YgQVRBTih8RnwpCisJbW92ZWwJCSglYTEpKyxBVEFORiglYTYpCisJbW92ZWwJCSglYTEpKyxBVEFORkhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEFUQU5GTE8oJWE2KQl8IC4uLkFUQU5GIElTIE5PVyBBVEFOKHxGfCkKKwltb3ZlbAkJWCglYTYpLCVkMAkJfCAuLi5MT0FEIFNJR04gQU5EIEVYUE8uIEFHQUlOCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAl8IC4uLlNJR04oRikKKwlvcmwJCSVkMCxBVEFORiglYTYpCXwgLi4uQVRBTkYgSVMgTk9XIFNJR04oRikqQVRBTih8RnwpCisJbW92ZWwJCSglYTcpKywlZDIJfCAuLi5SRVNUT1JFIGQyCisKK3wtLVRIQVQnUyBBTEwgSSBIQVZFIFRPIERPIEZPUiBOT1csCit8LS1CVVQgQUxBUywgVEhFIERJVklERSBJUyBTVElMTCBDUkFOS0lORyEKKworfC0tVSBJTiBGUDAsIFdFIEFSRSBOT1cgUkVBRFkgVE8gQ09NUFVURSBBVEFOKFUpIEFTCit8LS1VICsgQTEqVSpWKihBMiArIFYqKEEzICsgVikpLCBWID0gVSpVCit8LS1USEUgUE9MWU5PTUlBTCBNQVkgTE9PSyBTVFJBTkdFLCBCVVQgSVMgTkVWRVJUSEVMRVNTIENPUlJFQ1QuCit8LS1USEUgTkFUVVJBTCBGT1JNIElTIFUgKyBVKlYqKEExICsgViooQTIgKyBWKkEzKSkKK3wtLVdIQVQgV0UgSEFWRSBIRVJFIElTIE1FUkVMWQlBMSA9IEEzLCBBMiA9IEExL0EzLCBBMyA9IEEyL0EzLgorfC0tVEhFIFJFQVNPTiBGT1IgVEhJUyBSRUFSUkFOR0VNRU5UIElTIFRPIE1BS0UgVEhFIElOREVQRU5ERU5UCit8LS1QQVJUUyBBMSpVKlYgQU5EIChBMiArIC4uLiBTVFVGRikgTU9SRSBMT0FELUJBTEFOQ0VECisKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQorCWZtb3ZlZAkJQVRBTkEzLCVmcDIKKwlmYWRkeAkJJWZwMSwlZnAyCQl8IC4uLkEzK1YKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLlYqKEEzK1YpCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5VKlYKKwlmYWRkZAkJQVRBTkEyLCVmcDIJfCAuLi5BMitWKihBMytWKQorCWZtdWxkCQlBVEFOQTEsJWZwMQl8IC4uLkExKlUqVgorCWZtdWx4CQklZnAyLCVmcDEJCXwgLi4uQTEqVSpWKihBMitWKihBMytWKSkKKworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uQVRBTihVKSwgRlAxIFJFTEVBU0VECisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJQVRBTkYoJWE2KSwlZnAwCXwgLi4uQVRBTihYKQorCWJyYQkJdF9mcmNpbngKKworQVRBTkJPUlM6Cit8LS18WHwgSVMgSU4gZDAgSU4gQ09NUEFDVCBGT1JNLiBGUDEsIGQwIFNBVkVELgorfC0tRlAwIElTIFggQU5EIHxYfCA8PSAxLzE2IE9SIHxYfCA+PSAxNi4KKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmd0CQlBVEFOQklHCXwgLi4uSS5FLiB8WHwgPj0gMTYKKworQVRBTlNNOgorfC0tfFh8IDw9IDEvMTYKK3wtLUlGIHxYfCA8IDJeKC00MCksIFJFVFVSTiBYIEFTIEFOU1dFUi4gT1RIRVJXSVNFLCBBUFBST1hJTUFURQorfC0tQVRBTihYKSBCWSBYICsgWCpZKihCMStZKihCMitZKihCMytZKihCNCtZKihCNStZKkI2KSkpKSkKK3wtLVdISUNIIElTIFggKyBYKlkqKCBbQjErWiooQjMrWipCNSldICsgW1kqKEIyK1oqKEI0K1oqQjYpXSApCit8LS1XSEVSRSBZID0gWCpYLCBBTkQgWiA9IFkqWS4KKworCWNtcGlsCQkjMHgzRkQ3ODAwMCwlZDAKKwlibHQJCUFUQU5USU5ZCit8LS1DT01QVVRFIFBPTFlOT01JQUwKKwlmbXVseAkJJWZwMCwlZnAwCXwgLi4uRlAwIElTIFkgPSBYKlgKKworCisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5GUDEgSVMgWiA9IFkqWQorCisJZm1vdmVkCQlBVEFOQjYsJWZwMgorCWZtb3ZlZAkJQVRBTkI1LCVmcDMKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uWipCNgorCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uWipCNQorCisJZmFkZGQJCUFUQU5CNCwlZnAyCXwgLi4uQjQrWipCNgorCWZhZGRkCQlBVEFOQjMsJWZwMwl8IC4uLkIzK1oqQjUKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uWiooQjQrWipCNikKKwlmbXVseAkJJWZwMywlZnAxCQl8IC4uLloqKEIzK1oqQjUpCisKKwlmYWRkZAkJQVRBTkIyLCVmcDIJfCAuLi5CMitaKihCNCtaKkI2KQorCWZhZGRkCQlBVEFOQjEsJWZwMQl8IC4uLkIxK1oqKEIzK1oqQjUpCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlkqKEIyK1oqKEI0K1oqQjYpKQorCWZtdWx4CQlYKCVhNiksJWZwMAkJfCAuLi5YKlkKKworCWZhZGR4CQklZnAyLCVmcDEJCXwgLi4uW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXQorCisKKwlmbXVseAkJJWZwMSwlZnAwCXwgLi4uWCpZKihbQjErWiooQjMrWipCNSldK1tZKihCMitaKihCNCtaKkI2KSldKQorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJWCglYTYpLCVmcDAKKworCWJyYQkJdF9mcmNpbngKKworQVRBTlRJTlk6Cit8LS18WHwgPCAyXigtNDApLCBBVEFOKFgpID0gWAorCW1vdmV3CQkjMHgwMDAwLFhEQ0FSRSglYTYpCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJWCglYTYpLCVmcDAJfGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9mcmNpbngKKworQVRBTkJJRzoKK3wtLUlGIHxYfCA+IDJeKDEwMCksIFJFVFVSTglTSUdOKFgpKihQSS8yIC0gVElOWSkuIE9USEVSV0lTRSwKK3wtLVJFVFVSTiBTSUdOKFgpKlBJLzIgKyBBVEFOKC0xL1gpLgorCWNtcGlsCQkjMHg0MDYzODAwMCwlZDAKKwliZ3QJCUFUQU5IVUdFCisKK3wtLUFQUFJPWElNQVRFIEFUQU4oLTEvWCkgQlkKK3wtLVgnK1gnKlkqKEMxK1kqKEMyK1kqKEMzK1kqKEM0K1kqQzUpKSkpLCBYJyA9IC0xL1gsIFkgPSBYJypYJworfC0tVEhJUyBDQU4gQkUgUkUtV1JJVFRFTiBBUworfC0tWCcrWCcqWSooIFtDMStaKihDMytaKkM1KV0gKyBbWSooQzIrWipDNCldICksIFogPSBZKlkuCisKKwlmbW92ZXMJCSMweEJGODAwMDAwLCVmcDEJfCAuLi5MT0FEIC0xCisJZmRpdngJCSVmcDAsJWZwMQkJfCAuLi5GUDEgSVMgLTEvWAorCisKK3wtLURJVklERSBJUyBTVElMTCBDUkFOS0lORworCisJZm1vdmV4CQklZnAxLCVmcDAJCXwgLi4uRlAwIElTIFgnCisJZm11bHgJCSVmcDAsJWZwMAkJfCAuLi5GUDAgSVMgWSA9IFgnKlgnCisJZm1vdmV4CQklZnAxLFgoJWE2KQkJfCAuLi5YIElTIFJFQUxMWSBYJworCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCQl8IC4uLkZQMSBJUyBaID0gWSpZCisKKwlmbW92ZWQJCUFUQU5DNSwlZnAzCisJZm1vdmVkCQlBVEFOQzQsJWZwMgorCisJZm11bHgJCSVmcDEsJWZwMwkJfCAuLi5aKkM1CisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5aKkI0CisKKwlmYWRkZAkJQVRBTkMzLCVmcDMJfCAuLi5DMytaKkM1CisJZmFkZGQJCUFUQU5DMiwlZnAyCXwgLi4uQzIrWipDNAorCisJZm11bHgJCSVmcDMsJWZwMQkJfCAuLi5aKihDMytaKkM1KSwgRlAzIFJFTEVBU0VECisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5ZKihDMitaKkM0KQorCisJZmFkZGQJCUFUQU5DMSwlZnAxCXwgLi4uQzErWiooQzMrWipDNSkKKwlmbXVseAkJWCglYTYpLCVmcDAJCXwgLi4uWCcqWQorCisJZmFkZHgJCSVmcDIsJWZwMQkJfCAuLi5bWSooQzIrWipDNCldK1tDMStaKihDMytaKkM1KV0KKworCisJZm11bHgJCSVmcDEsJWZwMAkJfCAuLi5YJypZKihbQjErWiooQjMrWipCNSldCit8CQkJCQkuLi4JK1tZKihCMitaKihCNCtaKkI2KSldKQorCWZhZGR4CQlYKCVhNiksJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKworCWJ0c3RiCQkjNywoJWEwKQorCWJlcXMJCXBvc19iaWcKKworbmVnX2JpZzoKKwlmYWRkeAkJTlBJQlkyLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK3Bvc19iaWc6CisJZmFkZHgJCVBQSUJZMiwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitBVEFOSFVHRToKK3wtLVJFVFVSTiBTSUdOKFgpKihQSUJZMiAtIFRJTlkpID0gU0lHTihYKSpQSUJZMiAtIFNJR04oWCkqVElOWQorCWJ0c3RiCQkjNywoJWEwKQorCWJlcXMJCXBvc19odWdlCisKK25lZ19odWdlOgorCWZtb3ZleAkJTlBJQlkyLCVmcDAKKwlmbW92ZWwJCSVkMSwlZnBjcgorCWZzdWJ4CQlOVElOWSwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitwb3NfaHVnZToKKwlmbW92ZXgJCVBQSUJZMiwlZnAwCisJZm1vdmVsCQklZDEsJWZwY3IKKwlmc3VieAkJUFRJTlksJWZwMAorCWJyYQkJdF9mcmNpbngKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuaC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2F0YW5oLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMDc4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuaC5TCkBAIC0wLDAgKzEsMTA0IEBACit8Cit8CXNhdGFuaC5zYSAzLjMgMTIvMTkvOTAKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNhdGFuaCBjb21wdXRlcyB0aGUgaW52ZXJzZQorfAloeXBlcmJvbGljIHRhbmdlbnQgb2YKK3wJYW4gaW5wdXQgYXJndW1lbnQ7IHNhdGFuaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBhcmN0YW5oKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNhdGFuaCB0YWtlcyBhcHByb3hpbWF0ZWx5IDI3MCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJQVRBTkgKK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXRhbmgoWCkgYnkKK3wJCXNnbiA6PSBzaWduKFgpCit8CQl5IDo9IHxYfAorfAkJeiA6PSAyeS8oMS15KQorfAkJYXRhbmgoWCkgOj0gc2duICogKDEvMikgKiBsb2dwMSh6KQorfAkJRXhpdC4KK3wKK3wJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4KK3wKK3wJNC4gKHxYfCA9IDEpIEdlbmVyYXRlIGluZmluaXR5IHdpdGggYW4gYXBwcm9wcmlhdGUgc2lnbiBhbmQKK3wJCWRpdmlkZS1ieS16ZXJvIGJ5Cit8CQlzZ24gOj0gc2lnbihYKQorfAkJYXRhbihYKSA6PSBzZ24gLyAoKzApLgorfAkJRXhpdC4KK3wKK3wJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4KK3wJCUV4aXQuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xzYXRhbmgJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJdF9kegorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXNsb2ducDEKKworCS5nbG9iYWwJc2F0YW5oZAorc2F0YW5oZDoKK3wtLUFUQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQkJdF9leHRkbnJtCisKKwkuZ2xvYmFsCXNhdGFuaAorc2F0YW5oOgorCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmdlcwkJQVRBTkhCSUcKKworfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorfC0tWSA9IHxYfCwgWiA9IDJZLygxLVkpLCBBVEFOSChYKSA9IFNJR04oWCkgKiAoMS8yKSAqIExPRzFQKFopLgorCisJZmFic3gJCSglYTApLCVmcDAJfCAuLi5ZID0gfFh8CisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbmVneAkJJWZwMQkJfCAuLi4tWQorCWZhZGR4CQklZnAwLCVmcDAJCXwgLi4uMlkKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMQl8IC4uLjEtWQorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uMlkvKDEtWSkKKwltb3ZlbAkJKCVhMCksJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorCW9yaWwJCSMweDNGMDAwMDAwLCVkMAl8IC4uLlNJR04oWCkqSEFMRgorCW1vdmVsCQklZDAsLSglc3ApCisKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8IC4uLm92ZXJ3cml0ZSBpbnB1dAorCW1vdmVsCQklZDEsLSglc3ApCisJY2xybAkJJWQxCisJYnNyCQlzbG9nbnAxCQl8IC4uLkxPRzFQKFopCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVscwkJKCVzcCkrLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK0FUQU5IQklHOgorCWZhYnN4CQkoJWEwKSwlZnAwCXwgLi4ufFh8CisJZmNtcHMJCSMweDNGODAwMDAwLCVmcDAKKwlmYmd0CQl0X29wZXJyCisJYnJhCQl0X2R6CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zY2FsZS5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2NhbGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzliODA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2NhbGUuUwpAQCAtMCwwICsxLDM3MSBAQAorfAorfAlzY2FsZS5zYSAzLjMgNy8zMC85MQorfAorfAlUaGUgZW50cnkgcG9pbnQgc1NDQUxFIGNvbXB1dGVzIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kCit8CXNjYWxlZCBieSB0aGUgc291cmNlIG9wZXJhbmQuICBJZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YKK3wJdGhlIHNvdXJjZSBvcGVyYW5kIGlzICg+PSAyXjE0KSBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cKK3wJaXMgcmV0dXJuZWQuCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzc2NhbGUgaXMgY2FsbGVkIGZyb20gZG9fZnVuYyB0byBlbXVsYXRlCit8CXRoZSBmc2NhbGUgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbi4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBkZXN0aW5hdGlvbiBvcGVyYW5kIGluIEZQVEVNUCwKK3wJCWRvdWJsZS1leHRlbmRlZCBzb3VyY2Ugb3BlcmFuZCBpbiBFVEVNUC4KK3wKK3wJT3V0cHV0OiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzY2FsZShYLFkpIHRvIGZwMC4KK3wKK3wJTW9kaWZpZXM6IGZwMC4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNDQUxFICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCXRfb3ZmbDIKKwl8eHJlZgl0X3VuZmwKKwl8eHJlZglyb3VuZAorCXx4cmVmCXRfcmVzZG5ybQorCitTUkNfQk5EUzogLnNob3J0CTB4M2ZmZiwweDQwMGMKKworfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgdGhlIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uCit8IGhhbmRsZXIuCit8Cit8Cit8Cit8CUZTQ0FMRQorfAorCS5nbG9iYWwJc3NjYWxlCitzc2NhbGU6CisJZm1vdmVsCQkjMCwlZnBjcgkJfGNsciB1c2VyIGVuYWJsZWQgZXhjCisJY2xybAkJJWQxCisJbW92ZXcJCUZQVEVNUCglYTYpLCVkMQl8Z2V0IGRlc3QgZXhwb25lbnQKKwlzbWkJCUxfU0NSMSglYTYpCXx1c2UgTF9TQ1IxIHRvIGhvbGQgc2lnbgorCWFuZGlsCQkjMHg3ZmZmLCVkMQl8c3RyaXAgc2lnbgorCW1vdmV3CQlFVEVNUCglYTYpLCVkMAl8Y2hlY2sgc3JjIGJvdW5kcworCWFuZGl3CQkjMHg3ZmZmLCVkMAl8Y2xyIHNpZ24gYml0CisJY21wMncJCVNSQ19CTkRTLCVkMAorCWJjY3MJCXNyY19pbgorCWNtcGl3CQkjMHg0MDBjLCVkMAl8dGVzdCBmb3IgdG9vIGxhcmdlCisJYmdlCQlzcmNfb3V0Cit8Cit8IFRoZSBzb3VyY2UgaW5wdXQgaXMgYmVsb3cgMSwgc28gd2UgY2hlY2sgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzCit8IGFuZCBzZXQgdW5mbC4KK3wKK3NyY19zbWFsbDoKKwltb3ZlYgkJRFRBRyglYTYpLCVkMAorCWFuZGliCQkjMHhlMCwlZDAKKwl0c3RiCQklZDAKKwliZXFzCQlub19kZW5vcm0KKwlzdAkJU1RPUkVfRkxHKCVhNikJfGRlc3QgYWxyZWFkeSBjb250YWlucyByZXN1bHQKKwlvcmwJCSN1bmZsX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBVTkZMCitkZW5fZG9uZToKKwlsZWFsCQlGUFRFTVAoJWE2KSwlYTAKKwlicmEJCXRfcmVzZG5ybQorbm9fZGVub3JtOgorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAJfHNpbXBseSByZXR1cm4gZGVzdAorCXJ0cworCisKK3wKK3wgU291cmNlIGlzIHdpdGhpbiAyXjE0IHJhbmdlLiAgVG8gcGVyZm9ybSB0aGUgaW50IG9wZXJhdGlvbiwKK3wgbW92ZSBpdCB0byBkMC4KK3wKK3NyY19pbjoKKwlmbW92ZXgJCUVURU1QKCVhNiksJWZwMAl8bW92ZSBpbiBzcmMgZm9yIGludAorCWZtb3ZlbAkJI3J6X21vZGUsJWZwY3IJfGZvcmNlIHJ6IGZvciBzcmMgY29udmVyc2lvbgorCWZtb3ZlbAkJJWZwMCwlZDAJCXxpbnQgc3JjIHRvIGQwCisJZm1vdmVsCQkjMCwlRlBTUgkJfGNsciBzdGF0dXMgZnJvbSBhYm92ZQorCXRzdHcJCUVURU1QKCVhNikJfGNoZWNrIHNyYyBzaWduCisJYmx0CQlzcmNfbmVnCit8Cit8IFNvdXJjZSBpcyBwb3NpdGl2ZS4gIEFkZCB0aGUgc3JjIHRvIHRoZSBkZXN0IGV4cG9uZW50LgorfCBUaGUgcmVzdWx0IGNhbiBiZSBkZW5vcm1hbGl6ZWQsIGlmIHNyYyA9IDAsIG9yIG92ZXJmbG93LAorfCBpZiB0aGUgcmVzdWx0IG9mIHRoZSBhZGQgc2V0cyBhIGJpdCBpbiB0aGUgdXBwZXIgd29yZC4KK3wKK3NyY19wb3M6CisJdHN0dwkJJWQxCQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcQkJZHN0X2Rucm0KKwlhZGRsCQklZDAsJWQxCQl8YWRkIHNyYyB0byBkZXN0IGV4cAorCWJlcXMJCWRlbm9ybQkJfGlmIHplcm8sIHJlc3VsdCBpcyBkZW5vcm0KKwljbXBpbAkJIzB4N2ZmZiwlZDEJfHRlc3QgZm9yIG92ZXJmbG93CisJYmdlcwkJb3ZmbAorCXRzdGIJCUxfU0NSMSglYTYpCisJYmVxcwkJc3Bvc19wb3MKKwlvcncJCSMweDgwMDAsJWQxCitzcG9zX3BvczoKKwltb3ZldwkJJWQxLEZQVEVNUCglYTYpCXxyZXN1bHQgaW4gRlBURU1QCisJZm1vdmVsCQlVU0VSX0ZQQ1IoJWE2KSwlRlBDUgorCWZtb3ZleAkJRlBURU1QKCVhNiksJWZwMAl8d3JpdGUgcmVzdWx0IHRvIGZwMAorCXJ0cworb3ZmbDoKKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNvdmxfcG9zCisJb3J3CQkjMHg4MDAwLCVkMQorc292bF9wb3M6CisJbW92ZXcJCUZQVEVNUCglYTYpLEVURU1QKCVhNikJfHJlc3VsdCBpbiBFVEVNUAorCW1vdmVsCQlGUFRFTVBfSEkoJWE2KSxFVEVNUF9ISSglYTYpCisJbW92ZWwJCUZQVEVNUF9MTyglYTYpLEVURU1QX0xPKCVhNikKKwlicmEJCXRfb3ZmbDIKKworZGVub3JtOgorCXRzdGIJCUxfU0NSMSglYTYpCisJYmVxcwkJZGVuX3BvcworCW9ydwkJIzB4ODAwMCwlZDEKK2Rlbl9wb3M6CisJdHN0bAkJRlBURU1QX0hJKCVhNikJfGNoZWNrIGogYml0CisJYmx0cwkJbmRlbl9leGl0CXxpZiBzZXQsIG5vdCBkZW5vcm0KKwltb3ZldwkJJWQxLEVURU1QKCVhNikJfGlucHV0IGV4cGVjdGVkIGluIEVURU1QCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCW9ybAkJI3VuZmxfYml0LFVTRVJfRlBTUiglYTYpCXxzZXQgdW5mbAorCWxlYWwJCUVURU1QKCVhNiksJWEwCisJYnJhCQl0X3Jlc2Rucm0KK25kZW5fZXhpdDoKKwltb3ZldwkJJWQxLEZQVEVNUCglYTYpCXxyZXN1bHQgaW4gRlBURU1QCisJZm1vdmVsCQlVU0VSX0ZQQ1IoJWE2KSwlRlBDUgorCWZtb3ZleAkJRlBURU1QKCVhNiksJWZwMAl8d3JpdGUgcmVzdWx0IHRvIGZwMAorCXJ0cworCit8Cit8IFNvdXJjZSBpcyBuZWdhdGl2ZS4gIEFkZCB0aGUgc3JjIHRvIHRoZSBkZXN0IGV4cG9uZW50LgorfCAoVGhlIHJlc3VsdCBleHBvbmVudCB3aWxsIGJlIHJlZHVjZWQpLiAgVGhlIHJlc3VsdCBjYW4gYmUKK3wgZGVub3JtYWxpemVkLgorfAorc3JjX25lZzoKKwlhZGRsCQklZDAsJWQxCQl8YWRkIHNyYyB0byBkZXN0CisJYmVxcwkJZGVub3JtCQl8aWYgemVybywgcmVzdWx0IGlzIGRlbm9ybQorCWJsdHMJCWZpeF9kbnJtCXxpZiBuZWdhdGl2ZSwgcmVzdWx0IGlzCit8CQkJCQk7bmVlZGluZyBkZW5vcm1hbGl6YXRpb24KKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNuZWdfcG9zCisJb3J3CQkjMHg4MDAwLCVkMQorc25lZ19wb3M6CisJbW92ZXcJCSVkMSxGUFRFTVAoJWE2KQl8cmVzdWx0IGluIEZQVEVNUAorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAJfHdyaXRlIHJlc3VsdCB0byBmcDAKKwlydHMKKworCit8Cit8IFRoZSByZXN1bHQgZXhwb25lbnQgaXMgYmVsb3cgZGVub3JtIHZhbHVlLiAgVGVzdCBmb3IgY2F0YXN0cm9waGljCit8IHVuZGVyZmxvdyBhbmQgZm9yY2UgemVybyBpZiB0cnVlLiAgSWYgbm90LCB0cnkgdG8gc2hpZnQgdGhlCit8IG1hbnRpc3NhIHJpZ2h0IHVudGlsIGEgemVybyBleHBvbmVudCBleGlzdHMuCit8CitmaXhfZG5ybToKKwljbXBpdwkJIzB4ZmZjMCwlZDEJfGxvd2VyIGJvdW5kIGZvciBub3JtYWxpemF0aW9uCisJYmx0CQlmaXhfdW5mbAl8aWYgbG93ZXIsIGNhdGFzdHJvcGhpYyB1bmZsCisJbW92ZXcJCSVkMSwlZDAJCXx1c2UgZDAgZm9yIGV4cAorCW1vdmVsCQklZDIsLSglYTcpCXxmcmVlIGQyIGZvciBub3JtCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLCVkMQorCW1vdmVsCQlGUFRFTVBfTE8oJWE2KSwlZDIKKwljbHJsCQlMX1NDUjIoJWE2KQorZml4X2xvb3A6CisJYWRkdwkJIzEsJWQwCQl8ZHJpdmUgZDAgdG8gMAorCWxzcmwJCSMxLCVkMQkJfHdoaWxlIHNoaWZ0aW5nIHRoZQorCXJveHJsCQkjMSwlZDIJCXxtYW50aXNzYSB0byB0aGUgcmlnaHQKKwliY2NzCQlub19jYXJyeQorCXN0CQlMX1NDUjIoJWE2KQl8dXNlIExfU0NSMiB0byBjYXB0dXJlIGluZXgKK25vX2NhcnJ5OgorCXRzdHcJCSVkMAkJfGl0IGlzIGZpbmlzaGVkIHdoZW4KKwlibHRzCQlmaXhfbG9vcAl8ZDAgaXMgemVybyBvciB0aGUgbWFudGlzc2EKKwl0c3RiCQlMX1NDUjIoJWE2KQorCWJlcXMJCXRzdF96ZXJvCisJb3JsCQkjdW5mbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAkJCQkJO3NldCB1bmZsLCBhdW5mbCwgYWluZXgKK3wKK3wgVGVzdCBmb3IgemVyby4gSWYgemVybywgc2ltcGx5IHVzZSBmbW92ZSB0byByZXR1cm4gKy8tIHplcm8KK3wgdG8gdGhlIGZwdS4KK3wKK3RzdF96ZXJvOgorCWNscncJCUZQVEVNUF9FWCglYTYpCisJdHN0YgkJTF9TQ1IxKCVhNikJfHRlc3QgZm9yIHNpZ24KKwliZXFzCQl0c3RfY29uCisJb3J3CQkjMHg4MDAwLEZQVEVNUF9FWCglYTYpIHxzZXQgc2lnbiBiaXQKK3RzdF9jb246CisJbW92ZWwJCSVkMSxGUFRFTVBfSEkoJWE2KQorCW1vdmVsCQklZDIsRlBURU1QX0xPKCVhNikKKwltb3ZlbAkJKCVhNykrLCVkMgorCXRzdGwJCSVkMQorCWJuZXMJCW5vdF96ZXJvCisJdHN0bAkJRlBURU1QX0xPKCVhNikKKwlibmVzCQlub3RfemVybworfAorfCBSZXN1bHQgaXMgemVyby4gIENoZWNrIGZvciByb3VuZGluZyBtb2RlIHRvIHNldCBsc2IuICBJZiB0aGUKK3wgbW9kZSBpcyBycCwgYW5kIHRoZSB6ZXJvIGlzIHBvc2l0aXZlLCByZXR1cm4gc21hbGxlc3QgZGVub3JtLgorfCBJZiB0aGUgbW9kZSBpcyBybSwgYW5kIHRoZSB6ZXJvIGlzIG5lZ2F0aXZlLCByZXR1cm4gc21hbGxlc3QKK3wgbmVnYXRpdmUgZGVub3JtLgorfAorCWJ0c3RiCQkjNSxGUENSX01PREUoJWE2KSB8dGVzdCBpZiBybSBvciBycAorCWJlcXMJCW5vX2RpcgorCWJ0c3RiCQkjNCxGUENSX01PREUoJWE2KSB8Y2hlY2sgd2hpY2ggb25lCisJYmVxcwkJemVyX3JtCit6ZXJfcnA6CisJdHN0YgkJTF9TQ1IxKCVhNikJfGNoZWNrIHNpZ24KKwlibmVzCQlub19kaXIJCXxpZiBzZXQsIG5lZyBvcCwgbm8gaW5jCisJbW92ZWwJCSMxLEZQVEVNUF9MTyglYTYpIHxzZXQgbHNiCisJYnJhcwkJc21fZG5ybQoremVyX3JtOgorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBzaWduCisJYmVxcwkJbm9fZGlyCQl8aWYgY2xyLCBuZWcgb3AsIG5vIGluYworCW1vdmVsCQkjMSxGUFRFTVBfTE8oJWE2KSB8c2V0IGxzYgorCW9ybAkJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorCWJyYXMJCXNtX2Rucm0KK25vX2RpcjoKKwlmbW92ZWwJCVVTRVJfRlBDUiglYTYpLCVGUENSCisJZm1vdmV4CQlGUFRFTVAoJWE2KSwlZnAwCXx1c2UgZm1vdmUgdG8gc2V0IGNjJ3MKKwlydHMKKworfAorfCBUaGUgcm91bmRpbmcgbW9kZSBjaGFuZ2VkIHRoZSB6ZXJvIHRvIGEgc21hbGxlc3QgZGVub3JtLiBDYWxsCit8IHRfcmVzZG5ybSB3aXRoIGV4Y2VwdGlvbmFsIG9wZXJhbmQgaW4gRVRFTVAuCit8CitzbV9kbnJtOgorCW1vdmVsCQlGUFRFTVBfRVgoJWE2KSxFVEVNUF9FWCglYTYpCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCWxlYWwJCUVURU1QKCVhNiksJWEwCisJYnJhCQl0X3Jlc2Rucm0KKworfAorfCBSZXN1bHQgaXMgc3RpbGwgZGVub3JtYWxpemVkLgorfAorbm90X3plcm86CisJb3JsCQkjdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgdW5mbAorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBmb3Igc2lnbgorCWJlcXMJCWZpeF9leGl0CisJb3JsCQkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCitmaXhfZXhpdDoKKwlicmFzCQlzbV9kbnJtCisKKworfAorfCBUaGUgcmVzdWx0IGhhcyB1bmRlcmZsb3dlZCB0byB6ZXJvLiBSZXR1cm4gemVybyBhbmQgc2V0Cit8IHVuZmwsIGF1bmZsLCBhbmQgYWluZXguCit8CitmaXhfdW5mbDoKKwlvcmwJCSN1bmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnRzdGIJCSM1LEZQQ1JfTU9ERSglYTYpIHx0ZXN0IGlmIHJtIG9yIHJwCisJYmVxcwkJbm9fZGlyMgorCWJ0c3RiCQkjNCxGUENSX01PREUoJWE2KSB8Y2hlY2sgd2hpY2ggb25lCisJYmVxcwkJemVyX3JtMgoremVyX3JwMjoKKwl0c3RiCQlMX1NDUjEoJWE2KQl8Y2hlY2sgc2lnbgorCWJuZXMJCW5vX2RpcjIJCXxpZiBzZXQsIG5lZyBvcCwgbm8gaW5jCisJY2xybAkJRlBURU1QX0VYKCVhNikKKwljbHJsCQlGUFRFTVBfSEkoJWE2KQorCW1vdmVsCQkjMSxGUFRFTVBfTE8oJWE2KSB8c2V0IGxzYgorCWJyYXMJCXNtX2Rucm0JCXxyZXR1cm4gc21hbGxlc3QgZGVub3JtCit6ZXJfcm0yOgorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBzaWduCisJYmVxcwkJbm9fZGlyMgkJfGlmIGNsciwgbmVnIG9wLCBubyBpbmMKKwltb3ZldwkJIzB4ODAwMCxGUFRFTVBfRVgoJWE2KQorCWNscmwJCUZQVEVNUF9ISSglYTYpCisJbW92ZWwJCSMxLEZQVEVNUF9MTyglYTYpIHxzZXQgbHNiCisJb3JsCQkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCisJYnJhCQlzbV9kbnJtCQl8cmV0dXJuIHNtYWxsZXN0IGRlbm9ybQorCitub19kaXIyOgorCXRzdGIJCUxfU0NSMSglYTYpCisJYmdlcwkJcG9zX3plcm8KK25lZ196ZXJvOgorCWNscmwJCUZQX1NDUjEoJWE2KQl8Y2xlYXIgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKwljbHJsCQlGUF9TQ1IxKzQoJWE2KQl8Zm9yIGdlbl9leGNlcHQuCisJY2xybAkJRlBfU0NSMSs4KCVhNikKKwlmbW92ZXMJCSMweDgwMDAwMDAwLCVmcDAKKwlydHMKK3Bvc196ZXJvOgorCWNscmwJCUZQX1NDUjEoJWE2KQl8Y2xlYXIgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKwljbHJsCQlGUF9TQ1IxKzQoJWE2KQl8Zm9yIGdlbl9leGNlcHQuCisJY2xybAkJRlBfU0NSMSs4KCVhNikKKwlmbW92ZXMJCSMweDAwMDAwMDAwLCVmcDAKKwlydHMKKworfAorfCBUaGUgZGVzdGluYXRpb24gaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLiAgSXQgbXVzdCBiZSBoYW5kbGVkCit8IGJ5IGZpcnN0IHNoaWZ0aW5nIHRoZSBiaXRzIGluIHRoZSBtYW50aXNzYSB1bnRpbCBpdCBpcyBub3JtYWxpemVkLAorfCB0aGVuIGFkZGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzb3VyY2UgdG8gdGhlIGV4cG9uZW50LgorfAorZHN0X2Rucm06CisJbW92ZW1sCQklZDIvJWQzLC0oJWE3KQorCW1vdmV3CQlGUFRFTVBfRVgoJWE2KSwlZDEKKwltb3ZlbAkJRlBURU1QX0hJKCVhNiksJWQyCisJbW92ZWwJCUZQVEVNUF9MTyglYTYpLCVkMworZHN0X2xvb3A6CisJdHN0bAkJJWQyCQl8dGVzdCBmb3Igbm9ybWFsaXplZCByZXN1bHQKKwlibHRzCQlkc3Rfbm9ybQl8ZXhpdCBsb29wIGlmIHNvCisJdHN0bAkJJWQwCQl8b3RoZXJ3aXNlLCB0ZXN0IHNoaWZ0IGNvdW50CisJYmVxcwkJZHN0X2ZpbgkJfGlmIHplcm8sIHNoaWZ0aW5nIGlzIGRvbmUKKwlzdWJpbAkJIzEsJWQwCQl8ZGVjIHNyYworCWxzbGwJCSMxLCVkMworCXJveGxsCQkjMSwlZDIKKwlicmFzCQlkc3RfbG9vcAorfAorfCBEZXN0aW5hdGlvbiBiZWNhbWUgbm9ybWFsaXplZC4gIFNpbXBseSBhZGQgdGhlIHJlbWFpbmluZworfCBwb3J0aW9uIG9mIHRoZSBzcmMgdG8gdGhlIGV4cG9uZW50LgorfAorZHN0X25vcm06CisJYWRkdwkJJWQwLCVkMQkJfGRzdCBpcyBub3JtYWxpemVkOyBhZGQgc3JjCisJdHN0YgkJTF9TQ1IxKCVhNikKKwliZXFzCQlkbnJtX3BvcworCW9ybAkJIzB4ODAwMCwlZDEKK2Rucm1fcG9zOgorCW1vdmVtdwkJJWQxLEZQVEVNUF9FWCglYTYpCisJbW92ZW1sCQklZDIsRlBURU1QX0hJKCVhNikKKwltb3ZlbWwJCSVkMyxGUFRFTVBfTE8oJWE2KQorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAKKwltb3ZlbWwJCSglYTcpKywlZDIvJWQzCisJcnRzCisKK3wKK3wgRGVzdGluYXRpb24gcmVtYWluZWQgZGVub3JtYWxpemVkLiAgQ2FsbCB0X2V4Y2Rucm0gd2l0aAorfCBleGNlcHRpb25hbCBvcGVyYW5kIGluIEVURU1QLgorfAorZHN0X2ZpbjoKKwl0c3RiCQlMX1NDUjEoJWE2KQl8Y2hlY2sgZm9yIHNpZ24KKwliZXFzCQlkc3RfZXhpdAorCW9ybAkJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorCW9ybAkJIzB4ODAwMCwlZDEKK2RzdF9leGl0OgorCW1vdmVtdwkJJWQxLEVURU1QX0VYKCVhNikKKwltb3ZlbWwJCSVkMixFVEVNUF9ISSglYTYpCisJbW92ZW1sCQklZDMsRVRFTVBfTE8oJWE2KQorCW9ybAkJI3VuZmxfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IHVuZmwKKwltb3ZlbWwJCSglYTcpKywlZDIvJWQzCisJbGVhbAkJRVRFTVAoJWE2KSwlYTAKKwlicmEJCXRfcmVzZG5ybQorCit8Cit8IFNvdXJjZSBpcyBvdXRzaWRlIG9mIDJeMTQgcmFuZ2UuICBUZXN0IHRoZSBzaWduIGFuZCBicmFuY2gKK3wgdG8gdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBoYW5kbGVyLgorfAorc3JjX291dDoKKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNjcm9fcG9zCisJb3JsCQkjMHg4MDAwLCVkMQorc2Nyb19wb3M6CisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCXRzdHcJCUVURU1QKCVhNikKKwlibHRzCQlyZXNfbmVnCityZXNfcG9zOgorCW1vdmV3CQklZDEsRVRFTVAoJWE2KQl8cmVzdWx0IGluIEVURU1QCisJYnJhCQl0X292ZmwyCityZXNfbmVnOgorCW1vdmV3CQklZDEsRVRFTVAoJWE2KQl8cmVzdWx0IGluIEVURU1QCisJbGVhbAkJRVRFTVAoJWE2KSwlYTAKKwlicmEJCXRfdW5mbAorCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3Njb3NoLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zY29zaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MWVkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zY29zaC5TCkBAIC0wLDAgKzEsMTMyIEBACit8Cit8CXNjb3NoLnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc0Nvc2ggY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mCit8CWFuIGlucHV0IGFyZ3VtZW50OyBzQ29zaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBjb3NoKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNDT1NIIHRha2VzIGFwcHJveGltYXRlbHkgMjUwIGN5Y2xlcy4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAlDT1NICit8CTEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPD0gMTYzODAgbG9nMikgQ29zaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYWUKK3wJCXkgPSB8WHwsIHogPSBleHAoWSksIGFuZAorfAkJY29zaChYKSA9ICgxLzIpKiggeiArIDEveiApLgorfAkJRXhpdC4KK3wKK3wJMy4gKHxYfCA+IDE2MzgwIGxvZzIpLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgorfAorfAk0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQorfAkJY29zaChYKSA9IHNpZ24oWCkgKiBleHAofFh8KS8yLgorfAkJSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4KK3wJCVRodXMsIHdlIGNhbGN1bGF0ZSBzaW5oKFgpIGFzIGZvbGxvd3M6Cit8CQlZCTo9IHxYfAorfAkJRmFjdAk6PQkyKiooMTYzODApCit8CQlZJwk6PSBZIC0gMTYzODEgbG9nMgorfAkJY29zaChYKSA6PSBGYWN0ICogZXhwKFknKS4KK3wJCUV4aXQuCit8Cit8CTUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgorfAkJSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCit8CQl0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyIGluCit8CQlleHRlbmRlZCBmb3JtYXQuIEV4aXQuCit8Cit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTQ09TSAlpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKwl8eHJlZgl0X292ZmwKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXNldG94CisKK1QxOgkubG9uZyAweDQwQzYyRDM4LDB4RDNENjQ2MzQgfCAuLi4gMTYzODEgTE9HMiBMRUFECitUMjoJLmxvbmcgMHgzRDZGOTBBRSwweEIxRTc1Q0M3IHwgLi4uIDE2MzgxIExPRzIgVFJBSUwKKworVFdPMTYzODA6IC5sb25nIDB4N0ZGQjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCS5nbG9iYWwJc2Nvc2hkCitzY29zaGQ6Cit8LS1DT1NIKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKKworCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4MDA4MDAwMDAsJWZwMAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc2Nvc2gKK3Njb3NoOgorCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4NDAwQ0IxNjcsJWQwCisJYmd0cwkJQ09TSEJJRworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxNjM4MCBMT0cyCit8LS1DT1NIKFgpID0gKDEvMikgKiAoIEVYUChYKSArIDEvRVhQKFgpICkKKworCWZhYnN4CQklZnAwCQl8IC4uLnxYfAorCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8cGFzcyBwYXJhbWV0ZXIgdG8gc2V0b3gKKwlic3IJCXNldG94CQl8IC4uLkZQMCBJUyBFWFAofFh8KQorCWZtdWxzCQkjMHgzRjAwMDAwMCwlZnAwCXwgLi4uKDEvMilFWFAofFh8KQorCW1vdmVsCQkoJXNwKSssJWQxCisKKwlmbW92ZXMJCSMweDNFODAwMDAwLCVmcDEJfCAuLi4oMS80KQorCWZkaXZ4CQklZnAwLCVmcDEJCXwgLi4uMS8oMiBFWFAofFh8KSkKKworCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHgJCSVmcDEsJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitDT1NIQklHOgorCWNtcGlsCQkjMHg0MDBDQjJCMywlZDAKKwliZ3RzCQlDT1NISFVHRQorCisJZmFic3gJCSVmcDAKKwlmc3ViZAkJVDEoJXBjKSwlZnAwCQl8IC4uLih8WHwtMTYzODFMT0cyX0xFQUQpCisJZnN1YmQJCVQyKCVwYyksJWZwMAkJfCAuLi58WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQorCWJzcgkJc2V0b3gKKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCisJZm11bHgJCVRXTzE2MzgwKCVwYyksJWZwMAorCWJyYQkJdF9mcmNpbngKKworQ09TSEhVR0U6CisJZm1vdmVsCQkjMCwlZnBzcgkJfGNsciBOIGJpdCBpZiBzZXQgYnkgc291cmNlCisJYmNscmIJCSM3LCglYTApCQl8YWx3YXlzIHJldHVybiBwb3NpdGl2ZSB2YWx1ZQorCWZtb3ZlbXgJKCVhMCksJWZwMC0lZnAwCisJYnJhCQl0X292ZmwKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NldG94LlMgYi9hcmNoL202OGsvZnBzcDA0MC9zZXRveC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTc1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zZXRveC5TCkBAIC0wLDAgKzEsODY1IEBACit8Cit8CXNldG94LnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc2V0b3ggY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIG9mIGEgdmFsdWUuCit8CXNldG94ZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgaW5wdXQgdmFsdWUgaXMgYSBkZW5vcm1hbGl6ZWQKK3wJbnVtYmVyLglzZXRveG0xIGNvbXB1dGVzIGV4cChYKS0xLCBhbmQgc2V0b3htMWQgY29tcHV0ZXMKK3wJZXhwKFgpLTEgZm9yIGRlbm9ybWFsaXplZCBYLgorfAorfAlJTlBVVAorfAktLS0tLQorfAlEb3VibGUtZXh0ZW5kZWQgdmFsdWUgaW4gbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYWRkcmVzcworfAlyZWdpc3RlciBhMC4KK3wKK3wJT1VUUFVUCit8CS0tLS0tLQorfAlleHAoWCkgb3IgZXhwKFgpLTEgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgZnAwLgorfAorfAlBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZCit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMC44NSB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLgorfAl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHJvdW5kZWQKK3wJdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlCit8CXByZWNpc2lvbi4KK3wKK3wJU1BFRUQKK3wJLS0tLS0KK3wJVHdvIHRpbWluZ3MgYXJlIG1lYXN1cmVkLCBib3RoIGluIHRoZSBjb3B5LWJhY2sgbW9kZS4gVGhlCit8CWZpcnN0IG9uZSBpcyBtZWFzdXJlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIHRoZSBmaXJzdCB0aW1lCit8CShzbyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGFyZSBub3QgaW4gY2FjaGUpLCBhbmQgdGhlCit8CXNlY29uZCBvbmUgaXMgbWVhc3VyZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgcmVpbnZva2VkIGF0IHRoZSBzYW1lCit8CWlucHV0IGFyZ3VtZW50LgorfAorfAlUaGUgcHJvZ3JhbSBzZXRveCB0YWtlcyBhcHByb3hpbWF0ZWx5IDIxMC8xOTAgY3ljbGVzIGZvciBpbnB1dAorfAlhcmd1bWVudCBYIHdob3NlIG1hZ25pdHVkZSBpcyBsZXNzIHRoYW4gMTYzODAgbG9nMiwgd2hpY2gKK3wJaXMgdGhlIHVzdWFsIHNpdHVhdGlvbi4JRm9yIHRoZSBsZXNzIGNvbW1vbiBhcmd1bWVudHMsCit8CWRlcGVuZGluZyBvbiB0aGVpciB2YWx1ZXMsIHRoZSBwcm9ncmFtIG1heSBydW4gZmFzdGVyIG9yIHNsb3dlciAtLQorfAlidXQgbm8gd29yc2UgdGhhbiAxMCUgc2xvd2VyIGV2ZW4gaW4gdGhlIGV4dHJlbWUgY2FzZXMuCit8Cit8CVRoZSBwcm9ncmFtIHNldG94bTEgdGFrZXMgYXBwcm94aW1hdGVseSA/Pz8vPz8/IGN5Y2xlcyBmb3IgaW5wdXQKK3wJYXJndW1lbnQgWCwgMC4yNSA8PSB8WHwgPCA3MGxvZzIuIEZvciB8WHwgPCAwLjI1LCBpdCB0YWtlcworfAlhcHByb3hpbWF0ZWx5ID8/Py8/Pz8gY3ljbGVzLiBGb3IgdGhlIGxlc3MgY29tbW9uIGFyZ3VtZW50cywKK3wJZGVwZW5kaW5nIG9uIHRoZWlyIHZhbHVlcywgdGhlIHByb2dyYW0gbWF5IHJ1biBmYXN0ZXIgb3Igc2xvd2VyIC0tCit8CWJ1dCBubyB3b3JzZSB0aGFuIDEwJSBzbG93ZXIgZXZlbiBpbiB0aGUgZXh0cmVtZSBjYXNlcy4KK3wKK3wJQUxHT1JJVEhNIGFuZCBJTVBMRU1FTlRBVElPTiBOT1RFUworfAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CXNldG94ZAorfAktLS0tLS0KK3wJU3RlcCAxLglTZXQgYW5zIDo9IDEuMAorfAorfAlTdGVwIDIuCVJldHVybglhbnMgOj0gYW5zICsgc2lnbihYKSoyXigtMTI2KS4gRXhpdC4KK3wJTm90ZXM6CVRoaXMgd2lsbCBhbHdheXMgZ2VuZXJhdGUgb25lIGV4Y2VwdGlvbiAtLSBpbmV4YWN0LgorfAorfAorfAlzZXRveAorfAktLS0tLQorfAorfAlTdGVwIDEuCUZpbHRlciBvdXQgZXh0cmVtZSBjYXNlcyBvZiBpbnB1dCBhcmd1bWVudC4KK3wJCTEuMQlJZiB8WHwgPj0gMl4oLTY1KSwgZ28gdG8gU3RlcCAxLjMuCit8CQkxLjIJR28gdG8gU3RlcCA3LgorfAkJMS4zCUlmIHxYfCA8IDE2MzgwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgorfAkJMS40CUdvIHRvIFN0ZXAgOC4KK3wJTm90ZXM6CVRoZSB1c3VhbCBjYXNlIHNob3VsZCB0YWtlIHRoZSBicmFuY2hlcyAxLjEgLT4gMS4zIC0+IDIuCit8CQkgVG8gYXZvaWQgdGhlIHVzZSBvZiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgYQorfAkJIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgfFh8IGlzIHVzZWQuIFRoaXMgZm9ybWF0IGlzIGEKK3wJCSAzMi1iaXQgaW50ZWdlciwgdGhlIHVwcGVyIChtb3JlIHNpZ25pZmljYW50KSAxNiBiaXRzIGFyZQorfAkJIHRoZSBzaWduIGFuZCBiaWFzZWQgZXhwb25lbnQgZmllbGQgb2YgfFh8OyB0aGUgbG93ZXIgMTYKK3wJCSBiaXRzIGFyZSB0aGUgMTYgbW9zdCBzaWduaWZpY2FudCBmcmFjdGlvbiAoaW5jbHVkaW5nIHRoZQorfAkJIGV4cGxpY2l0IGJpdCkgYml0cyBvZiB8WHwuIENvbnNlcXVlbnRseSwgdGhlIGNvbXBhcmlzb25zCit8CQkgaW4gU3RlcHMgMS4xIGFuZCAxLjMgY2FuIGJlIHBlcmZvcm1lZCBieSBpbnRlZ2VyIGNvbXBhcmlzb24uCit8CQkgTm90ZSBhbHNvIHRoYXQgdGhlIGNvbnN0YW50IDE2MzgwIGxvZygyKSB1c2VkIGluIFN0ZXAgMS4zCit8CQkgaXMgYWxzbyBpbiB0aGUgY29tcGFjdCBmb3JtLiBUaHVzIHRha2luZyB0aGUgYnJhbmNoCit8CQkgdG8gU3RlcCAyIGd1YXJhbnRlZXMgfFh8IDwgMTYzODAgbG9nKDIpLiBUaGVyZSBpcyBubyBoYXJtCit8CQkgdG8gaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBjYXNlcyB3aGVyZSB8WHwgaXMgbGVzcyB0aGFuLAorfAkJIGJ1dCBjbG9zZSB0bywgMTYzODAgbG9nKDIpIGFuZCB0aGUgYnJhbmNoIHRvIFN0ZXAgOSBpcworfAkJIHRha2VuLgorfAorfAlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCit8CQkyLjEJU2V0IEFkakZsYWcgOj0gMCAoaW5kaWNhdGVzIHRoZSBicmFuY2ggMS4zIC0+IDIgd2FzIHRha2VuKQorfAkJMi4yCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgorfAkJMi4zCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sIG9yIDYzLgorfAkJMi40CUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCit8CQkyLjUJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YgMl4oSi82NCkuCit8CQkyLjYJQ3JlYXRlIHRoZSB2YWx1ZSBTY2FsZSA9IDJeTS4KK3wJTm90ZXM6CVRoZSBjYWxjdWxhdGlvbiBpbiAyLjIgaXMgcmVhbGx5IHBlcmZvcm1lZCBieQorfAorfAkJCVogOj0gWCAqIGNvbnN0YW50Cit8CQkJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoWikKK3wKK3wJCSB3aGVyZQorfAorfAkJCWNvbnN0YW50IDo9IHNpbmdsZS1wcmVjaXNpb24oIDY0L2xvZyAyICkuCit8Cit8CQkgVXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uIGNvbnN0YW50IGF2b2lkcyBtZW1vcnkgYWNjZXNzLgorfAkJIEFub3RoZXIgZWZmZWN0IG9mIHVzaW5nIGEgc2luZ2xlLXByZWNpc2lvbiAiY29uc3RhbnQiIGlzCit8CQkgdGhhdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBaIGlzCit8Cit8CQkJWiA9IFgqKDY0L2xvZzIpKigxK2VwcyksIHxlcHN8IDw9IDJeKC0yNCkuCit8Cit8CQkgVGhpcyBlcnJvciBoYXMgdG8gYmUgY29uc2lkZXJlZCBsYXRlciBpbiBTdGVwcyAzIGFuZCA0LgorfAorfAlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgorfAkJMy4xCVIgOj0gWCArIE4qTDEsIHdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgorfAkJMy4yCVIgOj0gUiArIE4qTDIsIEwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4KK3wJTm90ZXM6CWEpIFRoZSB3YXkgTDEgYW5kIEwyIGFyZSBjaG9zZW4gZW5zdXJlcyBMMStMMiBhcHByb3hpbWF0ZQorfAkJIHRoZSB2YWx1ZQktbG9nMi82NAl0byA4OCBiaXRzIG9mIGFjY3VyYWN5LgorfAkJIGIpIE4qTDEgaXMgZXhhY3QgYmVjYXVzZSBOIGlzIG5vIGxvbmdlciB0aGFuIDIyIGJpdHMgYW5kCit8CQkgTDEgaXMgbm8gbG9uZ2VyIHRoYW4gMjQgYml0cy4KK3wJCSBjKSBUaGUgY2FsY3VsYXRpb24gWCtOKkwxIGlzIGFsc28gZXhhY3QgZHVlIHRvIGNhbmNlbGxhdGlvbi4KK3wJCSBUaHVzLCBSIGlzIHByYWN0aWNhbGx5IFgrTihMMStMMikgdG8gZnVsbCA2NCBiaXRzLgorfAkJIGQpIEl0IGlzIGltcG9ydGFudCB0byBlc3RpbWF0ZSBob3cgbGFyZ2UgY2FuIHxSfCBiZSBhZnRlcgorfAkJIFN0ZXAgMy4yLgorfAorfAkJCU4gPSBybmQtdG8taW50KCBYKjY0L2xvZzIgKDErZXBzKSApLCB8ZXBzfDw9Ml4oLTI0KQorfAkJCVgqNjQvbG9nMiAoMStlcHMpCT0JTiArIGYsCXxmfCA8PSAwLjUKK3wJCQlYKjY0L2xvZzIgLSBOCT0JZiAtIGVwcypYIDY0L2xvZzIKK3wJCQlYIC0gTipsb2cyLzY0CT0JZipsb2cyLzY0IC0gZXBzKlgKK3wKK3wKK3wJCSBOb3cgfFh8IDw9IDE2NDQ2IGxvZzIsIHRodXMKK3wKK3wJCQl8WCAtIE4qbG9nMi82NHwgPD0gKDAuNSArIDE2NDQ2LzJeKDE4KSkqbG9nMi82NAorfAkJCQkJPD0gMC41NyBsb2cyLzY0LgorfAkJIFRoaXMgYm91bmQgd2lsbCBiZSB1c2VkIGluIFN0ZXAgNC4KK3wKK3wJU3RlcCA0LglBcHByb3hpbWF0ZSBleHAoUiktMSBieSBhIHBvbHlub21pYWwKK3wJCQlwID0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQorfAlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMgYXJlCit8CQkgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBBMSAod2hpY2ggaXMgMS8yKSwgQTQgYW5kIEE1Cit8CQkgYXJlIHNpbmdsZSBwcmVjaXNpb247IEEyIGFuZCBBMyBhcmUgZG91YmxlIHByZWNpc2lvbi4KK3wJCSBiKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9ucyBhYm92ZSwKK3wJCQl8cCAtIChleHAoUiktMSl8IDwgMl4oLTY4LjgpIGZvciBhbGwgfFJ8IDw9IDAuMDA2Mi4KK3wJCSBOb3RlIHRoYXQgMC4wMDYyIGlzIHNsaWdodGx5IGJpZ2dlciB0aGFuIDAuNTcgbG9nMi82NC4KK3wJCSBjKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgcCBpcyBzZXBhcmF0ZWQgaW50bworfAkJIHR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXRpZXMKK3wJCQlwID0gWyBSICsgUipTKihBMiArIFMqQTQpIF0JKworfAkJCQlbIFMqKEExICsgUyooQTMgKyBTKkE1KSkgXQorfAkJIHdoZXJlIFMgPSBSKlIuCit8Cit8CVN0ZXAgNS4JQ29tcHV0ZSAyXihKLzY0KSpleHAoUikgPSAyXihKLzY0KSooMStwKSBieQorfAkJCQlhbnMgOj0gVCArICggVCpwICsgdCkKK3wJCSB3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCit8CU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCit8CQkgMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorfAkJIGFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMgcm91bmRlZAorfAkJIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZSB6ZXJvLiBUaGUKK3wJCSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsIFQtMiwgYW5kIFQtOAorfAkJIHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbCBnaXZlIG11Y2gKK3wJCSBtb3JlIGFjY3VyYXRlIGNvbXB1dGF0aW9uIG9mIHRoZSBmdW5jdGlvbiBFWFBNMS4KK3wKK3wJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCkKK3wJCQlleHAoWCkgPSAyXk0gKiAyXihKLzY0KSAqIGV4cChSKS4KK3wJCTYuMQlJZiBBZGpGbGFnID0gMCwgZ28gdG8gNi4zCit8CQk2LjIJYW5zIDo9IGFucyAqIEFkalNjYWxlCit8CQk2LjMJUmVzdG9yZSB0aGUgdXNlciBGUENSCit8CQk2LjQJUmV0dXJuIGFucyA6PSBhbnMgKiBTY2FsZS4gRXhpdC4KK3wJTm90ZXM6CUlmIEFkakZsYWcgPSAwLCB3ZSBoYXZlIFggPSBNbG9nMiArIEpsb2cyLzY0ICsgUiwKK3wJCSB8TXwgPD0gMTYzODAsIGFuZCBTY2FsZSA9IDJeTS4gTW9yZW92ZXIsIGV4cChYKSB3aWxsCit8CQkgbmVpdGhlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LiBJZiBBZGpGbGFnID0gMSwgdGhhdAorfAkJIG1lYW5zIHRoYXQKK3wJCQlYID0gKE0xK00pbG9nMiArIEpsb2cyLzY0ICsgUiwgfE0xK018ID49IDE2MzgwLgorfAkJIEhlbmNlLCBleHAoWCkgbWF5IG92ZXJmbG93IG9yIHVuZGVyZmxvdyBvciBuZWl0aGVyLgorfAkJIFdoZW4gdGhhdCBpcyB0aGUgY2FzZSwgQWRqU2NhbGUgPSAyXihNMSkgd2hlcmUgTTEgaXMKK3wJCSBhcHByb3hpbWF0ZWx5IE0uIFRodXMgNi4yIHdpbGwgbmV2ZXIgY2F1c2Ugb3Zlci91bmRlcmZsb3cuCit8CQkgUG9zc2libGUgZXhjZXB0aW9uIGluIDYuNCBpcyBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCit8CQkgVGhlIGluZXhhY3QgZXhjZXB0aW9uIGlzIG5vdCBnZW5lcmF0ZWQgaW4gNi40LiBBbHRob3VnaAorfAkJIG9uZSBjYW4gYXJndWUgdGhhdCB0aGUgaW5leGFjdCBmbGFnIHNob3VsZCBhbHdheXMgYmUKK3wJCSByYWlzZWQsIHRvIHNpbXVsYXRlIHRoYXQgZXhjZXB0aW9uIGNvc3QgdG8gbXVjaCB0aGFuIHRoZQorfAkJIGZsYWcgaXMgd29ydGggaW4gcHJhY3RpY2FsIHVzZXMuCit8Cit8CVN0ZXAgNy4JUmV0dXJuIDEgKyBYLgorfAkJNy4xCWFucyA6PSBYCit8CQk3LjIJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk3LjMJUmV0dXJuIGFucyA6PSAxICsgYW5zLiBFeGl0Cit8CU5vdGVzOglGb3Igbm9uLXplcm8gWCwgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdpbGwgYWx3YXlzIGJlCit8CQkgcmFpc2VkIGJ5IDcuMy4gVGhhdCBpcyB0aGUgb25seSBleGNlcHRpb24gcmFpc2VkIGJ5IDcuMy4KK3wJCSBOb3RlIGFsc28gdGhhdCB3ZSB1c2UgdGhlIEZNT1ZFTSBpbnN0cnVjdGlvbiB0byBtb3ZlIFgKK3wJCSBpbiBTdGVwIDcuMSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFwcGluZy4gKEFsdGhvdWdoCit8CQkgdGhlIEZNT1ZFTSBtYXkgbm90IHNlZW0gcmVsZXZhbnQgc2luY2UgWCBpcyBub3JtYWxpemVkLAorfAkJIHRoZSBwcmVjYXV0aW9uIHdpbGwgYmUgdXNlZnVsIGluIHRoZSBsaWJyYXJ5IHZlcnNpb24gb2YKK3wJCSB0aGlzIGNvZGUgd2hlcmUgdGhlIHNlcGFyYXRlIGVudHJ5IGZvciBkZW5vcm1hbGl6ZWQgaW5wdXRzCit8CQkgd2lsbCBiZSBkb25lIGF3YXkgd2l0aC4pCit8Cit8CVN0ZXAgOC4JSGFuZGxlIGV4cChYKSB3aGVyZSB8WHwgPj0gMTYzODBsb2cyLgorfAkJOC4xCUlmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIFN0ZXAgOS4KK3wJCShtaW1pYyAyLjIgLSAyLjYpCit8CQk4LjIJTiA6PSByb3VuZC10by1pbnRlZ2VyKCBYICogNjQvbG9nMiApCit8CQk4LjMJQ2FsY3VsYXRlIEogPSBOIG1vZCA2NCwgSiA9IDAsMSwuLi4sNjMKK3wJCTguNAlLIDo9IChOLUopLzY0LCBNMSA6PSB0cnVuY2F0ZShLLzIpLCBNID0gSy1NMSwgQWRqRmxhZyA6PSAxLgorfAkJOC41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIDJeKEovNjQpLgorfAkJOC42CUNyZWF0ZSB0aGUgdmFsdWVzIFNjYWxlID0gMl5NLCBBZGpTY2FsZSA9IDJeTTEuCit8CQk4LjcJR28gdG8gU3RlcCAzLgorfAlOb3RlczoJUmVmZXIgdG8gbm90ZXMgZm9yIDIuMiAtIDIuNi4KK3wKK3wJU3RlcCA5LglIYW5kbGUgZXhwKFgpLCB8WHwgPiAxNjQ4MCBsb2cyLgorfAkJOS4xCUlmIFggPCAwLCBnbyB0byA5LjMKK3wJCTkuMglhbnMgOj0gSHVnZSwgZ28gdG8gOS40Cit8CQk5LjMJYW5zIDo9IFRpbnkuCit8CQk5LjQJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk5LjUJUmV0dXJuIGFucyA6PSBhbnMgKiBhbnMuIEV4aXQuCit8CU5vdGVzOglFeHAoWCkgd2lsbCBzdXJlbHkgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBkZXBlbmRpbmcgb24KK3wJCSBYJ3Mgc2lnbi4gIkh1Z2UiIGFuZCAiVGlueSIgYXJlIHJlc3BlY3RpdmVseSBsYXJnZS90aW55Cit8CQkgZXh0ZW5kZWQtcHJlY2lzaW9uIG51bWJlcnMgd2hvc2Ugc3F1YXJlIG92ZXIvdW5kZXJmbG93Cit8CQkgd2l0aCBhbiBpbmV4YWN0IHJlc3VsdC4gVGh1cywgOS41IGFsd2F5cyByYWlzZXMgdGhlCit8CQkgaW5leGFjdCB0b2dldGhlciB3aXRoIGVpdGhlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCit8Cit8Cit8CXNldG94bTFkCit8CS0tLS0tLS0tCit8Cit8CVN0ZXAgMS4JU2V0IGFucyA6PSAwCit8Cit8CVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBYICsgYW5zLiBFeGl0LgorfAlOb3RlczoJVGhpcyB3aWxsIHJldHVybiBYIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvdW5kaW5nCit8CQkgcHJlY2lzaW9uIHByZXNjcmliZWQgYnkgdGhlIHVzZXIgRlBDUi4KK3wKK3wJc2V0b3htMQorfAktLS0tLS0tCit8Cit8CVN0ZXAgMS4JQ2hlY2sgfFh8Cit8CQkxLjEJSWYgfFh8ID49IDEvNCwgZ28gdG8gU3RlcCAxLjMuCit8CQkxLjIJR28gdG8gU3RlcCA3LgorfAkJMS4zCUlmIHxYfCA8IDcwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgorfAkJMS40CUdvIHRvIFN0ZXAgMTAuCit8CU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLgorfAkJIEhvd2V2ZXIsIGl0IGlzIGNvbmNlaXZhYmxlIHxYfCBjYW4gYmUgc21hbGwgdmVyeSBvZnRlbgorfAkJIGJlY2F1c2UgRVhQTTEgaXMgaW50ZW5kZWQgdG8gZXZhbHVhdGUgZXhwKFgpLTEgYWNjdXJhdGVseQorfAkJIHdoZW4gfFh8IGlzIHNtYWxsLiBGb3IgZnVydGhlciBkZXRhaWxzIG9uIHRoZSBjb21wYXJpc29ucywKK3wJCSBzZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMSBvZiBzZXRveC4KK3wKK3wJU3RlcCAyLglDYWxjdWxhdGUgTiA9IHJvdW5kLXRvLW5lYXJlc3QtaW50KCBYICogNjQvbG9nMiApLgorfAkJMi4xCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgorfAkJMi4yCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sIG9yIDYzLgorfAkJMi4zCUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCit8CQkyLjQJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YgMl4oSi82NCkuCit8CQkyLjUJQ3JlYXRlIHRoZSB2YWx1ZXMgU2MgPSAyXk0gYW5kIE9uZWJ5U2MgOj0gLTJeKC1NKS4KK3wJTm90ZXM6CVNlZSB0aGUgbm90ZXMgb24gU3RlcCAyIG9mIHNldG94LgorfAorfAlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgorfAkJMy4xCVIgOj0gWCArIE4qTDEsIHdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgorfAkJMy4yCVIgOj0gUiArIE4qTDIsIEwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4KK3wJTm90ZXM6CUFwcGx5aW5nIHRoZSBhbmFseXNpcyBvZiBTdGVwIDMgb2Ygc2V0b3ggaW4gdGhpcyBjYXNlCit8CQkgc2hvd3MgdGhhdCB8UnwgPD0gMC4wMDU1IChub3RlIHRoYXQgfFh8IDw9IDcwIGxvZzIgaW4KK3wJCSB0aGlzIGNhc2UpLgorfAorfAlTdGVwIDQuCUFwcHJveGltYXRlIGV4cChSKS0xIGJ5IGEgcG9seW5vbWlhbAorfAkJCXAgPSBSK1IqUiooQTErUiooQTIrUiooQTMrUiooQTQrUiooQTUrUipBNikpKSkpCit8CU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cyBhcmUKK3wJCSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEExICh3aGljaCBpcyAxLzIpLCBBNSBhbmQgQTYKK3wJCSBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQTIsIEEzIGFuZCBBNCBhcmUgZG91YmxlIHByZWNpc2lvbi4KK3wJCSBiKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9uIGFib3ZlLAorfAkJCXxwIC0gKGV4cChSKS0xKXwgPAl8UnwgKiAyXigtNzIuNykKK3wJCSBmb3IgYWxsIHxSfCA8PSAwLjAwNTUuCit8CQkgYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8KK3wJCSB0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQorfAkJCXAgPSBbIFIqUyooQTIgKyBTKihBNCArIFMqQTYpKSBdCSsKK3wJCQkJWyBSICsgUyooQTEgKyBTKihBMyArIFMqQTUpKSBdCit8CQkgd2hlcmUgUyA9IFIqUi4KK3wKK3wJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKnAgYnkKK3wJCQkJcCA6PSBUKnAKK3wJCSB3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCit8CU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCit8CQkgMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorfAkJIGFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMgcm91bmRlZAorfAkJIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZSB6ZXJvLiBUaGUKK3wJCSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsIFQtMiwgYW5kIFQtOAorfAkJIHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbCBiZSBleHBsb2l0ZWQKK3wJCSBpbiBTdGVwIDYgYmVsb3cuIFRoZSB0b3RhbCByZWxhdGl2ZSBlcnJvciBpbiBwIGlzIG5vCit8CQkgYmlnZ2VyIHRoYW4gMl4oLTY3LjcpIGNvbXBhcmVkIHRvIHRoZSBmaW5hbCByZXN1bHQuCit8Cit8CVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpLTEKK3wJCQlleHAoWCktMSA9IDJeTSAqICggMl4oSi82NCkgKyBwIC0gMl4oLU0pICkuCit8CQk2LjEJSWYgTSA8PSA2MywgZ28gdG8gU3RlcCA2LjMuCit8CQk2LjIJYW5zIDo9IFQgKyAocCArICh0ICsgT25lYnlTYykpLiBHbyB0byA2LjYKK3wJCTYuMwlJZiBNID49IC0zLCBnbyB0byA2LjUuCit8CQk2LjQJYW5zIDo9IChUICsgKHAgKyB0KSkgKyBPbmVieVNjLiBHbyB0byA2LjYKK3wJCTYuNQlhbnMgOj0gKFQgKyBPbmVieVNjKSArIChwICsgdCkuCit8CQk2LjYJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk2LjcJUmV0dXJuIGFucyA6PSBTYyAqIGFucy4gRXhpdC4KK3wJTm90ZXM6CVRoZSB2YXJpb3VzIGFycmFuZ2VtZW50cyBvZiB0aGUgZXhwcmVzc2lvbnMgZ2l2ZSBhY2N1cmF0ZQorfAkJIGV2YWx1YXRpb25zLgorfAorfAlTdGVwIDcuCWV4cChYKS0xIGZvciB8WHwgPCAxLzQuCit8CQk3LjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgOS4KK3wJCTcuMglHbyB0byBTdGVwIDguCit8Cit8CVN0ZXAgOC4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAyXigtNjUpLgorfAkJOC4xCUlmIHxYfCA8IDJeKC0xNjMxMiksIGdvdG8gOC4zCit8CQk4LjIJUmVzdG9yZSBGUENSOyByZXR1cm4gYW5zIDo9IFggLSAyXigtMTYzODIpLiBFeGl0LgorfAkJOC4zCVggOj0gWCAqIDJeKDE0MCkuCit8CQk4LjQJUmVzdG9yZSBGUENSOyBhbnMgOj0gYW5zIC0gMl4oLTE2MzgyKS4KK3wJCSBSZXR1cm4gYW5zIDo9IGFucyoyXigxNDApLiBFeGl0Cit8CU5vdGVzOglUaGUgaWRlYSBpcyB0byByZXR1cm4gIlggLSB0aW55IiB1bmRlciB0aGUgdXNlcgorfAkJIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZXMuIFRvIGF2b2lkIHVubmVjZXNzYXJ5Cit8CQkgaW5lZmZpY2llbmN5LCB3ZSBzdGF5IGF3YXkgZnJvbSBkZW5vcm1hbGl6ZWQgbnVtYmVycyB0aGUKK3wJCSBiZXN0IHdlIGNhbi4gRm9yIHxYfCA+PSAyXigtMTYzMTIpLCB0aGUgc3RyYWlnaHRmb3J3YXJkCit8CQkgOC4yIGdlbmVyYXRlcyB0aGUgaW5leGFjdCBleGNlcHRpb24gYXMgdGhlIGNhc2Ugd2FycmFudHMuCit8Cit8CVN0ZXAgOS4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAxLzQsIGJ5IGEgcG9seW5vbWlhbAorfAkJCXAgPSBYICsgWCpYKihCMSArIFgqKEIyICsgLi4uICsgWCpCMTIpKQorfAlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMgYXJlCit8CQkgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBCMSAod2hpY2ggaXMgMS8yKSwgQjkgdG8gQjEyCit8CQkgYXJlIHNpbmdsZSBwcmVjaXNpb247IEIzIHRvIEI4IGFyZSBkb3VibGUgcHJlY2lzaW9uOyBhbmQKK3wJCSBCMiBpcyBkb3VibGUgZXh0ZW5kZWQuCit8CQkgYikgRXZlbiB3aXRoIHRoZSByZXN0cmljdGlvbiBhYm92ZSwKK3wJCQl8cCAtIChleHAoWCktMSl8IDwgfFh8IDJeKC03MC42KQorfAkJIGZvciBhbGwgfFh8IDw9IDAuMjUxLgorfAkJIE5vdGUgdGhhdCAwLjI1MSBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAxLzQuCit8CQkgYykgVG8gZnVsbHkgcHJlc2VydmUgYWNjdXJhY3ksIHRoZSBwb2x5bm9taWFsIGlzIGNvbXB1dGVkCit8CQkgYXMJWCArICggUypCMSArCVEgKSB3aGVyZSBTID0gWCpYIGFuZAorfAkJCVEJPQlYKlMqKEIyICsgWCooQjMgKyAuLi4gKyBYKkIxMikpCit8CQkgZCkgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIFEgaXMgc2VwYXJhdGVkIGludG8KK3wJCSB0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQorfAkJCVEgPSBbIFgqUyooQjIgKyBTKihCNCArIC4uLiArIFMqQjEyKSkgXSArCit8CQkJCVsgUypTKihCMyArIFMqKEI1ICsgLi4uICsgUypCMTEpKSBdCit8Cit8CVN0ZXAgMTAuCUNhbGN1bGF0ZSBleHAoWCktMSBmb3IgfFh8ID49IDcwIGxvZyAyLgorfAkJMTAuMSBJZiBYID49IDcwbG9nMiAsIGV4cChYKSAtIDEgPSBleHAoWCkgZm9yIGFsbCBwcmFjdGljYWwKK3wJCSBwdXJwb3Nlcy4gVGhlcmVmb3JlLCBnbyB0byBTdGVwIDEgb2Ygc2V0b3guCit8CQkxMC4yIElmIFggPD0gLTcwbG9nMiwgZXhwKFgpIC0gMSA9IC0xIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLgorfAkJIGFucyA6PSAtMQorfAkJIFJlc3RvcmUgdXNlciBGUENSCit8CQkgUmV0dXJuIGFucyA6PSBhbnMgKyAyXigtMTI2KS4gRXhpdC4KK3wJTm90ZXM6CTEwLjIgd2lsbCBhbHdheXMgY3JlYXRlIGFuIGluZXhhY3QgYW5kIHJldHVybiAtMSArIHRpbnkKK3wJCSBpbiB0aGUgdXNlciByb3VuZGluZyBwcmVjaXNpb24gYW5kIG1vZGUuCit8Cit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xzZXRveAlpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK0wyOgkubG9uZwkweDNGREMwMDAwLDB4ODJFMzA4NjUsMHg0MzYxQzRDNiwweDAwMDAwMDAwCisKK0VYUEEzOgkubG9uZwkweDNGQTU1NTU1LDB4NTU1NTQ0MzEKK0VYUEEyOgkubG9uZwkweDNGQzU1NTU1LDB4NTU1NTQwMTgKKworSFVHRToJLmxvbmcJMHg3RkZFMDAwMCwweEZGRkZGRkZGLDB4RkZGRkZGRkYsMHgwMDAwMDAwMAorVElOWToJLmxvbmcJMHgwMDAxMDAwMCwweEZGRkZGRkZGLDB4RkZGRkZGRkYsMHgwMDAwMDAwMAorCitFTTFBNDoJLmxvbmcJMHgzRjgxMTExMSwweDExMTc0Mzg1CitFTTFBMzoJLmxvbmcJMHgzRkE1NTU1NSwweDU1NTU0RjVBCisKK0VNMUEyOgkubG9uZwkweDNGQzU1NTU1LDB4NTU1NTU1NTUsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0VNMUI4OgkubG9uZwkweDNFQzcxREUzLDB4QTU3NzQ2ODIKK0VNMUI3OgkubG9uZwkweDNFRkEwMUEwLDB4MTlEN0NCNjgKKworRU0xQjY6CS5sb25nCTB4M0YyQTAxQTAsMHgxQTAxOURGMworRU0xQjU6CS5sb25nCTB4M0Y1NkMxNkMsMHgxNkMxNzBFMgorCitFTTFCNDoJLmxvbmcJMHgzRjgxMTExMSwweDExMTExMTExCitFTTFCMzoJLmxvbmcJMHgzRkE1NTU1NSwweDU1NTU1NTU1CisKK0VNMUIyOgkubG9uZwkweDNGRkMwMDAwLDB4QUFBQUFBQUEsMHhBQUFBQUFBQgorCS5sb25nCTB4MDAwMDAwMDAKKworVFdPMTQwOgkubG9uZwkweDQ4QjAwMDAwLDB4MDAwMDAwMDAKK1RXT04xNDA6CS5sb25nCTB4MzczMDAwMDAsMHgwMDAwMDAwMAorCitFWFBUQkw6CisJLmxvbmcJMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4MTY0RDFGMywweEJDMDMwNzc0LDB4OUY4NDFBOUIKKwkubG9uZwkweDNGRkYwMDAwLDB4ODJDRDg2OTgsMHhBQzJCQTFEOCwweDlGQzFENUI5CisJLmxvbmcJMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDgsMHhBMDcyODM2OQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4NUFBQzM2NywweENDNDg3QjE0LDB4MUZDNUM5NUMKKwkubG9uZwkweDNGRkYwMDAwLDB4ODcxRjYxOTYsMHg5RThEMTAxMCwweDFFRTg1QzlGCisJLmxvbmcJMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjgsMHg5RkEyMDcyOQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4QTE0RDU3NSwweDQ5NkVGRDlDLDB4QTA3QkY5QUYKKwkubG9uZwkweDNGRkYwMDAwLDB4OEI5NUMxRTMsMHhFQThCRDZFOCwweEEwMDIwRENGCisJLmxvbmcJMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTQsMHgyMDVBNjNEQQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4RUE0Mzk4QiwweDQ1Q0Q1M0MwLDB4MUVCNzAwNTEKKwkubG9uZwkweDNGRkYwMDAwLDB4OTAzMURDNDMsMHgxNDY2QjFEQywweDFGNkVCMDI5CisJLmxvbmcJMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzgsMHhBMDc4MTQ5NAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5MzVBMkIyRiwweDEzRTZFOTJDLDB4OUVCMzE5QjAKKwkubG9uZwkweDNGRkYwMDAwLDB4OTRGNEVGQTgsMHhGRUY3MDk2MCwweDIwMTc0NTdECisJLmxvbmcJMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgxRjExRDUzNworCS5sb25nCTB4M0ZGRjAwMDAsMHg5ODM3RjA1MSwweDhEQjhBOTcwLDB4OUZCOTUyREQKKwkubG9uZwkweDNGRkYwMDAwLDB4OTlFMDQ1OTMsMHgyMEI3RkE2NCwweDFGRTQzMDg3CisJLmxvbmcJMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzgsMHgxRkEyQTgxOAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5RDNFRDlBNywweDJDRkZCNzUwLDB4MUZERTQ5NEQKKwkubG9uZwkweDNGRkYwMDAwLDB4OUVGNTMyNjAsMHg5MUExMTFBQywweDIwNTA0ODkwCisJLmxvbmcJMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzQsMHhBMDczNjkxQworCS5sb25nCTB4M0ZGRjAwMDAsMHhBMjcwNDMwMywweDBDNDk2ODE4LDB4MUY5QjdBMDUKKwkubG9uZwkweDNGRkYwMDAwLDB4QTQzNTE1QUUsMHgwOUU2ODBBMCwweEEwNzk3MTI2CisJLmxvbmcJMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUMsMHhBMDcxQTE0MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBN0NEOTNCNCwweEU5NjUzNTY4LDB4MjA0RjYyREEKKwkubG9uZwkweDNGRkYwMDAwLDB4QTlBMTVBQjQsMHhFQTdDMEVGOCwweDFGMjgzQzRBCisJLmxvbmcJMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzgsMHg5RjlBN0ZEQworCS5sb25nCTB4M0ZGRjAwMDAsMHhBRDU4M0VFQSwweDQyQTE0QUM4LDB4QTA1QjNGQUMKKwkubG9uZwkweDNGRkYwMDAwLDB4QUYzQjc4QUQsMHg2OTBBNDM3NCwweDFGREYyNjEwCisJLmxvbmcJMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHg5RjcwNUY5MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCMzExQzQxMiwweEE5MTEyNDg4LDB4MjAxRjY3OEEKKwkubG9uZwkweDNGRkYwMDAwLDB4QjUwNEYzMzMsMHhGOURFNjQ4NCwweDFGMzJGQjEzCisJLmxvbmcJMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTAsMHgyMDAzOEIzMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCOEZCQUY0NywweDYyRkI5RUU4LDB4MjAwREMzQ0MKKwkubG9uZwkweDNGRkYwMDAwLDB4QkFGRjVBQjIsMHgxMzNFNDVGQywweDlGOEIyQUU2CisJLmxvbmcJMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QzAsMHhBMDJCQkY3MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRjE3OTlCNiwweDdBNzMxMDg0LDB4QTAwQkY1MTgKKwkubG9uZwkweDNGRkYwMDAwLDB4QzEyQzRDQ0EsMHg2NjcwOTQ1OCwweEEwNDFERDQxCisJLmxvbmcJMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDgsMHg5RkRGMTM3QgorCS5sb25nCTB4M0ZGRjAwMDAsMHhDNTY3MkExMSwweDU1MDZEQURDLDB4MjAxRjE1NjgKKwkubG9uZwkweDNGRkYwMDAwLDB4Qzc4RDc0QzgsMHhBQkI5QjE1QywweDFGQzEzQTJFCisJLmxvbmcJMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTQsMHhBMDNGOEYwMworCS5sb25nCTB4M0ZGRjAwMDAsMHhDQkVDMTRGRSwweEYyNzI3QzVDLDB4MUZGNDkwN0QKKwkubG9uZwkweDNGRkYwMDAwLDB4Q0UyNDhDMTUsMHgxRjg0ODBFNCwweDlFNkU1M0U0CisJLmxvbmcJMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTQsMHgxRkQ2RDQ1QworCS5sb25nCTB4M0ZGRjAwMDAsMHhEMkE4MUQ5MSwweEYxMkFFNDVDLDB4QTA3NkVEQjkKKwkubG9uZwkweDNGRkYwMDAwLDB4RDRGMzVBQUIsMHhDRkVERkEyMCwweDlGQTZERTIxCisJLmxvbmcJMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgxRUU2OUEyRgorCS5sb25nCTB4M0ZGRjAwMDAsMHhEOTlEMTVDMiwweDc4QUZEN0I0LDB4MjA3RjQzOUYKKwkubG9uZwkweDNGRkYwMDAwLDB4REJGQkI3OTcsMHhEQUYyMzc1NCwweDIwMUVDMjA3CisJLmxvbmcJMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHg5RThCRTE3NQorCS5sb25nCTB4M0ZGRjAwMDAsMHhFMENDREVFQywweDJBOTRFMTEwLDB4MjAwMzJDNEIKKwkubG9uZwkweDNGRkYwMDAwLDB4RTMzRjg5NzIsMHhCRThBNUE1MCwweDIwMDRERkY1CisJLmxvbmcJMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgxRTcyRjQ3QQorCS5sb25nCTB4M0ZGRjAwMDAsMHhFODM5NkE1MCwweDNDNEJEQzY4LDB4MUY3MjJGMjIKKwkubG9uZwkweDNGRkYwMDAwLDB4RUFDMEM2RTcsMHhERDI0MzkzMCwweEEwMTdFOTQ1CisJLmxvbmcJMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgxRjQwMUE1QgorCS5sb25nCTB4M0ZGRjAwMDAsMHhFRkU0Qjk5QiwweERDREFGNUNDLDB4OUZCOUE5RTMKKwkubG9uZwkweDNGRkYwMDAwLDB4RjI4MTc3M0MsMHg1OUZGQjEzOCwweDIwNzQ0QzA1CisJLmxvbmcJMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgxRjc3M0ExOQorCS5sb25nCTB4M0ZGRjAwMDAsMHhGN0QwREY3MywweDBBRDEzQkI4LDB4MUZGRTkwRDUKKwkubG9uZwkweDNGRkYwMDAwLDB4RkE4M0IyREIsMHg3MjJBMDMzQywweEEwNDFFRDIyCisJLmxvbmcJMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzQsMHgxRjg1M0YzQQorCisJLnNldAlBREpGTEFHLExfU0NSMgorCS5zZXQJU0NBTEUsRlBfU0NSMQorCS5zZXQJQURKU0NBTEUsRlBfU0NSMgorCS5zZXQJU0MsRlBfU0NSMworCS5zZXQJT05FQllTQyxGUF9TQ1I0CisKKwl8IHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZgl0X3VuZmwKKwl8eHJlZgl0X292ZmwKKworCS5nbG9iYWwJc2V0b3hkCitzZXRveGQ6Cit8LS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBYIGlzIGRlbm9ybWFsaXplZAorCW1vdmVsCQkoJWEwKSwlZDAKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCisJb3JpbAkJIzB4MDA4MDAwMDAsJWQwCQl8IC4uLnNpZ24oWCkqMl4oLTEyNikKKwltb3ZlbAkJJWQwLC0oJXNwKQorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMAorCWZtb3ZlbAkJJWQxLCVmcGNyCisJZmFkZHMJCSglc3ApKywlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJLmdsb2JhbAlzZXRveAorc2V0b3g6Cit8LS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgYW5kIG5vdCBOYU4ncworCit8LS1TdGVwIDEuCisJbW92ZWwJCSglYTApLCVkMAkgfCAuLi5sb2FkIHBhcnQgb2YgaW5wdXQgWAorCWFuZGlsCQkjMHg3RkZGMDAwMCwlZDAJfCAuLi5iaWFzZWQgZXhwby4gb2YgWAorCWNtcGlsCQkjMHgzRkJFMDAwMCwlZDAJfCAuLi4yXigtNjUpCisJYmdlcwkJRVhQQzEJCXwgLi4ubm9ybWFsIGNhc2UKKwlicmEJCUVYUFNNCisKK0VYUEMxOgorfC0tVGhlIGNhc2UgfFh8ID49IDJeKC02NSkKKwltb3ZldwkJNCglYTApLCVkMAl8IC4uLmV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21waWwJCSMweDQwMENCMTY3LCVkMAl8IC4uLjE2MzgwIGxvZzIgdHJ1bmMuIDE2IGJpdHMKKwlibHRzCQlFWFBNQUlOCSB8IC4uLm5vcm1hbCBjYXNlCisJYnJhCQlFWFBCSUcKKworRVhQTUFJTjoKK3wtLVN0ZXAgMi4KK3wtLVRoaXMgaXMgdGhlIG5vcm1hbCBicmFuY2g6CTJeKC02NSkgPD0gfFh8IDwgMTYzODAgbG9nMi4KKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5sb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVscwkJIzB4NDJCOEFBM0IsJWZwMAl8IC4uLjY0L2xvZzIgKiBYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKKwltb3ZlbAkJIzAsQURKRkxBRyglYTYpCisJZm1vdmVsCQklZnAwLCVkMAkJfCAuLi5OID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFWFBUQkwsJWExCisJZm1vdmVsCQklZDAsJWZwMAkJfCAuLi5jb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCisJbW92ZWwJCSVkMCxMX1NDUjEoJWE2KQl8IC4uLnNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZGlsCQkjMHgzRiwlZDAJCXwgLi4uRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsbAkJIzQsJWQwCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAKKwlhc3JsCQkjNiwlZDAJCXwgLi4uRDAgaXMgTQorCWFkZGl3CQkjMHgzRkZGLCVkMAl8IC4uLmJpYXNlZCBleHBvLiBvZiAyXihNKQorCW1vdmV3CQlMMixMX1NDUjEoJWE2KQl8IC4uLnByZWZldGNoIEwyLCBubyBuZWVkIGluIENCCisKK0VYUENPTlQxOgorfC0tU3RlcCAzLgorfC0tZnAxLGZwMiBzYXZlZCBvbiB0aGUgc3RhY2suIGZwMCBpcyBOLCBmcDEgaXMgWCwKK3wtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJZm1vdmV4CQklZnAwLCVmcDIKKwlmbXVscwkJIzB4QkMzMTcyMTgsJWZwMAl8IC4uLk4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQorCWZtdWx4CQlMMiwlZnAyCQl8IC4uLk4gKiBMMiwgTDErTDIgPSAtbG9nMi82NAorCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uWCArIE4qTDEKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLmZwMCBpcyBSLCByZWR1Y2VkIGFyZy4KK3wJTU9WRS5XCQkjJDNGQTUsRVhQQTMJLi4ubG9hZCBFWFBBMyBpbiBjYWNoZQorCit8LS1TdGVwIDQuCit8LS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKK3wtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqQTUpKSkpCit8LS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCit8LS1bUitSKlMqKEEyK1MqQTQpXSArIFtTKihBMStTKihBMytTKkE1KSldCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZtdWx4CQklZnAxLCVmcDEJCXwgLi4uZnAxIElTIFMgPSBSKlIKKworCWZtb3ZlcwkJIzB4M0FCNjBCNzAsJWZwMgl8IC4uLmZwMiBJUyBBNQorfAlNT1ZFLlcJCSMwLDIoJWExKQkuLi5sb2FkIDJeKEovNjQpIGluIGNhY2hlCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLmZwMiBJUyBTKkE1CisJZm1vdmV4CQklZnAxLCVmcDMKKwlmbXVscwkJIzB4M0MwODg4OTUsJWZwMwl8IC4uLmZwMyBJUyBTKkE0CisKKwlmYWRkZAkJRVhQQTMsJWZwMgl8IC4uLmZwMiBJUyBBMytTKkE1CisJZmFkZGQJCUVYUEEyLCVmcDMJfCAuLi5mcDMgSVMgQTIrUypBNAorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5mcDIgSVMgUyooQTMrUypBNSkKKwltb3ZldwkJJWQwLFNDQUxFKCVhNikJfCAuLi5TQ0FMRSBpcyAyXihNKSBpbiBleHRlbmRlZAorCWNscncJCVNDQUxFKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxTQ0FMRSs0KCVhNikKKwljbHJsCQlTQ0FMRSs4KCVhNikKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uZnAzIElTIFMqKEEyK1MqQTQpCisKKwlmYWRkcwkJIzB4M0YwMDAwMDAsJWZwMgl8IC4uLmZwMiBJUyBBMStTKihBMytTKkE1KQorCWZtdWx4CQklZnAwLCVmcDMJCXwgLi4uZnAzIElTIFIqUyooQTIrUypBNCkKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uZnAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQorCWZhZGR4CQklZnAzLCVmcDAJCXwgLi4uZnAwIElTIFIrUipTKihBMitTKkE0KSwKK3wJCQkJCS4uLmZwMyByZWxlYXNlZAorCisJZm1vdmV4CQkoJWExKSssJWZwMQl8IC4uLmZwMSBpcyBsZWFkLiBwdC4gb2YgMl4oSi82NCkKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLmZwMCBpcyBFWFAoUikgLSAxCit8CQkJCQkuLi5mcDIgcmVsZWFzZWQKKworfC0tU3RlcCA1Cit8LS1maW5hbCByZWNvbnN0cnVjdGlvbiBwcm9jZXNzCit8LS1FWFAoWCkgPSAyXk0gKiAoIDJeKEovNjQpICsgMl4oSi82NCkqKEVYUChSKS0xKSApCisKKwlmbXVseAkJJWZwMSwlZnAwCQl8IC4uLjJeKEovNjQpKihFeHAoUiktMSkKKwlmbW92ZW14CSglYTcpKywlZnAyLSVmcDIvJWZwMwl8IC4uLmZwMiByZXN0b3JlZAorCWZhZGRzCQkoJWExKSwlZnAwCXwgLi4uYWNjdXJhdGUgMl4oSi82NCkKKworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uMl4oSi82NCkgKyAyXihKLzY0KSouLi4KKwltb3ZlbAkJQURKRkxBRyglYTYpLCVkMAorCit8LS1TdGVwIDYKKwl0c3RsCQklZDAKKwliZXFzCQlOT1JNQUwKK0FESlVTVDoKKwlmbXVseAkJQURKU0NBTEUoJWE2KSwlZnAwCitOT1JNQUw6CisJZm1vdmVsCQklZDEsJUZQQ1IJCXwgLi4ucmVzdG9yZSB1c2VyIEZQQ1IKKwlmbXVseAkJU0NBTEUoJWE2KSwlZnAwCXwgLi4ubXVsdGlwbHkgMl4oTSkKKwlicmEJCXRfZnJjaW54CisKK0VYUFNNOgorfC0tU3RlcCA3CisJZm1vdmVteAkoJWEwKSwlZnAwLSVmcDAJfCAuLi5pbiBjYXNlIFggaXMgZGVub3JtYWxpemVkCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMAl8IC4uLjErWCBpbiB1c2VyIG1vZGUKKwlicmEJCXRfZnJjaW54CisKK0VYUEJJRzoKK3wtLVN0ZXAgOAorCWNtcGlsCQkjMHg0MDBDQjI3QywlZDAJfCAuLi4xNjQ4MCBsb2cyCisJYmd0cwkJRVhQMkJJRworfC0tU3RlcHMgOC4yIC0tIDguNgorCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLmxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZtdWxzCQkjMHg0MkI4QUEzQiwlZnAwCXwgLi4uNjQvbG9nMiAqIFgKKwlmbW92ZW14CSAlZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKKwltb3ZlbAkJIzEsQURKRkxBRyglYTYpCisJZm1vdmVsCQklZnAwLCVkMAkJfCAuLi5OID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFWFBUQkwsJWExCisJZm1vdmVsCQklZDAsJWZwMAkJfCAuLi5jb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCW1vdmVsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLnNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZGlsCQkjMHgzRiwlZDAJCSB8IC4uLkQwIGlzIEogPSBOIG1vZCA2NAorCWxzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCQkJfCAuLi5hZGRyZXNzIG9mIDJeKEovNjQpCisJbW92ZWwJCUxfU0NSMSglYTYpLCVkMAorCWFzcmwJCSM2LCVkMAkJCXwgLi4uRDAgaXMgSworCW1vdmVsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLnNhdmUgSyB0ZW1wb3JhcmlseQorCWFzcmwJCSMxLCVkMAkJCXwgLi4uRDAgaXMgTTEKKwlzdWJsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLmExIGlzIE0KKwlhZGRpdwkJIzB4M0ZGRiwlZDAJCXwgLi4uYmlhc2VkIGV4cG8uIG9mIDJeKE0xKQorCW1vdmV3CQklZDAsQURKU0NBTEUoJWE2KQkJfCAuLi5BREpTQ0FMRSA6PSAyXihNMSkKKwljbHJ3CQlBREpTQ0FMRSsyKCVhNikKKwltb3ZlbAkJIzB4ODAwMDAwMDAsQURKU0NBTEUrNCglYTYpCisJY2xybAkJQURKU0NBTEUrOCglYTYpCisJbW92ZWwJCUxfU0NSMSglYTYpLCVkMAkJCXwgLi4uRDAgaXMgTQorCWFkZGl3CQkjMHgzRkZGLCVkMAkJfCAuLi5iaWFzZWQgZXhwby4gb2YgMl4oTSkKKwlicmEJCUVYUENPTlQxCQl8IC4uLmdvIGJhY2sgdG8gU3RlcCAzCisKK0VYUDJCSUc6Cit8LS1TdGVwIDkKKwlmbW92ZWwJCSVkMSwlRlBDUgorCW1vdmVsCQkoJWEwKSwlZDAKKwliY2xyYgkJI3NpZ25fYml0LCglYTApCQl8IC4uLnNldG94IGFsd2F5cyByZXR1cm5zIHBvc2l0aXZlCisJY21waWwJCSMwLCVkMAorCWJsdAkJdF91bmZsCisJYnJhCQl0X292ZmwKKworCS5nbG9iYWwJc2V0b3htMWQKK3NldG94bTFkOgorfC0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZGVub3JtYWxpemVkCit8LS1TdGVwIDAuCisJYnJhCQl0X2V4dGRucm0KKworCisJLmdsb2JhbAlzZXRveG0xCitzZXRveG0xOgorfC0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgbm9uLU5hTgorCit8LS1TdGVwIDEuCit8LS1TdGVwIDEuMQorCW1vdmVsCQkoJWEwKSwlZDAJIHwgLi4ubG9hZCBwYXJ0IG9mIGlucHV0IFgKKwlhbmRpbAkJIzB4N0ZGRjAwMDAsJWQwCXwgLi4uYmlhc2VkIGV4cG8uIG9mIFgKKwljbXBpbAkJIzB4M0ZGRDAwMDAsJWQwCXwgLi4uMS80CisJYmdlcwkJRU0xQ09OMQkgfCAuLi58WHwgPj0gMS80CisJYnJhCQlFTTFTTQorCitFTTFDT04xOgorfC0tU3RlcCAxLjMKK3wtLVRoZSBjYXNlIHxYfCA+PSAxLzQKKwltb3ZldwkJNCglYTApLCVkMAl8IC4uLmV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21waWwJCSMweDQwMDRDMjE1LCVkMAl8IC4uLjcwbG9nMiByb3VuZGVkIHVwIHRvIDE2IGJpdHMKKwlibGVzCQlFTTFNQUlOCSB8IC4uLjEvNCA8PSB8WHwgPD0gNzBsb2cyCisJYnJhCQlFTTFCSUcKKworRU0xTUFJTjoKK3wtLVN0ZXAgMi4KK3wtLVRoaXMgaXMgdGhlIGNhc2U6CTEvNCA8PSB8WHwgPD0gNzAgbG9nMi4KKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5sb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVscwkJIzB4NDJCOEFBM0IsJWZwMAl8IC4uLjY0L2xvZzIgKiBYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKK3wJTU9WRS5XCQkjJDNGODEsRU0xQTQJCS4uLnByZWZldGNoIGluIENCIG1vZGUKKwlmbW92ZWwJCSVmcDAsJWQwCQl8IC4uLk4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVYUFRCTCwlYTEKKwlmbW92ZWwJCSVkMCwlZnAwCQl8IC4uLmNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisKKwltb3ZlbAkJJWQwLExfU0NSMSglYTYpCQkJfCAuLi5zYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmRpbAkJIzB4M0YsJWQwCQkgfCAuLi5EMCBpcyBKID0gTiBtb2QgNjQKKwlsc2xsCQkjNCwlZDAKKwlhZGRhbAkJJWQwLCVhMQkJCXwgLi4uYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAKKwlhc3JsCQkjNiwlZDAJCQl8IC4uLkQwIGlzIE0KKwltb3ZlbAkJJWQwLExfU0NSMSglYTYpCQkJfCAuLi5zYXZlIGEgY29weSBvZiBNCit8CU1PVkUuVwkJIyQzRkRDLEwyCQkuLi5wcmVmZXRjaCBMMiBpbiBDQiBtb2RlCisKK3wtLVN0ZXAgMy4KK3wtLWZwMSxmcDIgc2F2ZWQgb24gdGhlIHN0YWNrLiBmcDAgaXMgTiwgZnAxIGlzIFgsCit8LS1hMCBwb2ludHMgdG8gMl4oSi82NCksIEQwIGFuZCBhMSBib3RoIGNvbnRhaW4gTQorCWZtb3ZleAkJJWZwMCwlZnAyCisJZm11bHMJCSMweEJDMzE3MjE4LCVmcDAJfCAuLi5OICogTDEsIEwxID0gbGVhZCgtbG9nMi82NCkKKwlmbXVseAkJTDIsJWZwMgkJfCAuLi5OICogTDIsIEwxK0wyID0gLWxvZzIvNjQKKwlmYWRkeAkJJWZwMSwlZnAwCSB8IC4uLlggKyBOKkwxCisJZmFkZHgJCSVmcDIsJWZwMAkgfCAuLi5mcDAgaXMgUiwgcmVkdWNlZCBhcmcuCit8CU1PVkUuVwkJIyQzRkM1LEVNMUEyCQkuLi5sb2FkIEVNMUEyIGluIGNhY2hlCisJYWRkaXcJCSMweDNGRkYsJWQwCQl8IC4uLkQwIGlzIGJpYXNlZCBleHBvLiBvZiAyXk0KKworfC0tU3RlcCA0LgorfC0tV0UgTk9XIENPTVBVVEUgRVhQKFIpLTEgQlkgQSBQT0xZTk9NSUFMCit8LS0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKihBNSArIFIqQTYpKSkpKQorfC0tVE8gRlVMTFkgVVRJTElaRSBUSEUgUElQRUxJTkUsIFdFIENPTVBVVEUgUyA9IFIqUgorfC0tW1IqUyooQTIrUyooQTQrUypBNikpXSArIFtSK1MqKEExK1MqKEEzK1MqQTUpKV0KKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5mcDEgSVMgUyA9IFIqUgorCisJZm1vdmVzCQkjMHgzOTUwMDk3QiwlZnAyCXwgLi4uZnAyIElTIGE2Cit8CU1PVkUuVwkJIzAsMiglYTEpCS4uLmxvYWQgMl4oSi82NCkgaW4gY2FjaGUKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uZnAyIElTIFMqQTYKKwlmbW92ZXgJCSVmcDEsJWZwMworCWZtdWxzCQkjMHgzQUI2MEI2QSwlZnAzCXwgLi4uZnAzIElTIFMqQTUKKworCWZhZGRkCQlFTTFBNCwlZnAyCXwgLi4uZnAyIElTIEE0K1MqQTYKKwlmYWRkZAkJRU0xQTMsJWZwMwl8IC4uLmZwMyBJUyBBMytTKkE1CisJbW92ZXcJCSVkMCxTQyglYTYpCQl8IC4uLlNDIGlzIDJeKE0pIGluIGV4dGVuZGVkCisJY2xydwkJU0MrMiglYTYpCisJbW92ZWwJCSMweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNscmwJCVNDKzgoJWE2KQorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5mcDIgSVMgUyooQTQrUypBNikKKwltb3ZlbAkJTF9TQ1IxKCVhNiksJWQwCQl8IC4uLkQwIGlzCU0KKwluZWd3CQklZDAJCXwgLi4uRDAgaXMgLU0KKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLmZwMyBJUyBTKihBMytTKkE1KQorCWFkZGl3CQkjMHgzRkZGLCVkMAl8IC4uLmJpYXNlZCBleHBvLiBvZiAyXigtTSkKKwlmYWRkZAkJRU0xQTIsJWZwMgl8IC4uLmZwMiBJUyBBMitTKihBNCtTKkE2KQorCWZhZGRzCQkjMHgzRjAwMDAwMCwlZnAzCXwgLi4uZnAzIElTIEExK1MqKEEzK1MqQTUpCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLmZwMiBJUyBTKihBMitTKihBNCtTKkE2KSkKKwlvcml3CQkjMHg4MDAwLCVkMAl8IC4uLnNpZ25lZC9leHBvLiBvZiAtMl4oLU0pCisJbW92ZXcJCSVkMCxPTkVCWVNDKCVhNikJfCAuLi5PbmVieVNjIGlzIC0yXigtTSkKKwljbHJ3CQlPTkVCWVNDKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxPTkVCWVNDKzQoJWE2KQorCWNscmwJCU9ORUJZU0MrOCglYTYpCisJZm11bHgJCSVmcDMsJWZwMQkJfCAuLi5mcDEgSVMgUyooQTErUyooQTMrUypBNSkpCit8CQkJCQkuLi5mcDMgcmVsZWFzZWQKKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIElTIFIqUyooQTIrUyooQTQrUypBNikpCisJZmFkZHgJCSVmcDEsJWZwMAkJfCAuLi5mcDAgSVMgUitTKihBMStTKihBMytTKkE1KSkKK3wJCQkJCS4uLmZwMSByZWxlYXNlZAorCisJZmFkZHgJCSVmcDIsJWZwMAkJfCAuLi5mcDAgSVMgRVhQKFIpLTEKK3wJCQkJCS4uLmZwMiByZWxlYXNlZAorCWZtb3ZlbXgJKCVhNykrLCVmcDItJWZwMi8lZnAzCXwgLi4uZnAyIHJlc3RvcmVkCisKK3wtLVN0ZXAgNQorfC0tQ29tcHV0ZSAyXihKLzY0KSpwCisKKwlmbXVseAkJKCVhMSksJWZwMAl8IC4uLjJeKEovNjQpKihFeHAoUiktMSkKKworfC0tU3RlcCA2Cit8LS1TdGVwIDYuMQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAJCXwgLi4ucmV0cmlldmUgTQorCWNtcGlsCQkjNjMsJWQwCisJYmxlcwkJTUxFNjMKK3wtLVN0ZXAgNi4yCU0gPj0gNjQKKwlmbW92ZXMJCTEyKCVhMSksJWZwMQl8IC4uLmZwMSBpcyB0CisJZmFkZHgJCU9ORUJZU0MoJWE2KSwlZnAxCXwgLi4uZnAxIGlzIHQrT25lYnlTYworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4ucCsodCtPbmVieVNjKSwgZnAxIHJlbGVhc2VkCisJZmFkZHgJCSglYTEpLCVmcDAJfCAuLi5UKyhwKyh0K09uZWJ5U2MpKQorCWJyYXMJCUVNMVNDQUxFCitNTEU2MzoKK3wtLVN0ZXAgNi4zCU0gPD0gNjMKKwljbXBpbAkJIy0zLCVkMAorCWJnZXMJCU1HRU4zCitNTFROMzoKK3wtLVN0ZXAgNi40CU0gPD0gLTQKKwlmYWRkcwkJMTIoJWExKSwlZnAwCXwgLi4ucCt0CisJZmFkZHgJCSglYTEpLCVmcDAJfCAuLi5UKyhwK3QpCisJZmFkZHgJCU9ORUJZU0MoJWE2KSwlZnAwCXwgLi4uT25lYnlTYyArIChUKyhwK3QpKQorCWJyYXMJCUVNMVNDQUxFCitNR0VOMzoKK3wtLVN0ZXAgNi41CS0zIDw9IE0gPD0gNjMKKwlmbW92ZXgJCSglYTEpKywlZnAxCXwgLi4uZnAxIGlzIFQKKwlmYWRkcwkJKCVhMSksJWZwMAl8IC4uLmZwMCBpcyBwK3QKKwlmYWRkeAkJT05FQllTQyglYTYpLCVmcDEJfCAuLi5mcDEgaXMgVCtPbmVieVNjCisJZmFkZHgJCSVmcDEsJWZwMAkJfCAuLi4oVCtPbmVieVNjKSsocCt0KQorCitFTTFTQ0FMRToKK3wtLVN0ZXAgNi42CisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmbXVseAkJU0MoJWE2KSwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKK0VNMVNNOgorfC0tU3RlcCA3CXxYfCA8IDEvNC4KKwljbXBpbAkJIzB4M0ZCRTAwMDAsJWQwCXwgLi4uMl4oLTY1KQorCWJnZXMJCUVNMVBPTFkKKworRU0xVElOWToKK3wtLVN0ZXAgOAl8WHwgPCAyXigtNjUpCisJY21waWwJCSMweDAwMzMwMDAwLCVkMAl8IC4uLjJeKC0xNjMxMikKKwlibHRzCQlFTTEyVElOWQorfC0tU3RlcCA4LjIKKwltb3ZlbAkJIzB4ODAwMTAwMDAsU0MoJWE2KQl8IC4uLlNDIGlzIC0yXigtMTYzODIpCisJbW92ZWwJCSMweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNscmwJCVNDKzgoJWE2KQorCWZtb3ZleAkJKCVhMCksJWZwMAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHgJCVNDKCVhNiksJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTEyVElOWToKK3wtLVN0ZXAgOC4zCisJZm1vdmV4CQkoJWEwKSwlZnAwCisJZm11bGQJCVRXTzE0MCwlZnAwCisJbW92ZWwJCSMweDgwMDEwMDAwLFNDKCVhNikKKwltb3ZlbAkJIzB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xybAkJU0MrOCglYTYpCisJZmFkZHgJCVNDKCVhNiksJWZwMAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZm11bGQJCVRXT04xNDAsJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTFQT0xZOgorfC0tU3RlcCA5CWV4cChYKS0xIGJ5IGEgc2ltcGxlIHBvbHlub21pYWwKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5mcDAgaXMgWAorCWZtdWx4CQklZnAwLCVmcDAJCXwgLi4uZnAwIGlzIFMgOj0gWCpYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJfCAuLi5zYXZlIGZwMgorCWZtb3ZlcwkJIzB4MkYzMENBQTgsJWZwMQl8IC4uLmZwMSBpcyBCMTIKKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKkIxMgorCWZtb3ZlcwkJIzB4MzEwRjgyOTAsJWZwMgl8IC4uLmZwMiBpcyBCMTEKKwlmYWRkcwkJIzB4MzJENzMyMjAsJWZwMQl8IC4uLmZwMSBpcyBCMTArUypCMTIKKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqQjExCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5mcDEgaXMgUyooQjEwICsgLi4uCisKKwlmYWRkcwkJIzB4MzQ5M0YyODEsJWZwMgl8IC4uLmZwMiBpcyBCOStTKi4uLgorCWZhZGRkCQlFTTFCOCwlZnAxCXwgLi4uZnAxIGlzIEI4K1MqLi4uCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLmZwMiBpcyBTKihCOSsuLi4KKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKihCOCsuLi4KKworCWZhZGRkCQlFTTFCNywlZnAyCXwgLi4uZnAyIGlzIEI3K1MqLi4uCisJZmFkZGQJCUVNMUI2LCVmcDEJfCAuLi5mcDEgaXMgQjYrUyouLi4KKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqKEI3Ky4uLgorCWZtdWx4CQklZnAwLCVmcDEJCXwgLi4uZnAxIGlzIFMqKEI2Ky4uLgorCisJZmFkZGQJCUVNMUI1LCVmcDIJfCAuLi5mcDIgaXMgQjUrUyouLi4KKwlmYWRkZAkJRU0xQjQsJWZwMQl8IC4uLmZwMSBpcyBCNCtTKi4uLgorCisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5mcDIgaXMgUyooQjUrLi4uCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5mcDEgaXMgUyooQjQrLi4uCisKKwlmYWRkZAkJRU0xQjMsJWZwMgl8IC4uLmZwMiBpcyBCMytTKi4uLgorCWZhZGR4CQlFTTFCMiwlZnAxCXwgLi4uZnAxIGlzIEIyK1MqLi4uCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLmZwMiBpcyBTKihCMysuLi4KKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKihCMisuLi4KKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqUyooQjMrLi4uKQorCWZtdWx4CQkoJWEwKSwlZnAxCXwgLi4uZnAxIGlzIFgqUyooQjIuLi4KKworCWZtdWxzCQkjMHgzRjAwMDAwMCwlZnAwCXwgLi4uZnAwIGlzIFMqQjEKKwlmYWRkeAkJJWZwMiwlZnAxCQl8IC4uLmZwMSBpcyBRCit8CQkJCQkuLi5mcDIgcmVsZWFzZWQKKworCWZtb3ZlbXgJKCVhNykrLCVmcDItJWZwMi8lZnAzCXwgLi4uZnAyIHJlc3RvcmVkCisKKwlmYWRkeAkJJWZwMSwlZnAwCQl8IC4uLmZwMCBpcyBTKkIxK1EKK3wJCQkJCS4uLmZwMSByZWxlYXNlZAorCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkeAkJKCVhMCksJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTFCSUc6Cit8LS1TdGVwIDEwCXxYfCA+IDcwIGxvZzIKKwltb3ZlbAkJKCVhMCksJWQwCisJY21waWwJCSMwLCVkMAorCWJndAkJRVhQQzEKK3wtLVN0ZXAgMTAuMgorCWZtb3ZlcwkJIzB4QkY4MDAwMDAsJWZwMAl8IC4uLmZwMCBpcyAtMQorCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHMJCSMweDAwODAwMDAwLCVmcDAJfCAuLi4tMSArIDJeKC0xMjYpCisKKwlicmEJCXRfZnJjaW54CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zZ2V0ZW0uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NnZXRlbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2JkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zZ2V0ZW0uUwpAQCAtMCwwICsxLDE0MSBAQAorfAorfAlzZ2V0ZW0uc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzR0VURVhQIHJldHVybnMgdGhlIGV4cG9uZW50IHBvcnRpb24KK3wJb2YgdGhlIGlucHV0IGFyZ3VtZW50LiAgVGhlIGV4cG9uZW50IGJpYXMgaXMgcmVtb3ZlZAorfAlhbmQgdGhlIGV4cG9uZW50IHZhbHVlIGlzIHJldHVybmVkIGFzIGFuIGV4dGVuZGVkCit8CXByZWNpc2lvbiBudW1iZXIgaW4gZnAwLiAgc0dFVEVYUEQgaGFuZGxlcyBkZW5vcm1hbGl6ZWQKK3wJbnVtYmVycy4KK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNHRVRNQU4gZXh0cmFjdHMgdGhlIG1hbnRpc3NhIG9mIHRoZQorfAlpbnB1dCBhcmd1bWVudC4gIFRoZSBtYW50aXNzYSBpcyBjb252ZXJ0ZWQgdG8gYW4KK3wJZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlciBhbmQgcmV0dXJuZWQgaW4gZnAwLiAgVGhlCit8CXJhbmdlIG9mIHRoZSByZXN1bHQgaXMgWzEuMCAtIDIuMCkuCit8Cit8Cit8CUlucHV0OiAgRG91YmxlLWV4dGVuZGVkIG51bWJlciBYIGluIHRoZSBFVEVNUCBzcGFjZSBpbgorfAkJdGhlIGZsb2F0aW5nLXBvaW50IHNhdmUgc3RhY2suCit8Cit8CU91dHB1dDoJVGhlIGZ1bmN0aW9ucyByZXR1cm4gZXhwKFgpIG9yIG1hbihYKSBpbiBmcDAuCit8Cit8CU1vZGlmaWVkOiBmcDAuCit8Cit8Cit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U0dFVEVNCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uIDgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCW5ybV9zZXQKKworfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgdGhlIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uCit8IGhhbmRsZXIuICBJdCBwb2ludHMgYTAgdG8gdGhlIGlucHV0IG9wZXJhbmQuCit8Cit8Cit8Cit8CVNHRVRFWFAKK3wKKworCS5nbG9iYWwJc2dldGV4cAorc2dldGV4cDoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8Z2V0IHRoZSBleHBvbmVudAorCWJjbHJsCSMxNSwlZDAJCXxjbGVhciB0aGUgc2lnbiBiaXQKKwlzdWJ3CSMweDNmZmYsJWQwCXxzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92ZXcgICVkMCwlZnAwCQl8bW92ZSB0aGUgZXhwIHRvIGZwMAorCXJ0cworCisJLmdsb2JhbAlzZ2V0ZXhwZAorc2dldGV4cGQ6CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlic3IJbnJtX3NldAkJfG5vcm1hbGl6ZSAoZXhwIHdpbGwgZ28gbmVnYXRpdmUpCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAJfGxvYWQgcmVzdWx0aW5nIGV4cG9uZW50IGludG8gZDAKKwlzdWJ3CSMweDNmZmYsJWQwCXxzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92ZXcJJWQwLCVmcDAJCXxtb3ZlIHRoZSBleHAgdG8gZnAwCisJcnRzCit8Cit8Cit8IFRoaXMgZW50cnkgcG9pbnQgaXMgdXNlZCBieSB0aGUgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiBleGNlcHRpb24KK3wgaGFuZGxlci4gIEl0IHBvaW50cyBhMCB0byB0aGUgaW5wdXQgb3BlcmFuZC4KK3wKK3wKK3wKK3wJU0dFVE1BTgorfAorfAorfCBGb3Igbm9ybWFsaXplZCBudW1iZXJzLCBsZWF2ZSB0aGUgbWFudGlzc2EgYWxvbmUsIHNpbXBseSBsb2FkCit8IHdpdGggYW4gZXhwb25lbnQgb2YgKy8tICQzZmZmLgorfAorCS5nbG9iYWwJc2dldG1hbgorc2dldG1hbjoKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDAKKwlhbmRpbAkjMHhmZmZmZmYwMCwlZDAJfGNsZWFyIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgbW9kZQorCWZtb3ZlbAklZDAsJWZwY3IJCXx0aGlzIGZwY3Igc2V0dGluZyBpcyB1c2VkIGJ5IHRoZSA4ODIKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8Z2V0IHRoZSBleHAgKHJlYWxseSBqdXN0IHdhbnQgc2lnbiBiaXQpCisJb3J3CSMweDdmZmYsJWQwCXxjbGVhciBvbGQgZXhwCisJYmNscmwJIzE0LCVkMAkJfG1ha2UgaXQgdGhlIG5ldyBleHAgKy0zZmZmCisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJfG1vdmUgdGhlIHNpZ24gJiBleHAgYmFjayB0byBmc2F2ZSBzdGFjaworCWZtb3ZleAkoJWEwKSwlZnAwCXxwdXQgbmV3IHZhbHVlIGJhY2sgaW4gZnAwCisJcnRzCisKK3wKK3wgRm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLCBzaGlmdCB0aGUgbWFudGlzc2EgdW50aWwgdGhlIGotYml0ID0gMSwKK3wgdGhlbiBsb2FkIHRoZSBleHBvbmVudCB3aXRoICsvMSAkM2ZmZi4KK3wKKwkuZ2xvYmFsCXNnZXRtYW5kCitzZ2V0bWFuZDoKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAl8bG9hZCBtcyBtYW50IGluIGQwCisJbW92ZWwJTE9DQUxfTE8oJWEwKSwlZDEJfGxvYWQgbHMgbWFudCBpbiBkMQorCWJzcglzaGZ0CQl8c2hpZnQgbWFudGlzc2EgYml0cyB0aWxsIG1zYml0IGlzIHNldAorCW1vdmVsCSVkMCxMT0NBTF9ISSglYTApCXxwdXQgbXMgbWFudCBiYWNrIG9uIHN0YWNrCisJbW92ZWwJJWQxLExPQ0FMX0xPKCVhMCkJfHB1dCBscyBtYW50IGJhY2sgb24gc3RhY2sKKwlicmFzCXNnZXRtYW4KKworfAorfAlTSEZUCit8Cit8CVNoaWZ0cyB0aGUgbWFudGlzc2EgYml0cyB1bnRpbCBtc2JpdCBpcyBzZXQuCit8CWlucHV0OgorfAkJbXMgbWFudGlzc2EgcGFydCBpbiBkMAorfAkJbHMgbWFudGlzc2EgcGFydCBpbiBkMQorfAlvdXRwdXQ6Cit8CQlzaGlmdGVkIGJpdHMgaW4gZDAgYW5kIGQxCitzaGZ0OgorCXRzdGwJJWQwCQl8aWYgYW55IGJpdHMgc2V0IGluIG1zIG1hbnQKKwlibmVzCXVwcGVyCQl8dGhlbiBicmFuY2gKK3wJCQkJO2Vsc2Ugbm8gYml0cyBzZXQgaW4gbXMgbWFudAorCXRzdGwJJWQxCQl8dGVzdCBpZiBhbnkgYml0cyBzZXQgaW4gbHMgbWFudAorCWJuZXMJY29udAkJfGlmIHNldCB0aGVuIGNvbnRpbnVlCisJYnJhcwlzaGZ0X2VuZAl8ZWxzZSByZXR1cm4KK2NvbnQ6CisJbW92ZWwJJWQzLC0oJWE3KQl8c2F2ZSBkMworCWV4ZwklZDAsJWQxCQl8c2hpZnQgbHMgbWFudCB0byBtcyBtYW50CisJYmZmZm8JJWQweyMwOiMzMn0sJWQzCXxmaW5kIGZpcnN0IDEgaW4gbHMgbWFudCB0byBkMAorCWxzbGwJJWQzLCVkMAkJfHNoaWZ0IGZpcnN0IDEgdG8gaW50ZWdlciBiaXQgaW4gbXMgbWFudAorCW1vdmVsCSglYTcpKywlZDMJfHJlc3RvcmUgZDMKKwlicmFzCXNoZnRfZW5kCit1cHBlcjoKKworCW1vdmVtbAklZDMvJWQ1LyVkNiwtKCVhNykJfHNhdmUgcmVnaXN0ZXJzCisJYmZmZm8JJWQweyMwOiMzMn0sJWQzCXxmaW5kIGZpcnN0IDEgaW4gbHMgbWFudCB0byBkMAorCWxzbGwJJWQzLCVkMAkJfHNoaWZ0IG1zIG1hbnQgdW50aWwgai1iaXQgaXMgc2V0CisJbW92ZWwJJWQxLCVkNgkJfHNhdmUgbHMgbWFudCBpbiBkNgorCWxzbGwJJWQzLCVkMQkJfHNoaWZ0IGxzIG1hbnQgYnkgY291bnQKKwltb3ZlbAkjMzIsJWQ1CisJc3VibAklZDMsJWQ1CQl8c3ViIDMyIGZyb20gc2hpZnQgZm9yIGxzIG1hbnQKKwlsc3JsCSVkNSwlZDYJCXxzaGlmdCBvZmYgYWxsIGJpdHMgYnV0IHRob3NlIHRoYXQgd2lsbAorfAkJCQk7YmUgc2hpZnRlZCBpbnRvIG1zIG1hbnQKKwlvcmwJJWQ2LCVkMAkJfHNoaWZ0IHRoZSBscyBtYW50IGJpdHMgaW50byB0aGUgbXMgbWFudAorCW1vdmVtbAkoJWE3KSssJWQzLyVkNS8lZDYJfHJlc3RvcmUgcmVnaXN0ZXJzCitzaGZ0X2VuZDoKKwlydHMKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NpbnQuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NpbnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjliZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2ludC5TCkBAIC0wLDAgKzEsMjQ3IEBACit8Cit8CXNpbnQuc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzSU5UIGNvbXB1dGVzIHRoZSByb3VuZGVkIGludGVnZXIKK3wJZXF1aXZhbGVudCBvZiB0aGUgaW5wdXQgYXJndW1lbnQsIHNJTlRSWiBjb21wdXRlcworfAl0aGUgaW50ZWdlciByb3VuZGVkIHRvIHplcm8gb2YgdGhlIGlucHV0IGFyZ3VtZW50LgorfAorfAlFbnRyeSBwb2ludHMgc2ludCBhbmQgc2ludHJ6IGFyZSBjYWxsZWQgZnJvbSBkb19mdW5jCit8CXRvIGVtdWxhdGUgdGhlIGZpbnQgYW5kIGZpbnRyeiB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucywKK3wJcmVzcGVjdGl2ZWx5LiAgRW50cnkgcG9pbnQgc2ludGRvIGlzIHVzZWQgYnkgYmluZGVjLgorfAorfAlJbnB1dDogKEVudHJ5IHBvaW50cyBzaW50IGFuZCBzaW50cnopIERvdWJsZS1leHRlbmRlZAorfAkJbnVtYmVyIFggaW4gdGhlIEVURU1QIHNwYWNlIGluIHRoZSBmbG9hdGluZy1wb2ludAorfAkJc2F2ZSBzdGFjay4KK3wJICAgICAgIChFbnRyeSBwb2ludCBzaW50ZG8pIERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbgorfAkJbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wJICAgICAgIChFbnRyeSBwb2ludCBzaW50ZCkgRG91YmxlLWV4dGVuZGVkIGRlbm9ybWFsaXplZAorfAkJbnVtYmVyIFggaW4gdGhlIEVURU1QIHNwYWNlIGluIHRoZSBmbG9hdGluZy1wb2ludAorfAkJc2F2ZSBzdGFjay4KK3wKK3wJT3V0cHV0OiBUaGUgZnVuY3Rpb24gcmV0dXJucyBpbnQoWCkgb3IgaW50cnooWCkgaW4gZnAwLgorfAorfAlNb2RpZmllczogZnAwLgorfAorfAlBbGdvcml0aG06IChzaW50IGFuZCBzaW50cnopCit8Cit8CTEuIElmIGV4cChYKSA+PSA2MywgcmV0dXJuIFguCit8CSAgIElmIGV4cChYKSA8IDAsIHJldHVybiArLy0gMCBvciArLy0gMSwgYWNjb3JkaW5nIHRvCit8CSAgIHRoZSByb3VuZGluZyBtb2RlLgorfAorfAkyLiAoWCBpcyBpbiByYW5nZSkgc2V0IHJzYyA9IDYzIC0gZXhwKFgpLiBVbm5vcm1hbGl6ZSB0aGUKK3wJICAgcmVzdWx0IHRvIHRoZSBleHBvbmVudCAkNDAzZS4KK3wKK3wJMy4gUm91bmQgdGhlIHJlc3VsdCBpbiB0aGUgbW9kZSBnaXZlbiBpbiBVU0VSX0ZQQ1IuIEZvcgorfAkgICBzaW50cnosIGZvcmNlIHJvdW5kLXRvLXplcm8gbW9kZS4KK3wKK3wJNC4gTm9ybWFsaXplIHRoZSByb3VuZGVkIHJlc3VsdDsgc3RvcmUgaW4gZnAwLgorfAorfAlGb3IgdGhlIGRlbm9ybWFsaXplZCBjYXNlcywgZm9yY2UgdGhlIGNvcnJlY3QgcmVzdWx0Cit8CWZvciB0aGUgZ2l2ZW4gc2lnbiBhbmQgcm91bmRpbmcgbW9kZS4KK3wKK3wJCSAgICAgICAgU2lnbihYKQorfAkJUk1PREUgICArICAgIC0KK3wJCS0tLS0tICAtLS0tLS0tLQorfAkJIFJOICAgICswICAgLTAKK3wJCSBSWiAgICArMCAgIC0wCit8CQkgUk0gICAgKzAgICAtMQorfAkJIFJQICAgICsxICAgLTAKK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTSU5UICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWRucm1fbHAKKwl8eHJlZglucm1fc2V0CisJfHhyZWYJcm91bmQKKwl8eHJlZgl0X2lueDIKKwl8eHJlZglsZF9wb25lCisJfHhyZWYJbGRfbW9uZQorCXx4cmVmCWxkX3B6ZXJvCisJfHhyZWYJbGRfbXplcm8KKwl8eHJlZglzbnpyaW54CisKK3wKK3wJRklOVAorfAorCS5nbG9iYWwJc2ludAorc2ludDoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8dXNlIHVzZXIncyBtb2RlIGZvciByb3VuZGluZworfAkJCQkJO2ltcGxpY2l0bHkgaGFzIGV4dGVuZCBwcmVjaXNpb24KK3wJCQkJCTtpbiB1cHBlciB3b3JkLgorCW1vdmVsCSVkMSxMX1NDUjEoJWE2KQkJfHNhdmUgbW9kZSBiaXRzCisJYnJhcwlzaW50ZXhjCisKK3wKK3wJRklOVCB3aXRoIGV4dGVuZGVkIGRlbm9ybSBpbnB1dHMuCit8CisJLmdsb2JhbAlzaW50ZAorc2ludGQ6CisJYnRzdGIJIzUsRlBDUl9NT0RFKCVhNikKKwliZXEJc256cmlueAkJfGlmIHJvdW5kIG5lYXJlc3Qgb3Igcm91bmQgemVybywgKy8tIDAKKwlidHN0YgkjNCxGUENSX01PREUoJWE2KQorCWJlcXMJcm5kX21ucworcm5kX3BsczoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJuZXMJc2ludG16CisJYnNyCWxkX3BvbmUJCXxpZiByb3VuZCBwbHVzIGluZiBhbmQgcG9zLCBhbnN3ZXIgaXMgKzEKKwlicmEJdF9pbngyCitybmRfbW5zOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYmVxcwlzaW50cHoKKwlic3IJbGRfbW9uZQkJfGlmIHJvdW5kIG1ucyBpbmYgYW5kIG5lZywgYW5zd2VyIGlzIC0xCisJYnJhCXRfaW54Mgorc2ludHB6OgorCWJzcglsZF9wemVybworCWJyYQl0X2lueDIKK3NpbnRtejoKKwlic3IJbGRfbXplcm8KKwlicmEJdF9pbngyCisKK3wKK3wJRklOVFJaCit8CisJLmdsb2JhbAlzaW50cnoKK3NpbnRyejoKKwltb3ZlbAkjMSxMX1NDUjEoJWE2KQkJfHVzZSByeiBtb2RlIGZvciByb3VuZGluZworfAkJCQkJO2ltcGxpY2l0bHkgaGFzIGV4dGVuZCBwcmVjaXNpb24KK3wJCQkJCTtpbiB1cHBlciB3b3JkLgorCWJyYXMJc2ludGV4YworfAorfAlTSU5URE8KK3wKK3wJSW5wdXQ6CWEwIHBvaW50cyB0byBhbiBJRUVFIGV4dGVuZGVkIGZvcm1hdCBvcGVyYW5kCit8CU91dHB1dDoJZnAwIGhhcyB0aGUgcmVzdWx0Cit8Cit8IEV4Y2VwdGlvbnM6Cit8Cit8IElmIHRoZSBzdWJyb3V0aW5lIHJlc3VsdHMgaW4gYW4gaW5leGFjdCBvcGVyYXRpb24sIHRoZSBpbngyIGFuZAorfCBhaW54IGJpdHMgaW4gdGhlIFVTRVJfRlBTUiBhcmUgc2V0LgorfAorfAorCS5nbG9iYWwJc2ludGRvCitzaW50ZG86CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEJfHVzZSB1c2VyJ3MgbW9kZSBmb3Igcm91bmRpbmcKK3wJCQkJCTtpbXBsaWNpdGx5IGhhcyBleHQgcHJlY2lzaW9uCit8CQkJCQk7aW4gdXBwZXIgd29yZC4KKwltb3ZlbAklZDEsTF9TQ1IxKCVhNikJCXxzYXZlIG1vZGUgYml0cworfAorfCBSZWFsIHdvcmsgb2Ygc2ludCBpcyBpbiBzaW50ZXhjCit8CitzaW50ZXhjOgorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dGVuZGVkCit8CQkJCQk7Zm9ybWF0CisJc25lCUxPQ0FMX1NHTiglYTApCisJY21wdwkjMHg0MDNlLExPQ0FMX0VYKCVhMCkJfGNoZWNrIGlmICh1bmJpYXNlZCkgZXhwID4gNjMKKwliZ3RzCW91dF9ybmdlCQkJfGJyYW5jaCBpZiBleHAgPCA2MworCWNtcHcJIzB4M2ZmZCxMT0NBTF9FWCglYTApCXxjaGVjayBpZiAodW5iaWFzZWQpIGV4cCA8IDAKKwliZ3QJaW5fcm5nZQkJCXxpZiA2MyA+PSBleHAgPiAwLCBkbyBjYWxjCit8Cit8IElucHV0IGlzIGxlc3MgdGhhbiB6ZXJvLiAgUmVzdG9yZSBzaWduLCBhbmQgY2hlY2sgZm9yIGRpcmVjdGVkCit8IHJvdW5kaW5nIG1vZGVzLiAgTF9TQ1IxIGNvbnRhaW5zIHRoZSBybW9kZSBpbiB0aGUgbG93ZXIgYnl0ZS4KK3wKK3VuX3JuZ2U6CisJYnRzdGIJIzEsTF9TQ1IxKzMoJWE2KQkJfGNoZWNrIGZvciBybiBhbmQgcnoKKwliZXFzCXVuX3JucnoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCQl8Y2hlY2sgZm9yIHNpZ24KKwlibmVzCXVuX3JtcnBfbmVnCit8Cit8IFNpZ24gaXMgKy4gIElmIHJwLCBsb2FkICsxLjAsIGlmIHJtLCBsb2FkICswLjAKK3wKKwljbXBpYgkjMyxMX1NDUjErMyglYTYpCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwl1bl9sZHBvbmUJCXxpZiBycCwgbG9hZCArMS4wCisJYnNyCWxkX3B6ZXJvCQl8aWYgcm0sIGxvYWQgKzAuMAorCWJyYQl0X2lueDIKK3VuX2xkcG9uZToKKwlic3IJbGRfcG9uZQorCWJyYQl0X2lueDIKK3wKK3wgU2lnbiBpcyAtLiAgSWYgcm0sIGxvYWQgLTEuMCwgaWYgcnAsIGxvYWQgLTAuMAorfAordW5fcm1ycF9uZWc6CisJY21waWIJIzIsTF9TQ1IxKzMoJWE2KQkJfGNoZWNrIGZvciBybQorCWJlcXMJdW5fbGRtb25lCQl8aWYgcm0sIGxvYWQgLTEuMAorCWJzcglsZF9temVybwkJfGlmIHJwLCBsb2FkIC0wLjAKKwlicmEJdF9pbngyCit1bl9sZG1vbmU6CisJYnNyCWxkX21vbmUKKwlicmEJdF9pbngyCit8Cit8IFJtb2RlIGlzIHJuIG9yIHJ6OyByZXR1cm4gc2lnbmVkIHplcm8KK3wKK3VuX3Jucno6CisJdHN0YglMT0NBTF9TR04oJWEwKQkJfGNoZWNrIGZvciBzaWduCisJYm5lcwl1bl9ybnJ6X25lZworCWJzcglsZF9wemVybworCWJyYQl0X2lueDIKK3VuX3JucnpfbmVnOgorCWJzcglsZF9temVybworCWJyYQl0X2lueDIKKworfAorfCBJbnB1dCBpcyBncmVhdGVyIHRoYW4gMl42My4gIEFsbCBiaXRzIGFyZSBzaWduaWZpY2FudC4gIFJldHVybgorfCB0aGUgaW5wdXQuCit8CitvdXRfcm5nZToKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJaW50cHMKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQoraW50cHM6CisJZm1vdmVsCSVmcGNyLC0oJXNwKQorCWZtb3ZlbAkjMCwlZnBjcgorCWZtb3ZleCBMT0NBTF9FWCglYTApLCVmcDAJfGlmIGV4cCA+IDYzCit8CQkJCQk7dGhlbiByZXR1cm4gWCB0byB0aGUgdXNlcgorfAkJCQkJO3RoZXJlIGFyZSBubyBmcmFjdGlvbiBiaXRzCisJZm1vdmVsCSglc3ApKywlZnBjcgorCXJ0cworCitpbl9ybmdlOgorfAkJCQkJO3NoaWZ0IG9mZiBmcmFjdGlvbiBiaXRzCisJY2xybAklZDAJCQl8Y2xlYXIgZDAgLSBpbml0aWFsIGcscixzIGZvcgorfAkJCQkJO2Rucm1fbHAKKwltb3ZlbAkjMHg0MDNlLCVkMQkJfHNldCB0aHJlc2hvbGQgZm9yIGRucm1fbHAKK3wJCQkJCTthc3N1bWVzIGEwIHBvaW50cyB0byBvcGVyYW5kCisJYnNyCWRucm1fbHAKK3wJCQkJCTtyZXR1cm5zIHVubm9ybWFsaXplZCBudW1iZXIKK3wJCQkJCTtwb2ludGVkIGJ5IGEwCit8CQkJCQk7b3V0cHV0IGQwIHN1cHBsaWVzIGcscixzCit8CQkJCQk7dXNlZCBieSByb3VuZAorCW1vdmVsCUxfU0NSMSglYTYpLCVkMQkJfHVzZSBzZWxlY3RlZCByb3VuZGluZyBtb2RlCit8Cit8CisJYnNyCXJvdW5kCQkJfHJvdW5kIHRoZSB1bm5vcm0gYmFzZWQgb24gdXNlcnMKK3wJCQkJCTtpbnB1dAlhMCBwdHIgdG8gZXh0IFgKK3wJCQkJCTsJZDAgZyxyLHMgYml0cworfAkJCQkJOwlkMSBQUkVDL01PREUgaW5mbworfAkJCQkJO291dHB1dCBhMCBwdHIgdG8gcm91bmRlZCByZXN1bHQKK3wJCQkJCTtpbmV4YWN0IGZsYWcgc2V0IGluIFVTRVJfRlBTUgorfAkJCQkJO2lmIGluaXRpYWwgZ3JzIHNldAorfAorfCBub3JtYWxpemUgdGhlIHJvdW5kZWQgcmVzdWx0IGFuZCBzdG9yZSB2YWx1ZSBpbiBmcDAKK3wKKwlic3IJbnJtX3NldAkJCXxub3JtYWxpemUgdGhlIHVubm9ybQorfAkJCQkJO0lucHV0OiBhMCBwb2ludHMgdG8gb3BlcmFuZCB0bworfAkJCQkJO2JlIG5vcm1hbGl6ZWQKK3wJCQkJCTtPdXRwdXQ6IGEwIHBvaW50cyB0byBub3JtYWxpemVkCit8CQkJCQk7cmVzdWx0CisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CisJYmVxcwlucm1ybmRwCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfHJldHVybiB0byBJRUVFIGV4dGVuZGVkIGZvcm1hdAorbnJtcm5kcDoKKwlmbW92ZWwJJWZwY3IsLSglc3ApCisJZm1vdmVsCSMwLCVmcGNyCisJZm1vdmV4IExPQ0FMX0VYKCVhMCksJWZwMAl8bW92ZSByZXN1bHQgdG8gZnAwCisJZm1vdmVsCSglc3ApKywlZnBjcgorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2tlbGV0b24uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NrZWxldG9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjMTI1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NrZWxldG9uLlMKQEAgLTAsMCArMSw1MTYgQEAKK3wKK3wJc2tlbGV0b24uc2EgMy4yIDQvMjYvOTEKK3wKK3wJVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBzeXN0ZW0gZGVwZW5kZW50IGFuZCB3aWxsCit8CW5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gaW5zdGFsbCB0aGUgRlBTUC4KK3wKK3wJRWFjaCBlbnRyeSBwb2ludCBmb3IgZXhjZXB0aW9uICd4eHh4JyBiZWdpbnMgd2l0aCBhICdqbXAgZnBzcF94eHh4Jy4KK3wJUHV0IGFueSB0YXJnZXQgc3lzdGVtIHNwZWNpZmljIGhhbmRsaW5nIHRoYXQgbXVzdCBiZSBkb25lIGltbWVkaWF0ZWx5Cit8CWJlZm9yZSB0aGUganVtcCBpbnN0cnVjdGlvbi4gIElmIHRoZXJlIG5vIGhhbmRsaW5nIG5lY2Vzc2FyeSwgdGhlbgorfAl0aGUgJ2Zwc3BfeHh4eCcgaGFuZGxlciBlbnRyeSBwb2ludCBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBleGNlcHRpb24KK3wJdGFibGUgc28gdGhhdCB0aGUgJ2ptcCcgY2FuIGJlIGVsaW1pbmF0ZWQuIElmIHRoZSBGUFNQIGRldGVybWluZXMgdGhhdCB0aGUKK3wJZXhjZXB0aW9uIGlzIG9uZSB0aGF0IG11c3QgYmUgcmVwb3J0ZWQgdGhlbiB0aGVyZSB3aWxsIGJlIGEKK3wJcmV0dXJuIGZyb20gdGhlIHBhY2thZ2UgYnkgYSAnam1wIHJlYWxfeHh4eCcuICBBdCB0aGF0IHBvaW50Cit8CXRoZSBtYWNoaW5lIHN0YXRlIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBzdGF0ZSBiZWZvcmUKK3wJdGhlIEZQU1Agd2FzIGVudGVyZWQuICBJbiBwYXJ0aWN1bGFyLCB3aGF0ZXZlciBjb25kaXRpb24KK3wJdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiB3aWxsIHN0aWxsIGJlIHBlbmRpbmcgd2hlbiB0aGUgRlBTUAorfAlwYWNrYWdlIHJldHVybnMuICBUaHVzLCB0aGVyZSB3aWxsIGJlIHN5c3RlbSBzcGVjaWZpYyBjb2RlCit8CXRvIGhhbmRsZSB0aGUgZXhjZXB0aW9uLgorfAorfAlJZiB0aGUgZXhjZXB0aW9uIHdhcyBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgdGhlIHBhY2thZ2UsIHRoZW4KK3wJdGhlIHJldHVybiB3aWxsIGJlIHZpYSBhICdqbXAgZnBzcF9kb25lJy4gIFVubGVzcyB0aGVyZSBpcworfAlPUyBzcGVjaWZpYyB3b3JrIHRvIGJlIGRvbmUgKHN1Y2ggYXMgaGFuZGxpbmcgYSBjb250ZXh0IHN3aXRjaCBvcgorfAlpbnRlcnJ1cHQpIHRoZSB1c2VyIHByb2dyYW0gY2FuIGJlIHJlc3VtZWQgdmlhICdydGUnLgorfAorfAlJbiB0aGUgZm9sbG93aW5nIHNrZWxldG9uIGNvZGUsIHNvbWUgdHlwaWNhbCAncmVhbF94eHh4JyBoYW5kbGluZworfAljb2RlIGlzIHNob3duLiAgVGhpcyBjb2RlIG1heSBuZWVkIHRvIGJlIG1vdmVkIHRvIGFuIGFwcHJvcHJpYXRlCit8CXBsYWNlIGluIHRoZSB0YXJnZXQgc3lzdGVtLCBvciByZXdyaXR0ZW4uCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3wKK3wJTW9kaWZpZWQgZm9yIExpbnV4LTEuMy54IGJ5IEplcyBTb3JlbnNlbiAoamRzQGtvbS5hdWMuZGspCit8CisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisjaW5jbHVkZSA8YXNtL29mZnNldHMuaD4KKworfFNLRUxFVE9OCWlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uIDE1Cit8Cit8CVRoZSBmb2xsb3dpbmcgY291bnRlcnMgYXJlIHVzZWQgZm9yIHN0YW5kYWxvbmUgdGVzdGluZworfAorCisJfHNlY3Rpb24gOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJYjEyMzhfZml4CisKK3wKK3wJRGl2aWRlIGJ5IFplcm8gZXhjZXB0aW9uCit8Cit8CUFsbCBkeiBleGNlcHRpb25zIGFyZSAncmVhbCcsIGhlbmNlIG5vIGZwc3BfZHogZW50cnkgcG9pbnQuCit8CisJLmdsb2JhbAlkegorCS5nbG9iYWwJcmVhbF9kegorZHo6CityZWFsX2R6OgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CUluZXhhY3QgZXhjZXB0aW9uCit8Cit8CUFsbCBpbmV4YWN0IGV4Y2VwdGlvbnMgYXJlIHJlYWwsIGJ1dCB0aGUgJ3JlYWwnIGhhbmRsZXIKK3wJd2lsbCBwcm9iYWJseSB3YW50IHRvIGNsZWFyIHRoZSBwZW5kaW5nIGV4Y2VwdGlvbi4KK3wJVGhlIHByb3ZpZGVkIGNvZGUgd2lsbCBjbGVhciB0aGUgRTMgZXhjZXB0aW9uIChpZiBwZW5kaW5nKSwKK3wJb3RoZXJ3aXNlIGNsZWFyIHRoZSBFMSBleGNlcHRpb24uICBUaGUgZnJlc3RvcmUgaXMgbm90IHJlYWxseQorfAluZWNlc3NhcnkgZm9yIEUxIGV4Y2VwdGlvbnMuCit8Cit8IENvZGUgZm9sbG93aW5nIHRoZSAnaW5leCcgbGFiZWwgaXMgdG8gaGFuZGxlIGJ1ZyAjMTIzMi4gIEluIHRoaXMKK3wgYnVnLCBpZiBhbiBFMSBzbmFuLCBvdmZsLCBvciB1bmZsIG9jY3VycmVkLCBhbmQgdGhlIHByb2Nlc3Mgd2FzCit8IHN3YXBwZWQgb3V0IGJlZm9yZSB0YWtpbmcgdGhlIGV4Y2VwdGlvbiwgdGhlIGV4Y2VwdGlvbiB0YWtlbiBvbgorfCByZXR1cm4gd2FzIGluZXgsIHJhdGhlciB0aGFuIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbi4gIFRoZSBzbmFuLCBvdmZsLAorfCBhbmQgdW5mbCBleGNlcHRpb24gdG8gYmUgdGFrZW4gbXVzdCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuICBUaGUKK3wgZml4IGlzIHRvIGNoZWNrIGZvciBFMSwgYW5kIHRoZSBleGlzdGVuY2Ugb2Ygb25lIG9mIHNuYW4sIG92ZmwsCit8IG9yIHVuZmwgYml0cyBzZXQgaW4gdGhlIGZwc3IuICBJZiBhbnkgb2YgdGhlc2UgYXJlIHNldCwgYnJhbmNoCit8IHRvIHRoZSBhcHByb3ByaWF0ZSAgaGFuZGxlciBmb3IgdGhlIGV4Y2VwdGlvbiBpbiB0aGUgZnBzci4gIE5vdGUKK3wgdGhhdCB0aGlzIGZpeCBpcyBvbmx5IGZvciBkNDNiIHBhcnRzLCBhbmQgaXMgc2tpcHBlZCBpZiB0aGUKK3wgdmVyc2lvbiBudW1iZXIgaXMgbm90ICQ0MC4KK3wKK3wKKwkuZ2xvYmFsCXJlYWxfaW5leAorCS5nbG9iYWwJaW5leAoraW5leDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWNtcGliCQkjVkVSXzQwLCglc3ApCQl8dGVzdCB2ZXJzaW9uIG51bWJlcgorCWJuZXMJCW5vdF9mbXQ0MAorCWZtb3ZlbAkJJWZwc3IsLSglc3ApCisJYnRzdGIJCSNFMSxFX0JZVEUoJWE2KQkJfHRlc3QgZm9yIEUxIHNldAorCWJlcXMJCW5vdF9iMTIzMgorCWJ0c3RiCQkjc25hbl9iaXQsMiglc3ApIHx0ZXN0IGZvciBzbmFuCisJYmVxCQlpbmV4X2Nrb2ZsCisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisJYnJhCQlzbmFuCitpbmV4X2Nrb2ZsOgorCWJ0c3RiCQkjb3ZmbF9iaXQsMiglc3ApIHx0ZXN0IGZvciBvdmZsCisJYmVxCQlpbmV4X2NrdWZsCisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisJYnJhCQlvdmZsCitpbmV4X2NrdWZsOgorCWJ0c3RiCQkjdW5mbF9iaXQsMiglc3ApIHx0ZXN0IGZvciB1bmZsCisJYmVxCQlub3RfYjEyMzIKKwlhZGRsCQkjNCwlc3AKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKwlicmEJCXVuZmwKKworfAorfCBXZSBkbyBub3QgaGF2ZSB0aGUgYnVnIDEyMzIgY2FzZS4gIENsZWFuIHVwIHRoZSBzdGFjayBhbmQgY2FsbAorfCByZWFsX2luZXguCit8Citub3RfYjEyMzI6CisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisKK3JlYWxfaW5leDoKKworCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCitub3RfZm10NDA6CisJYmNscmIJCSNFMyxFX0JZVEUoJWE2KQkJfGNsZWFyIGFuZCB0ZXN0IEUzIGZsYWcKKwliZXFzCQlpbmV4X2NrZTEKK3wKK3wgQ2xlYXIgZGlydHkgYml0IG9uIGRlc3QgcmVzaXN0ZXIgaW4gdGhlIGZyYW1lIGJlZm9yZSBicmFuY2hpbmcKK3wgdG8gYjEyMzhfZml4LgorfAorCW1vdmVtbAkJJWQwLyVkMSxVU0VSX0RBKCVhNikKKwliZmV4dHUJCUNNRFJFRzFCKCVhNil7IzY6IzN9LCVkMAkJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLyVkMQorCWJyYXMJCWluZXhfZG9uZQoraW5leF9ja2UxOgorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikKK2luZXhfZG9uZToKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKworCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwltb3ZlbAklc3AsJXNwQC0JCXwgc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudAorCWJzcmwJdHJhcF9jCisJYWRkcWwJIzQsJXNwCisJYnJhbAlyZXRfZnJvbV9leGNlcHRpb24KKworfAorfAlPdmVyZmxvdyBleGNlcHRpb24KK3wKKwl8eHJlZglmcHNwX292ZmwKKwkuZ2xvYmFsCXJlYWxfb3ZmbAorCS5nbG9iYWwJb3ZmbAorb3ZmbDoKKwlqbXAJZnBzcF9vdmZsCityZWFsX292Zmw6CisKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTMsRV9CWVRFKCVhNikJCXxjbGVhciBhbmQgdGVzdCBFMyBmbGFnCisJYm5lcwkJb3ZmbF9kb25lCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQorb3ZmbF9kb25lOgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CVVuZGVyZmxvdyBleGNlcHRpb24KK3wKKwl8eHJlZglmcHNwX3VuZmwKKwkuZ2xvYmFsCXJlYWxfdW5mbAorCS5nbG9iYWwJdW5mbAordW5mbDoKKwlqbXAJZnBzcF91bmZsCityZWFsX3VuZmw6CisKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTMsRV9CWVRFKCVhNikJCXxjbGVhciBhbmQgdGVzdCBFMyBmbGFnCisJYm5lcwkJdW5mbF9kb25lCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQordW5mbF9kb25lOgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CVNpZ25hbGxpbmcgTkFOIGV4Y2VwdGlvbgorfAorCXx4cmVmCWZwc3Bfc25hbgorCS5nbG9iYWwJcmVhbF9zbmFuCisJLmdsb2JhbAlzbmFuCitzbmFuOgorCWptcAlmcHNwX3NuYW4KK3JlYWxfc25hbjoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfHNuYW4gaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CU9wZXJhbmQgRXJyb3IgZXhjZXB0aW9uCit8CisJfHhyZWYJZnBzcF9vcGVycgorCS5nbG9iYWwJcmVhbF9vcGVycgorCS5nbG9iYWwJb3BlcnIKK29wZXJyOgorCWptcAlmcHNwX29wZXJyCityZWFsX29wZXJyOgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQl8b3BlcnIgaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCisKK3wKK3wJQlNVTiBleGNlcHRpb24KK3wKK3wJVGhpcyBzYW1wbGUgaGFuZGxlciBzaW1wbHkgY2xlYXJzIHRoZSBuYW4gYml0IGluIHRoZSBGUFNSLgorfAorCXx4cmVmCWZwc3BfYnN1bgorCS5nbG9iYWwJcmVhbF9ic3VuCisJLmdsb2JhbAlic3VuCitic3VuOgorCWptcAlmcHNwX2JzdW4KK3JlYWxfYnN1bjoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfGJzdW4gaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZtb3ZlbAkJJUZQU1IsLSglc3ApCisJYmNscmIJCSNuYW5fYml0LCglc3ApCisJZm1vdmVsCQkoJXNwKSssJUZQU1IKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKworCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwltb3ZlbAklc3AsJXNwQC0JCXwgc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudAorCWJzcmwJdHJhcF9jCisJYWRkcWwJIzQsJXNwCisJYnJhbAlyZXRfZnJvbV9leGNlcHRpb24KKworfAorfAlGLWxpbmUgZXhjZXB0aW9uCit8Cit8CUEgJ3JlYWwnIEYtbGluZSBleGNlcHRpb24gaXMgb25lIHRoYXQgdGhlIEZQU1AgaXNuJ3Qgc3VwcG9zZWQgdG8KK3wJaGFuZGxlLiBFLmcuIGFuIGluc3RydWN0aW9uIHdpdGggYSBjby1wcm9jZXNzb3IgSUQgdGhhdCBpcyBub3QgMS4KK3wKK3wKKwl8eHJlZglmcHNwX2ZsaW5lCisJLmdsb2JhbAlyZWFsX2ZsaW5lCisJLmdsb2JhbAlmbGluZQorZmxpbmU6CisJam1wCWZwc3BfZmxpbmUKK3JlYWxfZmxpbmU6CisKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCXRyYXBfYworCWFkZHFsCSM0LCVzcAorCWJyYWwJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3wKK3wJVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbgorfAorCXx4cmVmCWZwc3BfdW5zdXBwCisJLmdsb2JhbAlyZWFsX3Vuc3VwcAorCS5nbG9iYWwJdW5zdXBwCit1bnN1cHA6CisJam1wCWZwc3BfdW5zdXBwCityZWFsX3Vuc3VwcDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfHVuc3VwcCBpcyBhbHdheXMgYW4gRTEgZXhjZXB0aW9uCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCXRyYXBfYworCWFkZHFsCSM0LCVzcAorCWJyYWwJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3wKK3wJVHJhY2UgZXhjZXB0aW9uCit8CisJLmdsb2JhbAlyZWFsX3RyYWNlCityZWFsX3RyYWNlOgorCXwKKwlicmFsCXRyYXAKKworfAorfAlmcHNwX2ZtdF9lcnJvciAtLS0gZXhpdCBwb2ludCBmb3IgZnJhbWUgZm9ybWF0IGVycm9yCit8Cit8CVRoZSBmcHUgc3RhY2sgZnJhbWUgZG9lcyBub3QgbWF0Y2ggdGhlIGZyYW1lcyBleGlzdGluZworfAlvciBwbGFubmVkIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4gIFRoZSBmcHNwIGlzCit8CXVuYWJsZSB0byBoYW5kbGUgZnJhbWUgc2l6ZXMgbm90IGluIHRoZSBmb2xsb3dpbmcKK3wJdmVyc2lvbjpzaXplIHBhaXJzOgorfAorfAl7NDA2MCwgNDE2MH0gLSBidXN5IGZyYW1lCit8CXs0MDI4LCA0MTMwfSAtIHVuaW1wIGZyYW1lCit8CXs0MDAwLCA0MTAwfSAtIGlkbGUgZnJhbWUKK3wKK3wJVGhpcyBlbnRyeSBwb2ludCBzaW1wbHkgaG9sZHMgYW4gZi1saW5lIGlsbGVnYWwgdmFsdWUuCit8CVJlcGxhY2UgdGhpcyB3aXRoIGEgY2FsbCB0byB5b3VyIGtlcm5lbCBwYW5pYyBjb2RlIG9yCit8CWNvZGUgdG8gaGFuZGxlIGZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIGZwdS4KK3wKKwkuZ2xvYmFsCWZwc3BfZm10X2Vycm9yCitmcHNwX2ZtdF9lcnJvcjoKKworCS5sb25nCTB4ZjI3ZjAwMDAJfGYtbGluZSBpbGxlZ2FsCisKK3wKK3wJZnBzcF9kb25lIC0tLSBGUFNQIGV4aXQgcG9pbnQKK3wKK3wJVGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiBoYW5kbGVkIGJ5IHRoZSBwYWNrYWdlIGFuZCB3ZSBhcmUgcmVhZHkKK3wJdG8gcmV0dXJuIHRvIHVzZXIgbW9kZSwgYnV0IHRoZXJlIG1heSBiZSBPUyBzcGVjaWZpYyBjb2RlCit8CXRvIGV4ZWN1dGUgYmVmb3JlIHdlIGRvLiAgSWYgdGhlcmUgaXMsIGRvIGl0IG5vdy4KK3wKK3wKKworCS5nbG9iYWwJZnBzcF9kb25lCitmcHNwX2RvbmU6CisJYnRzdAkjMHg1LCVzcEAJCXwgc3VwZXJ2aXNvciBiaXQgc2V0IGluIHNhdmVkIFNSPworCWJlcQkuTG5vdGtlcm4KKwlydGUKKy5Mbm90a2VybjoKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJdHN0YgklY3VycHRyQChUQVNLX05FRURSRVNDSEVEKQorCWpuZQlyZXRfZnJvbV9leGNlcHRpb24JfCBkZWxpdmVyIHNpZ25hbHMsCisJCQkJCXwgcmVzY2hlZHVsZSBldGMuLgorCVJFU1RPUkVfQUxMCisKK3wKK3wJbWVtX3dyaXRlIC0tLSB3cml0ZSB0byB1c2VyIG9yIHN1cGVydmlzb3IgYWRkcmVzcyBzcGFjZQorfAorfCBXcml0ZXMgdG8gbWVtb3J5IHdoaWxlIGluIHN1cGVydmlzb3IgbW9kZS4gIGNvcHlvdXQgYWNjb21wbGlzaGVzCit8IHRoaXMgdmlhIGEgJ21vdmVzJyBpbnN0cnVjdGlvbi4gIGNvcHlvdXQgaXMgYSBVTklYIFNWUjMgKGFuZCBsYXRlcikgZnVuY3Rpb24uCit8IElmIHlvdSBkb24ndCBoYXZlIGNvcHlvdXQsIHVzZSB0aGUgbG9jYWwgY29weSBvZiB0aGUgZnVuY3Rpb24gYmVsb3cuCit8Cit8CWEwIC0gc3VwZXJ2aXNvciBzb3VyY2UgYWRkcmVzcworfAlhMSAtIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAobWF4aW11bSBjb3VudCBpcyAxMikKK3wKK3wgVGhlIHN1cGVydmlzb3Igc291cmNlIGFkZHJlc3MgaXMgZ3VhcmFudGVlZCB0byBwb2ludCBpbnRvIHRoZSBzdXBlcnZpc29yCit8IHN0YWNrLiAgVGhlIHJlc3VsdCBpcyB0aGF0IGEgVU5JWAorfCBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gc2xlZXAgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIHBhZ2UgZmF1bHQgZHVyaW5nCit8IGNvcHlvdXQuICBUaGUgcHJvYmFiaWxpdHkgb2YgYSBwYWdlIGZhdWx0IGlzIGV4Y2VlZGluZ2x5IHNtYWxsIGJlY2F1c2UKK3wgdGhlIDY4MDQwIGFsd2F5cyByZWFkcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgdGh1cyB0aGUgcGFnZQorfCBmYXVsdHMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCit8Cit8IElmIHRoZSBFWENfU1Igc2hvd3MgdGhhdCB0aGUgZXhjZXB0aW9uIHdhcyBmcm9tIHN1cGVydmlzb3Igc3BhY2UsCit8IHRoZW4ganVzdCBkbyBhIGR1bWIgKGFuZCBzbG93KSBtZW1vcnkgbW92ZS4gIEluIGEgVU5JWCBlbnZpcm9ubWVudAorfCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHN1cGVydmlzb3IgbW9kZSBmbG9hdGluZyBwb2ludCBleGNlcHRpb25zLgorfAorCS5nbG9iYWwJbWVtX3dyaXRlCittZW1fd3JpdGU6CisJYnRzdGIJIzUsRVhDX1NSKCVhNikJfGNoZWNrIGZvciBzdXBlcnZpc29yIHN0YXRlCisJYmVxcwl1c2VyX3dyaXRlCitzdXBlcl93cml0ZToKKwltb3ZlYgkoJWEwKSssKCVhMSkrCisJc3VicWwJIzEsJWQwCisJYm5lcwlzdXBlcl93cml0ZQorCXJ0cwordXNlcl93cml0ZToKKwltb3ZlbAklZDEsLSglc3ApCXxwcmVzZXJ2ZSBkMSBqdXN0IGluIGNhc2UKKwltb3ZlbAklZDAsLSglc3ApCisJbW92ZWwJJWExLC0oJXNwKQorCW1vdmVsCSVhMCwtKCVzcCkKKwlqc3IJCWNvcHlvdXQKKwlhZGR3CSMxMiwlc3AKKwltb3ZlbAkoJXNwKSssJWQxCisJcnRzCit8Cit8CW1lbV9yZWFkIC0tLSByZWFkIGZyb20gdXNlciBvciBzdXBlcnZpc29yIGFkZHJlc3Mgc3BhY2UKK3wKK3wgUmVhZHMgZnJvbSBtZW1vcnkgd2hpbGUgaW4gc3VwZXJ2aXNvciBtb2RlLiAgY29weWluIGFjY29tcGxpc2hlcworfCB0aGlzIHZpYSBhICdtb3ZlcycgaW5zdHJ1Y3Rpb24uICBjb3B5aW4gaXMgYSBVTklYIFNWUjMgKGFuZCBsYXRlcikgZnVuY3Rpb24uCit8IElmIHlvdSBkb24ndCBoYXZlIGNvcHlpbiwgdXNlIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBmdW5jdGlvbiBiZWxvdy4KK3wKK3wgVGhlIEZQU1AgY2FsbHMgbWVtX3JlYWQgdG8gcmVhZCB0aGUgb3JpZ2luYWwgRi1saW5lIGluc3RydWN0aW9uIGluIG9yZGVyCit8IHRvIGV4dHJhY3QgdGhlIGRhdGEgcmVnaXN0ZXIgbnVtYmVyIHdoZW4gdGhlICdEbicgYWRkcmVzc2luZyBtb2RlIGlzCit8IHVzZWQuCit8Cit8SW5wdXQ6Cit8CWEwIC0gdXNlciBzb3VyY2UgYWRkcmVzcworfAlhMSAtIHN1cGVydmlzb3IgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIG51bWJlciBvZiBieXRlcyB0byByZWFkIChtYXhpbXVtIGNvdW50IGlzIDEyKQorfAorfCBMaWtlIG1lbV93cml0ZSwgbWVtX3JlYWQgYWx3YXlzIHJlYWRzIHdpdGggYSBzdXBlcnZpc29yCit8IGRlc3RpbmF0aW9uIGFkZHJlc3Mgb24gdGhlIHN1cGVydmlzb3Igc3RhY2suICBBbHNvIGxpa2UgbWVtX3dyaXRlLAorfCB0aGUgRVhDX1NSIGlzIGNoZWNrZWQgYW5kIGEgc2ltcGxlIG1lbW9yeSBjb3B5IGlzIGRvbmUgaWYgcmVhZGluZworfCBmcm9tIHN1cGVydmlzb3Igc3BhY2UgaXMgaW5kaWNhdGVkLgorfAorCS5nbG9iYWwJbWVtX3JlYWQKK21lbV9yZWFkOgorCWJ0c3RiCSM1LEVYQ19TUiglYTYpCXxjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJlcXMJdXNlcl9yZWFkCitzdXBlcl9yZWFkOgorCW1vdmViCSglYTApKywoJWExKSsKKwlzdWJxbAkjMSwlZDAKKwlibmVzCXN1cGVyX3JlYWQKKwlydHMKK3VzZXJfcmVhZDoKKwltb3ZlbAklZDEsLSglc3ApCXxwcmVzZXJ2ZSBkMSBqdXN0IGluIGNhc2UKKwltb3ZlbAklZDAsLSglc3ApCisJbW92ZWwJJWExLC0oJXNwKQorCW1vdmVsCSVhMCwtKCVzcCkKKwlqc3IJY29weWluCisJYWRkdwkjMTIsJXNwCisJbW92ZWwJKCVzcCkrLCVkMQorCXJ0cworCit8Cit8IFVzZSB0aGVzZSByb3V0aW5lcyBpZiB5b3VyIGtlcm5lbCBkb2Vzbid0IGhhdmUgY29weW91dC9jb3B5aW4gZXF1aXZhbGVudHMuCit8IEFzc3VtZXMgdGhhdCBEMC9EMS9BMC9BMSBhcmUgc2NyYXRjaCByZWdpc3RlcnMuIGNvcHlvdXQgb3ZlcndyaXRlcyBERkMsCit8IGFuZCBjb3B5aW4gb3ZlcndyaXRlcyBTRkMuCit8Citjb3B5b3V0OgorCW1vdmVsCTQoJXNwKSwlYTAJfCBzb3VyY2UKKwltb3ZlbAk4KCVzcCksJWExCXwgZGVzdGluYXRpb24KKwltb3ZlbAkxMiglc3ApLCVkMAl8IGNvdW50CisJc3VibAkjMSwlZDAJCXwgZGVjIGNvdW50IGJ5IDEgZm9yIGRicmEKKwltb3ZlbAkjMSwlZDEKKworfAlERkMgaXMgYWxyZWFkeSBzZXQKK3wJbW92ZWMJJWQxLCVERkMJCXwgc2V0IGRmYyBmb3IgdXNlciBkYXRhIHNwYWNlCittb3Jlb3V0OgorCW1vdmViCSglYTApKywlZDEJfCBmZXRjaCBzdXBlcnZpc29yIGJ5dGUKK291dF9lYToKKwltb3Zlc2IJJWQxLCglYTEpKwl8IHdyaXRlIHVzZXIgYnl0ZQorCWRiZgklZDAsbW9yZW91dAorCXJ0cworCitjb3B5aW46CisJbW92ZWwJNCglc3ApLCVhMAl8IHNvdXJjZQorCW1vdmVsCTgoJXNwKSwlYTEJfCBkZXN0aW5hdGlvbgorCW1vdmVsCTEyKCVzcCksJWQwCXwgY291bnQKKwlzdWJsCSMxLCVkMAkJfCBkZWMgY291bnQgYnkgMSBmb3IgZGJyYQorCW1vdmVsCSMxLCVkMQorfAlTRkMgaXMgYWxyZWFkeSBzZXQKK3wJbW92ZWMJJWQxLCVTRkMJCXwgc2V0IHNmYyBmb3IgdXNlciBzcGFjZQorbW9yZWluOgoraW5fZWE6CisJbW92ZXNiCSglYTApKywlZDEJfCBmZXRjaCB1c2VyIGJ5dGUKKwltb3ZlYgklZDEsKCVhMSkrCXwgd3JpdGUgc3VwZXJ2aXNvciBieXRlCisJZGJmCSVkMCxtb3JlaW4KKwlydHMKKworCS5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0cgorCS5ldmVuCisxOgorCWpicmEJZnBzcDA0MF9kaWUKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLmFsaWduCTQKKworCS5sb25nCWluX2VhLDFiCisJLmxvbmcJb3V0X2VhLDFiCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zbG9nMi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZzIuUwpAQCAtMCwwICsxLDE4OCBAQAorfAorfAlzbG9nMi5zYSAzLjEgMTIvMTAvOTAKK3wKK3wgICAgICAgVGhlIGVudHJ5IHBvaW50IHNsb2cxMCBjb21wdXRlcyB0aGUgYmFzZS0xMAorfAlsb2dhcml0aG0gb2YgYW4gaW5wdXQgYXJndW1lbnQgWC4KK3wJc2xvZzEwZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgaW5wdXQgdmFsdWUgaXMgYQorfAlkZW5vcm1hbGl6ZWQgbnVtYmVyLgorfAlzTG9nMiBhbmQgc0xvZzJkIGFyZSB0aGUgYmFzZS0yIGFuYWxvZ3Vlcy4KK3wKK3wgICAgICAgSU5QVVQ6CURvdWJsZS1leHRlbmRlZCB2YWx1ZSBpbiBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wgICAgICAgT1VUUFVUOiBsb2dfMTAoWCkgb3IgbG9nXzIoWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQKK3wJCXJlZ2lzdGVyIGZwMC4KK3wKK3wgICAgICAgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMS43Cit8CQl1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAzIHVscAorfAkJdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkCit8CQl0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYworfAkJaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wgICAgICAgU1BFRUQ6CVR3byB0aW1pbmdzIGFyZSBtZWFzdXJlZCwgYm90aCBpbiB0aGUgY29weS1iYWNrIG1vZGUuCit8CQlUaGUgZmlyc3Qgb25lIGlzIG1lYXN1cmVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQKK3wJCXRoZSBmaXJzdCB0aW1lIChzbyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGFyZSBub3QKK3wJCWluIGNhY2hlKSwgYW5kIHRoZSBzZWNvbmQgb25lIGlzIG1lYXN1cmVkIHdoZW4gdGhlCit8CQlmdW5jdGlvbiBpcyByZWludm9rZWQgYXQgdGhlIHNhbWUgaW5wdXQgYXJndW1lbnQuCit8Cit8ICAgICAgIEFMR09SSVRITSBhbmQgSU1QTEVNRU5UQVRJT04gTk9URVM6Cit8Cit8ICAgICAgIHNsb2cxMGQ6Cit8Cit8ICAgICAgIFN0ZXAgMC4gICBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24KK3wgICAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgorfCAgICAgICBOb3RlczogICAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50Cit8ICAgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgorfAorfCAgICAgICBTdGVwIDEuICAgQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgorfCAgICAgICBOb3RlczogICAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgorfAorfCAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4KK3wKK3wKK3wgICAgICAgc2xvZzEwOgorfAorfCAgICAgICBTdGVwIDAuICAgSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCit8ICAgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4KK3wgICAgICAgTm90ZXM6ICAgIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAorfCAgICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4KK3wKK3wgICAgICAgU3RlcCAxLiAgIENhbGwgc0xvZ04gdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgorfAorfCAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4KK3wKK3wKK3wgICAgICAgc0xvZzJkOgorfAorfCAgICAgICBTdGVwIDAuICAgSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCit8ICAgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4KK3wgICAgICAgTm90ZXM6ICAgIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAorfCAgICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4KK3wKK3wgICAgICAgU3RlcCAxLiAgIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4KK3wgICAgICAgTm90ZXM6ICAgIEV2ZW4gaWYgWCBpcyBkZW5vcm1hbGl6ZWQsIGxvZyhYKSBpcyBhbHdheXMgbm9ybWFsaXplZC4KK3wKK3wgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgorfAorfAorfCAgICAgICBzTG9nMjoKK3wKK3wgICAgICAgU3RlcCAwLiAgIElmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgorfCAgICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCit8ICAgICAgIE5vdGVzOiAgICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQKK3wgICAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCit8Cit8ICAgICAgIFN0ZXAgMS4gICBJZiBYIGlzIG5vdCBhbiBpbnRlZ2VyIHBvd2VyIG9mIHR3bywgaS5lLiwgWCAhPSAyXmssCit8ICAgICAgICAgICAgICAgICBnbyB0byBTdGVwIDMuCit8Cit8ICAgICAgIFN0ZXAgMi4gICBSZXR1cm4gay4KK3wgICAgICAgICAgICAyLjEgIEdldCBpbnRlZ2VyIGssIFggPSAyXmsuCit8ICAgICAgICAgICAgMi4yICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IuCit8ICAgICAgICAgICAgMi4zICBSZXR1cm4gYW5zIDo9IGNvbnZlcnQtdG8tZG91YmxlLWV4dGVuZGVkKGspLgorfAorfCAgICAgICBTdGVwIDMuICAgQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCit8Cit8ICAgICAgIFN0ZXAgNC4gICBDb21wdXRlIGxvZ18yKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4KK3wgICAgICAgICAgICA0LjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDQuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U0xPRzIgICAgaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X29wZXJyCisJfHhyZWYJc2xvZ24KKwl8eHJlZglzbG9nbmQKKworSU5WX0wxMDogIC5sb25nIDB4M0ZGRDAwMDAsMHhERTVCRDhBOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKKworSU5WX0wyOiAgIC5sb25nIDB4M0ZGRjAwMDAsMHhCOEFBM0IyOSwweDVDMTdGMEJDLDB4MDAwMDAwMDAKKworCS5nbG9iYWwJc2xvZzEwZAorc2xvZzEwZDoKK3wtLWVudHJ5IHBvaW50IGZvciBMb2cxMChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKKwltb3ZlbAkJKCVhMCksJWQwCisJYmx0CQlpbnZhbGlkCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlic3IJCXNsb2duZAkJCXwgLi4ubG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCWZtdWx4CQlJTlZfTDEwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXNsb2cxMAorc2xvZzEwOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzEwKFgpLCBYIGlzIG5vcm1hbGl6ZWQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwlibHQJCWludmFsaWQKKwltb3ZlbAkJJWQxLC0oJXNwKQorCWNscmwJCSVkMQorCWJzcgkJc2xvZ24JCQl8IC4uLmxvZyhYKSwgWCBub3JtYWwuCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVseAkJSU5WX0wxMCwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisKKwkuZ2xvYmFsCXNsb2cyZAorc2xvZzJkOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgZGVub3JtYWxpemVkCisKKwltb3ZlbAkJKCVhMCksJWQwCisJYmx0CQlpbnZhbGlkCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlic3IJCXNsb2duZAkJCXwgLi4ubG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCWZtdWx4CQlJTlZfTDIsJWZwMAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc2xvZzIKK3Nsb2cyOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgbm9ybWFsaXplZAorCW1vdmVsCQkoJWEwKSwlZDAKKwlibHQJCWludmFsaWQKKworCW1vdmVsCQk4KCVhMCksJWQwCisJYm5lcwkJY29udGludWUJCXwgLi4uWCBpcyBub3QgMl5rCisKKwltb3ZlbAkJNCglYTApLCVkMAorCWFuZGwJCSMweDdGRkZGRkZGLCVkMAorCXRzdGwJCSVkMAorCWJuZXMJCWNvbnRpbnVlCisKK3wtLVggPSAyXmsuCisJbW92ZXcJCSglYTApLCVkMAorCWFuZGwJCSMweDAwMDA3RkZGLCVkMAorCXN1YmwJCSMweDNGRkYsJWQwCisJZm1vdmVsCQklZDEsJWZwY3IKKwlmbW92ZWwJCSVkMCwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitjb250aW51ZToKKwltb3ZlbAkJJWQxLC0oJXNwKQorCWNscmwJCSVkMQorCWJzcgkJc2xvZ24JCQl8IC4uLmxvZyhYKSwgWCBub3JtYWwuCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVseAkJSU5WX0wyLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK2ludmFsaWQ6CisJYnJhCQl0X29wZXJyCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zbG9nbi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZ24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFhMDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZ24uUwpAQCAtMCwwICsxLDU5MiBAQAorfAorfAlzbG9nbi5zYSAzLjEgMTIvMTAvOTAKK3wKK3wJc2xvZ24gY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGFuCit8CWlucHV0IHZhbHVlLiBzbG9nbmQgZG9lcyB0aGUgc2FtZSBleGNlcHQgdGhlIGlucHV0IHZhbHVlIGlzIGEKK3wJZGVub3JtYWxpemVkIG51bWJlci4gc2xvZ25wMSBjb21wdXRlcyBsb2coMStYKSwgYW5kIHNsb2ducDFkCit8CWNvbXB1dGVzIGxvZygxK1gpIGZvciBkZW5vcm1hbGl6ZWQgWC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCB2YWx1ZSBpbiBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0byBieSBhZGRyZXNzCit8CQlyZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0Oglsb2coWCkgb3IgbG9nKDErWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgRnAwLgorfAorfAlBY2N1cmFjeSBhbmQgTW9ub3RvbmljaXR5OiBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc2xvZ24gdGFrZXMgYXBwcm94aW1hdGVseSAxOTAgY3ljbGVzIGZvciBpbnB1dAorfAkJYXJndW1lbnQgWCBzdWNoIHRoYXQgfFgtMXwgPj0gMS8xNiwgd2hpY2ggaXMgdGhlIHVzdWFsCit8CQlzaXR1YXRpb24uIEZvciB0aG9zZSBhcmd1bWVudHMsIHNsb2ducDEgdGFrZXMgYXBwcm94aW1hdGVseQorfAkJIDIxMCBjeWNsZXMuIEZvciB0aGUgbGVzcyBjb21tb24gYXJndW1lbnRzLCB0aGUgcHJvZ3JhbSB3aWxsCit8CQkgcnVuIG5vIHdvcnNlIHRoYW4gMTAlIHNsb3dlci4KK3wKK3wJQWxnb3JpdGhtOgorfAlMT0dOOgorfAlTdGVwIDEuIElmIHxYLTF8IDwgMS8xNiwgYXBwcm94aW1hdGUgbG9nKFgpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluCit8CQl1LCB3aGVyZSB1ID0gMihYLTEpLyhYKzEpLiBPdGhlcndpc2UsIG1vdmUgb24gdG8gU3RlcCAyLgorfAorfAlTdGVwIDIuIFggPSAyKiprICogWSB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiB0byBiZSB0aGUgZmlyc3Qgc2V2ZW4KK3wJCXNpZ25pZmljYW50IGJpdHMgb2YgWSBwbHVzIDIqKigtNyksIGkuZS4gRiA9IDEueHh4eHh4MSBpbiBiYXNlCit8CQkyIHdoZXJlIHRoZSBzaXggIngiIG1hdGNoIHRob3NlIG9mIFkuIE5vdGUgdGhhdCB8WS1GfCA8PSAyKiooLTcpLgorfAorfAlTdGVwIDMuIERlZmluZSB1ID0gKFktRikvRi4gQXBwcm94aW1hdGUgbG9nKDErdSkgYnkgYSBwb2x5bm9taWFsIGluIHUsCit8CQlsb2coMSt1KSA9IHBvbHkuCit8Cit8CVN0ZXAgNC4gUmVjb25zdHJ1Y3QgbG9nKFgpID0gbG9nKCAyKiprICogWSApID0gaypsb2coMikgKyBsb2coRikgKyBsb2coMSt1KQorfAkJYnkgaypsb2coMikgKyAobG9nKEYpICsgcG9seSkuIFRoZSB2YWx1ZXMgb2YgbG9nKEYpIGFyZSBjYWxjdWxhdGVkCit8CQliZWZvcmVoYW5kIGFuZCBzdG9yZWQgaW4gdGhlIHByb2dyYW0uCit8Cit8CWxvZ25wMToKK3wJU3RlcCAxOiBJZiB8WHwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coMStYKSBieSBhbiBvZGQgcG9seW5vbWlhbCBpbgorfAkJdSB3aGVyZSB1ID0gMlgvKDIrWCkuIE90aGVyd2lzZSwgbW92ZSBvbiB0byBTdGVwIDIuCit8Cit8CVN0ZXAgMjogTGV0IDErWCA9IDIqKmsgKiBZLCB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiBhcyBkb25lIGluIFN0ZXAgMgorfAkJb2YgdGhlIGFsZ29yaXRobSBmb3IgTE9HTiBhbmQgY29tcHV0ZSBsb2coMStYKSBhcworfAkJaypsb2coMikgKyBsb2coRikgKyBwb2x5IHdoZXJlIHBvbHkgYXBwcm94aW1hdGVzIGxvZygxK3UpLAorfAkJdSA9IChZLUYpL0YuCit8Cit8CUltcGxlbWVudGF0aW9uIE5vdGVzOgorfAlOb3RlIDEuIFRoZXJlIGFyZSA2NCBkaWZmZXJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBGLCB0aHVzIDY0IGxvZyhGKSdzCit8CQluZWVkIHRvIGJlIHRhYnVsYXRlZC4gTW9yZW92ZXIsIHRoZSB2YWx1ZXMgb2YgMS9GIGFyZSBhbHNvCit8CQl0YWJ1bGF0ZWQgc28gdGhhdCB0aGUgZGl2aXNpb24gaW4gKFktRikvRiBjYW4gYmUgcGVyZm9ybWVkIGJ5IGEKK3wJCW11bHRpcGxpY2F0aW9uLgorfAorfAlOb3RlIDIuIEluIFN0ZXAgMiBvZiBsb2ducDEsIGluIG9yZGVyIHRvIHByZXNlcnZlZCBhY2N1cmFjeSwgdGhlIHZhbHVlCit8CQlZLUYgaGFzIHRvIGJlIGNhbGN1bGF0ZWQgY2FyZWZ1bGx5IHdoZW4gMS8yIDw9IFggPCAzLzIuCit8Cit8CU5vdGUgMy4gVG8gZnVsbHkgZXhwbG9pdCB0aGUgcGlwZWxpbmUsIHBvbHlub21pYWxzIGFyZSB1c3VhbGx5IHNlcGFyYXRlZAorfAkJaW50byB0d28gcGFydHMgZXZhbHVhdGVkIGluZGVwZW5kZW50bHkgYmVmb3JlIGJlaW5nIGFkZGVkIHVwLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8c2xvZ24JaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitCT1VORFMxOiAgLmxvbmcgMHgzRkZFRjA3RCwweDNGRkY4ODQxCitCT1VORFMyOiAgLmxvbmcgMHgzRkZFODAwMCwweDNGRkZDMDAwCisKK0xPR09GMjoJLmxvbmcgMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitvbmU6CS5sb25nIDB4M0Y4MDAwMDAKK3plcm86CS5sb25nIDB4MDAwMDAwMDAKK2luZnR5OgkubG9uZyAweDdGODAwMDAwCituZWdvbmU6CS5sb25nIDB4QkY4MDAwMDAKKworTE9HQTY6CS5sb25nIDB4M0ZDMjQ5OUEsMHhCNUU0MDQwQgorTE9HQTU6CS5sb25nIDB4QkZDNTU1QjUsMHg4NDhDQjdEQgorCitMT0dBNDoJLmxvbmcgMHgzRkM5OTk5OSwweDk4N0Q4NzMwCitMT0dBMzoJLmxvbmcgMHhCRkNGRkZGRiwweEZGNkY3RTk3CisKK0xPR0EyOgkubG9uZyAweDNGRDU1NTU1LDB4NTU1NTU1YTQKK0xPR0ExOgkubG9uZyAweEJGRTAwMDAwLDB4MDAwMDAwMDgKKworTE9HQjU6CS5sb25nIDB4M0YxNzU0OTYsMHhBREQ3REFENgorTE9HQjQ6CS5sb25nIDB4M0YzQzcxQzIsMHhGRTgwQzdFMAorCitMT0dCMzoJLmxvbmcgMHgzRjYyNDkyNCwweDkyOEJDQ0ZGCitMT0dCMjoJLmxvbmcgMHgzRjg5OTk5OSwweDk5OTk5NUVDCisKK0xPR0IxOgkubG9uZyAweDNGQjU1NTU1LDB4NTU1NTU1NTUKK1RXTzoJLmxvbmcgMHg0MDAwMDAwMCwweDAwMDAwMDAwCisKK0xUSE9MRDoJLmxvbmcgMHgzZjk5MDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitMT0dUQkw6CisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhGRTAzRjgwRiwweEUwM0Y4MEZFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkY3MDAwMCwweEZGMDE1MzU4LDB4ODMzQzQ3RTIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RkEyMzJDRjIsMHg1MjEzOEFDMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGOTAwMDAsMHhCREM4RDgzRSwweEFEODhENTQ5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEY2NjAzRDk4LDB4MEY2NjAzREEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkEwMDAwLDB4OUNGNDNEQ0YsMHhGNUVBRkQ0OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhGMkI5RDY0OCwweDBGMkI5RDY1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZBMDAwMCwweERBMTZFQjg4LDB4Q0I4REY2MTQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RUYyRUI3MUYsMHhDNDM0NTIzOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQjAwMDAsMHg4QjI5Qjc3NSwweDFCRDcwNzQzLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEVCQkRCMkE1LDB4QzE2MTlDOEMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkIwMDAwLDB4QThEODM5RjgsMHgzMEMxRkI0OSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhFODY1QUM3QiwweDc2MDNBMTk3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZCMDAwMCwweEM2MUEyRUIxLDB4OENEOTA3QUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RTUyNTk4MkEsMHhGNzBDODgwRSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQjAwMDAsMHhFMkYyQTQ3QSwweERFM0ExOEFGLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEUxRkM3ODBFLDB4MUZDNzgwRTIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkIwMDAwLDB4RkY2NDg5OEUsMHhERjU1RDU1MSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhERUU5NUM0QywweEEwMzdCQTU3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweDhEQjk1NkE5LDB4N0IzRDAxNDgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4REJFQjYxRUUsMHhEMTlDNTk1OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHg5QjhGRTEwMCwweEY0N0JBMURFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEQ5MDFCMjAzLDB4NjQwNkM4MEUsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4QTkzNzJGMUQsMHgwREExQkQxNywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhENjJCODBENiwweDJCODBENjJDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweEI2QjA3RjM4LDB4Q0U5MEU0NkIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RDM2ODBEMzYsMHg4MEQzNjgwRCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHhDM0ZEMDMyOSwweDA2NDg4NDgxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEQwQjY5RkNCLDB4RDI1ODBEMEIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4RDExREUwRkYsMHgxNUFCMThDQSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhDRTE2OEE3NywweDI1MDgwQ0UxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweERFMTQzM0ExLDB4NkM2NkIxNTAsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4Q0I4NzI3QzAsMHg2NUMzOTNFMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHhFQUUxMEI1QSwweDdEREM4QURELDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEM5MDdEQTRFLDB4ODcxMTQ2QUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4Rjc4NTZFNUUsMHhFMkM5QjI5MSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhDNjk4MEM2OSwweDgwQzY5ODBDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweDgyMDEyQ0E1LDB4QTY4MjA2RDcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QzQzNzJGODUsMHg1RDgyNENBNiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHg4ODJDNUZDRCwweDcyNTZBOEM1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEMxRTRCQkQ1LDB4OTVGNkU5NDcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4OEU0NEM2MEIsMHg0Q0NGRDdERSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCRkEwMkZFOCwweDBCRkEwMkZGLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweDk0NEFEMDlFLDB4RjQzNTFBRjYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QkQ2OTEwNDcsMHgwNzY2MUFBMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHg5QTNFRUNENCwweEMzRUFBNkIyLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEJCM0VFNzIxLDB4QTU0RDg4MEMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QTAyMTg0MzQsMHgzNTNGMURFOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCOTIxNDNGQSwweDM2RjVFMDJFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEE1RjJGQ0FCLDB4QkJDNTA2REEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QjcwRkJCNUEsMHgxOUJFMzY1OSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhBQkIzQjhCQSwweDJBRDM2MkE1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEI1MDlFNjhBLDB4OUI5NDgyMUYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QjE2NDE3OTUsMHhDRTNDQTk3QiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCMzBGNjM1MiwweDg5MTdDODBCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEI3MDQ3NTUxLDB4NUQwRjFDNjEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QjExRkQzQjgsMHgwQjExRkQzQywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhCQzk1MkFGRSwweEVBM0QxM0UxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEFGM0FEREM2LDB4ODBBRjNBREUsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QzIxNjhFRDAsMHhGNDU4QkE0QSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBRDYwMkI1OCwweDBBRDYwMkI2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEM3ODhGNDM5LDB4QjMxNjNCRjEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QUI4RjY5RTIsMHg4MzU5Q0QxMSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhDQ0VDQUMwOCwweEJGMDQ1NjVELDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE5Qzg0QTQ3LDB4QTA3RjU2MzgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RDI0MjA0ODcsMHgyREQ4NTE2MCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBODBBODBBOCwweDBBODBBODBCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEQ3ODk0OTkyLDB4M0JDMzU4OEEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTY1NUM0MzksMHgyRDdCNzNBOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhEQ0MyQzRCNCwweDk4ODdEQUNDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE0QTlDRjFELDB4OTY4MzM3NTEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RTFFRUJEM0UsMHg2RDZBNkI5RSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBMzA2NUUzRiwweEFFN0NEMEUwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEU3MEQ3ODVDLDB4MkY5RjVCREMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTE2QjMxMkUsMHhBOEZDMzc3RCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhFQzFGMzkyQywweDUxNzlGMjgzLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlGRDgwOUZELDB4ODA5RkQ4MEEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RjEyNDQwRDMsMHhFMzYxMzBFNiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5RTRDQUQyMywweERENUYzQTIwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEY2MUNDRTkyLDB4MzQ2NjAwQkIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OUNDOEUxNjAsMHhDM0ZCMTlCOSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhGQjA5MUZEMywweDgxNDU2MzBBLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlCNEM2RjlFLDB4RjAzQTNDQUEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RkZFOTcwNDIsMHhCRkE0QzJBRCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5OUQ3MjJEQSwweEJERTU4RjA2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDgyNUVGQ0VELDB4NDkzNjkzMzAsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTg2OEM4MDksMHg4NjhDODA5OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4NEMzN0E3QSwweEI5QTkwNUM5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDk3MDEyRTAyLDB4NUMwNEI4MDksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODcyMjRDMkUsMHg4RTY0NUZCNywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5NUEwMjU2OCwweDA5NUEwMjU3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg5N0I4Q0FDLDB4OUY3REUyOTgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTQ0NTgwOTQsMHg0NTgwOTQ0NiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4QkNGNTVERSwweEM0Q0QwNUZFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDkyRjExMzg0LDB4MDQ5Nzg4OUMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OEUxREMwRkIsMHg4OUUxMjVFNSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5MUEyQjNDNCwweEQ1RTZGODA5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDkwNjZFNjhDLDB4OTU1QjZDOUIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTA1QTM4NjMsMHgzRTA2QzQzQiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5MkFBREU3NCwweEM3QkU1OUUwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDhGMTc3OUQ5LDB4RkRDM0EyMTksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTRFOUJGRjYsMHgxNTg0NTY0MywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4RERBNTIwMiwweDM3Njk0ODA5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDk3MjNBMUI3LDB4MjAxMzQyMDMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OENBMjlDMDQsMHg2NTE0RTAyMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5OTU4OTlDOCwweDkwRUI4OTkwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDhCNzAzNDRBLDB4MTM5QkM3NUEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OUI4OEJEQUEsMHgzQTNEQUUyRiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4QTQyRjg3MCwweDU2NjlEQjQ2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlEQjQyMjRGLDB4RkZFMTE1N0MsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODkxQUM3M0EsMHhFOTgxOUI1MCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5RkRBREMyNiwweDhCN0ExMkRBLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg3Rjc4MDg3LDB4Rjc4MDg3RjgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTFGQ0ZGMTcsMHhDRTczM0JENCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4NkQ5MDU0NCwweDdBMzRBQ0M2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE0MUE5RThGLDB4NTQ0NkZCOUYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODVCRjM3NjEsMHgyQ0VFM0M5QiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBNjMzQ0Q3RSwweDY3NzFDRDhCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg0QTlGOUM4LDB4MDg0QTlGOUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTg0ODlFNjAsMHgwQjQzNUE1RSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4Mzk5MzA1MiwweDNGQkUzMzY4LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEFBNTkyMzNDLDB4Q0NBNEJENDksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODI4Q0JGQkUsMHhCOUEwMjBBMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBQzY1NkRBRSwweDZCQ0M0OTg1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDgxODQ4REE4LDB4RkFGMEQyNzcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QUU2RDhFRTMsMHg2MEJCMjQ2OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4MDgwODA4MCwweDgwODA4MDgxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEIwNzE5N0EyLDB4M0M0NkM2NTQsMHgwMDAwMDAwMAorCisJLnNldAlBREpLLExfU0NSMQorCisJLnNldAlYLEZQX1NDUjEKKwkuc2V0CVhEQ0FSRSxYKzIKKwkuc2V0CVhGUkFDLFgrNAorCisJLnNldAlGLEZQX1NDUjIKKwkuc2V0CUZGUkFDLEYrNAorCisJLnNldAlLTE9HMixGUF9TQ1IzCisKKwkuc2V0CVNBVkVVLEZQX1NDUjQKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2R6CisKKwkuZ2xvYmFsCXNsb2duZAorc2xvZ25kOgorfC0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCisKKwltb3ZlbAkJIy0xMDAsQURKSyglYTYpCXwgLi4uSU5QVVQgPSAyXihBREpLKSAqIEZQMAorCit8LS0tLW5vcm1hbGl6ZSB0aGUgaW5wdXQgdmFsdWUgYnkgbGVmdCBzaGlmdGluZyBrIGJpdHMgKGsgdG8gYmUgZGV0ZXJtaW5lZAorfC0tLS1iZWxvdyksIGFkanVzdGluZyBleHBvbmVudCBhbmQgc3RvcmluZyAtayB0byAgQURKSworfC0tLS10aGUgdmFsdWUgVFdPVE8xMDAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KK3wtLS0tTm90ZSB0aGF0IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBkZW5vcm1hbGl6ZWQgaW5wdXQgaXMgTk9OLVpFUk8uCisKKyAgICAgbW92ZW1sCSVkMi0lZDcsLSglYTcpCQl8IC4uLnNhdmUgc29tZSByZWdpc3RlcnMKKyAgICAgbW92ZWwJIzB4MDAwMDAwMDAsJWQzCQl8IC4uLkQzIGlzIGV4cG9uZW50IG9mIHNtYWxsZXN0IG5vcm0uICMKKyAgICAgbW92ZWwJNCglYTApLCVkNAorICAgICBtb3ZlbAk4KCVhMCksJWQ1CQl8IC4uLihENCxENSkgaXMgKEhpX1gsTG9fWCkKKyAgICAgY2xybAklZDIJCQl8IC4uLkQyIHVzZWQgZm9yIGhvbGRpbmcgSworCisgICAgIHRzdGwJJWQ0CisgICAgIGJuZXMJSGlYX25vdDAKKworSGlYXzA6CisgICAgIG1vdmVsCSVkNSwlZDQKKyAgICAgY2xybAklZDUKKyAgICAgbW92ZWwJIzMyLCVkMgorICAgICBjbHJsCSVkNgorICAgICBiZmZmbyAgICAgICVkNHsjMDojMzJ9LCVkNgorICAgICBsc2xsICAgICAgJWQ2LCVkNAorICAgICBhZGRsCSVkNiwlZDIJCQl8IC4uLihEMyxENCxENSkgaXMgbm9ybWFsaXplZAorCisgICAgIG1vdmVsCSVkMyxYKCVhNikKKyAgICAgbW92ZWwJJWQ0LFhGUkFDKCVhNikKKyAgICAgbW92ZWwJJWQ1LFhGUkFDKzQoJWE2KQorICAgICBuZWdsCSVkMgorICAgICBtb3ZlbAklZDIsQURKSyglYTYpCisgICAgIGZtb3ZleAlYKCVhNiksJWZwMAorICAgICBtb3ZlbWwJKCVhNykrLCVkMi0lZDcJCXwgLi4ucmVzdG9yZSByZWdpc3RlcnMKKyAgICAgbGVhCVgoJWE2KSwlYTAKKyAgICAgYnJhcwlMT0dCR04JCQl8IC4uLmJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKworSGlYX25vdDA6CisgICAgIGNscmwJJWQ2CisgICAgIGJmZmZvCSVkNHsjMDojMzJ9LCVkNgkJfCAuLi5maW5kIGZpcnN0IDEKKyAgICAgbW92ZWwJJWQ2LCVkMgkJCXwgLi4uZ2V0IGsKKyAgICAgbHNsbAklZDYsJWQ0CisgICAgIG1vdmVsCSVkNSwlZDcJCQl8IC4uLmEgY29weSBvZiBENQorICAgICBsc2xsCSVkNiwlZDUKKyAgICAgbmVnbAklZDYKKyAgICAgYWRkaWwJIzMyLCVkNgorICAgICBsc3JsCSVkNiwlZDcKKyAgICAgb3JsCSVkNywlZDQJCQl8IC4uLihEMyxENCxENSkgbm9ybWFsaXplZAorCisgICAgIG1vdmVsCSVkMyxYKCVhNikKKyAgICAgbW92ZWwJJWQ0LFhGUkFDKCVhNikKKyAgICAgbW92ZWwJJWQ1LFhGUkFDKzQoJWE2KQorICAgICBuZWdsCSVkMgorICAgICBtb3ZlbAklZDIsQURKSyglYTYpCisgICAgIGZtb3ZleAlYKCVhNiksJWZwMAorICAgICBtb3ZlbWwJKCVhNykrLCVkMi0lZDcJCXwgLi4ucmVzdG9yZSByZWdpc3RlcnMKKyAgICAgbGVhCVgoJWE2KSwlYTAKKyAgICAgYnJhcwlMT0dCR04JCQl8IC4uLmJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKworCS5nbG9iYWwJc2xvZ24KK3Nsb2duOgorfC0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKKworCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKwltb3ZlbAkJIzB4MDAwMDAwMDAsQURKSyglYTYpCisKK0xPR0JHTjoKK3wtLUZQQ1IgU0FWRUQgQU5EIENMRUFSRUQsIElOUFVUIElTIDJeKEFESkspKkZQMCwgRlAwIENPTlRBSU5TCit8LS1BIEZJTklURSwgTk9OLVpFUk8sIE5PUk1BTElaRUQgTlVNQkVSLgorCisJbW92ZWwJKCVhMCksJWQwCisJbW92ZXcJNCglYTApLCVkMAorCisJbW92ZWwJKCVhMCksWCglYTYpCisJbW92ZWwJNCglYTApLFgrNCglYTYpCisJbW92ZWwJOCglYTApLFgrOCglYTYpCisKKwljbXBpbAkjMCwlZDAJCXwgLi4uQ0hFQ0sgSUYgWCBJUyBORUdBVElWRQorCWJsdAlMT0dORUcJCXwgLi4uTE9HIE9GIE5FR0FUSVZFIEFSR1VNRU5UIElTIElOVkFMSUQKKwljbXAybAlCT1VORFMxLCVkMAl8IC4uLlggSVMgUE9TSVRJVkUsIENIRUNLIElGIFggSVMgTkVBUiAxCisJYmNjCUxPR05FQVIxCXwgLi4uQk9VTkRTIElTIFJPVUdITFkgWzE1LzE2LCAxNy8xNl0KKworTE9HTUFJTjoKK3wtLVRISVMgU0hPVUxEIEJFIFRIRSBVU1VBTCBDQVNFLCBYIE5PVCBWRVJZIENMT1NFIFRPIDEKKworfC0tWCA9IDJeKEspICogWSwgMSA8PSBZIDwgMi4gVEhVUywgWSA9IDEuWFhYWFhYWFguLi4uWFggSU4gQklOQVJZLgorfC0tV0UgREVGSU5FIEYgPSAxLlhYWFhYWDEsIEkuRS4gRklSU1QgNyBCSVRTIE9GIFkgQU5EIEFUVEFDSCBBIDEuCit8LS1USEUgSURFQSBJUyBUSEFUIExPRyhYKSA9IEsqTE9HMiArIExPRyhZKQorfC0tCQkJID0gSypMT0cyICsgTE9HKEYpICsgTE9HKDEgKyAoWS1GKS9GKS4KK3wtLU5PVEUgVEhBVCBVID0gKFktRikvRiBJUyBWRVJZIFNNQUxMIEFORCBUSFVTIEFQUFJPWElNQVRJTkcKK3wtLUxPRygxK1UpIENBTiBCRSBWRVJZIEVGRklDSUVOVC4KK3wtLUFMU08gTk9URSBUSEFUIFRIRSBWQUxVRSAxL0YgSVMgU1RPUkVEIElOIEEgVEFCTEUgU08gVEhBVCBOTworfC0tRElWSVNJT04gSVMgTkVFREVEIFRPIENBTENVTEFURSAoWS1GKS9GLgorCit8LS1HRVQgSywgWSwgRiwgQU5EIEFERFJFU1MgT0YgMS9GLgorCWFzcmwJIzgsJWQwCisJYXNybAkjOCwlZDAJCXwgLi4uU0hJRlRFRCAxNiBCSVRTLCBCSUFTRUQgRVhQTy4gT0YgWAorCXN1YmlsCSMweDNGRkYsJWQwCXwgLi4uVEhJUyBJUyBLCisJYWRkbAlBREpLKCVhNiksJWQwCXwgLi4uQURKVVNUIEssIE9SSUdJTkFMIElOUFVUIE1BWSBCRSAgREVOT1JNLgorCWxlYQlMT0dUQkwsJWEwCXwgLi4uQkFTRSBBRERSRVNTIE9GIDEvRiBBTkQgTE9HKEYpCisJZm1vdmVsCSVkMCwlZnAxCQl8IC4uLkNPTlZFUlQgSyBUTyBGTE9BVElORy1QT0lOVCBGT1JNQVQKKworfC0tV0hJTEUgVEhFIENPTlZFUlNJT04gSVMgR09JTkcgT04sIFdFIEdFVCBGIEFORCBBRERSRVNTIE9GIDEvRgorCW1vdmVsCSMweDNGRkYwMDAwLFgoJWE2KQl8IC4uLlggSVMgTk9XIFksIEkuRS4gMl4oLUspKlgKKwltb3ZlbAlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmRpbAkjMHhGRTAwMDAwMCxGRlJBQyglYTYpIHwgLi4uRklSU1QgNyBCSVRTIE9GIFkKKwlvcmlsCSMweDAxMDAwMDAwLEZGUkFDKCVhNikgfCAuLi5HRVQgRjogQVRUQUNIIEEgMSBBVCBUSEUgRUlHSFRIIEJJVAorCW1vdmVsCUZGUkFDKCVhNiksJWQwCXwgLi4uUkVBRFkgVE8gR0VUIEFERFJFU1MgT0YgMS9GCisJYW5kaWwJIzB4N0UwMDAwMDAsJWQwCisJYXNybAkjOCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzQsJWQwCQl8IC4uLlNISUZURUQgMjAsIEQwIElTIFRIRSBESVNQTEFDRU1FTlQKKwlhZGRhbAklZDAsJWEwCQl8IC4uLkEwIElTIFRIRSBBRERSRVNTIEZPUiAxL0YKKworCWZtb3ZleAlYKCVhNiksJWZwMAorCW1vdmVsCSMweDNmZmYwMDAwLEYoJWE2KQorCWNscmwJRis4KCVhNikKKwlmc3VieAlGKCVhNiksJWZwMAkJfCAuLi5ZLUYKKwlmbW92ZW14ICVmcDItJWZwMi8lZnAzLC0oJXNwKQl8IC4uLlNBVkUgRlAyIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKK3wtLVNVTU1BUlk6IEZQMCBJUyBZLUYsIEEwIElTIEFERFJFU1MgT0YgMS9GLCBGUDEgSVMgSworfC0tUkVHSVNURVJTIFNBVkVEOiBGUENSLCBGUDEsIEZQMgorCitMUDFDT05UMToKK3wtLUFOIFJFLUVOVFJZIFBPSU5UIEZPUiBMT0dOUDEKKwlmbXVseAkoJWEwKSwlZnAwCXwgLi4uRlAwIElTIFUgPSAoWS1GKS9GCisJZm11bHgJTE9HT0YyLCVmcDEJfCAuLi5HRVQgSypMT0cyIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKKwlmbW92ZXgJJWZwMCwlZnAyCisJZm11bHgJJWZwMiwlZnAyCQl8IC4uLkZQMiBJUyBWPVUqVQorCWZtb3ZleAklZnAxLEtMT0cyKCVhNikJfCAuLi5QVVQgSypMT0cyIElOIE1FTU9SWSwgRlJFRSBGUDEKKworfC0tTE9HKDErVSkgSVMgQVBQUk9YSU1BVEVEIEJZCit8LS1VICsgViooQTErVSooQTIrVSooQTMrVSooQTQrVSooQTUrVSpBNikpKSkpIFdISUNIIElTCit8LS1bVSArIFYqKEExK1YqKEEzK1YqQTUpKV0gICsgIFtVKlYqKEEyK1YqKEE0K1YqQTYpKV0KKworCWZtb3ZleAklZnAyLCVmcDMKKwlmbW92ZXgJJWZwMiwlZnAxCisKKwlmbXVsZAlMT0dBNiwlZnAxCXwgLi4uVipBNgorCWZtdWxkCUxPR0E1LCVmcDIJfCAuLi5WKkE1CisKKwlmYWRkZAlMT0dBNCwlZnAxCXwgLi4uQTQrVipBNgorCWZhZGRkCUxPR0EzLCVmcDIJfCAuLi5BMytWKkE1CisKKwlmbXVseAklZnAzLCVmcDEJCXwgLi4uViooQTQrVipBNikKKwlmbXVseAklZnAzLCVmcDIJCXwgLi4uViooQTMrVipBNSkKKworCWZhZGRkCUxPR0EyLCVmcDEJfCAuLi5BMitWKihBNCtWKkE2KQorCWZhZGRkCUxPR0ExLCVmcDIJfCAuLi5BMStWKihBMytWKkE1KQorCisJZm11bHgJJWZwMywlZnAxCQl8IC4uLlYqKEEyK1YqKEE0K1YqQTYpKQorCWFkZGFsCSMxNiwlYTAJCXwgLi4uQUREUkVTUyBPRiBMT0coRikKKwlmbXVseAklZnAzLCVmcDIJCXwgLi4uViooQTErViooQTMrVipBNSkpLCBGUDMgUkVMRUFTRUQKKworCWZtdWx4CSVmcDAsJWZwMQkJfCAuLi5VKlYqKEEyK1YqKEE0K1YqQTYpKQorCWZhZGR4CSVmcDIsJWZwMAkJfCAuLi5VK1YqKEExK1YqKEEzK1YqQTUpKSwgRlAyIFJFTEVBU0VECisKKwlmYWRkeAkoJWEwKSwlZnAxCXwgLi4uTE9HKEYpK1UqViooQTIrViooQTQrVipBNikpCisJZm1vdmVteCAgKCVzcCkrLCVmcDItJWZwMi8lZnAzCXwgLi4uUkVTVE9SRSBGUDIKKwlmYWRkeAklZnAxLCVmcDAJCXwgLi4uRlAwIElTIExPRyhGKSArIExPRygxK1UpCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJZmFkZHgJS0xPRzIoJWE2KSwlZnAwCXwgLi4uRklOQUwgQURECisJYnJhCXRfZnJjaW54CisKKworTE9HTkVBUjE6Cit8LS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMS4gRlAwIENPTlRBSU5TIFRIRSBJTlBVVC4KKwlmbW92ZXgJJWZwMCwlZnAxCisJZnN1YnMJb25lLCVmcDEJCXwgLi4uRlAxIElTIFgtMQorCWZhZGRzCW9uZSwlZnAwCQl8IC4uLkZQMCBJUyBYKzEKKwlmYWRkeAklZnAxLCVmcDEJCXwgLi4uRlAxIElTIDIoWC0xKQorfC0tTE9HKFgpID0gTE9HKDErVS8yKS1MT0coMS1VLzIpIFdISUNIIElTIEFOIE9ERCBQT0xZTk9NSUFMCit8LS1JTiBVLCBVID0gMihYLTEpLyhYKzEpID0gRlAxL0ZQMAorCitMUDFDT05UMjoKK3wtLVRISVMgSVMgQU4gUkUtRU5UUlkgUE9JTlQgRk9SIExPR05QMQorCWZkaXZ4CSVmcDAsJWZwMQkJfCAuLi5GUDEgSVMgVQorCWZtb3ZlbXggJWZwMi0lZnAyLyVmcDMsLSglc3ApCSB8IC4uLlNBVkUgRlAyCit8LS1SRUdJU1RFUlMgU0FWRUQgQVJFIE5PVyBGUENSLEZQMSxGUDIsRlAzCit8LS1MRVQgVj1VKlUsIFc9VipWLCBDQUxDVUxBVEUKK3wtLVUgKyBVKlYqKEIxICsgViooQjIgKyBWKihCMyArIFYqKEI0ICsgVipCNSkpKSkgQlkKK3wtLVUgKyBVKlYqKCAgW0IxICsgVyooQjMgKyBXKkI1KV0gICsgIFtWKihCMiArIFcqQjQpXSAgKQorCWZtb3ZleAklZnAxLCVmcDAKKwlmbXVseAklZnAwLCVmcDAJfCAuLi5GUDAgSVMgVgorCWZtb3ZleAklZnAxLFNBVkVVKCVhNikgfCAuLi5TVE9SRSBVIElOIE1FTU9SWSwgRlJFRSBGUDEKKwlmbW92ZXgJJWZwMCwlZnAxCisJZm11bHgJJWZwMSwlZnAxCXwgLi4uRlAxIElTIFcKKworCWZtb3ZlZAlMT0dCNSwlZnAzCisJZm1vdmVkCUxPR0I0LCVmcDIKKworCWZtdWx4CSVmcDEsJWZwMwl8IC4uLlcqQjUKKwlmbXVseAklZnAxLCVmcDIJfCAuLi5XKkI0CisKKwlmYWRkZAlMT0dCMywlZnAzIHwgLi4uQjMrVypCNQorCWZhZGRkCUxPR0IyLCVmcDIgfCAuLi5CMitXKkI0CisKKwlmbXVseAklZnAzLCVmcDEJfCAuLi5XKihCMytXKkI1KSwgRlAzIFJFTEVBU0VECisKKwlmbXVseAklZnAwLCVmcDIJfCAuLi5WKihCMitXKkI0KQorCisJZmFkZGQJTE9HQjEsJWZwMSB8IC4uLkIxK1cqKEIzK1cqQjUpCisJZm11bHgJU0FWRVUoJWE2KSwlZnAwIHwgLi4uRlAwIElTIFUqVgorCisJZmFkZHgJJWZwMiwlZnAxCXwgLi4uQjErVyooQjMrVypCNSkgKyBWKihCMitXKkI0KSwgRlAyIFJFTEVBU0VECisJZm1vdmVteCAoJXNwKSssJWZwMi0lZnAyLyVmcDMgfCAuLi5GUDIgUkVTVE9SRUQKKworCWZtdWx4CSVmcDEsJWZwMAl8IC4uLlUqViooIFtCMStXKihCMytXKkI1KV0gKyBbViooQjIrVypCNCldICkKKworCWZtb3ZlbAklZDEsJWZwY3IKKwlmYWRkeAlTQVZFVSglYTYpLCVmcDAKKwlicmEJdF9mcmNpbngKKwlydHMKKworTE9HTkVHOgorfC0tUkVHSVNURVJTIFNBVkVEIEZQQ1IuIExPRygtVkUpIElTIElOVkFMSUQKKwlicmEJdF9vcGVycgorCisJLmdsb2JhbAlzbG9nbnAxZAorc2xvZ25wMWQ6Cit8LS1FTlRSWSBQT0lOVCBGT1IgTE9HKDErWikgRk9SIERFTk9STUFMSVpFRCBJTlBVVAorfCBTaW1wbHkgcmV0dXJuIHRoZSBkZW5vcm0KKworCWJyYQl0X2V4dGRucm0KKworCS5nbG9iYWwJc2xvZ25wMQorc2xvZ25wMToKK3wtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKKworCWZtb3ZleAkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCWZhYnN4CSVmcDAJCXx0ZXN0IG1hZ25pdHVkZQorCWZjbXB4CUxUSE9MRCwlZnAwCXxjb21wYXJlIHdpdGggbWluIHRocmVzaG9sZAorCWZiZ3QJTFAxUkVBTAkJfGlmIGdyZWF0ZXIsIGNvbnRpbnVlCisJZm1vdmVsCSMwLCVmcHNyCQl8Y2xyIE4gZmxhZyBmcm9tIGNvbXBhcmUKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm1vdmV4CSglYTApLCVmcDAJfHJldHVybiBzaWduZWQgYXJndW1lbnQKKwlicmEJdF9mcmNpbngKKworTFAxUkVBTDoKKwlmbW92ZXgJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKwltb3ZlbAkjMHgwMDAwMDAwMCxBREpLKCVhNikKKwlmbW92ZXgJJWZwMCwlZnAxCXwgLi4uRlAxIElTIElOUFVUIFoKKwlmYWRkcwlvbmUsJWZwMAl8IC4uLlggOj0gUk9VTkQoMStaKQorCWZtb3ZleAklZnAwLFgoJWE2KQorCW1vdmV3CVhGUkFDKCVhNiksWERDQVJFKCVhNikKKwltb3ZlbAlYKCVhNiksJWQwCisJY21waWwJIzAsJWQwCisJYmxlCUxQMU5FRzAJfCAuLi5MT0cgT0YgWkVSTyBPUiAtVkUKKwljbXAybAlCT1VORFMyLCVkMAorCWJjcwlMT0dNQUlOCXwgLi4uQk9VTkRTMiBJUyBbMS8yLDMvMl0KK3wtLUlGIDErWiA+IDMvMiBPUiAxK1ogPCAxLzIsIFRIRU4gWCwgV0hJQ0ggSVMgUk9VTkRJTkcgMStaLAorfC0tQ09OVEFJTlMgQVQgTEVBU1QgNjMgQklUUyBPRiBJTkZPUk1BVElPTiBPRiBaLiBJTiBUSEFUIENBU0UsCit8LS1TSU1QTFkgSU5WT0tFIExPRyhYKSBGT1IgTE9HKDErWikuCisKK0xQMU5FQVIxOgorfC0tTkVYVCBTRUUgSUYgRVhQKC0xLzE2KSA8IFggPCBFWFAoMS8xNikKKwljbXAybAlCT1VORFMxLCVkMAorCWJjc3MJTFAxQ0FSRQorCitMUDFPTkUxNjoKK3wtLUVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpLiBMT0coMStaKSA9IExPRygxK1UvMikgLSBMT0coMS1VLzIpCit8LS1XSEVSRSBVID0gMlovKDIrWikgPSAyWi8oMStYKS4KKwlmYWRkeAklZnAxLCVmcDEJfCAuLi5GUDEgSVMgMloKKwlmYWRkcwlvbmUsJWZwMAl8IC4uLkZQMCBJUyAxK1gKK3wtLVUgPSBGUDEvRlAwCisJYnJhCUxQMUNPTlQyCisKK0xQMUNBUkU6Cit8LS1IRVJFIFdFIFVTRSBUSEUgVVNVQUwgVEFCTEUgRFJJVkVOIEFQUFJPQUNILiBDQVJFIEhBUyBUTyBCRQorfC0tVEFLRU4gQkVDQVVTRSAxK1ogQ0FOIEhBVkUgNjcgQklUUyBPRiBJTkZPUk1BVElPTiBBTkQgV0UgTVVTVAorfC0tUFJFU0VSVkUgQUxMIFRIRSBJTkZPUk1BVElPTi4gQkVDQVVTRSAxK1ogSVMgSU4gWzEvMiwzLzJdLAorfC0tVEhFUkUgQVJFIE9OTFkgVFdPIENBU0VTLgorfC0tQ0FTRSAxOiAxK1ogPCAxLCBUSEVOIEsgPSAtMSBBTkQgWS1GID0gKDItRikgKyAyWgorfC0tQ0FTRSAyOiAxK1ogPiAxLCBUSEVOIEsgPSAwICBBTkQgWS1GID0gKDEtRikgKyBaCit8LS1PTiBSRVRVUk5JTkcgVE8gTFAxQ09OVDEsIFdFIE1VU1QgSEFWRSBLIElOIEZQMSwgQUREUkVTUyBPRgorfC0tKDEvRikgSU4gQTAsIFktRiBJTiBGUDAsIEFORCBGUDIgU0FWRUQuCisKKwltb3ZlbAlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmRpbAkjMHhGRTAwMDAwMCxGRlJBQyglYTYpCisJb3JpbAkjMHgwMTAwMDAwMCxGRlJBQyglYTYpCXwgLi4uRiBPQlRBSU5FRAorCWNtcGlsCSMweDNGRkY4MDAwLCVkMAl8IC4uLlNFRSBJRiAxK1ogPiAxCisJYmdlcwlLSVNaRVJPCisKK0tJU05FRzE6CisJZm1vdmVzCVRXTywlZnAwCisJbW92ZWwJIzB4M2ZmZjAwMDAsRiglYTYpCisJY2xybAlGKzgoJWE2KQorCWZzdWJ4CUYoJWE2KSwlZnAwCXwgLi4uMi1GCisJbW92ZWwJRkZSQUMoJWE2KSwlZDAKKwlhbmRpbAkjMHg3RTAwMDAwMCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzgsJWQwCisJYXNybAkjNCwlZDAJCXwgLi4uRDAgQ09OVEFJTlMgRElTUExBQ0VNRU5UIEZPUiAxL0YKKwlmYWRkeAklZnAxLCVmcDEJCXwgLi4uR0VUIDJaCisJZm1vdmVteCAlZnAyLSVmcDIvJWZwMywtKCVzcCkJfCAuLi5TQVZFIEZQMgorCWZhZGR4CSVmcDEsJWZwMAkJfCAuLi5GUDAgSVMgWS1GID0gKDItRikrMloKKwlsZWEJTE9HVEJMLCVhMAl8IC4uLkEwIElTIEFERFJFU1MgT0YgMS9GCisJYWRkYWwJJWQwLCVhMAorCWZtb3ZlcwluZWdvbmUsJWZwMQl8IC4uLkZQMSBJUyBLID0gLTEKKwlicmEJTFAxQ09OVDEKKworS0lTWkVSTzoKKwlmbW92ZXMJb25lLCVmcDAKKwltb3ZlbAkjMHgzZmZmMDAwMCxGKCVhNikKKwljbHJsCUYrOCglYTYpCisJZnN1YngJRiglYTYpLCVmcDAJCXwgLi4uMS1GCisJbW92ZWwJRkZSQUMoJWE2KSwlZDAKKwlhbmRpbAkjMHg3RTAwMDAwMCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzgsJWQwCisJYXNybAkjNCwlZDAKKwlmYWRkeAklZnAxLCVmcDAJCXwgLi4uRlAwIElTIFktRgorCWZtb3ZlbXggJWZwMi0lZnAyLyVmcDMsLSglc3ApCXwgLi4uRlAyIFNBVkVECisJbGVhCUxPR1RCTCwlYTAKKwlhZGRhbAklZDAsJWEwCQl8IC4uLkEwIElTIEFERFJFU1MgT0YgMS9GCisJZm1vdmVzCXplcm8sJWZwMQl8IC4uLkZQMSBJUyBLID0gMAorCWJyYQlMUDFDT05UMQorCitMUDFORUcwOgorfC0tRlBDUiBTQVZFRC4gRDAgSVMgWCBJTiBDT01QQUNUIEZPUk0uCisJY21waWwJIzAsJWQwCisJYmx0cwlMUDFORUcKK0xQMVpFUk86CisJZm1vdmVzCW5lZ29uZSwlZnAwCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJYnJhIHRfZHoKKworTFAxTkVHOgorCWZtb3Zlcwl6ZXJvLCVmcDAKKworCWZtb3ZlbAklZDEsJWZwY3IKKwlicmEJdF9vcGVycgorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc21vdmVjci5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc21vdmVjci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTI3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zbW92ZWNyLlMKQEAgLTAsMCArMSwxNjIgQEAKK3wKK3wJc21vdmVjci5zYSAzLjEgMTIvMTAvOTAKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNNT1ZFQ1IgcmV0dXJucyB0aGUgY29uc3RhbnQgYXQgdGhlCit8CW9mZnNldCBnaXZlbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gZmllbGQuCit8Cit8CUlucHV0OiBBbiBvZmZzZXQgaW4gdGhlIGluc3RydWN0aW9uIHdvcmQuCit8Cit8CU91dHB1dDoJVGhlIGNvbnN0YW50IHJvdW5kZWQgdG8gdGhlIHVzZXIncyByb3VuZGluZworfAkJbW9kZSB1bmNoZWNrZWQgZm9yIG92ZXJmbG93LgorfAorfAlNb2RpZmllZDogZnAwLgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNNT1ZFQ1IJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24gOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbnJtX3NldAorCXx4cmVmCXJvdW5kCisJfHhyZWYJUElSTgorCXx4cmVmCVBJUlpSTQorCXx4cmVmCVBJUlAKKwl8eHJlZglTTUFMUk4KKwl8eHJlZglTTUFMUlpSTQorCXx4cmVmCVNNQUxSUAorCXx4cmVmCUJJR1JOCisJfHhyZWYJQklHUlpSTQorCXx4cmVmCUJJR1JQCisKK0ZaRVJPOgkubG9uZwkwMDAwMDAwMAorfAorfAlGTU9WRUNSCit8CisJLmdsb2JhbAlzbW92Y3IKK3Ntb3ZjcjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjOTojN30sJWQwIHxnZXQgb2Zmc2V0CisJYmZleHR1CVVTRVJfRlBDUiglYTYpeyMyNjojMn0sJWQxIHxnZXQgcm1vZGUKK3wKK3wgY2hlY2sgcmFuZ2Ugb2Ygb2Zmc2V0Cit8CisJdHN0YgklZDAJCXxpZiB6ZXJvLCBvZmZzZXQgaXMgdG8gcGkKKwliZXFzCVBJX1RCTAkJfGl0IGlzIHBpCisJY21waWIJIzB4MGEsJWQwCQl8Y2hlY2sgcmFuZ2UgJDAxIC0gJDBhCisJYmxlcwlaX1ZBTAkJfGlmIGluIHRoaXMgcmFuZ2UsIHJldHVybiB6ZXJvCisJY21waWIJIzB4MGUsJWQwCQl8Y2hlY2sgcmFuZ2UgJDBiIC0gJDBlCisJYmxlcwlTTV9UQkwJCXx2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorCWNtcGliCSMweDJmLCVkMAkJfGNoZWNrIHJhbmdlICQxMCAtICQyZgorCWJsZXMJWl9WQUwJCXxpZiBpbiB0aGlzIHJhbmdlLCByZXR1cm4gemVybworCWNtcGliCSMweDNmLCVkMAkJfGNoZWNrIHJhbmdlICQzMCAtICQzZgorCWJsZQlCR19UQkwJCXx2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorWl9WQUw6CisJZm1vdmVzCUZaRVJPLCVmcDAKKwlydHMKK1BJX1RCTDoKKwl0c3RiCSVkMQkJfG9mZnNldCBpcyB6ZXJvLCBjaGVjayBmb3Igcm1vZGUKKwliZXFzCVBJX1JOCQl8aWYgemVybywgcm4gbW9kZQorCWNtcGliCSMweDMsJWQxCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwlQSV9SUAkJfGlmIDMsIHJwIG1vZGUKK1BJX1JaUk06CisJbGVhbAlQSVJaUk0sJWEwCXxybW9kZSBpcyByeiBvciBybSwgbG9hZCBQSVJaUk0gaW4gYTAKKwlicmEJc2V0X2ZpbngKK1BJX1JOOgorCWxlYWwJUElSTiwlYTAJCXxybW9kZSBpcyBybiwgbG9hZCBQSVJOIGluIGEwCisJYnJhCXNldF9maW54CitQSV9SUDoKKwlsZWFsCVBJUlAsJWEwCQl8cm1vZGUgaXMgcnAsIGxvYWQgUElSUCBpbiBhMAorCWJyYQlzZXRfZmlueAorU01fVEJMOgorCXN1YmlsCSMweGIsJWQwCQl8bWFrZSBvZmZzZXQgaW4gMCAtIDQgcmFuZ2UKKwl0c3RiCSVkMQkJfGNoZWNrIGZvciBybW9kZQorCWJlcXMJU01fUk4JCXxpZiB6ZXJvLCBybiBtb2RlCisJY21waWIJIzB4MywlZDEJCXxjaGVjayBmb3IgcnAKKwliZXFzCVNNX1JQCQl8aWYgMywgcnAgbW9kZQorU01fUlpSTToKKwlsZWFsCVNNQUxSWlJNLCVhMAl8cm1vZGUgaXMgcnogb3Igcm0sIGxvYWQgU01SWlJNIGluIGEwCisJY21waWIJIzB4MiwlZDAJCXxjaGVjayBpZiByZXN1bHQgaXMgaW5leAorCWJsZQlzZXRfZmlueAl8aWYgMCAtIDIsIGl0IGlzIGluZXhhY3QKKwlicmEJbm9fZmlueAkJfGlmIDMsIGl0IGlzIGV4YWN0CitTTV9STjoKKwlsZWFsCVNNQUxSTiwlYTAJfHJtb2RlIGlzIHJuLCBsb2FkIFNNUk4gaW4gYTAKKwljbXBpYgkjMHgyLCVkMAkJfGNoZWNrIGlmIHJlc3VsdCBpcyBpbmV4CisJYmxlCXNldF9maW54CXxpZiAwIC0gMiwgaXQgaXMgaW5leGFjdAorCWJyYQlub19maW54CQl8aWYgMywgaXQgaXMgZXhhY3QKK1NNX1JQOgorCWxlYWwJU01BTFJQLCVhMAl8cm1vZGUgaXMgcnAsIGxvYWQgU01SUCBpbiBhMAorCWNtcGliCSMweDIsJWQwCQl8Y2hlY2sgaWYgcmVzdWx0IGlzIGluZXgKKwlibGUJc2V0X2ZpbngJfGlmIDAgLSAyLCBpdCBpcyBpbmV4YWN0CisJYnJhCW5vX2ZpbngJCXxpZiAzLCBpdCBpcyBleGFjdAorQkdfVEJMOgorCXN1YmlsCSMweDMwLCVkMAkJfG1ha2Ugb2Zmc2V0IGluIDAgLSBmIHJhbmdlCisJdHN0YgklZDEJCXxjaGVjayBmb3Igcm1vZGUKKwliZXFzCUJHX1JOCQl8aWYgemVybywgcm4gbW9kZQorCWNtcGliCSMweDMsJWQxCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwlCR19SUAkJfGlmIDMsIHJwIG1vZGUKK0JHX1JaUk06CisJbGVhbAlCSUdSWlJNLCVhMAl8cm1vZGUgaXMgcnogb3Igcm0sIGxvYWQgQkdSWlJNIGluIGEwCisJY21waWIJIzB4MSwlZDAJCXxjaGVjayBpZiByZXN1bHQgaXMgaW5leAorCWJsZQlzZXRfZmlueAl8aWYgMCAtIDEsIGl0IGlzIGluZXhhY3QKKwljbXBpYgkjMHg3LCVkMAkJfHNlY29uZCBjaGVjaworCWJsZQlub19maW54CQl8aWYgMCAtIDcsIGl0IGlzIGV4YWN0CisJYnJhCXNldF9maW54CXxpZiA4IC0gZiwgaXQgaXMgaW5leGFjdAorQkdfUk46CisJbGVhbAlCSUdSTiwlYTAJfHJtb2RlIGlzIHJuLCBsb2FkIEJHUk4gaW4gYTAKKwljbXBpYgkjMHgxLCVkMAkJfGNoZWNrIGlmIHJlc3VsdCBpcyBpbmV4CisJYmxlCXNldF9maW54CXxpZiAwIC0gMSwgaXQgaXMgaW5leGFjdAorCWNtcGliCSMweDcsJWQwCQl8c2Vjb25kIGNoZWNrCisJYmxlCW5vX2ZpbngJCXxpZiAwIC0gNywgaXQgaXMgZXhhY3QKKwlicmEJc2V0X2ZpbngJfGlmIDggLSBmLCBpdCBpcyBpbmV4YWN0CitCR19SUDoKKwlsZWFsCUJJR1JQLCVhMAl8cm1vZGUgaXMgcnAsIGxvYWQgU01SUCBpbiBhMAorCWNtcGliCSMweDEsJWQwCQl8Y2hlY2sgaWYgcmVzdWx0IGlzIGluZXgKKwlibGUJc2V0X2ZpbngJfGlmIDAgLSAxLCBpdCBpcyBpbmV4YWN0CisJY21waWIJIzB4NywlZDAJCXxzZWNvbmQgY2hlY2sKKwlibGUJbm9fZmlueAkJfGlmIDAgLSA3LCBpdCBpcyBleGFjdAorfAlicmEJc2V0X2ZpbngJO2lmIDggLSBmLCBpdCBpcyBpbmV4YWN0CitzZXRfZmlueDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBpbmV4Mi9haW5leAorbm9fZmlueDoKKwltdWx1bAkjMTIsJWQwCQkJfHVzZSBvZmZzZXQgdG8gcG9pbnQgaW50byB0YWJsZXMKKwltb3ZlbAklZDEsTF9TQ1IxKCVhNikJCXxsb2FkIG1vZGUgZm9yIHJvdW5kIGNhbGwKKwliZmV4dHUJVVNFUl9GUENSKCVhNil7IzI0OiMyfSwlZDEJfGdldCBwcmVjaXNpb24KKwl0c3RsCSVkMQkJCXxjaGVjayBpZiBleHRlbmRlZCBwcmVjaXNpb24KK3wKK3wgUHJlY2lzaW9uIGlzIGV4dGVuZGVkCit8CisJYm5lcwlub3RfZXh0CQkJfGlmIGV4dGVuZGVkLCBkbyBub3QgY2FsbCByb3VuZAorCWZtb3ZlbXggKCVhMCwlZDApLCVmcDAtJWZwMAkJfHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCit8Cit8IFByZWNpc2lvbiBpcyBzaW5nbGUgb3IgZG91YmxlCit8Citub3RfZXh0OgorCXN3YXAJJWQxCQkJfHJuZCBwcmVjIGluIHVwcGVyIHdvcmQgb2YgZDEKKwlhZGRsCUxfU0NSMSglYTYpLCVkMQkJfG1lcmdlIHJtb2RlIGluIGxvdyB3b3JkIG9mIGQxCisJbW92ZWwJKCVhMCwlZDApLEZQX1NDUjEoJWE2KQl8bG9hZCBmaXJzdCB3b3JkIHRvIHRlbXAgc3RvcmFnZQorCW1vdmVsCTQoJWEwLCVkMCksRlBfU0NSMSs0KCVhNikJfGxvYWQgc2Vjb25kIHdvcmQKKwltb3ZlbAk4KCVhMCwlZDApLEZQX1NDUjErOCglYTYpCXxsb2FkIHRoaXJkIHdvcmQKKwljbHJsCSVkMAkJCXxjbGVhciBnLHIscworCWxlYQlGUF9TQ1IxKCVhNiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dC4gZm9ybWF0CisKKwlic3IJcm91bmQJCQl8Z28gcm91bmQgdGhlIG1hbnRpc3NhCisKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWZpbl9mY3IKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorZmluX2ZjcjoKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3JlbV9tb2QuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NyZW1fbW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4ZDdmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NyZW1fbW9kLlMKQEAgLTAsMCArMSw0MjIgQEAKK3wKK3wJc3JlbV9tb2Quc2EgMy4xIDEyLzEwLzkwCit8Cit8ICAgICAgVGhlIGVudHJ5IHBvaW50IHNNT0QgY29tcHV0ZXMgdGhlIGZsb2F0aW5nIHBvaW50IE1PRCBvZiB0aGUKK3wgICAgICBpbnB1dCB2YWx1ZXMgWCBhbmQgWS4gVGhlIGVudHJ5IHBvaW50IHNSRU0gY29tcHV0ZXMgdGhlIGZsb2F0aW5nCit8ICAgICAgcG9pbnQgKElFRUUpIFJFTSBvZiB0aGUgaW5wdXQgdmFsdWVzIFggYW5kIFkuCit8Cit8ICAgICAgSU5QVVQKK3wgICAgICAtLS0tLQorfCAgICAgIERvdWJsZS1leHRlbmRlZCB2YWx1ZSBZIGlzIHBvaW50ZWQgdG8gYnkgYWRkcmVzcyBpbiByZWdpc3RlcgorfCAgICAgIEEwLiBEb3VibGUtZXh0ZW5kZWQgdmFsdWUgWCBpcyBsb2NhdGVkIGluIC0xMihBMCkuIFRoZSB2YWx1ZXMKK3wgICAgICBvZiBYIGFuZCBZIGFyZSBib3RoIG5vbnplcm8gYW5kIGZpbml0ZTsgYWx0aG91Z2ggZWl0aGVyIG9yIGJvdGgKK3wgICAgICBvZiB0aGVtIGNhbiBiZSBkZW5vcm1hbGl6ZWQuIFRoZSBzcGVjaWFsIGNhc2VzIG9mIHplcm9zLCBOYU5zLAorfCAgICAgIGFuZCBpbmZpbml0aWVzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZS4KK3wKK3wgICAgICBPVVRQVVQKK3wgICAgICAtLS0tLS0KK3wgICAgICBGUkVNKFgsWSkgb3IgRk1PRChYLFkpLCBkZXBlbmRpbmcgb24gZW50cnkgcG9pbnQuCit8Cit8ICAgICAgIEFMR09SSVRITQorfCAgICAgICAtLS0tLS0tLS0KK3wKK3wgICAgICAgU3RlcCAxLiAgU2F2ZSBhbmQgc3RyaXAgc2lnbnMgb2YgWCBhbmQgWTogc2lnblggOj0gc2lnbihYKSwKK3wgICAgICAgICAgICAgICAgc2lnblkgOj0gc2lnbihZKSwgWCA6PSB8WHwsIFkgOj0gfFl8LAorfCAgICAgICAgICAgICAgICBzaWduUSA6PSBzaWduWCBFT1Igc2lnblkuIFJlY29yZCB3aGV0aGVyIE1PRCBvciBSRU0KK3wgICAgICAgICAgICAgICAgaXMgcmVxdWVzdGVkLgorfAorfCAgICAgICBTdGVwIDIuICBTZXQgTCA6PSBleHBvKFgpLWV4cG8oWSksIGsgOj0gMCwgUSA6PSAwLgorfCAgICAgICAgICAgICAgICBJZiAoTCA8IDApIHRoZW4KK3wgICAgICAgICAgICAgICAgICAgUiA6PSBYLCBnbyB0byBTdGVwIDQuCit8ICAgICAgICAgICAgICAgIGVsc2UKK3wgICAgICAgICAgICAgICAgICAgUiA6PSAyXigtTClYLCBqIDo9IEwuCit8ICAgICAgICAgICAgICAgIGVuZGlmCit8Cit8ICAgICAgIFN0ZXAgMy4gIFBlcmZvcm0gTU9EKFgsWSkKK3wgICAgICAgICAgICAzLjEgSWYgUiA9IFksIGdvIHRvIFN0ZXAgOS4KK3wgICAgICAgICAgICAzLjIgSWYgUiA+IFksIHRoZW4geyBSIDo9IFIgLSBZLCBRIDo9IFEgKyAxfQorfCAgICAgICAgICAgIDMuMyBJZiBqID0gMCwgZ28gdG8gU3RlcCA0LgorfCAgICAgICAgICAgIDMuNCBrIDo9IGsgKyAxLCBqIDo9IGogLSAxLCBRIDo9IDJRLCBSIDo9IDJSLiBHbyB0bworfCAgICAgICAgICAgICAgICBTdGVwIDMuMS4KK3wKK3wgICAgICAgU3RlcCA0LiAgQXQgdGhpcyBwb2ludCwgUiA9IFggLSBRWSA9IE1PRChYLFkpLiBTZXQKK3wgICAgICAgICAgICAgICAgTGFzdF9TdWJ0cmFjdCA6PSBmYWxzZSAodXNlZCBpbiBTdGVwIDcgYmVsb3cpLiBJZgorfCAgICAgICAgICAgICAgICBNT0QgaXMgcmVxdWVzdGVkLCBnbyB0byBTdGVwIDYuCit8Cit8ICAgICAgIFN0ZXAgNS4gIFIgPSBNT0QoWCxZKSwgYnV0IFJFTShYLFkpIGlzIHJlcXVlc3RlZC4KK3wgICAgICAgICAgICA1LjEgSWYgUiA8IFkvMiwgdGhlbiBSID0gTU9EKFgsWSkgPSBSRU0oWCxZKS4gR28gdG8KK3wgICAgICAgICAgICAgICAgU3RlcCA2LgorfCAgICAgICAgICAgIDUuMiBJZiBSID4gWS8yLCB0aGVuIHsgc2V0IExhc3RfU3VidHJhY3QgOj0gdHJ1ZSwKK3wgICAgICAgICAgICAgICAgUSA6PSBRICsgMSwgWSA6PSBzaWduWSpZIH0uIEdvIHRvIFN0ZXAgNi4KK3wgICAgICAgICAgICA1LjMgVGhpcyBpcyB0aGUgdHJpY2t5IGNhc2Ugb2YgUiA9IFkvMi4gSWYgUSBpcyBvZGQsCit8ICAgICAgICAgICAgICAgIHRoZW4geyBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblggfS4KK3wKK3wgICAgICAgU3RlcCA2LiAgUiA6PSBzaWduWCpSLgorfAorfCAgICAgICBTdGVwIDcuICBJZiBMYXN0X1N1YnRyYWN0ID0gdHJ1ZSwgUiA6PSBSIC0gWS4KK3wKK3wgICAgICAgU3RlcCA4LiAgUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUiBhcyByZXF1aXJlZC4KK3wKK3wgICAgICAgU3RlcCA5LiAgQXQgdGhpcyBwb2ludCwgUiA9IDJeKC1qKSpYIC0gUSBZID0gWS4gVGh1cywKK3wgICAgICAgICAgICAgICAgWCA9IDJeKGopKihRKzEpWS4gc2V0IFEgOj0gMl4oaikqKFErMSksCit8ICAgICAgICAgICAgICAgIFIgOj0gMC4gUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUi4KK3wKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworU1JFTV9NT0Q6ICAgIHxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbiAgICA4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwkuc2V0CU1vZF9GbGFnLExfU0NSMworCS5zZXQJU2lnblksRlBfU0NSMys0CisJLnNldAlTaWduWCxGUF9TQ1IzKzgKKwkuc2V0CVNpZ25RLEZQX1NDUjMrMTIKKwkuc2V0CVNjX0ZsYWcsRlBfU0NSNAorCisJLnNldAlZLEZQX1NDUjEKKwkuc2V0CVlfSGksWSs0CisJLnNldAlZX0xvLFkrOAorCisJLnNldAlSLEZQX1NDUjIKKwkuc2V0CVJfSGksUis0CisJLnNldAlSX0xvLFIrOAorCisKK1NjYWxlOiAgICAgLmxvbmcJMHgwMDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisJfHhyZWYJdF9hdm9pZF91bnN1cHAKKworICAgICAgICAuZ2xvYmFsICAgICAgICBzbW9kCitzbW9kOgorCisgICBtb3ZlbCAgICAgICAgICAgICAgICMwLE1vZF9GbGFnKCVhNikKKyAgIGJyYXMgICAgICAgICAgICAgICAgTW9kX1JlbQorCisgICAgICAgIC5nbG9iYWwgICAgICAgIHNyZW0KK3NyZW06CisKKyAgIG1vdmVsICAgICAgICAgICAgICAgIzEsTW9kX0ZsYWcoJWE2KQorCitNb2RfUmVtOgorfC4uU2F2ZSBzaWduIG9mIFggYW5kIFkKKyAgIG1vdmVtbCAgICAgICAgICAgICAgJWQyLSVkNywtKCVhNykgICAgIHwgLi4uc2F2ZSBkYXRhIHJlZ2lzdGVycworICAgbW92ZXcgICAgICAgICAgICAgICAoJWEwKSwlZDMKKyAgIG1vdmV3ICAgICAgICAgICAgICAgJWQzLFNpZ25ZKCVhNikKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4MDAwMDdGRkYsJWQzICAgfCAuLi5ZIDo9IHxZfAorCit8CisgICBtb3ZlbCAgICAgICAgICAgICAgIDQoJWEwKSwlZDQKKyAgIG1vdmVsICAgICAgICAgICAgICAgOCglYTApLCVkNSAgICAgICAgfCAuLi4oRDMsRDQsRDUpIGlzIHxZfAorCisgICB0c3RsICAgICAgICAgICAgICAgICVkMworICAgYm5lcyAgICAgICAgICAgICAgICBZX05vcm1hbAorCisgICBtb3ZlbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMwl8IC4uLiQzRkZEICsgMQorICAgdHN0bCAgICAgICAgICAgICAgICAlZDQKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlZX25vdDAKKworSGlZXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkNSwlZDQKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ1CisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDMKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDR7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkNAorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQzICAgICAgICAgICB8IC4uLihEMyxENCxENSkgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBDaGtfWAorCitIaVlfbm90MDoKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDR7IzA6IzMyfSwlZDYKKyAgIHN1YmwgICAgICAgICAgICAgICAgJWQ2LCVkMworICAgbHNsbCAgICAgICAgICAgICAgICAlZDYsJWQ0CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkNSwlZDcgICAgICAgICAgIHwgLi4uYSBjb3B5IG9mIEQ1CisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDUKKyAgIG5lZ2wgICAgICAgICAgICAgICAgJWQ2CisgICBhZGRpbCAgICAgICAgICAgICAgICMzMiwlZDYKKyAgIGxzcmwgICAgICAgICAgICAgICAgJWQ2LCVkNworICAgb3JsICAgICAgICAgICAgICAgICAlZDcsJWQ0ICAgICAgICAgICB8IC4uLihEMyxENCxENSkgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBDaGtfWAorCitZX05vcm1hbDoKKyAgIGFkZGlsICAgICAgICAgICAgICAgIzB4MDAwMDNGRkUsJWQzICAgfCAuLi4oRDMsRDQsRDUpIG5vcm1hbGl6ZWQKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKworQ2hrX1g6CisgICBtb3ZldyAgICAgICAgICAgICAgIC0xMiglYTApLCVkMAorICAgbW92ZXcgICAgICAgICAgICAgICAlZDAsU2lnblgoJWE2KQorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduWSglYTYpLCVkMQorICAgZW9ybCAgICAgICAgICAgICAgICAlZDAsJWQxCisgICBhbmRpbCAgICAgICAgICAgICAgICMweDAwMDA4MDAwLCVkMQorICAgbW92ZXcgICAgICAgICAgICAgICAlZDEsU2lnblEoJWE2KQl8IC4uLnNpZ24oUSkgb2J0YWluZWQKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4MDAwMDdGRkYsJWQwCisgICBtb3ZlbCAgICAgICAgICAgICAgIC04KCVhMCksJWQxCisgICBtb3ZlbCAgICAgICAgICAgICAgIC00KCVhMCksJWQyICAgICAgIHwgLi4uKEQwLEQxLEQyKSBpcyB8WHwKKyAgIHRzdGwgICAgICAgICAgICAgICAgJWQwCisgICBibmVzICAgICAgICAgICAgICAgIFhfTm9ybWFsCisgICBtb3ZlbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMAorICAgdHN0bCAgICAgICAgICAgICAgICAlZDEKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlYX25vdDAKKworSGlYXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDEKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQyCisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDF7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMQorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBJbml0CisKK0hpWF9ub3QwOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDYKKyAgIGJmZmZvICAgICAgICAgICAgICAgICVkMXsjMDojMzJ9LCVkNgorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwCisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDEKKyAgIG1vdmVsICAgICAgICAgICAgICAgJWQyLCVkNyAgICAgICAgICAgfCAuLi5hIGNvcHkgb2YgRDIKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMgorICAgbmVnbCAgICAgICAgICAgICAgICAlZDYKKyAgIGFkZGlsICAgICAgICAgICAgICAgIzMyLCVkNgorICAgbHNybCAgICAgICAgICAgICAgICAlZDYsJWQ3CisgICBvcmwgICAgICAgICAgICAgICAgICVkNywlZDEgICAgICAgICAgIHwgLi4uKEQwLEQxLEQyKSBub3JtYWxpemVkCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisgICBicmFzICAgICAgICAgICAgICAgIEluaXQKKworWF9Ob3JtYWw6CisgICBhZGRpbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMCAgIHwgLi4uKEQwLEQxLEQyKSBub3JtYWxpemVkCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0luaXQ6Cit8CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMyxMX1NDUjEoJWE2KSAgIHwgLi4uc2F2ZSBiaWFzZWQgZXhwbyhZKQorICAgbW92ZWwJCSVkMCxMX1NDUjIoJWE2KQl8c2F2ZSBkMAorICAgc3VibCAgICAgICAgICAgICAgICAlZDMsJWQwICAgICAgICAgICB8IC4uLkwgOj0gZXhwbyhYKS1leHBvKFkpCit8ICAgTW92ZS5MICAgICAgICAgICAgICAgRDAsTCAgICAgICAgICAgIC4uLkQwIGlzIGoKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2ICAgICAgICAgICAgICB8IC4uLkQ2IDo9IGNhcnJ5IDwtIDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQzICAgICAgICAgICAgICB8IC4uLkQzIGlzIFEKKyAgIG1vdmVhbCAgICAgICAgICAgICAgIzAsJWExICAgICAgICAgICB8IC4uLkExIGlzIGs7IGoraz1MLCBRPTAKKworfC4uKENhcnJ5LEQxLEQyKSBpcyBSCisgICB0c3RsICAgICAgICAgICAgICAgICVkMAorICAgYmdlcyAgICAgICAgICAgICAgICBNb2RfTG9vcAorCit8Li5leHBvKFgpIDwgZXhwbyhZKS4gVGh1cyBYID0gbW9kKFgsWSkKK3wKKyAgIG1vdmVsCQlMX1NDUjIoJWE2KSwlZDAJfHJlc3RvcmUgZDAKKyAgIGJyYSAgICAgICAgICAgICAgICBHZXRfTW9kCisKK3wuLkF0IHRoaXMgcG9pbnQgIFIgPSAyXigtTClYOyBRID0gMDsgayA9IDA7IGFuZCAgaytqID0gTAorCisKK01vZF9Mb29wOgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDYgICAgICAgICAgICAgIHwgLi4udGVzdCBjYXJyeSBiaXQKKyAgIGJndHMgICAgICAgICAgICAgICAgUl9HVF9ZCisKK3wuLkF0IHRoaXMgcG9pbnQgY2FycnkgPSAwLCBSID0gKEQxLEQyKSwgWSA9IChENCxENSkKKyAgIGNtcGwgICAgICAgICAgICAgICAgJWQ0LCVkMSAgICAgICAgICAgfCAuLi5jb21wYXJlIGhpKFIpIGFuZCBoaShZKQorICAgYm5lcyAgICAgICAgICAgICAgICBSX05FX1kKKyAgIGNtcGwgICAgICAgICAgICAgICAgJWQ1LCVkMiAgICAgICAgICAgfCAuLi5jb21wYXJlIGxvKFIpIGFuZCBsbyhZKQorICAgYm5lcyAgICAgICAgICAgICAgICBSX05FX1kKKworfC4uQXQgdGhpcyBwb2ludCwgUiA9IFkKKyAgIGJyYSAgICAgICAgICAgICAgICBSZW1faXNfMAorCitSX05FX1k6Cit8Li51c2UgdGhlIGJvcnJvdyBvZiB0aGUgcHJldmlvdXMgY29tcGFyZQorICAgYmNzcyAgICAgICAgICAgICAgICBSX0xUX1kgICAgICAgICAgfCAuLi5ib3Jyb3cgaXMgc2V0IGlmZiBSIDwgWQorCitSX0dUX1k6Cit8Li5JZiBDYXJyeSBpcyBzZXQsIHRoZW4gWSA8IChDYXJyeSxEMSxEMikgPCAyWS4gT3RoZXJ3aXNlLCBDYXJyeSA9IDAKK3wuLmFuZCBZIDwgKEQxLEQyKSA8IDJZLiBFaXRoZXIgd2F5LCBwZXJmb3JtIFIgLSBZCisgICBzdWJsICAgICAgICAgICAgICAgICVkNSwlZDIgICAgICAgICAgIHwgLi4ubG8oUikgLSBsbyhZKQorICAgc3VieGwgICAgICAgICAgICAgICAlZDQsJWQxICAgICAgICAgICB8IC4uLmhpKFIpIC0gaGkoWSkKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2ICAgICAgICAgICAgICB8IC4uLmNsZWFyIGNhcnJ5CisgICBhZGRxbCAgICAgICAgICAgICAgICMxLCVkMyAgICAgICAgICAgfCAuLi5RIDo9IFEgKyAxCisKK1JfTFRfWToKK3wuLkF0IHRoaXMgcG9pbnQsIENhcnJ5PTAsIFIgPCBZLiBSID0gMl4oay1MKVggLSBRWTsgaytqID0gTDsgaiA+PSAwLgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDAgICAgICAgICAgICAgIHwgLi4uc2VlIGlmIGogPSAwLgorICAgYmVxcyAgICAgICAgICAgICAgICBQb3N0TG9vcAorCisgICBhZGRsICAgICAgICAgICAgICAgICVkMywlZDMgICAgICAgICAgIHwgLi4uUSA6PSAyUQorICAgYWRkbCAgICAgICAgICAgICAgICAlZDIsJWQyICAgICAgICAgICB8IC4uLmxvKFIpID0gMmxvKFIpCisgICByb3hsbCAgICAgICAgICAgICAgICMxLCVkMSAgICAgICAgICAgfCAuLi5oaShSKSA9IDJoaShSKSArIGNhcnJ5CisgICBzY3MgICAgICAgICAgICAgICAgICAlZDYgICAgICAgICAgICAgIHwgLi4uc2V0IENhcnJ5IGlmIDIoUikgb3ZlcmZsb3dzCisgICBhZGRxbCAgICAgICAgICAgICAgICMxLCVhMSAgICAgICAgICAgfCAuLi5rIDo9IGsrMQorICAgc3VicWwgICAgICAgICAgICAgICAjMSwlZDAgICAgICAgICAgIHwgLi4uaiA6PSBqIC0gMQorfC4uQXQgdGhpcyBwb2ludCwgUj0oQ2FycnksRDEsRDIpID0gMl4oay1MKVggLSBRWSwgaitrPUwsIGogPj0gMCwgUiA8IDJZLgorCisgICBicmFzICAgICAgICAgICAgICAgIE1vZF9Mb29wCisKK1Bvc3RMb29wOgorfC4uayA9IEwsIGogPSAwLCBDYXJyeSA9IDAsIFIgPSAoRDEsRDIpID0gWCAtIFFZLCBSIDwgWS4KKworfC4ubm9ybWFsaXplIFIuCisgICBtb3ZlbCAgICAgICAgICAgICAgIExfU0NSMSglYTYpLCVkMCAgICAgICAgICAgfCAuLi5uZXcgYmlhc2VkIGV4cG8gb2YgUgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDEKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlSX25vdDAKKworSGlSXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDEKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQyCisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDF7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMQorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBHZXRfTW9kCisKK0hpUl9ub3QwOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDYKKyAgIGJmZmZvICAgICAgICAgICAgICAgICVkMXsjMDojMzJ9LCVkNgorICAgYm1pcyAgICAgICAgICAgICAgICBHZXRfTW9kICAgICAgICAgfCAuLi5hbHJlYWR5IG5vcm1hbGl6ZWQKKyAgIHN1YmwgICAgICAgICAgICAgICAgJWQ2LCVkMAorICAgbHNsbCAgICAgICAgICAgICAgICAlZDYsJWQxCisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDcgICAgICAgICAgIHwgLi4uYSBjb3B5IG9mIEQyCisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDIKKyAgIG5lZ2wgICAgICAgICAgICAgICAgJWQ2CisgICBhZGRpbCAgICAgICAgICAgICAgICMzMiwlZDYKKyAgIGxzcmwgICAgICAgICAgICAgICAgJWQ2LCVkNworICAgb3JsICAgICAgICAgICAgICAgICAlZDcsJWQxICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgbm9ybWFsaXplZAorCit8CitHZXRfTW9kOgorICAgY21waWwJCSMweDAwMDA0MUZFLCVkMAorICAgYmdlcwkJTm9fU2NhbGUKK0RvX1NjYWxlOgorICAgbW92ZXcJCSVkMCxSKCVhNikKKyAgIGNscncJCVIrMiglYTYpCisgICBtb3ZlbAkJJWQxLFJfSGkoJWE2KQorICAgbW92ZWwJCSVkMixSX0xvKCVhNikKKyAgIG1vdmVsCQlMX1NDUjEoJWE2KSwlZDYKKyAgIG1vdmV3CQklZDYsWSglYTYpCisgICBjbHJ3CQlZKzIoJWE2KQorICAgbW92ZWwJCSVkNCxZX0hpKCVhNikKKyAgIG1vdmVsCQklZDUsWV9MbyglYTYpCisgICBmbW92ZXgJCVIoJWE2KSwlZnAwCQl8IC4uLm5vIGV4Y2VwdGlvbgorICAgbW92ZWwJCSMxLFNjX0ZsYWcoJWE2KQorICAgYnJhcwkJTW9kT3JSZW0KK05vX1NjYWxlOgorICAgbW92ZWwJCSVkMSxSX0hpKCVhNikKKyAgIG1vdmVsCQklZDIsUl9MbyglYTYpCisgICBzdWJpbAkJIzB4M0ZGRSwlZDAKKyAgIG1vdmV3CQklZDAsUiglYTYpCisgICBjbHJ3CQlSKzIoJWE2KQorICAgbW92ZWwJCUxfU0NSMSglYTYpLCVkNgorICAgc3ViaWwJCSMweDNGRkUsJWQ2CisgICBtb3ZlbAkJJWQ2LExfU0NSMSglYTYpCisgICBmbW92ZXgJCVIoJWE2KSwlZnAwCisgICBtb3ZldwkJJWQ2LFkoJWE2KQorICAgbW92ZWwJCSVkNCxZX0hpKCVhNikKKyAgIG1vdmVsCQklZDUsWV9MbyglYTYpCisgICBtb3ZlbAkJIzAsU2NfRmxhZyglYTYpCisKK3wKKworCitNb2RPclJlbToKKyAgIG1vdmVsICAgICAgICAgICAgICAgTW9kX0ZsYWcoJWE2KSwlZDYKKyAgIGJlcXMgICAgICAgICAgICAgICAgRml4X1NpZ24KKworICAgbW92ZWwgICAgICAgICAgICAgICBMX1NDUjEoJWE2KSwlZDYgICAgICAgICAgIHwgLi4ubmV3IGJpYXNlZCBleHBvKFkpCisgICBzdWJxbCAgICAgICAgICAgICAgICMxLCVkNiAgICAgICAgICAgfCAuLi5iaWFzZWQgZXhwbyhZLzIpCisgICBjbXBsICAgICAgICAgICAgICAgICVkNiwlZDAKKyAgIGJsdHMgICAgICAgICAgICAgICAgRml4X1NpZ24KKyAgIGJndHMgICAgICAgICAgICAgICAgTGFzdF9TdWIKKworICAgY21wbCAgICAgICAgICAgICAgICAlZDQsJWQxCisgICBibmVzICAgICAgICAgICAgICAgIE5vdF9FUQorICAgY21wbCAgICAgICAgICAgICAgICAlZDUsJWQyCisgICBibmVzICAgICAgICAgICAgICAgIE5vdF9FUQorICAgYnJhICAgICAgICAgICAgICAgIFRpZV9DYXNlCisKK05vdF9FUToKKyAgIGJjc3MgICAgICAgICAgICAgICAgRml4X1NpZ24KKworTGFzdF9TdWI6Cit8CisgICBmc3VieAkJWSglYTYpLCVmcDAJCXwgLi4ubm8gZXhjZXB0aW9ucworICAgYWRkcWwgICAgICAgICAgICAgICAjMSwlZDMgICAgICAgICAgIHwgLi4uUSA6PSBRICsgMQorCit8CisKK0ZpeF9TaWduOgorfC4uR2V0IHNpZ24gb2YgWAorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduWCglYTYpLCVkNgorICAgYmdlcwkJR2V0X1EKKyAgIGZuZWd4CQklZnAwCisKK3wuLkdldCBRCit8CitHZXRfUToKKyAgIGNscmwJCSVkNgorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduUSglYTYpLCVkNiAgICAgICAgfCAuLi5ENiBpcyBzaWduKFEpCisgICBtb3ZlbCAgICAgICAgICAgICAgICM4LCVkNworICAgbHNybCAgICAgICAgICAgICAgICAlZDcsJWQ2CisgICBhbmRpbCAgICAgICAgICAgICAgICMweDAwMDAwMDdGLCVkMyAgIHwgLi4uNyBiaXRzIG9mIFEKKyAgIG9ybCAgICAgICAgICAgICAgICAgJWQ2LCVkMyAgICAgICAgICAgfCAuLi5zaWduIGFuZCBiaXRzIG9mIFEKKyAgIHN3YXAgICAgICAgICAgICAgICAgICVkMworICAgZm1vdmVsICAgICAgICAgICAgICAlZnBzciwlZDYKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4RkYwMEZGRkYsJWQ2CisgICBvcmwgICAgICAgICAgICAgICAgICVkMywlZDYKKyAgIGZtb3ZlbCAgICAgICAgICAgICAgJWQ2LCVmcHNyICAgICAgICAgfCAuLi5wdXQgUSBpbiBmcHNyCisKK3wKK1Jlc3RvcmU6CisgICBtb3ZlbWwgICAgICAgICAgICAgICglYTcpKywlZDItJWQ3CisgICBmbW92ZWwgICAgICAgICAgICAgIFVTRVJfRlBDUiglYTYpLCVmcGNyCisgICBtb3ZlbCAgICAgICAgICAgICAgIFNjX0ZsYWcoJWE2KSwlZDAKKyAgIGJlcXMgICAgICAgICAgICAgICAgRmluaXNoCisgICBmbXVseAkJU2NhbGUoJXBjKSwlZnAwCXwgLi4ubWF5IGNhdXNlIHVuZGVyZmxvdworICAgYnJhCQkJdF9hdm9pZF91bnN1cHAJfGNoZWNrIGZvciBkZW5vcm0gYXMgYQorfAkJCQkJO3Jlc3VsdCBvZiB0aGUgc2NhbGluZworCitGaW5pc2g6CisJZm1vdmV4CQklZnAwLCVmcDAJCXxjYXB0dXJlIGV4Y2VwdGlvbnMgJiByb3VuZAorCXJ0cworCitSZW1faXNfMDoKK3wuLlIgPSAyXigtailYIC0gUSBZID0gWSwgdGh1cyBSID0gMCBhbmQgcXVvdGllbnQgPSAyXmogKFErMSkKKyAgIGFkZHFsICAgICAgICAgICAgICAgIzEsJWQzCisgICBjbXBpbCAgICAgICAgICAgICAgICM4LCVkMCAgICAgICAgICAgfCAuLi5EMCBpcyBqCisgICBiZ2VzICAgICAgICAgICAgICAgIFFfQmlnCisKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQwLCVkMworICAgYnJhcyAgICAgICAgICAgICAgICBTZXRfUl8wCisKK1FfQmlnOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDMKKworU2V0X1JfMDoKKyAgIGZtb3ZlcwkJIzB4MDAwMDAwMDAsJWZwMAorICAgbW92ZWwJCSMwLFNjX0ZsYWcoJWE2KQorICAgYnJhICAgICAgICAgICAgICAgIEZpeF9TaWduCisKK1RpZV9DYXNlOgorfC4uQ2hlY2sgcGFyaXR5IG9mIFEKKyAgIG1vdmVsICAgICAgICAgICAgICAgJWQzLCVkNgorICAgYW5kaWwgICAgICAgICAgICAgICAjMHgwMDAwMDAwMSwlZDYKKyAgIHRzdGwgICAgICAgICAgICAgICAgJWQ2CisgICBiZXEgICAgICAgICAgICAgICAgRml4X1NpZ24JfCAuLi5RIGlzIGV2ZW4KKworfC4uUSBpcyBvZGQsIFEgOj0gUSArIDEsIHNpZ25YIDo9IC1zaWduWAorICAgYWRkcWwgICAgICAgICAgICAgICAjMSwlZDMKKyAgIG1vdmV3ICAgICAgICAgICAgICAgU2lnblgoJWE2KSwlZDYKKyAgIGVvcmlsICAgICAgICAgICAgICAgIzB4MDAwMDgwMDAsJWQ2CisgICBtb3ZldyAgICAgICAgICAgICAgICVkNixTaWduWCglYTYpCisgICBicmEgICAgICAgICAgICAgICAgRml4X1NpZ24KKworICAgfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3Npbi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc3Npbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2M5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zc2luLlMKQEAgLTAsMCArMSw3NDYgQEAKK3wKK3wJc3Npbi5zYSAzLjMgNy8yOS85MQorfAorfAlUaGUgZW50cnkgcG9pbnQgc1NJTiBjb21wdXRlcyB0aGUgc2luZSBvZiBhbiBpbnB1dCBhcmd1bWVudAorfAlzQ09TIGNvbXB1dGVzIHRoZSBjb3NpbmUsIGFuZCBzU0lOQ09TIGNvbXB1dGVzIGJvdGguIFRoZQorfAljb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyB3aXRoIGEgImQiIGNvbXB1dGVzIHRoZSBzYW1lCit8CWNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdmFsdWVzIGZvciBkZW5vcm1hbGl6ZWQgaW5wdXRzLgorfAorfAlJbnB1dDogRG91YmxlLWV4dGVuZGVkIG51bWJlciBYIGluIGxvY2F0aW9uIHBvaW50ZWQgdG8KK3wJCWJ5IGFkZHJlc3MgcmVnaXN0ZXIgYTAuCit8Cit8CU91dHB1dDogVGhlIGZ1bmN0aW9uIHZhbHVlIHNpbihYKSBvciBjb3MoWCkgcmV0dXJuZWQgaW4gRnAwIGlmIFNJTiBvcgorfAkJQ09TIGlzIHJlcXVlc3RlZC4gT3RoZXJ3aXNlLCBmb3IgU0lOQ09TLCBzaW4oWCkgaXMgcmV0dXJuZWQKK3wJCWluIEZwMCwgYW5kIGNvcyhYKSBpcyByZXR1cm5lZCBpbiBGcDEuCit8Cit8CU1vZGlmaWVzOiBGcDAgZm9yIFNJTiBvciBDT1M7IGJvdGggRnAwIGFuZCBGcDEgZm9yIFNJTkNPUy4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMSB1bHAgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW1zIHNTSU4gYW5kIHNDT1MgdGFrZSBhcHByb3hpbWF0ZWx5IDE1MCBjeWNsZXMgZm9yCit8CQlpbnB1dCBhcmd1bWVudCBYIHN1Y2ggdGhhdCB8WHwgPCAxNVBpLCB3aGljaCBpcyB0aGUgdXN1YWwKK3wJCXNpdHVhdGlvbi4gVGhlIHNwZWVkIGZvciBzU0lOQ09TIGlzIGFwcHJveGltYXRlbHkgMTkwIGN5Y2xlcy4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAlTSU4gYW5kIENPUzoKK3wJMS4gSWYgU0lOIGlzIGludm9rZWQsIHNldCBBZGpOIDo9IDA7IG90aGVyd2lzZSwgc2V0IEFkak4gOj0gMS4KK3wKK3wJMi4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDcuCit8Cit8CTMuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0Cit8CQlrID0gTiBtb2QgNCwgc28gaW4gcGFydGljdWxhciwgayA9IDAsMSwyLG9yIDMuIE92ZXJ3cml0ZQorfAkJayBieSBrIDo9IGsgKyBBZGpOLgorfAorfAk0LiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDYuCit8Cit8CTUuIChrIGlzIG9kZCkgU2V0IGogOj0gKGstMSkvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qY29zKHIpCit8CQl3aGVyZSBjb3MocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIGV2ZW4gcG9seW5vbWlhbCBpbiByLAorfAkJMSArIHIqciooQjErcyooQjIrIC4uLiArIHMqQjgpKSwJcyA9IHIqci4KK3wJCUV4aXQuCit8Cit8CTYuIChrIGlzIGV2ZW4pIFNldCBqIDo9IGsvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qc2luKHIpCit8CQl3aGVyZSBzaW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIHIKK3wJCXIgKyByKnMqKEExK3MqKEEyKyAuLi4gKyBzKkE3KSksCXMgPSByKnIuCit8CQlFeGl0LgorfAorfAk3LiBJZiB8WHwgPiAxLCBnbyB0byA5LgorfAorfAk4LiAofFh8PDIqKigtNDApKSBJZiBTSU4gaXMgaW52b2tlZCwgcmV0dXJuIFg7IG90aGVyd2lzZSByZXR1cm4gMS4KK3wKK3wJOS4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjayB0byAzLgorfAorfAlTSU5DT1M6Cit8CTEuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA2LgorfAorfAkyLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAorfAkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgorfAorfAkzLiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDUuCit8Cit8CTQuIChrIGlzIG9kZCkgU2V0IGoxIDo9IChrLTEpLzIsIGoyIDo9IGoxIChFT1IpIChrIG1vZCAyKSwgaS5lLgorfAkJajEgZXhjbHVzaXZlIG9yIHdpdGggdGhlIGwucy5iLiBvZiBrLgorfAkJc2duMSA6PSAoLTEpKipqMSwgc2duMiA6PSAoLTEpKipqMi4KK3wJCVNJTihYKSA9IHNnbjEgKiBjb3MocikgYW5kIENPUyhYKSA9IHNnbjIqc2luKHIpIHdoZXJlCit8CQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuIHBvbHlub21pYWxzCit8CQlpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQKK3wKK3wJNS4gKGsgaXMgZXZlbikgU2V0IGoxIDo9IGsvMiwgc2duMSA6PSAoLTEpKipqMS4KK3wJCVNJTihYKSA9IHNnbjEgKiBzaW4ocikgYW5kIENPUyhYKSA9IHNnbjEqY29zKHIpIHdoZXJlCit8CQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuIHBvbHlub21pYWxzCit8CQlpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQKK3wKK3wJNi4gSWYgfFh8ID4gMSwgZ28gdG8gOC4KK3wKK3wJNy4gKHxYfDwyKiooLTQwKSkgU0lOKFgpID0gWCBhbmQgQ09TKFgpID0gMS4gRXhpdC4KK3wKK3wJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjayB0byAyLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U1NJTglpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK0JPVU5EUzE6CS5sb25nIDB4M0ZENzgwMDAsMHg0MDA0QkM3RQorVFdPQllQSToJLmxvbmcgMHgzRkU0NUYzMCwweDZEQzlDODgzCisKK1NJTkE3OgkubG9uZyAweEJENkFBQTc3LDB4Q0NDOTk0RjUKK1NJTkE2OgkubG9uZyAweDNERTYxMjA5LDB4N0FBRThEQTEKKworU0lOQTU6CS5sb25nIDB4QkU1QUU2NDUsMHgyQTExOEFFNAorU0lOQTQ6CS5sb25nIDB4M0VDNzFERTMsMHhBNTM0MTUzMQorCitTSU5BMzoJLmxvbmcgMHhCRjJBMDFBMCwweDFBMDE4QjU5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitTSU5BMjoJLmxvbmcgMHgzRkY4MDAwMCwweDg4ODg4ODg4LDB4ODg4ODU5QUYsMHgwMDAwMDAwMAorCitTSU5BMToJLmxvbmcgMHhCRkZDMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFBOTksMHgwMDAwMDAwMAorCitDT1NCODoJLmxvbmcgMHgzRDJBQzREMCwweEQ2MDExRUUzCitDT1NCNzoJLmxvbmcgMHhCREE5Mzk2RiwweDlGNDVBQzE5CisKK0NPU0I2OgkubG9uZyAweDNFMjFFRUQ5LDB4MDYxMkM5NzIKK0NPU0I1OgkubG9uZyAweEJFOTI3RTRGLDB4Qjc5RDlGQ0YKKworQ09TQjQ6CS5sb25nIDB4M0VGQTAxQTAsMHgxQTAxRDQyMywweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworQ09TQjM6CS5sb25nIDB4QkZGNTAwMDAsMHhCNjBCNjBCNiwweDBCNjFENDM4LDB4MDAwMDAwMDAKKworQ09TQjI6CS5sb25nIDB4M0ZGQTAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQjVFCitDT1NCMToJLmxvbmcgMHhCRjAwMDAwMAorCitJTlZUV09QSTogLmxvbmcgMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEKKworVFdPUEkxOgkubG9uZyAweDQwMDEwMDAwLDB4QzkwRkRBQTIsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitUV09QSTI6CS5sb25nIDB4M0ZERjAwMDAsMHg4NUEzMDhENCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCXx4cmVmCVBJVEJMCisKKwkuc2V0CUlOQVJHLEZQX1NDUjQKKworCS5zZXQJWCxGUF9TQ1I1CisJLnNldAlYRENBUkUsWCsyCisJLnNldAlYRlJBQyxYKzQKKworCS5zZXQJUlBSSU1FLEZQX1NDUjEKKwkuc2V0CVNQUklNRSxGUF9TQ1IyCisKKwkuc2V0CVBPU05FRzEsTF9TQ1IxCisJLnNldAlUV09UTzYzLExfU0NSMQorCisJLnNldAlFTkRGTEFHLExfU0NSMgorCS5zZXQJTixMX1NDUjIKKworCS5zZXQJQURKTixMX1NDUjMKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXN0b19jb3MKKworCS5nbG9iYWwJc3NpbmQKK3NzaW5kOgorfC0tU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzY29zZAorc2Nvc2Q6Cit8LS1DT1MoWCkgPSAxIEZPUiBERU5PUk1BTElaRUQgWAorCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAwCit8Cit8CTlEMjVCIEZpeDogU29tZXRpbWVzIHRoZSBwcmV2aW91cyBmbW92ZS5zIHNldHMgZnBzciBiaXRzCit8CisJZm1vdmVsCQkjMCwlZnBzcgorfAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc3Npbgorc3NpbjoKK3wtLVNFVCBBREpOIFRPIDAKKwltb3ZlbAkJIzAsQURKTiglYTYpCisJYnJhcwkJU0lOQkdOCisKKwkuZ2xvYmFsCXNjb3MKK3Njb3M6Cit8LS1TRVQgQURKTiBUTyAxCisJbW92ZWwJCSMxLEFESk4oJWE2KQorCitTSU5CR046Cit8LS1TQVZFIEZQQ1IsIEZQMS4gQ0hFQ0sgSUYgfFh8IElTIFRPTyBTTUFMTCBPUiBMQVJHRQorCisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJZm1vdmV4CQklZnAwLFgoJWE2KQorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAJCXwgLi4uQ09NUEFDVElGWSBYCisKKwljbXBpbAkJIzB4M0ZENzgwMDAsJWQwCQl8IC4uLnxYfCA+PSAyKiooLTQwKT8KKwliZ2VzCQlTT0sxCisJYnJhCQlTSU5TTQorCitTT0sxOgorCWNtcGlsCQkjMHg0MDA0QkM3RSwlZDAJCXwgLi4ufFh8IDwgMTUgUEk/CisJYmx0cwkJU0lOTUFJTgorCWJyYQkJUkVEVUNFWAorCitTSU5NQUlOOgorfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorfC0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVsZAkJVFdPQllQSSwlZnAxCXwgLi4uWCoyL1BJCisKK3wtLUhJREUgVEhFIE5FWFQgVEhSRUUgSU5TVFJVQ1RJT05TCisJbGVhCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKworfC0tRlAxIElTIE5PVyBSRUFEWQorCWZtb3ZlbAkJJWZwMSxOKCVhNikJCXwgLi4uQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCXwgLi4uQTEgSVMgVEhFIEFERFJFU1MgT0YgTipQSUJZMgorfAkJCQkuLi5XSElDSCBJUyBJTiBUV08gUElFQ0VTIFkxICYgWTIKKworCWZzdWJ4CQkoJWExKSssJWZwMAl8IC4uLlgtWTEKK3wtLUhJREUgVEhFIE5FWFQgT05FCisJZnN1YnMJCSglYTEpLCVmcDAJfCAuLi5GUDAgSVMgUiA9IChYLVkxKS1ZMgorCitTSU5DT05UOgorfC0tY29udGludWF0aW9uIGZyb20gUkVEVUNFWAorCit8LS1HRVQgTitBREpOIEFORCBTRUUgSUYgU0lOKFIpIE9SIENPUyhSKSBJUyBORUVERUQKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFkZGwJCUFESk4oJWE2KSwlZDAJfCAuLi5TRUUgSUYgRDAgSVMgT0REIE9SIEVWRU4KKwlyb3JsCQkjMSwlZDAJfCAuLi5EMCBXQVMgT0REIElGRiBEMCBJUyBORUdBVElWRQorCWNtcGlsCQkjMCwlZDAKKwlibHQJCUNPU1BPTFkKKworU0lOUE9MWToKK3wtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgorfC0tVEhFTiBXRSBSRVRVUk4JU0dOKlNJTihSKS4gU0dOKlNJTihSKSBJUyBDT01QVVRFRCBCWQorfC0tUicgKyBSJypTKihBMSArIFMoQTIgKyBTKEEzICsgUyhBNCArIC4uLiArIFNBNykpKSksIFdIRVJFCit8LS1SJyA9IFNHTipSLCBTPVIqUi4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCit8LS1SJyArIFInKlMqKCBbQTErVChBMytUKEE1K1RBNykpXSArIFtTKEEyK1QoQTQrVEE2KSldKQorfC0tV0hFUkUgVD1TKlMuCit8LS1OT1RFIFRIQVQgQTMgVEhST1VHSCBBNyBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KK3wtLVdISUxFIEExIEFORCBBMiBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVC4KKwlmbW92ZXgJCSVmcDAsWCglYTYpCXwgLi4uWCBJUyBSCisJZm11bHgJCSVmcDAsJWZwMAl8IC4uLkZQMCBJUyBTCit8LS0tSElERSBUSEUgTkVYVCBUV08gV0hJTEUgV0FJVElORyBGT1IgRlAwCisJZm1vdmVkCQlTSU5BNywlZnAzCisJZm1vdmVkCQlTSU5BNiwlZnAyCit8LS1GUDAgSVMgTk9XIFJFQURZCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCXwgLi4uRlAxIElTIFQKK3wtLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIEZQMQorCisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorfAkJCQkuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCisJZW9ybAkJJWQwLFgoJWE2KQl8IC4uLlggSVMgTk9XIFInPSBTR04qUgorCisJZm11bHgJCSVmcDEsJWZwMwl8IC4uLlRBNworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UQTYKKworCWZhZGRkCQlTSU5BNSwlZnAzIHwgLi4uQTUrVEE3CisJZmFkZGQJCVNJTkE0LCVmcDIgfCAuLi5BNCtUQTYKKworCWZtdWx4CQklZnAxLCVmcDMJfCAuLi5UKEE1K1RBNykKKwlmbXVseAkJJWZwMSwlZnAyCXwgLi4uVChBNCtUQTYpCisKKwlmYWRkZAkJU0lOQTMsJWZwMyB8IC4uLkEzK1QoQTUrVEE3KQorCWZhZGR4CQlTSU5BMiwlZnAyIHwgLi4uQTIrVChBNCtUQTYpCisKKwlmbXVseAkJJWZwMywlZnAxCXwgLi4uVChBMytUKEE1K1RBNykpCisKKwlmbXVseAkJJWZwMCwlZnAyCXwgLi4uUyhBMitUKEE0K1RBNikpCisJZmFkZHgJCVNJTkExLCVmcDEgfCAuLi5BMStUKEEzK1QoQTUrVEE3KSkKKwlmbXVseAkJWCglYTYpLCVmcDAJfCAuLi5SJypTCisKKwlmYWRkeAkJJWZwMiwlZnAxCXwgLi4uW0ExK1QoQTMrVChBNStUQTcpKV0rW1MoQTIrVChBNCtUQTYpKV0KK3wtLUZQMyBSRUxFQVNFRCwgUkVTVE9SRSBOT1cgQU5EIFRBS0UgU09NRSBBRFZBTlRBR0UgT0YgSElESU5HCit8LS1GUDIgUkVMRUFTRUQsIFJFU1RPUkUgTk9XIEFORCBUQUtFIEZVTEwgQURWQU5UQUdFIE9GIEhJRElORworCisKKwlmbXVseAkJJWZwMSwlZnAwCQl8IC4uLlNJTihSJyktUicKK3wtLUZQMSBSRUxFQVNFRC4KKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHgJCVgoJWE2KSwlZnAwCQl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9mcmNpbngKKworCitDT1NQT0xZOgorfC0tTEVUIEogQkUgVEhFIExFQVNUIFNJRy4gQklUIE9GIEQwLCBMRVQgU0dOIDo9ICgtMSkqKkouCit8LS1USEVOIFdFIFJFVFVSTglTR04qQ09TKFIpLiBTR04qQ09TKFIpIElTIENPTVBVVEVEIEJZCit8LS1TR04gKyBTJyooQjEgKyBTKEIyICsgUyhCMyArIFMoQjQgKyAuLi4gKyBTQjgpKSkpLCBXSEVSRQorfC0tUz1SKlIgQU5EIFMnPVNHTipTLiBUSElTIENBTiBCRSBSRVdSSVRURU4gQVMKK3wtLVNHTiArIFMnKihbQjErVChCMytUKEI1K1RCNykpXSArIFtTKEIyK1QoQjQrVChCNitUQjgpKSldKQorfC0tV0hFUkUgVD1TKlMuCit8LS1OT1RFIFRIQVQgQjQgVEhST1VHSCBCOCBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KK3wtLVdISUxFIEIyIEFORCBCMyBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVCwgQjEgSVMgLTEvMgorfC0tQU5EIElTIFRIRVJFRk9SRSBTVE9SRUQgQVMgU0lOR0xFIFBSRUNJU0lPTi4KKworCWZtdWx4CQklZnAwLCVmcDAJfCAuLi5GUDAgSVMgUworfC0tLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIEZQMAorCWZtb3ZlZAkJQ09TQjgsJWZwMgorCWZtb3ZlZAkJQ09TQjcsJWZwMworfC0tRlAwIElTIE5PVyBSRUFEWQorCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQl8IC4uLkZQMSBJUyBUCit8LS1ISURFIFRIRSBORVhUIFRXTyBXSElMRSBXQUlUSU5HIEZPUiBGUDEKKwlmbW92ZXgJCSVmcDAsWCglYTYpCXwgLi4uWCBJUyBTCisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorfAkJCS4uLkxFQVNUIFNJRy4gQklUIE9GIEQwIElOIFNJR04gUE9TSVRJT04KKworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UQjgKK3wtLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIFRIRSBYVQorCWVvcmwJCSVkMCxYKCVhNikJfCAuLi5YIElTIE5PVyBTJz0gU0dOKlMKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCisKKwlmbXVseAkJJWZwMSwlZnAzCXwgLi4uVEI3Cit8LS1ISURFIFRIRSBORVhUIFRXTyBXSElMRSBXQUlUSU5HIEZPUiBUSEUgWFUKKwlvcmlsCQkjMHgzRjgwMDAwMCwlZDAJfCAuLi5EMCBJUyBTR04gSU4gU0lOR0xFCisJbW92ZWwJCSVkMCxQT1NORUcxKCVhNikKKworCWZhZGRkCQlDT1NCNiwlZnAyIHwgLi4uQjYrVEI4CisJZmFkZGQJCUNPU0I1LCVmcDMgfCAuLi5CNStUQjcKKworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UKEI2K1RCOCkKKwlmbXVseAkJJWZwMSwlZnAzCXwgLi4uVChCNStUQjcpCisKKwlmYWRkZAkJQ09TQjQsJWZwMiB8IC4uLkI0K1QoQjYrVEI4KQorCWZhZGR4CQlDT1NCMywlZnAzIHwgLi4uQjMrVChCNStUQjcpCisKKwlmbXVseAkJJWZwMSwlZnAyCXwgLi4uVChCNCtUKEI2K1RCOCkpCisJZm11bHgJCSVmcDMsJWZwMQl8IC4uLlQoQjMrVChCNStUQjcpKQorCisJZmFkZHgJCUNPU0IyLCVmcDIgfCAuLi5CMitUKEI0K1QoQjYrVEI4KSkKKwlmYWRkcwkJQ09TQjEsJWZwMSB8IC4uLkIxK1QoQjMrVChCNStUQjcpKQorCisJZm11bHgJCSVmcDIsJWZwMAl8IC4uLlMoQjIrVChCNCtUKEI2K1RCOCkpKQorfC0tRlAzIFJFTEVBU0VELCBSRVNUT1JFIE5PVyBBTkQgVEFLRSBTT01FIEFEVkFOVEFHRSBPRiBISURJTkcKK3wtLUZQMiBSRUxFQVNFRC4KKworCisJZmFkZHgJCSVmcDEsJWZwMAorfC0tRlAxIFJFTEVBU0VECisKKwlmbXVseAkJWCglYTYpLCVmcDAKKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAwCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK1NJTkJPUlM6Cit8LS1JRiB8WHwgPiAxNVBJLCBXRSBVU0UgVEhFIEdFTkVSQUwgQVJHVU1FTlQgUkVEVUNUSU9OLgorfC0tSUYgfFh8IDwgMioqKC00MCksIFJFVFVSTiBYIE9SIDEuCisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndHMJCVJFRFVDRVgKKworCitTSU5TTToKKwltb3ZlbAkJQURKTiglYTYpLCVkMAorCWNtcGlsCQkjMCwlZDAKKwliZ3RzCQlDT1NUSU5ZCisKK1NJTlRJTlk6CisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikJfCAuLi5KVVNUIElOIENBU0UKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJWCglYTYpLCVmcDAJCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK0NPU1RJTlk6CisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAwCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZzdWJzCQkjMHgwMDgwMDAwMCwlZnAwCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK1JFRFVDRVg6Cit8LS1XSEVOIFJFRFVDRVggSVMgVVNFRCwgVEhFIENPREUgV0lMTCBJTkVWSVRBQkxZIEJFIFNMT1cuCit8LS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKK3wtLVRIRSBSRU1BSU5ERVIgSU5TVFJVQ1RJT04gV0hJQ0ggSVMgTk9XIElOIFNPRlRXQVJFLgorCisJZm1vdmVteAklZnAyLSVmcDUsLSglYTcpCXwgLi4uc2F2ZSBGUDIgdGhyb3VnaCBGUDUKKwltb3ZlbAkJJWQyLC0oJWE3KQorICAgICAgICBmbW92ZXMgICAgICAgICAjMHgwMDAwMDAwMCwlZnAxCit8LS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0Cit8LS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKK3wtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorfC0tc2FmZS4KKwljbXBpbAkjMHg3ZmZlZmZmZiwlZDAJCXxpcyBhcmd1bWVudCBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmVzCUxPT1AKKwltb3ZlbAkjMHg3ZmZlMDAwMCxGUF9TQ1IyKCVhNikJfHllcworfAkJCQkJO2NyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92ZWwJIzB4YzkwZmRhYTIsRlBfU0NSMis0KCVhNikKKwljbHJsCUZQX1NDUjIrOCglYTYpCisJZnRzdHgJJWZwMAkJCXx0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwltb3ZlbAkjMHg3ZmRjMDAwMCxGUF9TQ1IzKCVhNikJfGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MyoKK3wJCQkJCTtQSS8yIGF0IEZQX1NDUjMKKwltb3ZlbAkjMHg4NWEzMDhkMyxGUF9TQ1IzKzQoJWE2KQorCWNscmwgICBGUF9TQ1IzKzgoJWE2KQorCWZibHQJcmVkX25lZworCW9ydwkjMHg4MDAwLEZQX1NDUjIoJWE2KQl8cG9zaXRpdmUgYXJnCisJb3J3CSMweDgwMDAsRlBfU0NSMyglYTYpCityZWRfbmVnOgorCWZhZGR4ICBGUF9TQ1IyKCVhNiksJWZwMAkJfGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92ZXggICVmcDAsJWZwMQkJfHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZHggIEZQX1NDUjMoJWE2KSwlZnAwCQl8bG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1YnggICVmcDAsJWZwMQkJCXxkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkeCAgRlBfU0NSMyglYTYpLCVmcDEJCXxmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCit8LS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorfC0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCit8LS1JbnRlcm1lZGlhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKKworTE9PUDoKKwlmbW92ZXgJCSVmcDAsSU5BUkcoJWE2KQl8IC4uListMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3ZldwkJSU5BUkcoJWE2KSwlZDAKKyAgICAgICAgbW92ZWwgICAgICAgICAgJWQwLCVhMQkJfCAuLi5zYXZlIGEgY29weSBvZiBEMAorCWFuZGlsCQkjMHgwMDAwN0ZGRiwlZDAKKwlzdWJpbAkJIzB4MDAwMDNGRkYsJWQwCXwgLi4uRDAgSVMgSworCWNtcGlsCQkjMjgsJWQwCisJYmxlcwkJTEFTVExPT1AKK0NPTlRMT09QOgorCXN1YmlsCQkjMjcsJWQwCSB8IC4uLkQwIElTIEwgOj0gSy0yNworCW1vdmVsCQkjMCxFTkRGTEFHKCVhNikKKwlicmFzCQlXT1JLCitMQVNUTE9PUDoKKwljbHJsCQklZDAJCXwgLi4uRDAgSVMgTCA6PSAwCisJbW92ZWwJCSMxLEVOREZMQUcoJWE2KQorCitXT1JLOgorfC0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorfC0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCit8LS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKK3wtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdmVsCQkjMHgwMDAwM0ZGRSwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyL1BJCisJc3VibAkJJWQwLCVkMgkJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKiooLUwpKigyL1BJKQorCisJbW92ZWwJCSMweEEyRjk4MzZFLEZQX1NDUjErNCglYTYpCisJbW92ZWwJCSMweDRFNDQxNTJBLEZQX1NDUjErOCglYTYpCisJbW92ZXcJCSVkMixGUF9TQ1IxKCVhNikJfCAuLi5GUF9TQ1IxIGlzIDIqKigtTCkqKDIvUEkpCisKKwlmbW92ZXgJCSVmcDAsJWZwMgorCWZtdWx4CQlGUF9TQ1IxKCVhNiksJWZwMgorfC0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCit8LS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorfC0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKK3wtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKK3wtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCit8LS1ISURFIFNJWCBDWUNMRVMgT0YgSU5TVFJVQ1RJT04KKyAgICAgICAgbW92ZWwJCSVhMSwlZDIKKyAgICAgICAgc3dhcAkJJWQyCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMgorCW9yaWwJCSMweDVGMDAwMDAwLCVkMgl8IC4uLkQyIElTIFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdmVsCQklZDIsVFdPVE82MyglYTYpCisKKwltb3ZlbAkJJWQwLCVkMgorCWFkZGlsCQkjMHgwMDAwM0ZGRiwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKipMICogKFBJLzIpCisKK3wtLUZQMiBJUyBSRUFEWQorCWZhZGRzCQlUV09UTzYzKCVhNiksJWZwMgl8IC4uLlRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKworfC0tSElERSA0IENZQ0xFUyBPRiBJTlNUUlVDVElPTjsgY3JlYXRpbmcgMioqKEwpKlBpYnkyXzEgIGFuZCAgMioqKEwpKlBpYnkyXzIKKyAgICAgICAgbW92ZXcJCSVkMixGUF9TQ1IyKCVhNikKKwljbHJ3ICAgICAgICAgICBGUF9TQ1IyKzIoJWE2KQorCW1vdmVsCQkjMHhDOTBGREFBMixGUF9TQ1IyKzQoJWE2KQorCWNscmwJCUZQX1NDUjIrOCglYTYpCQl8IC4uLkZQX1NDUjIgaXMgIDIqKihMKSAqIFBpYnkyXzEKKworfC0tRlAyIElTIFJFQURZCisJZnN1YnMJCVRXT1RPNjMoJWE2KSwlZnAyCQl8IC4uLkZQMiBpcyBOCisKKwlhZGRpbAkJIzB4MDAwMDNGREQsJWQwCisgICAgICAgIG1vdmV3CQklZDAsRlBfU0NSMyglYTYpCisJY2xydyAgICAgICAgICAgRlBfU0NSMysyKCVhNikKKwltb3ZlbAkJIzB4ODVBMzA4RDMsRlBfU0NSMys0KCVhNikKKwljbHJsCQlGUF9TQ1IzKzgoJWE2KQkJfCAuLi5GUF9TQ1IzIGlzIDIqKihMKSAqIFBpYnkyXzIKKworCW1vdmVsCQlFTkRGTEFHKCVhNiksJWQwCisKK3wtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCit8LS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92ZXgJCSVmcDIsJWZwNAorCWZtdWx4CQlGUF9TQ1IyKCVhNiksJWZwNAkJfCAuLi5XID0gTipQMQorCWZtb3ZleAkJJWZwMiwlZnA1CisJZm11bHgJCUZQX1NDUjMoJWE2KSwlZnA1CQl8IC4uLncgPSBOKlAyCisJZm1vdmV4CQklZnA0LCVmcDMKK3wtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCit8LS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGR4CQklZnA1LCVmcDMJCQl8IC4uLkZQMyBpcyBQCisJZnN1YngJCSVmcDMsJWZwNAkJCXwgLi4uVy1QCisKKwlmc3VieAkJJWZwMywlZnAwCQkJfCAuLi5GUDAgaXMgQSA6PSBSIC0gUAorICAgICAgICBmYWRkeAkJJWZwNSwlZnA0CQkJfCAuLi5GUDQgaXMgcCA9IChXLVApK3cKKworCWZtb3ZleAkJJWZwMCwlZnAzCQkJfCAuLi5GUDMgQQorCWZzdWJ4CQklZnA0LCVmcDEJCQl8IC4uLkZQMSBpcyBhIDo9IHIgLSBwCisKK3wtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorfC0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZHgJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIGlzIFIgOj0gQSthCit8LS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcGlsCQkjMCwlZDAKKwliZ3QJCVJFU1RPUkUKKworfC0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWJ4CQklZnAwLCVmcDMJCQl8IC4uLkEtUgorCWZhZGR4CQklZnAzLCVmcDEJCQl8IC4uLkZQMSBpcyByIDo9IChBLVIpK2EKKwlicmEJCUxPT1AKKworUkVTVE9SRToKKyAgICAgICAgZm1vdmVsCQklZnAyLE4oJWE2KQorCW1vdmVsCQkoJWE3KSssJWQyCisJZm1vdmVteAkoJWE3KSssJWZwMi0lZnA1CisKKworCW1vdmVsCQlBREpOKCVhNiksJWQwCisJY21waWwJCSM0LCVkMAorCisJYmx0CQlTSU5DT05UCisJYnJhcwkJU0NDT05UCisKKwkuZ2xvYmFsCXNzaW5jb3NkCitzc2luY29zZDoKK3wtLVNJTiBBTkQgQ09TIE9GIFggRk9SIERFTk9STUFMSVpFRCBYCisKKwlmbW92ZXMJCSMweDNGODAwMDAwLCVmcDEKKwlic3IJCXN0b19jb3MJCXxzdG9yZSBjb3NpbmUgcmVzdWx0CisJYnJhCQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3NpbmNvcworc3NpbmNvczoKK3wtLVNFVCBBREpOIFRPIDQKKwltb3ZlbAkJIzQsQURKTiglYTYpCisKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAkJfCAuLi5DT01QQUNUSUZZIFgKKworCWNtcGlsCQkjMHgzRkQ3ODAwMCwlZDAJCXwgLi4ufFh8ID49IDIqKigtNDApPworCWJnZXMJCVNDT0sxCisJYnJhCQlTQ1NNCisKK1NDT0sxOgorCWNtcGlsCQkjMHg0MDA0QkM3RSwlZDAJCXwgLi4ufFh8IDwgMTUgUEk/CisJYmx0cwkJU0NNQUlOCisJYnJhCQlSRURVQ0VYCisKKworU0NNQUlOOgorfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorfC0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVsZAkJVFdPQllQSSwlZnAxCXwgLi4uWCoyL1BJCisKK3wtLUhJREUgVEhFIE5FWFQgVEhSRUUgSU5TVFJVQ1RJT05TCisJbGVhCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKworfC0tRlAxIElTIE5PVyBSRUFEWQorCWZtb3ZlbAkJJWZwMSxOKCVhNikJCXwgLi4uQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgT0YgTipQSUJZMiwgSU4gWTEsIFkyCisKKwlmc3VieAkJKCVhMSkrLCVmcDAJfCAuLi5YLVkxCisgICAgICAgIGZzdWJzCQkoJWExKSwlZnAwCXwgLi4uRlAwIElTIFIgPSAoWC1ZMSktWTIKKworU0NDT05UOgorfC0tY29udGludWF0aW9uIHBvaW50IGZyb20gUkVEVUNFWAorCit8LS1ISURFIFRIRSBORVhUIFRXTworCW1vdmVsCQlOKCVhNiksJWQwCisJcm9ybAkJIzEsJWQwCisKKwljbXBpbAkJIzAsJWQwCQl8IC4uLkQwIDwgMCBJRkYgTiBJUyBPREQKKwliZ2UJCU5FVkVOCisKK05PREQ6Cit8LS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBEMCwgQTAsIEZQMi4KKworCWZtb3ZleAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWx4CQklZnAwLCVmcDAJIHwgLi4uRlAwIElTIFMgPSBSKlIKKwlmbW92ZWQJCVNJTkE3LCVmcDEJfCAuLi5BNworCWZtb3ZlZAkJQ09TQjgsJWZwMgl8IC4uLkI4CisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TQTcKKwltb3ZlbAkJJWQyLC0oJWE3KQorCW1vdmVsCQklZDAsJWQyCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TQjgKKwlyb3JsCQkjMSwlZDIKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQyCisKKwlmYWRkZAkJU0lOQTYsJWZwMQl8IC4uLkE2K1NBNworCWVvcmwJCSVkMCwlZDIKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQyCisJZmFkZGQJCUNPU0I3LCVmcDIJfCAuLi5CNytTQjgKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhBNitTQTcpCisJZW9ybAkJJWQyLFJQUklNRSglYTYpCisJbW92ZWwJCSglYTcpKywlZDIKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjcrU0I4KQorCXJvcmwJCSMxLCVkMAorCWFuZGlsCQkjMHg4MDAwMDAwMCwlZDAKKworCWZhZGRkCQlTSU5BNSwlZnAxCXwgLi4uQTUrUyhBNitTQTcpCisJbW92ZWwJCSMweDNGODAwMDAwLFBPU05FRzEoJWE2KQorCWVvcmwJCSVkMCxQT1NORUcxKCVhNikKKwlmYWRkZAkJQ09TQjYsJWZwMgl8IC4uLkI2K1MoQjcrU0I4KQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEE1K1MoQTYrU0E3KSkKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjYrUyhCNytTQjgpKQorCWZtb3ZleAkJJWZwMCxTUFJJTUUoJWE2KQorCisJZmFkZGQJCVNJTkE0LCVmcDEJfCAuLi5BNCtTKEE1K1MoQTYrU0E3KSkKKwllb3JsCQklZDAsU1BSSU1FKCVhNikKKwlmYWRkZAkJQ09TQjUsJWZwMgl8IC4uLkI1K1MoQjYrUyhCNytTQjgpKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEE0Ky4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjUrLi4uKQorCisJZmFkZGQJCVNJTkEzLCVmcDEJfCAuLi5BMytTKEE0Ky4uLikKKwlmYWRkZAkJQ09TQjQsJWZwMgl8IC4uLkI0K1MoQjUrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEEzKy4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjQrLi4uKQorCisJZmFkZHgJCVNJTkEyLCVmcDEJfCAuLi5BMitTKEEzKy4uLikKKwlmYWRkeAkJQ09TQjMsJWZwMgl8IC4uLkIzK1MoQjQrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEEyKy4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjMrLi4uKQorCisJZmFkZHgJCVNJTkExLCVmcDEJfCAuLi5BMStTKEEyKy4uLikKKwlmYWRkeAkJQ09TQjIsJWZwMgl8IC4uLkIyK1MoQjMrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEExKy4uLikKKwlmbXVseAkJJWZwMiwlZnAwCSB8IC4uLlMoQjIrLi4uKQorCisKKworCWZtdWx4CQlSUFJJTUUoJWE2KSwlZnAxCXwgLi4uUidTKEExKy4uLikKKwlmYWRkcwkJQ09TQjEsJWZwMAl8IC4uLkIxK1MoQjIuLi4pCisJZm11bHgJCVNQUklNRSglYTYpLCVmcDAJfCAuLi5TJyhCMStTKEIyKy4uLikpCisKKwltb3ZlbAkJJWQxLC0oJXNwKQl8cmVzdG9yZSB1c2VycyBtb2RlICYgcHJlY2lzaW9uCisJYW5kaWwJCSMweGZmLCVkMQkJfG1hc2sgb2ZmIGFsbCBleGNlcHRpb25zCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkeAkJUlBSSU1FKCVhNiksJWZwMQl8IC4uLkNPUyhYKQorCWJzcgkJc3RvX2NvcwkJfHN0b3JlIGNvc2luZSByZXN1bHQKKwlmbW92ZWwJCSglc3ApKywlRlBDUgl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAwCXwgLi4uU0lOKFgpCisKKwlicmEJCXRfZnJjaW54CisKKworTkVWRU46Cit8LS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBGUDIuCisKKwlmbW92ZXgJCSVmcDAsUlBSSU1FKCVhNikKKwlmbXVseAkJJWZwMCwlZnAwCSB8IC4uLkZQMCBJUyBTID0gUipSCisJZm1vdmVkCQlDT1NCOCwlZnAxCQkJfCAuLi5COAorCWZtb3ZlZAkJU0lOQTcsJWZwMgkJCXwgLi4uQTcKKwlmbXVseAkJJWZwMCwlZnAxCSB8IC4uLlNCOAorCWZtb3ZleAkJJWZwMCxTUFJJTUUoJWE2KQorCWZtdWx4CQklZnAwLCVmcDIJIHwgLi4uU0E3CisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorCWZhZGRkCQlDT1NCNywlZnAxCXwgLi4uQjcrU0I4CisJZmFkZGQJCVNJTkE2LCVmcDIJfCAuLi5BNitTQTcKKwllb3JsCQklZDAsUlBSSU1FKCVhNikKKwllb3JsCQklZDAsU1BSSU1FKCVhNikKKwlmbXVseAkJJWZwMCwlZnAxCSB8IC4uLlMoQjcrU0I4KQorCW9yaWwJCSMweDNGODAwMDAwLCVkMAorCW1vdmVsCQklZDAsUE9TTkVHMSglYTYpCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE2K1NBNykKKworCWZhZGRkCQlDT1NCNiwlZnAxCXwgLi4uQjYrUyhCNytTQjgpCisJZmFkZGQJCVNJTkE1LCVmcDIJfCAuLi5BNStTKEE2K1NBNykKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNitTKEI3K1NCOCkpCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE1K1MoQTYrU0E3KSkKKworCWZhZGRkCQlDT1NCNSwlZnAxCXwgLi4uQjUrUyhCNitTKEI3K1NCOCkpCisJZmFkZGQJCVNJTkE0LCVmcDIJfCAuLi5BNCtTKEE1K1MoQTYrU0E3KSkKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNSsuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE0Ky4uLikKKworCWZhZGRkCQlDT1NCNCwlZnAxCXwgLi4uQjQrUyhCNSsuLi4pCisJZmFkZGQJCVNJTkEzLCVmcDIJfCAuLi5BMytTKEE0Ky4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNCsuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEEzKy4uLikKKworCWZhZGR4CQlDT1NCMywlZnAxCXwgLi4uQjMrUyhCNCsuLi4pCisJZmFkZHgJCVNJTkEyLCVmcDIJfCAuLi5BMitTKEEzKy4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCMysuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEEyKy4uLikKKworCWZhZGR4CQlDT1NCMiwlZnAxCXwgLi4uQjIrUyhCMysuLi4pCisJZmFkZHgJCVNJTkExLCVmcDIJfCAuLi5BMStTKEEyKy4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCMisuLi4pCisJZm11bHgJCSVmcDIsJWZwMAkgfCAuLi5zKGExKy4uLikKKworCisKKwlmYWRkcwkJQ09TQjEsJWZwMQl8IC4uLkIxK1MoQjIuLi4pCisJZm11bHgJCVJQUklNRSglYTYpLCVmcDAJfCAuLi5SJ1MoQTErLi4uKQorCWZtdWx4CQlTUFJJTUUoJWE2KSwlZnAxCXwgLi4uUycoQjErUyhCMisuLi4pKQorCisJbW92ZWwJCSVkMSwtKCVzcCkJfHNhdmUgdXNlcnMgbW9kZSAmIHByZWNpc2lvbgorCWFuZGlsCQkjMHhmZiwlZDEJCXxtYXNrIG9mZiBhbGwgZXhjZXB0aW9ucworCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAxCXwgLi4uQ09TKFgpCisJYnNyCQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3ZlbAkJKCVzcCkrLCVGUENSCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJUlBSSU1FKCVhNiksJWZwMAl8IC4uLlNJTihYKQorCisJYnJhCQl0X2ZyY2lueAorCitTQ0JPUlM6CisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndAkJUkVEVUNFWAorCisKK1NDU006CisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikKKwlmbW92ZXMJCSMweDNGODAwMDAwLCVmcDEKKworCW1vdmVsCQklZDEsLSglc3ApCXxzYXZlIHVzZXJzIG1vZGUgJiBwcmVjaXNpb24KKwlhbmRpbAkJIzB4ZmYsJWQxCQl8bWFzayBvZmYgYWxsIGV4Y2VwdGlvbnMKKwlmbW92ZWwJCSVkMSwlRlBDUgorCWZzdWJzCQkjMHgwMDgwMDAwMCwlZnAxCisJYnNyCQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3ZlbAkJKCVzcCkrLCVGUENSCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3NpbmguUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NzaW5oLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiMzMwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NzaW5oLlMKQEAgLTAsMCArMSwxMzUgQEAKK3wKK3wJc3Npbmguc2EgMy4xIDEyLzEwLzkwCit8Cit8ICAgICAgIFRoZSBlbnRyeSBwb2ludCBzU2luaCBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mCit8ICAgICAgIGFuIGlucHV0IGFyZ3VtZW50OyBzU2luaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfCAgICAgICBpbnB1dC4KK3wKK3wgICAgICAgSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfCAgICAgICBPdXRwdXQ6IFRoZSB2YWx1ZSBzaW5oKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wgICAgICAgQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8ICAgICAgICAgICAgICAgNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlCit8ICAgICAgICAgICAgICAgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfCAgICAgICAgICAgICAgIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wgICAgICAgU3BlZWQ6IFRoZSBwcm9ncmFtIHNTSU5IIHRha2VzIGFwcHJveGltYXRlbHkgMjgwIGN5Y2xlcy4KK3wKK3wgICAgICAgQWxnb3JpdGhtOgorfAorfCAgICAgICBTSU5ICit8ICAgICAgIDEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCit8Cit8ICAgICAgIDIuICh8WHwgPD0gMTYzODAgbG9nMikgU2luaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYWUKK3wgICAgICAgICAgICAgICB5ID0gfFh8LCBzZ24gPSBzaWduKFgpLCBhbmQgeiA9IGV4cG0xKFkpLAorfCAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzZ24qKDEvMikqKCB6ICsgei8oMSt6KSApLgorfCAgICAgICAgICBFeGl0LgorfAorfCAgICAgICAzLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgorfAorfCAgICAgICA0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQorfCAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzaWduKFgpICogZXhwKHxYfCkvMi4KK3wgICAgICAgICAgSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4KK3wgICAgICAgICAgVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoKK3wgICAgICAgICAgICAgWSAgICAgICA6PSB8WHwKK3wgICAgICAgICAgICAgc2duICAgICA6PSBzaWduKFgpCit8ICAgICAgICAgICAgIHNnbkZhY3QgOj0gc2duICogMioqKDE2MzgwKQorfCAgICAgICAgICAgICBZJyAgICAgIDo9IFkgLSAxNjM4MSBsb2cyCit8ICAgICAgICAgICAgIHNpbmgoWCkgOj0gc2duRmFjdCAqIGV4cChZJykuCit8ICAgICAgICAgIEV4aXQuCit8Cit8ICAgICAgIDUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgorfCAgICAgICAgICBzaWduKFgpKkh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAorfCAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyIGluCit8ICAgICAgICAgIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNTSU5ICWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworVDE6CS5sb25nIDB4NDBDNjJEMzgsMHhEM0Q2NDYzNCB8IC4uLiAxNjM4MSBMT0cyIExFQUQKK1QyOgkubG9uZyAweDNENkY5MEFFLDB4QjFFNzVDQzcgfCAuLi4gMTYzODEgTE9HMiBUUkFJTAorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X292ZmwKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZglzZXRveAorCXx4cmVmCXNldG94bTEKKworCS5nbG9iYWwJc3NpbmhkCitzc2luaGQ6Cit8LS1TSU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3NpbmgKK3NzaW5oOgorCWZtb3ZleAkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJKCVhMCksJWQwCisJbW92ZXcJNCglYTApLCVkMAorCW1vdmVsCSVkMCwlYTEJCXwgc2F2ZSBhIGNvcHkgb2Ygb3JpZ2luYWwgKGNvbXBhY3RlZCkgb3BlcmFuZAorCWFuZGwJIzB4N0ZGRkZGRkYsJWQwCisJY21wbAkjMHg0MDBDQjE2NywlZDAKKwliZ3RzCVNJTkhCSUcKKworfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorfC0tWSA9IHxYfCwgWiA9IEVYUE0xKFkpLCBTSU5IKFgpID0gU0lHTihYKSooMS8yKSooIFogKyBaLygxK1opICkKKworCWZhYnN4CSVmcDAJCXwgLi4uWSA9IHxYfAorCisJbW92ZW1sCSVhMS8lZDEsLSglc3ApCisJZm1vdmVteCAlZnAwLSVmcDAsKCVhMCkKKwljbHJsCSVkMQorCWJzcglzZXRveG0xCQl8IC4uLkZQMCBJUyBaID0gRVhQTTEoWSkKKwlmbW92ZWwJIzAsJWZwY3IKKwltb3ZlbWwJKCVzcCkrLCVhMS8lZDEKKworCWZtb3ZleAklZnAwLCVmcDEKKwlmYWRkcwkjMHgzRjgwMDAwMCwlZnAxCXwgLi4uMStaCisJZm1vdmV4CSVmcDAsLSglc3ApCisJZmRpdngJJWZwMSwlZnAwCQl8IC4uLlovKDErWikKKwltb3ZlbAklYTEsJWQwCisJYW5kbAkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJIzB4M0YwMDAwMDAsJWQwCisJZmFkZHgJKCVzcCkrLCVmcDAKKwltb3ZlbAklZDAsLSglc3ApCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm11bHMJKCVzcCkrLCVmcDAJfGxhc3QgZnAgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbnMgc2V0CisKKwlicmEJdF9mcmNpbngKKworU0lOSEJJRzoKKwljbXBsCSMweDQwMENCMkIzLCVkMAorCWJndAl0X292ZmwKKwlmYWJzeAklZnAwCisJZnN1YmQJVDEoJXBjKSwlZnAwCXwgLi4uKHxYfC0xNjM4MUxPRzJfTEVBRCkKKwltb3ZlbAkjMCwtKCVzcCkKKwltb3ZlbAkjMHg4MDAwMDAwMCwtKCVzcCkKKwltb3ZlbAklYTEsJWQwCisJYW5kbAkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJIzB4N0ZGQjAwMDAsJWQwCisJbW92ZWwJJWQwLC0oJXNwKQl8IC4uLkVYVEVOREVEIEZNVAorCWZzdWJkCVQyKCVwYyksJWZwMAl8IC4uLnxYfCAtIDE2MzgxIExPRzIsIEFDQ1VSQVRFCisKKwltb3ZlbAklZDEsLSglc3ApCisJY2xybAklZDEKKwlmbW92ZW14ICVmcDAtJWZwMCwoJWEwKQorCWJzcglzZXRveAorCWZtb3ZlbAkoJXNwKSssJWZwY3IKKworCWZtdWx4CSglc3ApKywlZnAwCXxwb3NzaWJsZSBleGNlcHRpb24KKwlicmEJdF9mcmNpbngKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWMyYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc3Rhbi5TCkBAIC0wLDAgKzEsNDU1IEBACit8Cit8CXN0YW4uc2EgMy4zIDcvMjkvOTEKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHN0YW4gY29tcHV0ZXMgdGhlIHRhbmdlbnQgb2YKK3wJYW4gaW5wdXQgYXJndW1lbnQ7Cit8CXN0YW5kIGRvZXMgdGhlIHNhbWUgZXhjZXB0IGZvciBkZW5vcm1hbGl6ZWQgaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgdGFuKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHAgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc1RBTiB0YWtlcyBhcHByb3hpbWF0ZWx5IDE3MCBjeWNsZXMgZm9yCit8CQlpbnB1dCBhcmd1bWVudCBYIHN1Y2ggdGhhdCB8WHwgPCAxNVBpLCB3aGljaCBpcyB0aGUgdXN1YWwKK3wJCXNpdHVhdGlvbi4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAkxLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNi4KK3wKK3wJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQKK3wJCWsgPSBOIG1vZCAyLCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCBvciAxLgorfAorfAkzLiBJZiBrIGlzIG9kZCwgZ28gdG8gNS4KK3wKK3wJNC4gKGsgaXMgZXZlbikgVGFuKFgpID0gdGFuKHIpIGFuZCB0YW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGEKK3wJCXJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQorfAkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAorfAkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCAgcyA9IHIqci4KK3wJCUV4aXQuCit8Cit8CTQuIChrIGlzIG9kZCkgVGFuKFgpID0gLWNvdChyKS4gU2luY2UgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSBhCit8CQlyYXRpb25hbCBmdW5jdGlvbiBVL1Ygd2hlcmUKK3wJCVUgPSByICsgcipzKihQMSArIHMqKFAyICsgcypQMykpLCBhbmQKK3wJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgcyA9IHIqciwKK3wJCS1Db3QocikgPSAtVi9VLiBFeGl0LgorfAorfAk2LiBJZiB8WHwgPiAxLCBnbyB0byA4LgorfAorfAk3LiAofFh8PDIqKigtNDApKSBUYW4oWCkgPSBYLiBFeGl0LgorfAorfAk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLCBnbyBiYWNrIHRvIDIuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTVEFOCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworQk9VTkRTMToJLmxvbmcgMHgzRkQ3ODAwMCwweDQwMDRCQzdFCitUV09CWVBJOgkubG9uZyAweDNGRTQ1RjMwLDB4NkRDOUM4ODMKKworVEFOUTQ6CS5sb25nIDB4M0VBMEI3NTksMHhGNTBGODY4OAorVEFOUDM6CS5sb25nIDB4QkVGMkJBQTUsMHhBODkyNEYwNAorCitUQU5RMzoJLmxvbmcgMHhCRjM0NkY1OSwweEIzOUJBNjVGLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitUQU5QMjoJLmxvbmcgMHgzRkY2MDAwMCwweEUwNzNEM0ZDLDB4MTk5QzRBMDAsMHgwMDAwMDAwMAorCitUQU5RMjoJLmxvbmcgMHgzRkY5MDAwMCwweEQyM0NENjg0LDB4MTVEOTVGQTEsMHgwMDAwMDAwMAorCitUQU5QMToJLmxvbmcgMHhCRkZDMDAwMCwweDg4OTVBNkM1LDB4RkI0MjNCQ0EsMHgwMDAwMDAwMAorCitUQU5RMToJLmxvbmcgMHhCRkZEMDAwMCwweEVFRjU3RTBELDB4QTg0QkM4Q0UsMHgwMDAwMDAwMAorCitJTlZUV09QSTogLmxvbmcgMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEsMHgwMDAwMDAwMAorCitUV09QSTE6CS5sb25nIDB4NDAwMTAwMDAsMHhDOTBGREFBMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK1RXT1BJMjoJLmxvbmcgMHgzRkRGMDAwMCwweDg1QTMwOEQ0LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCit8LS1OKlBJLzIsIC0zMiA8PSBOIDw9IDMyLCBJTiBBIExFQURJTkcgVEVSTSBJTiBFWFQuIEFORCBUUkFJTElORworfC0tVEVSTSBJTiBTR0wuIE5PVEUgVEhBVCBQSSBJUyA2NC1CSVQgTE9ORywgVEhVUyBOKlBJLzIgSVMgQVQKK3wtLU1PU1QgNjkgQklUUyBMT05HLgorCS5nbG9iYWwJUElUQkwKK1BJVEJMOgorICAubG9uZyAgMHhDMDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTgwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHhBMEQwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMUU4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHgyMTQ4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMTIwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHgyMUZDMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMTEwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHhBMTU4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMUUwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHgyMEIwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTg4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHgyMUM0MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgyMDAwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHgyMTM4MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMTMwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHg5RkMwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTAwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMTY4MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMEEwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMDkwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMTYwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTA4MDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjgwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMEIwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDgwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMDIwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMEUwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjAwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDAwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMDYwMDAwMAorICAubG9uZyAgMHhDMDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjgwMDAwMAorICAubG9uZyAgMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjAwMDAwMAorICAubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorICAubG9uZyAgMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjAwMDAwMAorICAubG9uZyAgMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjgwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMDYwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDAwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjAwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMEUwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMDIwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDgwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMEIwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjgwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTA4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMTYwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMDkwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMEEwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMTY4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTAwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHgxRkMwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMTMwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHhBMTM4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHhBMDAwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHhBMUM0MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTg4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHhBMEIwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMUUwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHgyMTU4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMTEwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHhBMUZDMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMTIwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHhBMTQ4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMUU4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHgyMEQwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTgwMDAwMAorCisJLnNldAlJTkFSRyxGUF9TQ1I0CisKKwkuc2V0CVRXT1RPNjMsTF9TQ1IxCisJLnNldAlFTkRGTEFHLExfU0NSMgorCS5zZXQJTixMX1NDUjMKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzdGFuZAorc3RhbmQ6Cit8LS1UQU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorCisJYnJhCQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3Rhbgorc3RhbjoKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlhbmRpbAkJIzB4N0ZGRkZGRkYsJWQwCisKKwljbXBpbAkJIzB4M0ZENzgwMDAsJWQwCQl8IC4uLnxYfCA+PSAyKiooLTQwKT8KKwliZ2VzCQlUQU5PSzEKKwlicmEJCVRBTlNNCitUQU5PSzE6CisJY21waWwJCSMweDQwMDRCQzdFLCVkMAkJfCAuLi58WHwgPCAxNSBQST8KKwlibHRzCQlUQU5NQUlOCisJYnJhCQlSRURVQ0VYCisKKworVEFOTUFJTjoKK3wtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KK3wtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bGQJCVRXT0JZUEksJWZwMQl8IC4uLlgqMi9QSQorCit8LS1ISURFIFRIRSBORVhUIFRXTyBJTlNUUlVDVElPTlMKKwlsZWFsCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKK3wtLUZQMSBJUyBOT1cgUkVBRFkKKwlmbW92ZWwJCSVmcDEsJWQwCQl8IC4uLkNPTlZFUlQgVE8gSU5URUdFUgorCisJYXNsbAkJIzQsJWQwCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uQUREUkVTUyBOKlBJQlkyIElOIFkxLCBZMgorCisJZnN1YngJCSglYTEpKywlZnAwCXwgLi4uWC1ZMQorfC0tSElERSBUSEUgTkVYVCBPTkUKKworCWZzdWJzCQkoJWExKSwlZnAwCXwgLi4uRlAwIElTIFIgPSAoWC1ZMSktWTIKKworCXJvcmwJCSM1LCVkMAorCWFuZGlsCQkjMHg4MDAwMDAwMCwlZDAJfCAuLi5EMCBXQVMgT0REIElGRiBEMCA8IDAKKworVEFOQ09OVDoKKworCWNtcGlsCQkjMCwlZDAKKwlibHQJCU5PREQKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5TID0gUipSCisKKwlmbW92ZWQJCVRBTlE0LCVmcDMKKwlmbW92ZWQJCVRBTlAzLCVmcDIKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uU1E0CisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TUDMKKworCWZhZGRkCQlUQU5RMywlZnAzCXwgLi4uUTMrU1E0CisJZmFkZHgJCVRBTlAyLCVmcDIJfCAuLi5QMitTUDMKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uUyhRMytTUTQpCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TKFAyK1NQMykKKworCWZhZGR4CQlUQU5RMiwlZnAzCXwgLi4uUTIrUyhRMytTUTQpCisJZmFkZHgJCVRBTlAxLCVmcDIJfCAuLi5QMStTKFAyK1NQMykKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uUyhRMitTKFEzK1NRNCkpCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TKFAxK1MoUDIrU1AzKSkKKworCWZhZGR4CQlUQU5RMSwlZnAzCXwgLi4uUTErUyhRMitTKFEzK1NRNCkpCisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5SUyhQMStTKFAyK1NQMykpCisKKwlmbXVseAkJJWZwMywlZnAxCQl8IC4uLlMoUTErUyhRMitTKFEzK1NRNCkpKQorCisKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLlIrUlMoUDErUyhQMitTUDMpKQorCisKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMQl8IC4uLjErUyhRMSsuLi4pCisKKwlmbW92ZWwJCSVkMSwlZnBjcgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQklZnAxLCVmcDAJCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisKKwlicmEJCXRfZnJjaW54CisKK05PREQ6CisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMCwlZnAwCQl8IC4uLlMgPSBSKlIKKworCWZtb3ZlZAkJVEFOUTQsJWZwMworCWZtb3ZlZAkJVEFOUDMsJWZwMgorCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TUTQKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlNQMworCisJZmFkZGQJCVRBTlEzLCVmcDMJfCAuLi5RMytTUTQKKwlmYWRkeAkJVEFOUDIsJWZwMgl8IC4uLlAyK1NQMworCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TKFEzK1NRNCkKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlMoUDIrU1AzKQorCisJZmFkZHgJCVRBTlEyLCVmcDMJfCAuLi5RMitTKFEzK1NRNCkKKwlmYWRkeAkJVEFOUDEsJWZwMgl8IC4uLlAxK1MoUDIrU1AzKQorCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TKFEyK1MoUTMrU1E0KSkKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlMoUDErUyhQMitTUDMpKQorCisJZmFkZHgJCVRBTlExLCVmcDMJfCAuLi5RMStTKFEyK1MoUTMrU1E0KSkKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLlJTKFAxK1MoUDIrU1AzKSkKKworCWZtdWx4CQklZnAzLCVmcDAJCXwgLi4uUyhRMStTKFEyK1MoUTMrU1E0KSkpCisKKworCWZhZGR4CQklZnAyLCVmcDEJCXwgLi4uUitSUyhQMStTKFAyK1NQMykpCisJZmFkZHMJCSMweDNGODAwMDAwLCVmcDAJfCAuLi4xK1MoUTErLi4uKQorCisKKwlmbW92ZXgJCSVmcDEsLSglc3ApCisJZW9yaWwJCSMweDgwMDAwMDAwLCglc3ApCisKKwlmbW92ZWwJCSVkMSwlZnBjcgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQkoJXNwKSssJWZwMAl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCisJYnJhCQl0X2ZyY2lueAorCitUQU5CT1JTOgorfC0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KK3wtLUlGIHxYfCA8IDIqKigtNDApLCBSRVRVUk4gWCBPUiAxLgorCWNtcGlsCQkjMHgzRkZGODAwMCwlZDAKKwliZ3RzCQlSRURVQ0VYCisKK1RBTlNNOgorCisJZm1vdmV4CQklZnAwLC0oJXNwKQorCWZtb3ZlbAkJJWQxLCVmcGNyCQkgfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJKCVzcCkrLCVmcDAJfGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9mcmNpbngKKworCitSRURVQ0VYOgorfC0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgorfC0tVEhJUyBSRURVQ1RJT04gTUVUSE9ELCBIT1dFVkVSLCBJUyBNVUNIIEZBU1RFUiBUSEFOIFVTSU5HCit8LS1USEUgUkVNQUlOREVSIElOU1RSVUNUSU9OIFdISUNIIElTIE5PVyBJTiBTT0ZUV0FSRS4KKworCWZtb3ZlbXgJJWZwMi0lZnA1LC0oJWE3KQl8IC4uLnNhdmUgRlAyIHRocm91Z2ggRlA1CisJbW92ZWwJCSVkMiwtKCVhNykKKyAgICAgICAgZm1vdmVzICAgICAgICAgIzB4MDAwMDAwMDAsJWZwMQorCit8LS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0Cit8LS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKK3wtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorfC0tc2FmZS4KKwljbXBpbAkjMHg3ZmZlZmZmZiwlZDAJCXxpcyBhcmd1bWVudCBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmVzCUxPT1AKKwltb3ZlbAkjMHg3ZmZlMDAwMCxGUF9TQ1IyKCVhNikJfHllcworfAkJCQkJO2NyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92ZWwJIzB4YzkwZmRhYTIsRlBfU0NSMis0KCVhNikKKwljbHJsCUZQX1NDUjIrOCglYTYpCisJZnRzdHgJJWZwMAkJCXx0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwltb3ZlbAkjMHg3ZmRjMDAwMCxGUF9TQ1IzKCVhNikJfGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MyoKK3wJCQkJCTtQSS8yIGF0IEZQX1NDUjMKKwltb3ZlbAkjMHg4NWEzMDhkMyxGUF9TQ1IzKzQoJWE2KQorCWNscmwgICBGUF9TQ1IzKzgoJWE2KQorCWZibHQJcmVkX25lZworCW9ydwkjMHg4MDAwLEZQX1NDUjIoJWE2KQl8cG9zaXRpdmUgYXJnCisJb3J3CSMweDgwMDAsRlBfU0NSMyglYTYpCityZWRfbmVnOgorCWZhZGR4ICBGUF9TQ1IyKCVhNiksJWZwMAkJfGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92ZXggICVmcDAsJWZwMQkJfHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZHggIEZQX1NDUjMoJWE2KSwlZnAwCQl8bG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1YnggICVmcDAsJWZwMQkJCXxkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkeCAgRlBfU0NSMyglYTYpLCVmcDEJCXxmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCit8LS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorfC0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCit8LS1JbnRlcm1lZGlhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKKworTE9PUDoKKwlmbW92ZXgJCSVmcDAsSU5BUkcoJWE2KQl8IC4uListMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3ZldwkJSU5BUkcoJWE2KSwlZDAKKyAgICAgICAgbW92ZWwgICAgICAgICAgJWQwLCVhMQkJfCAuLi5zYXZlIGEgY29weSBvZiBEMAorCWFuZGlsCQkjMHgwMDAwN0ZGRiwlZDAKKwlzdWJpbAkJIzB4MDAwMDNGRkYsJWQwCXwgLi4uRDAgSVMgSworCWNtcGlsCQkjMjgsJWQwCisJYmxlcwkJTEFTVExPT1AKK0NPTlRMT09QOgorCXN1YmlsCQkjMjcsJWQwCSB8IC4uLkQwIElTIEwgOj0gSy0yNworCW1vdmVsCQkjMCxFTkRGTEFHKCVhNikKKwlicmFzCQlXT1JLCitMQVNUTE9PUDoKKwljbHJsCQklZDAJCXwgLi4uRDAgSVMgTCA6PSAwCisJbW92ZWwJCSMxLEVOREZMQUcoJWE2KQorCitXT1JLOgorfC0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorfC0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCit8LS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKK3wtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdmVsCQkjMHgwMDAwM0ZGRSwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyL1BJCisJc3VibAkJJWQwLCVkMgkJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKiooLUwpKigyL1BJKQorCisJbW92ZWwJCSMweEEyRjk4MzZFLEZQX1NDUjErNCglYTYpCisJbW92ZWwJCSMweDRFNDQxNTJBLEZQX1NDUjErOCglYTYpCisJbW92ZXcJCSVkMixGUF9TQ1IxKCVhNikJfCAuLi5GUF9TQ1IxIGlzIDIqKigtTCkqKDIvUEkpCisKKwlmbW92ZXgJCSVmcDAsJWZwMgorCWZtdWx4CQlGUF9TQ1IxKCVhNiksJWZwMgorfC0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCit8LS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorfC0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKK3wtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKK3wtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCit8LS1ISURFIFNJWCBDWUNMRVMgT0YgSU5TVFJVQ1RJT04KKyAgICAgICAgbW92ZWwJCSVhMSwlZDIKKyAgICAgICAgc3dhcAkJJWQyCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMgorCW9yaWwJCSMweDVGMDAwMDAwLCVkMgl8IC4uLkQyIElTIFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdmVsCQklZDIsVFdPVE82MyglYTYpCisKKwltb3ZlbAkJJWQwLCVkMgorCWFkZGlsCQkjMHgwMDAwM0ZGRiwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKipMICogKFBJLzIpCisKK3wtLUZQMiBJUyBSRUFEWQorCWZhZGRzCQlUV09UTzYzKCVhNiksJWZwMgl8IC4uLlRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKworfC0tSElERSA0IENZQ0xFUyBPRiBJTlNUUlVDVElPTjsgY3JlYXRpbmcgMioqKEwpKlBpYnkyXzEgIGFuZCAgMioqKEwpKlBpYnkyXzIKKyAgICAgICAgbW92ZXcJCSVkMixGUF9TQ1IyKCVhNikKKwljbHJ3ICAgICAgICAgICBGUF9TQ1IyKzIoJWE2KQorCW1vdmVsCQkjMHhDOTBGREFBMixGUF9TQ1IyKzQoJWE2KQorCWNscmwJCUZQX1NDUjIrOCglYTYpCQl8IC4uLkZQX1NDUjIgaXMgIDIqKihMKSAqIFBpYnkyXzEKKworfC0tRlAyIElTIFJFQURZCisJZnN1YnMJCVRXT1RPNjMoJWE2KSwlZnAyCQl8IC4uLkZQMiBpcyBOCisKKwlhZGRpbAkJIzB4MDAwMDNGREQsJWQwCisgICAgICAgIG1vdmV3CQklZDAsRlBfU0NSMyglYTYpCisJY2xydyAgICAgICAgICAgRlBfU0NSMysyKCVhNikKKwltb3ZlbAkJIzB4ODVBMzA4RDMsRlBfU0NSMys0KCVhNikKKwljbHJsCQlGUF9TQ1IzKzgoJWE2KQkJfCAuLi5GUF9TQ1IzIGlzIDIqKihMKSAqIFBpYnkyXzIKKworCW1vdmVsCQlFTkRGTEFHKCVhNiksJWQwCisKK3wtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCit8LS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92ZXgJCSVmcDIsJWZwNAorCWZtdWx4CQlGUF9TQ1IyKCVhNiksJWZwNAkJfCAuLi5XID0gTipQMQorCWZtb3ZleAkJJWZwMiwlZnA1CisJZm11bHgJCUZQX1NDUjMoJWE2KSwlZnA1CQl8IC4uLncgPSBOKlAyCisJZm1vdmV4CQklZnA0LCVmcDMKK3wtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCit8LS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGR4CQklZnA1LCVmcDMJCQl8IC4uLkZQMyBpcyBQCisJZnN1YngJCSVmcDMsJWZwNAkJCXwgLi4uVy1QCisKKwlmc3VieAkJJWZwMywlZnAwCQkJfCAuLi5GUDAgaXMgQSA6PSBSIC0gUAorICAgICAgICBmYWRkeAkJJWZwNSwlZnA0CQkJfCAuLi5GUDQgaXMgcCA9IChXLVApK3cKKworCWZtb3ZleAkJJWZwMCwlZnAzCQkJfCAuLi5GUDMgQQorCWZzdWJ4CQklZnA0LCVmcDEJCQl8IC4uLkZQMSBpcyBhIDo9IHIgLSBwCisKK3wtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorfC0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZHgJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIGlzIFIgOj0gQSthCit8LS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcGlsCQkjMCwlZDAKKwliZ3QJCVJFU1RPUkUKKworfC0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWJ4CQklZnAwLCVmcDMJCQl8IC4uLkEtUgorCWZhZGR4CQklZnAzLCVmcDEJCQl8IC4uLkZQMSBpcyByIDo9IChBLVIpK2EKKwlicmEJCUxPT1AKKworUkVTVE9SRToKKyAgICAgICAgZm1vdmVsCQklZnAyLE4oJWE2KQorCW1vdmVsCQkoJWE3KSssJWQyCisJZm1vdmVteAkoJWE3KSssJWZwMi0lZnA1CisKKworCW1vdmVsCQlOKCVhNiksJWQwCisgICAgICAgIHJvcmwJCSMxLCVkMAorCisKKwlicmEJCVRBTkNPTlQKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW5oLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdGFuaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjAwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zdGFuaC5TCkBAIC0wLDAgKzEsMTg1IEBACit8Cit8CXN0YW5oLnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc1RhbmggY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZgorfAlhbiBpbnB1dCBhcmd1bWVudDsgc1RhbmhkIGRvZXMgdGhlIHNhbWUgZXhjZXB0IGZvciBkZW5vcm1hbGl6ZWQKK3wJaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgdGFuaChYKSByZXR1cm5lZCBpbiBmbG9hdGluZy1wb2ludCByZWdpc3RlciBGcDAuCit8Cit8CUFjY3VyYWN5IGFuZCBNb25vdG9uaWNpdHk6IFRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgorfAkJNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlCit8CQlyZXN1bHQgaXMgc3Vic2VxdWVudGx5IHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlCit8CQlyZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljIGluIGRvdWJsZSBwcmVjaXNpb24uCit8Cit8CVNwZWVkOiBUaGUgcHJvZ3JhbSBzdGFuaCB0YWtlcyBhcHByb3hpbWF0ZWx5IDI3MCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJVEFOSAorfAkxLiBJZiB8WHwgPj0gKDUvMikgbG9nMiBvciB8WHwgPD0gMioqKC00MCksIGdvIHRvIDMuCit8Cit8CTIuICgyKiooLTQwKSA8IHxYfCA8ICg1LzIpIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5Cit8CQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cG0xKFkpLCBhbmQKK3wJCXRhbmgoWCkgPSBzZ24qKCB6LygyK3opICkuCit8CQlFeGl0LgorfAorfAkzLiAofFh8IDw9IDIqKigtNDApIG9yIHxYfCA+PSAoNS8yKSBsb2cyKS4gSWYgfFh8IDwgMSwKK3wJCWdvIHRvIDcuCit8Cit8CTQuICh8WHwgPj0gKDUvMikgbG9nMikgSWYgfFh8ID49IDUwIGxvZzIsIGdvIHRvIDYuCit8Cit8CTUuICgoNS8yKSBsb2cyIDw9IHxYfCA8IDUwIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5Cit8CQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cChZKSwKK3wJCXRhbmgoWCkgPSBzZ24gLSBbIHNnbioyLygxK3opIF0uCit8CQlFeGl0LgorfAorfAk2LiAofFh8ID49IDUwIGxvZzIpIFRhbmgoWCkgPSArLTEgKHJvdW5kIHRvIG5lYXJlc3QpLiBUaHVzLCB3ZQorfAkJY2FsY3VsYXRlIFRhbmgoWCkgYnkKK3wJCXNnbiA6PSBzaWduKFgpLCBUaW55IDo9IDIqKigtMTI2KSwKK3wJCXRhbmgoWCkgOj0gc2duIC0gc2duKlRpbnkuCit8CQlFeGl0LgorfAorfAk3LiAofFh8IDwgMioqKC00MCkpLiBUYW5oKFgpID0gWC4JRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNUQU5ICWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCS5zZXQJWCxGUF9TQ1I1CisJLnNldAlYRENBUkUsWCsyCisJLnNldAlYRlJBQyxYKzQKKworCS5zZXQJU0dOLExfU0NSMworCisJLnNldAlWLEZQX1NDUjYKKworQk9VTkRTMToJLmxvbmcgMHgzRkQ3ODAwMCwweDNGRkZERENFIHwgLi4uIDJeKC00MCksICg1LzIpTE9HMgorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZglzZXRveAorCXx4cmVmCXNldG94bTEKKworCS5nbG9iYWwJc3RhbmhkCitzdGFuaGQ6Cit8LS1UQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQkJdF9leHRkbnJtCisKKwkuZ2xvYmFsCXN0YW5oCitzdGFuaDoKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJbW92ZWwJCSVkMCxYKCVhNikKKwlhbmRsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXAybAkJQk9VTkRTMSglcGMpLCVkMAl8IC4uLjIqKigtNDApIDwgfFh8IDwgKDUvMilMT0cyID8KKwliY3NzCQlUQU5IQk9SUworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFCit8LS1ZID0gMnxYfCwgWiA9IEVYUE0xKFkpLCBUQU5IKFgpID0gU0lHTihYKSAqIFogLyAoWisyKS4KKworCW1vdmVsCQlYKCVhNiksJWQwCisJbW92ZWwJCSVkMCxTR04oJWE2KQorCWFuZGwJCSMweDdGRkYwMDAwLCVkMAorCWFkZGwJCSMweDAwMDEwMDAwLCVkMAl8IC4uLkVYUE9ORU5UIE9GIDJ8WHwKKwltb3ZlbAkJJWQwLFgoJWE2KQorCWFuZGwJCSMweDgwMDAwMDAwLFNHTiglYTYpCisJZm1vdmV4CQlYKCVhNiksJWZwMAkJfCAuLi5GUDAgSVMgWSA9IDJ8WHwKKworCW1vdmVsCQklZDEsLSglYTcpCisJY2xybAkJJWQxCisJZm1vdmVteAklZnAwLSVmcDAsKCVhMCkKKwlic3IJCXNldG94bTEJCXwgLi4uRlAwIElTIFogPSBFWFBNMShZKQorCW1vdmVsCQkoJWE3KSssJWQxCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZhZGRzCQkjMHg0MDAwMDAwMCwlZnAxCXwgLi4uWisyCisJbW92ZWwJCVNHTiglYTYpLCVkMAorCWZtb3ZleAkJJWZwMSxWKCVhNikKKwllb3JsCQklZDAsViglYTYpCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQlWKCVhNiksJWZwMAorCWJyYQkJdF9mcmNpbngKKworVEFOSEJPUlM6CisJY21wbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmx0CQlUQU5IU00KKworCWNtcGwJCSMweDQwMDQ4QUExLCVkMAorCWJndAkJVEFOSEhVR0UKKworfC0tICg1LzIpIExPRzIgPCB8WHwgPCA1MCBMT0cyLAorfC0tVEFOSChYKSA9IDEgLSAoMi9bRVhQKDJYKSsxXSkuIExFVCBZID0gMnxYfCwgU0dOID0gU0lHTihYKSwKK3wtLVRBTkgoWCkgPSBTR04gLQlTR04qMi9bRVhQKFkpKzFdLgorCisJbW92ZWwJCVgoJWE2KSwlZDAKKwltb3ZlbAkJJWQwLFNHTiglYTYpCisJYW5kbAkJIzB4N0ZGRjAwMDAsJWQwCisJYWRkbAkJIzB4MDAwMTAwMDAsJWQwCXwgLi4uRVhQTyBPRiAyfFh8CisJbW92ZWwJCSVkMCxYKCVhNikJCXwgLi4uWSA9IDJ8WHwKKwlhbmRsCQkjMHg4MDAwMDAwMCxTR04oJWE2KQorCW1vdmVsCQlTR04oJWE2KSwlZDAKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCQl8IC4uLlkgPSAyfFh8CisKKwltb3ZlbAkJJWQxLC0oJWE3KQorCWNscmwJCSVkMQorCWZtb3ZlbXgJJWZwMC0lZnAwLCglYTApCisJYnNyCQlzZXRveAkJfCAuLi5GUDAgSVMgRVhQKFkpCisJbW92ZWwJCSglYTcpKywlZDEKKwltb3ZlbAkJU0dOKCVhNiksJWQwCisJZmFkZHMJCSMweDNGODAwMDAwLCVmcDAJfCAuLi5FWFAoWSkrMQorCisJZW9ybAkJIzB4QzAwMDAwMDAsJWQwCXwgLi4uLVNJR04oWCkqMgorCWZtb3ZlcwkJJWQwLCVmcDEJCXwgLi4uLVNJR04oWCkqMiBJTiBTR0wgRk1UCisJZmRpdngJCSVmcDAsJWZwMQkJfCAuLi4tU0lHTihYKTIgLyBbRVhQKFkpKzEgXQorCisJbW92ZWwJCVNHTiglYTYpLCVkMAorCW9ybAkJIzB4M0Y4MDAwMDAsJWQwCXwgLi4uU0dOCisJZm1vdmVzCQklZDAsJWZwMAkJfCAuLi5TR04gSU4gU0dMIEZNVAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJJWZwMSwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKK1RBTkhTTToKKwltb3ZldwkJIzB4MDAwMCxYRENBUkUoJWE2KQorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCQl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCisJYnJhCQl0X2ZyY2lueAorCitUQU5ISFVHRToKK3wtLS1SRVRVUk4gU0dOKFgpIC0gU0dOKFgpRVBTCisJbW92ZWwJCVgoJWE2KSwlZDAKKwlhbmRsCQkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJCSMweDNGODAwMDAwLCVkMAorCWZtb3ZlcwkJJWQwLCVmcDAKKwlhbmRsCQkjMHg4MDAwMDAwMCwlZDAKKwllb3JsCQkjMHg4MDgwMDAwMCwlZDAJfCAuLi4tU0lHTihYKSpFUFMKKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCSVkMCwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zdG9fcmVzLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdG9fcmVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkY2EzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0b19yZXMuUwpAQCAtMCwwICsxLDk4IEBACit8Cit8CXN0b19yZXMuc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRha2VzIHRoZSByZXN1bHQgYW5kIHB1dHMgaXQgaW4gd2hlcmUgdGhlIHVzZXIgZXhwZWN0cyBpdC4KK3wJTGlicmFyeSBmdW5jdGlvbnMgcmV0dXJuIHJlc3VsdCBpbiBmcDAuCUlmIGZwMCBpcyBub3QgdGhlCit8CXVzZXJzIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHRoZW4gZnAwIGlzIG1vdmVkIHRvIHRoZQorfAljb3JyZWN0IGZsb2F0aW5nLXBvaW50IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiAgZnAwIGFuZCBmcDEKK3wJYXJlIHRoZW4gcmVzdG9yZWQgdG8gdGhlIG9yaWdpbmFsIGNvbnRlbnRzLgorfAorfAlJbnB1dDoJcmVzdWx0IGluIGZwMCxmcDEKK3wKK3wJCWQyICYgYTAgc2hvdWxkIGJlIGtlcHQgdW5tb2RpZmllZAorfAorfAlPdXRwdXQ6CW1vdmVzIHRoZSByZXN1bHQgdG8gdGhlIHRydWUgZGVzdGluYXRpb24gcmVnIG9yIG1lbQorfAorfAlNb2RpZmllczogZGVzdGluYXRpb24gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworU1RPX1JFUzoJfGlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJLmdsb2JhbAlzdG9fY29zCitzdG9fY29zOgorCWJmZXh0dQkJQ01EUkVHMUIoJWE2KXsjMTM6IzN9LCVkMAl8ZXh0cmFjdCBjb3MgZGVzdGluYXRpb24KKwljbXBpYgkJIzMsJWQwCQl8Y2hlY2sgZm9yIGZwMC9mcDEgY2FzZXMKKwlibGVzCQljX2ZwMDEyMworCWZtb3ZlbXgJJWZwMS0lZnAxLC0oJWE3KQorCW1vdmVxbAkJIzcsJWQxCisJc3VibAkJJWQwLCVkMQkJfGQxID0gNy0gKGRlc3QuIHJlZy4gbm8uKQorCWNscmwJCSVkMAorCWJzZXRsCQklZDEsJWQwCQl8ZDAgaXMgZHluYW1pYyByZWdpc3RlciBtYXNrCisJZm1vdmVteAkoJWE3KSssJWQwCisJcnRzCitjX2ZwMDEyMzoKKwljbXBpYgkJIzAsJWQwCisJYmVxcwkJY19pc19mcDAKKwljbXBpYgkJIzEsJWQwCisJYmVxcwkJY19pc19mcDEKKwljbXBpYgkJIzIsJWQwCisJYmVxcwkJY19pc19mcDIKK2NfaXNfZnAzOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAzKCVhNikKKwlydHMKK2NfaXNfZnAyOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAyKCVhNikKKwlydHMKK2NfaXNfZnAxOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAxKCVhNikKKwlydHMKK2NfaXNfZnAwOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAwKCVhNikKKwlydHMKKworCisJLmdsb2JhbAlzdG9fcmVzCitzdG9fcmVzOgorCWJmZXh0dQkJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJCSMzLCVkMAkJfGNoZWNrIGZvciBmcDAvZnAxIGNhc2VzCisJYmxlcwkJZnAwMTIzCisJZm1vdmVteAklZnAwLSVmcDAsLSglYTcpCisJbW92ZXFsCQkjNywlZDEKKwlzdWJsCQklZDAsJWQxCQl8ZDEgPSA3LSAoZGVzdC4gcmVnLiBuby4pCisJY2xybAkJJWQwCisJYnNldGwJCSVkMSwlZDAJCXxkMCBpcyBkeW5hbWljIHJlZ2lzdGVyIG1hc2sKKwlmbW92ZW14CSglYTcpKywlZDAKKwlydHMKK2ZwMDEyMzoKKwljbXBpYgkJIzAsJWQwCisJYmVxcwkJaXNfZnAwCisJY21waWIJCSMxLCVkMAorCWJlcXMJCWlzX2ZwMQorCWNtcGliCQkjMiwlZDAKKwliZXFzCQlpc19mcDIKK2lzX2ZwMzoKKwlmbW92ZW14CSVmcDAtJWZwMCxVU0VSX0ZQMyglYTYpCisJcnRzCitpc19mcDI6CisJZm1vdmVteAklZnAwLSVmcDAsVVNFUl9GUDIoJWE2KQorCXJ0cworaXNfZnAxOgorCWZtb3ZlbXgJJWZwMC0lZnAwLFVTRVJfRlAxKCVhNikKKwlydHMKK2lzX2ZwMDoKKwlmbW92ZW14CSVmcDAtJWZwMCxVU0VSX0ZQMCglYTYpCisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zdHdvdG94LlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdHdvdG94LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzYzE0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0d290b3guUwpAQCAtMCwwICsxLDQyNyBAQAorfAorfAlzdHdvdG94LnNhIDMuMSAxMi8xMC85MAorfAorfAlzdHdvdG94ICAtLS0gMioqWAorfAlzdHdvdG94ZCAtLS0gMioqWCBmb3IgZGVub3JtYWxpemVkIFgKK3wJc3RlbnRveCAgLS0tIDEwKipYCit8CXN0ZW50b3hkIC0tLSAxMCoqWCBmb3IgZGVub3JtYWxpemVkIFgKK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSBmdW5jdGlvbiB2YWx1ZXMgYXJlIHJldHVybmVkIGluIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHN0d290b3ggdGFrZXMgYXBwcm94aW1hdGVseSAxOTAgY3ljbGVzIGFuZCB0aGUKK3wJCXByb2dyYW0gc3RlbnRveCB0YWtlcyBhcHByb3hpbWF0ZWx5IDIwMCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJdHdvdG94Cit8CTEuIElmIHxYfCA+IDE2NDgwLCBnbyB0byBFeHBCaWcuCit8Cit8CTIuIElmIHxYfCA8IDIqKigtNzApLCBnbyB0byBFeHBTbS4KK3wKK3wJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4vNjQgKyByIHdoZXJlIHxyfCA8PSAxLzEyOC4gRnVydGhlcm1vcmUKK3wJCWRlY29tcG9zZSBOIGFzCit8CQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4KK3wKK3wJNC4gT3ZlcndyaXRlIHIgOj0gciAqIGxvZzIuIFRoZW4KK3wJCTIqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgorfAkJR28gdG8gZXhwciB0byBjb21wdXRlIHRoYXQgZXhwcmVzc2lvbi4KK3wKK3wJdGVudG94Cit8CTEuIElmIHxYfCA+IDE2NDgwKmxvZ18xMCgyKSAoYmFzZSAxMCBsb2cgb2YgMiksIGdvIHRvIEV4cEJpZy4KK3wKK3wJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgorfAorfAkzLiBTZXQgeSA6PSBYKmxvZ18yKDEwKSo2NCAoYmFzZSAyIGxvZyBvZiAxMCkuIFNldAorfAkJTiA6PSByb3VuZC10by1pbnQoeSkuIERlY29tcG9zZSBOIGFzCit8CQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4KK3wKK3wJNC4gRGVmaW5lIHIgYXMKK3wJCXIgOj0gKChYIC0gTipMMSktTipMMikgKiBMMTAKK3wJCXdoZXJlIEwxLCBMMiBhcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhcnRzIG9mIGxvZ18xMCgyKS82NAorfAkJYW5kIEwxMCBpcyB0aGUgbmF0dXJhbCBsb2cgb2YgMTAuIFRoZW4KK3wJCTEwKipYID0gMioqKE0nKSAqIDIqKihNKSAqIDIqKihqLzY0KSAqIGV4cChyKS4KK3wJCUdvIHRvIGV4cHIgdG8gY29tcHV0ZSB0aGF0IGV4cHJlc3Npb24uCit8Cit8CWV4cHIKK3wJMS4gRmV0Y2ggMioqKGovNjQpIGZyb20gdGFibGUgYXMgRmFjdDEgYW5kIEZhY3QyLgorfAorfAkyLiBPdmVyd3JpdGUgRmFjdDEgYW5kIEZhY3QyIGJ5Cit8CQlGYWN0MSA6PSAyKiooTSkgKiBGYWN0MQorfAkJRmFjdDIgOj0gMioqKE0pICogRmFjdDIKK3wJCVRodXMgRmFjdDEgKyBGYWN0MiA9IDIqKihNKSAqIDIqKihqLzY0KS4KK3wKK3wJMy4gQ2FsY3VsYXRlIFAgd2hlcmUgMSArIFAgYXBwcm94aW1hdGVzIGV4cChyKToKK3wJCVAgPSByICsgcipyKihBMStyKihBMisuLi4rcipBNSkpLgorfAorfAk0LiBMZXQgQWRqRmFjdCA6PSAyKiooTScpLiBSZXR1cm4KK3wJCUFkakZhY3QgKiAoIEZhY3QxICsgKChGYWN0MSpQKSArIEZhY3QyKSApLgorfAkJRXhpdC4KK3wKK3wJRXhwQmlnCit8CTEuIEdlbmVyYXRlIG92ZXJmbG93IGJ5IEh1Z2UgKiBIdWdlIGlmIFggPiAwOyBvdGhlcndpc2UsIGdlbmVyYXRlCit8CQl1bmRlcmZsb3cgYnkgVGlueSAqIFRpbnkuCit8Cit8CUV4cFNtCit8CTEuIFJldHVybiAxICsgWC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNUV09UT1gJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitCT1VORFMxOgkubG9uZyAweDNGQjk4MDAwLDB4NDAwRDgwQzAgfCAuLi4gMl4oLTcwKSwxNjQ4MAorQk9VTkRTMjoJLmxvbmcgMHgzRkI5ODAwMCwweDQwMEI5QjA3IHwgLi4uIDJeKC03MCksMTY0ODAgTE9HMi9MT0cxMAorCitMMlRFTjY0OgkubG9uZyAweDQwNkE5MzRGLDB4MDk3OUEzNzEgfCAuLi4gNjRMT0cxMC9MT0cyCitMMTBUV08xOgkubG9uZyAweDNGNzM0NDEzLDB4NTA5RjgwMDAgfCAuLi4gTE9HMi82NExPRzEwCisKK0wxMFRXTzI6CS5sb25nIDB4QkZDRDAwMDAsMHhDMDIxOURDMSwweERBOTk0RkQyLDB4MDAwMDAwMDAKKworTE9HMTA6CS5sb25nIDB4NDAwMDAwMDAsMHg5MzVEOERERCwweEFBQThBQzE3LDB4MDAwMDAwMDAKKworTE9HMjoJLmxvbmcgMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitFWFBBNToJLmxvbmcgMHgzRjU2QzE2RCwweDZGN0JEMEIyCitFWFBBNDoJLmxvbmcgMHgzRjgxMTExMiwweDMwMkM3MTJDCitFWFBBMzoJLmxvbmcgMHgzRkE1NTU1NSwweDU1NTU0Q0MxCitFWFBBMjoJLmxvbmcgMHgzRkM1NTU1NSwweDU1NTU0QTU0CitFWFBBMToJLmxvbmcgMHgzRkUwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitIVUdFOgkubG9uZyAweDdGRkUwMDAwLDB4RkZGRkZGRkYsMHhGRkZGRkZGRiwweDAwMDAwMDAwCitUSU5ZOgkubG9uZyAweDAwMDEwMDAwLDB4RkZGRkZGRkYsMHhGRkZGRkZGRiwweDAwMDAwMDAwCisKK0VYUFRCTDoKKwkubG9uZyAgMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgzRjczODAwMAorCS5sb25nICAweDNGRkYwMDAwLDB4ODE2NEQxRjMsMHhCQzAzMDc3MywweDNGQkVGN0NBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ3LDB4M0ZCREY4QTkKKwkubG9uZyAgMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDYsMHgzRkJDRDdDOQorCS5sb25nICAweDNGRkYwMDAwLDB4ODVBQUMzNjcsMHhDQzQ4N0IxNSwweEJGQkRFOERBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4M0ZCREU4NUMKKwkubG9uZyAgMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjcsMHgzRkJFQkJGMQorCS5sb25nICAweDNGRkYwMDAwLDB4OEExNEQ1NzUsMHg0OTZFRkQ5QSwweDNGQkI4MENBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU3LDB4QkZCQTgzNzMKKwkubG9uZyAgMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTYsMHhCRkJFOTY3MAorCS5sb25nICAweDNGRkYwMDAwLDB4OEVBNDM5OEIsMHg0NUNENTNDMCwweDNGQkRCNzAwCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4M0ZCRUVFQjAKKwkubG9uZyAgMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzYsMHgzRkJCRkQ2RAorCS5sb25nICAweDNGRkYwMDAwLDB4OTM1QTJCMkYsMHgxM0U2RTkyQywweEJGQkRCMzE5CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYxLDB4M0ZCREJBMkIKKwkubG9uZyAgMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgzRkJFOTFENQorCS5sb25nICAweDNGRkYwMDAwLDB4OTgzN0YwNTEsMHg4REI4QTk2RiwweDNGQkU4RDVBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY1LDB4QkZCQ0RFN0IKKwkubG9uZyAgMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzksMHhCRkJFQkFBRgorCS5sb25nICAweDNGRkYwMDAwLDB4OUQzRUQ5QTcsMHgyQ0ZGQjc1MSwweEJGQkQ4NkRBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFFLDB4QkZCRUJFREQKKwkubG9uZyAgMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzIsMHgzRkJDQzk2RQorCS5sb25nICAweDNGRkYwMDAwLDB4QTI3MDQzMDMsMHgwQzQ5NjgxOSwweEJGQkVDOTBCCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MDlFLDB4M0ZCQkQxREIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUEsMHgzRkJDRTVFQgorCS5sb25nICAweDNGRkYwMDAwLDB4QTdDRDkzQjQsMHhFOTY1MzU2QSwweEJGQkVDMjc0CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4M0ZCRUE4M0MKKwkubG9uZyAgMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzcsMHgzRkJFQ0IwMAorCS5sb25nICAweDNGRkYwMDAwLDB4QUQ1ODNFRUEsMHg0MkExNEFDNiwweDNGQkU5MzAxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc1LDB4QkZCRDgzNjcKKwkubG9uZyAgMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHhCRkJFRjA1RgorCS5sb25nICAweDNGRkYwMDAwLDB4QjMxMUM0MTIsMHhBOTExMjQ4OSwweDNGQkRGQjNDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4M0ZCRUIyRkIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTEsMHgzRkJBRTJDQgorCS5sb25nICAweDNGRkYwMDAwLDB4QjhGQkFGNDcsMHg2MkZCOUVFOSwweDNGQkNEQzNDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZCLDB4M0ZCRUU5QUEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QkYsMHhCRkJFQUVGRAorCS5sb25nICAweDNGRkYwMDAwLDB4QkYxNzk5QjYsMHg3QTczMTA4MywweEJGQkNCRjUxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU2LDB4M0ZCRUY4OEEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDcsMHgzRkJEODNCMgorCS5sb25nICAweDNGRkYwMDAwLDB4QzU2NzJBMTEsMHg1NTA2REFERCwweDNGQkRGOEFCCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVELDB4QkZCREZCMTcKKwkubG9uZyAgMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTMsMHhCRkJFRkUzQworCS5sb25nICAweDNGRkYwMDAwLDB4Q0JFQzE0RkUsMHhGMjcyN0M1RCwweEJGQkJCNkY4CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4QkZCQ0VFNTMKKwkubG9uZyAgMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTUsMHhCRkJEQTRBRQorCS5sb25nICAweDNGRkYwMDAwLDB4RDJBODFEOTEsMHhGMTJBRTQ1QSwweDNGQkM5MTI0CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTFGLDB4M0ZCRUIyNDMKKwkubG9uZyAgMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgzRkJERTY5QQorCS5sb25nICAweDNGRkYwMDAwLDB4RDk5RDE1QzIsMHg3OEFGRDdCNiwweEJGQjhCQzYxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU1LDB4M0ZCREY2MTAKKwkubG9uZyAgMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHhCRkJEOEJFMQorCS5sb25nICAweDNGRkYwMDAwLDB4RTBDQ0RFRUMsMHgyQTk0RTExMSwweDNGQkFDQjEyCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUxLDB4M0ZCQjlCRkUKKwkubG9uZyAgMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgzRkJDRjJGNAorCS5sb25nICAweDNGRkYwMDAwLDB4RTgzOTZBNTAsMHgzQzRCREM2OCwweDNGQkVGMjJGCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTJGLDB4QkZCREJGNEEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgzRkJFQzAxQQorCS5sb25nICAweDNGRkYwMDAwLDB4RUZFNEI5OUIsMHhEQ0RBRjVDQiwweDNGQkU4Q0FDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTNBLDB4QkZCQ0JCM0YKKwkubG9uZyAgMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgzRkJFRjczQQorCS5sb25nICAweDNGRkYwMDAwLDB4RjdEMERGNzMsMHgwQUQxM0JCOSwweEJGQjhCNzk1CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNBLDB4M0ZCRUY4NEIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzUsMHhCRkJFRjU4MQorCisJLnNldAlOLExfU0NSMQorCisJLnNldAlYLEZQX1NDUjEKKwkuc2V0CVhEQ0FSRSxYKzIKKwkuc2V0CVhGUkFDLFgrNAorCisJLnNldAlBREpGQUNULEZQX1NDUjIKKworCS5zZXQJRkFDVDEsRlBfU0NSMworCS5zZXQJRkFDVDFISSxGQUNUMSs0CisJLnNldAlGQUNUMUxPVyxGQUNUMSs4CisKKwkuc2V0CUZBQ1QyLEZQX1NDUjQKKwkuc2V0CUZBQ1QySEksRkFDVDIrNAorCS5zZXQJRkFDVDJMT1csRkFDVDIrOAorCisJfCB4cmVmCXRfdW5mbAorCXx4cmVmCXRfb3ZmbAorCXx4cmVmCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0d290b3hkCitzdHdvdG94ZDoKK3wtLUVOVFJZIFBPSU5UIEZPUiAyKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdmVsCQklZDEsJWZwY3IJCXwgLi4uc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMCAgfCAuLi5SRVRVUk4gMSArIFgKKwltb3ZlbAkJKCVhMCksJWQwCisJb3JsCQkjMHgwMDgwMDAwMSwlZDAKKwlmYWRkcwkJJWQwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0d290b3gKK3N0d290b3g6Cit8LS1FTlRSWSBQT0lOVCBGT1IgMioqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworCWZtb3ZlbXgJKCVhMCksJWZwMC0lZnAwCXwgLi4uTE9BRCBJTlBVVCwgZG8gbm90IHNldCBjYydzCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAorCisJY21waWwJCSMweDNGQjk4MDAwLCVkMAkJfCAuLi58WHwgPj0gMioqKC03MCk/CisJYmdlcwkJVFdPT0sxCisJYnJhCQlFWFBCT1JTCisKK1RXT09LMToKKwljbXBpbAkJIzB4NDAwRDgwQzAsJWQwCQl8IC4uLnxYfCA+IDE2NDgwPworCWJsZXMJCVRXT01BSU4KKwlicmEJCUVYUEJPUlMKKworCitUV09NQUlOOgorfC0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHMJCSMweDQyODAwMDAwLCVmcDEgIHwgLi4uNjQgKiBYCisKKwlmbW92ZWwJCSVmcDEsTiglYTYpCQl8IC4uLk4gPSBST1VORC1UTy1JTlQoNjQgWCkKKwltb3ZlbAkJJWQyLC0oJXNwKQorCWxlYQkJRVhQVEJMLCVhMQl8IC4uLkxPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQorCWZtb3ZlbAkJTiglYTYpLCVmcDEJCXwgLi4uTiAtLT4gRkxPQVRJTkcgRk1UCisJbW92ZWwJCU4oJWE2KSwlZDAKKwltb3ZlbAkJJWQwLCVkMgorCWFuZGlsCQkjMHgzRiwlZDAJCXwgLi4uRDAgSVMgSgorCWFzbGwJCSM0LCVkMAkJfCAuLi5ESVNQTEFDRU1FTlQgRk9SIDJeKEovNjQpCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uQUREUkVTUyBGT1IgMl4oSi82NCkKKwlhc3JsCQkjNiwlZDIJCXwgLi4uZDIgSVMgTCwgTiA9IDY0TCArIEoKKwltb3ZlbAkJJWQyLCVkMAorCWFzcmwJCSMxLCVkMAkJfCAuLi5EMCBJUyBNCisJc3VibAkJJWQwLCVkMgkJfCAuLi5kMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgorCWFkZGlsCQkjMHgzRkZGLCVkMgorCW1vdmV3CQklZDIsQURKRkFDVCglYTYpCXwgLi4uQURKRkFDVCBJUyAyXihNJykKKwltb3ZlbAkJKCVzcCkrLCVkMgorfC0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKK3wtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCit8LS1BREpGQUNUID0gMl4oTScpLgorfC0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKworCWZtdWxzCQkjMHgzQzgwMDAwMCwlZnAxICB8IC4uLigxLzY0KSpOCisJbW92ZWwJCSglYTEpKyxGQUNUMSglYTYpCisJbW92ZWwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwltb3ZldwkJKCVhMSkrLEZBQ1QyKCVhNikKKwljbHJ3CQlGQUNUMisyKCVhNikKKworCWZzdWJ4CQklZnAxLCVmcDAJCXwgLi4uWCAtICgxLzY0KSpJTlQoNjQgWCkKKworCW1vdmV3CQkoJWExKSssRkFDVDJISSglYTYpCisJY2xydwkJRkFDVDJISSsyKCVhNikKKwljbHJsCQlGQUNUMkxPVyglYTYpCisJYWRkdwkJJWQwLEZBQ1QxKCVhNikKKworCWZtdWx4CQlMT0cyLCVmcDAJfCAuLi5GUDAgSVMgUgorCWFkZHcJCSVkMCxGQUNUMiglYTYpCisKKwlicmEJCWV4cHIKKworRVhQQk9SUzoKK3wtLUZQQ1IsIEQwIFNBVkVECisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndHMJCUVYUEJJRworCitFWFBTTToKK3wtLXxYfCBJUyBTTUFMTCwgUkVUVVJOIDEgKyBYCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZhZGRzCQkjMHgzRjgwMDAwMCwlZnAwICB8IC4uLlJFVFVSTiAxICsgWAorCisJYnJhCQl0X2ZyY2lueAorCitFWFBCSUc6Cit8LS18WHwgSVMgTEFSR0UsIEdFTkVSQVRFIE9WRVJGTE9XIElGIFggPiAwOyBFTFNFIEdFTkVSQVRFIFVOREVSRkxPVworfC0tUkVHSVNURVJTIFNBVkUgU08gRkFSIEFSRSBGUENSIEFORCAgRDAKKwltb3ZlbAkJWCglYTYpLCVkMAorCWNtcGlsCQkjMCwlZDAKKwlibHRzCQlFWFBORUcKKworCWJjbHJiCQkjNywoJWEwKQkJfHRfb3ZmbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisJYnJhCQl0X292ZmwKKworRVhQTkVHOgorCWJjbHJiCQkjNywoJWEwKQkJfHRfdW5mbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisJYnJhCQl0X3VuZmwKKworCS5nbG9iYWwJc3RlbnRveGQKK3N0ZW50b3hkOgorfC0tRU5UUlkgUE9JTlQgRk9SIDEwKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdmVsCQklZDEsJWZwY3IJCXwgLi4uc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMCAgfCAuLi5SRVRVUk4gMSArIFgKKwltb3ZlbAkJKCVhMCksJWQwCisJb3JsCQkjMHgwMDgwMDAwMSwlZDAKKwlmYWRkcwkJJWQwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0ZW50b3gKK3N0ZW50b3g6Cit8LS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKKwlmbW92ZW14CSglYTApLCVmcDAtJWZwMAl8IC4uLkxPQUQgSU5QVVQsIGRvIG5vdCBzZXQgY2MncworCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJZm1vdmV4CQklZnAwLFgoJWE2KQorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKworCWNtcGlsCQkjMHgzRkI5ODAwMCwlZDAJCXwgLi4ufFh8ID49IDIqKigtNzApPworCWJnZXMJCVRFTk9LMQorCWJyYQkJRVhQQk9SUworCitURU5PSzE6CisJY21waWwJCSMweDQwMEI5QjA3LCVkMAkJfCAuLi58WHwgPD0gMTY0ODAqbG9nMi9sb2cxMCA/CisJYmxlcwkJVEVOTUFJTgorCWJyYQkJRVhQQk9SUworCitURU5NQUlOOgorfC0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAgTE9HIDIgLyBMT0cgMTAKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bGQJCUwyVEVONjQsJWZwMQl8IC4uLlgqNjQqTE9HMTAvTE9HMgorCisJZm1vdmVsCQklZnAxLE4oJWE2KQkJfCAuLi5OPUlOVChYKjY0KkxPRzEwL0xPRzIpCisJbW92ZWwJCSVkMiwtKCVzcCkKKwlsZWEJCUVYUFRCTCwlYTEJfCAuLi5MT0FEIEFERFJFU1MgT0YgVEFCTEUgT0YgMl4oSi82NCkKKwlmbW92ZWwJCU4oJWE2KSwlZnAxCQl8IC4uLk4gLS0+IEZMT0FUSU5HIEZNVAorCW1vdmVsCQlOKCVhNiksJWQwCisJbW92ZWwJCSVkMCwlZDIKKwlhbmRpbAkJIzB4M0YsJWQwCQl8IC4uLkQwIElTIEoKKwlhc2xsCQkjNCwlZDAJCXwgLi4uRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgRk9SIDJeKEovNjQpCisJYXNybAkJIzYsJWQyCQl8IC4uLmQyIElTIEwsIE4gPSA2NEwgKyBKCisJbW92ZWwJCSVkMiwlZDAKKwlhc3JsCQkjMSwlZDAJCXwgLi4uRDAgSVMgTQorCXN1YmwJCSVkMCwlZDIJCXwgLi4uZDIgSVMgTScsIE4gPSA2NChNK00nKSArIEoKKwlhZGRpbAkJIzB4M0ZGRiwlZDIKKwltb3ZldwkJJWQyLEFESkZBQ1QoJWE2KQl8IC4uLkFESkZBQ1QgSVMgMl4oTScpCisJbW92ZWwJCSglc3ApKywlZDIKKworfC0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKK3wtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCit8LS1BREpGQUNUID0gMl4oTScpLgorfC0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKworCWZtb3ZleAkJJWZwMSwlZnAyCisKKwlmbXVsZAkJTDEwVFdPMSwlZnAxCXwgLi4uTiooTE9HMi82NExPRzEwKV9MRUFECisJbW92ZWwJCSglYTEpKyxGQUNUMSglYTYpCisKKwlmbXVseAkJTDEwVFdPMiwlZnAyCXwgLi4uTiooTE9HMi82NExPRzEwKV9UUkFJTAorCisJbW92ZWwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwlmc3VieAkJJWZwMSwlZnAwCQl8IC4uLlggLSBOIExfTEVBRAorCW1vdmV3CQkoJWExKSssRkFDVDIoJWE2KQorCisJZnN1YngJCSVmcDIsJWZwMAkJfCAuLi5YIC0gTiBMX1RSQUlMCisKKwljbHJ3CQlGQUNUMisyKCVhNikKKwltb3ZldwkJKCVhMSkrLEZBQ1QySEkoJWE2KQorCWNscncJCUZBQ1QySEkrMiglYTYpCisJY2xybAkJRkFDVDJMT1coJWE2KQorCisJZm11bHgJCUxPRzEwLCVmcDAJfCAuLi5GUDAgSVMgUgorCisJYWRkdwkJJWQwLEZBQ1QxKCVhNikKKwlhZGR3CQklZDAsRkFDVDIoJWE2KQorCitleHByOgorfC0tRlBDUiwgRlAyLCBGUDMgQVJFIFNBVkVEIElOIE9SREVSIEFTIFNIT1dOLgorfC0tQURKRkFDVCBDT05UQUlOUyAyKiooTScpLCBGQUNUMSArIEZBQ1QyID0gMioqKE0pICogMioqKEovNjQpLgorfC0tRlAwIElTIFIuIFRIRSBGT0xMT1dJTkcgQ09ERSBDT01QVVRFUworfC0tCTIqKihNJytNKSAqIDIqKihKLzY0KSAqIEVYUChSKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCQl8IC4uLkZQMSBJUyBTID0gUipSCisKKwlmbW92ZWQJCUVYUEE1LCVmcDIJfCAuLi5GUDIgSVMgQTUKKwlmbW92ZWQJCUVYUEE0LCVmcDMJfCAuLi5GUDMgSVMgQTQKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uRlAyIElTIFMqQTUKKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLkZQMyBJUyBTKkE0CisKKwlmYWRkZAkJRVhQQTMsJWZwMgl8IC4uLkZQMiBJUyBBMytTKkE1CisJZmFkZGQJCUVYUEEyLCVmcDMJfCAuLi5GUDMgSVMgQTIrUypBNAorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5GUDIgSVMgUyooQTMrUypBNSkKKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLkZQMyBJUyBTKihBMitTKkE0KQorCisJZmFkZGQJCUVYUEExLCVmcDIJfCAuLi5GUDIgSVMgQTErUyooQTMrUypBNSkKKwlmbXVseAkJJWZwMCwlZnAzCQl8IC4uLkZQMyBJUyBSKlMqKEEyK1MqQTQpCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLkZQMiBJUyBTKihBMStTKihBMytTKkE1KSkKKwlmYWRkeAkJJWZwMywlZnAwCQl8IC4uLkZQMCBJUyBSK1IqUyooQTIrUypBNCkKKworCWZhZGR4CQklZnAyLCVmcDAJCXwgLi4uRlAwIElTIEVYUChSKSAtIDEKKworCit8LS1GSU5BTCBSRUNPTlNUUlVDVElPTiBQUk9DRVNTCit8LS1FWFAoWCkgPSAyXk0qMl4oSi82NCkgKyAyXk0qMl4oSi82NCkqKEVYUChSKS0xKSAgLSAgKDEgT1IgMCkKKworCWZtdWx4CQlGQUNUMSglYTYpLCVmcDAKKwlmYWRkeAkJRkFDVDIoJWE2KSwlZnAwCisJZmFkZHgJCUZBQ1QxKCVhNiksJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwljbHJ3CQlBREpGQUNUKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxBREpGQUNUKzQoJWE2KQorCWNscmwJCUFESkZBQ1QrOCglYTYpCisJZm11bHgJCUFESkZBQ1QoJWE2KSwlZnAwCXwgLi4uRklOQUwgQURKVVNUTUVOVAorCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvdGJsZG8uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3RibGRvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2MGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3RibGRvLlMKQEAgLTAsMCArMSw1NTQgQEAKK3wKK3wJdGJsZG8uc2EgMy4xIDEyLzEwLzkwCit8Cit8IE1vZGlmaWVkOgorfAk4LzE2LzkwCWNoaW5kcwlUaGUgdGFibGUgd2FzIGNvbnN0cnVjdGVkIHRvIHVzZSBvbmx5IG9uZSBsZXZlbAorfAkJCW9mIGluZGlyZWN0aW9uIGluIGRvX2Z1bmMgZm9yIG1vbmFkaWMKK3wJCQlmdW5jdGlvbnMuICBEeWFkaWMgZnVuY3Rpb25zIHJlcXVpcmUgdHdvCit8CQkJbGV2ZWxzLCBhbmQgdGhlIHRhYmxlcyBhcmUgc3RpbGwgY29udGFpbmVkCit8CQkJaW4gZG9fZnVuYy4gIFRoZSB0YWJsZSBpcyBhcnJhbmdlZCBmb3IKK3wJCQlpbmRleCB3aXRoIGEgMTAtYml0IGluZGV4LCB3aXRoIHRoZSBmaXJzdAorfAkJCTcgYml0cyB0aGUgb3Bjb2RlLCBhbmQgdGhlIHJlbWFpbmluZyAzCit8CQkJdGhlIHN0YWcuICBGb3IgZHlhZGljIGZ1bmN0aW9ucywgYWxsCit8CQkJdmFsaWQgYWRkcmVzc2VzIGFyZSB0byB0aGUgZ2VuZXJpYyBlbnRyeQorfAkJCXBvaW50LgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8VEJMRE8JaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJbGRfcGluZixsZF9wb25lLGxkX3BwaTIKKwl8eHJlZgl0X2R6Mix0X29wZXJyCisJfHhyZWYJc2Vycm9yLHNvbmUsc3plcm8sc2luZixzbnpyaW54CisJfHhyZWYJc29wcl9pbmYsc3BpXzIsc3JjX25hbixzenJfaW5mCisKKwl8eHJlZglzbW92Y3IKKwl8eHJlZglwbW9kLHByZW0scHNjYWxlCisJfHhyZWYJc2F0YW5oLHNhdGFuaGQKKwl8eHJlZglzYWNvcyxzYWNvc2Qsc2FzaW4sc2FzaW5kLHNhdGFuLHNhdGFuZAorCXx4cmVmCXNldG94LHNldG94ZCxzZXRveG0xLHNldG94bTFkLHNldG94bTFpCisJfHhyZWYJc2dldGV4cCxzZ2V0ZXhwZCxzZ2V0bWFuLHNnZXRtYW5kCisJfHhyZWYJc2ludCxzaW50ZCxzaW50cnoKKwl8eHJlZglzc2luY29zLHNzaW5jb3NkLHNzaW5jb3NpLHNzaW5jb3NuYW4sc3NpbmNvc3oKKwl8eHJlZglzY29zLHNjb3NkLHNzaW4sc3NpbmQsc3RhbixzdGFuZAorCXx4cmVmCXNjb3NoLHNjb3NoZCxzc2luaCxzc2luaGQsc3Rhbmgsc3RhbmhkCisJfHhyZWYJc3Nsb2cxMCxzc2xvZzIsc3Nsb2duLHNzbG9nbnAxCisJfHhyZWYJc3Nsb2cxMGQsc3Nsb2cyZCxzc2xvZ25kLHNsb2ducDFkCisJfHhyZWYJc3RlbnRveCxzdGVudG94ZCxzdHdvdG94LHN0d290b3hkCisKK3wJaW5zdHJ1Y3Rpb24JCTtvcGNvZGUtc3RhZyBOb3RlcworCS5nbG9iYWwJdGJscHJlCit0YmxwcmU6CisJLmxvbmcJc21vdmNyCQl8JDAwLTAgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtMSBmbW92ZWNyIGFsbAorCS5sb25nCXNtb3ZjcgkJfCQwMC0yIGZtb3ZlY3IgYWxsCisJLmxvbmcJc21vdmNyCQl8JDAwLTMgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtNCBmbW92ZWNyIGFsbAorCS5sb25nCXNtb3ZjcgkJfCQwMC01IGZtb3ZlY3IgYWxsCisJLmxvbmcJc21vdmNyCQl8JDAwLTYgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtNyBmbW92ZWNyIGFsbAorCisJLmxvbmcJc2ludAkJfCQwMS0wIGZpbnQgbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAxLTEgZmludCB6ZXJvCisJLmxvbmcJc2luZgkJfCQwMS0yIGZpbnQgaW5mCisJLmxvbmcJc3JjX25hbgkJfCQwMS0zIGZpbnQgbmFuCisJLmxvbmcJc2ludGQJCXwkMDEtNCBmaW50IGRlbm9ybSBpbngKKwkubG9uZwlzZXJyb3IJCXwkMDEtNSBmaW50IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAxLTYgZmludCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwMS03IGZpbnQgRVJST1IKKworCS5sb25nCXNzaW5oCQl8JDAyLTAgZnNpbmggbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAyLTEgZnNpbmggemVybworCS5sb25nCXNpbmYJCXwkMDItMiBmc2luaCBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDAyLTMgZnNpbmggbmFuCisJLmxvbmcJc3NpbmhkCQl8JDAyLTQgZnNpbmggZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDAyLTUgZnNpbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDItNiBmc2luaCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwMi03IGZzaW5oIEVSUk9SCisKKwkubG9uZwlzaW50cnoJCXwkMDMtMCBmaW50cnogbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAzLTEgZmludHJ6IHplcm8KKwkubG9uZwlzaW5mCQl8JDAzLTIgZmludHJ6IGluZgorCS5sb25nCXNyY19uYW4JCXwkMDMtMyBmaW50cnogbmFuCisJLmxvbmcJc256cmlueAkJfCQwMy00IGZpbnRyeiBkZW5vcm0gaW54CisJLmxvbmcJc2Vycm9yCQl8JDAzLTUgZmludHJ6IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAzLTYgZmludHJ6IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAzLTcgZmludHJ6IEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMDQtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDQtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDQtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDA1LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDUtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA1LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDUtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA1LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNzbG9nbnAxCXwkMDYtMCBmbG9nbnAxIG5vcm0KKwkubG9uZwlzemVybwkJfCQwNi0xIGZsb2ducDEgemVybworCS5sb25nCXNvcHJfaW5mCXwkMDYtMiBmbG9nbnAxIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDYtMyBmbG9nbnAxIG5hbgorCS5sb25nCXNsb2ducDFkCXwkMDYtNCBmbG9nbnAxIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwNi01IGZsb2ducDEgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDYtNiBmbG9nbnAxIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA2LTcgZmxvZ25wMSBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDA3LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDctMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA3LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDctNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA3LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNldG94bTEJCXwkMDgtMCBmZXRveG0xIG5vcm0KKwkubG9uZwlzemVybwkJfCQwOC0xIGZldG94bTEgemVybworCS5sb25nCXNldG94bTFpCXwkMDgtMiBmZXRveG0xIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDgtMyBmZXRveG0xIG5hbgorCS5sb25nCXNldG94bTFkCXwkMDgtNCBmZXRveG0xIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwOC01IGZldG94bTEgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDgtNiBmZXRveG0xIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA4LTcgZmV0b3htMSBFUlJPUgorCisJLmxvbmcJc3RhbmgJCXwkMDktMCBmdGFuaCBub3JtCisJLmxvbmcJc3plcm8JCXwkMDktMSBmdGFuaCB6ZXJvCisJLmxvbmcJc29uZQkJfCQwOS0yIGZ0YW5oIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDktMyBmdGFuaCBuYW4KKwkubG9uZwlzdGFuaGQJCXwkMDktNCBmdGFuaCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMDktNSBmdGFuaCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwOS02IGZ0YW5oIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA5LTcgZnRhbmggRVJST1IKKworCS5sb25nCXNhdGFuCQl8JDBhLTAgZmF0YW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBhLTEgZmF0YW4gemVybworCS5sb25nCXNwaV8yCQl8JDBhLTIgZmF0YW4gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQwYS0zIGZhdGFuIG5hbgorCS5sb25nCXNhdGFuZAkJfCQwYS00IGZhdGFuIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwYS01IGZhdGFuIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBhLTYgZmF0YW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGEtNyBmYXRhbiBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDBiLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMGItMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDBiLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMGItNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDBiLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNhc2luCQl8JDBjLTAgZmFzaW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBjLTEgZmFzaW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGMtMiBmYXNpbiBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDBjLTMgZmFzaW4gbmFuCisJLmxvbmcJc2FzaW5kCQl8JDBjLTQgZmFzaW4gZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDBjLTUgZmFzaW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGMtNiBmYXNpbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwYy03IGZhc2luIEVSUk9SCisKKwkubG9uZwlzYXRhbmgJCXwkMGQtMCBmYXRhbmggbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBkLTEgZmF0YW5oIHplcm8KKwkubG9uZwl0X29wZXJyCQl8JDBkLTIgZmF0YW5oIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGQtMyBmYXRhbmggbmFuCisJLmxvbmcJc2F0YW5oZAkJfCQwZC00IGZhdGFuaCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGQtNSBmYXRhbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGQtNiBmYXRhbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGQtNyBmYXRhbmggRVJST1IKKworCS5sb25nCXNzaW4JCXwkMGUtMCBmc2luIG5vcm0KKwkubG9uZwlzemVybwkJfCQwZS0xIGZzaW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGUtMiBmc2luIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGUtMyBmc2luIG5hbgorCS5sb25nCXNzaW5kCQl8JDBlLTQgZnNpbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGUtNSBmc2luIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBlLTYgZnNpbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwZS03IGZzaW4gRVJST1IKKworCS5sb25nCXN0YW4JCXwkMGYtMCBmdGFuIG5vcm0KKwkubG9uZwlzemVybwkJfCQwZi0xIGZ0YW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGYtMiBmdGFuIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGYtMyBmdGFuIG5hbgorCS5sb25nCXN0YW5kCQl8JDBmLTQgZnRhbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGYtNSBmdGFuIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBmLTYgZnRhbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwZi03IGZ0YW4gRVJST1IKKworCS5sb25nCXNldG94CQl8JDEwLTAgZmV0b3ggbm9ybQorCS5sb25nCWxkX3BvbmUJCXwkMTAtMSBmZXRveCB6ZXJvCisJLmxvbmcJc3pyX2luZgkJfCQxMC0yIGZldG94IGluZgorCS5sb25nCXNyY19uYW4JCXwkMTAtMyBmZXRveCBuYW4KKwkubG9uZwlzZXRveGQJCXwkMTAtNCBmZXRveCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTAtNSBmZXRveCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxMC02IGZldG94IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDEwLTcgZmV0b3ggRVJST1IKKworCS5sb25nCXN0d290b3gJCXwkMTEtMCBmdHdvdG94IG5vcm0KKwkubG9uZwlsZF9wb25lCQl8JDExLTEgZnR3b3RveCB6ZXJvCisJLmxvbmcJc3pyX2luZgkJfCQxMS0yIGZ0d290b3ggaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxMS0zIGZ0d290b3ggbmFuCisJLmxvbmcJc3R3b3RveGQJfCQxMS00IGZ0d290b3ggZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDExLTUgZnR3b3RveCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxMS02IGZ0d290b3ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTEtNyBmdHdvdG94IEVSUk9SCisKKwkubG9uZwlzdGVudG94CQl8JDEyLTAgZnRlbnRveCBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxMi0xIGZ0ZW50b3ggemVybworCS5sb25nCXN6cl9pbmYJCXwkMTItMiBmdGVudG94IGluZgorCS5sb25nCXNyY19uYW4JCXwkMTItMyBmdGVudG94IG5hbgorCS5sb25nCXN0ZW50b3hkCXwkMTItNCBmdGVudG94IGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxMi01IGZ0ZW50b3ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTItNiBmdGVudG94IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDEyLTcgZnRlbnRveCBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDEzLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTMtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDEzLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTMtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDEzLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNzbG9nbgkJfCQxNC0wIGZsb2duIG5vcm0KKwkubG9uZwl0X2R6MgkJfCQxNC0xIGZsb2duIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE0LTIgZmxvZ24gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxNC0zIGZsb2duIG5hbgorCS5sb25nCXNzbG9nbmQJCXwkMTQtNCBmbG9nbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTQtNSBmbG9nbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxNC02IGZsb2duIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE0LTcgZmxvZ24gRVJST1IKKworCS5sb25nCXNzbG9nMTAJCXwkMTUtMCBmbG9nMTAgbm9ybQorCS5sb25nCXRfZHoyCQl8JDE1LTEgZmxvZzEwIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE1LTIgZmxvZzEwIGluZgorCS5sb25nCXNyY19uYW4JCXwkMTUtMyBmbG9nMTAgbmFuCisJLmxvbmcJc3Nsb2cxMGQJfCQxNS00IGZsb2cxMCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTUtNSBmbG9nMTAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTUtNiBmbG9nMTAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTUtNyBmbG9nMTAgRVJST1IKKworCS5sb25nCXNzbG9nMgkJfCQxNi0wIGZsb2cyIG5vcm0KKwkubG9uZwl0X2R6MgkJfCQxNi0xIGZsb2cyIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE2LTIgZmxvZzIgaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxNi0zIGZsb2cyIG5hbgorCS5sb25nCXNzbG9nMmQJCXwkMTYtNCBmbG9nMiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTYtNSBmbG9nMiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxNi02IGZsb2cyIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE2LTcgZmxvZzIgRVJST1IKKworCS5sb25nCXNlcnJvcgkJfCQxNy0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE3LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxNy0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE3LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxNy02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMTgtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxOC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTgtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxOC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTgtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Nvc2gJCXwkMTktMCBmY29zaCBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxOS0xIGZjb3NoIHplcm8KKwkubG9uZwlsZF9waW5mCQl8JDE5LTIgZmNvc2ggaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxOS0zIGZjb3NoIG5hbgorCS5sb25nCXNjb3NoZAkJfCQxOS00IGZjb3NoIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxOS01IGZjb3NoIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE5LTYgZmNvc2ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTktNyBmY29zaCBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDFhLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWEtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFhLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWEtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFhLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQxYi0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFiLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYi0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFiLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYi02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzYWNvcwkJfCQxYy0wIGZhY29zIG5vcm0KKwkubG9uZwlsZF9wcGkyCQl8JDFjLTEgZmFjb3MgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWMtMiBmYWNvcyBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDFjLTMgZmFjb3MgbmFuCisJLmxvbmcJc2Fjb3NkCQl8JDFjLTQgZmFjb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDFjLTUgZmFjb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWMtNiBmYWNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxYy03IGZhY29zIEVSUk9SCisKKwkubG9uZwlzY29zCQl8JDFkLTAgZmNvcyBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxZC0xIGZjb3MgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWQtMiBmY29zIGluZgorCS5sb25nCXNyY19uYW4JCXwkMWQtMyBmY29zIG5hbgorCS5sb25nCXNjb3NkCQl8JDFkLTQgZmNvcyBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMWQtNSBmY29zIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDFkLTYgZmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxZC03IGZjb3MgRVJST1IKKworCS5sb25nCXNnZXRleHAJCXwkMWUtMCBmZ2V0ZXhwIG5vcm0KKwkubG9uZwlzemVybwkJfCQxZS0xIGZnZXRleHAgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWUtMiBmZ2V0ZXhwIGluZgorCS5sb25nCXNyY19uYW4JCXwkMWUtMyBmZ2V0ZXhwIG5hbgorCS5sb25nCXNnZXRleHBkCXwkMWUtNCBmZ2V0ZXhwIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxZS01IGZnZXRleHAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWUtNiBmZ2V0ZXhwIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDFlLTcgZmdldGV4cCBFUlJPUgorCisJLmxvbmcJc2dldG1hbgkJfCQxZi0wIGZnZXRtYW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDFmLTEgZmdldG1hbiB6ZXJvCisJLmxvbmcJdF9vcGVycgkJfCQxZi0yIGZnZXRtYW4gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxZi0zIGZnZXRtYW4gbmFuCisJLmxvbmcJc2dldG1hbmQJfCQxZi00IGZnZXRtYW4gZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDFmLTUgZmdldG1hbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxZi02IGZnZXRtYW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWYtNyBmZ2V0bWFuIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjAtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjAtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjAtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJcG1vZAkJfCQyMS0wIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0xIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0yIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0zIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS00IGZtb2QgYWxsCisJLmxvbmcJc2Vycm9yCQl8JDIxLTUgZm1vZCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQyMS02IGZtb2QgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMjEtNyBmbW9kIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjItMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMi0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjItMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMi01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjItNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDIzLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjMtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIzLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjMtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIzLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyNC0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI0LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNC0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI0LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNC02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlwcmVtCQl8JDI1LTAgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTEgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTIgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTMgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTQgZnJlbSBhbGwKKwkubG9uZwlzZXJyb3IJCXwkMjUtNSBmcmVtIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI1LTYgZnJlbSBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQyNS03IGZyZW0gRVJST1IKKworCS5sb25nCXBzY2FsZQkJfCQyNi0wIGZzY2FsZSBhbGwKKwkubG9uZwlwc2NhbGUJCXwkMjYtMSBmc2NhbGUgYWxsCisJLmxvbmcJcHNjYWxlCQl8JDI2LTIgZnNjYWxlIGFsbAorCS5sb25nCXBzY2FsZQkJfCQyNi0zIGZzY2FsZSBhbGwKKwkubG9uZwlwc2NhbGUJCXwkMjYtNCBmc2NhbGUgYWxsCisJLmxvbmcJc2Vycm9yCQl8JDI2LTUgZnNjYWxlIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI2LTYgZnNjYWxlIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI2LTcgZnNjYWxlIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjctMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNy0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjctMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNy01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjctNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDI4LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjgtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI4LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjgtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI4LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyOS0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI5LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOS0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI5LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOS02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMmEtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYS0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmEtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYS01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmEtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDJiLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmItMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJiLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmItNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJiLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyYy0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJjLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYy0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJjLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYy02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMmQtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmQtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmQtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDJlLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmUtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJlLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmUtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJlLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyZi0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJmLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZi0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJmLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZi02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzc2luY29zCQl8JDMwLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMC0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzAtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMC0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMC00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMwLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMC02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzAtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMxLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMS0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzEtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMS0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMS00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMxLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMS02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzEtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMyLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMi0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzItMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMi0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMi00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMyLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMi02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzItNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMzLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMy0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzMtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMy0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMy00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMzLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMy02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzMtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM0LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNC0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzQtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNC0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNC00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM0LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNC02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzQtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM1LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNS0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzUtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNS0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNS00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM1LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNS02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzUtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM2LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNi0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzYtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNi0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNi00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM2LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNi02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzYtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM3LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNy0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzctMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNy0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNy00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM3LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNy02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzctNyBmc2luY29zIEVSUk9SCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC91dGlsLlMgYi9hcmNoL202OGsvZnBzcDA0MC91dGlsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3V0aWwuUwpAQCAtMCwwICsxLDc0OCBAQAorfAorfAl1dGlsLnNhIDMuNyA3LzI5LzkxCit8Cit8CVRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB1c2VkIGJ5IG90aGVyIHByb2dyYW1zLgorfAorfAlvdmZfcmVzOiB1c2VkIGJ5IG92ZXJmbG93IHRvIGZvcmNlIHRoZSBjb3JyZWN0Cit8CQkgcmVzdWx0LiBvdmZfcl9rLCBvdmZfcl94Miwgb3ZmX3JfeDMgYXJlCit8CQkgZGVyaXZhdGl2ZXMgb2YgdGhpcyByb3V0aW5lLgorfAlnZXRfZmxpbmU6IGdldCB1c2VyJ3Mgb3Bjb2RlIHdvcmQKK3wJZ19kZm10b3U6IHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIGZvcm1hdC4KK3wJZ19vcGNsczogcmV0dXJucyB0aGUgb3BjbGFzcyBvZiB0aGUgZmxvYXQgaW5zdHJ1Y3Rpb24uCit8CWdfcm5kcHI6IHJldHVybnMgdGhlIHJvdW5kaW5nIHByZWNpc2lvbi4KK3wJcmVnX2Rlc3Q6IHdyaXRlIGJ5dGUsIHdvcmQsIG9yIGxvbmcgZGF0YSB0byBEbgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFVUSUwJaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbWVtX3JlYWQKKworCS5nbG9iYWwJZ19kZm10b3UKKwkuZ2xvYmFsCWdfb3BjbHMKKwkuZ2xvYmFsCWdfcm5kcHIKKwkuZ2xvYmFsCWdldF9mbGluZQorCS5nbG9iYWwJcmVnX2Rlc3QKKworfAorfCBGaW5hbCByZXN1bHQgdGFibGUgZm9yIG92Zl9yZXMuIE5vdGUgdGhhdCB0aGUgbmVnYXRpdmUgY291bnRlcnBhcnRzCit8IGFyZSB1bm5lY2Vzc2FyeSBhcyBvdmZfcmVzIGFsd2F5cyByZXR1cm5zIHRoZSBzaWduIHNlcGFyYXRlbHkgZnJvbQorfCB0aGUgZXhwb25lbnQuCit8CQkJCQk7K2luZgorRVhUX1BJTkY6CS5sb25nCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtsYXJnZXN0ICtleHQKK0VYVF9QTFJHOgkubG9uZwkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCBtYWduaXR1ZGUgK3NnbCBpbiBleHQKK1NHTF9QTFJHOgkubG9uZwkweDQwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCBtYWduaXR1ZGUgK2RibCBpbiBleHQKK0RCTF9QTFJHOgkubG9uZwkweDQzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCAtZXh0CisKK3RibG92Zmw6CisJLmxvbmcJRVhUX1JOCisJLmxvbmcJRVhUX1JaCisJLmxvbmcJRVhUX1JNCisJLmxvbmcJRVhUX1JQCisJLmxvbmcJU0dMX1JOCisJLmxvbmcJU0dMX1JaCisJLmxvbmcJU0dMX1JNCisJLmxvbmcJU0dMX1JQCisJLmxvbmcJREJMX1JOCisJLmxvbmcJREJMX1JaCisJLmxvbmcJREJMX1JNCisJLmxvbmcJREJMX1JQCisJLmxvbmcJZXJyb3IKKwkubG9uZwllcnJvcgorCS5sb25nCWVycm9yCisJLmxvbmcJZXJyb3IKKworCit8Cit8CW92Zl9yX2sgLS0tIG92ZXJmbG93IHJlc3VsdCBjYWxjdWxhdGlvbgorfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkga2VybmVsX2V4LgorfAorfCBUaGlzIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gcHJlY2lzaW9uIHRvIGJlIGV4dGVuZGVkCit8Cit8IElucHV0OglvcGVyYW5kIGluIEVURU1QCit8IE91dHB1dDoJYSByZXN1bHQgaXMgaW4gRVRFTVAgKGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkKK3wKKwkuZ2xvYmFsCW92Zl9yX2sKK292Zl9yX2s6CisJbGVhCUVURU1QKCVhNiksJWEwCXxhMCBwb2ludHMgdG8gc291cmNlIG9wZXJhbmQKKwliY2xyYgkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorCXNuZQlFVEVNUF9TR04oJWE2KQl8Y29udmVydCB0byBpbnRlcm5hbCBJRUVFIGZvcm1hdAorCit8Cit8CW92Zl9yX3gyIC0tLSBvdmVyZmxvdyByZXN1bHQgY2FsY3VsYXRpb24KK3wKK3wgVGhpcyBlbnRyeSBwb2ludCB1c2VkIGJ5IHhfb3ZmbC4gIChvcGNsYXNzIDAgYW5kIDIpCit8Cit8IElucHV0CQlhMCAgcG9pbnRzIHRvIGFuIG9wZXJhbmQgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfCBPdXRwdXQJYTAgIHBvaW50cyB0byB0aGUgcmVzdWx0IGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3wgVGhpcyBzZXRzIHRoZSByb3VuZCBwcmVjaXNpb24gYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MgRlBDUiB1bmxlc3MgdGhlCit8IGluc3RydWN0aW9uIGlzIGZzZ2xkaXYgb3IgZnNnbG11bCBvciBmc2FkZCwgZmRhZGQsIGZzdWIsIGZkc3ViLCBmc211bCwKK3wgZmRtdWwsIGZzZGl2LCBmZGRpdiwgZnNzcXJ0LCBmc21vdmUsIGZkbW92ZSwgZnNhYnMsIGZkYWJzLCBmc25lZywgZmRuZWcuCit8IElmIHRoZSBpbnN0cnVjdGlvbiBpcyBmc2dsZGl2IG9mIGZzZ2xtdWwsIHRoZSByb3VuZGluZyBwcmVjaXNpb24gbXVzdCBiZQorfCBleHRlbmRlZC4gIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBub3QgZnNnbGRpdiBvciBmc2dsbXVsIGJ1dCBhIGZvcmNlLQorfCBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24sIHRoZSByb3VuZGluZyBwcmVjaXNpb24gaXMgdGhlbiBzZXQgdG8gdGhlIGZvcmNlCit8IHByZWNpc2lvbi4KKworCS5nbG9iYWwJb3ZmX3JfeDIKK292Zl9yX3gyOgorCWJ0c3RiCSNFMyxFX0JZVEUoJWE2KQkJfGNoZWNrIGZvciBudSBleGNlcHRpb24KKwliZXFsCW92Zl9lMV9leGMJCXxpdCBpcyBjdSBleGNlcHRpb24KK292Zl9lM19leGM6CisJbW92ZXcJQ01EUkVHM0IoJWE2KSwlZDAJCXxnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZGl3CSMweDAwMDAwMDYwLCVkMAkJfGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCA2IGFuZCA1CisJY21waWwJIzB4MDAwMDAwNDAsJWQwCisJYmVxbAlvdmZmX3NnbAkJfGZvcmNlIHByZWNpc2lvbiBpcyBzaW5nbGUKKwljbXBpbAkjMHgwMDAwMDA2MCwlZDAKKwliZXFsCW92ZmZfZGJsCQl8Zm9yY2UgcHJlY2lzaW9uIGlzIGRvdWJsZQorCW1vdmV3CUNNRFJFRzNCKCVhNiksJWQwCQl8Z2V0IHRoZSBjb21tYW5kIHdvcmQgYWdhaW4KKwlhbmRpbAkjMHg3ZiwlZDAJCQl8Y2xlYXIgYWxsIGV4Y2VwdCBvcGVyYXRpb24KKwljbXBpbAkjMHgzMywlZDAKKwliZXFsCW92Zl9mc2dsCQl8ZnNnbG11bCBvciBmc2dsZGl2CisJY21waWwJIzB4MzAsJWQwCisJYmVxbAlvdmZfZnNnbAorCWJyYQlvdmZfZnBjcgkJfGluc3RydWN0aW9uIGlzIG5vbmUgb2YgdGhlIGFib3ZlCit8CQkJCQk7dXNlIEZQQ1IKK292Zl9lMV9leGM6CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJCXxnZXQgY29tbWFuZCB3b3JkCisJYW5kaWwJIzB4MDAwMDAwNDQsJWQwCQl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IDYgYW5kIDIKKwljbXBpbAkjMHgwMDAwMDA0MCwlZDAKKwliZXFsCW92ZmZfc2dsCQl8dGhlIGluc3RydWN0aW9uIGlzIGZvcmNlIHNpbmdsZQorCWNtcGlsCSMweDAwMDAwMDQ0LCVkMAorCWJlcWwJb3ZmZl9kYmwJCXx0aGUgaW5zdHJ1Y3Rpb24gaXMgZm9yY2UgZG91YmxlCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJCXxhZ2FpbiBnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZGlsCSMweDAwMDAwMDdmLCVkMAkJfGNsZWFyIGFsbCBleGNlcHQgdGhlIG9wIGNvZGUKKwljbXBpbAkjMHgwMDAwMDAyNywlZDAKKwliZXFsCW92Zl9mc2dsCQl8ZnNnbG11bAorCWNtcGlsCSMweDAwMDAwMDI0LCVkMAorCWJlcWwJb3ZmX2ZzZ2wJCXxmc2dsZGl2CisJYnJhCW92Zl9mcGNyCQl8bm9uZSBvZiB0aGUgYWJvdmUsIHVzZSBGUENSCit8Cit8Cit8IEluc3QgaXMgZWl0aGVyIGZzZ2xkaXYgb3IgZnNnbG11bC4gIEZvcmNlIGV4dGVuZGVkIHByZWNpc2lvbi4KK3wKK292Zl9mc2dsOgorCWNscmwJJWQwCisJYnJhCW92Zl9yZXMKKworb3ZmZl9zZ2w6CisJbW92ZWwJIzB4MDAwMDAwMDEsJWQwCQl8c2V0IHNpbmdsZQorCWJyYQlvdmZfcmVzCitvdmZmX2RibDoKKwltb3ZlbAkjMHgwMDAwMDAwMiwlZDAJCXxzZXQgZG91YmxlCisJYnJhCW92Zl9yZXMKK3wKK3wgVGhlIHByZWNpc2lvbiBpcyBpbiB0aGUgZnBjci4KK3wKK292Zl9mcGNyOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwIHxzZXQgcm91bmQgcHJlY2lzaW9uCisJYnJhCW92Zl9yZXMKKworfAorfAorfAlvdmZfcl94MyAtLS0gb3ZlcmZsb3cgcmVzdWx0IGNhbGN1bGF0aW9uCit8Cit8IFRoaXMgZW50cnkgcG9pbnQgdXNlZCBieSB4X292ZmwuIChvcGNsYXNzIDMgb25seSkKK3wKK3wgSW5wdXQJCWEwICBwb2ludHMgdG8gYW4gb3BlcmFuZCBpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0Cit8IE91dHB1dAlhMCAgcG9pbnRzIHRvIHRoZSByZXN1bHQgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfAorfCBUaGlzIHNldHMgdGhlIHJvdW5kIHByZWNpc2lvbiBhY2NvcmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIHNpemUuCit8CisJLmdsb2JhbAlvdmZfcl94Mworb3ZmX3JfeDM6CisJYnNyCWdfZGZtdG91CXxnZXQgZGVzdCBmbXQgaW4gZDB7MTowfQorfAkJCQk7Zm9yIGZtb3ZvdXQsIHRoZSBkZXN0aW5hdGlvbiBmb3JtYXQKK3wJCQkJO2lzIHRoZSByb3VuZGluZyBwcmVjaXNpb24KKworfAorfAlvdmZfcmVzIC0tLSBvdmVyZmxvdyByZXN1bHQgY2FsY3VsYXRpb24KK3wKK3wgSW5wdXQ6Cit8CWEwCXBvaW50cyB0byBvcGVyYW5kIGluIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfCBPdXRwdXQ6Cit8CWEwCXBvaW50cyB0byByZXN1bHQgaW4gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0Cit8CisJLmdsb2JhbAlvdmZfcmVzCitvdmZfcmVzOgorCWxzbGwJIzIsJWQwCQl8bW92ZSByb3VuZCBwcmVjaXNpb24gdG8gZDB7MzoyfQorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxIHxzZXQgcm91bmQgbW9kZQorCW9ybAklZDEsJWQwCQl8aW5kZXggaXMgZm10Om1vZGUgaW4gZDB7MzowfQorCWxlYWwJdGJsb3ZmbCwlYTEJfGxvYWQgYTEgd2l0aCB0YWJsZSBhZGRyZXNzCisJbW92ZWwJJWExQCglZDA6bDo0KSwlYTEJfHVzZSBkMCBhcyBpbmRleCB0byB0aGUgdGFibGUKKwlqbXAJKCVhMSkJCXxnbyB0byB0aGUgY29ycmVjdCByb3V0aW5lCit8Cit8Y2FzZSBERVNUX0ZNVCA9IEVYVAorfAorRVhUX1JOOgorCWxlYWwJRVhUX1BJTkYsJWExCXxhbnN3ZXIgaXMgKy8tIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitFWFRfUlo6CisJbGVhbAlFWFRfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitFWFRfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVfcm1fcG9zCitlX3JtX25lZzoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIGluZmluaXR5CisJb3JsCSNuZWdpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQllbmRfb3ZmcgorZV9ybV9wb3M6CisJbGVhbAlFWFRfUExSRywlYTEJfGFuc3dlciBpcyBsYXJnZSBwb3NpdGl2ZSBudW1iZXIKKwlicmEJZW5kX292ZnIKK0VYVF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJZV9ycF9wb3MKK2VfcnBfbmVnOgorCWxlYWwJRVhUX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgbmVnYXRpdmUgbnVtYmVyCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF9vdmZyCitlX3JwX3BvczoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF9vdmZyCit8Cit8Y2FzZSBERVNUX0ZNVCA9IERCTAorfAorREJMX1JOOgorCWxlYWwJRVhUX1BJTkYsJWExCXxhbnN3ZXIgaXMgKy8tIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXNldF9zaWduCitEQkxfUlo6CisJbGVhbAlEQkxfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitEQkxfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWRfcm1fcG9zCitkX3JtX25lZzoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIGluZmluaXR5CisJb3JsCSNuZWdpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQllbmRfb3Zmcgl8aW5mIGlzIHNhbWUgZm9yIGFsbCBwcmVjaXNpb25zIChleHQsZGJsLHNnbCkKK2Rfcm1fcG9zOgorCWxlYWwJREJMX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVyCisJYnJhCWVuZF9vdmZyCitEQkxfUlA6CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWRfcnBfcG9zCitkX3JwX25lZzoKKwlsZWFsCURCTF9QTFJHLCVhMQl8YW5zd2VyIGlzIGxhcmdlIG5lZ2F0aXZlIG51bWJlcgorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfb3ZmcgorZF9ycF9wb3M6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBwb3NpdGl2ZSBpbmZpbml0eQorCWJzZXRiCSNpbmZfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfb3ZmcgorfAorfGNhc2UgREVTVF9GTVQgPSBTR0wKK3wKK1NHTF9STjoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzICsvLSAgaW5maW5pdHkKKwlic2V0YgkjaW5mX2JpdCxGUFNSX0NDKCVhNikKKwlicmFzCXNldF9zaWduCitTR0xfUlo6CisJbGVhbAlTR0xfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhcwlzZXRfc2lnbgorU0dMX1JNOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwlzX3JtX3Bvcworc19ybV9uZWc6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBuZWdhdGl2ZSBpbmZpbml0eQorCW9ybAkjbmVnaW5mX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmFzCWVuZF9vdmZyCitzX3JtX3BvczoKKwlsZWFsCVNHTF9QTFJHLCVhMQl8YW5zd2VyIGlzIGxhcmdlIHBvc2l0aXZlIG51bWJlcgorCWJyYXMJZW5kX292ZnIKK1NHTF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJc19ycF9wb3MKK3NfcnBfbmVnOgorCWxlYWwJU0dMX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgbmVnYXRpdmUgbnVtYmVyCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhcwllbmRfb3Zmcgorc19ycF9wb3M6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBwb3NpdGl2ZSBpbmZpbml0eQorCWJzZXRiCSNpbmZfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJZW5kX292ZnIKKworc2V0X3NpZ246CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVuZF9vdmZyCituZWdfc2lnbjoKKwlic2V0YgkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKworZW5kX292ZnI6CisJbW92ZXcJTE9DQUxfRVgoJWExKSxMT0NBTF9FWCglYTApIHxkbyBub3Qgb3ZlcndyaXRlIHNpZ24KKwltb3ZlbAlMT0NBTF9ISSglYTEpLExPQ0FMX0hJKCVhMCkKKwltb3ZlbAlMT0NBTF9MTyglYTEpLExPQ0FMX0xPKCVhMCkKKwlydHMKKworCit8Cit8CUVSUk9SCit8CitlcnJvcjoKKwlydHMKK3wKK3wJZ2V0X2ZsaW5lIC0tLSBnZXQgZi1saW5lIG9wY29kZSBvZiBpbnRlcnJ1cHRlZCBpbnN0cnVjdGlvbgorfAorfAlSZXR1cm5zIG9wY29kZSBpbiB0aGUgbG93IHdvcmQgb2YgZDAuCit8CitnZXRfZmxpbmU6CisJbW92ZWwJVVNFUl9GUElBUiglYTYpLCVhMAl8b3Bjb2RlIGFkZHJlc3MKKwltb3ZlbAkjMCwtKCVhNykJfHJlc2VydmUgYSB3b3JkIG9uIHRoZSBzdGFjaworCWxlYWwJMiglYTcpLCVhMQl8cG9pbnQgdG8gbG93IHdvcmQgb2YgdGVtcG9yYXJ5CisJbW92ZWwJIzIsJWQwCQl8Y291bnQKKwlic3JsCW1lbV9yZWFkCisJbW92ZWwJKCVhNykrLCVkMAorCXJ0cworfAorfAlnX3JuZHByIC0tLSBwdXQgcm91bmRpbmcgcHJlY2lzaW9uIGluIGQwezE6MH0KK3wKK3wJdmFsaWQgcmV0dXJuIGNvZGVzIGFyZToKK3wJCTAwIC0gZXh0ZW5kZWQKK3wJCTAxIC0gc2luZ2xlCit8CQkxMCAtIGRvdWJsZQorfAorfCBiZWdpbgorfCBnZXQgcm91bmRpbmcgcHJlY2lzaW9uIChjbWRyZWczYns2OjV9KQorfCBiZWdpbgorfCAgY2FzZQlvcGNsYXNzID0gMDExIChtb3ZlIG91dCkKK3wJZ2V0IGRlc3RpbmF0aW9uIGZvcm1hdCAtIHRoaXMgaXMgdGhlIGFsc28gdGhlIHJvdW5kaW5nIHByZWNpc2lvbgorfAorfCAgY2FzZQlvcGNsYXNzID0gMHgwCit8CWlmIEUzCit8CSAgICAqY2FzZSBSbmRQcihmcm9tIGNtZHJlZzNiezY6NX0gPSAxMSAgdGhlbiBSTkRfUFJFQyA9IERCTAorfAkgICAgKmNhc2UgUm5kUHIoZnJvbSBjbWRyZWczYns2OjV9ID0gMTAgIHRoZW4gUk5EX1BSRUMgPSBTR0wKK3wJICAgICBjYXNlIFJuZFByKGZyb20gY21kcmVnM2J7Njo1fSA9IDAwIHwgMDEKK3wJCXVzZSBwcmVjaXNpb24gZnJvbSBGUENSezc6Nn0KK3wJCQljYXNlIDAwIHRoZW4gUk5EX1BSRUMgPSBFWFQKK3wJCQljYXNlIDAxIHRoZW4gUk5EX1BSRUMgPSBTR0wKK3wJCQljYXNlIDEwIHRoZW4gUk5EX1BSRUMgPSBEQkwKK3wJZWxzZSBFMQorfAkgICAgIHVzZSBwcmVjaXNpb24gaW4gRlBDUns3OjZ9Cit8CSAgICAgY2FzZSAwMCB0aGVuIFJORF9QUkVDID0gRVhUCit8CSAgICAgY2FzZSAwMSB0aGVuIFJORF9QUkVDID0gU0dMCit8CSAgICAgY2FzZSAxMCB0aGVuIFJORF9QUkVDID0gREJMCit8IGVuZAorfAorZ19ybmRwcjoKKwlic3IJZ19vcGNscwkJfGdldCBvcGNsYXNzIGluIGQwezI6MH0KKwljbXB3CSMweDAwMDMsJWQwCXxjaGVjayBmb3Igb3BjbGFzcyAwMTEKKwlibmVzCW9wXzB4MAorCit8Cit8IEZvciBtb3ZlIG91dCBpbnN0cnVjdGlvbnMgKG9wY2xhc3MgMDExKSB0aGUgZGVzdGluYXRpb24gZm9ybWF0Cit8IGlzIHRoZSBzYW1lIGFzIHRoZSByb3VuZGluZyBwcmVjaXNpb24uICBQYXNzIHJlc3VsdHMgZnJvbSBnX2RmbXRvdS4KK3wKKwlic3IJZ19kZm10b3UKKwlydHMKK29wXzB4MDoKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFsCXVuZl9lMV9leGMJfGJyYW5jaCB0byBlMSB1bmRlcmZsb3cKK3VuZl9lM19leGM6CisJbW92ZWwJQ01EUkVHM0IoJWE2KSwlZDAJfHJvdW5kaW5nIHByZWNpc2lvbiBpbiBkMHsxMDo5fQorCWJmZXh0dQklZDB7Izk6IzJ9LCVkMAl8bW92ZSB0aGUgcm91bmRpbmcgcHJlYyBiaXRzIHRvIGQwezE6MH0KKwljbXBpbAkjMHgyLCVkMAorCWJlcWwJdW5mZl9zZ2wJfGZvcmNlIHByZWNpc2lvbiBpcyBzaW5nbGUKKwljbXBpbAkjMHgzLCVkMAkJfGZvcmNlIHByZWNpc2lvbiBpcyBkb3VibGUKKwliZXFsCXVuZmZfZGJsCisJbW92ZXcJQ01EUkVHM0IoJWE2KSwlZDAJfGdldCB0aGUgY29tbWFuZCB3b3JkIGFnYWluCisJYW5kaWwJIzB4N2YsJWQwCQl8Y2xlYXIgYWxsIGV4Y2VwdCBvcGVyYXRpb24KKwljbXBpbAkjMHgzMywlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsbXVsIG9yIGZzZ2xkaXYKKwljbXBpbAkjMHgzMCwlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsZGl2IG9yIGZzZ2xtdWwKKwlicmEJdW5mX2ZwY3IKK3VuZl9lMV9leGM6CisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCAzMiBiaXRzIG9mZiB0aGUgc3RhY2ssIDFzdCAxNiBiaXRzCit8CQkJCTthcmUgdGhlIGNvbW1hbmQgd29yZAorCWFuZGlsCSMweDAwNDQwMDAwLCVkMAl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IGJpdHMgNiBhbmQgMgorCWNtcGlsCSMweDAwNDAwMDAwLCVkMAorCWJlcWwJdW5mZl9zZ2wJfGZvcmNlIHNpbmdsZQorCWNtcGlsCSMweDAwNDQwMDAwLCVkMAl8Zm9yY2UgZG91YmxlCisJYmVxbAl1bmZmX2RibAorCW1vdmVsCUNNRFJFRzFCKCVhNiksJWQwCXxnZXQgdGhlIGNvbW1hbmQgd29yZCBhZ2FpbgorCWFuZGlsCSMweDAwN2YwMDAwLCVkMAl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IHRoZSBvcGVyYXRpb24KKwljbXBpbAkjMHgwMDI3MDAwMCwlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsbXVsCisJY21waWwJIzB4MDAyNDAwMDAsJWQwCisJYmVxbAl1bmZfZnNnbAl8ZnNnbGRpdgorCWJyYQl1bmZfZnBjcgorCit8Cit8IENvbnZlcnQgdG8gcmV0dXJuIGZvcm1hdC4gIFRoZSB2YWx1ZXMgZnJvbSBjbWRyZWczYiBhbmQgdGhlIHJldHVybgorfCB2YWx1ZXMgYXJlOgorfAljbWRyZWczYglyZXR1cm4JICAgICBwcmVjaXNpb24KK3wJLS0tLS0tLS0JLS0tLS0tCSAgICAgLS0tLS0tLS0tCit8CSAgMDAsMDEJCSAgMAkJZXh0Cit8CSAgIDEwCQkgIDEJCXNnbAorfAkgICAxMQkJICAyCQlkYmwKK3wgRm9yY2Ugc2luZ2xlCit8Cit1bmZmX3NnbDoKKwltb3ZlbAkjMSwlZDAJCXxyZXR1cm4gMQorCXJ0cworfAorfCBGb3JjZSBkb3VibGUKK3wKK3VuZmZfZGJsOgorCW1vdmVsCSMyLCVkMAkJfHJldHVybiAyCisJcnRzCit8Cit8IEZvcmNlIGV4dGVuZGVkCit8Cit1bmZfZnNnbDoKKwltb3ZlbAkjMCwlZDAKKwlydHMKK3wKK3wgR2V0IHJvdW5kaW5nIHByZWNpc2lvbiBzZXQgaW4gRlBDUns3OjZ9LgorfAordW5mX2ZwY3I6CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwIHxyb3VuZGluZyBwcmVjaXNpb24gYml0cyBpbiBkMHs3OjZ9CisJYmZleHR1CSVkMHsjMjQ6IzJ9LCVkMAl8bW92ZSB0aGUgcm91bmRpbmcgcHJlYyBiaXRzIHRvIGQwezE6MH0KKwlydHMKK3wKK3wJZ19vcGNscyAtLS0gcHV0IG9wY2xhc3MgaW4gZDB7MjowfQorfAorZ19vcGNsczoKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFzCW9wY18xYgkJfGlmIHNldCwgZ28gdG8gY21kcmVnMWIKK29wY18zYjoKKwljbHJsCSVkMAkJfGlmIEUzLCBvbmx5IG9wY2xhc3MgMHgwIGlzIHBvc3NpYmxlCisJcnRzCitvcGNfMWI6CisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAKKwliZmV4dHUJJWQweyMwOiMzfSwlZDAJfHNoaWZ0IG9wY2xhc3MgYml0cyBkMHszMToyOX0gdG8gZDB7MjowfQorCXJ0cworfAorfAlnX2RmbXRvdSAtLS0gcHV0IGRlc3RpbmF0aW9uIGZvcm1hdCBpbiBkMHsxOjB9Cit8Cit8CUlmIEUxLCB0aGUgZm9ybWF0IGlzIGZyb20gY21kcmVnMWJ7MTI6MTB9Cit8CUlmIEUzLCB0aGUgZm9ybWF0IGlzIGV4dGVuZGVkLgorfAorfAlEZXN0LiBGbXQuCit8CQlleHRlbmRlZCAgMDEwIC0+IDAwCit8CQlzaW5nbGUgICAgMDAxIC0+IDAxCit8CQlkb3VibGUgICAgMTAxIC0+IDEwCit8CitnX2RmbXRvdToKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFzCW9wMDExCisJY2xybAklZDAJCXxpZiBFMSwgc2l6ZSBpcyBhbHdheXMgZXh0CisJcnRzCitvcDAxMToKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWJmZXh0dQklZDB7IzM6IzN9LCVkMAl8ZGVzdCBmbXQgZnJvbSBjbWRyZWcxYnsxMjoxMH0KKwljbXBiCSMxLCVkMAkJfGNoZWNrIGZvciBzaW5nbGUKKwlibmVzCW5vdF9zZ2wKKwltb3ZlbAkjMSwlZDAKKwlydHMKK25vdF9zZ2w6CisJY21wYgkjNSwlZDAJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlub3RfZGJsCisJbW92ZWwJIzIsJWQwCisJcnRzCitub3RfZGJsOgorCWNscmwJJWQwCQl8bXVzdCBiZSBleHRlbmRlZAorCXJ0cworCit8Cit8Cit8IEZpbmFsIHJlc3VsdCB0YWJsZSBmb3IgdW5mX3N1Yi4gTm90ZSB0aGF0IHRoZSBuZWdhdGl2ZSBjb3VudGVycGFydHMKK3wgYXJlIHVubmVjZXNzYXJ5IGFzIHVuZl9zdWIgYWx3YXlzIHJldHVybnMgdGhlIHNpZ24gc2VwYXJhdGVseSBmcm9tCit8IHRoZSBleHBvbmVudC4KK3wJCQkJCTsremVybworRVhUX1BaUk86CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTsremVybworU0dMX1BaUk86CS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTsremVybworREJMX1BaUk86CS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArZXh0IGRlbm9ybQorRVhUX1BTTUw6CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArc2dsIGRlbm9ybQorU0dMX1BTTUw6CS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDEwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArZGJsIGRlbm9ybQorREJMX1BTTUw6CS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwODAwLDB4MDAwMDAwMDAKK3wKK3wJVU5GX1NVQiAtLS0gdW5kZXJmbG93IHJlc3VsdCBjYWxjdWxhdGlvbgorfAorfCBJbnB1dDoKK3wJZDAJY29udGFpbnMgcm91bmQgcHJlY2lzaW9uCit8CWEwCXBvaW50cyB0byBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3wgT3V0cHV0OgorfAlhMAlwb2ludHMgdG8gY29ycmVjdCBpbnRlcm5hbCBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0LgorfAorCit0Ymx1bmY6CisJLmxvbmcJdUVYVF9STgorCS5sb25nCXVFWFRfUloKKwkubG9uZwl1RVhUX1JNCisJLmxvbmcJdUVYVF9SUAorCS5sb25nCXVTR0xfUk4KKwkubG9uZwl1U0dMX1JaCisJLmxvbmcJdVNHTF9STQorCS5sb25nCXVTR0xfUlAKKwkubG9uZwl1REJMX1JOCisJLmxvbmcJdURCTF9SWgorCS5sb25nCXVEQkxfUk0KKwkubG9uZwl1REJMX1JQCisJLmxvbmcJdURCTF9STgorCS5sb25nCXVEQkxfUloKKwkubG9uZwl1REJMX1JNCisJLmxvbmcJdURCTF9SUAorCisJLmdsb2JhbAl1bmZfc3ViCit1bmZfc3ViOgorCWxzbGwJIzIsJWQwCQl8bW92ZSByb3VuZCBwcmVjaXNpb24gdG8gZDB7MzoyfQorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxIHxzZXQgcm91bmQgbW9kZQorCW9ybAklZDEsJWQwCQl8aW5kZXggaXMgZm10Om1vZGUgaW4gZDB7MzowfQorCWxlYWwJdGJsdW5mLCVhMQl8bG9hZCBhMSB3aXRoIHRhYmxlIGFkZHJlc3MKKwltb3ZlbAklYTFAKCVkMDpsOjQpLCVhMQl8dXNlIGQwIGFzIGluZGV4IHRvIHRoZSB0YWJsZQorCWptcAkoJWExKQkJfGdvIHRvIHRoZSBjb3JyZWN0IHJvdXRpbmUKK3wKK3xjYXNlIERFU1RfRk1UID0gRVhUCit8Cit1RVhUX1JOOgorCWxlYWwJRVhUX1BaUk8sJWExCXxhbnN3ZXIgaXMgKy8tIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXVzZXRfc2lnbgl8bm93IGdvIHNldCB0aGUgc2lnbgordUVYVF9SWjoKKwlsZWFsCUVYVF9QWlJPLCVhMQl8YW5zd2VyIGlzICsvLSB6ZXJvCisJYnNldGIJI3pfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQl1c2V0X3NpZ24JfG5vdyBnbyBzZXQgdGhlIHNpZ24KK3VFWFRfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgdW5kZXJmbG93CisJYmVxcwl1ZV9ybV9wb3MKK3VlX3JtX25lZzoKKwlsZWFsCUVYVF9QU01MLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHNtYWxsZXN0IGRlbm9ybQorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfdW5mcgordWVfcm1fcG9zOgorCWxlYWwJRVhUX1BaUk8sJWExCXxhbnN3ZXIgaXMgcG9zaXRpdmUgemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmEJZW5kX3VuZnIKK3VFWFRfUlA6CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgdW5kZXJmbG93CisJYmVxcwl1ZV9ycF9wb3MKK3VlX3JwX25lZzoKKwlsZWFsCUVYVF9QWlJPLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHplcm8KKwlvcmlsCSNuZWd6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZW5kX3VuZnIKK3VlX3JwX3BvczoKKwlsZWFsCUVYVF9QU01MLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHNtYWxsZXN0IGRlbm9ybQorCWJyYQllbmRfdW5mcgorfAorfGNhc2UgREVTVF9GTVQgPSBEQkwKK3wKK3VEQkxfUk46CisJbGVhbAlEQkxfUFpSTywlYTEJfGFuc3dlciBpcyArLy0gemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmEJdXNldF9zaWduCit1REJMX1JaOgorCWxlYWwJREJMX1BaUk8sJWExCXxhbnN3ZXIgaXMgKy8tIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXVzZXRfc2lnbgl8bm93IGdvIHNldCB0aGUgc2lnbgordURCTF9STToKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJdWRfcm1fcG9zCit1ZF9ybV9uZWc6CisJbGVhbAlEQkxfUFNNTCwlYTEJfGFuc3dlciBpcyBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbmVnYXRpdmUKKwlic2V0YgkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKwlicmEJZW5kX3VuZnIKK3VkX3JtX3BvczoKKwlsZWFsCURCTF9QWlJPLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF91bmZyCit1REJMX1JQOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwl1ZF9ycF9wb3MKK3VkX3JwX25lZzoKKwlsZWFsCURCTF9QWlJPLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHplcm8KKwlvcmlsCSNuZWd6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZW5kX3VuZnIKK3VkX3JwX3BvczoKKwlsZWFsCURCTF9QU01MLCVhMQl8YW5zd2VyIGlzIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBuZWdhdGl2ZQorCWJyYQllbmRfdW5mcgorfAorfGNhc2UgREVTVF9GTVQgPSBTR0wKK3wKK3VTR0xfUk46CisJbGVhbAlTR0xfUFpSTywlYTEJfGFuc3dlciBpcyArLy0gemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmFzCXVzZXRfc2lnbgordVNHTF9SWjoKKwlsZWFsCVNHTF9QWlJPLCVhMQl8YW5zd2VyIGlzICsvLSB6ZXJvCisJYnNldGIJI3pfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJdXNldF9zaWduCit1U0dMX1JNOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwl1c19ybV9wb3MKK3VzX3JtX25lZzoKKwlsZWFsCVNHTF9QU01MLCVhMQl8YW5zd2VyIGlzIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBuZWdhdGl2ZQorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJZW5kX3VuZnIKK3VzX3JtX3BvczoKKwlsZWFsCVNHTF9QWlJPLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhcwllbmRfdW5mcgordVNHTF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJdXNfcnBfcG9zCit1c19ycF9uZWc6CisJbGVhbAlTR0xfUFpSTywlYTEJfGFuc3dlciBpcyBuZWdhdGl2ZSB6ZXJvCisJb3JpbAkjbmVnel9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhcwllbmRfdW5mcgordXNfcnBfcG9zOgorCWxlYWwJU0dMX1BTTUwsJWExCXxhbnN3ZXIgaXMgc21hbGxlc3QgZGVub3JtYWxpemVkIHBvc2l0aXZlCisJYnJhcwllbmRfdW5mcgorCit1c2V0X3NpZ246CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVuZF91bmZyCit1bmVnX3NpZ246CisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisKK2VuZF91bmZyOgorCW1vdmV3CUxPQ0FMX0VYKCVhMSksTE9DQUxfRVgoJWEwKSB8YmUgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIHNpZ24KKwltb3ZlbAlMT0NBTF9ISSglYTEpLExPQ0FMX0hJKCVhMCkKKwltb3ZlbAlMT0NBTF9MTyglYTEpLExPQ0FMX0xPKCVhMCkKKwlydHMKK3wKK3wJcmVnX2Rlc3QgLS0tIHdyaXRlIGJ5dGUsIHdvcmQsIG9yIGxvbmcgZGF0YSB0byBEbgorfAorfAorfCBJbnB1dDoKK3wJTF9TQ1IxOiBEYXRhCit8CWQxOiAgICAgZGF0YSBzaXplIGFuZCBkZXN0IHJlZ2lzdGVyIG51bWJlciBmb3JtYXR0ZWQgYXM6Cit8Cit8CTMyCQk1ICAgIDQgICAgIDMgICAgIDIgICAgIDEgICAgIDAKK3wgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgICAgfCAgICAgICAgMCAgICAgICAgfCAgICBTaXplICAgfCAgRGVzdCBSZWcgIyAgIHwKK3wgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJU2l6ZSBpczoKK3wJCTAgLSBCeXRlCit8CQkxIC0gV29yZAorfAkJMiAtIExvbmcvU2luZ2xlCit8CitwcmVnZHN0OgorCS5sb25nCWJ5dGVfZDAKKwkubG9uZwlieXRlX2QxCisJLmxvbmcJYnl0ZV9kMgorCS5sb25nCWJ5dGVfZDMKKwkubG9uZwlieXRlX2Q0CisJLmxvbmcJYnl0ZV9kNQorCS5sb25nCWJ5dGVfZDYKKwkubG9uZwlieXRlX2Q3CisJLmxvbmcJd29yZF9kMAorCS5sb25nCXdvcmRfZDEKKwkubG9uZwl3b3JkX2QyCisJLmxvbmcJd29yZF9kMworCS5sb25nCXdvcmRfZDQKKwkubG9uZwl3b3JkX2Q1CisJLmxvbmcJd29yZF9kNgorCS5sb25nCXdvcmRfZDcKKwkubG9uZwlsb25nX2QwCisJLmxvbmcJbG9uZ19kMQorCS5sb25nCWxvbmdfZDIKKwkubG9uZwlsb25nX2QzCisJLmxvbmcJbG9uZ19kNAorCS5sb25nCWxvbmdfZDUKKwkubG9uZwlsb25nX2Q2CisJLmxvbmcJbG9uZ19kNworCityZWdfZGVzdDoKKwlsZWFsCXByZWdkc3QsJWEwCisJbW92ZWwJJWEwQCglZDE6bDo0KSwlYTAKKwlqbXAJKCVhMCkKKworYnl0ZV9kMDoKKwltb3ZlYglMX1NDUjEoJWE2KSxVU0VSX0QwKzMoJWE2KQorCXJ0cworYnl0ZV9kMToKKwltb3ZlYglMX1NDUjEoJWE2KSxVU0VSX0QxKzMoJWE2KQorCXJ0cworYnl0ZV9kMjoKKwltb3ZlYglMX1NDUjEoJWE2KSwlZDIKKwlydHMKK2J5dGVfZDM6CisJbW92ZWIJTF9TQ1IxKCVhNiksJWQzCisJcnRzCitieXRlX2Q0OgorCW1vdmViCUxfU0NSMSglYTYpLCVkNAorCXJ0cworYnl0ZV9kNToKKwltb3ZlYglMX1NDUjEoJWE2KSwlZDUKKwlydHMKK2J5dGVfZDY6CisJbW92ZWIJTF9TQ1IxKCVhNiksJWQ2CisJcnRzCitieXRlX2Q3OgorCW1vdmViCUxfU0NSMSglYTYpLCVkNworCXJ0cword29yZF9kMDoKKwltb3ZldwlMX1NDUjEoJWE2KSxVU0VSX0QwKzIoJWE2KQorCXJ0cword29yZF9kMToKKwltb3ZldwlMX1NDUjEoJWE2KSxVU0VSX0QxKzIoJWE2KQorCXJ0cword29yZF9kMjoKKwltb3ZldwlMX1NDUjEoJWE2KSwlZDIKKwlydHMKK3dvcmRfZDM6CisJbW92ZXcJTF9TQ1IxKCVhNiksJWQzCisJcnRzCit3b3JkX2Q0OgorCW1vdmV3CUxfU0NSMSglYTYpLCVkNAorCXJ0cword29yZF9kNToKKwltb3ZldwlMX1NDUjEoJWE2KSwlZDUKKwlydHMKK3dvcmRfZDY6CisJbW92ZXcJTF9TQ1IxKCVhNiksJWQ2CisJcnRzCit3b3JkX2Q3OgorCW1vdmV3CUxfU0NSMSglYTYpLCVkNworCXJ0cworbG9uZ19kMDoKKwltb3ZlbAlMX1NDUjEoJWE2KSxVU0VSX0QwKCVhNikKKwlydHMKK2xvbmdfZDE6CisJbW92ZWwJTF9TQ1IxKCVhNiksVVNFUl9EMSglYTYpCisJcnRzCitsb25nX2QyOgorCW1vdmVsCUxfU0NSMSglYTYpLCVkMgorCXJ0cworbG9uZ19kMzoKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDMKKwlydHMKK2xvbmdfZDQ6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQ0CisJcnRzCitsb25nX2Q1OgorCW1vdmVsCUxfU0NSMSglYTYpLCVkNQorCXJ0cworbG9uZ19kNjoKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDYKKwlydHMKK2xvbmdfZDc6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQ3CisJcnRzCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9ic3VuLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X2JzdW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzkyNDdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9ic3VuLlMKQEAgLTAsMCArMSw0NyBAQAorfAorfAl4X2JzdW4uc2EgMy4zIDcvMS85MQorfAorfAlmcHNwX2JzdW4gLS0tIEZQU1AgaGFuZGxlciBmb3IgYnJhbmNoL3NldCBvbiB1bm9yZGVyZWQgZXhjZXB0aW9uCit8Cit8CUNvcHkgdGhlIFBDIHRvIEZQSUFSIHRvIG1haW50YWluIDg4MS84ODIgY29tcGF0aWJpbGl0eQorfAorfAlUaGUgcmVhbF9ic3VuIGhhbmRsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gZnVydGhlciBjb3JyZWN0aXZlCit8CW1lYXN1cmVzIGFzIG91dGxpbmVkIGluIHRoZSAwNDAgVXNlcidzIE1hbnVhbCBvbiBwYWdlcworfAk5LTQxZiwgc2VjdGlvbiA5LjguMy4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9CU1VOOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJcmVhbF9ic3VuCisKKwkuZ2xvYmFsCWZwc3BfYnN1bgorZnBzcF9ic3VuOgorfAorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglYTcpCisJbW92ZW1sCQklZDAtJWQxLyVhMC0lYTEsVVNFUl9EQSglYTYpCisJZm1vdmVteAklZnAwLSVmcDMsVVNFUl9GUDAoJWE2KQorCWZtb3ZlbWwJJWZwY3IvJWZwc3IvJWZwaWFyLFVTRVJfRlBDUiglYTYpCisKK3wKKwltb3ZlbAkJRVhDX1BDKCVhNiksVVNFUl9GUElBUiglYTYpCit8CisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF9ic3VuCit8CisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9mbGluZS5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9mbGluZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTc3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X2ZsaW5lLlMKQEAgLTAsMCArMSwxMDQgQEAKK3wKK3wJeF9mbGluZS5zYSAzLjMgMS8xMC85MQorfAorfAlmcHNwX2ZsaW5lIC0tLSBGUFNQIGhhbmRsZXIgZm9yIGZsaW5lIGV4Y2VwdGlvbgorfAorfAlGaXJzdCBkZXRlcm1pbmUgaWYgdGhlIGV4Y2VwdGlvbiBpcyBvbmUgb2YgdGhlIHVuaW1wbGVtZW50ZWQKK3wJZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgSWYgc28sIGxldCBmcHNwX3VuaW1wIGhhbmRsZSBpdC4KK3wJTmV4dCwgZGV0ZXJtaW5lIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBhbiBmbW92ZWNyIHdpdGggYSBub24temVybworfAk8ZWE+IGZpZWxkLiAgSWYgc28sIGhhbmRsZSBoZXJlIGFuZCByZXR1cm4uICBPdGhlcndpc2UsIGl0Cit8CW11c3QgYmUgYSByZWFsIEYtbGluZSBleGNlcHRpb24uCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1hfRkxJTkU6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglyZWFsX2ZsaW5lCisJfHhyZWYJZnBzcF91bmltcAorCXx4cmVmCXVuaV8yCisJfHhyZWYJbWVtX3JlYWQKKwl8eHJlZglmcHNwX2ZtdF9lcnJvcgorCisJLmdsb2JhbAlmcHNwX2ZsaW5lCitmcHNwX2ZsaW5lOgorfAorfAljaGVjayBmb3IgdW5pbXBsZW1lbnRlZCB2ZWN0b3IgZmlyc3QuICBVc2UgRVhDX1ZFQy00IGJlY2F1c2UKK3wJdGhlIGVxdWF0ZSBpcyB2YWxpZCBvbmx5IGFmdGVyIGEgJ2xpbmsgYTYnIGhhcyBwdXNoZWQgb25lIG1vcmUKK3wJbG9uZyBvbnRvIHRoZSBzdGFjay4KK3wKKwljbXB3CSNVTklNUF9WRUMsRVhDX1ZFQy00KCVhNykKKwliZXFsCWZwc3BfdW5pbXAKKworfAorfAlmbW92ZWNyIHdpdGggbm9uLXplcm8gPGVhPiBoYW5kbGluZyBoZXJlCit8CisJc3VibAkjNCwlYTcJCXw0IGFjY291bnRzIGZvciAyLXdvcmQgZGlmZmVyZW5jZQorfAkJCQk7YmV0d2VlbiBzaXggd29yZCBmcmFtZSAodW5pbXApIGFuZAorfAkJCQk7Zm91ciB3b3JkIGZyYW1lCisJbGluawklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJLSglYTcpCisJbW92ZW1sCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwltb3ZlYWwJRVhDX1BDKzQoJWE2KSwlYTAJfGdldCBhZGRyZXNzIG9mIGZsaW5lIGluc3RydWN0aW9uCisJbGVhbAlMX1NDUjEoJWE2KSwlYTEJfHVzZSBMX1NDUjEgYXMgc2NyYXRjaAorCW1vdmVsCSM0LCVkMAorCWFkZGwJIzQsJWE2CQl8dG8gb2Zmc2V0IHRoZSBzdWIubCAjNCxhNyBhYm92ZSBzbyB0aGF0Cit8CQkJCTthNiBjYW4gcG9pbnQgY29ycmVjdGx5IHRvIHRoZSBzdGFjayBmcmFtZQorfAkJCQk7YmVmb3JlIGJyYW5jaGluZyB0byBtZW1fcmVhZAorCWJzcmwJbWVtX3JlYWQKKwlzdWJsCSM0LCVhNgorCW1vdmVsCUxfU0NSMSglYTYpLCVkMAl8ZDAgY29udGFpbnMgdGhlIGZsaW5lIGFuZCBjb21tYW5kIHdvcmQKKwliZmV4dHUJJWQweyM0OiMzfSwlZDEJfGV4dHJhY3QgY29wcm9jZXNzb3IgaWQKKwljbXBpYgkjMSwlZDEJCXxjaGVjayBpZiBjcGlkPTEKKwlibmUJbm90X212Y3IJfGV4aXQgaWYgbm90CisJYmZleHR1CSVkMHsjMTY6IzZ9LCVkMQorCWNtcGliCSMweDE3LCVkMQkJfGNoZWNrIGlmIGl0IGlzIGFuIEZNT1ZFQ1IgZW5jb2RpbmcKKwlibmUJbm90X212Y3IKK3wJCQkJO2lmIGFuIEZNT1ZFQ1IgaW5zdHJ1Y3Rpb24sIGZpeCBzdGFjaworfAkJCQk7YW5kIGdvIHRvIEZQU1BfVU5JTVAKK2ZpeF9zdGFjazoKKwljbXBpYgkjVkVSXzQwLCglYTcpCXx0ZXN0IGZvciBvcmlnIHVuaW1wIGZyYW1lCisJYm5lcwlja19yZXYKKwlzdWJsCSNVTklNUF80MF9TSVpFLTQsJWE3IHxlbXVsYXRlIGFuIG9yaWcgZnNhdmUKKwltb3ZlYgkjVkVSXzQwLCglYTcpCisJbW92ZWIJI1VOSU1QXzQwX1NJWkUtNCwxKCVhNykKKwljbHJ3CTIoJWE3KQorCWJyYXMJZml4X2NvbgorY2tfcmV2OgorCWNtcGliCSNWRVJfNDEsKCVhNykJfHRlc3QgZm9yIHJldiB1bmltcCBmcmFtZQorCWJuZWwJZnBzcF9mbXRfZXJyb3IJfGlmIG5vdCAkNDAgb3IgJDQxLCBleGl0IHdpdGggZXJyb3IKKwlzdWJsCSNVTklNUF80MV9TSVpFLTQsJWE3IHxlbXVsYXRlIGEgcmV2IGZzYXZlCisJbW92ZWIJI1ZFUl80MSwoJWE3KQorCW1vdmViCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCisJY2xydwkyKCVhNykKK2ZpeF9jb246CisJbW92ZXcJRVhDX1NSKzQoJWE2KSxFWENfU1IoJWE2KSB8bW92ZSBzdGFja2VkIHNyIHRvIG5ldyBwb3NpdGlvbgorCW1vdmVsCUVYQ19QQys0KCVhNiksRVhDX1BDKCVhNikgfG1vdmUgc3RhY2tlZCBwYyB0byBuZXcgcG9zaXRpb24KKwlmbW92ZWwJRVhDX1BDKCVhNiksJUZQSUFSIHxwb2ludCBGUElBUiB0byBmbGluZSBpbnN0CisJbW92ZWwJIzQsJWQxCisJYWRkbAklZDEsRVhDX1BDKCVhNikJfGluY3JlbWVudCBzdGFja2VkIHBjIHZhbHVlIHRvIG5leHQgaW5zdAorCW1vdmV3CSMweDIwMmMsRVhDX1ZFQyglYTYpIHxyZWZvcm1hdCB2ZWN0b3IgdG8gdW5pbXAKKwljbHJsCUVYQ19FQSglYTYpCXxjbGVhciB0aGUgRVhDX0VBIGZpZWxkCisJbW92ZXcJJWQwLENNRFJFRzFCKCVhNikgfG1vdmUgdGhlIGxvd2VyIHdvcmQgaW50byBDTURSRUcxQgorCWNscmwJRV9CWVRFKCVhNikKKwlic2V0YgkjVUZMQUcsVF9CWVRFKCVhNikKKwltb3ZlbWwJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMSB8cmVzdG9yZSBkYXRhIHJlZ2lzdGVycworCWJyYWwJdW5pXzIKKworbm90X212Y3I6CisJbW92ZW1sCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEgfHJlc3RvcmUgZGF0YSByZWdpc3RlcnMKKwlmcmVzdG9yZSAoJWE3KSsKKwl1bmxrCSVhNgorCWFkZGwJIzQsJWE3CisJYnJhbAlyZWFsX2ZsaW5lCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X29wZXJyLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X29wZXJyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNTRiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfb3BlcnIuUwpAQCAtMCwwICsxLDM1NiBAQAorfAorfAl4X29wZXJyLnNhIDMuNSA3LzEvOTEKK3wKK3wJZnBzcF9vcGVyciAtLS0gRlBTUCBoYW5kbGVyIGZvciBvcGVyYW5kIGVycm9yIGV4Y2VwdGlvbgorfAorfAlTZWUgNjgwNDAgVXNlcidzIE1hbnVhbCBwcC4gOS00NGYKK3wKK3wgTm90ZSAxOiBGb3IgdHJhcCBkaXNhYmxlZCAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgZGVzdCBpcyBhIGZwIHJlZywgdGhlbiBhbiBleHRlbmRlZCBwcmVjaXNpb24gbm9uX3NpZ25hbGluZworfCBOQU4gaXMgc3RvcmVkIGluIHRoZSBkZXN0IHJlZy4gIElmIHRoZSBkZXN0IGZvcm1hdCBpcyBiLCB3LCBvciBsIGFuZAorfCB0aGUgc291cmNlIG9wIGlzIGEgTkFOLCB0aGVuIGdhcmJhZ2UgaXMgc3RvcmVkIGFzIHRoZSByZXN1bHQgKGFjdHVhbGx5Cit8IHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBtYW50aXNzYSBhcmUgc2VudCB0byB0aGUgaW50ZWdlciB1bml0KS4gSWYKK3wgdGhlIGRlc3QgZm9ybWF0IGlzIGludGVnZXIgKGIsIHcsIGwpIGFuZCB0aGUgb3BlcnIgaXMgY2F1c2VkIGJ5Cit8IGludGVnZXIgb3ZlcmZsb3csIG9yIHRoZSBzb3VyY2Ugb3AgaXMgaW5mLCB0aGVuIHRoZSByZXN1bHQgc3RvcmVkIGlzCit8IGdhcmJhZ2UuCit8IFRoZXJlIGFyZSB0aHJlZSBjYXNlcyBpbiB3aGljaCBvcGVyciBpcyBpbmNvcnJlY3RseSBzaWduYWxlZCBvbiB0aGUKK3wgMDQwLiAgVGhpcyBvY2N1cnMgZm9yIG1vdmVfb3V0IG9mIGZvcm1hdCBiLCB3LCBvciBsIGZvciB0aGUgbGFyZ2VzdAorfCBuZWdhdGl2ZSBpbnRlZ2VyICgtMl43IGZvciBiLCAtMl4xNSBmb3IgdywgLTJeMzEgZm9yIGwpLgorfAorfAkgIE9uIG9wY2xhc3MgPSAwMTEgZm1vdmUuKGIsdyxsKSB0aGF0IGNhdXNlcyBhIGNvbnZlcnNpb24KK3wJICBvdmVyZmxvdyAtPiBPUEVSUiwgdGhlIGV4cG9uZW50IGluIHdidGUgKGFuZCBmcHRlKSBpczoKK3wJCWJ5dGUgICAgNTYgLSAoNjIgLSBleHApCit8CQl3b3JkICAgIDQ4IC0gKDYyIC0gZXhwKQorfAkJbG9uZyAgICAzMiAtICg2MiAtIGV4cCkKK3wKK3wJCQl3aGVyZSBleHAgPSAodHJ1ZSBleHApIC0gMQorfAorfCAgU28sIHdidGVtcCBhbmQgZnB0ZW1wIHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nIG9uIGVycm9uZW91c2x5Cit8CSAgc2lnbmFsbGVkIG9wZXJyOgorfAkJCWZwdHMgPSAxCit8CQkJZnB0ZSA9ICQ0MDAwICAoMTUgYml0IGV4dGVybmFsbHkpCit8CQlieXRlCWZwdG0gPSAkZmZmZmZmZmYgZmZmZmZmODAKK3wJCXdvcmQJZnB0bSA9ICRmZmZmZmZmZiBmZmZmODAwMAorfAkJbG9uZwlmcHRtID0gJGZmZmZmZmZmIDgwMDAwMDAwCit8Cit8IE5vdGUgMjogRm9yIHRyYXAgZW5hYmxlZCAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgaW5zdCBpcyBtb3ZlX291dCwgdGhlbiBzYW1lIGFzIE5vdGUgMS4KK3wgSWYgdGhlIGluc3QgaXMgbm90IG1vdmVfb3V0LCB0aGUgZGVzdCBpcyBub3QgbW9kaWZpZWQuCit8IFRoZSBleGNlcHRpb25hbCBvcGVyYW5kIGlzIG5vdCBkZWZpbmVkIGZvciBpbnRlZ2VyIG92ZXJmbG93Cit8IGR1cmluZyBhIG1vdmVfb3V0LgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCitYX09QRVJSOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbWVtX3dyaXRlCisJfHhyZWYJcmVhbF9vcGVycgorCXx4cmVmCXJlYWxfaW5leAorCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCWZwc3BfZG9uZQorCXx4cmVmCXJlZ19kZXN0CisKKwkuZ2xvYmFsCWZwc3Bfb3BlcnIKK2Zwc3Bfb3BlcnI6Cit8CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKworfAorfCBDaGVjayBpZiB0aGlzIGlzIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbi4KK3wgIElmIHNvLCBmYWxsIHRocm91Z2gsIGVsc2UgYnJhbmNoIHRvIG9wZXJyX2VuZAorfAorCWJ0c3RiCSNURkxBRyxUX0JZVEUoJWE2KQorCWJlcXMJb3BlcnJfZW5kCisKK3wKK3wgSWYgdGhlIGRlc3RpbmF0aW9uIHNpemUgaXMgQixXLG9yIEwsIHRoZSBvcGVyciBtdXN0IGJlCit8IGhhbmRsZWQgaGVyZS4KK3wKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWJmZXh0dQklZDB7IzM6IzN9LCVkMAl8MD1sb25nLCA0PXdvcmQsIDY9Ynl0ZQorCWNtcGliCSMwLCVkMAkJfGRldGVybWluZSBzaXplOyBjaGVjayBsb25nCisJYmVxCW9wZXJyX2xvbmcKKwljbXBpYgkjNCwlZDAJCXxjaGVjayB3b3JkCisJYmVxCW9wZXJyX3dvcmQKKwljbXBpYgkjNiwlZDAJCXxjaGVjayBieXRlCisJYmVxCW9wZXJyX2J5dGUKKworfAorfCBUaGUgc2l6ZSBpcyBub3QgQixXLG9yIEwsIHNvIHRoZSBvcGVyciBpcyBoYW5kbGVkIGJ5IHRoZQorfCBrZXJuZWwgaGFuZGxlci4gIFNldCB0aGUgb3BlcnIgYml0cyBhbmQgY2xlYW4gdXAsIGxlYXZpbmcKK3wgb25seSB0aGUgaW50ZWdlciBleGNlcHRpb24gZnJhbWUgb24gdGhlIHN0YWNrLCBhbmQgdGhlCit8IGZwdSBpbiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uYWwgc3RhdGUuCit8CitvcGVycl9lbmQ6CisJYnNldGIJCSNvcGVycl9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJzZXRiCQkjYWlvcF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKKworCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfb3BlcnIKKworb3BlcnJfbG9uZzoKKwltb3ZlcWwJIzQsJWQxCQl8d3JpdGUgc2l6ZSB0byBkMQorCW1vdmViCVNUQUcoJWE2KSwlZDAJfHRlc3Qgc3RhZyBmb3IgbmFuCisJYW5kaWIJIzB4ZTAsJWQwCQl8Y2xyIGFsbCBidXQgdGFnCisJY21waWIJIzB4NjAsJWQwCQl8Y2hlY2sgZm9yIG5hbgorCWJlcQlvcGVycl9uYW4KKwljbXBpbAkjMHg4MDAwMDAwMCxGUFRFTVBfTE8oJWE2KSB8dGVzdCBpZiBscyBsd29yZCBpcyBzcGVjaWFsCisJYm5lcwljaGtsZXJyCQl8aWYgbm90IGVxdWFsLCBjaGVjayBmb3IgaW5jb3JyZWN0IG9wZXJyCisJYnNyCWNoZWNrX3VwcGVyCXxjaGVjayBpZiBleHAgYW5kIG1zIG1hbnQgYXJlIHNwZWNpYWwKKwl0c3RsCSVkMAorCWJuZXMJY2hrbGVycgkJfGlmIGQwIGlzIHRydWUsIGNoZWNrIGZvciBpbmNvcnJlY3Qgb3BlcnIKKwltb3ZlbAkjMHg4MDAwMDAwMCwlZDAJfHN0b3JlIHNwZWNpYWwgY2FzZSByZXN1bHQKKwlic3IJb3BlcnJfc3RvcmUKKwlicmEJbm90X2VuYWJsZWQJfGNsZWFuIGFuZCBleGl0Cit8Cit8CUNIRUNLIEZPUiBJTkNPUlJFQ1RMWSBHRU5FUkFURUQgT1BFUlIgRVhDRVBUSU9OIEhFUkUKK3wKK2Noa2xlcnI6CisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQwCisJYW5kdwkjMHg3RkZGLCVkMAl8aWdub3JlIHNpZ24gYml0CisJY21wdwkjMHgzRkZFLCVkMAl8dGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZSBleHBvbmVudCB2YWx1ZQorCWJuZXMJY2hrbGVycjIKK2ZpeGxvbmc6CisJbW92ZWwJRlBURU1QX0xPKCVhNiksJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCitjaGtsZXJyMjoKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmR3CSMweDdGRkYsJWQwCXxpZ25vcmUgc2lnbiBiaXQKKwljbXB3CSMweDQwMDAsJWQwCisJYmNjCXN0b3JlX21heAl8ZXhwb25lbnQgb3V0IG9mIHJhbmdlCisKKwltb3ZlbAlGUFRFTVBfTE8oJWE2KSwlZDAKKwlhbmRsCSMweDdGRkYwMDAwLCVkMAl8bG9vayBmb3IgYWxsIDEncyBvbiBiaXRzIDMwLTE2CisJY21wbAkjMHg3RkZGMDAwMCwlZDAKKwliZXFzCWZpeGxvbmcKKworCXRzdGwJRlBURU1QX0xPKCVhNikKKwlicGxzCWNoa2xlcG9zCisJY21wbAkjMHhGRkZGRkZGRixGUFRFTVBfSEkoJWE2KQorCWJlcXMJZml4bG9uZworCWJyYQlzdG9yZV9tYXgKK2Noa2xlcG9zOgorCXRzdGwJRlBURU1QX0hJKCVhNikKKwliZXFzCWZpeGxvbmcKKwlicmEJc3RvcmVfbWF4CisKK29wZXJyX3dvcmQ6CisJbW92ZXFsCSMyLCVkMQkJfHdyaXRlIHNpemUgdG8gZDEKKwltb3ZlYglTVEFHKCVhNiksJWQwCXx0ZXN0IHN0YWcgZm9yIG5hbgorCWFuZGliCSMweGUwLCVkMAkJfGNsciBhbGwgYnV0IHRhZworCWNtcGliCSMweDYwLCVkMAkJfGNoZWNrIGZvciBuYW4KKwliZXEJb3BlcnJfbmFuCisJY21waWwJIzB4ZmZmZjgwMDAsRlBURU1QX0xPKCVhNikgfHRlc3QgaWYgbHMgbHdvcmQgaXMgc3BlY2lhbAorCWJuZXMJY2hrd2VycgkJfGlmIG5vdCBlcXVhbCwgY2hlY2sgZm9yIGluY29ycmVjdCBvcGVycgorCWJzcgljaGVja191cHBlcgl8Y2hlY2sgaWYgZXhwIGFuZCBtcyBtYW50IGFyZSBzcGVjaWFsCisJdHN0bAklZDAKKwlibmVzCWNoa3dlcnIJCXxpZiBkMCBpcyB0cnVlLCBjaGVjayBmb3IgaW5jb3JyZWN0IG9wZXJyCisJbW92ZWwJIzB4ODAwMDAwMDAsJWQwCXxzdG9yZSBzcGVjaWFsIGNhc2UgcmVzdWx0CisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCXxjbGVhbiBhbmQgZXhpdAorfAorfAlDSEVDSyBGT1IgSU5DT1JSRUNUTFkgR0VORVJBVEVEIE9QRVJSIEVYQ0VQVElPTiBIRVJFCit8CitjaGt3ZXJyOgorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMAorCWFuZHcJIzB4N0ZGRiwlZDAJfGlnbm9yZSBzaWduIGJpdAorCWNtcHcJIzB4M0ZGRSwlZDAJfHRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUgZXhwb25lbnQgdmFsdWUKKwlibmVzCXN0b3JlX21heAorCW1vdmVsCUZQVEVNUF9MTyglYTYpLCVkMAorCXN3YXAJJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCisKK29wZXJyX2J5dGU6CisJbW92ZXFsCSMxLCVkMQkJfHdyaXRlIHNpemUgdG8gZDEKKwltb3ZlYglTVEFHKCVhNiksJWQwCXx0ZXN0IHN0YWcgZm9yIG5hbgorCWFuZGliCSMweGUwLCVkMAkJfGNsciBhbGwgYnV0IHRhZworCWNtcGliCSMweDYwLCVkMAkJfGNoZWNrIGZvciBuYW4KKwliZXFzCW9wZXJyX25hbgorCWNtcGlsCSMweGZmZmZmZjgwLEZQVEVNUF9MTyglYTYpIHx0ZXN0IGlmIGxzIGx3b3JkIGlzIHNwZWNpYWwKKwlibmVzCWNoa2JlcnIJCXxpZiBub3QgZXF1YWwsIGNoZWNrIGZvciBpbmNvcnJlY3Qgb3BlcnIKKwlic3IJY2hlY2tfdXBwZXIJfGNoZWNrIGlmIGV4cCBhbmQgbXMgbWFudCBhcmUgc3BlY2lhbAorCXRzdGwJJWQwCisJYm5lcwljaGtiZXJyCQl8aWYgZDAgaXMgdHJ1ZSwgY2hlY2sgZm9yIGluY29ycmVjdCBvcGVycgorCW1vdmVsCSMweDgwMDAwMDAwLCVkMAl8c3RvcmUgc3BlY2lhbCBjYXNlIHJlc3VsdAorCWJzcglvcGVycl9zdG9yZQorCWJyYQlub3RfZW5hYmxlZAl8Y2xlYW4gYW5kIGV4aXQKK3wKK3wJQ0hFQ0sgRk9SIElOQ09SUkVDVExZIEdFTkVSQVRFRCBPUEVSUiBFWENFUFRJT04gSEVSRQorfAorY2hrYmVycjoKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmR3CSMweDdGRkYsJWQwCXxpZ25vcmUgc2lnbiBiaXQKKwljbXB3CSMweDNGRkUsJWQwCXx0aGlzIGlzIHRoZSBvbmx5IHBvc3NpYmxlIGV4cG9uZW50IHZhbHVlCisJYm5lcwlzdG9yZV9tYXgKKwltb3ZlbAlGUFRFTVBfTE8oJWE2KSwlZDAKKwlhc2xsCSM4LCVkMAorCXN3YXAJJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCisKK3wKK3wgVGhpcyBvcGVyciBjb25kaXRpb24gaXMgbm90IG9mIHRoZSBzcGVjaWFsIGNhc2UuICBTZXQgb3BlcnIKK3wgYW5kIGFpb3AgYW5kIHdyaXRlIHRoZSBwb3J0aW9uIG9mIHRoZSBuYW4gdG8gbWVtb3J5IGZvciB0aGUKK3wgZ2l2ZW4gc2l6ZS4KK3wKK29wZXJyX25hbjoKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBvcGVyciAmIGFpb3AKKworCW1vdmVsCUVURU1QX0hJKCVhNiksJWQwCXxvdXRwdXQgd2lsbCBiZSBmcm9tIHVwcGVyIDMyIGJpdHMKKwlic3IJb3BlcnJfc3RvcmUKKwlicmEJZW5kX29wZXJyCit8Cit8IFN0b3JlX21heCBsb2FkcyB0aGUgbWF4IHBvcyBvciBuZWdhdGl2ZSBmb3IgdGhlIHNpemUsIHNldHMKK3wgdGhlIG9wZXJyIGFuZCBhaW9wIGJpdHMsIGFuZCBjbGVhcnMgaW5leCBhbmQgYWluZXgsIGluY29ycmVjdGx5Cit8IHNldCBieSB0aGUgMDQwLgorfAorc3RvcmVfbWF4OgorCW9ybAkjb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IG9wZXJyICYgYWlvcAorCWJjbHJiCSNpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJjbHJiCSNhaW5leF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKKwlmbW92ZWwJIzAsJUZQU1IKKworCXRzdHcJRlBURU1QX0VYKCVhNikJfGNoZWNrIHNpZ24KKwlibHRzCWxvYWRfbmVnCisJbW92ZWwJIzB4N2ZmZmZmZmYsJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCWVuZF9vcGVycgorbG9hZF9uZWc6CisJbW92ZWwJIzB4ODAwMDAwMDAsJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCWVuZF9vcGVycgorCit8Cit8IFRoaXMgcm91dGluZSBzdG9yZXMgdGhlIGRhdGEgaW4gZDAsIGZvciB0aGUgZ2l2ZW4gc2l6ZSBpbiBkMSwKK3wgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgYXMgcmVxdWlyZWQuICBBIHJlYWQgb2YgdGhlIGZsaW5lCit8IGlzIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24uCit8CitvcGVycl9zdG9yZToKKwltb3ZlbAklZDAsTF9TQ1IxKCVhNikJfG1vdmUgd3JpdGUgZGF0YSB0byBMX1NDUjEKKwltb3ZlbAklZDEsLSglYTcpCXxzYXZlIHJlZ2lzdGVyIHNpemUKKwlic3JsCWdldF9mbGluZQl8ZmxpbmUgcmV0dXJuZWQgaW4gZDAKKwltb3ZlbAkoJWE3KSssJWQxCisJYmZ0c3QJJWQweyMyNjojM30JCXxpZiBtb2RlIGlzIHplcm8sIGRlc3QgaXMgRG4KKwlibmVzCWRlc3RfbWVtCit8Cit8IERlc3RpbmF0aW9uIGlzIERuLiAgR2V0IHJlZ2lzdGVyIG51bWJlciBmcm9tIGQwLiBEYXRhIGlzIG9uCit8IHRoZSBzdGFjayBhdCAoYTcpLiBEMSBoYXMgc2l6ZTogMT1ieXRlLDI9d29yZCw0PWxvbmcvc2luZ2xlCit8CisJYW5kaWwJIzcsJWQwCQl8aXNvbGF0ZSByZWdpc3RlciBudW1iZXIKKwljbXBpbAkjNCwlZDEKKwliZXFzCW9wX2xvbmcJCXx0aGUgbW9zdCBmcmVxdWVudCBjYXNlCisJY21waWwJIzIsJWQxCisJYm5lcwlvcF9jb24KKwlvcmwJIzgsJWQwCisJYnJhcwlvcF9jb24KK29wX2xvbmc6CisJb3JsCSMweDEwLCVkMAorb3BfY29uOgorCW1vdmVsCSVkMCwlZDEJCXxmb3JtYXQgc2l6ZTpyZWcgZm9yIHJlZ19kZXN0CisJYnJhbAlyZWdfZGVzdAl8Y2FsbCB0byByZWdfZGVzdCByZXR1cm5zIHRvIGNhbGxlcgorfAkJCQk7b2Ygb3BlcnJfc3RvcmUKK3wKK3wgRGVzdGluYXRpb24gaXMgbWVtb3J5LiAgR2V0IDxlYT4gZnJvbSBpbnRlZ2VyIGV4Y2VwdGlvbiBmcmFtZQorfCBhbmQgY2FsbCBtZW1fd3JpdGUuCit8CitkZXN0X21lbToKKwlsZWFsCUxfU0NSMSglYTYpLCVhMAl8cHV0IHB0ciB0byB3cml0ZSBkYXRhIGluIGEwCisJbW92ZWwJRVhDX0VBKCVhNiksJWExCXxwdXQgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGExCisJbW92ZWwJJWQxLCVkMAkJfHB1dCBzaXplIGluIGQwCisJYnNybAltZW1fd3JpdGUKKwlydHMKK3wKK3wgQ2hlY2sgdGhlIGV4cG9uZW50IGZvciAkYzAwMCBhbmQgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlCit8IG1hbnRpc3NhIGZvciAkZmZmZmZmZmYuICBJZiBib3RoIGFyZSB0cnVlLCByZXR1cm4gZDAgY2xyCit8IGFuZCBzdG9yZSB0aGUgbG93ZXIgbiBiaXRzIG9mIHRoZSBsZWFzdCBsd29yZCBvZiBGUFRFTVAKK3wgdG8gZDAgZm9yIHdyaXRlIG91dC4gIElmIG5vdCwgaXQgaXMgYSByZWFsIG9wZXJyLCBhbmQgc2V0IGQwLgorfAorY2hlY2tfdXBwZXI6CisJY21waWwJIzB4ZmZmZmZmZmYsRlBURU1QX0hJKCVhNikgfGNoZWNrIGlmIGZpcnN0IGJ5dGUgaXMgYWxsIDEncworCWJuZXMJdHJ1ZV9vcGVycgl8aWYgbm90IGFsbCAxJ3MgdGhlbiB3YXMgdHJ1ZSBvcGVycgorCWNtcGl3CSMweGMwMDAsRlBURU1QX0VYKCVhNikgfGNoZWNrIGlmIGluY29ycmVjdGx5IHNpZ25hbGxlZAorCWJlcXMJbm90X3RydWVfb3BlcnIJfGJyYW5jaCBpZiBub3QgdHJ1ZSBvcGVycgorCWNtcGl3CSMweGJmZmYsRlBURU1QX0VYKCVhNikgfGNoZWNrIGlmIGluY29ycmVjdGx5IHNpZ25hbGxlZAorCWJlcXMJbm90X3RydWVfb3BlcnIJfGJyYW5jaCBpZiBub3QgdHJ1ZSBvcGVycgordHJ1ZV9vcGVycjoKKwltb3ZlbAkjMSwlZDAJCXxzaWduYWwgcmVhbCBvcGVycgorCXJ0cworbm90X3RydWVfb3BlcnI6CisJY2xybAklZDAJCXxzaWduYWwgbm8gcmVhbCBvcGVycgorCXJ0cworCit8Cit8IEVuZF9vcGVyciB0ZXN0cyBmb3Igb3BlcnIgZW5hYmxlZC4gIElmIG5vdCwgaXQgY2xlYW5zIHVwIHRoZSBzdGFjaworfCBhbmQgZG9lcyBhbiBydGUuICBJZiBlbmFibGVkLCBpdCBjbGVhbnMgdXAgdGhlIHN0YWNrIGFuZCBicmFuY2hlcworfCB0byB0aGUga2VybmVsIG9wZXJyIGhhbmRsZXIgd2l0aCBvbmx5IHRoZSBpbnRlZ2VyIGV4Y2VwdGlvbgorfCBmcmFtZSBvbiB0aGUgc3RhY2sgYW5kIHRoZSBmcHUgaW4gdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbmFsIHN0YXRlCit8IHdpdGggY29ycmVjdCBkYXRhIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLgorfAorZW5kX29wZXJyOgorCWJ0c3RiCQkjb3BlcnJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCQlub3RfZW5hYmxlZAorZW5hYmxlZDoKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX29wZXJyCisKK25vdF9lbmFibGVkOgorfAorfCBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGVpdGhlciBpbmV4MiBvciBpbmV4MSBleGNlcHRpb25zIHdpdGggdGhlCit8IG9wZXJyLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorCW1vdmViCUZQQ1JfRU5BQkxFKCVhNiksJWQwCisJYW5kYglGUFNSX0VYQ0VQVCglYTYpLCVkMAorCWFuZGliCSMweDMsJWQwCisJYmVxCW9wZXJyX2V4aXQKK3wKK3wgSW5leGFjdCBlbmFibGVkIGFuZCByZXBvcnRlZCwgYW5kIHdlIG11c3QgdGFrZSBhbiBpbmV4YWN0IGV4Y2VwdGlvbi4KK3wKK3Rha2VfaW5leDoKKwltb3ZlYgkJI0lORVhfVkVDLEVYQ19WRUMrMSglYTYpCisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLEZQU1JfU0hBRE9XKCVhNikKKwlvcmwJCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF9pbmV4Cit8Cit8IFNpbmNlIG9wZXJyIGlzIG9ubHkgYW4gRTEgZXhjZXB0aW9uLCB0aGVyZSBpcyBubyBuZWVkIHRvIGZyZXN0b3JlCit8IGFueSBzdGF0ZSBiYWNrIHRvIHRoZSBmcHUuCit8CitvcGVycl9leGl0OgorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCXVubGsJCSVhNgorCWJyYWwJCWZwc3BfZG9uZQorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9vdmZsLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X292ZmwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNiOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9vdmZsLlMKQEAgLTAsMCArMSwxODYgQEAKK3wKK3wJeF9vdmZsLnNhIDMuNSA3LzEvOTEKK3wKK3wJZnBzcF9vdmZsIC0tLSBGUFNQIGhhbmRsZXIgZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgorfAorfAlPdmVyZmxvdyBvY2N1cnMgd2hlbiBhIGZsb2F0aW5nLXBvaW50IGludGVybWVkaWF0ZSByZXN1bHQgaXMKK3wJdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgZmxvYXRpbmctcG9pbnQgZGF0YSByZWdpc3RlciwKK3wJb3Igd2hlbiBzdG9yaW5nIHRvIG1lbW9yeSwgdGhlIGNvbnRlbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQKK3wJZGF0YSByZWdpc3RlciBhcmUgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGluIHRoZQorfAlkZXN0aW5hdGlvbiBmb3JtYXQuCit8Cit8IFRyYXAgZGlzYWJsZWQgcmVzdWx0cworfAorfCBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgbW92ZV9vdXQsIHRoZW4gZ2FyYmFnZSBpcyBzdG9yZWQgaW4gdGhlCit8IGRlc3RpbmF0aW9uLiAgSWYgdGhlIGluc3RydWN0aW9uIGlzIG5vdCBtb3ZlX291dCwgdGhlbiB0aGUKK3wgZGVzdGluYXRpb24gaXMgbm90IGFmZmVjdGVkLiAgRm9yIDY4ODgxIGNvbXBhdGliaWxpdHksIHRoZQorfCBmb2xsb3dpbmcgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXQgdGhlIGRlc3RpbmF0aW9uLCBiYXNlZAorfCBvbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlOgorfAorfCAgUk4JSW5maW5pdHkgd2l0aCB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdC4KK3wgIFJaCUxhcmdlc3QgbWFnbml0dWRlIG51bWJlciwgd2l0aCB0aGUgc2lnbiBvZiB0aGUKK3wJaW50ZXJtZWRpYXRlIHJlc3VsdC4KK3wgIFJNICAgRm9yIHBvcyBvdmVyZmxvdywgdGhlIGxhcmdlc3QgcG9zIG51bWJlci4gRm9yIG5lZyBvdmVyZmxvdywKK3wJLWluZmluaXR5Cit8ICBSUCAgIEZvciBwb3Mgb3ZlcmZsb3csICtpbmZpbml0eS4gRm9yIG5lZyBvdmVyZmxvdywgdGhlIGxhcmdlc3QKK3wJbmVnIG51bWJlcgorfAorfCBUcmFwIGVuYWJsZWQgcmVzdWx0cworfCBBbGwgdHJhcCBkaXNhYmxlZCBjb2RlIGFwcGxpZXMuICBJbiBhZGRpdGlvbiB0aGUgZXhjZXB0aW9uYWwKK3wgb3BlcmFuZCBuZWVkcyB0byBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlcnMgZXhjZXB0aW9uIGhhbmRsZXIKK3wgd2l0aCBhIGJpYXMgb2YgJDYwMDAgc3VidHJhY3RlZCBmcm9tIHRoZSBleHBvbmVudC4KK3wKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9PVkZMOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJb3ZmX3JfeDIKKwl8eHJlZglvdmZfcl94MworCXx4cmVmCXN0b3JlCisJfHhyZWYJcmVhbF9vdmZsCisJfHhyZWYJcmVhbF9pbmV4CisJfHhyZWYJZnBzcF9kb25lCisJfHhyZWYJZ19vcGNscworCXx4cmVmCWIxMjM4X2ZpeAorCisJLmdsb2JhbAlmcHNwX292ZmwKK2Zwc3Bfb3ZmbDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJWE3KQorCW1vdmVtbAkJJWQwLSVkMS8lYTAtJWExLFVTRVJfREEoJWE2KQorCWZtb3ZlbXgJJWZwMC0lZnAzLFVTRVJfRlAwKCVhNikKKwlmbW92ZW1sCSVmcGNyLyVmcHNyLyVmcGlhcixVU0VSX0ZQQ1IoJWE2KQorCit8Cit8CVRoZSAwNDAgZG9lc24ndCBzZXQgdGhlIEFJTkVYIGJpdCBpbiB0aGUgRlBTUiwgdGhlIGZvbGxvd2luZworfAlsaW5lIHRlbXBvcmFyaWx5IHJlY3RpZmllcyB0aGlzIGVycm9yLgorfAorCWJzZXRiCSNhaW5leF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKK3wKKwlic3JsCW92Zl9hZGoJCXxkZW5vcm1hbGl6ZSwgcm91bmQgJiBzdG9yZSBpbnRlcm0gb3AKK3wKK3wJaWYgb3ZlcmZsb3cgdHJhcHMgbm90IGVuYWJsZWQgY2hlY2sgZm9yIGluZXhhY3QgZXhjZXB0aW9uCit8CisJYnRzdGIJI292ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCWNrX2luZXgKK3wKKwlidHN0YgkJI0UzLEVfQllURSglYTYpCisJYmVxcwkJbm9fZTNfMQorCWJmZXh0dQkJQ01EUkVHM0IoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWcgbm8KKwliY2xyYgkJJWQwLEZQUl9ESVJUWV9CSVRTKCVhNikJfGNsciBkZXN0IGRpcnR5IGJpdAorCWJzcmwJCWIxMjM4X2ZpeAorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorbm9fZTNfMToKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX292ZmwKK3wKK3wgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBlaXRoZXIgaW5leDIgb3IgaW5leDEgZXhjZXB0aW9ucyB3aXRoIHRoZQorfCBvdmZsLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorfAltb3ZlLmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCit8CWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAorfAlhbmRpLmIJCSMkMywlZDAKKwlidHN0YgkJI2luZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYmVxcwkJb3ZmbF9leGl0Cit8Cit8IEluZXhhY3QgZW5hYmxlZCBhbmQgcmVwb3J0ZWQsIGFuZCB3ZSBtdXN0IHRha2UgYW4gaW5leGFjdCBleGNlcHRpb24uCit8Cit0YWtlX2luZXg6CisJYnRzdGIJCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJCW5vX2UzXzIKKwliZmV4dHUJCUNNRFJFRzNCKCVhNil7IzY6IzN9LCVkMAl8Z2V0IGRlc3QgcmVnIG5vCisJYmNscmIJCSVkMCxGUFJfRElSVFlfQklUUyglYTYpCXxjbHIgZGVzdCBkaXJ0eSBiaXQKKwlic3JsCQliMTIzOF9maXgKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKK25vX2UzXzI6CisJbW92ZWIJCSNJTkVYX1ZFQyxFWENfVkVDKzEoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfaW5leAorCitvdmZsX2V4aXQ6CisJYmNscmIJI0UzLEVfQllURSglYTYpCXx0ZXN0IGFuZCBjbGVhciBFMyBiaXQKKwliZXFzCWUxX3NldAorfAorfCBDbGVhciBkaXJ0eSBiaXQgb24gZGVzdCByZXNpc3RlciBpbiB0aGUgZnJhbWUgYmVmb3JlIGJyYW5jaGluZworfCB0byBiMTIzOF9maXguCit8CisJYmZleHR1CQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDAJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlmcHNwX2RvbmUKK2UxX3NldDoKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwl1bmxrCQklYTYKKwlicmFsCQlmcHNwX2RvbmUKKworfAorfAlvdmZfYWRqCit8CitvdmZfYWRqOgorfAorfCBIYXZlIGEwIHBvaW50IHRvIHRoZSBjb3JyZWN0IG9wZXJhbmQuCit8CisJYnRzdGIJI0UzLEVfQllURSglYTYpCXx0ZXN0IEUzIGJpdAorCWJlcXMJb3ZmX2UxCisKKwlsZWEJV0JURU1QKCVhNiksJWEwCisJYnJhcwlvdmZfY29tCitvdmZfZTE6CisJbGVhCUVURU1QKCVhNiksJWEwCisKK292Zl9jb206CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkKKworCWJzcmwJZ19vcGNscwkJfHJldHVybnMgb3BjbGFzcyBpbiBkMAorCWNtcGl3CSMzLCVkMAkJfGNoZWNrIGZvciBvcGNsYXNzMworCWJuZXMJbm90X29wYzAxMQorCit8Cit8IEZQU1JfQ0MgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGJlY2F1c2Ugb3ZmX3JfeDMgYWZmZWN0cyBpdC4gVGhlCit8IENDcyBhcmUgZGVmaW5lZCB0byBiZSAnbm90IGFmZmVjdGVkJyBmb3IgdGhlIG9wY2xhc3MzIGluc3RydWN0aW9uLgorfAorCW1vdmViCUZQU1JfQ0MoJWE2KSxMX1NDUjEoJWE2KQorCWJzcmwJb3ZmX3JfeDMJfHJldHVybnMgYTAgcG9pbnRpbmcgdG8gcmVzdWx0CisJbW92ZWIJTF9TQ1IxKCVhNiksRlBTUl9DQyglYTYpCisJYnJhbAlzdG9yZQkJfHN0b3JlcyB0byBtZW1vcnkgb3IgcmVnaXN0ZXIKKworbm90X29wYzAxMToKKwlic3JsCW92Zl9yX3gyCXxyZXR1cm5zIGEwIHBvaW50aW5nIHRvIHJlc3VsdAorCWJyYWwJc3RvcmUJCXxzdG9yZXMgdG8gbWVtb3J5IG9yIHJlZ2lzdGVyCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X3NuYW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfc25hbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWFmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X3NuYW4uUwpAQCAtMCwwICsxLDI3NyBAQAorfAorfAl4X3NuYW4uc2EgMy4zIDcvMS85MQorfAorfCBmcHNwX3NuYW4gLS0tIEZQU1AgaGFuZGxlciBmb3Igc2lnbmFsbGluZyBOQU4gZXhjZXB0aW9uCit8Cit8IFNOQU4gZm9yIGZsb2F0IC0+IGludGVnZXIgY29udmVyc2lvbnMgKGludGVnZXIgY29udmVyc2lvbiBvZgorfCBhbiBTTkFOKSBpcyBhIG5vbi1tYXNrYWJsZSBydW4tdGltZSBleGNlcHRpb24uCit8Cit8IEZvciB0cmFwIGRpc2FibGVkIHRoZSAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgZGVzdCBkYXRhIGZvcm1hdCBpcyBzLCBkLCBvciB4LCB0aGVuIHRoZSBTTkFOIGJpdCBpbiB0aGUgTkFOCit8IGlzIHNldCB0byBvbmUgYW5kIHRoZSByZXN1bHRpbmcgbm9uLXNpZ25hbGluZyBOQU4gKHRydW5jYXRlZCBpZgorfCBuZWNlc3NhcnkpIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBkZXN0LiAgSWYgdGhlIGRlc3QgZm9ybWF0IGlzIGIsIHcsCit8IG9yIGwsIHRoZW4gZ2FyYmFnZSBpcyB3cml0dGVuIHRvIHRoZSBkZXN0IChhY3R1YWxseSB0aGUgdXBwZXIgMzIgYml0cworfCBvZiB0aGUgbWFudGlzc2EgYXJlIHNlbnQgdG8gdGhlIGludGVnZXIgdW5pdCkuCit8Cit8IEZvciB0cmFwIGVuYWJsZWQgdGhlIDA0MCBkb2VzIHRoZSBmb2xsb3dpbmc6Cit8IElmIHRoZSBpbnN0IGlzIG1vdmVfb3V0LCB0aGVuIHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdHJhcAorfCBkaXNhYmxlZCB3aXRoIHRoZSBleGNlcHRpb24gcG9zdGVkLiAgSWYgdGhlIGluc3RydWN0aW9uIGlzIG5vdCBtb3ZlXworfCBvdXQsIHRoZSBkZXN0LiBpcyBub3QgbW9kaWZpZWQsIGFuZCB0aGUgZXhjZXB0aW9uIGlzIHBvc3RlZC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9TTkFOOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJZ2V0X2ZsaW5lCisJfHhyZWYJbWVtX3dyaXRlCisJfHhyZWYJcmVhbF9zbmFuCisJfHhyZWYJcmVhbF9pbmV4CisJfHhyZWYJZnBzcF9kb25lCisJfHhyZWYJcmVnX2Rlc3QKKworCS5nbG9iYWwJZnBzcF9zbmFuCitmcHNwX3NuYW46CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKworfAorfCBDaGVjayBpZiB0cmFwIGVuYWJsZWQKK3wKKwlidHN0YgkJI3NuYW5fYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmVzCQllbmEJCXxJZiBlbmFibGVkLCB0aGVuIGJyYW5jaAorCisJYnNybAkJbW92ZV9vdXQJfGVsc2UgU05BTiBkaXNhYmxlZAorfAorfCBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGFuIGluZXgxIGV4Y2VwdGlvbiB3aXRoIHRoZQorfCBzbmFuLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorCW1vdmViCUZQQ1JfRU5BQkxFKCVhNiksJWQwCisJYW5kYglGUFNSX0VYQ0VQVCglYTYpLCVkMAorCWFuZGliCSMweDMsJWQwCisJYmVxCWVuZF9zbmFuCit8Cit8IEluZXhhY3QgZW5hYmxlZCBhbmQgcmVwb3J0ZWQsIGFuZCB3ZSBtdXN0IHRha2UgYW4gaW5leGFjdCBleGNlcHRpb24uCit8Cit0YWtlX2luZXg6CisJbW92ZWIJCSNJTkVYX1ZFQyxFWENfVkVDKzEoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfaW5leAorfAorfCBTTkFOIGlzIGVuYWJsZWQuICBDaGVjayBpZiBpbnN0IGlzIG1vdmVfb3V0LgorfCBNYWtlIGFueSBjb3JyZWN0aW9ucyB0byB0aGUgMDQwIG91dHB1dCBhcyBuZWNlc3NhcnkuCit8CitlbmE6CisJYnRzdGIJCSM1LENNRFJFRzFCKCVhNikgfGlmIHNldCwgaW5zdCBpcyBtb3ZlIG91dAorCWJlcQkJbm90X291dAorCisJYnNybAkJbW92ZV9vdXQKKworcmVwb3J0X3NuYW46CisJbW92ZWIJCSglYTcpLFZFUl9UTVAoJWE2KQorCWNtcGliCQkjVkVSXzQwLCglYTcpCXx0ZXN0IGZvciBvcmlnIHVuaW1wIGZyYW1lCisJYm5lcwkJY2tfcmV2CisJbW92ZXFsCQkjMTMsJWQwCQl8bmVlZCB0byB6ZXJvIDE0IGx3b3JkcworCWJyYXMJCXJlcF9jb24KK2NrX3JldjoKKwltb3ZlcWwJCSMxMSwlZDAJCXxuZWVkIHRvIHplcm8gMTIgbHdvcmRzCityZXBfY29uOgorCWNscmwJCSglYTcpCitsb29wMToKKwljbHJsCQktKCVhNykJCXxjbGVhciBhbmQgZGVjIGE3CisJZGJyYQkJJWQwLGxvb3AxCisJbW92ZWIJCVZFUl9UTVAoJWE2KSwoJWE3KSB8Zm9ybWF0IGEgYnVzeSBmcmFtZQorCW1vdmViCQkjQlVTWV9TSVpFLTQsMSglYTcpCisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLEZQU1JfU0hBRE9XKCVhNikKKwlvcmwJCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF9zbmFuCit8Cit8IEV4aXQgc25hbiBoYW5kbGVyIGJ5IGV4cGFuZGluZyB0aGUgdW5pbXAgZnJhbWUgaW50byBhIGJ1c3kgZnJhbWUKK3wKK2VuZF9zbmFuOgorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikKKworCW1vdmViCQkoJWE3KSxWRVJfVE1QKCVhNikKKwljbXBpYgkJI1ZFUl80MCwoJWE3KQl8dGVzdCBmb3Igb3JpZyB1bmltcCBmcmFtZQorCWJuZXMJCWNrX3JldjIKKwltb3ZlcWwJCSMxMywlZDAJCXxuZWVkIHRvIHplcm8gMTQgbHdvcmRzCisJYnJhcwkJcmVwX2NvbjIKK2NrX3JldjI6CisJbW92ZXFsCQkjMTEsJWQwCQl8bmVlZCB0byB6ZXJvIDEyIGx3b3JkcworcmVwX2NvbjI6CisJY2xybAkJKCVhNykKK2xvb3AyOgorCWNscmwJCS0oJWE3KQkJfGNsZWFyIGFuZCBkZWMgYTcKKwlkYnJhCQklZDAsbG9vcDIKKwltb3ZlYgkJVkVSX1RNUCglYTYpLCglYTcpIHxmb3JtYXQgYSBidXN5IGZyYW1lCisJbW92ZWIJCSNCVVNZX1NJWkUtNCwxKCVhNykgfHdyaXRlIGJ1c3kgc2l6ZQorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCWZwc3BfZG9uZQorCit8Cit8IE1vdmVfb3V0Cit8Cittb3ZlX291dDoKKwltb3ZlbAkJRVhDX0VBKCVhNiksJWEwCXxnZXQgPGVhPiBmcm9tIGV4YyBmcmFtZQorCisJYmZleHR1CQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDAgfG1vdmUgcnggZmllbGQgdG8gZDB7MjowfQorCWNtcGlsCQkjMCwlZDAJCXxjaGVjayBmb3IgbG9uZworCWJlcXMJCXN0b19sb25nCXxicmFuY2ggaWYgbW92ZV9vdXQgbG9uZworCisJY21waWwJCSM0LCVkMAkJfGNoZWNrIGZvciB3b3JkCisJYmVxcwkJc3RvX3dvcmQJfGJyYW5jaCBpZiBtb3ZlX291dCB3b3JkCisKKwljbXBpbAkJIzYsJWQwCQl8Y2hlY2sgZm9yIGJ5dGUKKwliZXFzCQlzdG9fYnl0ZQl8YnJhbmNoIGlmIG1vdmVfb3V0IGJ5dGUKKworfAorfCBOb3QgYnl0ZSwgd29yZCBvciBsb25nCit8CisJcnRzCit8Cit8IEdldCB0aGUgMzIgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGV0ZW1wIG1hbnRpc3NhCit8CitzdG9fbG9uZzoKKwltb3ZlbAkJRVRFTVBfSEkoJWE2KSwlZDEKKwltb3ZlbAkJIzQsJWQwCQl8bG9hZCBieXRlIGNvdW50Cit8Cit8IFNldCBzaWduYWxsaW5nIG5hbiBiaXQKK3wKKwlic2V0bAkJIzMwLCVkMQorfAorfCBTdG9yZSB0byB0aGUgdXNlcnMgZGVzdGluYXRpb24gYWRkcmVzcworfAorCXRzdGwJCSVhMAkJfGNoZWNrIGlmIDxlYT4gaXMgMAorCWJlcXMJCXdydF9kbgkJfGRlc3RpbmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlcgorCisJbW92ZWwJCSVkMSwtKCVhNykJfG1vdmUgdGhlIHNuYW4gb250byB0aGUgc3RhY2sKKwltb3ZlbAkJJWEwLCVhMQkJfGxvYWQgZGVzdCBhZGRyIGludG8gYTEKKwltb3ZlbAkJJWE3LCVhMAkJfGxvYWQgc3JjIGFkZHIgb2Ygc25hbiBpbnRvIGEwCisJYnNybAkJbWVtX3dyaXRlCXx3cml0ZSBzbmFuIHRvIHVzZXIgbWVtb3J5CisJbW92ZWwJCSglYTcpKywlZDEJfGNsZWFyIG9mZiBzdGFjaworCXJ0cworfAorfCBHZXQgdGhlIDE2IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBldGVtcCBtYW50aXNzYQorfAorc3RvX3dvcmQ6CisJbW92ZWwJCUVURU1QX0hJKCVhNiksJWQxCisJbW92ZWwJCSMyLCVkMAkJfGxvYWQgYnl0ZSBjb3VudAorfAorfCBTZXQgc2lnbmFsbGluZyBuYW4gYml0Cit8CisJYnNldGwJCSMzMCwlZDEKK3wKK3wgU3RvcmUgdG8gdGhlIHVzZXJzIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wKKwl0c3RsCQklYTAJCXxjaGVjayBpZiA8ZWE+IGlzIDAKKwliZXFzCQl3cnRfZG4JCXxkZXN0aW5hdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIKKworCW1vdmVsCQklZDEsLSglYTcpCXxtb3ZlIHRoZSBzbmFuIG9udG8gdGhlIHN0YWNrCisJbW92ZWwJCSVhMCwlYTEJCXxsb2FkIGRlc3QgYWRkciBpbnRvIGExCisJbW92ZWwJCSVhNywlYTAJCXxwb2ludCB0byBsb3cgd29yZAorCWJzcmwJCW1lbV93cml0ZQl8d3JpdGUgc25hbiB0byB1c2VyIG1lbW9yeQorCW1vdmVsCQkoJWE3KSssJWQxCXxjbGVhciBvZmYgc3RhY2sKKwlydHMKK3wKK3wgR2V0IHRoZSA4IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBldGVtcCBtYW50aXNzYQorfAorc3RvX2J5dGU6CisJbW92ZWwJCUVURU1QX0hJKCVhNiksJWQxCisJbW92ZWwJCSMxLCVkMAkJfGxvYWQgYnl0ZSBjb3VudAorfAorfCBTZXQgc2lnbmFsbGluZyBuYW4gYml0Cit8CisJYnNldGwJCSMzMCwlZDEKK3wKK3wgU3RvcmUgdG8gdGhlIHVzZXJzIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wKKwl0c3RsCQklYTAJCXxjaGVjayBpZiA8ZWE+IGlzIDAKKwliZXFzCQl3cnRfZG4JCXxkZXN0aW5hdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIKKwltb3ZlbAkJJWQxLC0oJWE3KQl8bW92ZSB0aGUgc25hbiBvbnRvIHRoZSBzdGFjaworCW1vdmVsCQklYTAsJWExCQl8bG9hZCBkZXN0IGFkZHIgaW50byBhMQorCW1vdmVsCQklYTcsJWEwCQl8cG9pbnQgdG8gc291cmNlIGJ5dGUKKwlic3JsCQltZW1fd3JpdGUJfHdyaXRlIHNuYW4gdG8gdXNlciBtZW1vcnkKKwltb3ZlbAkJKCVhNykrLCVkMQl8Y2xlYXIgb2ZmIHN0YWNrCisJcnRzCisKK3wKK3wJd3J0X2RuIC0tLSB3cml0ZSB0byBhIGRhdGEgcmVnaXN0ZXIKK3wKK3wJV2UgZ2V0IGhlcmUgd2l0aCBEMSBjb250YWluaW5nIHRoZSBkYXRhIHRvIHdyaXRlIGFuZCBEMCB0aGUKK3wJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlOiAxPWJ5dGUsMj13b3JkLDQ9bG9uZy4KK3wKK3dydF9kbjoKKwltb3ZlbAkJJWQxLExfU0NSMSglYTYpCXxkYXRhCisJbW92ZWwJCSVkMCwtKCVhNykJfHNpemUKKwlic3JsCQlnZXRfZmxpbmUJfHJldHVybnMgZmxpbmUgd29yZCBpbiBkMAorCW1vdmVsCQklZDAsJWQxCisJYW5kaWwJCSMweDcsJWQxCQl8ZDEgbm93IGhvbGRzIHJlZ2lzdGVyIG51bWJlcgorCW1vdmVsCQkoJXNwKSssJWQwCXxnZXQgb3JpZ2luYWwgc2l6ZQorCWNtcGlsCQkjNCwlZDAKKwliZXFzCQl3cnRfbG9uZworCWNtcGlsCQkjMiwlZDAKKwlibmVzCQl3cnRfYnl0ZQord3J0X3dvcmQ6CisJb3JsCQkjMHg4LCVkMQorCWJyYWwJCXJlZ19kZXN0Cit3cnRfbG9uZzoKKwlvcmwJCSMweDEwLCVkMQorCWJyYWwJCXJlZ19kZXN0Cit3cnRfYnl0ZToKKwlicmFsCQlyZWdfZGVzdAorfAorfCBDaGVjayBpZiBpdCBpcyBhIHNyYyBuYW4gb3IgZHN0IG5hbgorfAorbm90X291dDoKKwltb3ZlbAkJRFRBRyglYTYpLCVkMAorCWJmZXh0dQkJJWQweyMwOiMzfSwlZDAJfGlzb2xhdGUgZHRhZyBpbiBsc2JzCisKKwljbXBpYgkJIzMsJWQwCQl8Y2hlY2sgZm9yIG5hbiBpbiBkZXN0aW5hdGlvbgorCWJuZXMJCWlzc3JjCQl8ZGVzdGluYXRpb24gbmFuIGhhcyBwcmlvcml0eQorZHN0X25hbjoKKwlidHN0YgkJIzYsRlBURU1QX0hJKCVhNikgfGNoZWNrIGlmIGRlc3QgbmFuIGlzIGFuIHNuYW4KKwlibmVzCQlpc3NyYwkJfG5vLCBzbyBjaGVjayBzb3VyY2UgZm9yIHNuYW4KKwltb3ZldwkJRlBURU1QX0VYKCVhNiksJWQwCisJYnJhcwkJY29udAoraXNzcmM6CisJbW92ZXcJCUVURU1QX0VYKCVhNiksJWQwCitjb250OgorCWJ0c3RsCQkjMTUsJWQwCQl8dGVzdCBmb3Igc2lnbiBvZiBzbmFuCisJYmVxcwkJY2xyX25lZworCWJzZXRiCQkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKwlicmEJCXJlcG9ydF9zbmFuCitjbHJfbmVnOgorCWJjbHJiCQkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKwlicmEJCXJlcG9ydF9zbmFuCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X3N0b3JlLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X3N0b3JlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MmZhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfc3RvcmUuUwpAQCAtMCwwICsxLDI1NiBAQAorfAorfAl4X3N0b3JlLnNhIDMuMiAxLzI0LzkxCit8Cit8CXN0b3JlIC0tLSBzdG9yZSBvcGVyYW5kIHRvIG1lbW9yeSBvciByZWdpc3RlcgorfAorfAlVc2VkIGJ5IHVuZGVyZmxvdyBhbmQgb3ZlcmZsb3cgaGFuZGxlcnMuCit8Cit8CWE2ID0gcG9pbnRzIHRvIGZwIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9TVE9SRToJfGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworZnByZWdfbWFzazoKKwkuYnl0ZQkweDgwLDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCW1lbV93cml0ZQorCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCWdfb3BjbHMKKwl8eHJlZglnX2RmbXRvdQorCXx4cmVmCXJlZ19kZXN0CisKKwkuZ2xvYmFsCWRlc3RfZXh0CisJLmdsb2JhbAlkZXN0X2RibAorCS5nbG9iYWwJZGVzdF9zZ2wKKworCS5nbG9iYWwJc3RvcmUKK3N0b3JlOgorCWJ0c3RiCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJRTFfc3RvCitFM19zdG86CisJbW92ZWwJQ01EUkVHM0IoJWE2KSwlZDAKKwliZmV4dHUJJWQweyM2OiMzfSwlZDAJCXxpc29sYXRlIGRlc3QuIHJlZyBmcm9tIGNtZHJlZzNiCitzdG9fZnA6CisJbGVhCWZwcmVnX21hc2ssJWExCisJbW92ZWIJKCVhMSwlZDAudyksJWQwCQl8Y29udmVydCByZWcjIHRvIGR5bmFtaWMgcmVnaXN0ZXIgbWFzaworCXRzdGIJTE9DQUxfU0dOKCVhMCkKKwliZXFzCWlzX3BvcworCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCitpc19wb3M6CisJZm1vdmVteCAoJWEwKSwlZDAJCXxtb3ZlIHRvIGNvcnJlY3QgcmVnaXN0ZXIKK3wKK3wJaWYgZnAwLWZwMyBpcyBiZWluZyBtb2RpZmllZCwgd2UgbXVzdCBwdXQgYSBjb3B5Cit8CWluIHRoZSBVU0VSX0ZQbiB2YXJpYWJsZSBvbiB0aGUgc3RhY2sgYmVjYXVzZSBhbGwgZXhjZXB0aW9uCit8CWhhbmRsZXJzIHJlc3RvcmUgZnAwLWZwMyBmcm9tIHRoZXJlLgorfAorCWNtcGIJIzB4ODAsJWQwCisJYm5lcwlub3RfZnAwCisJZm1vdmVteCAlZnAwLSVmcDAsVVNFUl9GUDAoJWE2KQorCXJ0cworbm90X2ZwMDoKKwljbXBiCSMweDQwLCVkMAorCWJuZXMJbm90X2ZwMQorCWZtb3ZlbXggJWZwMS0lZnAxLFVTRVJfRlAxKCVhNikKKwlydHMKK25vdF9mcDE6CisJY21wYgkjMHgyMCwlZDAKKwlibmVzCW5vdF9mcDIKKwlmbW92ZW14ICVmcDItJWZwMixVU0VSX0ZQMiglYTYpCisJcnRzCitub3RfZnAyOgorCWNtcGIJIzB4MTAsJWQwCisJYm5lcwlub3RfZnAzCisJZm1vdmVteCAlZnAzLSVmcDMsVVNFUl9GUDMoJWE2KQorCXJ0cworbm90X2ZwMzoKKwlydHMKKworRTFfc3RvOgorCWJzcmwJZ19vcGNscwkJfHJldHVybnMgb3BjbGFzcyBpbiBkMAorCWNtcGliCSMzLCVkMAorCWJlcQlvcGMwMTEJCXxicmFuY2ggaWYgb3BjbGFzcyAzCisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAKKwliZmV4dHUJJWQweyM2OiMzfSwlZDAJfGV4dHJhY3QgZGVzdGluYXRpb24gcmVnaXN0ZXIKKwlicmFzCXN0b19mcAorCitvcGMwMTE6CisJYnNybAlnX2RmbXRvdQl8cmV0dXJucyBkZXN0IGZvcm1hdCBpbiBkMAorfAkJCQk7ZXh0PTAwLCBzZ2w9MDEsIGRibD0xMAorCW1vdmVsCSVhMCwlYTEJCXxzYXZlIHNvdXJjZSBhZGRyIGluIGExCisJbW92ZWwJRVhDX0VBKCVhNiksJWEwCXxnZXQgdGhlIGFkZHJlc3MKKwljbXBpbAkjMCwlZDAJCXxpZiBkZXN0IGZvcm1hdCBpcyBleHRlbmRlZAorCWJlcQlkZXN0X2V4dAl8dGhlbiBicmFuY2gKKwljbXBpbAkjMSwlZDAJCXxpZiBkZXN0IGZvcm1hdCBpcyBzaW5nbGUKKwliZXEJZGVzdF9zZ2wJfHRoZW4gYnJhbmNoCit8Cit8CWZhbGwgdGhyb3VnaCB0byBkZXN0X2RibAorfAorCit8Cit8CWRlc3RfZGJsIC0tLSB3cml0ZSBkb3VibGUgcHJlY2lzaW9uIHZhbHVlIHRvIHVzZXIgc3BhY2UKK3wKK3xJbnB1dAorfAlhMCAtPiBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CWExIC0+IHNvdXJjZSBpbiBleHRlbmRlZCBwcmVjaXNpb24KK3xPdXRwdXQKK3wJYTAgLT4gZGVzdHJveWVkCit8CWExIC0+IGRlc3Ryb3llZAorfAlkMCAtPiAwCit8Cit8Q2hhbmdlcyBleHRlbmRlZCBwcmVjaXNpb24gdG8gZG91YmxlIHByZWNpc2lvbi4KK3wgTm90ZTogbm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHJvdW5kIHRoZSBleHRlbmRlZCB2YWx1ZSB0byBkb3VibGUuCit8CWRibF9zaWduID0gZXh0X3NpZ24KK3wJZGJsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2ZmKGRibCBiaWFzKQorfAlnZXQgcmlkIG9mIGV4dCBpbnRlZ2VyIGJpdAorfAlkYmxfbWFudCA9IGV4dF9tYW50ezYyOjEyfQorfAorfAkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQorfCAgZXh0ZW5kZWQgLT4gIHxzfCAgICBleHAgICAgfCAgIHwxfCBtcyBtYW50ICAgfCAgICB8IGxzIG1hbnQgICAgIHwKK3wJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0KK3wJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgICAgMzIgICAgICAzMSAgICAgMTEJICAwCit8CQkJCSAgICAgfAkJCSAgICAgfAorfAkJCQkgICAgIHwJCQkgICAgIHwKK3wJCQkJICAgICB8CQkJICAgICB8Cit8CQkJICAgICAgICAgICAgIHYJCQkgICAgIHYKK3wJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0KK3wgIGRvdWJsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwgICB8ICBtYW50ICAgICAgIHwKK3wJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0KK3wJCQkgICAgICA2MyAgICAgNTEgICAzMiAgIDMxCSAgICAgICAwCit8CitkZXN0X2RibDoKKwljbHJsCSVkMAkJfGNsZWFyIGQwCisJbW92ZXcJTE9DQUxfRVgoJWExKSwlZDAJfGdldCBleHBvbmVudAorCXN1YncJIzB4M2ZmZiwlZDAJfHN1YnRyYWN0IGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCisJY21wdwkjMHg0MDAwLCVkMAl8Y2hlY2sgaWYgaW5mCisJYmVxcwlpbmYJCXxpZiBzbywgc3BlY2lhbCBjYXNlCisJYWRkdwkjMHgzZmYsJWQwCXxhZGQgZG91YmxlIHByZWNpc2lvbiBiaWFzCisJc3dhcAklZDAJCXxkMCBub3cgaW4gdXBwZXIgd29yZAorCWxzbGwJIzQsJWQwCQl8ZDAgbm93IGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCisJdHN0YglMT0NBTF9TR04oJWExKQorCWJlcXMJZ2V0X21hbnQJfGlmIHBvc2l0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCisJYnNldGwJIzMxLCVkMAkJfGlmIG5lZ2F0aXZlLCBwdXQgaW4gc2lnbiBpbmZvcm1hdGlvbgorfAkJCQk7IGJlZm9yZSBjb250aW51aW5nCisJYnJhcwlnZXRfbWFudAl8Z28gcHJvY2VzcyBtYW50aXNzYQoraW5mOgorCW1vdmVsCSMweDdmZjAwMDAwLCVkMAl8bG9hZCBkYmwgaW5mIGV4cG9uZW50CisJY2xybAlMT0NBTF9ISSglYTEpCXxjbGVhciBtc2IKKwl0c3RiCUxPQ0FMX1NHTiglYTEpCisJYmVxcwlkYmxfaW5mCQl8aWYgcG9zaXRpdmUsIGdvIGFoZWFkIGFuZCB3cml0ZSBpdAorCWJzZXRsCSMzMSwlZDAJCXxpZiBuZWdhdGl2ZSBwdXQgaW4gc2lnbiBpbmZvcm1hdGlvbgorZGJsX2luZjoKKwltb3ZlbAklZDAsTE9DQUxfRVgoJWExKQl8cHV0IHRoZSBuZXcgZXhwIGJhY2sgb24gdGhlIHN0YWNrCisJYnJhcwlkYmxfd3J0CitnZXRfbWFudDoKKwltb3ZlbAlMT0NBTF9ISSglYTEpLCVkMQl8Z2V0IG1zIG1hbnRpc3NhCisJYmZleHR1CSVkMXsjMTojMjB9LCVkMQl8Z2V0IHVwcGVyIDIwIGJpdHMgb2YgbXMKKwlvcmwJJWQxLCVkMAkJfHB1dCB0aGVzZSBiaXRzIGluIG1zIHdvcmQgb2YgZG91YmxlCisJbW92ZWwJJWQwLExPQ0FMX0VYKCVhMSkJfHB1dCB0aGUgbmV3IGV4cCBiYWNrIG9uIHRoZSBzdGFjaworCW1vdmVsCUxPQ0FMX0hJKCVhMSksJWQxCXxnZXQgbXMgbWFudGlzc2EKKwltb3ZlbAkjMjEsJWQwCQl8bG9hZCBzaGlmdCBjb3VudAorCWxzbGwJJWQwLCVkMQkJfHB1dCBsb3dlciAxMSBiaXRzIGluIHVwcGVyIGJpdHMKKwltb3ZlbAklZDEsTE9DQUxfSEkoJWExKQl8YnVpbGQgbG93ZXIgbHdvcmQgaW4gbWVtb3J5CisJbW92ZWwJTE9DQUxfTE8oJWExKSwlZDEJfGdldCBscyBtYW50aXNzYQorCWJmZXh0dQklZDF7IzA6IzIxfSwlZDAJfGdldCBscyAyMSBiaXRzIG9mIGRvdWJsZQorCW9ybAklZDAsTE9DQUxfSEkoJWExKQl8cHV0IHRoZW0gaW4gZG91YmxlIHJlc3VsdAorZGJsX3dydDoKKwltb3ZlbAkjMHg4LCVkMAkJfGJ5dGUgY291bnQgZm9yIGRvdWJsZSBwcmVjaXNpb24gbnVtYmVyCisJZXhnCSVhMCwlYTEJCXxhMD1zdXBlcnZpc29yIHNvdXJjZSwgYTE9dXNlciBkZXN0CisJYnNybAltZW1fd3JpdGUJfG1vdmUgdGhlIG51bWJlciB0byB0aGUgdXNlcidzIG1lbW9yeQorCXJ0cworfAorfAlkZXN0X3NnbCAtLS0gd3JpdGUgc2luZ2xlIHByZWNpc2lvbiB2YWx1ZSB0byB1c2VyIHNwYWNlCit8Cit8SW5wdXQKK3wJYTAgLT4gZGVzdGluYXRpb24gYWRkcmVzcworfAlhMSAtPiBzb3VyY2UgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCit8Cit8T3V0cHV0Cit8CWEwIC0+IGRlc3Ryb3llZAorfAlhMSAtPiBkZXN0cm95ZWQKK3wJZDAgLT4gMAorfAorfENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIHNpbmdsZSBwcmVjaXNpb24uCit8CXNnbF9zaWduID0gZXh0X3NpZ24KK3wJc2dsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2Yoc2dsIGJpYXMpCit8CWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0Cit8CXNnbF9tYW50ID0gZXh0X21hbnR7NjI6MTJ9Cit8Cit8CQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCit8ICBleHRlbmRlZCAtPiAgfHN8ICAgIGV4cCAgICB8ICAgfDF8IG1zIG1hbnQgICB8ICAgIHwgbHMgbWFudCAgICAgfAorfAkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQorfAkJIDk1CSAgICA2NCAgICA2MyA2MgkgICA0MCAzMiAgICAgIDMxICAgICAxMgkgIDAKK3wJCQkJICAgICB8CSAgIHwKK3wJCQkJICAgICB8CSAgIHwKK3wJCQkJICAgICB8CSAgIHwKK3wJCQkgICAgICAgICAgICAgdiAgICAgdgorfAkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQorfCAgc2luZ2xlICAgLT4JCSAgICAgIHxzfGV4cHwgbWFudCAgfAorfAkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQorfAkJCSAgICAgIDMxICAgICAyMiAgICAgMAorfAorZGVzdF9zZ2w6CisJY2xybAklZDAKKwltb3ZldwlMT0NBTF9FWCglYTEpLCVkMAl8Z2V0IGV4cG9uZW50CisJc3VidwkjMHgzZmZmLCVkMAl8c3VidHJhY3QgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKKwljbXB3CSMweDQwMDAsJWQwCXxjaGVjayBpZiBpbmYKKwliZXFzCXNpbmYJCXxpZiBzbywgc3BlY2lhbCBjYXNlCisJYWRkdwkjMHg3ZiwlZDAJCXxhZGQgc2luZ2xlIHByZWNpc2lvbiBiaWFzCisJc3dhcAklZDAJCXxwdXQgZXhwIGluIHVwcGVyIHdvcmQgb2YgZDAKKwlsc2xsCSM3LCVkMAkJfHNoaWZ0IGl0IGludG8gc2luZ2xlIGV4cCBiaXRzCisJdHN0YglMT0NBTF9TR04oJWExKQorCWJlcXMJZ2V0X3NtYW4JfGlmIHBvc2l0aXZlLCBjb250aW51ZQorCWJzZXRsCSMzMSwlZDAJCXxpZiBuZWdhdGl2ZSwgcHV0IGluIHNpZ24gZmlyc3QKKwlicmFzCWdldF9zbWFuCXxnZXQgbWFudGlzc2EKK3NpbmY6CisJbW92ZWwJIzB4N2Y4MDAwMDAsJWQwCXxsb2FkIHNpbmdsZSBpbmYgZXhwIHRvIGQwCisJdHN0YglMT0NBTF9TR04oJWExKQorCWJlcXMJc2dsX3dydAkJfGlmIHBvc2l0aXZlLCBjb250aW51ZQorCWJzZXRsCSMzMSwlZDAJCXxpZiBuZWdhdGl2ZSwgcHV0IGluIHNpZ24gaW5mbworCWJyYXMJc2dsX3dydAorCitnZXRfc21hbjoKKwltb3ZlbAlMT0NBTF9ISSglYTEpLCVkMQl8Z2V0IG1zIG1hbnRpc3NhCisJYmZleHR1CSVkMXsjMTojMjN9LCVkMQl8Z2V0IHVwcGVyIDIzIGJpdHMgb2YgbXMKKwlvcmwJJWQxLCVkMAkJfHB1dCB0aGVzZSBiaXRzIGluIG1zIHdvcmQgb2Ygc2luZ2xlCisKK3NnbF93cnQ6CisJbW92ZWwJJWQwLExfU0NSMSglYTYpCXxwdXQgdGhlIG5ldyBleHAgYmFjayBvbiB0aGUgc3RhY2sKKwltb3ZlbAkjMHg0LCVkMAkJfGJ5dGUgY291bnQgZm9yIHNpbmdsZSBwcmVjaXNpb24gbnVtYmVyCisJdHN0bAklYTAJCXx1c2VycyBkZXN0aW5hdGlvbiBhZGRyZXNzCisJYmVxcwlzZ2xfRG4JCXxkZXN0aW5hdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIKKwlleGcJJWEwLCVhMQkJfGEwPXN1cGVydmlzb3Igc291cmNlLCBhMT11c2VyIGRlc3QKKwlsZWFsCUxfU0NSMSglYTYpLCVhMAl8cG9pbnQgYTAgdG8gZGF0YQorCWJzcmwJbWVtX3dyaXRlCXxtb3ZlIHRoZSBudW1iZXIgdG8gdGhlIHVzZXIncyBtZW1vcnkKKwlydHMKK3NnbF9EbjoKKwlic3JsCWdldF9mbGluZQl8cmV0dXJucyBmbGluZSB3b3JkIGluIGQwCisJYW5kdwkjMHg3LCVkMAkJfGlzb2xhdGUgcmVnaXN0ZXIgbnVtYmVyCisJbW92ZWwJJWQwLCVkMQkJfGQxIGhhcyBzaXplOnJlZyBmb3JtYXR0ZWQgZm9yIHJlZ19kZXN0CisJb3JsCSMweDEwLCVkMQkJfHJlZ19kZXN0IHdhbnRzIHNpemUgYWRkZWQgdG8gcmVnIworCWJyYWwJcmVnX2Rlc3QJfHNpemUgaXMgWCwgcnRzIGluIHJlZ19kZXN0IHdpbGwKK3wJCQkJO3JldHVybiB0byBjYWxsZXIgb2YgZGVzdF9zZ2wKKworZGVzdF9leHQ6CisJdHN0YglMT0NBTF9TR04oJWExKQl8cHV0IGJhY2sgc2lnbiBpbnRvIGV4cG9uZW50IHdvcmQKKwliZXFzCWRzdHhfY29udAorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTEpCitkc3R4X2NvbnQ6CisJY2xyYglMT0NBTF9TR04oJWExKQl8Y2xlYXIgb3V0IHRoZSBzaWduIGJ5dGUKKworCW1vdmVsCSMweDBjLCVkMAkJfGJ5dGUgY291bnQgZm9yIGV4dGVuZGVkIG51bWJlcgorCWV4ZwklYTAsJWExCQl8YTA9c3VwZXJ2aXNvciBzb3VyY2UsIGExPXVzZXIgZGVzdAorCWJzcmwJbWVtX3dyaXRlCXxtb3ZlIHRoZSBudW1iZXIgdG8gdGhlIHVzZXIncyBtZW1vcnkKKwlydHMKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5mbC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF91bmZsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3ZmNjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5mbC5TCkBAIC0wLDAgKzEsMjY5IEBACit8Cit8CXhfdW5mbC5zYSAzLjQgNy8xLzkxCit8Cit8CWZwc3BfdW5mbCAtLS0gRlBTUCBoYW5kbGVyIGZvciB1bmRlcmZsb3cgZXhjZXB0aW9uCit8Cit8IFRyYXAgZGlzYWJsZWQgcmVzdWx0cworfAlGb3IgODgxLzIgY29tcGF0aWJpbGl0eSwgc3cgbXVzdCBkZW5vcm1hbGl6ZSB0aGUgaW50ZXJtZWRpYXRlCit8IHJlc3VsdCwgdGhlbiBzdG9yZSB0aGUgcmVzdWx0LiAgRGVub3JtYWxpemF0aW9uIGlzIGFjY29tcGxpc2hlZAorfCBieSB0YWtpbmcgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgKHdoaWNoIGlzIGFsd2F5cyBub3JtYWxpemVkKSBhbmQKK3wgc2hpZnRpbmcgdGhlIG1hbnRpc3NhIHJpZ2h0IHdoaWxlIGluY3JlbWVudGluZyB0aGUgZXhwb25lbnQgdW50aWwKK3wgaXQgaXMgZXF1YWwgdG8gdGhlIGRlbm9ybWFsaXplZCBleHBvbmVudCBmb3IgdGhlIGRlc3RpbmF0aW9uCit8IGZvcm1hdC4gIEFmdGVyIGRlbm9ybWFsaXphdGlvbiwgdGhlIHJlc3VsdCBpcyByb3VuZGVkIHRvIHRoZQorfCBkZXN0aW5hdGlvbiBmb3JtYXQuCit8Cit8IFRyYXAgZW5hYmxlZCByZXN1bHRzCit8CUFsbCB0cmFwIGRpc2FibGVkIGNvZGUgYXBwbGllcy4JSW4gYWRkaXRpb24gdGhlIGV4Y2VwdGlvbmFsCit8IG9wZXJhbmQgbmVlZHMgdG8gbWFkZSBhdmFpbGFibGUgdG8gdGhlIHVzZXIgd2l0aCBhIGJpYXMgb2YgJDYwMDAKK3wgYWRkZWQgdG8gdGhlIGV4cG9uZW50LgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCitYX1VORkw6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglkZW5vcm0KKwl8eHJlZglyb3VuZAorCXx4cmVmCXN0b3JlCisJfHhyZWYJZ19ybmRwcgorCXx4cmVmCWdfb3BjbHMKKwl8eHJlZglnX2RmbXRvdQorCXx4cmVmCXJlYWxfdW5mbAorCXx4cmVmCXJlYWxfaW5leAorCXx4cmVmCWZwc3BfZG9uZQorCXx4cmVmCWIxMjM4X2ZpeAorCisJLmdsb2JhbAlmcHNwX3VuZmwKK2Zwc3BfdW5mbDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJWE3KQorCW1vdmVtbAkJJWQwLSVkMS8lYTAtJWExLFVTRVJfREEoJWE2KQorCWZtb3ZlbXgJJWZwMC0lZnAzLFVTRVJfRlAwKCVhNikKKwlmbW92ZW1sCSVmcGNyLyVmcHNyLyVmcGlhcixVU0VSX0ZQQ1IoJWE2KQorCit8CisJYnNybAkJdW5mX3Jlcwl8ZGVub3JtYWxpemUsIHJvdW5kICYgc3RvcmUgaW50ZXJtIG9wCit8Cit8IElmIHVuZGVyZmxvdyBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCwgY2hlY2sgZm9yIGluZXhhY3QKK3wgZXhjZXB0aW9uCit8CisJYnRzdGIJCSN1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYmVxcwkJY2tfaW5leAorCisJYnRzdGIJCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJCW5vX2UzXzEKK3wKK3wgQ2xlYXIgZGlydHkgYml0IG9uIGRlc3QgcmVzaXN0ZXIgaW4gdGhlIGZyYW1lIGJlZm9yZSBicmFuY2hpbmcKK3wgdG8gYjEyMzhfZml4LgorfAorCWJmZXh0dQkJQ01EUkVHM0IoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWcgbm8KKwliY2xyYgkJJWQwLEZQUl9ESVJUWV9CSVRTKCVhNikJfGNsciBkZXN0IGRpcnR5IGJpdAorCWJzcmwJCWIxMjM4X2ZpeAkJfHRlc3QgZm9yIGJ1ZzEyMzggY2FzZQorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorbm9fZTNfMToKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX3VuZmwKK3wKK3wgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBlaXRoZXIgaW5leDIgb3IgaW5leDEgZXhjZXB0aW9ucyB3aXRoIHRoZQorfCB1bmZsLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorCW1vdmViCQlGUENSX0VOQUJMRSglYTYpLCVkMAorCWFuZGIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCisJYW5kaWIJCSMweDMsJWQwCisJYmVxcwkJdW5mbF9kb25lCisKK3wKK3wgSW5leGFjdCBlbmFibGVkIGFuZCByZXBvcnRlZCwgYW5kIHdlIG11c3QgdGFrZSBhbiBpbmV4YWN0IGV4Y2VwdGlvbgorfAordGFrZV9pbmV4OgorCWJ0c3RiCQkjRTMsRV9CWVRFKCVhNikKKwliZXFzCQlub19lM18yCit8Cit8IENsZWFyIGRpcnR5IGJpdCBvbiBkZXN0IHJlc2lzdGVyIGluIHRoZSBmcmFtZSBiZWZvcmUgYnJhbmNoaW5nCit8IHRvIGIxMjM4X2ZpeC4KK3wKKwliZmV4dHUJCUNNRFJFRzNCKCVhNil7IzY6IzN9LCVkMAl8Z2V0IGRlc3QgcmVnIG5vCisJYmNscmIJCSVkMCxGUFJfRElSVFlfQklUUyglYTYpCXxjbHIgZGVzdCBkaXJ0eSBiaXQKKwlic3JsCQliMTIzOF9maXgJCXx0ZXN0IGZvciBidWcxMjM4IGNhc2UKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKK25vX2UzXzI6CisJbW92ZWIJCSNJTkVYX1ZFQyxFWENfVkVDKzEoJWE2KQorCW1vdmVtbCAgICAgICAgIFVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14ICAgICAgICBVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwgICAgICAgIFVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlICAgICAgICAoJWE3KSsKKwl1bmxrICAgICAgICAgICAgJWE2CisJYnJhbAkJcmVhbF9pbmV4CisKK3VuZmxfZG9uZToKKwliY2xyYgkJI0UzLEVfQllURSglYTYpCisJYmVxcwkJZTFfc2V0CQl8aWYgc2V0IHRoZW4gYnJhbmNoCit8Cit8IENsZWFyIGRpcnR5IGJpdCBvbiBkZXN0IHJlc2lzdGVyIGluIHRoZSBmcmFtZSBiZWZvcmUgYnJhbmNoaW5nCit8IHRvIGIxMjM4X2ZpeC4KK3wKKwliZmV4dHUJCUNNRFJFRzNCKCVhNil7IzY6IzN9LCVkMAkJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLEZQU1JfU0hBRE9XKCVhNikKKwlvcmwJCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJZnBzcF9kb25lCitlMV9zZXQ6CisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJdW5sawkJJWE2CisJYnJhbAkJZnBzcF9kb25lCit8Cit8CXVuZl9yZXMgLS0tIHVuZGVyZmxvdyByZXN1bHQgY2FsY3VsYXRpb24KK3wKK3VuZl9yZXM6CisJYnNybAkJZ19ybmRwcgkJfHJldHVybnMgUk5EX1BSRUMgaW4gZDAgMD1leHQsCit8CQkJCQk7MT1zZ2wsIDI9ZGJsCit8CQkJCQk7d2UgbmVlZCB0aGUgUk5EX1BSRUMgaW4gdGhlCit8CQkJCQk7dXBwZXIgd29yZCBmb3Igcm91bmQKKwltb3ZldwkJIzAsLSglYTcpCisJbW92ZXcJCSVkMCwtKCVhNykJfGNvcHkgUk5EX1BSRUMgdG8gc3RhY2sKK3wKK3wKK3wgSWYgdGhlIGV4Y2VwdGlvbiBiaXQgc2V0IGlzIEUzLCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZCBmcm9tIHRoZQorfCBmcHUgaXMgaW4gV0JURU1QOyBlbHNlIGl0IGlzIGluIEZQVEVNUC4KK3wKKwlidHN0YgkJI0UzLEVfQllURSglYTYpCisJYmVxcwkJdW5mX0UxCit1bmZfRTM6CisJbGVhCQlXQlRFTVAoJWE2KSwlYTAJfGEwIG5vdyBwb2ludHMgdG8gb3BlcmFuZAorfAorfCBUZXN0IGZvciBmc2dsZGl2IGFuZCBmc2dsbXVsLiAgSWYgdGhlIGluc3Qgd2FzIG9uZSBvZiB0aGVzZSwgdGhlbgorfCBmb3JjZSB0aGUgcHJlY2lzaW9uIHRvIGV4dGVuZGVkIGZvciB0aGUgZGVub3JtIHJvdXRpbmUuICBVc2UKK3wgdGhlIHVzZXIncyBwcmVjaXNpb24gZm9yIHRoZSByb3VuZCByb3V0aW5lLgorfAorCW1vdmV3CQlDTURSRUczQiglYTYpLCVkMQl8Y2hlY2sgZm9yIGZzZ2xkaXYgb3IgZnNnbG11bAorCWFuZGl3CQkjMHg3ZiwlZDEKKwljbXBpdwkJIzB4MzAsJWQxCQl8Y2hlY2sgZm9yIHNnbGRpdgorCWJlcXMJCXVuZl9zZ2wKKwljbXBpdwkJIzB4MzMsJWQxCQl8Y2hlY2sgZm9yIHNnbG11bAorCWJuZXMJCXVuZl9jb250CXxpZiBub3QsIHVzZSBmcGNyIHByZWMgaW4gcm91bmQKK3VuZl9zZ2w6CisJY2xybAkJJWQwCisJbW92ZXcJCSMweDEsKCVhNykJfG92ZXJyaWRlIGdfcm5kcHIgcHJlY2lzaW9uCit8CQkJCQk7Zm9yY2Ugc2luZ2xlCisJYnJhcwkJdW5mX2NvbnQKK3VuZl9FMToKKwlsZWEJCUZQVEVNUCglYTYpLCVhMAl8YTAgbm93IHBvaW50cyB0byBvcGVyYW5kCit1bmZfY29udDoKKwliY2xyYgkJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfGNsZWFyIHNpZ24gYml0CisJc25lCQlMT0NBTF9TR04oJWEwKQkJfHN0b3JlIHNpZ24KKworCWJzcmwJCWRlbm9ybQkJfHJldHVybnMgZGVub3JtLCBhMCBwb2ludHMgdG8gaXQKK3wKK3wgV0FSTklORzoKK3wJCQkJO2QwIGhhcyBndWFyZCxyb3VuZCBzdGlja3kgYml0Cit8CQkJCTttYWtlIHN1cmUgdGhhdCBpdCBpcyBub3QgY29ycnVwdGVkCit8CQkJCTtiZWZvcmUgaXQgcmVhY2hlcyB0aGUgcm91bmQgc3Vicm91dGluZQorfAkJCQk7YWxzbyBlbnN1cmUgdGhhdCBhMCBpc24ndCBjb3JydXB0ZWQKKworfAorfCBTZXQgdXAgZDEgZm9yIHJvdW5kIHN1YnJvdXRpbmUgZDEgY29udGFpbnMgdGhlIFBSRUMvTU9ERQorfCBpbmZvcm1hdGlvbiByZXNwZWN0aXZlbHkgb24gdXBwZXIvbG93ZXIgcmVnaXN0ZXIgaGFsdmVzLgorfAorCWJmZXh0dQkJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8Z2V0IG1vZGUgZnJvbSBGUENSCit8CQkJCQkJO21vZGUgaW4gbG93ZXIgZDEKKwlhZGRsCQkoJWE3KSssJWQxCQl8bWVyZ2UgUFJFQy9NT0RFCit8Cit8IFdBUk5JTkc6IGEwIGFuZCBkMCBhcmUgYXNzdW1lZCB0byBiZSBpbnRhY3QgYmV0d2VlbiB0aGUgZGVub3JtIGFuZAorfCByb3VuZCBzdWJyb3V0aW5lcy4gQWxsIGNvZGUgYmV0d2VlbiB0aGVzZSB0d28gc3Vicm91dGluZXMKK3wgbXVzdCBub3QgY29ycnVwdCBhMCBhbmQgZDAuCit8Cit8Cit8IFBlcmZvcm0gUm91bmQKK3wJSW5wdXQ6CQlhMCBwb2ludHMgdG8gaW5wdXQgb3BlcmFuZAorfAkJCWQwezMxOjI5fSBoYXMgZ3VhcmQsIHJvdW5kLCBzdGlja3kKK3wJCQlkMXswMTowMH0gaGFzIHJvdW5kaW5nIG1vZGUKK3wJCQlkMXsxNzoxNn0gaGFzIHJvdW5kaW5nIHByZWNpc2lvbgorfAlPdXRwdXQ6CQlhMCBwb2ludHMgdG8gcm91bmRlZCBvcGVyYW5kCit8CisKKwlic3JsCQlyb3VuZAkJfHJldHVybnMgcm91bmRlZCBkZW5vcm0gYXQgKGEwKQorfAorfCBEaWZmZXJlbnRpYXRlIGJldHdlZW4gc3RvcmUgdG8gbWVtb3J5IHZzLiBzdG9yZSB0byByZWdpc3RlcgorfAordW5mX3N0b3JlOgorCWJzcmwJCWdfb3BjbHMJCXxyZXR1cm5zIG9wY2xhc3MgaW4gZDB7MjowfQorCWNtcGliCQkjMHgzLCVkMAorCWJuZXMJCW5vdF9vcGMwMTEKK3wKK3wgQXQgdGhpcyBwb2ludCwgYSBzdG9yZSB0byBtZW1vcnkgaXMgcGVuZGluZworfAorb3BjMDExOgorCWJzcmwJCWdfZGZtdG91CisJdHN0YgkJJWQwCisJYmVxcwkJZXh0X29wYzAxMQl8SWYgZXh0ZW5kZWQsIGRvIG5vdCBzdWJ0cmFjdAorfAkJCQk7SWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIHNnbC9kYmwsCisJdHN0YgkJTE9DQUxfSEkoJWEwKQl8SWYgcm91bmRlZCByZXN1bHQgaXMgbm9ybWFsLGRvbid0Cit8CQkJCQk7c3VidHJhY3QKKwlibWlzCQlleHRfb3BjMDExCisJc3VicXcJCSMxLExPQ0FMX0VYKCVhMCkJfGFjY291bnQgZm9yIGRlbm9ybSBiaWFzIHZzLgorfAkJCQk7bm9ybWFsaXplZCBiaWFzCit8CQkJCTsgICAgICAgICAgbm9ybWFsaXplZCAgIGRlbm9ybWFsaXplZAorfAkJCQk7c2luZ2xlICAgICAgICQ3ZiAgICAgICAgICAgJDdlCit8CQkJCTtkb3VibGUgICAgICAgJDNmZiAgICAgICAgICAkM2ZlCit8CitleHRfb3BjMDExOgorCWJzcmwJCXN0b3JlCQl8c3RvcmVzIHRvIG1lbW9yeQorCWJyYXMJCXVuZl9kb25lCXxmaW5pc2ggdXAKKworfAorfCBBdCB0aGlzIHBvaW50LCBhIHN0b3JlIHRvIGEgZmxvYXQgcmVnaXN0ZXIgaXMgcGVuZGluZworfAorbm90X29wYzAxMToKKwlic3JsCQlzdG9yZQl8c3RvcmVzIHRvIGZsb2F0IHJlZ2lzdGVyCit8CQkJCTthMCBpcyBub3QgY29ycnVwdGVkIG9uIGEgc3RvcmUgdG8gYQorfAkJCQk7ZmxvYXQgcmVnaXN0ZXIuCit8Cit8IFNldCB0aGUgY29uZGl0aW9uIGNvZGVzIGFjY29yZGluZyB0byByZXN1bHQKK3wKKwl0c3RsCQlMT0NBTF9ISSglYTApCXxjaGVjayB1cHBlciBtYW50aXNzYQorCWJuZXMJCWNrX3NnbgorCXRzdGwJCUxPQ0FMX0xPKCVhMCkJfGNoZWNrIGxvd2VyIG1hbnRpc3NhCisJYm5lcwkJY2tfc2duCisJYnNldGIJCSN6X2JpdCxGUFNSX0NDKCVhNikgfHNldCBjb25kaXRpb24gY29kZXMgaWYgemVybworY2tfc2duOgorCWJ0c3RiCQkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgdGhlIHNpZ24gYml0CisJYmVxcwkJdW5mX2RvbmUKKwlic2V0YgkJI25lZ19iaXQsRlBTUl9DQyglYTYpCisKK3wKK3wgRmluaXNoLgorfAordW5mX2RvbmU6CisJYnRzdGIJCSNpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcXMJCW5vX2F1bmZsCisJYnNldGIJCSNhdW5mbF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKK25vX2F1bmZsOgorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF91bmltcC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF91bmltcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGNiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X3VuaW1wLlMKQEAgLTAsMCArMSw3NyBAQAorfAorfAl4X3VuaW1wLnNhIDMuMyA3LzEvOTEKK3wKK3wJZnBzcF91bmltcCAtLS0gRlBTUCBoYW5kbGVyIGZvciB1bmltcGxlbWVudGVkIGluc3RydWN0aW9uCit8CWV4Y2VwdGlvbi4KK3wKK3wgSW52b2tlZCB3aGVuIHRoZSB1c2VyIHByb2dyYW0gZW5jb3VudGVycyBhIGZsb2F0aW5nLXBvaW50Cit8IG9wLWNvZGUgdGhhdCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0LiAgVHJhcCB2ZWN0b3IjIDExCit8IChTZWUgdGFibGUgOC0xIE1DNjgwMzAgVXNlcidzIE1hbnVhbCkuCit8Cit8Cit8IE5vdGU6IEFuIGZzYXZlIGZvciBhbiB1bmltcGxlbWVudGVkIGluc3QuIHdpbGwgY3JlYXRlIGEgc2hvcnQKK3wgZnNhdmUgc3RhY2suCit8Cit8ICBJbnB1dDogMS4gU2l4IHdvcmQgc3RhY2sgZnJhbWUgZm9yIHVuaW1wbGVtZW50ZWQgaW5zdCwgZm91ciB3b3JkCit8ICAgICAgICAgICAgZm9yIGlsbGVnYWwKK3wgICAgICAgICAgICAoU2VlIHRhYmxlIDgtNyBNQzY4MDMwIFVzZXIncyBNYW51YWwpLgorfCAgICAgICAgIDIuIFVuaW1wIChzaG9ydCkgZnNhdmUgc3RhdGUgZnJhbWUgY3JlYXRlZCBoZXJlIGJ5IGZzYXZlCit8ICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uCit8Cit8Cit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCitYX1VOSU1QOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJZ2V0X29wCisJfHhyZWYJZG9fZnVuYworCXx4cmVmCXN0b19yZXMKKwl8eHJlZglnZW5fZXhjZXB0CisJfHhyZWYJZnBzcF9mbXRfZXJyb3IKKworCS5nbG9iYWwJZnBzcF91bmltcAorCS5nbG9iYWwJdW5pXzIKK2Zwc3BfdW5pbXA6CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKK3VuaV8yOgorCW1vdmVtbAkJJWQwLSVkMS8lYTAtJWExLFVTRVJfREEoJWE2KQorCWZtb3ZlbXgJJWZwMC0lZnAzLFVTRVJfRlAwKCVhNikKKwlmbW92ZW1sCSVmcGNyLyVmcHNyLyVmcGlhcixVU0VSX0ZQQ1IoJWE2KQorCW1vdmViCQkoJWE3KSwlZDAJCXx0ZXN0IGZvciB2YWxpZCB2ZXJzaW9uIG51bQorCWFuZGliCQkjMHhmMCwlZDAJCXx0ZXN0IGZvciAkNHgKKwljbXBpYgkJI1ZFUl80LCVkMAl8bXVzdCBiZSAkNHggb3IgZXhpdAorCWJuZWwJCWZwc3BfZm10X2Vycm9yCit8Cit8CVRlbXBvcmFyeSBEMjVCIEZpeAorfAlUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBGUFNSCit8CWV4Y2VwdGlvbiBieXRlIGFuZCBjb25kaXRpb24gY29kZXMgYXJlIGNsZWFyIGJlZm9yZSBwcm9jZWVkaW5nCit8CisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLCVkMAorCWFuZGwJCSMweEZGMDBGRiwlZDAJfGNsZWFyIGFsbCBidXQgYWNjcnVlZCBleGNlcHRpb25zCisJbW92ZWwJCSVkMCxVU0VSX0ZQU1IoJWE2KQorCWZtb3ZlbAkJIzAsJUZQU1IgfGNsZWFyIGFsbCB1c2VyIGJpdHMKKwlmbW92ZWwJCSMwLCVGUENSCXxjbGVhciBhbGwgdXNlciBleGNlcHRpb25zIGZvciBGUFNQCisKKwljbHJiCQlVRkxHX1RNUCglYTYpCXxjbHIgZmxhZyBmb3IgdW5zdXBwIGRhdGEKKworCWJzcmwJCWdldF9vcAkJfGdvIGdldCBvcGVyYW5kKHMpCisJY2xyYgkJU1RPUkVfRkxHKCVhNikKKwlic3JsCQlkb19mdW5jCQl8ZG8gdGhlIGZ1bmN0aW9uCisJZnNhdmUJCS0oJWE3KQkJfGNhcHR1cmUgcG9zc2libGUgZXhjIHN0YXRlCisJdHN0YgkJU1RPUkVfRkxHKCVhNikKKwlibmVzCQlub19zdG9yZQl8aWYgU1RPUkVfRkxHIGlzIHNldCwgbm8gc3RvcmUKKwlic3JsCQlzdG9fcmVzCQl8c3RvcmUgdGhlIHJlc3VsdCBpbiB1c2VyIHNwYWNlCitub19zdG9yZToKKwlicmFsCQlnZW5fZXhjZXB0CXxwb3N0IGFueSBleGNlcHRpb25zIGFuZCByZXR1cm4KKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5zdXBwLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X3Vuc3VwcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X3Vuc3VwcC5TCkBAIC0wLDAgKzEsODMgQEAKK3wKK3wJeF91bnN1cHAuc2EgMy4zIDcvMS85MQorfAorfAlmcHNwX3Vuc3VwcCAtLS0gRlBTUCBoYW5kbGVyIGZvciB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9uCit8Cit8IFRyYXAgdmVjdG9yICM1NQkoU2VlIHRhYmxlIDgtMSBNYzY4MDMwIFVzZXIncyBtYW51YWwpLgorfCBJbnZva2VkIHdoZW4gdGhlIHVzZXIgcHJvZ3JhbSBlbmNvdW50ZXJzIGEgZGF0YSBmb3JtYXQgKHBhY2tlZCkgdGhhdAorfCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IG9yIGEgZGF0YSB0eXBlIChkZW5vcm1hbGl6ZWQgbnVtYmVycyBvciB1bi0KK3wgbm9ybWFsaXplZCBudW1iZXJzKS4KK3wgTm9ybWFsaXplcyBkZW5vcm1zIGFuZCB1bm5vcm1zLCB1bnBhY2tzIHBhY2tlZCBudW1iZXJzIHRoZW4gc3RvcmVzCit8IHRoZW0gYmFjayBpbnRvIHRoZSBtYWNoaW5lIHRvIGxldCB0aGUgMDQwIGZpbmlzaCB0aGUgb3BlcmF0aW9uLgorfAorfCBVbnN1cHAgY2FsbHMgdHdvIHJvdXRpbmVzOgorfAkxLiBnZXRfb3AgLSAgZ2V0cyB0aGUgb3BlcmFuZChzKQorfAkyLiByZXNfZnVuYyAtIHJlc3RvcmUgdGhlIGZ1bmN0aW9uIGJhY2sgaW50byB0aGUgMDQwIG9yCit8CQkJaWYgZm1vdmUucCBmcG0sPGVhPiB0aGVuIHBhY2sgc291cmNlIChmcG0pCit8CQkJYW5kIHN0b3JlIGluIHVzZXJzIG1lbW9yeSA8ZWE+LgorfAorfCAgSW5wdXQ6IExvbmcgZnNhdmUgc3RhY2sgZnJhbWUKK3wKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9VTlNVUFA6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglnZXRfb3AKKwl8eHJlZglyZXNfZnVuYworCXx4cmVmCWdlbl9leGNlcHQKKwl8eHJlZglmcHNwX2ZtdF9lcnJvcgorCisJLmdsb2JhbAlmcHNwX3Vuc3VwcAorZnBzcF91bnN1cHA6Cit8CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKworCisJbW92ZWIJCSglYTcpLFZFUl9UTVAoJWE2KSB8c2F2ZSB2ZXJzaW9uIG51bWJlcgorCW1vdmViCQkoJWE3KSwlZDAJCXx0ZXN0IGZvciB2YWxpZCB2ZXJzaW9uIG51bQorCWFuZGliCQkjMHhmMCwlZDAJCXx0ZXN0IGZvciAkNHgKKwljbXBpYgkJI1ZFUl80LCVkMAl8bXVzdCBiZSAkNHggb3IgZXhpdAorCWJuZWwJCWZwc3BfZm10X2Vycm9yCisKKwlmbW92ZWwJCSMwLCVGUFNSCQl8Y2xlYXIgYWxsIHVzZXIgc3RhdHVzIGJpdHMKKwlmbW92ZWwJCSMwLCVGUENSCQl8Y2xlYXIgYWxsIHVzZXIgY29udHJvbCBiaXRzCit8Cit8CVRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEZQU1IKK3wJZXhjZXB0aW9uIGJ5dGUgYW5kIGNvbmRpdGlvbiBjb2RlcyBhcmUgY2xlYXIgYmVmb3JlIHByb2NlZWRpbmcsCit8CWV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBmbW92ZSwgd2hpY2ggbGVhdmVzIHRoZSBjYydzIGludGFjdC4KK3wKK3Vuc3VwcF9jb246CisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLCVkMQorCWJ0c3QJCSM1LENNRFJFRzFCKCVhNikJfGxvb2tpbmcgZm9yIGZtb3ZlIG91dAorCWJuZQkJZm1vdmVfY29uCisJYW5kbAkJIzB4RkYwMEZGLCVkMQl8Y2xlYXIgYWxsIGJ1dCBhZXhjcyBhbmQgcWJ5dGUKKwlicmFzCQllbmRfZml4CitmbW92ZV9jb246CisJYW5kbAkJIzB4MEZGRjQwRkYsJWQxCXxjbGVhciBhbGwgYnV0IGNjJ3MsIHNuYW4gYml0LCBhZXhjcywgYW5kIHFieXRlCitlbmRfZml4OgorCW1vdmVsCQklZDEsVVNFUl9GUFNSKCVhNikKKworCXN0CQlVRkxHX1RNUCglYTYpCXxzZXQgZmxhZyBmb3IgdW5zdXBwIGRhdGEKKworCWJzcmwJCWdldF9vcAkJfGV2ZXJ5dGhpbmcgb2theSwgZ28gZ2V0IG9wZXJhbmQocykKKwlic3JsCQlyZXNfZnVuYwl8Zml4IHVwIHN0YWNrIGZyYW1lIHNvIGNhbiByZXN0b3JlIGl0CisJY2xybAkJLSglYTcpCisJbW92ZWIJCVZFUl9UTVAoJWE2KSwoJWE3KSB8bW92ZSBpZGxlIGZtdCB3b3JkIHRvIHRvcCBvZiBzdGFjaworCWJyYWwJCWdlbl9leGNlcHQKK3wKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvTWFrZWZpbGUgYi9hcmNoL202OGsvaHAzMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNjMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9ocDMwMCBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBrc3ltcy5vIGNvbmZpZy5vIGludHMubyB0aW1lLm8gcmVib290Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9ocDMwMC9SRUFETUUuaHAzMDAgYi9hcmNoL202OGsvaHAzMDAvUkVBRE1FLmhwMzAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDczZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvUkVBRE1FLmhwMzAwCkBAIC0wLDAgKzEsMTQgQEAKK0hQMzAwIG5vdGVzCistLS0tLS0tLS0tLQorCitUaGUgTGludXgvSFAgd2ViIHBhZ2UgaXMgYXQgPGh0dHA6Ly93d3cudGF6ZW5kYS5kZW1vbi5jby51ay9waGlsL2xpbnV4LWhwLz4KKworQ3VycmVudGx5IG9ubHkgOTAwMC8zNDAgbWFjaGluZXMgaGF2ZSBiZWVuIHRlc3RlZC4gIEFueSBhbW91bnQgb2YgUkFNIHNob3VsZAord29yayBub3cgYnV0IEkndmUgb25seSB0cmllZCAxNk1CIGFuZCAxMk1CLgorCitUaGUgc2VyaWFsIGNvbnNvbGUgaXMgcHJvYmFibHkgYnJva2VuIGF0IHRoZSBtb21lbnQgYnV0IHRoZSBUb3BjYXQvSElMIGtleWJvYXJkCitjb21iaW5hdGlvbiBzZWVtcyB0byB3b3JrIGZvciBtZS4gIFlvdXIgbWlsZWFnZSBtYXkgdmFyeS4KKworVGhlIExBTkNFIGRyaXZlciB3b3JrcyBhZnRlciBhIGZhc2hpb24gYnV0IG9ubHkgaWYgeW91IHJlc2V0IHRoZSBjaGlwIGJlZm9yZQorZXZlcnkgcGFja2V0LiAgVGhpcyBkb2Vzbid0IG1ha2UgZm9yIHZlcnkgc3BlZWR5IG9wZXJhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjg1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvY29uZmlnLmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSFAzMDAtc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gY29kZS4gIEl0IGdldHMKKyAqICBjYWxsZWQgYnkgc2V0dXAuYy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2JsaW5rZW4uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZGIoKSBhbmQgd3JpdGViKCkgKi8KKyNpbmNsdWRlIDxhc20vaHAzMDBody5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworI2luY2x1ZGUgImludHMuaCIKKyNpbmNsdWRlICJ0aW1lLmgiCisKK3Vuc2lnbmVkIGxvbmcgaHAzMDBfbW9kZWw7Cit1bnNpZ25lZCBsb25nIGhwMzAwX3VhcnRfc2NvZGUgPSAtMTsKK3Vuc2lnbmVkIGNoYXIgbGVkc3RhdGU7CisKK3N0YXRpYyBjaGFyIHNfaHAzMzBbXSBfX2luaXRkYXRhID0gIjMzMCI7CitzdGF0aWMgY2hhciBzX2hwMzQwW10gX19pbml0ZGF0YSA9ICIzNDAiOworc3RhdGljIGNoYXIgc19ocDM0NVtdIF9faW5pdGRhdGEgPSAiMzQ1IjsKK3N0YXRpYyBjaGFyIHNfaHAzNjBbXSBfX2luaXRkYXRhID0gIjM2MCI7CitzdGF0aWMgY2hhciBzX2hwMzcwW10gX19pbml0ZGF0YSA9ICIzNzAiOworc3RhdGljIGNoYXIgc19ocDM3NVtdIF9faW5pdGRhdGEgPSAiMzc1IjsKK3N0YXRpYyBjaGFyIHNfaHAzODBbXSBfX2luaXRkYXRhID0gIjM4MCI7CitzdGF0aWMgY2hhciBzX2hwMzg1W10gX19pbml0ZGF0YSA9ICIzODUiOworc3RhdGljIGNoYXIgc19ocDQwMFtdIF9faW5pdGRhdGEgPSAiNDAwIjsKK3N0YXRpYyBjaGFyIHNfaHA0MjV0W10gX19pbml0ZGF0YSA9ICI0MjV0IjsKK3N0YXRpYyBjaGFyIHNfaHA0MjVzW10gX19pbml0ZGF0YSA9ICI0MjVzIjsKK3N0YXRpYyBjaGFyIHNfaHA0MjVlW10gX19pbml0ZGF0YSA9ICI0MjVlIjsKK3N0YXRpYyBjaGFyIHNfaHA0MzN0W10gX19pbml0ZGF0YSA9ICI0MzN0IjsKK3N0YXRpYyBjaGFyIHNfaHA0MzNzW10gX19pbml0ZGF0YSA9ICI0MzNzIjsKK3N0YXRpYyBjaGFyICpocDMwMF9tb2RlbHNbXSBfX2luaXRkYXRhID0geworCVtIUF8zMjBdCT0gTlVMTCwKKwlbSFBfMzMwXQk9IHNfaHAzMzAsCisJW0hQXzM0MF0JPSBzX2hwMzQwLAorCVtIUF8zNDVdCT0gc19ocDM0NSwKKwlbSFBfMzUwXQk9IE5VTEwsCisJW0hQXzM2MF0JPSBzX2hwMzYwLAorCVtIUF8zNzBdCT0gc19ocDM3MCwKKwlbSFBfMzc1XQk9IHNfaHAzNzUsCisJW0hQXzM4MF0JPSBzX2hwMzgwLAorCVtIUF8zODVdCT0gc19ocDM4NSwKKwlbSFBfNDAwXQk9IHNfaHA0MDAsCisJW0hQXzQyNVRdCT0gc19ocDQyNXQsCisJW0hQXzQyNVNdCT0gc19ocDQyNXMsCisJW0hQXzQyNUVdCT0gc19ocDQyNWUsCisJW0hQXzQzM1RdCT0gc19ocDQzM3QsCisJW0hQXzQzM1NdCT0gc19ocDQzM3MsCit9OworCitzdGF0aWMgY2hhciBocDMwMF9tb2RlbF9uYW1lWzEzXSA9ICJIUDkwMDAvIjsKKworZXh0ZXJuIHZvaWQgaHAzMDBfcmVzZXQodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgKCpocDMwMF9kZWZhdWx0X2hhbmRsZXJbXSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBzaG93X2hwMzAwX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CisjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKK2V4dGVybiBpbnQgaHAzMDBfc2V0dXBfc2VyaWFsX2NvbnNvbGUodm9pZCkgX19pbml0OworI2VuZGlmCisKK2ludCBfX2luaXQgaHAzMDBfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjb3JkKQoreworCWludCB1bmtub3duID0gMDsKKwljb25zdCB1bnNpZ25lZCBsb25nICpkYXRhID0gcmVjb3JkLT5kYXRhOworCisJc3dpdGNoIChyZWNvcmQtPnRhZykgeworCWNhc2UgQklfSFAzMDBfTU9ERUw6CisJCWhwMzAwX21vZGVsID0gKmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBCSV9IUDMwMF9VQVJUX1NDT0RFOgorCQlocDMwMF91YXJ0X3Njb2RlID0gKmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBCSV9IUDMwMF9VQVJUX0FERFI6CisJCS8qIHNlcmlhbCBwb3J0IGFkZHJlc3M6IGlnbm9yZWQgaGVyZSAqLworCQlicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQl1bmtub3duID0gMTsKKwl9CisKKwlyZXR1cm4gdW5rbm93bjsKK30KKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGhwMzAwX3B1bHNlKGludCB4KQoreworCWlmICh4KQorCQlibGlua2VuX2xlZHMoMHgxMCwgMCk7CisJZWxzZQorCQlibGlua2VuX2xlZHMoMCwgMHgxMCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaHAzMDBfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKQoreworCXN0cmNweShtb2RlbCwgaHAzMDBfbW9kZWxfbmFtZSk7Cit9CisKKyNkZWZpbmUgUlRDQkFTRQkJCTB4ZjA0MjAwMDAKKyNkZWZpbmUgUlRDX0RBVEEJCTB4MQorI2RlZmluZSBSVENfQ01ECQkJMHgzCisKKyNkZWZpbmUJUlRDX0JVU1kJCTB4MDIKKyNkZWZpbmUJUlRDX0RBVEFfUkRZCQkweDAxCisKKyNkZWZpbmUgcnRjX2J1c3koKQkJKGluXzgoUlRDQkFTRSArIFJUQ19DTUQpICYgUlRDX0JVU1kpCisjZGVmaW5lIHJ0Y19kYXRhX2F2YWlsYWJsZSgpCShpbl84KFJUQ0JBU0UgKyBSVENfQ01EKSAmIFJUQ19EQVRBX1JEWSkKKyNkZWZpbmUgcnRjX3N0YXR1cygpCQkoaW5fOChSVENCQVNFICsgUlRDX0NNRCkpCisjZGVmaW5lIHJ0Y19jb21tYW5kKHgpCQlvdXRfOChSVENCQVNFICsgUlRDX0NNRCwgKHgpKQorI2RlZmluZSBydGNfcmVhZF9kYXRhKCkJCShpbl84KFJUQ0JBU0UgKyBSVENfREFUQSkpCisjZGVmaW5lIHJ0Y193cml0ZV9kYXRhKHgpCW91dF84KFJUQ0JBU0UgKyBSVENfREFUQSwgKHgpKQorCisjZGVmaW5lIFJUQ19TRVRSRUcJMHhlMAorI2RlZmluZSBSVENfV1JJVEVSRUcJMHhjMgorI2RlZmluZSBSVENfUkVBRFJFRwkweGMzCisKKyNkZWZpbmUgUlRDX1JFR19TRUMyCTAKKyNkZWZpbmUgUlRDX1JFR19TRUMxCTEKKyNkZWZpbmUgUlRDX1JFR19NSU4yCTIKKyNkZWZpbmUgUlRDX1JFR19NSU4xCTMKKyNkZWZpbmUgUlRDX1JFR19IT1VSMgk0CisjZGVmaW5lIFJUQ19SRUdfSE9VUjEJNQorI2RlZmluZSBSVENfUkVHX1dEQVkJNgorI2RlZmluZSBSVENfUkVHX0RBWTIJNworI2RlZmluZSBSVENfUkVHX0RBWTEJOAorI2RlZmluZSBSVENfUkVHX01PTjIJOQorI2RlZmluZSBSVENfUkVHX01PTjEJMTAKKyNkZWZpbmUgUlRDX1JFR19ZRUFSMgkxMQorI2RlZmluZSBSVENfUkVHX1lFQVIxCTEyCisKKyNkZWZpbmUgUlRDX0hPVVIxXzI0SE1PREUgMHg4CisKKyNkZWZpbmUgUlRDX1NUQVRfTUFTSwkweGYwCisjZGVmaW5lIFJUQ19TVEFUX1JEWQkweDQwCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBocDMwMF9ydGNfcmVhZCh1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBjaGFyIHMsIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKHJ0Y19idXN5KCkpOworCXJ0Y19jb21tYW5kKFJUQ19TRVRSRUcpOworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfd3JpdGVfZGF0YShyZWcpOworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfY29tbWFuZChSVENfUkVBRFJFRyk7CisKKwlkbyB7CisJCXdoaWxlICghcnRjX2RhdGFfYXZhaWxhYmxlKCkpOworCQlzID0gcnRjX3N0YXR1cygpOworCQlyZXQgPSBydGNfcmVhZF9kYXRhKCk7CisJfSB3aGlsZSAoKHMgJiBSVENfU1RBVF9NQVNLKSAhPSBSVENfU1RBVF9SRFkpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGhwMzAwX3J0Y193cml0ZSh1bnNpZ25lZCBjaGFyIHJlZywKKwkJCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXVuc2lnbmVkIGNoYXIgcywgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl3aGlsZSAocnRjX2J1c3koKSk7CisJcnRjX2NvbW1hbmQoUlRDX1NFVFJFRyk7CisJd2hpbGUgKHJ0Y19idXN5KCkpOworCXJ0Y193cml0ZV9kYXRhKCh2YWwgPDwgNCkgfCByZWcpOworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfY29tbWFuZChSVENfV1JJVEVSRUcpOworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfY29tbWFuZChSVENfUkVBRFJFRyk7CisKKwlkbyB7CisJCXdoaWxlICghcnRjX2RhdGFfYXZhaWxhYmxlKCkpOworCQlzID0gcnRjX3N0YXR1cygpOworCQlyZXQgPSBydGNfcmVhZF9kYXRhKCk7CisJfSB3aGlsZSAoKHMgJiBSVENfU1RBVF9NQVNLKSAhPSBSVENfU1RBVF9SRFkpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBocDMwMF9od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKwlpZiAoIW9wKSB7IC8qIHJlYWQgKi8KKwkJdC0+dG1fc2VjICA9IGhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfU0VDMSkgKiAxMCArCisJCQlocDMwMF9ydGNfcmVhZChSVENfUkVHX1NFQzIpOworCQl0LT50bV9taW4gID0gaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19NSU4xKSAqIDEwICsKKwkJCWhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfTUlOMik7CisJCXQtPnRtX2hvdXIgPSAoaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19IT1VSMSkgJiAzKSAqIDEwICsKKwkJCWhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfSE9VUjIpOworCQl0LT50bV93ZGF5ID0gLTE7CisJCXQtPnRtX21kYXkgPSBocDMwMF9ydGNfcmVhZChSVENfUkVHX0RBWTEpICogMTAgKworCQkJaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19EQVkyKTsKKwkJdC0+dG1fbW9uICA9IGhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfTU9OMSkgKiAxMCArCisJCQlocDMwMF9ydGNfcmVhZChSVENfUkVHX01PTjIpIC0gMTsKKwkJdC0+dG1feWVhciA9IGhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfWUVBUjEpICogMTAgKworCQkJaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19ZRUFSMik7CisJCWlmICh0LT50bV95ZWFyIDw9IDY5KQorCQkJdC0+dG1feWVhciArPSAxMDA7CisJfSBlbHNlIHsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfU0VDMSwgdC0+dG1fc2VjIC8gMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19TRUMyLCB0LT50bV9zZWMgJSAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX01JTjEsIHQtPnRtX21pbiAvIDEwKTsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfTUlOMiwgdC0+dG1fbWluICUgMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19IT1VSMSwKKwkJCQkoKHQtPnRtX2hvdXIgLyAxMCkgJiAzKSB8IFJUQ19IT1VSMV8yNEhNT0RFKTsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfSE9VUjIsIHQtPnRtX2hvdXIgJSAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX0RBWTEsIHQtPnRtX21kYXkgLyAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX0RBWTIsIHQtPnRtX21kYXkgJSAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX01PTjEsICh0LT50bV9tb24gKyAxKSAvIDEwKTsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfTU9OMiwgKHQtPnRtX21vbiArIDEpICUgMTApOworCQlpZiAodC0+dG1feWVhciA+PSAxMDApCisJCQl0LT50bV95ZWFyIC09IDEwMDsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfWUVBUjEsIHQtPnRtX3llYXIgLyAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX1lFQVIyLCB0LT50bV95ZWFyICUgMTApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhwMzAwX2dldF9zcyh2b2lkKQoreworCXJldHVybiBocDMwMF9ydGNfcmVhZChSVENfUkVHX1NFQzEpICogMTAgKworCQlocDMwMF9ydGNfcmVhZChSVENfUkVHX1NFQzIpOworfQorCit2b2lkIF9faW5pdCBjb25maWdfaHAzMDAodm9pZCkKK3sKKwltYWNoX3NjaGVkX2luaXQgICAgICA9IGhwMzAwX3NjaGVkX2luaXQ7CisJbWFjaF9pbml0X0lSUSAgICAgICAgPSBocDMwMF9pbml0X0lSUTsKKwltYWNoX3JlcXVlc3RfaXJxICAgICA9IGhwMzAwX3JlcXVlc3RfaXJxOworCW1hY2hfZnJlZV9pcnEgICAgICAgID0gaHAzMDBfZnJlZV9pcnE7CisJbWFjaF9nZXRfbW9kZWwgICAgICAgPSBocDMwMF9nZXRfbW9kZWw7CisJbWFjaF9nZXRfaXJxX2xpc3QgICAgPSBzaG93X2hwMzAwX2ludGVycnVwdHM7CisJbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBocDMwMF9nZXR0aW1lb2Zmc2V0OworCW1hY2hfZGVmYXVsdF9oYW5kbGVyID0gJmhwMzAwX2RlZmF1bHRfaGFuZGxlcjsKKwltYWNoX2h3Y2xrCSAgICAgPSBocDMwMF9od2NsazsKKwltYWNoX2dldF9zcwkgICAgID0gaHAzMDBfZ2V0X3NzOworCW1hY2hfcmVzZXQgICAgICAgICAgID0gaHAzMDBfcmVzZXQ7CisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorCW1hY2hfaGVhcnRiZWF0ICAgICAgID0gaHAzMDBfcHVsc2U7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorCWNvbnN3aXRjaHAJICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKwltYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisKKwlpZiAoaHAzMDBfbW9kZWwgPj0gSFBfMzMwICYmIGhwMzAwX21vZGVsIDw9IEhQXzQzM1MgJiYgaHAzMDBfbW9kZWwgIT0gSFBfMzUwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIEhQOTAwMCBtb2RlbCAlc1xuIiwgaHAzMDBfbW9kZWxzW2hwMzAwX21vZGVsLUhQXzMyMF0pOworCQlzdHJjYXQoaHAzMDBfbW9kZWxfbmFtZSwgaHAzMDBfbW9kZWxzW2hwMzAwX21vZGVsLUhQXzMyMF0pOworCX0KKwllbHNlIHsKKwkJcGFuaWMoIlVua25vd24gSFA5MDAwIE1vZGVsIik7CisJfQorI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCisJaHAzMDBfc2V0dXBfc2VyaWFsX2NvbnNvbGUoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL2hwMzAwbWFwLm1hcCBiL2FyY2gvbTY4ay9ocDMwMC9ocDMwMG1hcC5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NWYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9ocDMwMG1hcC5tYXAKQEAgLTAsMCArMSwyNTIgQEAKKyMgSFAzMDAga2VybmVsIGtleW1hcC4gVGhpcyB1c2VzIDcgbW9kaWZpZXIgY29tYmluYXRpb25zLgora2V5bWFwcyAwLTIsNC01LDgsMTIKKyMgQ2hhbmdlIHRoZSBhYm92ZSBsaW5lIGludG8KKyMJa2V5bWFwcyAwLTIsNC02LDgsMTIKKyMgaW4gY2FzZSB5b3Ugd2FudCB0aGUgZW50cmllcworIwlhbHRnciAgIGNvbnRyb2wga2V5Y29kZSAgODMgPSBCb290CisjCWFsdGdyICAgY29udHJvbCBrZXljb2RlIDExMSA9IEJvb3QKKyMgYmVsb3cuCisjCisjIEluIGZhY3QgQWx0R3IgaXMgdXNlZCB2ZXJ5IGxpdHRsZSwgYW5kIG9uZSBtb3JlIGtleW1hcCBjYW4KKyMgYmUgc2F2ZWQgYnkgbWFwcGluZyBBbHRHciB0byBBbHQgKGFuZCBhZGFwdGluZyBhIGZldyBlbnRyaWVzKToKKyMga2V5Y29kZSAxMDAgPSBBbHQKKyMKK2tleWNvZGUgICAxID0KK2tleWNvZGUgICAyID0gQWx0CitrZXljb2RlICAgMyA9IEFsdAora2V5Y29kZSAgIDQgPSBTaGlmdAora2V5Y29kZSAgIDUgPSBTaGlmdAora2V5Y29kZSAgIDYgPSBDb250cm9sCitrZXljb2RlICAgNyA9CitrZXljb2RlICAgOCA9CitrZXljb2RlICAgOSA9CitrZXljb2RlICAxMCA9CitrZXljb2RlICAxMSA9CitrZXljb2RlICAxMiA9CitrZXljb2RlICAxMyA9CitrZXljb2RlICAxNCA9CitrZXljb2RlICAxNSA9CitrZXljb2RlICAxNiA9CitrZXljb2RlICAxNyA9CitrZXljb2RlICAxOCA9CitrZXljb2RlICAxOSA9CitrZXljb2RlICAyMCA9CitrZXljb2RlICAyMSA9CitrZXljb2RlICAyMiA9CitrZXljb2RlICAyMyA9CitrZXljb2RlICAyNCA9IGIKK2tleWNvZGUgIDI1ID0gdgora2V5Y29kZSAgMjYgPSBjCitrZXljb2RlICAyNyA9IHgKK2tleWNvZGUgIDI4ID0gegora2V5Y29kZSAgMjkgPQora2V5Y29kZSAgMzAgPQora2V5Y29kZSAgMzEgPSBFc2NhcGUJCURlbGV0ZQora2V5Y29kZSAgMzIgPQora2V5Y29kZSAgMzMgPQora2V5Y29kZSAgMzQgPQora2V5Y29kZSAgMzUgPQora2V5Y29kZSAgMzYgPQora2V5Y29kZSAgMzcgPQora2V5Y29kZSAgMzggPQora2V5Y29kZSAgMzkgPQora2V5Y29kZSAgNDAgPSBoCitrZXljb2RlICA0MSA9IGcKK2tleWNvZGUgIDQyID0gZgora2V5Y29kZSAgNDMgPSBkCitrZXljb2RlICA0NCA9IHMKK2tleWNvZGUgIDQ1ID0gYQora2V5Y29kZSAgNDYgPQora2V5Y29kZSAgNDcgPSBDYXBzX0xvY2sKK2tleWNvZGUgIDQ4ID0gdQora2V5Y29kZSAgNDkgPSB5CitrZXljb2RlICA1MCA9IHQKK2tleWNvZGUgIDUxID0gcgora2V5Y29kZSAgNTIgPSBlCitrZXljb2RlICA1MyA9IHcKK2tleWNvZGUgIDU0ID0gcQora2V5Y29kZSAgNTUgPSBUYWIJCVRhYgorCWFsdCAgICAga2V5Y29kZSAgICA1NSA9IE1ldGFfVGFiCitrZXljb2RlICA1NiA9IHNldmVuCQlhbXBlcnNhbmQKK2tleWNvZGUgIDU3ID0gc2l4CQlhc2NpaWNpcmN1bQora2V5Y29kZSAgNTggPSBmaXZlCQlwZXJjZW50CitrZXljb2RlICA1OSA9IGZvdXIJCWRvbGxhcgora2V5Y29kZSAgNjAgPSB0aHJlZQkJbnVtYmVyc2lnbgora2V5Y29kZSAgNjEgPSB0d28JCWF0CQlhdAora2V5Y29kZSAgNjIgPSBvbmUJCWV4Y2xhbQkJZXhjbGFtCitrZXljb2RlICA2MyA9IGdyYXZlCQlhc2NpaXRpbGRlCisJY29udHJvbCBrZXljb2RlICAgIDYzID0gbnVsCisJYWx0ICAgICBrZXljb2RlICAgIDYzID0gTWV0YV9ncmF2ZQora2V5Y29kZSAgNjQgPQora2V5Y29kZSAgNjUgPQora2V5Y29kZSAgNjYgPQora2V5Y29kZSAgNjcgPQora2V5Y29kZSAgNjggPQora2V5Y29kZSAgNjkgPQora2V5Y29kZSAgNzAgPQora2V5Y29kZSAgNzEgPQora2V5Y29kZSAgNzIgPQora2V5Y29kZSAgNzMgPSBGNAorCWNvbnRyb2wga2V5Y29kZQkgICA3MyA9IENvbnNvbGVfNAora2V5Y29kZSAgNzQgPSBGMworCWNvbnRyb2wga2V5Y29kZQkgICA3NCA9IENvbnNvbGVfMwora2V5Y29kZSAgNzUgPSBGMgorCWNvbnRyb2wga2V5Y29kZQkgICA3NSA9IENvbnNvbGVfMgora2V5Y29kZSAgNzYgPSBGMQorCWNvbnRyb2wga2V5Y29kZQkgICA3NiA9IENvbnNvbGVfMQora2V5Y29kZSAgNzcgPQora2V5Y29kZSAgNzggPQora2V5Y29kZSAgNzkgPQora2V5Y29kZSAgODAgPQora2V5Y29kZSAgODEgPSBGNQorCWNvbnRyb2wga2V5Y29kZQkgICA4MSA9IENvbnNvbGVfNQora2V5Y29kZSAgODIgPSBGNgorCWNvbnRyb2wga2V5Y29kZQkgICA4MiA9IENvbnNvbGVfNgora2V5Y29kZSAgODMgPSBGNworCWNvbnRyb2wga2V5Y29kZQkgICA4MyA9IENvbnNvbGVfNwora2V5Y29kZSAgODQgPSBGOAorCWNvbnRyb2wga2V5Y29kZQkgICA4NCA9IENvbnNvbGVfOAora2V5Y29kZSAgODUgPQora2V5Y29kZSAgODYgPQora2V5Y29kZSAgODcgPQora2V5Y29kZSAgODggPSBlaWdodAkJYXN0ZXJpc2sJYXN0ZXJpc2sKK2tleWNvZGUgIDg5ID0gbmluZQkJcGFyZW5sZWZ0CWJyYWNrZXRsZWZ0CitrZXljb2RlICA5MCA9IHplcm8JCXBhcmVucmlnaHQJYnJhY2tldHJpZ2h0CitrZXljb2RlICA5MSA9IG1pbnVzCQl1bmRlcnNjb3JlCitrZXljb2RlICA5MiA9IGVxdWFsCQlwbHVzCitrZXljb2RlICA5MyA9IEJhY2tTcGFjZQora2V5Y29kZSAgOTQgPQora2V5Y29kZSAgOTUgPQora2V5Y29kZSAgOTYgPSBpCitrZXljb2RlICA5NyA9IG8KK2tleWNvZGUgIDk4ID0gcAora2V5Y29kZSAgOTkgPSBicmFja2V0bGVmdAlicmFjZWxlZnQKK2tleWNvZGUgMTAwID0gYnJhY2tldHJpZ2h0CWJyYWNlcmlnaHQKK2tleWNvZGUgMTAxID0gYmFja3NsYXNoCQliYXIKKwljb250cm9sIGtleWNvZGUgICAxMDEgPSBDb250cm9sX2JhY2tzbGFzaAorCWFsdCAgICAga2V5Y29kZSAgIDEwMSA9IE1ldGFfYmFja3NsYXNoCitrZXljb2RlIDEwMiA9CitrZXljb2RlIDEwMyA9CitrZXljb2RlIDEwNCA9IGoKK2tleWNvZGUgMTA1ID0gawora2V5Y29kZSAxMDYgPSBsCitrZXljb2RlIDEwNyA9IHNlbWljb2xvbgkJY29sb24KKwlhbHQgICAgIGtleWNvZGUgICAxMDcgPSBNZXRhX3NlbWljb2xvbgora2V5Y29kZSAxMDggPSBhcG9zdHJvcGhlCXF1b3RlZGJsCisJY29udHJvbCBrZXljb2RlICAgMTA4ID0gQ29udHJvbF9nCisJYWx0ICAgICBrZXljb2RlICAgMTA4ID0gTWV0YV9hcG9zdHJvcGhlCitrZXljb2RlIDEwOSA9IFJldHVybgora2V5Y29kZSAxMTAgPQora2V5Y29kZSAxMTEgPQora2V5Y29kZSAxMTIgPSBtCitrZXljb2RlIDExMyA9IGNvbW1hCQlsZXNzCitrZXljb2RlIDExNCA9IHBlcmlvZAkJZ3JlYXRlcgora2V5Y29kZSAxMTUgPSBzbGFzaAkJcXVlc3Rpb24KK2tleWNvZGUgMTE2ID0KK2tleWNvZGUgMTE3ID0KK2tleWNvZGUgMTE4ID0KK2tleWNvZGUgMTE5ID0KK2tleWNvZGUgMTIwID0gbgora2V5Y29kZSAxMjEgPSBzcGFjZQkJc3BhY2UKK2tleWNvZGUgMTIyID0KK2tleWNvZGUgMTIzID0KK2tleWNvZGUgMTI0ID0gTGVmdAora2V5Y29kZSAxMjUgPSBEb3duCitrZXljb2RlIDEyNiA9IFVwCitrZXljb2RlIDEyNyA9IFJpZ2h0CitzdHJpbmcgRjEgPSAiXDAzM1tbQSIKK3N0cmluZyBGMiA9ICJcMDMzW1tCIgorc3RyaW5nIEYzID0gIlwwMzNbW0MiCitzdHJpbmcgRjQgPSAiXDAzM1tbRCIKK3N0cmluZyBGNSA9ICJcMDMzW1tFIgorc3RyaW5nIEY2ID0gIlwwMzNbMTd+Igorc3RyaW5nIEY3ID0gIlwwMzNbMTh+Igorc3RyaW5nIEY4ID0gIlwwMzNbMTl+Igorc3RyaW5nIEY5ID0gIlwwMzNbMjB+Igorc3RyaW5nIEYxMCA9ICJcMDMzWzIxfiIKK3N0cmluZyBGMTEgPSAiXDAzM1syM34iCitzdHJpbmcgRjEyID0gIlwwMzNbMjR+Igorc3RyaW5nIEYxMyA9ICJcMDMzWzI1fiIKK3N0cmluZyBGMTQgPSAiXDAzM1syNn4iCitzdHJpbmcgRjE1ID0gIlwwMzNbMjh+Igorc3RyaW5nIEYxNiA9ICJcMDMzWzI5fiIKK3N0cmluZyBGMTcgPSAiXDAzM1szMX4iCitzdHJpbmcgRjE4ID0gIlwwMzNbMzJ+Igorc3RyaW5nIEYxOSA9ICJcMDMzWzMzfiIKK3N0cmluZyBGMjAgPSAiXDAzM1szNH4iCitzdHJpbmcgRmluZCA9ICJcMDMzWzF+Igorc3RyaW5nIEluc2VydCA9ICJcMDMzWzJ+Igorc3RyaW5nIFJlbW92ZSA9ICJcMDMzWzN+Igorc3RyaW5nIFNlbGVjdCA9ICJcMDMzWzR+Igorc3RyaW5nIFByaW9yID0gIlwwMzNbNX4iCitzdHJpbmcgTmV4dCA9ICJcMDMzWzZ+Igorc3RyaW5nIE1hY3JvID0gIlwwMzNbTSIKK3N0cmluZyBQYXVzZSA9ICJcMDMzW1AiCitjb21wb3NlICdgJyAnQScgdG8gJ8AnCitjb21wb3NlICdgJyAnYScgdG8gJ+AnCitjb21wb3NlICdcJycgJ0EnIHRvICfBJworY29tcG9zZSAnXCcnICdhJyB0byAn4ScKK2NvbXBvc2UgJ14nICdBJyB0byAnwicKK2NvbXBvc2UgJ14nICdhJyB0byAn4icKK2NvbXBvc2UgJ34nICdBJyB0byAnwycKK2NvbXBvc2UgJ34nICdhJyB0byAn4ycKK2NvbXBvc2UgJyInICdBJyB0byAnxCcKK2NvbXBvc2UgJyInICdhJyB0byAn5CcKK2NvbXBvc2UgJ08nICdBJyB0byAnxScKK2NvbXBvc2UgJ28nICdhJyB0byAn5ScKK2NvbXBvc2UgJzAnICdBJyB0byAnxScKK2NvbXBvc2UgJzAnICdhJyB0byAn5ScKK2NvbXBvc2UgJ0EnICdBJyB0byAnxScKK2NvbXBvc2UgJ2EnICdhJyB0byAn5ScKK2NvbXBvc2UgJ0EnICdFJyB0byAnxicKK2NvbXBvc2UgJ2EnICdlJyB0byAn5icKK2NvbXBvc2UgJywnICdDJyB0byAnxycKK2NvbXBvc2UgJywnICdjJyB0byAn5ycKK2NvbXBvc2UgJ2AnICdFJyB0byAnyCcKK2NvbXBvc2UgJ2AnICdlJyB0byAn6CcKK2NvbXBvc2UgJ1wnJyAnRScgdG8gJ8knCitjb21wb3NlICdcJycgJ2UnIHRvICfpJworY29tcG9zZSAnXicgJ0UnIHRvICfKJworY29tcG9zZSAnXicgJ2UnIHRvICfqJworY29tcG9zZSAnIicgJ0UnIHRvICfLJworY29tcG9zZSAnIicgJ2UnIHRvICfrJworY29tcG9zZSAnYCcgJ0knIHRvICfMJworY29tcG9zZSAnYCcgJ2knIHRvICfsJworY29tcG9zZSAnXCcnICdJJyB0byAnzScKK2NvbXBvc2UgJ1wnJyAnaScgdG8gJ+0nCitjb21wb3NlICdeJyAnSScgdG8gJ84nCitjb21wb3NlICdeJyAnaScgdG8gJ+4nCitjb21wb3NlICciJyAnSScgdG8gJ88nCitjb21wb3NlICciJyAnaScgdG8gJ+8nCitjb21wb3NlICctJyAnRCcgdG8gJ9AnCitjb21wb3NlICctJyAnZCcgdG8gJ/AnCitjb21wb3NlICd+JyAnTicgdG8gJ9EnCitjb21wb3NlICd+JyAnbicgdG8gJ/EnCitjb21wb3NlICdgJyAnTycgdG8gJ9InCitjb21wb3NlICdgJyAnbycgdG8gJ/InCitjb21wb3NlICdcJycgJ08nIHRvICfTJworY29tcG9zZSAnXCcnICdvJyB0byAn8ycKK2NvbXBvc2UgJ14nICdPJyB0byAn1CcKK2NvbXBvc2UgJ14nICdvJyB0byAn9CcKK2NvbXBvc2UgJ34nICdPJyB0byAn1ScKK2NvbXBvc2UgJ34nICdvJyB0byAn9ScKK2NvbXBvc2UgJyInICdPJyB0byAn1icKK2NvbXBvc2UgJyInICdvJyB0byAn9icKK2NvbXBvc2UgJy8nICdPJyB0byAn2CcKK2NvbXBvc2UgJy8nICdvJyB0byAn+CcKK2NvbXBvc2UgJ2AnICdVJyB0byAn2ScKK2NvbXBvc2UgJ2AnICd1JyB0byAn+ScKK2NvbXBvc2UgJ1wnJyAnVScgdG8gJ9onCitjb21wb3NlICdcJycgJ3UnIHRvICf6JworY29tcG9zZSAnXicgJ1UnIHRvICfbJworY29tcG9zZSAnXicgJ3UnIHRvICf7JworY29tcG9zZSAnIicgJ1UnIHRvICfcJworY29tcG9zZSAnIicgJ3UnIHRvICf8JworY29tcG9zZSAnXCcnICdZJyB0byAn3ScKK2NvbXBvc2UgJ1wnJyAneScgdG8gJ/0nCitjb21wb3NlICdUJyAnSCcgdG8gJ94nCitjb21wb3NlICd0JyAnaCcgdG8gJ/4nCitjb21wb3NlICdzJyAncycgdG8gJ98nCitjb21wb3NlICciJyAneScgdG8gJ/8nCitjb21wb3NlICdzJyAneicgdG8gJ98nCitjb21wb3NlICdpJyAnaicgdG8gJ/8nCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvaW50cy5jIGIvYXJjaC9tNjhrL2hwMzAwL2ludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzViYjQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL2ludHMuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvaHAzMDAvaW50cy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSFAzMDAtc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsaW5nLgorICogIFdlIG9ubHkgdXNlIHRoZSBhdXRvdmVjdG9yIGludGVycnVwdHMsIGFuZCB0aGVyZWZvcmUgd2UgbmVlZCB0bworICogIG1haW50YWluIGxpc3RzIG9mIGRldmljZXMgc2hhcmluZyBlYWNoIGlwbC4KKyAqICBbaXBsIGxpc3QgY29kZSBhZGRlZCBieSBQZXRlciBNYXlkZWxsIDxwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrPiAwNi8xOTk4XQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgImludHMuaCIKKworLyogRWFjaCBpcGwgaGFzIGEgbGlua2VkIGxpc3Qgb2YgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMuCisgKiBTZXJ2aWNlIHJvdXRpbmVzIGFyZSBhZGRlZCB2aWEgaHAzMDBfcmVxdWVzdF9pcnEoKSBhbmQgcmVtb3ZlZAorICogdmlhIGhwMzAwX2ZyZWVfaXJxKCkuIFRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBzZXQgSVJRX0ZMR19GQVNUCisgKiBpZiBpdCBuZWVkcyB0byBiZSBzZXJ2aWNlZCBlYXJseSAoZWcgRklGT2xlc3MgVUFSVHMpOyB0aGlzIHdpbGwKKyAqIGNhdXNlIGl0IHRvIGJlIGFkZGVkIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgcmF0aGVyIHRoYW4KKyAqIHRoZSBiYWNrLgorICogQ3VycmVudGx5IElSUV9GTEdfU0xPVyBhbmQgZmxhZ3M9MCBhcmUgdHJlYXRlZCBpZGVudGljYWxseTsgaWYKKyAqIHdlIG5lZWRlZCB0aHJlZSBsZXZlbHMgb2YgcHJpb3JpdHkgd2UgY291bGQgZGlzdGluZ3Vpc2ggdGhlbQorICogYnV0IHRoaXMgc3RyaWtlcyBtZSBhcyBtaWxkbHkgdWdseS4uLgorICovCisKKy8qIHdlIHN0YXJ0IHdpdGggbm8gZW50cmllcyBpbiBhbnkgbGlzdCAqLworc3RhdGljIGlycV9ub2RlX3QgKmhwMzAwX2lycV9saXN0W0hQMzAwX05VTV9JUlFTXTsKKworc3RhdGljIHNwaW5sb2NrX3QgaXJxbGlzdF9sb2NrOworCisvKiBUaGlzIGhhbmRsZXIgcmVjZWl2ZXMgYWxsIGludGVycnVwdHMsIGRpc3BhdGNoaW5nIHRoZW0gdG8gdGhlIHJlZ2lzdGVyZWQgaGFuZGxlcnMgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBocDMwMF9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgICAgICAgaXJxX25vZGVfdCAqdDsKKyAgICAgICAgLyogV2UganVzdCBnaXZlIGV2ZXJ5IGhhbmRsZXIgb24gdGhlIGNoYWluIGFuIG9wcG9ydHVuaXR5IHRvIGhhbmRsZQorICAgICAgICAgKiB0aGUgaW50ZXJydXB0LCBpbiBwcmlvcml0eSBvcmRlci4KKyAgICAgICAgICovCisgICAgICAgIGZvcih0ID0gaHAzMDBfaXJxX2xpc3RbaXJxXTsgdDsgdD10LT5uZXh0KQorICAgICAgICAgICAgICAgIHQtPmhhbmRsZXIoaXJxLCB0LT5kZXZfaWQsIGZwKTsKKyAgICAgICAgLyogV2UgY291bGQgcHV0IGluIHNvbWUgYWNjb3VudGluZyByb3V0aW5lcywgY2hlY2tzIGZvciBzdHJheSBpbnRlcnJ1cHRzLAorICAgICAgICAgKiBldGMsIGluIGhlcmUuIE5vdGUgdGhhdCBjdXJyZW50bHkgd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIG9yIG5vdAorICAgICAgICAgKiBhIGhhbmRsZXIgaGFuZGxlcyB0aGUgaW50ZXJydXB0LCB0aG91Z2guCisgICAgICAgICAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGhwMzAwX2JhZGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwludW1fc3B1cmlvdXMgKz0gMTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK2lycXJldHVybl90ICgqaHAzMDBfZGVmYXVsdF9oYW5kbGVyW1NZU19JUlFTXSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopID0geworCVswXSA9IGhwMzAwX2JhZGludCwKKwlbMV0gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbMl0gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbM10gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbNF0gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbNV0gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbNl0gPSBocDMwMF9pbnRfaGFuZGxlciwKKwlbN10gPSBocDMwMF9pbnRfaGFuZGxlcgorfTsKKworLyogZGV2X2lkIGhhZCBiZXR0ZXIgYmUgdW5pcXVlIHRvIGVhY2ggaGFuZGxlciBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgd2F5IHdlIGhhdmUKKyAqIHRvIGRpc3Rpbmd1aXNoIGhhbmRsZXJzIHdoZW4gcmVtb3ZpbmcgdGhlbS4uLgorICoKKyAqIEl0IHdvdWxkIGJlIHByZXR0eSBlYXN5IHRvIHN1cHBvcnQgSVJRX0ZMR19MT0NLIChoYW5kbGVyIGlzIG5vdCByZXBsYWNhYmxlKQorICogYW5kIElSUV9GTEdfUkVQTEFDRSAoaGFuZGxlciByZXBsYWNlcyBleGlzdGluZyBvbmUgd2l0aCB0aGlzIGRldl9pZCkKKyAqIGlmIHdlIHdhbnRlZCB0by4gSVJRX0ZMR19GQVNUIGlzIG5lZWRlZCBmb3IgZGV2aWNlcyB3aGVyZSBpbnRlcnJ1cHQgbGF0ZW5jeQorICogbWF0dGVycyAoZWcgdGhlIGRyZWFkZWQgRklGT2xlc3MgVUFSVC4uLikKKyAqLworaW50IGhwMzAwX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKyAgICAgICAgaXJxX25vZGVfdCAqdCwgKm4gPSBuZXdfaXJxX25vZGUoKTsKKworICAgICAgICBpZiAoIW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvb3BzLCBubyBmcmVlIG5vZGVzICovCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7CisKKyAgICAgICAgaWYgKCFocDMwMF9pcnFfbGlzdFtpcnFdKSB7CisgICAgICAgICAgICAgICAgLyogbm8gbGlzdCB5ZXQgKi8KKyAgICAgICAgICAgICAgICBocDMwMF9pcnFfbGlzdFtpcnFdID0gbjsKKyAgICAgICAgICAgICAgICBuLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIElSUV9GTEdfRkFTVCkgeworICAgICAgICAgICAgICAgIC8qIGluc2VydCBhdCBoZWFkIG9mIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBuLT5uZXh0ID0gaHAzMDBfaXJxX2xpc3RbaXJxXTsKKyAgICAgICAgICAgICAgICBocDMwMF9pcnFfbGlzdFtpcnFdID0gbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBpbnNlcnQgYXQgZW5kIG9mIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBmb3IodCA9IGhwMzAwX2lycV9saXN0W2lycV07IHQtPm5leHQ7IHQgPSB0LT5uZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKKyAgICAgICAgICAgICAgICBuLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0LT5uZXh0ID0gbjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZpbGwgaW4gbiBhcHByb3ByaWF0ZWx5ICovCisgICAgICAgIG4tPmhhbmRsZXIgPSBoYW5kbGVyOworICAgICAgICBuLT5mbGFncyA9IGZsYWdzOworICAgICAgICBuLT5kZXZfaWQgPSBkZXZfaWQ7CisgICAgICAgIG4tPmRldm5hbWUgPSBkZXZuYW1lOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycWxpc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCit2b2lkIGhwMzAwX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKyAgICAgICAgaXJxX25vZGVfdCAqdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7CisKKyAgICAgICAgdCA9IGhwMzAwX2lycV9saXN0W2lycV07CisgICAgICAgIGlmICghdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGhhbmRsZXJzIGF0IGFsbCBmb3IgdGhhdCBJUlEgKi8KKyAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaHAzMDBfZnJlZV9pcnE6IGF0dGVtcHQgdG8gcmVtb3ZlIG5vbmV4aXN0ZW50IGhhbmRsZXIgZm9yIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFsaXN0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHQtPmRldl9pZCA9PSBkZXZfaWQpCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbW92aW5nIGZpcnN0IGhhbmRsZXIgb24gY2hhaW4gKi8KKyAgICAgICAgICAgICAgICB0LT5mbGFncyA9IElSUV9GTEdfU1REOyAgICAgICAgICAgLyogd2UgcHJvYmFibHkgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlc2UgKi8KKyAgICAgICAgICAgICAgICB0LT5kZXZfaWQgPSBOVUxMOworICAgICAgICAgICAgICAgIHQtPmRldm5hbWUgPSBOVUxMOworICAgICAgICAgICAgICAgIHQtPmhhbmRsZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBmcmVlcyB0aGlzIGlycV9ub2RlX3QgKi8KKyAgICAgICAgICAgICAgICBocDMwMF9pcnFfbGlzdFtpcnFdID0gdC0+bmV4dDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE9LLCBtdXN0IGJlIHJlbW92aW5nIGZyb20gbWlkZGxlIG9mIHRoZSBjaGFpbiAqLworCisgICAgICAgIGZvciAodCA9IGhwMzAwX2lycV9saXN0W2lycV07IHQtPm5leHQgJiYgdC0+bmV4dC0+ZGV2X2lkICE9IGRldl9pZDsgdCA9IHQtPm5leHQpCisgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKKyAgICAgICAgaWYgKCF0LT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJocDMwMF9mcmVlX2lycTogYXR0ZW1wdCB0byByZW1vdmUgbm9uZXhpc3RlbnQgaGFuZGxlciBmb3IgSVJRICVkXG4iLCBpcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFsaXN0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8qIHJlbW92ZSB0aGUgZW50cnkgYWZ0ZXIgdDogKi8KKyAgICAgICAgdC0+bmV4dC0+ZmxhZ3MgPSBJUlFfRkxHX1NURDsKKyAgICAgICAgdC0+bmV4dC0+ZGV2X2lkID0gTlVMTDsKKwl0LT5uZXh0LT5kZXZuYW1lID0gTlVMTDsKKwl0LT5uZXh0LT5oYW5kbGVyID0gTlVMTDsKKyAgICAgICAgdC0+bmV4dCA9IHQtPm5leHQtPm5leHQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFsaXN0X2xvY2ssIGZsYWdzKTsKK30KKworaW50IHNob3dfaHAzMDBfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IGhwMzAwX2luaXRfSVJRKHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJmlycWxpc3RfbG9jayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvaW50cy5oIGIvYXJjaC9tNjhrL2hwMzAwL2ludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZhYmUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL2ludHMuaApAQCAtMCwwICsxLDkgQEAKK2V4dGVybiB2b2lkIGhwMzAwX2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpocDMwMF9oYW5kbGVyc1s4XSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgaHAzMDBfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiBpbnQgaHAzMDBfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworCisvKiBudW1iZXIgb2YgaW50ZXJydXB0cywgaW5jbHVkZXMgMCAod2hhdCdzIHRoYXQ/KSAqLworI2RlZmluZSBIUDMwMF9OVU1fSVJRUyA4CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAva3N5bXMuYyBiL2FyY2gvbTY4ay9ocDMwMC9rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDI4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAva3N5bXMuYwpAQCAtMCwwICsxLDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2hwMzAwL2tzeW1zLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBIUDMwMC1zcGVjaWZpYyBrZXJuZWwgc3ltYm9scy4gIE5vbmUgeWV0LiA6LSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvcmVib290LlMgYi9hcmNoL202OGsvaHAzMDAvcmVib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9yZWJvb3QuUwpAQCAtMCwwICsxLDE2IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9ocDMwMC9yZWJvb3QuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorICoKKyAqICBEbyB0aGUgZGlydHkgd29yayBvZiByZWJvb3RpbmcgdGhlIG1hY2hpbmUuICBCYXNpY2FsbHkgd2UgbmVlZCB0byB1bmRvIGFsbCB0aGUKKyAqICBnb29kIHN0dWZmIHRoYXQgaGVhZC5TIGRpZCB3aGVuIHdlIHN0YXJ0ZWQgdXAuICBUaGUgY2FjaGVzIGFuZCBNTVUgbXVzdCBiZQorICogIGRpc2FibGVkIGFuZCB0aGVuIHdlIGp1bXAgYmFjayB0byB0aGUgUFJPTS4gIFRoaXMgaXMgYSBiaXQgZ3J1ZXNvbWUgYnV0IHdlIHB1dAorICogIGEgYnJhdmUgZmFjZSBvbiBpdC4KKyAqLworCisvKiBYWFggRG9lc24ndCB3b3JrIHlldC4gIE5vdCBzdXJlIHdoeSBhbmQgY2FuJ3QgYmUgYm90aGVyZWQgdG8gZml4IGl0IGF0IHRoZSBtb21lbnQuICovCisKKwkuZ2xvYmwJaHAzMDBfcmVzZXQKK2hwMzAwX3Jlc2V0OgorCWptcAlocDMwMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL3RpbWUuYyBiL2FyY2gvbTY4ay9ocDMwMC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhNWIxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC90aW1lLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvaHAzMDAvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSFAzMDAtc3BlY2lmaWMgdGltZSBoYW5kbGluZyBjb2RlLgorICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYmxpbmtlbi5oPgorI2luY2x1ZGUgImludHMuaCIKKworLyogQ2xvY2sgaGFyZHdhcmUgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBDTE9DS0JBU0UJMHhmMDVmODAwMAorCisjZGVmaW5lCUNMS0NSMQkJMHgxCisjZGVmaW5lCUNMS0NSMgkJMHgzCisjZGVmaW5lCUNMS0NSMwkJQ0xLQ1IxCisjZGVmaW5lCUNMS1NSCQlDTEtDUjIKKyNkZWZpbmUJQ0xLTVNCMQkJMHg1CisjZGVmaW5lCUNMS01TQjIJCTB4OQorI2RlZmluZQlDTEtNU0IzCQkweEQKKworLyogVGhpcyBpcyBmb3IgbWFjaGluZXMgd2hpY2ggZ2VuZXJhdGUgdGhlIGV4YWN0IGNsb2NrLiAqLworI2RlZmluZSBVU0VDU19QRVJfSklGRlkgKDEwMDAwMDAvSFopCisKKyNkZWZpbmUgSU5UVkFMICgoMTAwMDAgLyA0KSAtIDEpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBocDMwMF90aWNrKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSA9IGRldl9pZDsKKwlpbl84KENMT0NLQkFTRSArIENMS1NSKTsKKwlhc20gdm9sYXRpbGUgKCJtb3ZwdyAlMUAoNSksJTAiIDogIj1kIiAodG1wKSA6ICJhIiAoQ0xPQ0tCQVNFKSk7CisJLyogVHVybiBvZmYgdGhlIG5ldHdvcmsgYW5kIFNDU0kgbGVkcyAqLworCWJsaW5rZW5fbGVkcygwLCAweGUwKTsKKwlyZXR1cm4gdmVjdG9yKGlycSwgTlVMTCwgcmVncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgaHAzMDBfZ2V0dGltZW9mZnNldCh2b2lkKQoreworICAvKiBSZWFkIGN1cnJlbnQgdGltZXIgMSB2YWx1ZSAqLworICB1bnNpZ25lZCBjaGFyIGxzYiwgbXNiMSwgbXNiMjsKKyAgdW5zaWduZWQgc2hvcnQgdGlja3M7CisKKyAgbXNiMSA9IGluXzgoQ0xPQ0tCQVNFICsgNSk7CisgIGxzYiA9IGluXzgoQ0xPQ0tCQVNFICsgNyk7CisgIG1zYjIgPSBpbl84KENMT0NLQkFTRSArIDUpOworICBpZiAobXNiMSAhPSBtc2IyKQorICAgIC8qIEEgY2FycnkgaGFwcGVuZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nLiAgUmVhZCBpdCBhZ2FpbiAqLworICAgIGxzYiA9IGluXzgoQ0xPQ0tCQVNFICsgNyk7CisgIHRpY2tzID0gSU5UVkFMIC0gKChtc2IyIDw8IDgpIHwgbHNiKTsKKyAgcmV0dXJuIChVU0VDU19QRVJfSklGRlkgKiB0aWNrcykgLyBJTlRWQUw7Cit9CisKK3ZvaWQgX19pbml0IGhwMzAwX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKyAgb3V0XzgoQ0xPQ0tCQVNFICsgQ0xLQ1IyLCAweDEpOwkJLyogc2VsZWN0IENSMSAqLworICBvdXRfOChDTE9DS0JBU0UgKyBDTEtDUjEsIDB4MSk7CQkvKiByZXNldCAqLworCisgIGFzbSB2b2xhdGlsZSgiIG1vdnB3ICUwLCUxQCg1KSIgOiA6ICJkIiAoSU5UVkFMKSwgImEiIChDTE9DS0JBU0UpKTsKKworICBjcHVfcmVxdWVzdF9pcnEoNiwgaHAzMDBfdGljaywgSVJRX0ZMR19TVEQsICJ0aW1lciB0aWNrIiwgdmVjdG9yKTsKKworICBvdXRfOChDTE9DS0JBU0UgKyBDTEtDUjIsIDB4MSk7CQkvKiBzZWxlY3QgQ1IxICovCisgIG91dF84KENMT0NLQkFTRSArIENMS0NSMSwgMHg0MCk7CQkvKiBlbmFibGUgaXJxICovCit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvdGltZS5oIGIvYXJjaC9tNjhrL2hwMzAwL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY5OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL3RpbWUuaApAQCAtMCwwICsxLDQgQEAKK2V4dGVybiB2b2lkIGhwMzAwX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBocDMwMF9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKKworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTcxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUwpAQCAtMCwwICsxLDEyMCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDSEFOR0VTIFNJTkNFIExBU1QgUkVMRUFTRToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxKSAibW92ZXAiIGVtdWxhdGlvbiB3aGVyZSBkYXRhIHdhcyBiZWluZyByZWFkIGZyb20gbWVtb3J5Cit3YXMgcmVhZGluZyB0aGUgaW50ZXJtZWRpYXRlIGJ5dGVzLiBFbXVsYXRpb24gbm93IG9ubHkKK3JlYWRzIHRoZSByZXF1aXJlZCBieXRlcy4KKworMikgImZsb2duIiwgImZsb2cyIiwgYW5kICJmbG9nMTAiIG9mICIxIiB3YXMgc2V0dGluZyB0aGUKK0luZXhhY3QgRlBTUiBiaXQuIEVtdWxhdGlvbiBub3cgZG9lcyBub3Qgc2V0IEluZXhhY3QgZm9yCit0aGlzIGNhc2UuCisKKzMpIEZvciBhbiBvcGNsYXNzIHRocmVlIEZQIGluc3RydWN0aW9uIHdoZXJlIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZworbW9kZSB3YXMgcHJlLWRlY3JlbWVudCBvciBwb3N0LWluY3JlbWVudCBhbmQgdGhlIGFkZHJlc3MgcmVnaXN0ZXIKK3dhcyBBMCBvciBBMSwgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgd2FzIG5vdCBiZWluZyB1cGRhdGVkIGFzIGEgcmVzdWx0CitvZiB0aGUgb3BlcmF0aW9uLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworNCkgQmV0YSBCLjIgdmVyc2lvbiBoYWQgdGhlIGZvbGxvd2luZyBlcnJhdHVtOgorCisJU2NlbmFyaW86CisJLS0tLS0tLS0tCisJSWYge2ksZH1tZW1fe3JlYWQsd3JpdGV9X3tieXRlLHdvcmQsbG9uZ30oKSByZXR1cm5zCisJYSBmYWlsaW5nIHZhbHVlIHRvIHRoZSA2ODA2MFNQLCB0aGUgcGFja2FnZSBpZ25vcmVzCisJdGhpcyByZXR1cm4gdmFsdWUgYW5kIGNvbnRpbnVlcyB3aXRoIHByb2dyYW0gZXhlY3V0aW9uCisJYXMgaWYgaXQgbmV2ZXIgcmVjZWl2ZWQgYSBmYWlsaW5nIHZhbHVlLgorCisJRWZmZWN0OgorCS0tLS0tLS0KKwlGb3IgZXhhbXBsZSwgaWYgYSB1c2VyIGV4ZWN1dGVkICJmc2luLnggQUREUixmcDAiIHdoZXJlCisJQUREUiBzaG91bGQgY2F1c2UgYSAic2VnbWVudGF0aW9uIHZpb2xhdGlvbiIsIHRoZSBtZW1vcnkgcmVhZAorCXJlcXVlc3RlZCBieSB0aGUgcGFja2FnZSBzaG91bGQgcmV0dXJuIGEgZmFpbGluZyB2YWx1ZQorCXRvIHRoZSBwYWNrYWdlLiBTaW5jZSB0aGUgcGFja2FnZSBjdXJyZW50bHkgaWdub3JlcyB0aGlzCisJcmV0dXJuIHZhbHVlLCB0aGUgdXNlciBwcm9ncmFtIHdpbGwgY29udGludWUgdG8gdGhlCisJbmV4dCBpbnN0cnVjdGlvbiwgYW5kIHRoZSByZXN1bHQgY3JlYXRlZCBpbiBmcDAgd2lsbCBiZQorCXVuZGVmaW5lZC4KKworCUZpeDoKKwktLS0tCisJVGhpcyBoYXMgYmVlbiBmaXhlZCBpbiB0aGUgY3VycmVudCByZWxlYXNlLgorCisJTm90ZXM6CisJLS0tLS0tCisJVXBvbiByZWNlaXZpbmcgYSBub24temVybyAoZmFpbGluZykgcmV0dXJuIHZhbHVlIGZyb20KKwlhIHtpLGR9bWVtX3tyZWFkLHdyaXRlfV97Ynl0ZSx3b3JkLGxvbmd9KCkgImNhbGwtb3V0IiwKKwl0aGUgcGFja2FnZSBjcmVhdGVzIGEgMTYtYnl0ZSBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUKKwlmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBhbmQgZXhpdHMKKwl0aHJvdWdoIHRoZSAiY2FsbC1vdXQiIF9yZWFsX2FjY2VzcygpLiBUaGlzIGlzIHRoZSBwcm9jZXNzCisJYXMgZGVzY3JpYmVkIGluIHRoZSBNQzY4MDYwIFVzZXIncyBNYW51YWwuCisKKwlGb3IgaW5zdHJ1Y3Rpb24gcmVhZCBhY2Nlc3MgZXJyb3JzLCB0aGUgaW5mbyBzdGFja2VkIGlzOgorCQlTUgk9IFNSIGF0IHRpbWUgb2YgZXhjZXB0aW9uCisJCVBDCT0gUEMgb2YgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQKKwkJVk9GRgk9ICQ0MDA4IChzdGFjayBmcmFtZSBmb3JtYXQgdHlwZSkKKwkJQUREUkVTUwk9IFBDIG9mIGluc3RydWN0aW9uIGJlaW5nIGVtdWxhdGVkCisJCUZTTFcJPSBGQVVMVCBTVEFUVVMgTE9OR1dPUkQKKworCVRoZSB2YWxpZCBGU0xXIGJpdHMgYXJlOgorCQliaXQgMjcJCT0gMQkobWlzYWxpZ25lZCBiaXQpCisJCWJpdCAyNAkJPSAxCShyZWFkKQorCQliaXQgMjMJCT0gMAkod3JpdGUpCisJCWJpdCAyMjoyMQk9IDEwCShTSVpFID0gd29yZCkKKwkJYml0IDIwOjE5CT0gMDAJKFRUKQorCQliaXQgMTg6MTYJPSB4MTAJKFRNOyB4ID0gMSBmb3Igc3VwZXJ2aXNvciBtb2RlKQorCQliaXQgMTUJCT0gMQkoSU8pCisJCWJpdCAwCQk9IDEJKFNvZnR3YXJlIEVtdWxhdGlvbiBFcnJvcikKKworCWFsbCBvdGhlciBiaXRzIGFyZSBFUVVBTCBUTyBaRVJPIGFuZCBjYW4gYmUgc2V0IGJ5IHRoZSBfcmVhbF9hY2Nlc3MoKQorCSJjYWxsLW91dCIgc3R1YiBieSB0aGUgdXNlciBhcyBhcHByb3ByaWF0ZS4gVGhlIE1DNjgwNjAgVXNlcidzIE1hbnVhbAorCXN0YXRlZCB0aGF0IE9OTFkgImJpdCAwIiB3b3VsZCBiZSBzZXQuIFRoZSAwNjBTUCBhdHRlbXB0cyB0byBzZXQgYSBmZXcKKwlvdGhlciBiaXRzLgorCisJRm9yIGRhdGEgcmVhZC93cml0ZSBhY2Nlc3MgZXJyb3JzLCB0aGUgaW5mbyBzdGFja2VkIGlzOgorCQlTUgk9IFNSIGF0IHRpbWUgb2YgZXhjZXB0aW9uCisJCVBDCT0gUEMgb2YgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQKKwkJVk9GRgk9ICQ0MDA4IChzdGFjayBmcmFtZSBmb3JtYXQgdHlwZSkKKwkJQUREUkVTUwk9IEFkZHJlc3Mgb2Ygc291cmNlIG9yIGRlc3RpbmF0aW9uIG9wZXJhbmQKKwkJRlNMVwk9IEZBVUxUIFNUQVRVUyBMT05HV09SRAorCisJVGhlIHZhbGlkIEZTTFcgYml0cyBhcmU6CisJCWJpdCAyNwkJPSAwCShtaXNhbGlnbmVkIGJpdCkKKwkJYml0IDI0CQk9IHgJKHJlYWQ7IDEgaWYgcmVhZCwgMCBpZiB3cml0ZSkKKwkJYml0IDIzCQk9IHgJKHdyaXRlOyAxIGlmIHdyaXRlLCAwIGlmIHJlYWQpCisJCWJpdCAyMjoyMQk9IHh4CShTSVpFOyBzZWUgTUM2ODA2MCBVc2VyJ3MgTWFudWFsKQorCQliaXQgMjA6MTkJPSAwMAkoVFQpCisJCWJpdCAxODoxNgk9IHgwMQkoVE07IHggPSAxIGZvciBzdXBlcnZpc29yIG1vZGUpCisJCWJpdCAxNQkJPSAwCShJTykKKwkJYml0IDAJCT0gMQkoU29mdHdhcmUgRW11bGF0aW9uIEVycm9yKQorCisJYWxsIG90aGVyIGJpdHMgYXJlIEVRVUFMIFRPIFpFUk8gYW5kIGNhbiBiZSBzZXQgYnkgdGhlIF9yZWFsX2FjY2VzcygpCisJImNhbGwtb3V0IiBzdHViIGJ5IHRoZSB1c2VyIGFzIGFwcHJvcHJpYXRlLiBUaGUgTUM2ODA2MCBVc2VyJ3MgTWFudWFsCisJc3RhdGVkIHRoYXQgT05MWSAiYml0IDAiIHdvdWxkIGJlIHNldC4gVGhlIDA2MFNQIGF0dGVtcHRzIHRvIHNldCBhIGZldworCW90aGVyIGJpdHMuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvTUlTQyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9NSVNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTY0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvTUlTQwpAQCAtMCwwICsxLDIwMSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorUkVMRUFTRSBGSUxFIFZFUlNJT05TOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnBzcC5zYQorLS0tLS0tLS0tLQorZnJlYWwucyAgICAgOiAyLjQKK2hkci5mcHUgICAgIDogMi40Cit4X2ZvdmZsLnMgICA6IDIuMTYKK3hfZnVuZmwucyAgIDogMi4xOQoreF9mdW5zdXBwLnMgOiAyLjI3Cit4X2VmZmFkZC5zICA6IDIuMjEKK3hfZm9wZXJyLnMgIDogMi45Cit4X2ZzbmFuLnMgICA6IDIuMTIKK3hfZmluZXgucyAgIDogMi4xNAoreF9mZHoucyAgICAgOiAyLjUKK3hfZmxpbmUucyAgIDogMi41Cit4X2Z1bmltcC5zICA6IDIuMjcKK2ZzaW4ucyAgICAgIDogMi42CitmdGFuLnMgICAgICA6IDIuNgorZmF0YW4ucyAgICAgOiAyLjMKK2Zhc2luLnMgICAgIDogMi4zCitmYWNvcy5zICAgICA6IDIuNQorZmV0b3gucyAgICAgOiAyLjQKK2ZnZXRlbS5zICAgIDogMi41CitmY29zaC5zICAgICA6IDIuNAorZnNpbmgucyAgICAgOiAyLjUKK2Z0YW5oLnMgICAgIDogMi4zCitmbG9nbi5zICAgICA6IDIuNgorZmF0YW5oLnMgICAgOiAyLjQKK2Zsb2cyLnMgICAgIDogMi40CitmdHdvdG94LnMgICA6IDIuNAorZm1vdmVjci5zICAgOiAyLjUKK2ZzY2FsZS5zICAgIDogMi41CitmcmVtX21vZC5zICA6IDIuNgorZmtlcm4ucyAgICAgOiAyLjYKK2ZrZXJuMi5zICAgIDogMi41CitmZ2VuX2V4Y2VwdC5zOiAyLjcKK2ZvcHRibC5zICAgIDogMi4zCitmbXVsLnMgICAgICA6IDIuNQorZmluLnMgICAgICAgOiAyLjQKK2ZkaXYucyAgICAgIDogMi41CitmbmVnLnMgICAgICA6IDIuNAorZnRzdC5zICAgICAgOiAyLjMKK2ZpbnQucyAgICAgIDogMi4zCitmaW50cnoucyAgICA6IDIuMworZmFicy5zICAgICAgOiAyLjQKK2ZjbXAucyAgICAgIDogMi40Citmc2dsbXVsLnMgICA6IDIuNQorZnNnbGRpdi5zICAgOiAyLjgKK2ZhZGQucyAgICAgIDogMi42Citmc3ViLnMgICAgICA6IDIuNgorZnNxcnQucyAgICAgOiAyLjQKK2ZtaXNjLnMgICAgIDogMi4zCitmZGJjYy5zICAgICA6IDIuOAorZnRyYXBjYy5zICAgOiAyLjUKK2ZzY2MucyAgICAgIDogMi42CitmbW92bS5zICAgICA6IDIuMTUKK2ZjdHJsLnMgICAgIDogMi42CitmY2FsY19lYS5zICA6IDIuNworZm1lbS5zICAgICAgOiAyLjkKK2ZvdXQucyAgICAgIDogMi45CitpcmVnLnMgICAgICA6IDIuNgorZmRlbm9ybS5zICAgOiAyLjMKK2Zyb3VuZC5zICAgIDogMi40Citmbm9ybS5zICAgICA6IDIuMworZm9wdGFnX3NldC5zOiAyLjQKK2ZyZXN1bHQucyAgIDogMi4zCitmcGFjay5zICAgICA6IDIuNgorZmRlY2Jpbi5zICAgOiAyLjQKK2ZiaW5kZWMucyAgIDogMi41CitmYmluc3RyLnMgICA6IDIuMworZmFjY2Vzcy5zICAgOiAyLjMKKworcGZwc3Auc2EKKy0tLS0tLS0tLS0KK2ZyZWFsLnMgICAgIDogMi40CitoZHIuZnB1ICAgICA6IDIuNAoreF9mb3ZmbC5zICAgOiAyLjE2Cit4X2Z1bmZsLnMgICA6IDIuMTkKK3hfZnVuc3VwcC5zIDogMi4yNworeF9lZmZhZGQucyAgOiAyLjIxCit4X2ZvcGVyci5zICA6IDIuOQoreF9mc25hbi5zICAgOiAyLjEyCit4X2ZpbmV4LnMgICA6IDIuMTQKK3hfZmR6LnMgICAgIDogMi41Cit4X2ZsaW5lMi5zICA6IDIuMworZmNhbGNfZWEucyAgOiAyLjcKK2ZvcHRibDIucyAgIDogMi40CitmbW92bS5zICAgICA6IDIuMTUKK2ZjdHJsLnMgICAgIDogMi42CitmbWlzYy5zICAgICA6IDIuMworZmRlbm9ybS5zICAgOiAyLjMKK2Zyb3VuZC5zICAgIDogMi40Citmbm9ybS5zICAgICA6IDIuMworZm9wdGFnX3NldC5zOiAyLjQKK2ZyZXN1bHQucyAgIDogMi4zCitmb3V0LnMgICAgICA6IDIuOQorZm11bC5zICAgICAgOiAyLjUKK2Zpbi5zICAgICAgIDogMi40CitmZGl2LnMgICAgICA6IDIuNQorZm5lZy5zICAgICAgOiAyLjQKK2Z0c3QucyAgICAgIDogMi4zCitmaW50LnMgICAgICA6IDIuMworZmludHJ6LnMgICAgOiAyLjMKK2ZhYnMucyAgICAgIDogMi40CitmY21wLnMgICAgICA6IDIuNAorZnNnbG11bC5zICAgOiAyLjUKK2ZzZ2xkaXYucyAgIDogMi44CitmYWRkLnMgICAgICA6IDIuNgorZnN1Yi5zICAgICAgOiAyLjYKK2ZzcXJ0LnMgICAgIDogMi40CitpcmVnLnMgICAgICA6IDIuNgorZnBhY2sucyAgICAgOiAyLjYKK2ZkZWNiaW4ucyAgIDogMi40CitmYmluZGVjLnMgICA6IDIuNQorZmJpbnN0ci5zICAgOiAyLjMKK2ZhY2Nlc3MucyAgIDogMi4zCisKK2ZwbHNwLnNhCistLS0tLS0tLS0tCitsZnB0b3AucyAgICA6IDIuMworaGRyLmZwdSAgICAgOiAyLjQKK2ZzaW4ucyAgICAgIDogMi42CitmdGFuLnMgICAgICA6IDIuNgorZmF0YW4ucyAgICAgOiAyLjMKK2Zhc2luLnMgICAgIDogMi4zCitmYWNvcy5zICAgICA6IDIuNQorZmV0b3gucyAgICAgOiAyLjQKK2ZnZXRlbS5zICAgIDogMi41CitmY29zaC5zICAgICA6IDIuNAorZnNpbmgucyAgICAgOiAyLjUKK2Z0YW5oLnMgICAgIDogMi4zCitmbG9nbi5zICAgICA6IDIuNgorZmF0YW5oLnMgICAgOiAyLjQKK2Zsb2cyLnMgICAgIDogMi40CitmdHdvdG94LnMgICA6IDIuNAorZnNjYWxlLnMgICAgOiAyLjUKK2ZyZW1fbW9kLnMgIDogMi42CitsX3N1cHBvcnQucyA6IDIuMTUKK2Zub3JtLnMgICAgIDogMi4zCisKK2lzcC5zYQorLS0tLS0tLS0tLQoraXJlYWwucyAgICAgOiAyLjQKK2hkci5pbnQgICAgIDogMi40Cit4X3VpZWgucyAgICA6IDIuMTMKK2ljYWxjX2VhLnMgIDogMi4xMQoraW1vdmVwLnMgICAgOiAyLjgKK2ljaGsyY21wMi5zIDogMi42CitpZGl2NjQucyAgICA6IDIuMTAKK2ltdWw2NC5zICAgIDoKK2ljYXMyLnMgICAgIDogMi4xMQoraWNhcy5zICAgICAgOiAyLjEyCitpY2FzMl9jb3JlLnM6IDIuNgoraWNhc19jb3JlLnMgOiAyLjYKKworaWxzcC5zYQorLS0tLS0tLS0tLQorbGl0b3AucyAgICAgOiAyLjIKK2xfaWRpdjY0LnMgIDogMi44CitsX2ltdWw2NC5zICA6IDIuNgorbF9pY2hrMmNtcDIuczogMi41CisKK2V4LiBmaWxlcworLS0tLS0tLS0tLQord3JrL2Zza2VsZXRvbi5zOiAyLjIKK3dyay9pc2tlbGV0b24uczogMi4yCit3cmsvb3MucyAgICA6IDIuMQorCit0ZXN0cworLS0tLS0tLS0tLQoraXRlc3QucyAgICAgOiAyLjIKK2Z0ZXN0LnMgICAgIDogMi4xCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvTWFrZWZpbGUgYi9hcmNoL202OGsvaWZwc3AwNjAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlODQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjIE1ha2VmaWxlIGZvciA2ODB4MCBMaW51eCA2ODA2MCBpbnRlZ2VyL2Zsb2F0aW5nIHBvaW50IHN1cHBvcnQgcGFja2FnZQorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJSRUFETUUubGVnYWwiIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKworb2JqLXkgOj0gZnNrZWxldG9uLm8gaXNrZWxldG9uLm8gb3MubworCitFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCitFWFRSQV9MREZMQUdTIDo9IC14CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvUkVBRE1FIGIvYXJjaC9tNjhrL2lmcHNwMDYwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JjZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL1JFQURNRQpAQCAtMCwwICsxLDcxIEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGaWxlcyBpbiB0aGlzIGRpcmVjdG9yeToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnBzcC5zYQkJRnVsbCBGUCBLZXJuZWwgTW9kdWxlIC0gaGV4IGltYWdlCitmcHNwLnMJCUZ1bGwgRlAgS2VybmVsIE1vZHVsZSAtIHNvdXJjZSBjb2RlCitmcHNwLmRvYwlGdWxsIEZQIEtlcm5lbCBNb2R1bGUgLSBvbi1saW5lIGRvY3VtZW50YXRpb24KKworcGZwc3Auc2EJUGFydGlhbCBGUCBLZXJuZWwgTW9kdWxlIC0gaGV4IGltYWdlCitwZnBzcC5zCQlQYXJ0aWFsIEZQIEtlcm5lbCBNb2R1bGUgLSBzb3VyY2UgY29kZQorCitmcGxzcC5zYQlGUCBMaWJyYXJ5IE1vZHVsZSAtIGhleCBpbWFnZQorZnBsc3AucwkJRlAgTGlicmFyeSBNb2R1bGUgLSBzb3VyY2UgY29kZQorZnBsc3AuZG9jCUZQIExpYnJhcnkgTW9kdWxlIC0gb24tbGluZSBkb2N1bWVudGF0aW9uCisKK2lzcC5zYQkJSW50ZWdlciBVbmltcGxlbWVudGVkIEtlcm5lbCBNb2R1bGUgLSBoZXggaW1hZ2UKK2lzcC5zCQlJbnRlZ2VyIFVuaW1wbGVtZW50ZWQgS2VybmVsIE1vZHVsZSAtIHNvdXJjZSBjb2RlCitpc3AuZG9jCQlJbnRlZ2VyIFVuaW1wbGVtZW50ZWQgS2VybmVsIE1vZHVsZSAtIG9uLWxpbmUgZG9jCisKK2lsc3Auc2EJCUludGVnZXIgVW5pbXBsZW1lbnRlZCBMaWJyYXJ5IE1vZHVsZSAtIGhleCBpbWFnZQoraWxzcC5zCQlJbnRlZ2VyIFVuaW1wbGVtZW50ZWQgTGlicmFyeSBNb2R1bGUgLSBzb3VyY2UgY29kZQoraWxzcC5kb2MJSW50ZWdlciBVbmltcGxlbWVudGVkIExpYnJhcnkgTW9kdWxlIC0gb24tbGluZSBkb2MKKworZnNrZWxldG9uLnMJU2FtcGxlIENhbGwtb3V0cyBuZWVkZWQgYnkgZnBzcC5zYSBhbmQgcGZwc3Auc2EKKworaXNrZWxldG9uLnMJU2FtcGxlIENhbGwtb3V0cyBuZWVkZWQgYnkgaXNwLnNhCisKK29zLnMJCVNhbXBsZSBDYWxsLW91dHMgbmVlZGVkIGJ5IGZwc3Auc2EsIHBmcHNwLnNhLCBhbmQgaXNwLnNhCisKK2Z0ZXN0LnNhCVNpbXBsZSB0ZXN0IHByb2dyYW0gdG8gdGVzdCB0aGF0IHtwfWZwc3Auc2EKKwkJd2FzIGNvbm5lY3RlZCBwcm9wZXJseTsgaGV4IGltYWdlCitmdGVzdC5zCQlhYm92ZSB0ZXN0OyBzb3VyY2UgY29kZQorCitpdGVzdC5zYQlTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIHRlc3QgdGhhdCBpc3Auc2Egd2FzCisJCWNvbm5lY3RlZCBwcm9wZXJseTsgaGV4IGltYWdlCitpdGVzdC5zCQlhYm92ZSB0ZXN0OyBzb3VyY2UgY29kZQorCit0ZXN0LmRvYwlvbi1saW5lIGRvY3VtZW50YXRpb24gZm9yIHtpLGZ9dGVzdC5zYQorCitSRUFETUUJCVRoaXMgZmlsZQorCitFUlJBVEEJCUtub3duIGVycmF0YSBmb3IgdGhpcyByZWxlYXNlCisKK01JU0MJCVJlbGVhc2UgZmlsZSB2ZXJzaW9uIG51bWJlcnMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9URVNULkRPQyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9URVNULkRPQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU5MDBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL1RFU1QuRE9DCkBAIC0wLDAgKzEsMjA4IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cis2ODA2MCBTT0ZUV0FSRSBQQUNLQUdFIChLZXJuZWwgdmVyc2lvbikgU0lNUExFIFRFU1RTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZXMgaXRlc3Quc2EgYW5kIGZ0ZXN0LnNhIGNvbnRhaW4gc2ltcGxlIHRlc3RzIHRvIGNoZWNrCit0aGUgc3RhdGUgb2YgdGhlIDY4MDYwSVNQIGFuZCA2ODA2MEZQU1Agb25jZSB0aGV5IGhhdmUgYmVlbiBpbnN0YWxsZWQuCisKK1JlbGVhc2UgZmlsZSBmb3JtYXQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHJlbGVhc2UgZmlsZXMgaXRlc3Quc2EgYW5kIGZ0ZXN0LnNhIGFyZSBlc3NlbnRpYWxseQoraGV4YWRlY2ltYWwgaW1hZ2VzIG9mIHRoZSBhY3R1YWwgdGVzdHMuIFRoaXMgZm9ybWF0IGlzIHRoZQorT05MWSBmb3JtYXQgdGhhdCB3aWxsIGJlIHN1cHBvcnRlZC4gVGhlIGhleCBpbWFnZXMgd2VyZSBjcmVhdGVkCitieSBhc3NlbWJsaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgdGhlbiBjb252ZXJ0aW5nIHRoZSByZXN1bHRpbmcKK2JpbmFyeSBvdXRwdXQgaW1hZ2VzIGludG8gQVNDSUkgdGV4dCBmaWxlcy4gVGhlIGhleGFkZWNpbWFsCitudW1iZXJzIGFyZSBsaXN0ZWQgdXNpbmcgdGhlIE1vdG9yb2xhIEFzc2VtYmx5IHN5bnRheCBhc3NlbWJsZXIKK2RpcmVjdGl2ZSAiZGMubCIgKGRlZmluZSBjb25zdGFudCBsb25nd29yZCkuIFRoZSBmaWxlcyBjYW4gYmUKK2NvbnZlcnRlZCB0byBvdGhlciBhc3NlbWJseSBzeW50YXhlcyBieSB1c2luZyBhbnkgd29yZCBwcm9jZXNzb3IKK3dpdGggYSBnbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9uLgorCitUbyBhc3Npc3QgaW4gYXNzZW1ibGluZyBhbmQgbGlua2luZyB0aGVzZSBtb2R1bGVzIHdpdGggb3RoZXIgbW9kdWxlcywKK3RoZSBpbnN0YWxsZXIgc2hvdWxkIGFkZCBzeW1ib2xpYyBsYWJlbHMgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZXMuCitUaGlzIHdpbGwgYWxsb3cgdGhlIGNhbGxpbmcgcm91dGluZXMgdG8gYWNjZXNzIHRoZSBlbnRyeSBwb2ludHMKK29mIHRoZXNlIHBhY2thZ2VzLgorCitUaGUgc291cmNlIGNvZGUgaXRlc3QucyBhbmQgZnRlc3QucyBoYXZlIGJlZW4gaW5jbHVkZWQgYnV0IG9ubHkKK2ZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgorCitSZWxlYXNlIGZpbGUgc3RydWN0dXJlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHRvcCBvZiBtb2R1bGUpCisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gMTI4IGJ5dGUtc2l6ZWQgc2VjdGlvbgorICAgKDEpICB8ICAgQ2FsbC1PdXQJfCAtIDQgYnl0ZXMgcGVyIGVudHJ5ICh1c2VyIGZpbGxzIHRoZXNlIGluKQorCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSA4IGJ5dGVzIHBlciBlbnRyeQorICAgKDIpICB8IEVudHJ5IFBvaW50CXwgLSB1c2VyIGRvZXMgImJzciIgb3IgImpzciIgdG8gdGhpcyBhZGRyZXNzCisJfAkJfAorCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIGNvZGUgc2VjdGlvbgorICAgKDMpICB+CQl+CisJfAkJfAorCS0tLS0tLS0tLS0tLS0tLS0tCisoYm90dG9tIG9mIG1vZHVsZSkKKworVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdGhlICJDYWxsLW91dCIgc2VjdGlvbi4gVGhpcyBzZWN0aW9uCitpcyBOT1QgSU5DTFVERUQgaW4ge2ksZn10ZXN0LnNhIChhbiBleGFtcGxlICJDYWxsLW91dCIgc2VjdGlvbiBpcyBwcm92aWRlZCBhdAordGhlIGVuZCBvZiB0aGlzIGZpbGUpLiBUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gaXMgdG8gYWxsb3cgdGhlIHRlc3QKK3JvdXRpbmVzIHRvIHJlZmVyZW5jZSBleHRlcm5hbCBwcmludGluZyBmdW5jdGlvbnMgdGhhdCBtdXN0IGJlIHByb3ZpZGVkCitieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIHNlY3Rpb24gTVVTVCBiZSBleGFjdGx5IDEyOCBieXRlcyBpbgorc2l6ZS4gVGhlcmUgYXJlIDMyIGZpZWxkcywgZWFjaCA0IGJ5dGVzIGluIHNpemUuIEVhY2ggZmllbGQgY29ycmVzcG9uZHMKK3RvIGEgZnVuY3Rpb24gcmVxdWlyZWQgYnkgdGhlIHRlc3QgcGFja2FnZXMgKHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIKK2xvY2F0aW9uIGFyZSBsaXN0ZWQgaW4gIjY4MDYwe0lTUCxGUFNQfS1URVNUIGNhbGwtb3V0cyIgYmVsb3cpLiBFYWNoIGZpZWxkCitlbnRyeSBzaG91bGQgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBSRUxBVElWRSB0bwordGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlICJjYWxsLW91dCIgc2VjdGlvbi4gVGhlICJDYWxsLW91dCIgc2VjdGlvbiBtdXN0CitzaXQgYWRqYWNlbnQgdG8gdGhlIHtpLGZ9dGVzdC5zYSBpbWFnZSBpbiBtZW1vcnkuIFNpbmNlIGl0ZXN0LnNhIGFuZCBmdGVzdC5zYQorYXJlIGluZGl2aWR1YWwgdGVzdHMsIHRoZXkgZWFjaCByZXF1aXJlIHRoZWlyIG93biAiQ2FsbC1vdXQiIHNlY3Rpb25zLgorCitUaGUgc2Vjb25kIHNlY3Rpb24sIHRoZSAiRW50cnktcG9pbnQiIHNlY3Rpb24sIGlzIHVzZWQgYnkgZXh0ZXJuYWwgcm91dGluZXMKK3RvIGFjY2VzcyB0aGUgdGVzdCByb3V0aW5lcy4gU2luY2UgdGhlIHtpLGZ9dGVzdC5zYSBoZXggZmlsZXMgY29udGFpbgorbm8gc3ltYm9sIG5hbWVzLCB0aGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIHRoYXQgYXJlIGZpeGVkCit3aXRoIHJlc3BlY3QgdG8gdGhlIHRvcCBvZiB0aGUgcGFja2FnZS4gVGhlIGN1cnJlbnRseSBkZWZpbmVkIGVudHJ5LXBvaW50cworYXJlIGxpc3RlZCBpbiBzZWN0aW9uICI2ODA2MHtJU1AsRlBTUH0tVEVTVCBlbnRyeSBwb2ludHMiIGJlbG93LiBBIGNhbGxpbmcKK3JvdXRpbmUgd291bGQgc2ltcGx5IGV4ZWN1dGUgYSAiYnNyIiBvciAianNyIiB0aGF0IGp1bXBlZCB0byB0aGUgc2VsZWN0ZWQKK2Z1bmN0aW9uIGVudHJ5LXBvaW50LgorCitGb3IgZXhhbXBsZSwgdG8gcnVuIHRoZSAwNjBJU1AgdGVzdCwgd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMgdGhlCitpdGVzdC5zYSBkYXRhIGFuZCBleGVjdXRlIHNvbWV0aGluZyBzaW1pbGFyIHRvOgorCisJYnNyCV8wNjBJU1BfVEVTVCsxMjgrMAorCisoXzA2MElTUF9URVNUIGlzIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSAiQ2FsbC1vdXQiIHNlY3Rpb247IHRoZSAiQ2FsbC1vdXQiCitzZWN0aW9uIGlzIDEyOCBieXRlcyBsb25nOyBhbmQgdGhlIDY4MDYwSVNQIHRlc3QgZW50cnkgcG9pbnQgaXMgbG9jYXRlZAorMCBieXRlcyBmcm9tIHRoZSB0b3Agb2YgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbi4pCisKK1RoZSB0aGlyZCBzZWN0aW9uIGlzIHRoZSBjb2RlIHNlY3Rpb24uIEFmdGVyIGVudGVyaW5nIHRocm91Z2ggYW4gIkVudHJ5LXBvaW50IiwKK3RoZSBlbnRyeSBjb2RlIGp1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSB0ZXN0IGNvZGUgd2l0aGluIHRoZSBjb2RlIHNlY3Rpb24uCisKKzY4MDYwSVNQLVRFU1QgQ2FsbC1vdXRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDA6IF9wcmludF9zdHJpbmcoKQorMHg0OiBfcHJpbnRfbnVtYmVyKCkKKworNjgwNjBGUFNQLVRFU1QgQ2FsbC1vdXRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwOiBfcHJpbnRfc3RyaW5nKCkKKzB4NDogX3ByaW50X251bWJlcigpCisKK1RoZSB0ZXN0IHBhY2thZ2VzIGNhbGwgX3ByaW50X3N0cmluZygpIGFuZCBfcHJpbnRfbnVtYmVyKCkKK2FzIHN1YnJvdXRpbmVzIGFuZCBleHBlY3QgdGhlIG1haW4gcHJvZ3JhbSB0byBwcmludCBhIHN0cmluZworb3IgYSBudW1iZXIgdG8gYSBmaWxlIG9yIHRvIHRoZSBzY3JlZW4uCitJbiAiQyItbGlrZSBmYXNoaW9uLCB0aGUgdGVzdCBwcm9ncmFtIGNhbGxzOgorCisJcHJpbnRfc3RyaW5nKCJUZXN0IHBhc3NlZCIpOworCisJCW9yCisKKwlwcmludF9udW1iZXIoMjApOworCitGb3IgX3ByaW50X3N0cmluZygpLCB0aGUgdGVzdCBwcm9ncmFtcyBwYXNzIGEgbG9uZ3dvcmQgYWRkcmVzcworb2YgdGhlIHN0cmluZyBvbiB0aGUgc3RhY2suIEZvciBfcHJpbnRfbnVtYmVyKCksIHRoZSB0ZXN0IHByb2dyYW1zIHBhc3MKK2EgbG9uZ3dvcmQgbnVtYmVyIHRvIGJlIHByaW50ZWQuCisKK0ZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFmdGVyIHRoZSBtYWluIHByb2dyYW0gcGVyZm9ybXMgYSAicHJpbnQiCitmb3IgYSB0ZXN0IHBhY2thZ2UsIGl0IHNob3VsZCBmbHVzaCB0aGUgb3V0cHV0IHNvIHRoYXQgaXQncyBub3QKK2J1ZmZlcmVkLiBJbiB0aGlzIHdheSwgaWYgdGhlIHRlc3QgcHJvZ3JhbSBjcmFzaGVzLCBhdCBsZWFzdCB0aGUgcHJldmlvdXMKK3N0YXRlbWVudHMgcHJpbnRlZCB3aWxsIGJlIHNlZW4uCisKKzY4MDYwSVNQLVRFU1QgRW50cnktcG9pbnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDA6IGludGVnZXIgdGVzdAorCis2ODA2MEZQU1AtVEVTVCBFbnRyeS1wb2ludHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDAwOiBtYWluIGZwIHRlc3QKKzB4MDg6IEZQIHVuaW1wbGVtZW50ZWQgdGVzdAorMHgxMDogRlAgZW5hYmxlZCBzbmFuL29wZXJyL292ZmwvdW5mbC9kei9pbmV4CisKK1RoZSBmbG9hdGluZy1wb2ludCB1bml0IHRlc3QgaGFzIDMgZW50cnkgcG9pbnRzIHdoaWNoIHdpbGwgcmVxdWlyZQorMyBkaWZmZXJlbnQgY2FsbHMgdG8gdGhlIHBhY2thZ2UgaWYgZWFjaCBvZiB0aGUgdGhyZWUgZm9sbG93aW5nIHRlc3RzCitpcyBkZXNpcmVkOgorCittYWluIGZwIHRlc3Q6IHRlc3RzICgxKSB1bmltcCBlZmZlY3RpdmUgYWRkcmVzcyBleGNlcHRpb24KKwkJICAgICgyKSB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9ucworCQkgICAgKDMpIG5vbi1tYXNrYWJsZSBvdmVyZmxvdy91bmRlcmZsb3cgZXhjZXB0aW9ucworCitGUCB1bmltcGxlbWVudGVkOiB0ZXN0cyBGUCB1bmltcGxlbWVudGVkIGV4Y2VwdGlvbi4gdGhpcyBvbmUgaXMKKwkJICBzZXBhcmF0ZSBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0cyBmb3Igc3lzdGVtcyB0aGF0IGRvbid0CisJCSAgd2FudCBGUCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucy4KKworRlAgZW5hYmxlZDogdGVzdHMgZW5hYmxlZCBzbmFuL29wZXJyL292ZmwvdW5mbC9kei9pbmV4LgorCSAgICBiYXNpY2FsbHksIGl0IGVuYWJsZXMgZWFjaCBvZiB0aGVzZSBleGNlcHRpb25zIGFuZCBmb3JjZXMKKwkgICAgZWFjaCB1c2luZyBhbiBpbXBsZW1lbnRlZCBGUCBpbnN0cnVjdGlvbi4gdGhpcyBwcm9jZXNzCisJICAgIGV4ZXJjaXNlcyBfZnBzcF97c25hbixvcGVycixvdmZsLHVuZmwsZHosaW5leH0oKSBhbmQKKwkgICAgX3JlYWxfe3NuYW4sb3BlcnIsb3ZmbCx1bmZsLGR6LGluZXh9KCkuIHRoZSB0ZXN0IGV4cGVjdHMKKwkgICAgX3JlYWxfWFhYWCgpIHRvIGRvIG5vdGhpbmcgZXhjZXB0IGNsZWFyIHRoZSBleGNlcHRpb24KKwkgICAgYW5kICJydGUiLiBpZiBhIHN5c3RlbSdzIF9yZWFsX1hYWFgoKSBoYW5kbGVyIGNyZWF0ZXMgYW4KKwkgICAgYWx0ZXJuYXRlIHJlc3VsdCwgdGhlIHRlc3Qgd2lsbCBwcmludCAiZmFpbGVkIiBidXQgdGhpcworCSAgICBpcyBhY2NlcHRhYmxlLgorCitNaXNjZWxsYW5lb3VzOgorLS0tLS0tLS0tLS0tLS0KK0FnYWluLCBpdGVzdC5zYSBhbmQgZnRlc3Quc2EgYXJlIHNpbXBsZSB0ZXN0cyBhbmQgZG8gbm90IHRob3JvdWdobHkKK3Rlc3QgYWxsIDY4MDYwU1AgY29ubmVjdGlvbnMuIEZvciBleGFtcGxlLCB0aGV5IGRvIG5vdCB0ZXN0IGNvbm5lY3Rpb25zCit0byBfcmVhbF9hY2Nlc3MoKSwgX3JlYWxfdHJhY2UoKSwgX3JlYWxfdHJhcCgpLCBldGMuIGJlY2F1c2UgdGhlc2UKK3dpbGwgYmUgc3lzdGVtLWltcGxlbWVudGVkIHNldmVyYWwgZGlmZmVyZW50IHdheXMgYW5kIHRoZSB0ZXN0IHBhY2thZ2VzCittdXN0IHJlbWFpbiBzeXN0ZW0gaW5kZXBlbmRlbnQuCisKK0V4YW1wbGUgdGVzdCBwYWNrYWdlIHNldC11cDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK19wcmludF9zdHI6CisJLgkJCSMgcHJvdmlkZWQgYnkgc3lzdGVtCisJcnRzCisKK19wcmludF9udW06CisJLgkJCSMgcHJvdmlkZWQgYnkgc3lzdGVtCisJcnRzCisKKwkuCisJLgorCWJzcglfMDYwRlBTUF9URVNUKzEyOCswCisJLgorCS4KKwlydHMKKworIyBiZWdpbm5pbmcgb2YgIkNhbGwtb3V0IiBzZWN0aW9uOyBwcm92aWRlZCBieSBpbnRlZ3JhdG9yLgorIyBNVVNUIGJlIDEyOCBieXRlcyBsb25nLgorXzA2MEZQU1BfVEVTVDoKKwlsb25nCV9wcmludF9zdHIgLSBfMDYwRlBTUF9URVNUCisJbG9uZwlfcHJpbnRfbnVtIC0gXzA2MEZQU1BfVEVTVAorCXNwYWNlCTEyMAorCisjIGZ0ZXN0LnNhIHN0YXJ0cyBoZXJlOyBzdGFydCBvZiAiRW50cnktcG9pbnQiIHNlY3Rpb24uCisJbG9uZwkweDYwZmYwMDAwLCAweDAwMDAyMzQ2CisJbG9uZwkweDYwZmYwMDAwLCAweDAwMDE4NzY2CisJbG9uZwkweDYwZmYwMDAwLCAweDAwMDIzMzM4CisJbG9uZwkweDI0Mzc3Mjk5LCAweGFiMjY0M2VhCisJCS4KKwkJLgorCQkuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvZnBsc3AuZG9jIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjYzN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLmRvYwpAQCAtMCwwICsxLDIzMSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis2ODA2MCBGTE9BVElORy1QT0lOVCBTT0ZUV0FSRSBQQUNLQUdFIChMaWJyYXJ5IHZlcnNpb24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBmcGxzcC5zYSBjb250YWlucyB0aGUgIkxpYnJhcnkgdmVyc2lvbiIgb2YgdGhlCis2ODA2MFNQIEZsb2F0aW5nLVBvaW50IFNvZnR3YXJlIFBhY2thZ2UuIFRoZSByb3V0aW5lcworaW5jbHVkZWQgaW4gdGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgdG8gZW11bGF0ZSB0aGUKK0ZQIGluc3RydWN0aW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gNjgwNjAgaGFyZHdhcmUuIFRoZXNlCitpbnN0cnVjdGlvbnMgbm9ybWFsbHkgdGFrZSBleGNlcHRpb24gdmVjdG9yICMxMQorIkZQIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb24iLgorCitCeSByZS1jb21waWxpbmcgYSBwcm9ncmFtIHRoYXQgdXNlcyB0aGVzZSBpbnN0cnVjdGlvbnMsIGFuZAorbWFraW5nIHN1YnJvdXRpbmUgY2FsbHMgaW4gcGxhY2Ugb2YgdGhlIHVuaW1wbGVtZW50ZWQKK2luc3RydWN0aW9ucywgYSBwcm9ncmFtIGNhbiBhdm9pZCB0aGUgb3ZlcmhlYWQgYXNzb2NpYXRlZAord2l0aCB0YWtpbmcgdGhlIGV4Y2VwdGlvbi4KKworUmVsZWFzZSBmaWxlIGZvcm1hdDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBmcGxzcC5zYSBpcyBlc3NlbnRpYWxseSBhIGhleGFkZWNpbWFsIGltYWdlIG9mIHRoZQorcmVsZWFzZSBwYWNrYWdlLiBUaGlzIGlzIHRoZSBPTkxZIGZvcm1hdCB3aGljaCB3aWxsIGJlIHN1cHBvcnRlZC4KK1RoZSBoZXggaW1hZ2Ugd2FzIGNyZWF0ZWQgYnkgYXNzZW1ibGluZyB0aGUgc291cmNlIGNvZGUgYW5kCit0aGVuIGNvbnZlcnRpbmcgdGhlIHJlc3VsdGluZyBiaW5hcnkgb3V0cHV0IGltYWdlIGludG8gYW4KK0FTQ0lJIHRleHQgZmlsZS4gVGhlIGhleGFkZWNpbWFsIG51bWJlcnMgYXJlIGxpc3RlZAordXNpbmcgdGhlIE1vdG9yb2xhIEFzc2VtYmx5IFN5bnRheCBhc3NlbWJsZXIgZGlyZWN0aXZlICJkYy5sIgorKGRlZmluZSBjb25zdGFudCBsb25nd29yZCkuIFRoZSBmaWxlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gb3RoZXIKK2Fzc2VtYmx5IHN5bnRheGVzIGJ5IHVzaW5nIGFueSB3b3JkIHByb2Nlc3NvciB3aXRoIGEgZ2xvYmFsCitzZWFyY2ggYW5kIHJlcGxhY2UgZnVuY3Rpb24uCisKK1RvIGFzc2lzdCBpbiBhc3NlbWJsaW5nIGFuZCBsaW5raW5nIHRoaXMgbW9kdWxlIHdpdGggb3RoZXIgbW9kdWxlcywKK3RoZSBpbnN0YWxsZXIgc2hvdWxkIGFkZCBhIHN5bWJvbGljIGxhYmVsIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCitUaGlzIHdpbGwgYWxsb3cgY2FsbGluZyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIGVudHJ5IHBvaW50cworb2YgdGhpcyBwYWNrYWdlLgorCitUaGUgc291cmNlIGNvZGUgZnBsc3AucyBoYXMgYWxzbyBiZWVuIGluY2x1ZGVkIGJ1dCBvbmx5IGZvcgorZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4KKworUmVsZWFzZSBmaWxlIHN0cnVjdHVyZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBmcGxzcC5zYSBjb250YWlucyBhbiAiRW50cnktUG9pbnQiIHNlY3Rpb24gYW5kIGEKK2NvZGUgc2VjdGlvbi4gVGhlIEZQTFNQIGhhcyBubyAiQ2FsbC1PdXQiIHNlY3Rpb24uIFRoZSBmaXJzdCBzZWN0aW9uCitpcyB0aGUgIkVudHJ5LVBvaW50IiBzZWN0aW9uLiBJbiBvcmRlciB0byBhY2Nlc3MgYSBmdW5jdGlvbiBpbiB0aGUKK3BhY2thZ2UsIGEgcHJvZ3JhbSBtdXN0ICJic3IiIG9yICJqc3IiIHRvIHRoZSBsb2NhdGlvbiBsaXN0ZWQKK2JlbG93IGluICI2ODA2MEZQTFNQIGVudHJ5IHBvaW50cyIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZGVzaXJlZAorZnVuY3Rpb24uIEEgYnJhbmNoIGluc3RydWN0aW9uIGxvY2F0ZWQgYXQgdGhlIHNlbGVjdGVkIGVudHJ5IHBvaW50Cit3aXRoaW4gdGhlIHBhY2thZ2Ugd2lsbCB0aGVuIGVudGVyIHRoZSBjb3JyZWN0IGVtdWxhdGlvbiBjb2RlIHJvdXRpbmUuCisKK1RoZSBlbnRyeSBwb2ludCBhZGRyZXNzZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFja2FnZSB3aWxsIHJlbWFpbgorZml4ZWQgc28gdGhhdCBhIHByb2dyYW0gY2FsbGluZyB0aGUgcm91dGluZXMgd2lsbCBub3QgaGF2ZSB0byBiZQorcmUtY29tcGlsZWQgd2l0aCBldmVyeSBuZXcgNjgwNjBGUExTUCByZWxlYXNlLgorCitUaGVyZSBhcmUgMyBlbnRyeS1wb2ludHMgZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gdHlwZTogc2luZ2xlIHByZWNpc2lvbiwKK2RvdWJsZSBwcmVjaXNpb24sIGFuZCBleHRlbmRlZCBwcmVjaXNpb24uCisKK0FzIGFuIGV4YW1wbGUsIHRoZSAiZnNpbiIgbGlicmFyeSBpbnN0cnVjdGlvbiBjYW4gYmUgcGFzc2VkIGFuCitleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCBpZiBwcm9ncmFtIGV4ZWN1dGVzOgorCisjIGZzaW4ueCBmcDAKKworCWZtb3ZtLngJJjB4MDEsLSglc3ApCSMgcGFzcyBvcGVyYW5kIG9uIHN0YWNrCisJYnNyLmwJXzA2MEZQTFNQX1RPUCsweDFhOCAjIGJyYW5jaCB0byBmc2luIHJvdXRpbmUKKwlhZGQubAkmMHhjLCVzcAkjIGNsZWFyIG9wZXJhbmQgZnJvbSBzdGFjaworCitVcG9uIHJldHVybiwgZnAwIGhvbGRzIHRoZSBjb3JyZWN0IHJlc3VsdC4gVGhlIEZQU1IgaXMKK3NldCBjb3JyZWN0bHkuIFRoZSBGUENSIGlzIHVuY2hhbmdlZC4gVGhlIEZQSUFSIGlzIHVuZGVmaW5lZC4KKworQW5vdGhlciBleGFtcGxlLiBUaGlzIHRpbWUsIGEgZHlhZGljIG9wZXJhdGlvbjoKKworIyBmcmVtLnMgJWZwMSwlZnAwCisKKwlmbW92LnMJJWZwMSwtKCVzcCkJIyBwYXNzIHNyYyBvcGVyYW5kCisJZm1vdi5zCSVmcDAsLSglc3ApCSMgcGFzcyBkc3Qgb3BlcmFuZAorCWJzci5sCV8wNjBGUExTUF9UT1ArMHgxNjggIyBicmFuY2ggdG8gZnJlbSByb3V0aW5lCisJYWRkcS5sCSYweDgsJXNwCSMgY2xlYXIgb3BlcmFuZHMgZnJvbSBzdGFjaworCitBZ2FpbiwgdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiBmcDAuIE5vdGUgdGhhdCBCT1RIIG9wZXJhbmRzCithcmUgcGFzc2VkIGluIHNpbmdsZSBwcmVjaXNpb24gZm9ybWF0LgorCitFeGNlcHRpb24gcmVwb3J0aW5nOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBwYWNrYWdlIHRha2VzIGV4Y2VwdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBGUENSIHZhbHVlIHVwb24gc3Vicm91dGluZQorZW50cnkuIElmIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQsIHRoZW4gdGhlIHBhY2thZ2UgZm9yY2VzCit0aGlzIGV4Y2VwdGlvbiB1c2luZyBpbXBsZW1lbnRlZCBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuCitGb3IgZXhhbXBsZSwgaWYgdGhlIGluc3RydWN0aW9uIGJlaW5nIGVtdWxhdGVkIHNob3VsZCBjYXVzZSBhCitmbG9hdGluZy1wb2ludCBPcGVyYW5kIEVycm9yIGV4Y2VwdGlvbiwgdGhlbiB0aGUgbGlicmFyeSByb3V0aW5lCitleGVjdXRlcyBhbiBGTVVMIG9mIGEgemVybyBhbmQgYW4gaW5maW5pdHkgdG8gZm9yY2UgdGhlIE9QRVJSCitleGNlcHRpb24uIEFsdGhvdWdoIHRoZSBGUElBUiB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgdGhlIGVuYWJsZWQKK09wZXJhbmQgRXJyb3IgZXhjZXB0aW9uIGhhbmRsZXIsIHRoZSB1c2VyIHdpbGwgYXQgbGVhc3QgYmUgYWJsZQordG8gcmVjb3JkIHRoYXQgdGhlIGV2ZW50IG9jY3VycmVkLgorCitNaXNjZWxsYW5lb3VzOgorLS0tLS0tLS0tLS0tLS0KK1RoZSBwYWNrYWdlIGRvZXMgbm90IGF0dGVtcHQgdG8gY29ycmVjdGx5IGVtdWxhdGUgaW5zdHJ1Y3Rpb25zCit3aXRoIFNpZ25hbGxpbmcgTkFOIGlucHV0cy4gVXNlIG9mIFNOQU5zIHNob3VsZCBiZSBhdm9pZGVkIHdpdGgKK3RoaXMgcGFja2FnZS4KKworVGhlIGZhYnMvZmFkZC9mZGl2L2ZpbnQvZmludHJ6L2ZtdWwvZm5lZy9mc3FydC9mc3ViIGVudHJ5IHBvaW50cworYXJlIHByb3ZpZGVkIGZvciB0aGUgY29udmVuaWVuY2Ugb2Ygb2xkZXIgY29tcGlsZXJzIHRoYXQgbWFrZQorc3Vicm91dGluZSBjYWxscyBmb3IgYWxsIGZwIGluc3RydWN0aW9ucy4gVGhlIGNvZGUgZG9lcyBOT1QgZW11bGF0ZQordGhlIGluc3RydWN0aW9uIGJ1dCByYXRoZXIgc2ltcGx5IGV4ZWN1dGVzIGl0LgorCis2ODA2MEZQTFNQIGVudHJ5IHBvaW50czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorXzA2MEZQTFNQX1RPUDoKKzB4MDAwOglfMDYwTFNQX19mYWNvc3NfCisweDAwODoJXzA2MExTUF9fZmFjb3NkXworMHgwMTA6CV8wNjBMU1BfX2ZhY29zeF8KKzB4MDE4OglfMDYwTFNQX19mYXNpbnNfCisweDAyMDoJXzA2MExTUF9fZmFzaW5kXworMHgwMjg6CV8wNjBMU1BfX2Zhc2lueF8KKzB4MDMwOglfMDYwTFNQX19mYXRhbnNfCisweDAzODoJXzA2MExTUF9fZmF0YW5kXworMHgwNDA6CV8wNjBMU1BfX2ZhdGFueF8KKzB4MDQ4OglfMDYwTFNQX19mYXRhbmhzXworMHgwNTA6CV8wNjBMU1BfX2ZhdGFuaGRfCisweDA1ODoJXzA2MExTUF9fZmF0YW5oeF8KKzB4MDYwOglfMDYwTFNQX19mY29zc18KKzB4MDY4OglfMDYwTFNQX19mY29zZF8KKzB4MDcwOglfMDYwTFNQX19mY29zeF8KKzB4MDc4OglfMDYwTFNQX19mY29zaHNfCisweDA4MDoJXzA2MExTUF9fZmNvc2hkXworMHgwODg6CV8wNjBMU1BfX2Zjb3NoeF8KKzB4MDkwOglfMDYwTFNQX19mZXRveHNfCisweDA5ODoJXzA2MExTUF9fZmV0b3hkXworMHgwYTA6CV8wNjBMU1BfX2ZldG94eF8KKzB4MGE4OglfMDYwTFNQX19mZXRveG0xc18KKzB4MGIwOglfMDYwTFNQX19mZXRveG0xZF8KKzB4MGI4OglfMDYwTFNQX19mZXRveG0xeF8KKzB4MGMwOglfMDYwTFNQX19mZ2V0ZXhwc18KKzB4MGM4OglfMDYwTFNQX19mZ2V0ZXhwZF8KKzB4MGQwOglfMDYwTFNQX19mZ2V0ZXhweF8KKzB4MGQ4OglfMDYwTFNQX19mZ2V0bWFuc18KKzB4MGUwOglfMDYwTFNQX19mZ2V0bWFuZF8KKzB4MGU4OglfMDYwTFNQX19mZ2V0bWFueF8KKzB4MGYwOglfMDYwTFNQX19mbG9nMTBzXworMHgwZjg6CV8wNjBMU1BfX2Zsb2cxMGRfCisweDEwMDoJXzA2MExTUF9fZmxvZzEweF8KKzB4MTA4OglfMDYwTFNQX19mbG9nMnNfCisweDExMDoJXzA2MExTUF9fZmxvZzJkXworMHgxMTg6CV8wNjBMU1BfX2Zsb2cyeF8KKzB4MTIwOglfMDYwTFNQX19mbG9nbnNfCisweDEyODoJXzA2MExTUF9fZmxvZ25kXworMHgxMzA6CV8wNjBMU1BfX2Zsb2dueF8KKzB4MTM4OglfMDYwTFNQX19mbG9nbnAxc18KKzB4MTQwOglfMDYwTFNQX19mbG9nbnAxZF8KKzB4MTQ4OglfMDYwTFNQX19mbG9nbnAxeF8KKzB4MTUwOglfMDYwTFNQX19mbW9kc18KKzB4MTU4OglfMDYwTFNQX19mbW9kZF8KKzB4MTYwOglfMDYwTFNQX19mbW9keF8KKzB4MTY4OglfMDYwTFNQX19mcmVtc18KKzB4MTcwOglfMDYwTFNQX19mcmVtZF8KKzB4MTc4OglfMDYwTFNQX19mcmVteF8KKzB4MTgwOglfMDYwTFNQX19mc2NhbGVzXworMHgxODg6CV8wNjBMU1BfX2ZzY2FsZWRfCisweDE5MDoJXzA2MExTUF9fZnNjYWxleF8KKzB4MTk4OglfMDYwTFNQX19mc2luc18KKzB4MWEwOglfMDYwTFNQX19mc2luZF8KKzB4MWE4OglfMDYwTFNQX19mc2lueF8KKzB4MWIwOglfMDYwTFNQX19mc2luY29zc18KKzB4MWI4OglfMDYwTFNQX19mc2luY29zZF8KKzB4MWMwOglfMDYwTFNQX19mc2luY29zeF8KKzB4MWM4OglfMDYwTFNQX19mc2luaHNfCisweDFkMDoJXzA2MExTUF9fZnNpbmhkXworMHgxZDg6CV8wNjBMU1BfX2ZzaW5oeF8KKzB4MWUwOglfMDYwTFNQX19mdGFuc18KKzB4MWU4OglfMDYwTFNQX19mdGFuZF8KKzB4MWYwOglfMDYwTFNQX19mdGFueF8KKzB4MWY4OglfMDYwTFNQX19mdGFuaHNfCisweDIwMDoJXzA2MExTUF9fZnRhbmhkXworMHgyMDg6CV8wNjBMU1BfX2Z0YW5oeF8KKzB4MjEwOglfMDYwTFNQX19mdGVudG94c18KKzB4MjE4OglfMDYwTFNQX19mdGVudG94ZF8KKzB4MjIwOglfMDYwTFNQX19mdGVudG94eF8KKzB4MjI4OglfMDYwTFNQX19mdHdvdG94c18KKzB4MjMwOglfMDYwTFNQX19mdHdvdG94ZF8KKzB4MjM4OglfMDYwTFNQX19mdHdvdG94eF8KKworMHgyNDA6CV8wNjBMU1BfX2ZhYnNzXworMHgyNDg6CV8wNjBMU1BfX2ZhYnNkXworMHgyNTA6CV8wNjBMU1BfX2ZhYnN4XworMHgyNTg6CV8wNjBMU1BfX2ZhZGRzXworMHgyNjA6CV8wNjBMU1BfX2ZhZGRkXworMHgyNjg6CV8wNjBMU1BfX2ZhZGR4XworMHgyNzA6CV8wNjBMU1BfX2ZkaXZzXworMHgyNzg6CV8wNjBMU1BfX2ZkaXZkXworMHgyODA6CV8wNjBMU1BfX2ZkaXZ4XworMHgyODg6CV8wNjBMU1BfX2ZpbnRzXworMHgyOTA6CV8wNjBMU1BfX2ZpbnRkXworMHgyOTg6CV8wNjBMU1BfX2ZpbnR4XworMHgyYTA6CV8wNjBMU1BfX2ZpbnRyenNfCisweDJhODoJXzA2MExTUF9fZmludHJ6ZF8KKzB4MmIwOglfMDYwTFNQX19maW50cnp4XworMHgyYjg6CV8wNjBMU1BfX2ZtdWxzXworMHgyYzA6CV8wNjBMU1BfX2ZtdWxkXworMHgyYzg6CV8wNjBMU1BfX2ZtdWx4XworMHgyZDA6CV8wNjBMU1BfX2ZuZWdzXworMHgyZDg6CV8wNjBMU1BfX2ZuZWdkXworMHgyZTA6CV8wNjBMU1BfX2ZuZWd4XworMHgyZTg6CV8wNjBMU1BfX2ZzcXJ0c18KKzB4MmYwOglfMDYwTFNQX19mc3FydGRfCisweDJmODoJXzA2MExTUF9fZnNxcnR4XworMHgzMDA6CV8wNjBMU1BfX2ZzdWJzXworMHgzMDg6CV8wNjBMU1BfX2ZzdWJkXworMHgzMTA6CV8wNjBMU1BfX2ZzdWJ4XwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLnNhIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLnNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjZkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnBsc3Auc2EKQEAgLTAsMCArMSwxOTQ2IEBACisJZGMubAkkNjBmZjAwMDAsJDIzOGUwMDAwLCQ2MGZmMDAwMCwkMjQyMDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMjRiNjAwMDAsJDYwZmYwMDAwLCQxMTA2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxMTk4MDAwMCwkNjBmZjAwMDAsJDEyMmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDBmMTYwMDAwLCQ2MGZmMDAwMCwkMGZhODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTAzZTAwMDAsJDYwZmYwMDAwLCQxMmFlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxMzQwMDAwMCwkNjBmZjAwMDAsJDEzZDYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDA1YWUwMDAwLCQ2MGZmMDAwMCwkMDY0MDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDZkNjAwMDAsJDYwZmYwMDAwLCQyMTNlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyMWQwMDAwMCwkNjBmZjAwMDAsJDIyNjYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDE2MTYwMDAwLCQ2MGZmMDAwMCwkMTZhODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTczZTAwMDAsJDYwZmYwMDAwLCQwYWVlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwYjgwMDAwMCwkNjBmZjAwMDAsJDBjMTYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDI0YTYwMDAwLCQ2MGZmMDAwMCwkMjUzODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMjVjZTAwMDAsJDYwZmYwMDAwLCQyNjY2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyNmY4MDAwMCwkNjBmZjAwMDAsJDI3OGUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDFkMTYwMDAwLCQ2MGZmMDAwMCwkMWRhODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMWUzZTAwMDAsJDYwZmYwMDAwLCQxZWQ2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxZjY4MDAwMCwkNjBmZjAwMDAsJDFmZmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDFiMGUwMDAwLCQ2MGZmMDAwMCwkMWJhMDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMWMzNjAwMDAsJDYwZmYwMDAwLCQwODg2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwOTE4MDAwMCwkNjBmZjAwMDAsJDA5YWUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDJiZjAwMDAwLCQ2MGZmMDAwMCwkMmNhNDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMmQ1ODAwMDAsJDYwZmYwMDAwLCQyOTk4MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyYTRjMDAwMCwkNjBmZjAwMDAsJDJiMDAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDJlMDAwMDAwLCQ2MGZmMDAwMCwkMmViNDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMmY2ODAwMDAsJDYwZmYwMDAwLCQwMjllMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwMzMwMDAwMCwkNjBmZjAwMDAsJDAzYzYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDI3NjYwMDAwLCQ2MGZmMDAwMCwkMjdmZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMjg5YTAwMDAsJDYwZmYwMDAwLCQwNjFlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwNmIwMDAwMCwkNjBmZjAwMDAsJDA3NDYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDEyZWUwMDAwLCQ2MGZmMDAwMCwkMTM4MDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTQxNjAwMDAsJDYwZmYwMDAwLCQwYjc2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwYzA4MDAwMCwkNjBmZjAwMDAsJDBjOWUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDE4NDYwMDAwLCQ2MGZmMDAwMCwkMThkODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTk2ZTAwMDAsJDYwZmYwMDAwLCQxNjU2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxNmU4MDAwMCwkNjBmZjAwMDAsJDE3N2UwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyZmUwMDAwLCQ2MGZmMDAwMCwkNzJmZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzJmZTAwMDAsJDYwZmYwMDAwLCQ3MWJlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MWQ0MDAwMCwkNjBmZjAwMDAsJDcxZWEwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyODQwMDAwLCQ2MGZmMDAwMCwkNzI5YTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzJiMDAwMDAsJDYwZmYwMDAwLCQ3MmZlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MmZlMDAwMCwkNjBmZjAwMDAsJDcyZmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyZmUwMDAwLCQ2MGZmMDAwMCwkNzJmZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzJmZTAwMDAsJDYwZmYwMDAwLCQ3MWYyMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MjA4MDAwMCwkNjBmZjAwMDAsJDcyMWUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyODYwMDAwLCQ2MGZmMDAwMCwkNzI4NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzI4NjAwMDAsJDYwZmYwMDAwLCQ3Mjg2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3Mjg2MDAwMCwkNjBmZjAwMDAsJDcyODYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcxNjAwMDAwLCQ2MGZmMDAwMCwkNzE3NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzE4YzAwMDAsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ0MGM2MmQzOCwkZDNkNjQ2MzQsJDNkNmY5MGFlLCRiMWU3NWNjNworCWRjLmwJJDQwMDAwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNSwkMDAwMDAwMDAKKwlkYy5sCSQzZmU0NWYzMCwkNmRjOWM4ODMsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA2Yzc2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQyZGRjNjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDcxMjQsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2ZDIyNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDZmNGMsJDYwMDY2MWZmLCQwMDAwMmY4ZSwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ2YmRjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDJkM2UsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ3MDg2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDZjODQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2ZWFlNjAwNiwkNjFmZjAwMDAsJDJlZjA0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ2YjM4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMmM5ZSwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDZmZTY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNmJlNCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDZlMGU2MDA2LCQ2MWZmMDAwMCwkMmU1MDRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNmE5ZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkMmMwZTYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDZmYzgKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ2YjRhNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDZkNzQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDJkYmMsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ2YTA0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDJiNzAKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2ZjJhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDZhYWMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2Y2Q2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyZDFlNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNjk2MDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwMmFkMAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDZlOGE2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNmEwYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDZjMzY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDJjN2U0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNjhjNiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNGU2ODYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA2ZDc0LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNmQ5NDYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2YjljLCQ2MDA2NjFmZiwkMDAwMDRmMTQsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNjgyYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0ZGNhLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNmNkNjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2Y2Y2LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNmFmZTYwMDYsJDYxZmYwMDAwLCQ0ZTc2NGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNjc4ODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDRkMmEsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2YzM2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDZjNTYsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2YTVlNjAwNiwkNjFmZjAwMDAsJDRkZDY0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDY2ZWUsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDU5YjI2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA2YjljCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNmJmMjYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA2OWM0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA1YWQ0LCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNjY1NDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDA1OTE0CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNmFmZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA2YjU0LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNjkyNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNWEzNjRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDY1YjAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDU4NzQKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2YTVlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDZhYjQsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2ODg2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ1OTk2NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDY1MTYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDQ2YzQ2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNjljNCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDZhMjQ2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNjdlYywkNjAwNjYxZmYsJDAwMDA0OTQ4LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDY0N2MxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNDYyNiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDY5MjY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNjk4NiwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDY3NGU2MDA2LCQ2MWZmMDAwMCwkNDhhYTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDYzZDgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0NTg2LCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNjg4NjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2OGU2LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNjZhZTYwMDYsJDYxZmYwMDAwLCQ0ODBhNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA2MzNlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0OWM0NjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNjdlYworCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDY4NTQ2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNjYxNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNGFmYSwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDYyYTQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwNDkyNgorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDY3NGU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNjdiNiwkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDY1NzY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDRhNWM0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2MjAwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDA0ODg2CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNjZhZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA2NzE2LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNjRkNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNDliYzRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA2MTY2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQzOTFjNjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDY2MTQsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2NmI4NjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDY0M2MsJDYwMDY2MWZmLCQwMDAwM2IyOCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ2MGNjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDM4N2UsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2NTc2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDY2MWEsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2MzllNjAwNiwkNjFmZjAwMDAsJDNhOGE0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ2MDI4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMzdkZSwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDY0ZDY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNjU3YSwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDYyZmU2MDA2LCQ2MWZmMDAwMCwkMzllYTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNWY4ZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkMzk4ODYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDY0M2MKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ2MDNhNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDYyNjQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDNhMDQsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ1ZWY0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDM4ZWEKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2MzllNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDVmOWMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2MWM2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQzOTY2NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNWU1MDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwMzg0YQorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDYyZmU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNWVmYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDYxMjY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDM4YzY0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNWRiNiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNTFkNDYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA2MjY0LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNWU2MjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2MDhjLCQ2MDA2NjFmZiwkMDAwMDUyMjQsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNWQxYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA1MTM2LCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNjFjNjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1ZGM0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNWZlZTYwMDYsJDYxZmYwMDAwLCQ1MTg2NGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNWM3ODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDUwOTYsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2MTI2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDVkMjQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1ZjRlNjAwNiwkNjFmZjAwMDAsJDUwZTY0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDViZGUsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDI4MDY2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA2MDhjCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNWM4YTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA1ZWI0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDAyOTM4LCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNWI0NDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDAyNzY4CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNWZlZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1YmVjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNWUxNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMjg5YTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDVhYTAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDI2YzgKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ1ZjRlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDViNGMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ1ZDc2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyN2ZhNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDVhMDYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDM5ZTQ2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNWYzMCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDVmMDI2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNWNkYywkNjAwNjYxZmYsJDAwMDAzYjVlLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDU5NmMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMzk0NiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDVlOTI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNWU2NCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDVjM2U2MDA2LCQ2MWZmMDAwMCwkM2FjMDRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDU4YzgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDAzOGE2LCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNWRmMjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1ZGM0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNWI5ZTYwMDYsJDYxZmYwMDAwLCQzYTIwNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA1ODJlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1MjJlNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNWQ1OAorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDVkMmE2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNWIwNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNTJkNiwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDU3OTQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwNTE5MAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDVjYmE2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNWM4YywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDVhNjY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDUyMzg0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1NmYwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDA1MGYwCisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNWMxYTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1YmVjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNTljNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNTE5ODRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA1NjU2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQ1MTRlNjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDViODAsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1YjUyNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDU5MmMsJDYwMDY2MWZmLCQwMDAwNTI0YywkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ1NWJjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDUwYjAsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1YWUyNjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDVhYjQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1ODhlNjAwNiwkNjFmZjAwMDAsJDUxYWU0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ1NTE4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNTAxMCwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDVhNDI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNWExNCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDU3ZWU2MDA2LCQ2MWZmMDAwMCwkNTEwZTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNTQ3ZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkNDUwMjYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDU0YzgKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ1OTgyNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDU3NTQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDQ2ODIsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ1M2U0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDQ0NjQKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ1NDJhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDU4ZTQsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ1NmI2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ0NWU0NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNTM0MDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwNDNjNAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDUzOGE2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNTg0NCwkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDU2MTY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDQ1NDQ0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNTJhNiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNDc2YzYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA1MmYwLCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNTdhYTYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1NTdjLCQ2MDA2NjFmZiwkMDAwMDQ3NmEsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNTIwYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0NmNlLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNTI1MjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1NzBjLCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNTRkZTYwMDYsJDYxZmYwMDAwLCQ0NmNjNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNTE2ODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDQ2MmUsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1MWIyNjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDU2NmMsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1NDNlNjAwNiwkNjFmZjAwMDAsJDQ2MmM0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDUwY2UsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDQ1ZTQ2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA1MTE4CisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNTVkMjYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA1M2E0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA0NjBjLCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNTAzNDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDA0NTQ2CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNTA3YTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1NTM0LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNTMwNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNDU2ZTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDRmOTAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDQ0YTYKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ0ZmRhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDU0OTQsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ1MjY2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ0NGNlNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDRlZjYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDMzZGE2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNTQyMCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDUzY2E2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNTFjYywkNjAwNjYxZmYsJDAwMDAzNDRjLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDRlNWMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMzMzYywkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDUzODI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNTMyYywkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDUxMmU2MDA2LCQ2MWZmMDAwMCwkMzNhZTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDRkYjgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDAzMjljLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNTJlMjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1MjhjLCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNTA4ZTYwMDYsJDYxZmYwMDAwLCQzMzBlNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA0ZDFlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQyN2NjNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNTI4NAorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDRkY2E2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNGZmNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwMjgyYSwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDRjODQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwMjcyZQorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDUxZTY2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNGQyYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDRmNTY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDI3OGM0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0YmUwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDAyNjhlCisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNTE0NjYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA0YzhjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNGViNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMjZlYzRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0YjQ2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQyZmIwNjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDRmZjQsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0YmYyNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDRlMWMsJDYwMDY2MWZmLCQwMDAwMmY5YSwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ0YWFjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDJmMTIsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0ZjU2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDRiNTQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0ZDdlNjAwNiwkNjFmZjAwMDAsJDJlZmM0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ0YTA4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMmU3MiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDRlYjY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNGFiNCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDRjZGU2MDA2LCQ2MWZmMDAwMCwkMmU1YzRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNDk2ZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkMmUwYzYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDRlMWMKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ0YTFhNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDRjNDQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDJlMDgsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ0OGQ0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDJkNmUKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ0ZDdlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDQ5N2MsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ0YmE2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyZDZhNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNDgzMDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwMmNjZQorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDRjZGU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNDhkYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDRiMDY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDJjY2E0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNDc5NiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkMGFmNDYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0ZDE4LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNGQzODYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0ZDM0LCQ2MDA2NjFmZiwkMDAwMDBkNTgsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjI3ZTAwMywkZjIxZmQwNDAKKwlkYy5sCSRmMjFmZDA4MCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ1NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0NmY2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkMWQ0MWZmNGUsJDRhMDE2NjA4LCQ2MWZmMDAwMCwkMGE1MDYwMzAKKwlkYy5sCSQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA0Yzc0LCQ2MDIyMGMwMQorCWRjLmwJJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNGM5NDYwMTQsJDBjMDEwMDAzCisJZGMubAkkNjYwODYxZmYsJDAwMDA0YzkwLCQ2MDA2NjFmZiwkMDAwMDBjYjQKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjI3ZTAwMworCWRjLmwJJGYyMWZkMDQwLCRmMjFmZDA4MCwkNGU1ZTRlNzUsJDRlNTZmZjQwCisJZGMubAkkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAKKwlkYy5sCSRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZQorCWRjLmwJJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4CisJZGMubAkkNjFmZjAwMDAsJDQ2NGMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDAwOWFhLCQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkNGJjZTYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDRiZWUKKwlkYy5sCSQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwLCQ0YmVhNjAwNgorCWRjLmwJJDYxZmYwMDAwLCQwYzBlNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwCisJZGMubAkkZmY2MGYyMjcsJGUwMDNmMjFmLCRkMDQwZjIxZiwkZDA4MDRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTQ0MDAsJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgKKwlkYy5sCSQ2MWZmMDAwMCwkNDVhYzFkNDAsJGZmNGZmMjJlLCQ0NDAwMDAwYworCWRjLmwJJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0NTkyCisJZGMubAkkMWQ0MGZmNGUsJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAKKwlkYy5sCSQxMDJlZmY2MywkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0YzQ2NjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmCisJZGMubAkkMDAwMDRjNjQsJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0Yzg0NjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNGQxNgorCWRjLmwJJDYwMDY2MWZmLCQwMDAwNGMxNCwkNGNlZTAzMDMsJGZmOWNmMjJlCisJZGMubAkkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYKKwlkYy5sCSRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZQorCWRjLmwJJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwCisJZGMubAkkMDAwOGYyMmUsJDY4MDBmZjc4LCQ0MWVlZmY3OCwkNjFmZjAwMDAKKwlkYy5sCSQ0NGYwMWQ0MCwkZmY0ZmYyMmUsJDU0MDAwMDEwLCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDQ0ZDYsJDFkNDBmZjRlCisJZGMubAkkMjIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0MWVlZmY2YywkNDNlZWZmNzgsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDRiOGE2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA0YmE4CisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNGJjODYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA0YzVhLCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA0YjU4LCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkNDFlZWZmNzgsJDIxNmUwMDA4CisJZGMubAkkMDAwMDIxNmUsJDAwMGMwMDA0LCQyMTZlMDAxMCwkMDAwODYxZmYKKwlkYy5sCSQwMDAwNDQyZSwkMWQ0MGZmNGYsJDQxZWVmZjZjLCQyMTZlMDAxNAorCWRjLmwJJDAwMDAyMTZlLCQwMDE4MDAwNCwkMjE2ZTAwMWMsJDAwMDg2MWZmCisJZGMubAkkMDAwMDQ0MGUsJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OAorCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNGFjMjYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0YWUwLCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNGIwMDYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0YjkyLCQ2MDA2NjFmZiwkMDAwMDRhOTAsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTQ0MDAsJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgKKwlkYy5sCSQ2MWZmMDAwMCwkNDM2YzFkNDAsJGZmNGZmMjJlLCQ0NDAwMDAwYworCWRjLmwJJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0MzUyCisJZGMubAkkMWQ0MGZmNGUsJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAKKwlkYy5sCSQxMDJlZmY2MywkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0OTFjNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmCisJZGMubAkkMDAwMDQ5M2EsJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0OTVhNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNGFkNgorCWRjLmwJJDYwMDY2MWZmLCQwMDAwNDhlYSwkNGNlZTAzMDMsJGZmOWNmMjJlCisJZGMubAkkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYKKwlkYy5sCSRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZQorCWRjLmwJJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwCisJZGMubAkkMDAwOGYyMmUsJDY4MDBmZjc4LCQ0MWVlZmY3OCwkNjFmZjAwMDAKKwlkYy5sCSQ0MmIwMWQ0MCwkZmY0ZmYyMmUsJDU0MDAwMDEwLCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDQyOTYsJDFkNDBmZjRlCisJZGMubAkkMjIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0MWVlZmY2YywkNDNlZWZmNzgsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDQ4NjA2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA0ODdlCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNDg5ZTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA0YTFhLCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA0ODJlLCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkNDFlZWZmNzgsJDIxNmUwMDA4CisJZGMubAkkMDAwMDIxNmUsJDAwMGMwMDA0LCQyMTZlMDAxMCwkMDAwODYxZmYKKwlkYy5sCSQwMDAwNDFlZSwkMWQ0MGZmNGYsJDQxZWVmZjZjLCQyMTZlMDAxNAorCWRjLmwJJDAwMDAyMTZlLCQwMDE4MDAwNCwkMjE2ZTAwMWMsJDAwMDg2MWZmCisJZGMubAkkMDAwMDQxY2UsJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OAorCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNDc5ODYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0N2I2LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNDdkNjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0OTUyLCQ2MDA2NjFmZiwkMDAwMDQ3NjYsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTQ0MDAsJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgKKwlkYy5sCSQ2MWZmMDAwMCwkNDEyYzFkNDAsJGZmNGZmMjJlLCQ0NDAwMDAwYworCWRjLmwJJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0MTEyCisJZGMubAkkMWQ0MGZmNGUsJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAKKwlkYy5sCSQxMDJlZmY2MywkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0ODRhNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmCisJZGMubAkkMDAwMDQ4NmEsJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0ODhhNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNDg5NgorCWRjLmwJJDYwMDY2MWZmLCQwMDAwNDgxOCwkNGNlZTAzMDMsJGZmOWNmMjJlCisJZGMubAkkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYKKwlkYy5sCSRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZQorCWRjLmwJJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwCisJZGMubAkkMDAwOGYyMmUsJDY4MDBmZjc4LCQ0MWVlZmY3OCwkNjFmZjAwMDAKKwlkYy5sCSQ0MDcwMWQ0MCwkZmY0ZmYyMmUsJDU0MDAwMDEwLCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDQwNTYsJDFkNDBmZjRlCisJZGMubAkkMjIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0MWVlZmY2YywkNDNlZWZmNzgsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDQ3OGU2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA0N2FlCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNDdjZTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA0N2RhLCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA0NzVjLCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkNDFlZWZmNzgsJDIxNmUwMDA4CisJZGMubAkkMDAwMDIxNmUsJDAwMGMwMDA0LCQyMTZlMDAxMCwkMDAwODYxZmYKKwlkYy5sCSQwMDAwM2ZhZSwkMWQ0MGZmNGYsJDQxZWVmZjZjLCQyMTZlMDAxNAorCWRjLmwJJDAwMDAyMTZlLCQwMDE4MDAwNCwkMjE2ZTAwMWMsJDAwMDg2MWZmCisJZGMubAkkMDAwMDNmOGUsJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OAorCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNDZjNjYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0NmU2LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNDcwNjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0NzEyLCQ2MDA2NjFmZiwkMDAwMDQ2OTQsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1YmQ2YSwkYWE3N2NjYzksJDk0ZjUzZGU2LCQxMjA5N2FhZQorCWRjLmwJJDhkYTFiZTVhLCRlNjQ1MmExMSwkOGFlNDNlYzcsJDFkZTNhNTM0CisJZGMubAkkMTUzMWJmMmEsJDAxYTAxYTAxLCQ4YjU5MDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwM2ZmOCwkMDAwMDg4ODgsJDg4ODg4ODg4LCQ1OWFmMDAwMAorCWRjLmwJJDAwMDBiZmZjLCQwMDAwYWFhYSwkYWFhYWFhYWEsJGFhOTkwMDAwCisJZGMubAkkMDAwMDNkMmEsJGM0ZDBkNjAxLCQxZWUzYmRhOSwkMzk2ZjlmNDUKKwlkYy5sCSRhYzE5M2UyMSwkZWVkOTA2MTIsJGM5NzJiZTkyLCQ3ZTRmYjc5ZAorCWRjLmwJJDlmY2YzZWZhLCQwMWEwMWEwMSwkZDQyMzAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMGJmZjUsJDAwMDBiNjBiLCQ2MGI2MGI2MSwkZDQzODAwMDAKKwlkYy5sCSQwMDAwM2ZmYSwkMDAwMGFhYWEsJGFhYWFhYWFhLCRhYjVlYmYwMAorCWRjLmwJJDAwMDAyZDdjLCQwMDAwMDAwMCwkZmY1YzYwMDgsJDJkN2MwMDAwCisJZGMubAkkMDAwMWZmNWMsJGYyMTA0ODAwLCRmMjJlNjgwMCwkZmY4NDIyMTAKKwlkYy5sCSQzMjI4MDAwNCwkMDI4MTdmZmYsJGZmZmYwYzgxLCQzZmQ3ODAwMAorCWRjLmwJJDZjMDQ2MDAwLCQwMTc4MGM4MSwkNDAwNGJjN2UsJDZkMDQ2MDAwCisJZGMubAkkMDQ2OGYyMDAsJDAwODBmMjNhLCQ1NGEzZDE4NiwkNDNmYjAxNzAKKwlkYy5sCSQwMDAwMDg2NiwkZjIyZTYwODAsJGZmNTgyMjJlLCRmZjU4ZTk4MQorCWRjLmwJJGQzYzFmMjE5LCQ0ODI4ZjIxMSwkNDQyODIyMmUsJGZmNThkMmFlCisJZGMubAkkZmY1Y2UyOTksJDBjODEwMDAwLCQwMDAwNmQwMCwkMDA4OGYyMjcKKwlkYy5sCSRlMDBjZjIyZSwkNjgwMGZmODQsJGYyMDAwMDIzLCRmMjNhNTU4MAorCWRjLmwJJGZlZDJmMjNhLCQ1NTAwZmVkNCwkZjIwMDAwODAsJGYyMDAwNGEzCisJZGMubAkkZTI5OTAyODEsJDgwMDAwMDAwLCRiM2FlZmY4NCwkZjIwMDA1YTMKKwlkYy5sCSRmMjAwMDUyMywkZjIzYTU1YTIsJGZlYmFmMjNhLCQ1NTIyZmViYworCWRjLmwJJGYyMDAwNWEzLCRmMjAwMDUyMywkZjIzYTU1YTIsJGZlYjZmMjNhCisJZGMubAkkNDkyMmZlYzAsJGYyMDAwY2EzLCRmMjAwMDEyMywkZjIzYTQ4YTIKKwlkYy5sCSRmZWMyZjIyZSwkNDgyM2ZmODQsJGYyMDAwOGEyLCRmMjAwMDQyMworCWRjLmwJJGYyMWZkMDMwLCRmMjAwOTAwMCwkZjIyZTQ4MjIsJGZmODQ2MGZmCisJZGMubAkkMDAwMDQwMDYsJGYyMjdlMDBjLCRmMjAwMDAyMywkZjIzYTU1MDAKKwlkYy5sCSRmZWEyZjIzYSwkNTU4MGZlYTQsJGYyMDAwMDgwLCRmMjAwMDRhMworCWRjLmwJJGYyMmU2ODAwLCRmZjg0ZTI5OSwkMDI4MTgwMDAsJDAwMDBmMjAwCisJZGMubAkkMDUyM2IzYWUsJGZmODQwMjgxLCQ4MDAwMDAwMCwkZjIwMDA1YTMKKwlkYy5sCSQwMDgxM2Y4MCwkMDAwMDJkNDEsJGZmNTRmMjNhLCQ1NTIyZmU3NAorCWRjLmwJJGYyM2E1NWEyLCRmZTc2ZjIwMCwkMDUyM2YyMDAsJDA1YTNmMjNhCisJZGMubAkkNTUyMmZlNzAsJGYyM2E0OWEyLCRmZTdhZjIwMCwkMDUyM2YyMDAKKwlkYy5sCSQwY2EzZjIzYSwkNDkyMmZlN2MsJGYyM2E0NGEyLCRmZTgyZjIwMAorCWRjLmwJJDA4MjNmMjAwLCQwNDIyZjIyZSwkNDgyM2ZmODQsJGYyMWZkMDMwCisJZGMubAkkZjIwMDkwMDAsJGYyMmU0NDIyLCRmZjU0NjBmZiwkMDAwMDNmNmEKKwlkYy5sCSQwYzgxM2ZmZiwkODAwMDZlZmYsJDAwMDAwMzAwLCQyMjJlZmY1YworCWRjLmwJJDBjODEwMDAwLCQwMDAwNmUxNCwkZjIwMDkwMDAsJDEyM2MwMDAzCisJZGMubAkkZjIyZTQ4MDAsJGZmODQ2MGZmLCQwMDAwM2YzNiwkZjIzYzQ0MDAKKwlkYy5sCSQzZjgwMDAwMCwkZjIwMDkwMDAsJGYyM2M0NDIyLCQ4MDgwMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQzZjJjNjBmZiwkMDAwMDNmNjQsJGYyM2M0NDAwCisJZGMubAkkM2Y4MDAwMDAsJDYwZmYwMDAwLCQzZjE4MmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjVjZjIxMCwkNDgwMGYyMmUsJDY4MDBmZjg0LCQyMjEwMzIyOAorCWRjLmwJJDAwMDQwMjgxLCQ3ZmZmZmZmZiwkMGM4MTNmZDcsJDgwMDA2YzA0CisJZGMubAkkNjAwMDAyNDAsJDBjODE0MDA0LCRiYzdlNmQwNCwkNjAwMDAyN2EKKwlkYy5sCSRmMjAwMDA4MCwkZjIzYTU0YTMsJGNmOTg0M2ZiLCQwMTcwMDAwMAorCWRjLmwJJDA2NzhmMjJlLCQ2MDgwZmY1OCwkMjIyZWZmNTgsJGU5ODFkM2MxCisJZGMubAkkZjIxOTQ4MjgsJGYyMTE0NDI4LCQyMjJlZmY1OCwkZTI5OTBjODEKKwlkYy5sCSQwMDAwMDAwMCwkNmMwMDAxMDYsJGYyMjdlMDA0LCRmMjJlNjgwMAorCWRjLmwJJGZmODRmMjAwLCQwMDIzZjIzYSwkNTQ4MGZjZTgsJGYyM2E1NTAwCisJZGMubAkkZmQzMmYyMDAsJDAwYTNmMjAwLCQwMTIzMmYwMiwkMjQwMWUyOWEKKwlkYy5sCSQwMjgyODAwMCwkMDAwMGIzODIsJDAyODI4MDAwLCQwMDAwZjIzYQorCWRjLmwJJDU0YTJmY2M4LCRmMjNhNTUyMiwkZmQxMmYyMDAsJDAwYTNiNWFlCisJZGMubAkkZmY4NDI0MWYsJGYyMDAwMTIzLCRlMjk5MDI4MSwkODAwMDAwMDAKKwlkYy5sCSQyZDdjM2Y4MCwkMDAwMGZmNTQsJGIzYWVmZjU0LCRmMjNhNTRhMgorCWRjLmwJJGZjYTJmMjNhLCQ1NTIyZmNlYywkZjIwMDAwYTMsJGYyMDAwMTIzCisJZGMubAkkZjIyZTY4MDAsJGZmOTBmMjNhLCQ1NGEyZmM5MCwkYjNhZWZmOTAKKwlkYy5sCSRmMjNhNTUyMiwkZmNkNmYyMDAsJDAwYTNmMjAwLCQwMTIzZjIzYQorCWRjLmwJJDU0YTJmYzgwLCRmMjNhNTUyMiwkZmNjYWYyMDAsJDAwYTNmMjAwCisJZGMubAkkMDEyM2YyM2EsJDQ4YTJmYzdjLCRmMjNhNDkyMiwkZmNjNmYyMDAKKwlkYy5sCSQwMGEzZjIwMCwkMDEyM2YyM2EsJDQ4YTJmYzc4LCRmMjNhNDkyMgorCWRjLmwJJGZjYzJmMjAwLCQwMGEzZjIwMCwkMDgyM2YyMmUsJDQ4YTNmZjg0CisJZGMubAkkZjIzYTQ0MjIsJGZjYmFmMjJlLCQ0ODIzZmY5MCwkZjIxZmQwMjAKKwlkYy5sCSRmMjAwOTAwMCwkZjIyZTQ4YTIsJGZmODQ2MWZmLCQwMDAwM2UyMgorCWRjLmwJJGYyMmU0NDIyLCRmZjU0NjBmZiwkMDAwMDNkOWUsJGYyMjdlMDA0CisJZGMubAkkZjIyZTY4MDAsJGZmODRmMjAwLCQwMDIzZjIzYSwkNTQ4MGZjMzQKKwlkYy5sCSRmMjNhNTUwMCwkZmJkZWYyMDAsJDAwYTNmMjJlLCQ2ODAwZmY5MAorCWRjLmwJJGYyMDAwMTIzLCRlMjk5MDI4MSwkODAwMDAwMDAsJGYyM2E1NGEyCisJZGMubAkkZmMxYWYyM2EsJDU1MjJmYmM0LCRiM2FlZmY4NCwkYjNhZWZmOTAKKwlkYy5sCSRmMjAwMDBhMywkMDA4MTNmODAsJDAwMDAyZDQxLCRmZjU0ZjIwMAorCWRjLmwJJDAxMjNmMjNhLCQ1NGEyZmJmYywkZjIzYTU1MjIsJGZiYTZmMjAwCisJZGMubAkkMDBhM2YyMDAsJDAxMjNmMjNhLCQ1NGEyZmJmMCwkZjIzYTU1MjIKKwlkYy5sCSRmYjlhZjIwMCwkMDBhM2YyMDAsJDAxMjNmMjNhLCQ1NGEyZmJlNAorCWRjLmwJJGYyM2E1NTIyLCRmYjhlZjIwMCwkMDBhM2YyMDAsJDAxMjNmMjNhCisJZGMubAkkNDhhMmZiZTAsJGYyM2E0OTIyLCRmYjhhZjIwMCwkMDBhM2YyMDAKKwlkYy5sCSQwMTIzZjIzYSwkNDhhMmZiZGMsJGYyM2E0OTIyLCRmYjg2ZjIwMAorCWRjLmwJJDAwYTNmMjAwLCQwODIzZjIzYSwkNDRhMmZiZDQsJGYyMmU0ODIzCisJZGMubAkkZmY4NGYyMmUsJDQ4YTNmZjkwLCRmMjFmZDAyMCwkZjIwMDkwMDAKKwlkYy5sCSRmMjJlNDRhMiwkZmY1NDYxZmYsJDAwMDAzZDM2LCRmMjJlNDgyMgorCWRjLmwJJGZmODQ2MGZmLCQwMDAwM2NiMiwkMGM4MTNmZmYsJDgwMDA2ZTAwCisJZGMubAkkMDA0OGYyM2MsJDQ0ODAzZjgwLCQwMDAwZjIwMCwkOTAwMGYyM2MKKwlkYy5sCSQ0NGE4MDA4MCwkMDAwMDYxZmYsJDAwMDAzZDA2LCRmMjAwYjAwMAorCWRjLmwJJDEyM2MwMDAzLCRmMjJlNDgwMCwkZmY4NDYwZmYsJDAwMDAzYzcyCisJZGMubAkkMmYwMGYyM2MsJDQ0ODAzZjgwLCQwMDAwNjFmZiwkMDAwMDNjZTIKKwlkYy5sCSQyMDFmNjBmZiwkMDAwMDNjYTgsJGYyMjdlMDNjLCQyZjAyZjIzYworCWRjLmwJJDQ0ODAwMDAwLCQwMDAwMGM4MSwkN2ZmZWZmZmYsJDY2NTIzZDdjCisJZGMubAkkN2ZmZWZmODQsJDJkN2NjOTBmLCRkYWEyZmY4OCwkNDJhZWZmOGMKKwlkYy5sCSQzZDdjN2ZkYywkZmY5MDJkN2MsJDg1YTMwOGQzLCRmZjk0NDJhZQorCWRjLmwJJGZmOThmMjAwLCQwMDNhZjI5NCwkMDAwZTAwMmUsJDAwODBmZjg0CisJZGMubAkkMDAyZTAwODAsJGZmOTBmMjJlLCQ0ODIyZmY4NCwkZjIwMDAwODAKKwlkYy5sCSRmMjJlNDgyMiwkZmY5MGYyMDAsJDAwYThmMjJlLCQ0OGEyZmY5MAorCWRjLmwJJGYyMmU2ODAwLCRmZjg0MzIyZSwkZmY4NDIyNDEsJDAyODEwMDAwCisJZGMubAkkN2ZmZjA0ODEsJDAwMDAzZmZmLCQwYzgxMDAwMCwkMDAxYzZmMGUKKwlkYy5sCSQwNDgxMDAwMCwkMDAxYjFkN2MsJDAwMDBmZjU4LCQ2MDA4NDI4MQorCWRjLmwJJDFkN2MwMDAxLCRmZjU4MjQzYywkMDAwMDNmZmUsJDk0ODEyZDdjCisJZGMubAkkYTJmOTgzNmUsJGZmODgyZDdjLCQ0ZTQ0MTUyYSwkZmY4YzNkNDIKKwlkYy5sCSRmZjg0ZjIwMCwkMDEwMGYyMmUsJDQ5MjNmZjg0LCQyNDA5NDg0MgorCWRjLmwJJDAyODI4MDAwLCQwMDAwMDA4MiwkNWYwMDAwMDAsJDJkNDJmZjU0CisJZGMubAkkZjIyZTQ1MjIsJGZmNTRmMjJlLCQ0NTI4ZmY1NCwkMjQwMTA2ODIKKwlkYy5sCSQwMDAwM2ZmZiwkM2Q0MmZmODQsJDJkN2NjOTBmLCRkYWEyZmY4OAorCWRjLmwJJDQyYWVmZjhjLCQwNjgxMDAwMCwkM2ZkZDNkNDEsJGZmOTAyZDdjCisJZGMubAkkODVhMzA4ZDMsJGZmOTQ0MmFlLCRmZjk4MTIyZSwkZmY1OGYyMDAKKwlkYy5sCSQwYTAwZjIyZSwkNGEyM2ZmODQsJGYyMDAwYTgwLCRmMjJlNGFhMworCWRjLmwJJGZmOTBmMjAwLCQxMTgwZjIwMCwkMTVhMmYyMDAsJDBlMjhmMjAwCisJZGMubAkkMGMyOGYyMDAsJDE2MjJmMjAwLCQwMTgwZjIwMCwkMTBhOGYyMDAKKwlkYy5sCSQwNDIyMGMwMSwkMDAwMDZlMDAsJDAwMGVmMjAwLCQwMWE4ZjIwMAorCWRjLmwJJDBjYTI2MDAwLCRmZjBjZjIyZSwkNjEwMGZmNTgsJDI0MWZmMjFmCisJZGMubAkkZDAzYzIyMmUsJGZmNWMwYzgxLCQwMDAwMDAwNCwkNmQwMGZhNGMKKwlkYy5sCSQ2MDAwZmMzNiwkM2VhMGI3NTksJGY1MGY4Njg4LCRiZWYyYmFhNQorCWRjLmwJJGE4OTI0ZjA0LCRiZjM0NmY1OSwkYjM5YmE2NWYsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDNmZjYwMDAwLCRlMDczZDNmYywkMTk5YzRhMDAKKwlkYy5sCSQwMDAwMDAwMCwkM2ZmOTAwMDAsJGQyM2NkNjg0LCQxNWQ5NWZhMQorCWRjLmwJJDAwMDAwMDAwLCRiZmZjMDAwMCwkODg5NWE2YzUsJGZiNDIzYmNhCisJZGMubAkkMDAwMDAwMDAsJGJmZmQwMDAwLCRlZWY1N2UwZCwkYTg0YmM4Y2UKKwlkYy5sCSQwMDAwMDAwMCwkM2ZmYzAwMDAsJGEyZjk4MzZlLCQ0ZTQ0MTUyYQorCWRjLmwJJDAwMDAwMDAwLCQ0MDAxMDAwMCwkYzkwZmRhYTIsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDNmZGYwMDAwLCQ4NWEzMDhkNCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkYzAwNDAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDIxODAwMDAwLCRjMDA0MDAwMCwkYzJjNzViY2QsJDEwNWQ3YzIzCisJZGMubAkkYTBkMDAwMDAsJGMwMDQwMDAwLCRiYzdlZGNmNywkZmY1MjM2MTEKKwlkYy5sCSRhMWU4MDAwMCwkYzAwNDAwMDAsJGI2MzY1ZTIyLCRlZTQ2ZjAwMAorCWRjLmwJJDIxNDgwMDAwLCRjMDA0MDAwMCwkYWZlZGRmNGQsJGRkM2JhOWVlCisJZGMubAkkYTEyMDAwMDAsJGMwMDQwMDAwLCRhOWE1NjA3OCwkY2MzMDYzZGQKKwlkYy5sCSQyMWZjMDAwMCwkYzAwNDAwMDAsJGEzNWNlMWEzLCRiYjI1MWRjYgorCWRjLmwJJDIxMTAwMDAwLCRjMDA0MDAwMCwkOWQxNDYyY2UsJGFhMTlkN2I5CisJZGMubAkkYTE1ODAwMDAsJGMwMDQwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSQyMWUwMDAwMCwkYzAwNDAwMDAsJDkwODM2NTI0LCQ4ODAzNGI5NgorCWRjLmwJJDIwYjAwMDAwLCRjMDA0MDAwMCwkOGEzYWU2NGYsJDc2ZjgwNTg0CisJZGMubAkkYTE4ODAwMDAsJGMwMDQwMDAwLCQ4M2YyNjc3YSwkNjVlY2JmNzMKKwlkYy5sCSQyMWM0MDAwMCwkYzAwMzAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJDIwMDAwMDAwLCRjMDAzMDAwMCwkZWVjMmQzYTAsJDg3YWM2NjlmCisJZGMubAkkMjEzODAwMDAsJGMwMDMwMDAwLCRlMjMxZDVmNiwkNjU5NWRhN2IKKwlkYy5sCSRhMTMwMDAwMCwkYzAwMzAwMDAsJGQ1YTBkODRjLCQ0MzdmNGU1OAorCWRjLmwJJDlmYzAwMDAwLCRjMDAzMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkMjEwMDAwMDAsJGMwMDMwMDAwLCRiYzdlZGNmNywkZmY1MjM2MTEKKwlkYy5sCSRhMTY4MDAwMCwkYzAwMzAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJGEwYTAwMDAwLCRjMDAzMDAwMCwkYTM1Y2UxYTMsJGJiMjUxZGNiCisJZGMubAkkMjA5MDAwMDAsJGMwMDMwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSQyMTYwMDAwMCwkYzAwMzAwMDAsJDhhM2FlNjRmLCQ3NmY4MDU4NAorCWRjLmwJJGExMDgwMDAwLCRjMDAyMDAwMCwkZmI1M2QxNGEsJGE5YzJmMmMyCisJZGMubAkkMWY4MDAwMDAsJGMwMDIwMDAwLCRlMjMxZDVmNiwkNjU5NWRhN2IKKwlkYy5sCSRhMGIwMDAwMCwkYzAwMjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDIwODAwMDAwLCRjMDAyMDAwMCwkYWZlZGRmNGQsJGRkM2JhOWVlCisJZGMubAkkYTAyMDAwMDAsJGMwMDIwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSQyMGUwMDAwMCwkYzAwMTAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJDFmMDAwMDAwLCRjMDAxMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkMjAwMDAwMDAsJGMwMDEwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSQyMDYwMDAwMCwkYzAwMDAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDFmODAwMDAwLCRiZmZmMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkMWYwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkM2ZmZjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDlmMDAwMDAwLCQ0MDAwMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkOWY4MDAwMDAsJDQwMDEwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSRhMDYwMDAwMCwkNDAwMTAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJGEwMDAwMDAwLCQ0MDAxMDAwMCwkZmI1M2QxNGEsJGE5YzJmMmMyCisJZGMubAkkOWYwMDAwMDAsJDQwMDIwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSRhMGUwMDAwMCwkNDAwMjAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJDIwMjAwMDAwLCQ0MDAyMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkYTA4MDAwMDAsJDQwMDIwMDAwLCRlMjMxZDVmNiwkNjU5NWRhN2IKKwlkYy5sCSQyMGIwMDAwMCwkNDAwMjAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJDlmODAwMDAwLCQ0MDAzMDAwMCwkOGEzYWU2NGYsJDc2ZjgwNTg0CisJZGMubAkkMjEwODAwMDAsJDQwMDMwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSRhMTYwMDAwMCwkNDAwMzAwMDAsJGEzNWNlMWEzLCRiYjI1MWRjYgorCWRjLmwJJGEwOTAwMDAwLCQ0MDAzMDAwMCwkYWZlZGRmNGQsJGRkM2JhOWVlCisJZGMubAkkMjBhMDAwMDAsJDQwMDMwMDAwLCRiYzdlZGNmNywkZmY1MjM2MTEKKwlkYy5sCSQyMTY4MDAwMCwkNDAwMzAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJGExMDAwMDAwLCQ0MDAzMDAwMCwkZDVhMGQ4NGMsJDQzN2Y0ZTU4CisJZGMubAkkMWZjMDAwMDAsJDQwMDMwMDAwLCRlMjMxZDVmNiwkNjU5NWRhN2IKKwlkYy5sCSQyMTMwMDAwMCwkNDAwMzAwMDAsJGVlYzJkM2EwLCQ4N2FjNjY5ZgorCWRjLmwJJGExMzgwMDAwLCQ0MDAzMDAwMCwkZmI1M2QxNGEsJGE5YzJmMmMyCisJZGMubAkkYTAwMDAwMDAsJDQwMDQwMDAwLCQ4M2YyNjc3YSwkNjVlY2JmNzMKKwlkYy5sCSRhMWM0MDAwMCwkNDAwNDAwMDAsJDhhM2FlNjRmLCQ3NmY4MDU4NAorCWRjLmwJJDIxODgwMDAwLCQ0MDA0MDAwMCwkOTA4MzY1MjQsJDg4MDM0Yjk2CisJZGMubAkkYTBiMDAwMDAsJDQwMDQwMDAwLCQ5NmNiZTNmOSwkOTkwZTkxYTgKKwlkYy5sCSRhMWUwMDAwMCwkNDAwNDAwMDAsJDlkMTQ2MmNlLCRhYTE5ZDdiOQorCWRjLmwJJDIxNTgwMDAwLCQ0MDA0MDAwMCwkYTM1Y2UxYTMsJGJiMjUxZGNiCisJZGMubAkkYTExMDAwMDAsJDQwMDQwMDAwLCRhOWE1NjA3OCwkY2MzMDYzZGQKKwlkYy5sCSRhMWZjMDAwMCwkNDAwNDAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJDIxMjAwMDAwLCQ0MDA0MDAwMCwkYjYzNjVlMjIsJGVlNDZmMDAwCisJZGMubAkkYTE0ODAwMDAsJDQwMDQwMDAwLCRiYzdlZGNmNywkZmY1MjM2MTEKKwlkYy5sCSQyMWU4MDAwMCwkNDAwNDAwMDAsJGMyYzc1YmNkLCQxMDVkN2MyMworCWRjLmwJJDIwZDAwMDAwLCQ0MDA0MDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1CisJZGMubAkkYTE4MDAwMDAsJGYyMTA0ODAwLCQyMjEwMzIyOCwkMDAwNDAyODEKKwlkYy5sCSQ3ZmZmZmZmZiwkMGM4MTNmZDcsJDgwMDA2YzA0LCQ2MDAwMDEzNAorCWRjLmwJJDBjODE0MDA0LCRiYzdlNmQwNCwkNjAwMDAxNDQsJGYyMDAwMDgwCisJZGMubAkkZjIzYTU0YTMsJGM2ZGM0M2ZhLCRmZGJjZjIwMSwkNjA4MGU5ODEKKwlkYy5sCSRkM2MxZjIxOSwkNDgyOGYyMTEsJDQ0MjhlYTk5LCQwMjgxODAwMAorCWRjLmwJJDAwMDBmMjI3LCRlMDBjMGM4MSwkMDAwMDAwMDAsJDZkMDAwMDcyCisJZGMubAkkZjIwMDAwODAsJGYyMDAwNGEzLCRmMjNhNTU4MCwkZmFmOGYyM2EKKwlkYy5sCSQ1NTAwZmFmYSwkZjIwMDA1YTMsJGYyMDAwNTIzLCRmMjNhNTVhMgorCWRjLmwJJGZhZjRmMjNhLCQ0OTIyZmFmZSwkZjIwMDA1YTMsJGYyMDAwNTIzCisJZGMubAkkZjIzYTQ5YTIsJGZiMDBmMjNhLCQ0OTIyZmIwYSwkZjIwMDA1YTMKKwlkYy5sCSRmMjAwMDUyMywkZjIzYTQ5YTIsJGZiMGNmMjAwLCQwMTIzZjIwMAorCWRjLmwJJDBjYTNmMjAwLCQwODIyZjIzYywkNDRhMjNmODAsJDAwMDBmMjFmCisJZGMubAkkZDAzMGYyMDAsJDkwMDBmMjAwLCQwNDIwNjBmZiwkMDAwMDM1N2EKKwlkYy5sCSRmMjAwMDA4MCwkZjIwMDAwMjMsJGYyM2E1NTgwLCRmYTg4ZjIzYQorCWRjLmwJJDU1MDBmYThhLCRmMjAwMDFhMywkZjIwMDAxMjMsJGYyM2E1NWEyCisJZGMubAkkZmE4NGYyM2EsJDQ5MjJmYThlLCRmMjAwMDFhMywkZjIwMDAxMjMKKwlkYy5sCSRmMjNhNDlhMiwkZmE5MGYyM2EsJDQ5MjJmYTlhLCRmMjAwMDFhMworCWRjLmwJJGYyMDAwMTIzLCRmMjNhNDlhMiwkZmE5Y2YyMDAsJDA1MjNmMjAwCisJZGMubAkkMGMyM2YyMDAsJDA4YTJmMjNjLCQ0NDIyM2Y4MCwkMDAwMGYyMWYKKwlkYy5sCSRkMDMwZjIyNywkNjg4MDBhOTcsJDgwMDAwMDAwLCRmMjAwOTAwMAorCWRjLmwJJGYyMWY0ODIwLCQ2MGZmMDAwMCwkMzUwMDBjODEsJDNmZmY4MDAwCisJZGMubAkkNmUxY2YyMjcsJDY4MDBmMjAwLCQ5MDAwMTIzYywkMDAwM2YyMWYKKwlkYy5sCSQ0ODAwNjBmZiwkMDAwMDM0ZGEsJDYwZmYwMDAwLCQzNTIyZjIyNworCWRjLmwJJGUwM2MyZjAyLCRmMjNjNDQ4MCwkMDAwMDAwMDAsJDBjODE3ZmZlCisJZGMubAkkZmZmZjY2NTIsJDNkN2M3ZmZlLCRmZjg0MmQ3YywkYzkwZmRhYTIKKwlkYy5sCSRmZjg4NDJhZSwkZmY4YzNkN2MsJDdmZGNmZjkwLCQyZDdjODVhMworCWRjLmwJJDA4ZDNmZjk0LCQ0MmFlZmY5OCwkZjIwMDAwM2EsJGYyOTQwMDBlCisJZGMubAkkMDAyZTAwODAsJGZmODQwMDJlLCQwMDgwZmY5MCwkZjIyZTQ4MjIKKwlkYy5sCSRmZjg0ZjIwMCwkMDA4MGYyMmUsJDQ4MjJmZjkwLCRmMjAwMDBhOAorCWRjLmwJJGYyMmU0OGEyLCRmZjkwZjIyZSwkNjgwMGZmODQsJDMyMmVmZjg0CisJZGMubAkkMjI0MTAyODEsJDAwMDA3ZmZmLCQwNDgxMDAwMCwkM2ZmZjBjODEKKwlkYy5sCSQwMDAwMDAxYywkNmYwZTA0ODEsJDAwMDAwMDFiLCQxZDdjMDAwMAorCWRjLmwJJGZmNTg2MDA4LCQ0MjgxMWQ3YywkMDAwMWZmNTgsJDI0M2MwMDAwCisJZGMubAkkM2ZmZTk0ODEsJDJkN2NhMmY5LCQ4MzZlZmY4OCwkMmQ3YzRlNDQKKwlkYy5sCSQxNTJhZmY4YywkM2Q0MmZmODQsJGYyMDAwMTAwLCRmMjJlNDkyMworCWRjLmwJJGZmODQyNDA5LCQ0ODQyMDI4MiwkODAwMDAwMDAsJDAwODI1ZjAwCisJZGMubAkkMDAwMDJkNDIsJGZmNTRmMjJlLCQ0NTIyZmY1NCwkZjIyZTQ1MjgKKwlkYy5sCSRmZjU0MjQwMSwkMDY4MjAwMDAsJDNmZmYzZDQyLCRmZjg0MmQ3YworCWRjLmwJJGM5MGZkYWEyLCRmZjg4NDJhZSwkZmY4YzA2ODEsJDAwMDAzZmRkCisJZGMubAkkM2Q0MWZmOTAsJDJkN2M4NWEzLCQwOGQzZmY5NCwkNDJhZWZmOTgKKwlkYy5sCSQxMjJlZmY1OCwkZjIwMDBhMDAsJGYyMmU0YTIzLCRmZjg0ZjIwMAorCWRjLmwJJDBhODBmMjJlLCQ0YWEzZmY5MCwkZjIwMDExODAsJGYyMDAxNWEyCisJZGMubAkkZjIwMDBlMjgsJGYyMDAwYzI4LCRmMjAwMTYyMiwkZjIwMDAxODAKKwlkYy5sCSRmMjAwMTBhOCwkZjIwMDA0MjIsJDBjMDEwMDAwLCQ2ZTAwMDAwZQorCWRjLmwJJGYyMDAwMWE4LCRmMjAwMGNhMiwkNjAwMGZmMGMsJGYyMmU2MTAwCisJZGMubAkkZmY1NDI0MWYsJGYyMWZkMDNjLCQyMjJlZmY1NCwkZTI5OTYwMDAKKwlkYy5sCSRmZDcyYmZmNiwkNjg3ZTMxNDksJDg3ZDg0MDAyLCRhYzY5MzRhMgorCWRjLmwJJDZkYjNiZmMyLCQ0NzZmNGUxZCwkYTI4ZTNmYjMsJDQ0NDQ3Zjg3CisJZGMubAkkNjk4OWJmYjcsJDQ0ZWU3ZmFmLCQ0NWRiM2ZiYywkNzFjNjQ2OTQKKwlkYy5sCSQwMjIwYmZjMiwkNDkyNDkyMTgsJDcyZjkzZmM5LCQ5OTk5OTk5OQorCWRjLmwJJDhmYTliZmQ1LCQ1NTU1NTU1NSwkNTU1NWJmYjcsJDBiZjM5ODUzCisJZGMubAkkOWU2YTNmYmMsJDcxODc5NjJkLCQxZDdkYmZjMiwkNDkyNDgyNzEKKwlkYy5sCSQwN2I4M2ZjOSwkOTk5OTk5OTYsJDI2M2ViZmQ1LCQ1NTU1NTU1NQorCWRjLmwJJDU1MzYzZmZmLCQwMDAwYzkwZiwkZGFhMjIxNjgsJGMyMzUwMDAwCisJZGMubAkkMDAwMGJmZmYsJDAwMDBjOTBmLCRkYWEyMjE2OCwkYzIzNTAwMDAKKwlkYy5sCSQwMDAwMDAwMSwkMDAwMDgwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDA4MDAxLCQwMDAwODAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDA4M2QxLCQ1MmM1MDYwYiwkN2E1MTAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMDhiYzgsJDU0NDU2NTQ5LCQ4YjhiMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwOTNiZSwkNDA2MDE3NjIsJDZiMGQwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDA5YmIzLCQwNzhkMzVhZSwkYzIwMjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGEzYTYsJDlhNTI1ZGRjLCRlN2RlMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwYWI5OCwkZTk0MzYyNzYsJDU2MTkwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBiMzg5LCRlNTAyZjljNSwkOTg2MjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGJiNzksJDdlNDM2YjA5LCRlNmZiMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwYzM2NywkYTVjNzM5ZTUsJGY0NDYwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBjYjU0LCQ0YzYxY2ZmNywkZDVjNjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGQzM2YsJDYyZjgyNDg4LCQ1MzNlMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwZGIyOCwkZGE4MTYyNDAsJDRjNzcwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBlMzEwLCRhNDA3OGFkMywkNGYxODAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGVhZjYsJGIwYTgxODhlLCRlMWViMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwZjJkYSwkZjE5NDlkYmUsJDc5ZDUwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBmYWJkLCQ1ODEzNjFkNCwkN2UzZTAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMDgzNDYsJGFjMjEwOTU5LCRlY2M0MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwOGIyMywkMmEwODMwNDIsJDgyZDgwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDA5MmZiLCQ3MGI4ZDI5YSwkZTJmOTAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMDlhY2YsJDQ3NmY1Y2NkLCQxY2I0MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwYTI5ZSwkNzYzMDQ5NTQsJGYyM2YwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBhYTY4LCRjNWQwOGFiOCwkNTIzMDAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGIyMmQsJGZmZmQ5ZDUzLCQ5ZjgzMDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwYjllZCwkZWY0NTNlOTAsJDBlYTUwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBjMWE4LCQ1ZjFjYzc1ZSwkM2VhNTAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGM5NWQsJDFiZTgyODEzLCQ4ZGU2MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwZDEwYiwkZjMwMDg0MGQsJDJkZTQwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBkOGI0LCRiMmJhNmJjMCwkNWU3YTAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGUwNTcsJDJhNmJiNDIzLCQzNWY2MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwZTdmMywkMmE3MGVhOWMsJGFhOGYwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBlZjg4LCQ4NDMyNjRlYywkZWZhYTAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGY3MTcsJDBhMjhlY2MwLCQ2NjY2MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwODEyZiwkZDI4ODMzMmQsJGFkMzIwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDA4OGE4LCRkMWIxMjE4ZSwkNGQ2NDAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMDkwMTIsJGFiM2YyM2U0LCRhZWU4MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwOTc2YywkYzNkNDExZTcsJGYxYjkwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDA5ZWI2LCQ4OTQ5Mzg4OSwkYTIyNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGE1ZWYsJDcyYzM0NDg3LCQzNjFiMDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwYWQxNywkMDBiYWYwN2EsJDcyMjcwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBiNDJjLCRiY2ZhZmQzNywkZWZiNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGJiMzAsJDNhOTQwYmE4LCQwZjg5MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwYzIyMSwkMTVjNmZjYWUsJGJiYWYwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBjOGZlLCRmM2U2ODYzMywkMTIyMTAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGNmYzksJDgzMzBiNDAwLCQwYzcwMDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwZDY4MCwkN2FhMTEwMmMsJDViZjkwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBkZDIzLCQ5OWJjMzEyNSwkMmFhMzAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGUzYjIsJGE4NTU2YjhmLCRjNTE3MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwZWEyZCwkNzY0ZjY0MzEsJDU5ODkwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBmM2JmLCQ1YmY4YmFkMSwkYTIxZDAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMDgwMWMsJGUzOWUwZDIwLCQ1YzlhMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwODYzMCwkYTJkYWRhMWUsJGQwNjYwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDA4YzFhLCRkNDQ1ZjNlMCwkOWI4YzAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMDkxZGIsJDhmMTY2NGYzLCQ1MGUyMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwOTc3MywkMTQyMDM2NWUsJDUzOGMwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDA5Y2UxLCRjOGU2YTBiOCwkY2RiYTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGEyMjgsJDMyZGJjYWRhLCRhZTA5MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYTc0NiwkZjJkZGI3NjAsJDIyOTQwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBhYzNlLCRjMGZiOTk3ZCwkZDZhMjAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGIxMTAsJDY4OGFlYmRjLCQ2ZjZhMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYjViYywkYzQ5MDU5ZWMsJGM0YjAwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBiYTQ0LCRiYzdkZDQ3MCwkNzgyZjAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGJlYTksJDQxNDRmZDA0LCQ5YWFjMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYzJlYiwkNGFiYjY2MTYsJDI4YjYwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBjNzBiLCRkNTRjZTYwMiwkZWUxNDAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGNkMDAsJDA1NDlhZGVjLCQ3MTU5MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZDQ4NCwkNTdkMmQ4ZWEsJDRlYTMwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBkYjk0LCQ4ZGE3MTJkZSwkY2UzYjAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGUyMzgsJDU1Zjk2OWU4LCQwOTZhMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZTg3NywkMTEyOWM0MzUsJDMyNTkwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBlZTU3LCRjMTZlMGQzNywkOWMwZDAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGYzZTEsJDAyMTFhODdjLCQzNzc5MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZjkxOSwkMDM5ZDc1OGIsJDhkNDEwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBmZTA1LCQ4YjhmNjQ5MywkNWZiMzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDgxNTUsJGZiNDk3YjY4LCQ1ZDA0MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwODM4OCwkOWUzNTQ5ZDEsJDA4ZTEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA4NTljLCRmYTc2NTExZCwkNzI0YjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDg3OTUsJDJlY2ZmZjgxLCQzMWU3MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwODk3MywkMmZkMTk1NTcsJDY0MWIwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA4YjM4LCRjYWQxMDE5MywkMmEzNTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDhjZTcsJGE4ZDgzMDFlLCRlNmI1MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOGY0NiwkYTM5ZTJlYWUsJDUyODEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA5MjJkLCRhN2Q3OTE4OCwkODQ4NzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDk0ZDEsJDlmY2JkZWRmLCQ1MjQxMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOTczYSwkYjk0NDE5ZDIsJGEwOGIwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA5OTZmLCRmMDBlMDhlMSwkMGI5NjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDliNzcsJDNmOTUxMjMyLCQxZGE3MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOWQ1NSwkY2MzMjBmOTMsJDU2MjQwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA5ZjEwLCQwNTc1MDA2YywkYzU3MTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGEwYTksJGMyOTBkOTdjLCRjMDZjMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYTIyNiwkNTllYmViYzAsJDYzMGEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhMzg4LCRiNGFmZjZlZiwkMGVjOTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGE0ZDMsJDVmMTA2MWQyLCQ5MmM0MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYTYwOCwkOTVkY2ZiZTMsJDE4N2UwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhNzJhLCQ1MWRjNzM2NywkYmVhYzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGE4M2EsJDUxNTMwOTU2LCQxNjhmMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYTkzYSwkMjAwNzc1MzksJDU0NmUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhYTllLCQ3MjQ1MDIzYiwkMjYwNTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGFjNGMsJDg0YmE2ZmU0LCRkNThmMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYWRjZSwkNGE0YTYwNmIsJDk3MTIwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhZjJhLCQyZGNkOGQyNiwkM2M5YzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGIwNjUsJDZmODFmMjIyLCQ2NWM3MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjE4NCwkNjUxNTBmNzEsJDQ5NmEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiMjhhLCRhYTE1NmY5YSwkZGEzNTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGIzN2IsJDQ0ZmYzNzY2LCRiODk1MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjQ1OCwkYzNkY2U5NjMsJDA0MzMwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiNTI1LCQ1MjlkNTYyMiwkNDZiZDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI1ZTIsJGNjYTk1ZjlkLCQ4OGNjMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjY5MiwkY2FkYTdhY2EsJDFhZGEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiNzM2LCRhZWE3YTY5MiwkNTgzODAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI3Y2YsJGFiMjg3ZTlmLCQ3YjM2MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjg1ZSwkY2M2NmNiMjEsJDk4MzUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiOGU0LCRmZDVhMjBhNSwkOTNkYTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI5OWYsJDQxZjY0YWZmLCQ5YmI1MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmE3ZiwkMWUxNzg0MmIsJGJlN2IwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiYjQ3LCQxMjg1NzYzNywkZTE3ZDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJiZmEsJGJlOGE0Nzg4LCRkZjZmMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmM5ZCwkMGZhZDJiNjgsJDlkNzkwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiZDMwLCQ2YTM5NDcxZSwkY2Q4NjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJkYjYsJGM3MzE4NTZhLCRmMThhMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmUzMSwkY2FjNTAyZTgsJDBkNzAwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiZWEyLCRkNTVjZTMzMSwkOTRlMjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJmMGIsJDEwYjdjMDMxLCQyOGYwMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmY2YiwkN2ExOGRhY2IsJDc3OGQwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiZmM0LCRlYTQ2NjNmYSwkMThmNjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGMwMTgsJDFiZGU4Yjg5LCRhNDU0MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYzA2NSwkYjA2NmNmYmYsJDY0MzkwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBjMGFlLCQzNDVmNTYzNCwkMGFlNjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGMwZjIsJDIyOTE5Y2I5LCRlNmE3MDAwMAorCWRjLmwJJDAwMDBmMjEwLCQ0ODAwMjIxMCwkMzIyODAwMDQsJGYyMmU2ODAwCisJZGMubAkkZmY4NDAyODEsJDdmZmZmZmZmLCQwYzgxM2ZmYiwkODAwMDZjMDQKKwlkYy5sCSQ2MDAwMDBkMCwkMGM4MTQwMDIsJGZmZmY2ZjA0LCQ2MDAwMDE0YworCWRjLmwJJDAyYWVmODAwLCQwMDAwZmY4OCwkMDBhZTA0MDAsJDAwMDBmZjg4CisJZGMubAkkMmQ3YzAwMDAsJDAwMDBmZjhjLCRmMjAwMDA4MCwkZjIyZTQ4YTMKKwlkYy5sCSRmZjg0ZjIyZSwkNDgyOGZmODQsJGYyM2M0NGEyLCQzZjgwMDAwMAorCWRjLmwJJGYyMDAwNDIwLCQyZjAyMjQwMSwkMDI4MTAwMDAsJDc4MDAwMjgyCisJZGMubAkkN2ZmZjAwMDAsJDA0ODIzZmZiLCQwMDAwZTI4MiwkZDI4MmVlODEKKwlkYy5sCSQ0M2ZhZjc4MCwkZDNjMTJkNTksJGZmOTAyZDU5LCRmZjk0MmQ1OQorCWRjLmwJJGZmOTgyMjJlLCRmZjg0MDI4MSwkODAwMDAwMDAsJDgzYWVmZjkwCisJZGMubAkkMjQxZmYyMjcsJGUwMDRmMjAwLCQwMDgwZjIwMCwkMDRhM2YyM2EKKwlkYy5sCSQ1NTAwZjZhMCwkZjIwMDA1MjIsJGYyMDAwNTIzLCRmMjAwMDBhMworCWRjLmwJJGYyM2E1NTIyLCRmNjk2ZjIzYSwkNTRhM2Y2OTgsJGYyMDAwOGEzCisJZGMubAkkZjIwMDA0MjIsJGYyMWZkMDIwLCRmMjAwOTAwMCwkZjIyZTQ4MjIKKwlkYy5sCSRmZjkwNjBmZiwkMDAwMDI5ZDIsJDBjODEzZmZmLCQ4MDAwNmUwMAorCWRjLmwJJDAwOGEwYzgxLCQzZmQ3ODAwMCwkNmQwMDAwNmMsJGYyMjdlMDBjCisJZGMubAkkZjIwMDAwMjMsJGYyMDAwMDgwLCRmMjAwMDRhMywkZjIzYTU1MDAKKwlkYy5sCSRmNjVhZjIzYSwkNTU4MGY2NWMsJGYyMDAwNTIzLCRmMjAwMDVhMworCWRjLmwJJGYyM2E1NTIyLCRmNjU2ZjIzYSwkNTVhMmY2NTgsJGYyMDAwNTIzCisJZGMubAkkZjIwMDBjYTMsJGYyM2E1NTIyLCRmNjUyZjIzYSwkNTRhMmY2NTQKKwlkYy5sCSRmMjAwMDEyMywkZjIyZTQ4MjMsJGZmODRmMjAwLCQwOGEyZjIwMAorCWRjLmwJJDA0MjNmMjFmLCRkMDMwZjIwMCwkOTAwMGYyMmUsJDQ4MjJmZjg0CisJZGMubAkkNjBmZjAwMDAsJDI5NTRmMjAwLCQ5MDAwMTIzYywkMDAwM2YyMmUKKwlkYy5sCSQ0ODAwZmY4NCwkNjBmZjAwMDAsJDI5MzgwYzgxLCQ0MDYzODAwMAorCWRjLmwJJDZlMDAwMDhlLCRmMjI3ZTAwYywkZjIzYzQ0ODAsJGJmODAwMDAwCisJZGMubAkkZjIwMDAwYTAsJGYyMDAwNDAwLCRmMjAwMDAyMywkZjIyZTY4ODAKKwlkYy5sCSRmZjg0ZjIwMCwkMDA4MGYyMDAsJDA0YTNmMjNhLCQ1NTgwZjVlYworCWRjLmwJJGYyM2E1NTAwLCRmNWVlZjIwMCwkMDVhM2YyMDAsJDA1MjNmMjNhCisJZGMubAkkNTVhMmY1ZTgsJGYyM2E1NTIyLCRmNWVhZjIwMCwkMGNhM2YyMDAKKwlkYy5sCSQwMTIzZjIzYSwkNTRhMmY1ZTQsJGYyMmU0ODIzLCRmZjg0ZjIwMAorCWRjLmwJJDA4YTJmMjAwLCQwNDIzZjIyZSwkNDgyMmZmODQsJGYyMWZkMDMwCisJZGMubAkkZjIwMDkwMDAsJDRhMTA2YTBjLCRmMjNhNDgyMiwkZjVkNjYwZmYKKwlkYy5sCSQwMDAwMjhjNiwkZjIzYTQ4MjIsJGY1YmE2MGZmLCQwMDAwMjhiMgorCWRjLmwJJDRhMTA2YTE2LCRmMjNhNDgwMCwkZjViYWYyMDAsJDkwMDBmMjNhCisJZGMubAkkNDgyMmY1YzAsJDYwZmYwMDAwLCQyOGEwZjIzYSwkNDgwMGY1OTQKKwlkYy5sCSRmMjAwOTAwMCwkZjIzYTQ4MjIsJGY1YmE2MGZmLCQwMDAwMjg4MgorCWRjLmwJJDYwZmYwMDAwLCQyOGJhZjIxMCwkNDgwMDIyMTAsJDMyMjgwMDA0CisJZGMubAkkMDI4MTdmZmYsJGZmZmYwYzgxLCQzZmZmODAwMCwkNmM0ZTBjODEKKwlkYy5sCSQzZmQ3ODAwMCwkNmQwMDAwN2MsJGYyM2M0NDgwLCQzZjgwMDAwMAorCWRjLmwJJGYyMDAwMGE4LCRmMjI3ZTAwNCwkZjIzYzQ1MDAsJDNmODAwMDAwCisJZGMubAkkZjIwMDAxMjIsJGYyMDAwOGEzLCRmMjFmZDAyMCwkZjIwMDA0ODQKKwlkYy5sCSRmMjAwMDQyMCwkZjIyN2UwMDEsJDQxZDc2MWZmLCRmZmZmZmQ2NgorCWRjLmwJJGRmZmMwMDAwLCQwMDBjNjBmZiwkMDAwMDI4MGUsJGYyMDAwMDE4CisJZGMubAkkZjIzYzQ0MzgsJDNmODAwMDAwLCRmMmQyMDAwMCwkMjY1YWYyM2EKKwlkYy5sCSQ0ODAwYjhhZSwkMjIxMDAyODEsJDgwMDAwMDAwLCQwMDgxM2Y4MAorCWRjLmwJJDAwMDAyZjAxLCRmMjAwOTAwMCwkZjIxZjQ0MjMsJDYwZmYwMDAwCisJZGMubAkkMjdkOGYyMDAsJDkwMDAxMjNjLCQwMDAzZjIxMCwkNDgwMDYwZmYKKwlkYy5sCSQwMDAwMjdiZSwkNjBmZjAwMDAsJDI4MDZmMjEwLCQ0ODAwMjIxMAorCWRjLmwJJDMyMjgwMDA0LCQwMjgxN2ZmZiwkZmZmZjBjODEsJDNmZmY4MDAwCisJZGMubAkkNmM0NGYyM2MsJDQ0ODAzZjgwLCQwMDAwZjIwMCwkMDBhMmYyMDAKKwlkYy5sCSQwMDFhZjIzYywkNDQyMjNmODAsJDAwMDBmMjAwLCQwNDIwZjIwMAorCWRjLmwJJDAwMDQyZjAwLCQ0MjgwZjIyNywkZTAwMTQxZDcsJDYxZmZmZmZmCisJZGMubAkkZmNjNGRmZmMsJDAwMDAwMDBjLCRmMjFmOTAwMCwkZjIwMDAwMjIKKwlkYy5sCSQ2MGZmMDAwMCwkMjc2Y2YyMDAsJDAwMThmMjNjLCQ0NDM4M2Y4MAorCWRjLmwJJDAwMDBmMmQyLCQwMDAwMjViMCwkNGExMDZhMTgsJGYyM2E0ODAwCisJZGMubAkkYjdmMGYyMDAsJDkwMDBmMjNjLCQ0NDIyMDA4MCwkMDAwMDYwZmYKKwlkYy5sCSQwMDAwMjczZSwkNjBmZjAwMDAsJDI5ODhmMjAwLCQ5MDAwZjIzYQorCWRjLmwJJDQ4MDBiN2RlLCQ2MGZmMDAwMCwkMjcyODNmZGMsJDAwMDA4MmUzCisJZGMubAkkMDg2NTQzNjEsJGM0YzYwMDAwLCQwMDAwM2ZhNSwkNTU1NTU1NTUKKwlkYy5sCSQ0Y2MxM2ZjNSwkNTU1NTU1NTUsJDRhNTQzZjgxLCQxMTExMTExNworCWRjLmwJJDQzODUzZmE1LCQ1NTU1NTU1NSwkNGY1YTNmYzUsJDU1NTU1NTU1CisJZGMubAkkNTU1NTAwMDAsJDAwMDAwMDAwLCQwMDAwM2VjNywkMWRlM2E1NzcKKwlkYy5sCSQ0NjgyM2VmYSwkMDFhMDE5ZDcsJGNiNjgzZjJhLCQwMWEwMWEwMQorCWRjLmwJJDlkZjMzZjU2LCRjMTZjMTZjMSwkNzBlMjNmODEsJDExMTExMTExCisJZGMubAkkMTExMTNmYTUsJDU1NTU1NTU1LCQ1NTU1M2ZmYywkMDAwMGFhYWEKKwlkYy5sCSRhYWFhYWFhYSwkYWFhYjAwMDAsJDAwMDA0OGIwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAzNzMwLCQwMDAwMDAwMCwkMDAwMDNmZmYsJDAwMDA4MDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwM2ZmZiwkMDAwMDgxNjQKKwlkYy5sCSRkMWYzYmMwMywkMDc3NDlmODQsJDFhOWIzZmZmLCQwMDAwODJjZAorCWRjLmwJJDg2OThhYzJiLCRhMWQ4OWZjMSwkZDViOTNmZmYsJDAwMDA4NDNhCisJZGMubAkkMjhjM2FjZGUsJDQwNDhhMDcyLCQ4MzY5M2ZmZiwkMDAwMDg1YWEKKwlkYy5sCSRjMzY3Y2M0OCwkN2IxNDFmYzUsJGM5NWMzZmZmLCQwMDAwODcxZgorCWRjLmwJJDYxOTY5ZThkLCQxMDEwMWVlOCwkNWM5ZjNmZmYsJDAwMDA4ODk4CisJZGMubAkkMGU4MDkyZGEsJDg1Mjg5ZmEyLCQwNzI5M2ZmZiwkMDAwMDhhMTQKKwlkYy5sCSRkNTc1NDk2ZSwkZmQ5Y2EwN2IsJGY5YWYzZmZmLCQwMDAwOGI5NQorCWRjLmwJJGMxZTNlYThiLCRkNmU4YTAwMiwkMGRjZjNmZmYsJDAwMDA4ZDFhCisJZGMubAkkZGY1YjdlNWIsJGE5ZTQyMDVhLCQ2M2RhM2ZmZiwkMDAwMDhlYTQKKwlkYy5sCSQzOThiNDVjZCwkNTNjMDFlYjcsJDAwNTEzZmZmLCQwMDAwOTAzMQorCWRjLmwJJGRjNDMxNDY2LCRiMWRjMWY2ZSwkYjAyOTNmZmYsJDAwMDA5MWMzCisJZGMubAkkZDM3M2FiMTEsJGMzMzhhMDc4LCQxNDk0M2ZmZiwkMDAwMDkzNWEKKwlkYy5sCSQyYjJmMTNlNiwkZTkyYzllYjMsJDE5YjAzZmZmLCQwMDAwOTRmNAorCWRjLmwJJGVmYThmZWY3LCQwOTYwMjAxNywkNDU3ZDNmZmYsJDAwMDA5Njk0CisJZGMubAkkMmQzNzIwMTgsJDVhMDAxZjExLCRkNTM3M2ZmZiwkMDAwMDk4MzcKKwlkYy5sCSRmMDUxOGRiOCwkYTk3MDlmYjksJDUyZGQzZmZmLCQwMDAwOTllMAorCWRjLmwJJDQ1OTMyMGI3LCRmYTY0MWZlNCwkMzA4NzNmZmYsJDAwMDA5YjhkCisJZGMubAkkMzliOWQ1NGUsJDU1MzgxZmEyLCRhODE4M2ZmZiwkMDAwMDlkM2UKKwlkYy5sCSRkOWE3MmNmZiwkYjc1MDFmZGUsJDQ5NGQzZmZmLCQwMDAwOWVmNQorCWRjLmwJJDMyNjA5MWExLCQxMWFjMjA1MCwkNDg5MDNmZmYsJDAwMDBhMGIwCisJZGMubAkkNTEwZmI5NzEsJDRmYzRhMDczLCQ2OTFjM2ZmZiwkMDAwMGEyNzAKKwlkYy5sCSQ0MzAzMGM0OSwkNjgxODFmOWIsJDdhMDUzZmZmLCQwMDAwYTQzNQorCWRjLmwJJDE1YWUwOWU2LCQ4MGEwYTA3OSwkNzEyNjNmZmYsJDAwMDBhNWZlCisJZGMubAkkZDZhOWIxNTEsJDM4ZWNhMDcxLCRhMTQwM2ZmZiwkMDAwMGE3Y2QKKwlkYy5sCSQ5M2I0ZTk2NSwkMzU2ODIwNGYsJDYyZGEzZmZmLCQwMDAwYTlhMQorCWRjLmwJJDVhYjRlYTdjLCQwZWY4MWYyOCwkM2M0YTNmZmYsJDAwMDBhYjdhCisJZGMubAkkMzliNWE5M2UsJGQzMzg5ZjlhLCQ3ZmRjM2ZmZiwkMDAwMGFkNTgKKwlkYy5sCSQzZWVhNDJhMSwkNGFjOGEwNWIsJDNmYWMzZmZmLCQwMDAwYWYzYgorCWRjLmwJJDc4YWQ2OTBhLCQ0Mzc0MWZkZiwkMjYxMDNmZmYsJDAwMDBiMTIzCisJZGMubAkkZjU4MWQyYWMsJDI1OTA5ZjcwLCQ1ZjkwM2ZmZiwkMDAwMGIzMTEKKwlkYy5sCSRjNDEyYTkxMSwkMjQ4ODIwMWYsJDY3OGEzZmZmLCQwMDAwYjUwNAorCWRjLmwJJGYzMzNmOWRlLCQ2NDg0MWYzMiwkZmIxMzNmZmYsJDAwMDBiNmZkCisJZGMubAkkOTFlMzI4ZDEsJDc3OTAyMDAzLCQ4YjMwM2ZmZiwkMDAwMGI4ZmIKKwlkYy5sCSRhZjQ3NjJmYiwkOWVlODIwMGQsJGMzY2MzZmZmLCQwMDAwYmFmZgorCWRjLmwJJDVhYjIxMzNlLCQ0NWZjOWY4YiwkMmFlNjNmZmYsJDAwMDBiZDA4CisJZGMubAkkYTM5ZjU4MGMsJDM2YzBhMDJiLCRiZjcwM2ZmZiwkMDAwMGJmMTcKKwlkYy5sCSQ5OWI2N2E3MywkMTA4NGEwMGIsJGY1MTgzZmZmLCQwMDAwYzEyYworCWRjLmwJJDRjY2E2NjcwLCQ5NDU4YTA0MSwkZGQ0MTNmZmYsJDAwMDBjMzQ2CisJZGMubAkkY2NkYTI0OTcsJDY0MDg5ZmRmLCQxMzdiM2ZmZiwkMDAwMGM1NjcKKwlkYy5sCSQyYTExNTUwNiwkZGFkYzIwMWYsJDE1NjgzZmZmLCQwMDAwYzc4ZAorCWRjLmwJJDc0YzhhYmI5LCRiMTVjMWZjMSwkM2EyZTNmZmYsJDAwMDBjOWI5CisJZGMubAkkYmQ4NjZlMmYsJDI3YTRhMDNmLCQ4ZjAzM2ZmZiwkMDAwMGNiZWMKKwlkYy5sCSQxNGZlZjI3MiwkN2M1YzFmZjQsJDkwN2QzZmZmLCQwMDAwY2UyNAorCWRjLmwJJDhjMTUxZjg0LCQ4MGU0OWU2ZSwkNTNlNDNmZmYsJDAwMDBkMDYzCisJZGMubAkkMzNkYWVmMmIsJDI1OTQxZmQ2LCRkNDVjM2ZmZiwkMDAwMGQyYTgKKwlkYy5sCSQxZDkxZjEyYSwkZTQ1Y2EwNzYsJGVkYjkzZmZmLCQwMDAwZDRmMworCWRjLmwJJDVhYWJjZmVkLCRmYTIwOWZhNiwkZGUyMTNmZmYsJDAwMDBkNzQ0CisJZGMubAkkZmNjYWQ2OWQsJDZhZjQxZWU2LCQ5YTJmM2ZmZiwkMDAwMGQ5OWQKKwlkYy5sCSQxNWMyNzhhZiwkZDdiNDIwN2YsJDQzOWYzZmZmLCQwMDAwZGJmYgorCWRjLmwJJGI3OTdkYWYyLCQzNzU0MjAxZSwkYzIwNzNmZmYsJDAwMDBkZTYwCisJZGMubAkkZjQ4MjVlMGUsJDkxMjQ5ZThiLCRlMTc1M2ZmZiwkMDAwMGUwY2MKKwlkYy5sCSRkZWVjMmE5NCwkZTExMDIwMDMsJDJjNGIzZmZmLCQwMDAwZTMzZgorCWRjLmwJJDg5NzJiZThhLCQ1YTUwMjAwNCwkZGZmNTNmZmYsJDAwMDBlNWI5CisJZGMubAkkMDZlNzdjODMsJDQ4YTgxZTcyLCRmNDdhM2ZmZiwkMDAwMGU4MzkKKwlkYy5sCSQ2YTUwM2M0YiwkZGM2ODFmNzIsJDJmMjIzZmZmLCQwMDAwZWFjMAorCWRjLmwJJGM2ZTdkZDI0LCQzOTMwYTAxNywkZTk0NTNmZmYsJDAwMDBlZDRmCisJZGMubAkkMzAxZWQ5OTQsJDJiODQxZjQwLCQxYTViM2ZmZiwkMDAwMGVmZTQKKwlkYy5sCSRiOTliZGNkYSwkZjVjYzlmYjksJGE5ZTMzZmZmLCQwMDAwZjI4MQorCWRjLmwJJDc3M2M1OWZmLCRiMTM4MjA3NCwkNGMwNTNmZmYsJDAwMDBmNTI1CisJZGMubAkkN2QxNTI0ODYsJGNjMmMxZjc3LCQzYTE5M2ZmZiwkMDAwMGY3ZDAKKwlkYy5sCSRkZjczMGFkMSwkM2JiODFmZmUsJDkwZDUzZmZmLCQwMDAwZmE4MworCWRjLmwJJGIyZGI3MjJhLCQwMzNjYTA0MSwkZWQyMjNmZmYsJDAwMDBmZDNlCisJZGMubAkkMGMwY2Y0ODYsJGMxNzQxZjg1LCQzZjNhMjIxMCwkMDI4MTdmZmYKKwlkYy5sCSQwMDAwMGM4MSwkM2ZiZTAwMDAsJDZjMDY2MGZmLCQwMDAwMDEwOAorCWRjLmwJJDMyMjgwMDA0LCQwYzgxNDAwYywkYjE2NzZkMDYsJDYwZmYwMDAwCisJZGMubAkkMDEwY2YyMTAsJDQ4MDBmMjAwLCQwMDgwZjIzYywkNDQyMzQyYjgKKwlkYy5sCSRhYTNiZjIyNywkZTAwYzJkN2MsJDAwMDAwMDAwLCRmZjU4ZjIwMQorCWRjLmwJJDYwMDA0M2ZhLCRmYmI2ZjIwMSwkNDAwMDJkNDEsJGZmNTQwMjgxCisJZGMubAkkMDAwMDAwM2YsJGU5ODlkM2MxLCQyMjJlZmY1NCwkZWM4MTA2NDEKKwlkYy5sCSQzZmZmM2Q3YSwkZmIwNmZmNTQsJGYyMDAwMTAwLCRmMjNjNDQyMworCWRjLmwJJGJjMzE3MjE4LCRmMjNhNDkyMywkZmFmMmYyMDAsJDA0MjJmMjAwCisJZGMubAkkMDgyMmYyMDAsJDAwODBmMjAwLCQwNGEzZjIzYywkNDUwMDNhYjYKKwlkYy5sCSQwYjcwZjIwMCwkMDUyM2YyMDAsJDA1ODBmMjNjLCQ0NWEzM2MwOAorCWRjLmwJJDg4OTVmMjNhLCQ1NTIyZmFkNCwkZjIzYTU1YTIsJGZhZDZmMjAwCisJZGMubAkkMDUyMzNkNDEsJGZmODQyZDdjLCQ4MDAwMDAwMCwkZmY4ODQyYWUKKwlkYy5sCSRmZjhjZjIwMCwkMDVhM2YyM2MsJDQ1MjIzZjAwLCQwMDAwZjIwMAorCWRjLmwJJDAxYTNmMjAwLCQwNTIzZjIwMCwkMGMyMmYyMTksJDQ4ODBmMjAwCisJZGMubAkkMDgyMmYyMDAsJDA0MjNmMjFmLCRkMDMwZjIxMSwkNDQyMmYyMDAKKwlkYy5sCSQwNDIyMjIyZSwkZmY1ODRhODEsJDY3MDZmMjJlLCQ0ODIzZmY5MAorCWRjLmwJJGYyMDA5MDAwLCQxMjNjMDAwMCwkZjIyZTQ4MjMsJGZmODQ2MGZmCisJZGMubAkkMDAwMDIxNmUsJGYyMTBkMDgwLCRmMjAwOTAwMCwkZjIzYzQ0MjIKKwlkYy5sCSQzZjgwMDAwMCwkNjBmZjAwMDAsJDIxNjgwYzgxLCQ0MDBjYjI3YworCWRjLmwJJDZlNjZmMjEwLCQ0ODAwZjIwMCwkMDA4MGYyM2MsJDQ0MjM0MmI4CisJZGMubAkkYWEzYmYyMjcsJGUwMGMyZDdjLCQwMDAwMDAwMSwkZmY1OGYyMDEKKwlkYy5sCSQ2MDAwNDNmYSwkZmFhNmYyMDEsJDQwMDAyZDQxLCRmZjU0MDI4MQorCWRjLmwJJDAwMDAwMDNmLCRlOTg5ZDNjMSwkMjIyZWZmNTQsJGVjODEyZDQxCisJZGMubAkkZmY1NGUyODEsJDkzYWVmZjU0LCQwNjQxM2ZmZiwkM2Q0MWZmOTAKKwlkYy5sCSQyZDdjODAwMCwkMDAwMGZmOTQsJDQyYWVmZjk4LCQyMjJlZmY1NAorCWRjLmwJJDA2NDEzZmZmLCQ2MDAwZmVkMiwkNGExMDZiZmYsJDAwMDAxZmJjCisJZGMubAkkNjBmZjAwMDAsJDIwYWUyZjEwLCQwMjk3ODAwMCwkMDAwMDAwOTcKKwlkYy5sCSQwMDgwMDAwMCwkZjIzYzQ0MDAsJDNmODAwMDAwLCRmMjAwOTAwMAorCWRjLmwJJGYyMWY0NDIyLCQ2MGZmMDAwMCwkMjBjODIyMTAsJDAyODE3ZmZmCisJZGMubAkkMDAwMDBjODEsJDNmZmQwMDAwLCQ2YzA2NjBmZiwkMDAwMDAxNWUKKwlkYy5sCSQzMjI4MDAwNCwkMGM4MTQwMDQsJGMyMTU2ZjA2LCQ2MGZmMDAwMAorCWRjLmwJJDAyNmNmMjEwLCQ0ODAwZjIwMCwkMDA4MGYyM2MsJDQ0MjM0MmI4CisJZGMubAkkYWEzYmYyMjcsJGUwMGNmMjAxLCQ2MDAwNDNmYSwkZjllZWYyMDEKKwlkYy5sCSQ0MDAwMmQ0MSwkZmY1NDAyODEsJDAwMDAwMDNmLCRlOTg5ZDNjMQorCWRjLmwJJDIyMmVmZjU0LCRlYzgxMmQ0MSwkZmY1NGYyMDAsJDAxMDBmMjNjCisJZGMubAkkNDQyM2JjMzEsJDcyMThmMjNhLCQ0OTIzZjkzMCwkZjIwMDA0MjIKKwlkYy5sCSRmMjAwMDgyMiwkMDY0MTNmZmYsJGYyMDAwMDgwLCRmMjAwMDRhMworCWRjLmwJJGYyM2M0NTAwLCQzOTUwMDk3YiwkZjIwMDA1MjMsJGYyMDAwNTgwCisJZGMubAkkZjIzYzQ1YTMsJDNhYjYwYjZhLCRmMjNhNTUyMiwkZjkxZWYyM2EKKwlkYy5sCSQ1NWEyZjkyMCwkM2Q0MWZmODQsJDJkN2M4MDAwLCQwMDAwZmY4OAorCWRjLmwJJDQyYWVmZjhjLCRmMjAwMDUyMywkMjIyZWZmNTQsJDQ0NDFmMjAwCisJZGMubAkkMDVhMzA2NDEsJDNmZmZmMjNhLCQ1NTIyZjkwMCwkZjIzYzQ1YTIKKwlkYy5sCSQzZjAwMDAwMCwkZjIwMDA1MjMsJDAwNDE4MDAwLCQzZDQxZmY5MAorCWRjLmwJJDJkN2M4MDAwLCQwMDAwZmY5NCwkNDJhZWZmOTgsJGYyMDAwY2EzCisJZGMubAkkZjIwMDAxMjMsJGYyMDAwNDIyLCRmMjAwMDgyMiwkZjIxZmQwMzAKKwlkYy5sCSRmMjExNDgyMywkMjIyZWZmNTQsJDBjODEwMDAwLCQwMDNmNmYxYQorCWRjLmwJJGYyMjk0NDgwLCQwMDBjZjIyZSwkNDhhMmZmOTAsJGYyMDAwNDIyCisJZGMubAkkZjIxMTQ4MjIsJDYwZmYwMDAwLCQwMDM0MGM4MSwkZmZmZmZmZmQKKwlkYy5sCSQ2YzE2ZjIyOSwkNDQyMjAwMGMsJGYyMTE0ODIyLCRmMjJlNDgyMgorCWRjLmwJJGZmOTA2MGZmLCQwMDAwMDAxNiwkZjIxOTQ4ODAsJGYyMTE0NDIyCisJZGMubAkkZjIyZTQ4YTIsJGZmOTBmMjAwLCQwNDIyZjIwMCwkOTAwMGYyMmUKKwlkYy5sCSQ0ODIzZmY4NCwkNjBmZjAwMDAsJDFmNTAwYzgxLCQzZmJlMDAwMAorCWRjLmwJJDZjNmMwYzgxLCQwMDMzMDAwMCwkNmQyYzJkN2MsJDgwMDEwMDAwCisJZGMubAkkZmY4NDJkN2MsJDgwMDAwMDAwLCRmZjg4NDJhZSwkZmY4Y2YyMTAKKwlkYy5sCSQ0ODAwZjIwMCwkOTAwMDEyM2MsJDAwMDJmMjJlLCQ0ODIyZmY4NAorCWRjLmwJJDYwZmYwMDAwLCQxZjBjZjIxMCwkNDgwMGYyM2EsJDU0MjNmODZjCisJZGMubAkkMmQ3YzgwMDEsJDAwMDBmZjg0LCQyZDdjODAwMCwkMDAwMGZmODgKKwlkYy5sCSQ0MmFlZmY4YywkZjIyZTQ4MjIsJGZmODRmMjAwLCQ5MDAwMTIzYworCWRjLmwJJDAwMDBmMjNhLCQ1NDIzZjg0YywkNjBmZjAwMDAsJDFlZDRmMjEwCisJZGMubAkkNDgwMGYyMDAsJDAwMjNmMjI3LCRlMDBjZjIzYywkNDQ4MDJmMzAKKwlkYy5sCSRjYWE4ZjIwMCwkMDBhM2YyM2MsJDQ1MDAzMTBmLCQ4MjkwZjIzYworCWRjLmwJJDQ0YTIzMmQ3LCQzMjIwZjIwMCwkMDEyM2YyMDAsJDAwYTNmMjNjCisJZGMubAkkNDUyMjM0OTMsJGYyODFmMjNhLCQ1NGEyZjdjMCwkZjIwMDAxMjMKKwlkYy5sCSRmMjAwMDBhMywkZjIzYTU1MjIsJGY3YmFmMjNhLCQ1NGEyZjdiYworCWRjLmwJJGYyMDAwMTIzLCRmMjAwMDBhMywkZjIzYTU1MjIsJGY3YjZmMjNhCisJZGMubAkkNTRhMmY3YjgsJGYyMDAwMTIzLCRmMjAwMDBhMywkZjIzYTU1MjIKKwlkYy5sCSRmN2IyZjIzYSwkNDhhMmY3YjQsJGYyMDAwMTIzLCRmMjAwMDBhMworCWRjLmwJJGYyMDAwMTIzLCRmMjEwNDhhMywkZjIzYzQ0MjMsJDNmMDAwMDAwCisJZGMubAkkZjIwMDA4YTIsJGYyMWZkMDMwLCRmMjAwMDQyMiwkZjIwMDkwMDAKKwlkYy5sCSRmMjEwNDgyMiwkNjBmZjAwMDAsJDFlMzAyMjEwLCQwYzgxMDAwMAorCWRjLmwJJDAwMDA2ZTAwLCRmYmFjZjIzYywkNDQwMGJmODAsJDAwMDBmMjAwCisJZGMubAkkOTAwMGYyM2MsJDQ0MjIwMDgwLCQwMDAwNjBmZiwkMDAwMDFlMWEKKwlkYy5sCSQ2MGZmMDAwMCwkMWU0YTMwMjgsJDAwMDAwODgwLCQwMDBmMDQ0MAorCWRjLmwJJDNmZmZmMjAwLCQ1MDAwNmQwMiwkNGU3NTFkN2MsJDAwMDhmZjY0CisJZGMubAkkNGU3NTYxZmYsJDAwMDAyMzQyLCQ0NDQwMDQ0MCwkM2ZmZmYyMDAKKwlkYy5sCSQ1MDAwMWQ3YywkMDAwOGZmNjQsJDRlNzUzMDI4LCQwMDAwMDA0MAorCWRjLmwJJDdmZmYwODgwLCQwMDBlMmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzNkNDAsJGZmODRmMjJlLCQ0ODAwZmY4NCwkNmIwMjRlNzUKKwlkYy5sCSQxZDdjMDAwOCwkZmY2NDRlNzUsJDYxZmYwMDAwLCQyMmZjNjBjYQorCWRjLmwJJDdmZmIwMDAwLCQ4MDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIxMDQ4MDAsJDIyMTAzMjI4LCQwMDA0MDI4MSwkN2ZmZmZmZmYKKwlkYy5sCSQwYzgxNDAwYywkYjE2NzZlNDIsJGYyMDAwMDE4LCQyZjAwNDI4MAorCWRjLmwJJGYyMjdlMDAxLCQ0MWQ3NjFmZiwkZmZmZmZhZDIsJGRmZmMwMDAwCisJZGMubAkkMDAwY2YyM2MsJDQ0MjMzZjAwLCQwMDAwMjAxZiwkZjIzYzQ0ODAKKwlkYy5sCSQzZTgwMDAwMCwkZjIwMDAwYTAsJGYyMDA5MDAwLCQxMjNjMDAwMgorCWRjLmwJJGYyMDAwNDIyLCQ2MGZmMDAwMCwkMWQyODBjODEsJDQwMGNiMmIzCisJZGMubAkkNmUzY2YyMDAsJDAwMThmMjNhLCQ1NDI4YWRiNiwkZjIzYTU0MjgKKwlkYy5sCSRhZGI4MmYwMCwkNDI4MGYyMjcsJGUwMDE0MWQ3LCQ2MWZmZmZmZgorCWRjLmwJJGZhN2NkZmZjLCQwMDAwMDAwYywkMjAxZmYyMDAsJDkwMDAxMjNjCisJZGMubAkkMDAwMGYyM2EsJDQ4MjNmZjVhLCQ2MGZmMDAwMCwkMWNlNDYwZmYKKwlkYy5sCSQwMDAwMWNiMCwkZjIzYzQ0MDAsJDNmODAwMDAwLCRmMjAwOTAwMAorCWRjLmwJJGYyM2M0NDIyLCQwMDgwMDAwMCwkNjBmZjAwMDAsJDFjZDRmMjEwCisJZGMubAkkNDgwMDIyMTAsJDMyMjgwMDA0LCQyMjQxMDI4MSwkN2ZmZmZmZmYKKwlkYy5sCSQwYzgxNDAwYywkYjE2NzZlNjIsJGYyMDAwMDE4LCQ0OGU3ODA0MAorCWRjLmwJJGYyMjdlMDAxLCQ0MWQ3NDI4MCwkNjFmZmZmZmYsJGZiZTBkZmZjCisJZGMubAkkMDAwMDAwMGMsJGYyM2M5MDAwLCQwMDAwMDAwMCwkNGNkZjAyMDEKKwlkYy5sCSRmMjAwMDA4MCwkZjIzYzQ0YTIsJDNmODAwMDAwLCRmMjI3NjgwMAorCWRjLmwJJGYyMDAwNDIwLCQyMjA5MDI4MSwkODAwMDAwMDAsJDAwODEzZjAwCisJZGMubAkkMDAwMGYyMWYsJDQ4MjIyZjAxLCRmMjAwOTAwMCwkMTIzYzAwMDAKKwlkYy5sCSRmMjFmNDQyMywkNjBmZjAwMDAsJDFjNDgwYzgxLCQ0MDBjYjJiMworCWRjLmwJJDZlZmYwMDAwLCQxYmMyZjIwMCwkMDAxOGYyM2EsJDU0MjhhY2QyCisJZGMubAkkMmYzYzAwMDAsJDAwMDAyZjNjLCQ4MDAwMDAwMCwkMjIwOTAyODEKKwlkYy5sCSQ4MDAwMDAwMCwkMDA4MTdmZmIsJDAwMDAyZjAxLCRmMjNhNTQyOAorCWRjLmwJJGFjYjgyZjAwLCQ0MjgwZjIyNywkZTAwMTQxZDcsJDYxZmZmZmZmCisJZGMubAkkZjk3Y2RmZmMsJDAwMDAwMDBjLCQyMDFmZjIwMCwkOTAwMDEyM2MKKwlkYy5sCSQwMDAwZjIxZiwkNDgyMzYwZmYsJDAwMDAxYmU2LCQ2MGZmMDAwMAorCWRjLmwJJDFjMmVmMjEwLCQ0ODAwZjIyZSwkNjgwMGZmODQsJDIyMTAzMjI4CisJZGMubAkkMDAwNDJkNDEsJGZmODQwMjgxLCQ3ZmZmZmZmZiwkMGM4MTNmZDcKKwlkYy5sCSQ4MDAwNmQwMCwkMDA3NDBjODEsJDNmZmZkZGNlLCQ2ZTAwMDA2YQorCWRjLmwJJDIyMmVmZjg0LCQyZDQxZmY1YywkMDI4MTdmZmYsJDAwMDAwNjgxCisJZGMubAkkMDAwMTAwMDAsJDJkNDFmZjg0LCQwMmFlODAwMCwkMDAwMGZmNWMKKwlkYy5sCSRmMjJlNDgwMCwkZmY4NDJmMDAsJDQyODBmMjI3LCRlMDAxNDFkNworCWRjLmwJJDYxZmZmZmZmLCRmYWM4ZGZmYywkMDAwMDAwMGMsJDIwMWZmMjAwCisJZGMubAkkMDA4MGYyM2MsJDQ0YTI0MDAwLCQwMDAwMjIyZSwkZmY1Y2YyMmUKKwlkYy5sCSQ2ODgwZmY4NCwkYjNhZWZmODQsJGYyMDA5MDAwLCRmMjJlNDgyMAorCWRjLmwJJGZmODQ2MGZmLCQwMDAwMWI1MiwkMGM4MTNmZmYsJDgwMDA2ZDAwCisJZGMubAkkMDA4ODBjODEsJDQwMDQ4YWExLCQ2ZTAwMDA5MiwkMjIyZWZmODQKKwlkYy5sCSQyZDQxZmY1YywkMDI4MTdmZmYsJDAwMDAwNjgxLCQwMDAxMDAwMAorCWRjLmwJJDJkNDFmZjg0LCQwMmFlODAwMCwkMDAwMGZmNWMsJDIyMmVmZjVjCisJZGMubAkkZjIyZTQ4MDAsJGZmODQyZjAwLCQ0MjgwZjIyNywkZTAwMTQxZDcKKwlkYy5sCSQ2MWZmZmZmZiwkZjg3OGRmZmMsJDAwMDAwMDBjLCQyMDFmMjIyZQorCWRjLmwJJGZmNWNmMjNjLCQ0NDIyM2Y4MCwkMDAwMDBhODEsJGMwMDAwMDAwCisJZGMubAkkZjIwMTQ0ODAsJGYyMDAwMGEwLCQyMjJlZmY1YywkMDA4MTNmODAKKwlkYy5sCSQwMDAwZjIwMSwkNDQwMGYyMDAsJDkwMDAxMjNjLCQwMDAyZjIwMAorCWRjLmwJJDA0MjI2MGZmLCQwMDAwMWFjMiwkZjIwMDkwMDAsJDEyM2MwMDAzCisJZGMubAkkZjIyZTQ4MDAsJGZmODQ2MGZmLCQwMDAwMWFhNiwkMjIyZWZmODQKKwlkYy5sCSQwMjgxODAwMCwkMDAwMDAwODEsJDNmODAwMDAwLCRmMjAxNDQwMAorCWRjLmwJJDAyODE4MDAwLCQwMDAwMGE4MSwkODA4MDAwMDAsJGYyMDA5MDAwCisJZGMubAkkZjIwMTQ0MjIsJDYwZmYwMDAwLCQxYTgwNjBmZiwkMDAwMDFhYzAKKwlkYy5sCSQzZmZlMDAwMCwkYjE3MjE3ZjcsJGQxY2Y3OWFjLCQwMDAwMDAwMAorCWRjLmwJJDNmODAwMDAwLCQwMDAwMDAwMCwkN2Y4MDAwMDAsJGJmODAwMDAwCisJZGMubAkkM2ZjMjQ5OWEsJGI1ZTQwNDBiLCRiZmM1NTViNSwkODQ4Y2I3ZGIKKwlkYy5sCSQzZmM5OTk5OSwkOTg3ZDg3MzAsJGJmY2ZmZmZmLCRmZjZmN2U5NworCWRjLmwJJDNmZDU1NTU1LCQ1NTU1NTVhNCwkYmZlMDAwMDAsJDAwMDAwMDA4CisJZGMubAkkM2YxNzU0OTYsJGFkZDdkYWQ2LCQzZjNjNzFjMiwkZmU4MGM3ZTAKKwlkYy5sCSQzZjYyNDkyNCwkOTI4YmNjZmYsJDNmODk5OTk5LCQ5OTk5OTVlYworCWRjLmwJJDNmYjU1NTU1LCQ1NTU1NTU1NSwkNDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkM2Y5OTAwMDAsJDgwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZmUwM2Y4MGYsJGUwM2Y4MGZlLCQwMDAwMDAwMAorCWRjLmwJJDNmZjcwMDAwLCRmZjAxNTM1OCwkODMzYzQ3ZTIsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGZhMjMyY2YyLCQ1MjEzOGFjMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmY5MDAwMCwkYmRjOGQ4M2UsJGFkODhkNTQ5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRmNjYwM2Q5OCwkMGY2NjAzZGEsJDAwMDAwMDAwCisJZGMubAkkM2ZmYTAwMDAsJDljZjQzZGNmLCRmNWVhZmQ0OCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZjJiOWQ2NDgsJDBmMmI5ZDY1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmEwMDAwLCRkYTE2ZWI4OCwkY2I4ZGY2MTQsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGVmMmViNzFmLCRjNDM0NTIzOCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZiMDAwMCwkOGIyOWI3NzUsJDFiZDcwNzQzLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRlYmJkYjJhNSwkYzE2MTljOGMsJDAwMDAwMDAwCisJZGMubAkkM2ZmYjAwMDAsJGE4ZDgzOWY4LCQzMGMxZmI0OSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZTg2NWFjN2IsJDc2MDNhMTk3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmIwMDAwLCRjNjFhMmViMSwkOGNkOTA3YWQsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGU1MjU5ODJhLCRmNzBjODgwZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZiMDAwMCwkZTJmMmE0N2EsJGRlM2ExOGFmLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRlMWZjNzgwZSwkMWZjNzgwZTIsJDAwMDAwMDAwCisJZGMubAkkM2ZmYjAwMDAsJGZmNjQ4OThlLCRkZjU1ZDU1MSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZGVlOTVjNGMsJGEwMzdiYTU3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCQ4ZGI5NTZhOSwkN2IzZDAxNDgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGRiZWI2MWVlLCRkMTljNTk1OCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkOWI4ZmUxMDAsJGY0N2JhMWRlLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRkOTAxYjIwMywkNjQwNmM4MGUsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJGE5MzcyZjFkLCQwZGExYmQxNywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZDYyYjgwZDYsJDJiODBkNjJjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCRiNmIwN2YzOCwkY2U5MGU0NmIsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGQzNjgwZDM2LCQ4MGQzNjgwZCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkYzNmZDAzMjksJDA2NDg4NDgxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRkMGI2OWZjYiwkZDI1ODBkMGIsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJGQxMWRlMGZmLCQxNWFiMThjYSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkY2UxNjhhNzcsJDI1MDgwY2UxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCRkZTE0MzNhMSwkNmM2NmIxNTAsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGNiODcyN2MwLCQ2NWMzOTNlMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkZWFlMTBiNWEsJDdkZGM4YWRkLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRjOTA3ZGE0ZSwkODcxMTQ2YWQsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJGY3ODU2ZTVlLCRlMmM5YjI5MSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYzY5ODBjNjksJDgwYzY5ODBjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCQ4MjAxMmNhNSwkYTY4MjA2ZDcsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGM0MzcyZjg1LCQ1ZDgyNGNhNiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkODgyYzVmY2QsJDcyNTZhOGM1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRjMWU0YmJkNSwkOTVmNmU5NDcsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJDhlNDRjNjBiLCQ0Y2NmZDdkZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYmZhMDJmZTgsJDBiZmEwMmZmLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCQ5NDRhZDA5ZSwkZjQzNTFhZjYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGJkNjkxMDQ3LCQwNzY2MWFhMywkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkOWEzZWVjZDQsJGMzZWFhNmIyLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiYjNlZTcyMSwkYTU0ZDg4MGMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGEwMjE4NDM0LCQzNTNmMWRlOCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYjkyMTQzZmEsJDM2ZjVlMDJlLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRhNWYyZmNhYiwkYmJjNTA2ZGEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGI3MGZiYjVhLCQxOWJlMzY1OSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkYWJiM2I4YmEsJDJhZDM2MmE1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiNTA5ZTY4YSwkOWI5NDgyMWYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGIxNjQxNzk1LCRjZTNjYTk3YiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYjMwZjYzNTIsJDg5MTdjODBiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRiNzA0NzU1MSwkNWQwZjFjNjEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGIxMWZkM2I4LCQwYjExZmQzYywkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkYmM5NTJhZmUsJGVhM2QxM2UxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhZjNhZGRjNiwkODBhZjNhZGUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGMyMTY4ZWQwLCRmNDU4YmE0YSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYWQ2MDJiNTgsJDBhZDYwMmI2LCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRjNzg4ZjQzOSwkYjMxNjNiZjEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGFiOGY2OWUyLCQ4MzU5Y2QxMSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkY2NlY2FjMDgsJGJmMDQ1NjVkLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhOWM4NGE0NywkYTA3ZjU2MzgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGQyNDIwNDg3LCQyZGQ4NTE2MCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTgwYTgwYTgsJDBhODBhODBiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRkNzg5NDk5MiwkM2JjMzU4OGEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGE2NTVjNDM5LCQyZDdiNzNhOCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZGNjMmM0YjQsJDk4ODdkYWNjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhNGE5Y2YxZCwkOTY4MzM3NTEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGUxZWViZDNlLCQ2ZDZhNmI5ZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTMwNjVlM2YsJGFlN2NkMGUwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRlNzBkNzg1YywkMmY5ZjViZGMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGExNmIzMTJlLCRhOGZjMzc3ZCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZWMxZjM5MmMsJDUxNzlmMjgzLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5ZmQ4MDlmZCwkODA5ZmQ4MGEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGYxMjQ0MGQzLCRlMzYxMzBlNiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOWU0Y2FkMjMsJGRkNWYzYTIwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRmNjFjY2U5MiwkMzQ2NjAwYmIsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDljYzhlMTYwLCRjM2ZiMTliOSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZmIwOTFmZDMsJDgxNDU2MzBhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5YjRjNmY5ZSwkZjAzYTNjYWEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGZmZTk3MDQyLCRiZmE0YzJhZCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTlkNzIyZGEsJGJkZTU4ZjA2LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4MjVlZmNlZCwkNDkzNjkzMzAsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk4NjhjODA5LCQ4NjhjODA5OCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODRjMzdhN2EsJGI5YTkwNWM5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5NzAxMmUwMiwkNWMwNGI4MDksJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDg3MjI0YzJlLCQ4ZTY0NWZiNywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTVhMDI1NjgsJDA5NWEwMjU3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4OTdiOGNhYywkOWY3ZGUyOTgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk0NDU4MDk0LCQ0NTgwOTQ0NiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOGJjZjU1ZGUsJGM0Y2QwNWZlLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5MmYxMTM4NCwkMDQ5Nzg4OWMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDhlMWRjMGZiLCQ4OWUxMjVlNSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTFhMmIzYzQsJGQ1ZTZmODA5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5MDY2ZTY4YywkOTU1YjZjOWIsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDkwNWEzODYzLCQzZTA2YzQzYiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTJhYWRlNzQsJGM3YmU1OWUwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4ZjE3NzlkOSwkZmRjM2EyMTksJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk0ZTliZmY2LCQxNTg0NTY0MywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOGRkYTUyMDIsJDM3Njk0ODA5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5NzIzYTFiNywkMjAxMzQyMDMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDhjYTI5YzA0LCQ2NTE0ZTAyMywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTk1ODk5YzgsJDkwZWI4OTkwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4YjcwMzQ0YSwkMTM5YmM3NWEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDliODhiZGFhLCQzYTNkYWUyZiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOGE0MmY4NzAsJDU2NjlkYjQ2LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5ZGI0MjI0ZiwkZmZlMTE1N2MsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDg5MWFjNzNhLCRlOTgxOWI1MCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOWZkYWRjMjYsJDhiN2ExMmRhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4N2Y3ODA4NywkZjc4MDg3ZjgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGExZmNmZjE3LCRjZTczM2JkNCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODZkOTA1NDQsJDdhMzRhY2M2LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhNDFhOWU4ZiwkNTQ0NmZiOWYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDg1YmYzNzYxLCQyY2VlM2M5YiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTYzM2NkN2UsJDY3NzFjZDhiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4NGE5ZjljOCwkMDg0YTlmOWQsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGE4NDg5ZTYwLCQwYjQzNWE1ZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODM5OTMwNTIsJDNmYmUzMzY4LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhYTU5MjMzYywkY2NhNGJkNDksJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDgyOGNiZmJlLCRiOWEwMjBhMywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYWM2NTZkYWUsJDZiY2M0OTg1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4MTg0OGRhOCwkZmFmMGQyNzcsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGFlNmQ4ZWUzLCQ2MGJiMjQ2OCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODA4MDgwODAsJDgwODA4MDgxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiMDcxOTdhMiwkM2M0NmM2NTQsJDAwMDAwMDAwCisJZGMubAkkZjIxMDQ4MDAsJDJkN2MwMDAwLCQwMDAwZmY1NCwkMjIxMDMyMjgKKwlkYy5sCSQwMDA0MmQ1MCwkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGMwYzgxLCQwMDAwMDAwMCwkNmQwMDAxODIsJDBjODEzZmZlCisJZGMubAkkZjA3ZDZkMGEsJDBjODEzZmZmLCQ4ODQxNmYwMCwkMDBlMmUwODEKKwlkYy5sCSRlMDgxMDQ4MSwkMDAwMDNmZmYsJGQyYWVmZjU0LCQ0MWZhZjdiMgorCWRjLmwJJGYyMDE0MDgwLCQyZDdjM2ZmZiwkMDAwMGZmODQsJDJkNmVmZjg4CisJZGMubAkkZmY5NDAyYWUsJGZlMDAwMDAwLCRmZjk0MDBhZSwkMDEwMDAwMDAKKwlkYy5sCSRmZjk0MjIyZSwkZmY5NDAyODEsJDdlMDAwMDAwLCRlMDgxZTA4MQorCWRjLmwJJGU4ODFkMWMxLCRmMjJlNDgwMCwkZmY4NDJkN2MsJDNmZmYwMDAwCisJZGMubAkkZmY5MDQyYWUsJGZmOThmMjJlLCQ0ODI4ZmY5MCwkZjIyN2UwMGMKKwlkYy5sCSRmMjEwNDgyMywkZjIzYTQ4YTMsJGY2YzhmMjAwLCQwMTAwZjIwMAorCWRjLmwJJDA5MjNmMjJlLCQ2ODgwZmY4NCwkZjIwMDA5ODAsJGYyMDAwODgwCisJZGMubAkkZjIzYTU0YTMsJGY2Y2NmMjNhLCQ1NTIzZjZjZSwkZjIzYTU0YTIKKwlkYy5sCSRmNmQwZjIzYSwkNTUyMmY2ZDIsJGYyMDAwY2EzLCRmMjAwMGQyMworCWRjLmwJJGYyM2E1NGEyLCRmNmNjZjIzYSwkNTUyMmY2Y2UsJGYyMDAwY2EzCisJZGMubAkkZDFmYzAwMDAsJDAwMTBmMjAwLCQwZDIzZjIwMCwkMDBhM2YyMDAKKwlkYy5sCSQwODIyZjIxMCwkNDhhMmYyMWYsJGQwMzBmMjAwLCQwNDIyZjIwMAorCWRjLmwJJDkwMDBmMjJlLCQ0ODIyZmY4NCwkNjBmZjAwMDAsJDEwY2NmMjNjCisJZGMubAkkNTgzODAwMDEsJGYyYzEwMDAwLCQxMzE4ZjIwMCwkMDA4MGYyM2EKKwlkYy5sCSQ0NGE4ZjY0ZSwkZjIzYTQ0MjIsJGY2NDhmMjAwLCQwNGEyZjIwMAorCWRjLmwJJDAwYTBmMjI3LCRlMDBjZjIwMCwkMDQwMGYyMDAsJDAwMjNmMjJlCisJZGMubAkkNjg4MGZmODQsJGYyMDAwMDgwLCRmMjAwMDRhMywkZjIzYTU1ODAKKwlkYy5sCSRmNjYwZjIzYSwkNTUwMGY2NjIsJGYyMDAwNWEzLCRmMjAwMDUyMworCWRjLmwJJGYyM2E1NWEyLCRmNjVjZjIzYSwkNTUyMmY2NWUsJGYyMDAwY2EzCisJZGMubAkkZjIwMDAxMjMsJGYyM2E1NGEyLCRmNjU4ZjIyZSwkNDgyM2ZmODQKKwlkYy5sCSRmMjAwMDhhMiwkZjIxZmQwMzAsJGYyMDAwNDIzLCRmMjAwOTAwMAorCWRjLmwJJGYyMmU0ODIyLCRmZjg0NjBmZiwkMDAwMDEwM2UsJDYwZmYwMDAwCisJZGMubAkkMGU5NjJkN2MsJGZmZmZmZjljLCRmZjU0NDhlNywkM2YwMDI2MTAKKwlkYy5sCSQyODI4MDAwNCwkMmEyODAwMDgsJDQyODI0YTg0LCQ2NjM0MjgwNQorCWRjLmwJJDQyODU3NDIwLCQ0Mjg2ZWRjNCwkNjAwMGVkYWMsJGQ0ODYyZDQzCisJZGMubAkkZmY4NDJkNDQsJGZmODgyZDQ1LCRmZjhjNDQ4MiwkMmQ0MmZmNTQKKwlkYy5sCSRmMjJlNDgwMCwkZmY4NDRjZGYsJDAwZmM0MWVlLCRmZjg0NjAwMAorCWRjLmwJJGZlMGM0Mjg2LCRlZGM0NjAwMCwkMjQwNmVkYWMsJDJlMDVlZGFkCisJZGMubAkkNDQ4NjA2ODYsJDAwMDAwMDIwLCRlY2FmODg4NywkMmQ0M2ZmODQKKwlkYy5sCSQyZDQ0ZmY4OCwkMmQ0NWZmOGMsJDQ0ODIyZDQyLCRmZjU0ZjIyZQorCWRjLmwJJDQ4MDBmZjg0LCQ0Y2RmMDBmYywkNDFlZWZmODQsJDYwMDBmZGNlCisJZGMubAkkZjIxMDQ4MDAsJGYyMDAwMDE4LCRmMjNhNDgzOCwkZjVhNGYyOTIKKwlkYy5sCSQwMDE0ZjIwMCwkOTAwMDEyM2MsJDAwMDNmMjEwLCQ0ODAwNjBmZgorCWRjLmwJJDAwMDAwZjdlLCRmMjEwNDgwMCwkMmQ3YzAwMDAsJDAwMDBmZjU0CisJZGMubAkkZjIwMDAwODAsJGYyM2E0NDIyLCRmNTA4ZjIyZSwkNjgwMGZmODQKKwlkYy5sCSQzZDZlZmY4OCwkZmY4NjIyMmUsJGZmODQwYzgxLCQwMDAwMDAwMAorCWRjLmwJJDZmMDAwMGRhLCQwYzgxM2ZmZSwkODAwMDZkMDAsJGZkYTIwYzgxCisJZGMubAkkM2ZmZmMwMDAsJDZlMDBmZDk4LCQwYzgxM2ZmZSwkZjA3ZDZkMDAKKwlkYy5sCSQwMDFhMGM4MSwkM2ZmZjg4NDEsJDZlMDAwMDEwLCRmMjAwMDRhMgorCWRjLmwJJGYyM2E0NDIyLCRmNGJjNjAwMCwkZmU3NjJkNmUsJGZmODhmZjk0CisJZGMubAkkMDJhZWZlMDAsJDAwMDBmZjk0LCQwMGFlMDEwMCwkMDAwMGZmOTQKKwlkYy5sCSQwYzgxM2ZmZiwkODAwMDZjNDQsJGYyM2E0NDAwLCRmNGZjMmQ3YworCWRjLmwJJDNmZmYwMDAwLCRmZjkwNDJhZSwkZmY5OGYyMmUsJDQ4MjhmZjkwCisJZGMubAkkMjIyZWZmOTQsJDAyODE3ZTAwLCQwMDAwZTA4MSwkZTA4MWU4ODEKKwlkYy5sCSRmMjAwMDRhMiwkZjIyN2UwMGMsJGYyMDAwNDIyLCQ0MWZhZjRlMgorCWRjLmwJJGQxYzFmMjNhLCQ0NDgwZjQ2NiwkNjAwMGZkNzYsJGYyM2E0NDAwCisJZGMubAkkZjQ1MDJkN2MsJDNmZmYwMDAwLCRmZjkwNDJhZSwkZmY5OGYyMmUKKwlkYy5sCSQ0ODI4ZmY5MCwkMjIyZWZmOTQsJDAyODE3ZTAwLCQwMDAwZTA4MQorCWRjLmwJJGUwODFlODgxLCRmMjAwMDQyMiwkZjIyN2UwMGMsJDQxZmFmNGEyCisJZGMubAkkZDFjMWYyM2EsJDQ0ODBmNDFlLCQ2MDAwZmQzNiwkMGM4MTAwMDAKKwlkYy5sCSQwMDAwNmQxMCwkZjIzYTQ0MDAsJGY0MTRmMjAwLCQ5MDAwNjBmZgorCWRjLmwJJDAwMDAwYzRlLCRmMjNhNDQwMCwkZjNmY2YyMDAsJDkwMDA2MGZmCisJZGMubAkkMDAwMDBjYjQsJDYwZmYwMDAwLCQwZTk2MjIxMCwkMzIyODAwMDQKKwlkYy5sCSQwMjgxN2ZmZiwkZmZmZjBjODEsJDNmZmY4MDAwLCQ2YzU2ZjIxMAorCWRjLmwJJDQ4MThmMjAwLCQwMDgwZjIwMCwkMDQ5YWYyMDAsJDAwMjJmMjNjCisJZGMubAkkNDRhMjNmODAsJDAwMDBmMjAwLCQwNDIwMjIxMCwkMDI4MTgwMDAKKwlkYy5sCSQwMDAwMDA4MSwkM2YwMDAwMDAsJDJmMDEyZjAwLCQ0MjgwZjIyNworCWRjLmwJJGUwMDE0MWQ3LCQ2MWZmZmZmZiwkZmU1YWRmZmMsJDAwMDAwMDBjCisJZGMubAkkMjAxZmYyMDAsJDkwMDAxMjNjLCQwMDAwZjIxZiwkNDQyMzYwZmYKKwlkYy5sCSQwMDAwMGRkZSwkZjIxMDQ4MTgsJGYyM2M0NDM4LCQzZjgwMDAwMAorCWRjLmwJJGYyZDIwMDAwLCQwYzMyNjBmZiwkMDAwMDBiYjYsJDYwZmYwMDAwCisJZGMubAkkMGUwZTNmZmQsJDAwMDBkZTViLCRkOGE5MzcyOCwkNzE5NTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI4YWEsJDNiMjk1YzE3LCRmMGJjMDAwMAorCWRjLmwJJDAwMDBmMjNjLCQ1ODAwMDAwMSwkZjIxMDQ4MzgsJGYyYzEwMDAwCisJZGMubAkkMGZmMDIyMTAsJDZkMDAwMDkwLCQyZjAwNDI4MCwkNjFmZmZmZmYKKwlkYy5sCSRmYmEyZjIxZiwkOTAwMGYyM2EsJDQ4MjNmZmI4LCQ2MGZmMDAwMAorCWRjLmwJJDBkNzgyMjEwLCQ2ZDAwMDA3MCwkMmYwMDQyODAsJDYxZmZmZmZmCisJZGMubAkkZmQzNGYyMWYsJDkwMDBmMjNhLCQ0ODIzZmY5OCwkNjBmZjAwMDAKKwlkYy5sCSQwZDY4MjIxMCwkNmQwMDAwNTAsJDIyMjgwMDA4LCQ2NjJlMjIyOAorCWRjLmwJJDAwMDQwMjgxLCQ3ZmZmZmZmZiwkNjYyMjMyMTAsJDAyODEwMDAwCisJZGMubAkkN2ZmZjA0ODEsJDAwMDAzZmZmLCQ2N2ZmMDAwMCwkMGY4NGYyMDAKKwlkYy5sCSQ5MDAwZjIwMSwkNDAwMDYwZmYsJDAwMDAwZDFlLCQyZjAwNDI4MAorCWRjLmwJJDYxZmZmZmZmLCRmYjJlZjIxZiwkOTAwMGYyM2EsJDQ4MjNmZjU0CisJZGMubAkkNjBmZjAwMDAsJDBkMDQ2MGZmLCQwMDAwMGI1YywkMjIxMDZkMDAKKwlkYy5sCSRmZmY2MmYwMCwkNDI4MDYxZmYsJGZmZmZmY2JhLCRmMjFmOTAwMAorCWRjLmwJJGYyM2E0ODIzLCRmZjJlNjBmZiwkMDAwMDBjZWUsJDQwNmE5MzRmCisJZGMubAkkMDk3OWEzNzEsJDNmNzM0NDEzLCQ1MDlmODAwMCwkYmZjZDAwMDAKKwlkYy5sCSRjMDIxOWRjMSwkZGE5OTRmZDIsJDAwMDAwMDAwLCQ0MDAwMDAwMAorCWRjLmwJJDkzNWQ4ZGRkLCRhYWE4YWMxNywkMDAwMDAwMDAsJDNmZmUwMDAwCisJZGMubAkkYjE3MjE3ZjcsJGQxY2Y3OWFjLCQwMDAwMDAwMCwkM2Y1NmMxNmQKKwlkYy5sCSQ2ZjdiZDBiMiwkM2Y4MTExMTIsJDMwMmM3MTJjLCQzZmE1NTU1NQorCWRjLmwJJDU1NTU0Y2MxLCQzZmM1NTU1NSwkNTU1NTRhNTQsJDNmZTAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkM2ZmZjAwMDAKKwlkYy5sCSQ4MDAwMDAwMCwkMDAwMDAwMDAsJDNmNzM4MDAwLCQzZmZmMDAwMAorCWRjLmwJJDgxNjRkMWYzLCRiYzAzMDc3MywkM2ZiZWY3Y2EsJDNmZmYwMDAwCisJZGMubAkkODJjZDg2OTgsJGFjMmJhMWQ3LCQzZmJkZjhhOSwkM2ZmZjAwMDAKKwlkYy5sCSQ4NDNhMjhjMywkYWNkZTQwNDYsJDNmYmNkN2M5LCQzZmZmMDAwMAorCWRjLmwJJDg1YWFjMzY3LCRjYzQ4N2IxNSwkYmZiZGU4ZGEsJDNmZmYwMDAwCisJZGMubAkkODcxZjYxOTYsJDllOGQxMDEwLCQzZmJkZTg1YywkM2ZmZjAwMDAKKwlkYy5sCSQ4ODk4MGU4MCwkOTJkYTg1MjcsJDNmYmViYmYxLCQzZmZmMDAwMAorCWRjLmwJJDhhMTRkNTc1LCQ0OTZlZmQ5YSwkM2ZiYjgwY2EsJDNmZmYwMDAwCisJZGMubAkkOGI5NWMxZTMsJGVhOGJkNmU3LCRiZmJhODM3MywkM2ZmZjAwMDAKKwlkYy5sCSQ4ZDFhZGY1YiwkN2U1YmE5ZTYsJGJmYmU5NjcwLCQzZmZmMDAwMAorCWRjLmwJJDhlYTQzOThiLCQ0NWNkNTNjMCwkM2ZiZGI3MDAsJDNmZmYwMDAwCisJZGMubAkkOTAzMWRjNDMsJDE0NjZiMWRjLCQzZmJlZWViMCwkM2ZmZjAwMDAKKwlkYy5sCSQ5MWMzZDM3MywkYWIxMWMzMzYsJDNmYmJmZDZkLCQzZmZmMDAwMAorCWRjLmwJJDkzNWEyYjJmLCQxM2U2ZTkyYywkYmZiZGIzMTksJDNmZmYwMDAwCisJZGMubAkkOTRmNGVmYTgsJGZlZjcwOTYxLCQzZmJkYmEyYiwkM2ZmZjAwMDAKKwlkYy5sCSQ5Njk0MmQzNywkMjAxODVhMDAsJDNmYmU5MWQ1LCQzZmZmMDAwMAorCWRjLmwJJDk4MzdmMDUxLCQ4ZGI4YTk2ZiwkM2ZiZThkNWEsJDNmZmYwMDAwCisJZGMubAkkOTllMDQ1OTMsJDIwYjdmYTY1LCRiZmJjZGU3YiwkM2ZmZjAwMDAKKwlkYy5sCSQ5YjhkMzliOSwkZDU0ZTU1MzksJGJmYmViYWFmLCQzZmZmMDAwMAorCWRjLmwJJDlkM2VkOWE3LCQyY2ZmYjc1MSwkYmZiZDg2ZGEsJDNmZmYwMDAwCisJZGMubAkkOWVmNTMyNjAsJDkxYTExMWFlLCRiZmJlYmVkZCwkM2ZmZjAwMDAKKwlkYy5sCSRhMGIwNTEwZiwkYjk3MTRmYzIsJDNmYmNjOTZlLCQzZmZmMDAwMAorCWRjLmwJJGEyNzA0MzAzLCQwYzQ5NjgxOSwkYmZiZWM5MGIsJDNmZmYwMDAwCisJZGMubAkkYTQzNTE1YWUsJDA5ZTY4MDllLCQzZmJiZDFkYiwkM2ZmZjAwMDAKKwlkYy5sCSRhNWZlZDZhOSwkYjE1MTM4ZWEsJDNmYmNlNWViLCQzZmZmMDAwMAorCWRjLmwJJGE3Y2Q5M2I0LCRlOTY1MzU2YSwkYmZiZWMyNzQsJDNmZmYwMDAwCisJZGMubAkkYTlhMTVhYjQsJGVhN2MwZWY4LCQzZmJlYTgzYywkM2ZmZjAwMDAKKwlkYy5sCSRhYjdhMzliNSwkYTkzZWQzMzcsJDNmYmVjYjAwLCQzZmZmMDAwMAorCWRjLmwJJGFkNTgzZWVhLCQ0MmExNGFjNiwkM2ZiZTkzMDEsJDNmZmYwMDAwCisJZGMubAkkYWYzYjc4YWQsJDY5MGE0Mzc1LCRiZmJkODM2NywkM2ZmZjAwMDAKKwlkYy5sCSRiMTIzZjU4MSwkZDJhYzI1OTAsJGJmYmVmMDVmLCQzZmZmMDAwMAorCWRjLmwJJGIzMTFjNDEyLCRhOTExMjQ4OSwkM2ZiZGZiM2MsJDNmZmYwMDAwCisJZGMubAkkYjUwNGYzMzMsJGY5ZGU2NDg0LCQzZmJlYjJmYiwkM2ZmZjAwMDAKKwlkYy5sCSRiNmZkOTFlMywkMjhkMTc3OTEsJDNmYmFlMmNiLCQzZmZmMDAwMAorCWRjLmwJJGI4ZmJhZjQ3LCQ2MmZiOWVlOSwkM2ZiY2RjM2MsJDNmZmYwMDAwCisJZGMubAkkYmFmZjVhYjIsJDEzM2U0NWZiLCQzZmJlZTlhYSwkM2ZmZjAwMDAKKwlkYy5sCSRiZDA4YTM5ZiwkNTgwYzM2YmYsJGJmYmVhZWZkLCQzZmZmMDAwMAorCWRjLmwJJGJmMTc5OWI2LCQ3YTczMTA4MywkYmZiY2JmNTEsJDNmZmYwMDAwCisJZGMubAkkYzEyYzRjY2EsJDY2NzA5NDU2LCQzZmJlZjg4YSwkM2ZmZjAwMDAKKwlkYy5sCSRjMzQ2Y2NkYSwkMjQ5NzY0MDcsJDNmYmQ4M2IyLCQzZmZmMDAwMAorCWRjLmwJJGM1NjcyYTExLCQ1NTA2ZGFkZCwkM2ZiZGY4YWIsJDNmZmYwMDAwCisJZGMubAkkYzc4ZDc0YzgsJGFiYjliMTVkLCRiZmJkZmIxNywkM2ZmZjAwMDAKKwlkYy5sCSRjOWI5YmQ4NiwkNmUyZjI3YTMsJGJmYmVmZTNjLCQzZmZmMDAwMAorCWRjLmwJJGNiZWMxNGZlLCRmMjcyN2M1ZCwkYmZiYmI2ZjgsJDNmZmYwMDAwCisJZGMubAkkY2UyNDhjMTUsJDFmODQ4MGU0LCRiZmJjZWU1MywkM2ZmZjAwMDAKKwlkYy5sCSRkMDYzMzNkYSwkZWYyYjI1OTUsJGJmYmRhNGFlLCQzZmZmMDAwMAorCWRjLmwJJGQyYTgxZDkxLCRmMTJhZTQ1YSwkM2ZiYzkxMjQsJDNmZmYwMDAwCisJZGMubAkkZDRmMzVhYWIsJGNmZWRmYTFmLCQzZmJlYjI0MywkM2ZmZjAwMDAKKwlkYy5sCSRkNzQ0ZmNjYSwkZDY5ZDZhZjQsJDNmYmRlNjlhLCQzZmZmMDAwMAorCWRjLmwJJGQ5OWQxNWMyLCQ3OGFmZDdiNiwkYmZiOGJjNjEsJDNmZmYwMDAwCisJZGMubAkkZGJmYmI3OTcsJGRhZjIzNzU1LCQzZmJkZjYxMCwkM2ZmZjAwMDAKKwlkYy5sCSRkZTYwZjQ4MiwkNWUwZTkxMjQsJGJmYmQ4YmUxLCQzZmZmMDAwMAorCWRjLmwJJGUwY2NkZWVjLCQyYTk0ZTExMSwkM2ZiYWNiMTIsJDNmZmYwMDAwCisJZGMubAkkZTMzZjg5NzIsJGJlOGE1YTUxLCQzZmJiOWJmZSwkM2ZmZjAwMDAKKwlkYy5sCSRlNWI5MDZlNywkN2M4MzQ4YTgsJDNmYmNmMmY0LCQzZmZmMDAwMAorCWRjLmwJJGU4Mzk2YTUwLCQzYzRiZGM2OCwkM2ZiZWYyMmYsJDNmZmYwMDAwCisJZGMubAkkZWFjMGM2ZTcsJGRkMjQzOTJmLCRiZmJkYmY0YSwkM2ZmZjAwMDAKKwlkYy5sCSRlZDRmMzAxZSwkZDk5NDJiODQsJDNmYmVjMDFhLCQzZmZmMDAwMAorCWRjLmwJJGVmZTRiOTliLCRkY2RhZjVjYiwkM2ZiZThjYWMsJDNmZmYwMDAwCisJZGMubAkkZjI4MTc3M2MsJDU5ZmZiMTNhLCRiZmJjYmIzZiwkM2ZmZjAwMDAKKwlkYy5sCSRmNTI1N2QxNSwkMjQ4NmNjMmMsJDNmYmVmNzNhLCQzZmZmMDAwMAorCWRjLmwJJGY3ZDBkZjczLCQwYWQxM2JiOSwkYmZiOGI3OTUsJDNmZmYwMDAwCisJZGMubAkkZmE4M2IyZGIsJDcyMmEwMzNhLCQzZmJlZjg0YiwkM2ZmZjAwMDAKKwlkYy5sCSRmZDNlMGMwYywkZjQ4NmMxNzUsJGJmYmVmNTgxLCRmMjEwZDA4MAorCWRjLmwJJDIyMTAzMjI4LCQwMDA0ZjIyZSwkNjgwMGZmODQsJDAyODE3ZmZmCisJZGMubAkkZmZmZjBjODEsJDNmYjk4MDAwLCQ2YzA0NjAwMCwkMDA4ODBjODEKKwlkYy5sCSQ0MDBkODBjMCwkNmYwNDYwMDAsJDAwN2NmMjAwLCQwMDgwZjIzYworCWRjLmwJJDQ0YTM0MjgwLCQwMDAwZjIyZSwkNjA4MGZmNTQsJDJmMDI0M2ZhCisJZGMubAkkZmJiY2YyMmUsJDQwODBmZjU0LCQyMjJlZmY1NCwkMjQwMTAyODEKKwlkYy5sCSQwMDAwMDAzZiwkZTk4MWQzYzEsJGVjODIyMjAyLCRlMjgxOTQ4MQorCWRjLmwJJDA2ODIwMDAwLCQzZmZmZjIyNywkZTAwY2YyM2MsJDQ0YTMzYzgwCisJZGMubAkkMDAwMDJkNTksJGZmODQyZDU5LCRmZjg4MmQ1OSwkZmY4YzNkNTkKKwlkYy5sCSRmZjkwZjIwMCwkMDQyODNkNTksJGZmOTQ0MjZlLCRmZjk2NDJhZQorCWRjLmwJJGZmOThkMzZlLCRmZjg0ZjIzYSwkNDgyM2ZiMjIsJGQzNmVmZjkwCisJZGMubAkkNjAwMDAxMDAsJDBjODEzZmZmLCQ4MDAwNmUxMiwkZjIwMDkwMDAKKwlkYy5sCSRmMjNjNDQyMiwkM2Y4MDAwMDAsJDYwZmYwMDAwLCQwN2I0MjIyZQorCWRjLmwJJGZmODQwYzgxLCQwMDAwMDAwMCwkNmQwNjYwZmYsJDAwMDAwNzY0CisJZGMubAkkNjBmZjAwMDAsJDA2NjZmMjAwLCQ5MDAwZjIzYywkNDQwMDNmODAKKwlkYy5sCSQwMDAwMjIxMCwkMDA4MTAwODAsJDAwMDFmMjAxLCQ0NDIyNjBmZgorCWRjLmwJJDAwMDAwNzdlLCRmMjEwZDA4MCwkMjIxMDMyMjgsJDAwMDRmMjJlCisJZGMubAkkNjgwMGZmODQsJDAyODE3ZmZmLCRmZmZmMGM4MSwkM2ZiOTgwMDAKKwlkYy5sCSQ2YzA0NjAwMCwkZmY5MDBjODEsJDQwMGI5YjA3LCQ2ZjA0NjAwMAorCWRjLmwJJGZmODRmMjAwLCQwMDgwZjIzYSwkNTRhM2ZhNjIsJGYyMmU2MDgwCisJZGMubAkkZmY1NDJmMDIsJDQzZmFmYWM2LCRmMjJlNDA4MCwkZmY1NDIyMmUKKwlkYy5sCSRmZjU0MjQwMSwkMDI4MTAwMDAsJDAwM2ZlOTgxLCRkM2MxZWM4MgorCWRjLmwJJDIyMDJlMjgxLCQ5NDgxMDY4MiwkMDAwMDNmZmYsJGYyMjdlMDBjCisJZGMubAkkZjIwMDA1MDAsJGYyM2E1NGEzLCRmYTJjMmQ1OSwkZmY4NGYyM2EKKwlkYy5sCSQ0OTIzZmEyYSwkMmQ1OWZmODgsJDJkNTlmZjhjLCRmMjAwMDQyOAorCWRjLmwJJDNkNTlmZjkwLCRmMjAwMDgyOCwkM2Q1OWZmOTQsJDQyNmVmZjk2CisJZGMubAkkNDJhZWZmOTgsJGYyM2E0ODIzLCRmYTE0ZDM2ZSwkZmY4NGQzNmUKKwlkYy5sCSRmZjkwZjIwMCwkMDA4MGYyMDAsJDA0YTNmMjNhLCQ1NTAwZmExZQorCWRjLmwJJGYyM2E1NTgwLCRmYTIwZjIwMCwkMDUyM2YyMDAsJDA1YTNmMjNhCisJZGMubAkkNTUyMmZhMWEsJGYyM2E1NWEyLCRmYTFjZjIwMCwkMDUyM2YyMDAKKwlkYy5sCSQwNWEzZjIzYSwkNTUyMmZhMTYsJGYyMDAwMWEzLCRmMjAwMDUyMworCWRjLmwJJGYyMDAwYzIyLCRmMjAwMDgyMiwkZjIxZmQwMzAsJGYyMmU0ODIzCisJZGMubAkkZmY4NGYyMmUsJDQ4MjJmZjkwLCRmMjJlNDgyMiwkZmY4NGYyMDAKKwlkYy5sCSQ5MDAwM2Q0MiwkZmY4NDI0MWYsJDJkN2M4MDAwLCQwMDAwZmY4OAorCWRjLmwJJDQyYWVmZjhjLCQxMjNjMDAwMCwkZjIyZTQ4MjMsJGZmODQ2MGZmCisJZGMubAkkMDAwMDA2M2UsJGYyMDA5MDAwLCRmMjNjNDQwMCwkM2Y4MDAwMDAKKwlkYy5sCSQyMjEwMDA4MSwkMDA4MDAwMDEsJGYyMDE0NDIyLCQ2MGZmMDAwMAorCWRjLmwJJDA2MzAyZjAwLCQzMjI5MDAwMCwkNWJlZWZmNTQsJDAyODEwMDAwCisJZGMubAkkN2ZmZjMwMjgsJDAwMDAwMjQwLCQ3ZmZmMGM0MCwkM2ZmZjZkMDAKKwlkYy5sCSQwMGMwMGM0MCwkNDAwYzZlMDAsJDAwYTRmMjI4LCQ0ODAzMDAwMAorCWRjLmwJJGYyMDA2MDAwLCRmMjNjODgwMCwkMDAwMDAwMDAsJDRhMjkwMDA0CisJZGMubAkkNmI1ZTJmMDAsJDNkNjkwMDAwLCRmZjg0MmQ2OSwkMDAwNGZmODgKKwlkYy5sCSQyZDY5MDAwOCwkZmY4YzQxZWUsJGZmODQ2MWZmLCQwMDAwMGIyYQorCWRjLmwJJDQ0ODBkMDlmLCRmMjJlZDA4MCwkZmY4NDBjNDAsJGMwMDE2YzM2CisJZGMubAkkZjIxZjkwMDAsJDIyM2M4MDAwLCQwMDAwMDQ4MCwkZmZmZmMwMDEKKwlkYy5sCSQ0NDgwMGMwMCwkMDAyMDZjMGEsJGUwYTk0MmE3LCQyZjAxNDJhNworCWRjLmwJJDYwMjgwNDAwLCQwMDIwZTBhOSwkMmYwMTQyYTcsJDQyYTc2MDFhCisJZGMubAkkZjIyOWQwODAsJDAwMDBmMjFmLCQ5MDAwMDY0MCwkM2ZmZjQ4NDAKKwlkYy5sCSQ0MmE3MmYzYywkODAwMDAwMDAsJDJmMDBmMjAwLCRiMDAwMTIzYworCWRjLmwJJDAwMDBmMjFmLCQ0ODIzNjBmZiwkMDAwMDA1NGMsJDIwMWZjMTQ5CisJZGMubAkkNGEyOTAwMDAsJDZiZmYwMDAwLCQwNDFjNjBmZiwkMDAwMDA0NjQKKwlkYy5sCSQ0YTI5MDAwNCwkNmExNjIwMWYsJGYyMDA5MDAwLCQxMjNjMDAwMworCWRjLmwJJGYyMjk0ODAwLCQwMDAwNjBmZiwkMDAwMDA1MWMsJDIwMWYyMDQ5CisJZGMubAkkNjBmZjAwMDAsJDA1ODYwMDAxLCQwMDAwODAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDQyMmUsJGZmNjUyZjAwLCQ0MjJlZmY1YworCWRjLmwJJDYwMGM0MjJlLCRmZjY1MmYwMCwkMWQ3YzAwMDEsJGZmNWM0OGU3CisJZGMubAkkM2YwMDM2MjgsJDAwMDAzZDQzLCRmZjU4MDI4MywkMDAwMDdmZmYKKwlkYy5sCSQyODI4MDAwNCwkMmEyODAwMDgsJDRhODM2NjNjLCQyNjNjMDAwMAorCWRjLmwJJDNmZmU0YTg0LCQ2NjE2MjgwNSwkNDI4NTA0ODMsJDAwMDAwMDIwCisJZGMubAkkNDI4NmVkYzQsJDYwMDBlZGFjLCQ5Njg2NjAyMiwkNDI4NmVkYzQKKwlkYy5sCSQ2MDAwOTY4NiwkZWRhYzJlMDUsJGVkYWQ0NDg2LCQwNjg2MDAwMAorCWRjLmwJJDAwMjBlY2FmLCQ4ODg3NjAwNiwkMDY4MzAwMDAsJDNmZmUzMDI5CisJZGMubAkkMDAwMDNkNDAsJGZmNWEzMjJlLCRmZjU4YjE4MSwkMDI4MTAwMDAKKwlkYy5sCSQ4MDAwM2Q0MSwkZmY1ZTAyODAsJDAwMDA3ZmZmLCQyMjI5MDAwNAorCWRjLmwJJDI0MjkwMDA4LCQ0YTgwNjYzYywkMjAzYzAwMDAsJDNmZmU0YTgxCisJZGMubAkkNjYxNjIyMDIsJDQyODIwNDgwLCQwMDAwMDAyMCwkNDI4NmVkYzEKKwlkYy5sCSQ2MDAwZWRhOSwkOTA4NjYwMjIsJDQyODZlZGMxLCQ2MDAwOTA4NgorCWRjLmwJJGVkYTkyZTAyLCRlZGFhNDQ4NiwkMDY4NjAwMDAsJDAwMjBlY2FmCisJZGMubAkkODI4NzYwMDYsJDA2ODAwMDAwLCQzZmZlMmQ0MywkZmY1NDJmMDAKKwlkYy5sCSQ5MDgzNDI4NiwkNDI4MzIyN2MsJDAwMDAwMDAwLCQ0YTgwNmMwNgorCWRjLmwJJDIwMWY2MDAwLCQwMDZhNTg4ZiwkNGE4NjZlMGUsJGIyODQ2NjA4CisJZGMubAkkYjQ4NTY2MDQsJDYwMDAwMTM2LCQ2NTA4OTQ4NSwkOTM4NDQyODYKKwlkYy5sCSQ1MjgzNGE4MCwkNjcwZWQ2ODMsJGQ0ODJlMzkxLCQ1NWM2NTI4OQorCWRjLmwJJDUzODA2MGQ0LCQyMDJlZmY1NCwkNGE4MTY2MTYsJDIyMDI0MjgyCisJZGMubAkkMDQ4MDAwMDAsJDAwMjA0Mjg2LCRlZGMxNjAwMCwkZWRhOTkwODYKKwlkYy5sCSQ2MDFjNDI4NiwkZWRjMTYwMDAsJDZiMTQ5MDg2LCRlZGE5MmUwMgorCWRjLmwJJGVkYWE0NDg2LCQwNjg2MDAwMCwkMDAyMGVjYWYsJDgyODcwYzgwCisJZGMubAkkMDAwMDQxZmUsJDZjMmEzZDQwLCRmZjkwMmQ0MSwkZmY5NDJkNDIKKwlkYy5sCSRmZjk4MmMyZSwkZmY1NDNkNDYsJGZmODQyZDQ0LCRmZjg4MmQ0NQorCWRjLmwJJGZmOGNmMjJlLCQ0ODAwZmY5MCwkMWQ3YzAwMDEsJGZmNWQ2MDM2CisJZGMubAkkMmQ0MWZmOTQsJDJkNDJmZjk4LCQwNDgwMDAwMCwkM2ZmZTNkNDAKKwlkYy5sCSRmZjkwMmMyZSwkZmY1NDA0ODYsJDAwMDAzZmZlLCQyZDQ2ZmY1NAorCWRjLmwJJGYyMmU0ODAwLCRmZjkwM2Q0NiwkZmY4NDJkNDQsJGZmODgyZDQ1CisJZGMubAkkZmY4YzQyMmUsJGZmNWQ0YTJlLCRmZjVjNjcyMiwkMmMyZWZmNTQKKwlkYy5sCSQ1Mzg2YjA4NiwkNmQxODZlMGUsJGIyODQ2NjA4LCRiNDg1NjYwNAorCWRjLmwJJDYwMDAwMDdhLCQ2NTA4ZjIyZSwkNDgyOGZmODQsJDUyODMzYzJlCisJZGMubAkkZmY1YTZjMDQsJGYyMDAwMDFhLCQ0Mjg2M2MyZSwkZmY1ZTdlMDgKKwlkYy5sCSRlZWFlMDI4MywkMDAwMDAwN2YsJDg2ODYxZDQzLCRmZjY1NGNkZgorCWRjLmwJJDAwZmMyMDFmLCRmMjAwOTAwMCwkNGEyZWZmNWQsJDY3MTAxMjNjCisJZGMubAkkMDAwMGYyM2EsJDQ4MjNmZGMwLCQ2MGZmMDAwMCwkMDJjYTEyM2MKKwlkYy5sCSQwMDAzZjIwMCwkMDAwMDYwZmYsJDAwMDAwMmJjLCQ1MjgzMGM4MAorCWRjLmwJJDAwMDAwMDA4LCQ2YzA0ZTFhYiwkNjAwMjQyODMsJGYyM2M0NDAwCisJZGMubAkkMDAwMDAwMDAsJDQyMmVmZjVkLCQ2MDAwZmY5NCwkMmMwMzAyODYKKwlkYy5sCSQwMDAwMDAwMSwkNGE4NjY3MDAsJGZmODY1MjgzLCQzYzJlZmY1YQorCWRjLmwJJDBhODYwMDAwLCQ4MDAwM2Q0NiwkZmY1YTYwMDAsJGZmNzIzMDI4CisJZGMubAkkMDAwMDAyNDAsJDdmZmYwYzQwLCQ3ZmZmNjczOCwkMDgyODAwMDcKKwlkYy5sCSQwMDA0NjcwNiwkMTAzYzAwMDAsJDRlNzU0YTQwLCQ2NjE4NGFhOAorCWRjLmwJJDAwMDQ2NjBjLCQ0YWE4MDAwOCwkNjYwNjEwM2MsJDAwMDE0ZTc1CisJZGMubAkkMTAzYzAwMDQsJDRlNzU2MWZmLCQwMDAwMDdmNiwkNGU3NTEwM2MKKwlkYy5sCSQwMDA2NGU3NSwkNGFhODAwMDgsJDY2MTIyMDI4LCQwMDA0MDI4MAorCWRjLmwJJDdmZmZmZmZmLCQ2NjA2MTAzYywkMDAwMjRlNzUsJDEwM2MwMDAzCisJZGMubAkkNGU3NTdmZmYsJDAwMDBmZmZmLCRmZmZmZmZmZiwkZmZmZjRhMjgKKwlkYy5sCSQwMDAwNmEzOCwkMDBhZTBhMDAsJDA0MTBmZjY0LCQwODJlMDAwMgorCWRjLmwJJGZmNjI2NjBhLCRmMjNjNDQwMCwkZmY4MDAwMDAsJDRlNzVmMjJlCisJZGMubAkkZDA4MGZmZGMsJGYyMmU5MDAwLCRmZjYwZjIzYywkNDQ4MGJmODAKKwlkYy5sCSQwMDAwZjIzYywkNDRhMDAwMDAsJDAwMDA0ZTc1LCQwMGFlMDIwMAorCWRjLmwJJDA0MTBmZjY0LCQwODJlMDAwMiwkZmY2MjY2MGEsJGYyM2M0NDAwCisJZGMubAkkN2Y4MDAwMDAsJDRlNzVmMjJlLCRkMDgwZmZkYywkZjIyZTkwMDAKKwlkYy5sCSRmZjYwZjIzYywkNDQ4MDNmODAsJDAwMDBmMjNjLCQ0NGEwMDAwMAorCWRjLmwJJDAwMDA0ZTc1LCQwMGFlMDEwMCwkMjA4MGZmNjQsJDA4MmUwMDA1CisJZGMubAkkZmY2MjY2MDgsJGYyM2FkMDgwLCRmZjZhNGU3NSwkZjIyZWQwODAKKwlkYy5sCSRmZmRjZjIyZSwkOTAwMGZmNjAsJGYyMjdlMDA0LCRmMjNjNDUwMAorCWRjLmwJJDdmODAwMDAwLCRmMjNjNDUyMywkMDAwMDAwMDAsJGYyMWZkMDIwCisJZGMubAkkNGU3NTdmZmUsJDAwMDBmZmZmLCRmZmZmZmZmZiwkZmZmZmZmZmUKKwlkYy5sCSQwMDAwZmZmZiwkZmZmZmZmZmYsJGZmZmYwMDAwLCQwMDAwODAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwODAwMCwkMDAwMDgwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDRhMjgsJDAwMDA2YTI2LCQwMGFlMDgwMCwkMGEyOGZmNjQKKwlkYy5sCSRmMjJlOTAwMCwkZmY2MGYyM2EsJGQwODBmZmRjLCRmMjNhNDgyMworCWRjLmwJJGZmY2FmMjAwLCRhODAwZTE5OCwkMWQ0MGZmNjQsJDRlNzUwMDZlCisJZGMubAkkMGEyOGZmNjYsJGYyMmU5MDAwLCRmZjYwZjIzYSwkZDA4MGZmYWMKKwlkYy5sCSRmMjAwMDAyMywkZjIwMGE4MDAsJGUxOTgxZDQwLCRmZjY0NGU3NQorCWRjLmwJJDAwYWUwMDAwLCQxMDQ4ZmY2NCwkMTIwMDAyMDEsJDAwYzA2NzAwCisJZGMubAkkMDA1YTNkNjgsJDAwMDBmZjg0LCQyZDY4MDAwNCwkZmY4ODJkNjgKKwlkYy5sCSQwMDA4ZmY4YywkNDFlZWZmODQsJDQ4ZTdjMDgwLCQ2MWZmMDAwMAorCWRjLmwJJDA2MTg0Y2RmLCQwMTAzMGMwMSwkMDA0MDY2MTAsJDRhYTgwMDA4CisJZGMubAkkNjYxODRhMjgsJDAwMDc2NjEyLCQ2MDAwMDAyMCwkMjIyODAwMDgKKwlkYy5sCSQwMjgxMDAwMCwkMDdmZjY3MDAsJDAwMTIwMGFlLCQwMDAwMDIwMAorCWRjLmwJJGZmNjQ2MDA2LCQwMDZlMTI0OCwkZmY2NjRhMjgsJDAwMDA2YTIyCisJZGMubAkkZjIyZTkwMDAsJGZmNjBmMjNhLCRkMDgwZmYxNCwkZjIzYTQ4MjMKKwlkYy5sCSRmZjAyZjIwMCwkYTgwMGUxOTgsJDAwMDAwMDAwLCQxZDQwZmY2NAorCWRjLmwJJDRlNzVmMjJlLCQ5MDAwZmY2MCwkZjIzYWQwODAsJGZlZTZmMjNhCisJZGMubAkkNDgyM2ZlZTAsJGYyMDBhODAwLCRlMTk4MWQ0MCwkZmY2NDRlNzUKKwlkYy5sCSQwMDZlMTI0OCwkZmY2NmYyMmUsJDkwMDBmZjYwLCRmMjNhZDA4MAorCWRjLmwJJGZlYzJmMjNhLCQ0ODIzZmViYywkZjIwMGE4MDAsJGUxOTgxZDQwCisJZGMubAkkZmY2NDRlNzUsJGYyMDBhODAwLCQ4MWFlZmY2NCwkNjAyMGYyMDAKKwlkYy5sCSRhODAwODFhZSwkZmY2NGYyOTQsJDAwMGVmMjgxLCQwMDMyMDA2ZQorCWRjLmwJJDAyMDhmZjY2LCQ2MDA4MDBhZSwkMDgwMDAyMDgsJGZmNjQwODJlCisJZGMubAkkMDAwMWZmNjIsJDY2MDI0ZTc1LCRmMjJlOTAwMCwkZmY2MGYyM2MKKwlkYy5sCSQ0NDgwM2Y4MCwkMDAwMGYyM2EsJDQ4YTJmZTgwLCQ0ZTc1MWQ3YworCWRjLmwJJDAwMDRmZjY0LCQwMDZlMDIwOCwkZmY2NjRlNzUsJGYyMmU5MDAwCisJZGMubAkkZmY2MGYyMjgsJDQ4MDAwMDAwLCRmMjAwYTgwMCwkMDA4MDAwMDAKKwlkYy5sCSQwYTI4ODFhZSwkZmY2NDRlNzUsJGYyMmU5MDAwLCRmZjYwZjIyOAorCWRjLmwJJDQ4MDAwMDAwLCRmMjAwYTgwMCwkODFhZWZmNjQsJDRlNzU0ZTc1CisJZGMubAkkZjIyOTQ4MDAsJDAwMDA0YTI5LCQwMDAwNmIwOCwkMWQ3YzAwMDEKKwlkYy5sCSRmZjY0NGU3NSwkMWQ3YzAwMDksJGZmNjQ0ZTc1LCRmMjI4NDgwMAorCWRjLmwJJDAwMDA0YTI4LCQwMDAwNmIwOCwkMWQ3YzAwMDEsJGZmNjQ0ZTc1CisJZGMubAkkMWQ3YzAwMDksJGZmNjQ0ZTc1LCRmMjI3YjAwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZjQ0MDAsJDAwMDhmMjFmLCQ5MDAwZjIyZgorCWRjLmwJJDQ0MjIwMDA4LCQ0ZTc1ZjIyNywkYjAwMGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMGYyMmYsJDU0MDAwMDA4LCRmMjFmOTAwMCwkZjIyZjU0MjIKKwlkYy5sCSQwMDBjNGU3NSwkZjIyZmQwODAsJDAwMDRmMjJmLCQ0ODIyMDAxMAorCWRjLmwJJDRlNzVmMjI3LCRiMDAwZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJmCisJZGMubAkkNDQwMDAwMDgsJGYyMWY5MDAwLCRmMjJmNDQyOCwkMDAwODRlNzUKKwlkYy5sCSRmMjI3YjAwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJmNTQwMAorCWRjLmwJJDAwMDhmMjFmLCQ5MDAwZjIyZiwkNTQyODAwMGMsJDRlNzVmMjJmCisJZGMubAkkZDA4MDAwMDQsJGYyMmY0ODI4LCQwMDEwNGU3NSwkZjIyN2IwMDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmY0NDAwLCQwMDA4ZjIxZgorCWRjLmwJJDkwMDBmMjJmLCQ0NDIzMDAwOCwkNGU3NWYyMjcsJGIwMDBmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJmLCQ1NDAwMDAwOCwkZjIxZjkwMDAKKwlkYy5sCSRmMjJmNTQyMywkMDAwYzRlNzUsJGYyMmZkMDgwLCQwMDA0ZjIyZgorCWRjLmwJJDQ4MjMwMDEwLCQ0ZTc1ZjIyNywkYjAwMGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMGYyMmYsJDQ0MDAwMDA4LCRmMjFmOTAwMCwkZjIyZjQ0MjAKKwlkYy5sCSQwMDA4NGU3NSwkZjIyN2IwMDAsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmY1NDAwLCQwMDA4ZjIxZiwkOTAwMGYyMmYsJDU0MjAwMDBjCisJZGMubAkkNGU3NWYyMmYsJGQwODAwMDA0LCRmMjJmNDgyMCwkMDAxMDRlNzUKKwlkYy5sCSRmMjJmNDQxOCwkMDAwNDRlNzUsJGYyMmY1NDE4LCQwMDA0NGU3NQorCWRjLmwJJGYyMmY0ODE4LCQwMDA0NGU3NSwkZjIyZjQ0MWEsJDAwMDQ0ZTc1CisJZGMubAkkZjIyZjU0MWEsJDAwMDQ0ZTc1LCRmMjJmNDgxYSwkMDAwNDRlNzUKKwlkYy5sCSRmMjJmNDQwNCwkMDAwNDRlNzUsJGYyMmY1NDA0LCQwMDA0NGU3NQorCWRjLmwJJGYyMmY0ODA0LCQwMDA0NGU3NSwkZjIyZjQ0MDEsJDAwMDQ0ZTc1CisJZGMubAkkZjIyZjU0MDEsJDAwMDQ0ZTc1LCRmMjJmNDgwMSwkMDAwNDRlNzUKKwlkYy5sCSRmMjJmNDQwMywkMDAwNDRlNzUsJGYyMmY1NDAzLCQwMDA0NGU3NQorCWRjLmwJJGYyMmY0ODAzLCQwMDA0NGU3NSwkNGEyODAwMDAsJDZiMTBmMjNjCisJZGMubAkkNDQwMDAwMDAsJDAwMDAxZDdjLCQwMDA0ZmY2NCwkNGU3NWYyM2MKKwlkYy5sCSQ0NDAwODAwMCwkMDAwMDFkN2MsJDAwMGNmZjY0LCQ0ZTc1NGEyOQorCWRjLmwJJDAwMDA2YmVhLCQ2MGQ4NGEyOCwkMDAwMDZiMTAsJGYyM2M0NDAwCisJZGMubAkkN2Y4MDAwMDAsJDFkN2MwMDAyLCRmZjY0NGU3NSwkZjIzYzQ0MDAKKwlkYy5sCSRmZjgwMDAwMCwkMWQ3YzAwMGEsJGZmNjQ0ZTc1LCQ0YTI5MDAwMAorCWRjLmwJJDZiZWE2MGQ4LCQ0YTI4MDAwMCwkNmJhNDYwZDAsJDRhMjgwMDAwCisJZGMubAkkNmIwMGZiYTIsJDYwYzY0YTI4LCQwMDAwNmIxNiwkNjBiZTRhMjgKKwlkYy5sCSQwMDAwNmIwZSwkZjIzYzQ0MDAsJDNmODAwMDAwLCQ0MjJlZmY2NAorCWRjLmwJJDRlNzVmMjNjLCQ0NDAwYmY4MCwkMDAwMDFkN2MsJDAwMDhmZjY0CisJZGMubAkkNGU3NTNmZmYsJDAwMDBjOTBmLCRkYWEyMjE2OCwkYzIzNWJmZmYKKwlkYy5sCSQwMDAwYzkwZiwkZGFhMjIxNjgsJGMyMzU0YTI4LCQwMDAwNmIwZQorCWRjLmwJJGYyMDA5MDAwLCRmMjNhNDgwMCwkZmZkYTYwMDAsJGZjZjJmMjAwCisJZGMubAkkOTAwMGYyM2EsJDQ4MDBmZmQ4LCQ2MDAwZmNlYywkZjIzYzQ0ODAKKwlkYy5sCSQzZjgwMDAwMCwkNGEyODAwMDAsJDZhMTBmMjNjLCQ0NDAwODAwMAorCWRjLmwJJDAwMDAxZDdjLCQwMDBjZmY2NCwkNGU3NWYyM2MsJDQ0MDAwMDAwCisJZGMubAkkMDAwMDFkN2MsJDAwMDRmZjY0LCQ0ZTc1ZjIzYSwkNDg4MGZhODQKKwlkYy5sCSQ2MDAwZmIwMiwkZjIyODQ4ODAsJDAwMDA2MDAwLCRmZDMwMTIyZQorCWRjLmwJJGZmNGY2N2ZmLCRmZmZmZjc4MiwkMGMwMTAwMDEsJDY3MDAwMDc4CisJZGMubAkkMGMwMTAwMDIsJDY3ZmZmZmZmLCRmYWRlMGMwMSwkMDAwNDY3ZmYKKwlkYy5sCSRmZmZmZjc2NiwkNjBmZmZmZmYsJGZjZWExMjJlLCRmZjRmNjdmZgorCWRjLmwJJGZmZmZmYWM0LCQwYzAxMDAwMSwkNjdmZmZmZmYsJGZhYmEwYzAxCisJZGMubAkkMDAwMjY3ZmYsJGZmZmZmYWIwLCQwYzAxMDAwNCwkNjdmZmZmZmYKKwlkYy5sCSRmYWE2NjBmZiwkZmZmZmZjYmMsJDEyMmVmZjRmLCQ2N2ZmMDAwMAorCWRjLmwJJDAwNDQwYzAxLCQwMDAxNjdmZiwkMDAwMDAwMWUsJDBjMDEwMDAyCisJZGMubAkkNjdmZmZmZmYsJGZhODIwYzAxLCQwMDA0NjdmZiwkMDAwMDAwMjYKKwlkYy5sCSQ2MGZmZmZmZiwkZmM4ZTEyMjgsJDAwMDAxMDI5LCQwMDAwYjEwMQorCWRjLmwJJDAyMDEwMDgwLCQxZDQxZmY2NSwkNGEwMDZhMDAsJGZlNTI2MDAwCisJZGMubAkkZmU1ZTQyMmUsJGZmNjUyZjAwLCQxMjI4MDAwMCwkMTAyOTAwMDAKKwlkYy5sCSRiMTAxMDIwMSwkMDA4MDFkNDEsJGZmNjUwYzJlLCQwMDA0ZmY0ZgorCWRjLmwJJDY2MGM0MWU5LCQwMDAwMjAxZiwkNjBmZmZmZmYsJGZjMmVmMjFmCisJZGMubAkkOTAwMGYyMjksJDQ4MDAwMDAwLCQ0YTI5MDAwMCwkNmIwMjRlNzUKKwlkYy5sCSQxZDdjMDAwOCwkZmY2NDRlNzUsJDEyMmVmZjRmLCQ2N2ZmZmZmZgorCWRjLmwJJGY2YTQwYzAxLCQwMDAxNjcwMCwkZmY4ZTBjMDEsJDAwMDI2N2ZmCisJZGMubAkkZmZmZmY5ZjQsJDBjMDEwMDA0LCQ2N2ZmZmZmZiwkZjY4ODYwZmYKKwlkYy5sCSRmZmZmZmMwMCwkMTIyZWZmNGYsJDY3ZmZmZmZmLCRmOWRhMGMwMQorCWRjLmwJJDAwMDE2N2ZmLCRmZmZmZjlkMCwkMGMwMTAwMDIsJDY3ZmZmZmZmCisJZGMubAkkZjljNjBjMDEsJDAwMDQ2N2ZmLCRmZmZmZjliYywkNjBmZmZmZmYKKwlkYy5sCSRmYmQyMTIyZSwkZmY0ZjY3MDAsJGZmNWEwYzAxLCQwMDAxNjcwMAorCWRjLmwJJGZmMzYwYzAxLCQwMDAyNjdmZiwkZmZmZmY5OWMsJDBjMDEwMDA0CisJZGMubAkkNjdmZmZmZmYsJGZmNDA2MGZmLCRmZmZmZmJhOCwkMTIyZWZmNGYKKwlkYy5sCSQ2N2ZmZmZmZiwkZjUwMDBjMDEsJDAwMDE2N2ZmLCRmZmZmZmQ5MgorCWRjLmwJJDBjMDEwMDAyLCQ2N2ZmZmZmZiwkZmRiNjBjMDEsJDAwMDQ2N2ZmCisJZGMubAkkZmZmZmY0ZTIsJDYwZmZmZmZmLCRmYjdhMTIyZSwkZmY0ZjY3ZmYKKwlkYy5sCSRmZmZmZjRkMiwkMGMwMTAwMDEsJDY3ZmZmZmZmLCRmZDY0MGMwMQorCWRjLmwJJDAwMDI2N2ZmLCRmZmZmZmQ4OCwkMGMwMTAwMDQsJDY3ZmZmZmZmCisJZGMubAkkZjRiNDYwZmYsJGZmZmZmYjRjLCQxMjJlZmY0ZiwkNjdmZmZmZmYKKwlkYy5sCSRmOTI2MGMwMSwkMDAwMzY3ZmYsJGZmZmZmYjM4LCQ2MGZmZmZmZgorCWRjLmwJJGY5MTYxMjJlLCRmZjRmMGMwMSwkMDAwMzY3ZmYsJGZmZmZmYjI0CisJZGMubAkkNjBmZmZmZmYsJGZiM2EyZjAyLCQyZjAzMjAyOCwkMDAwNDIyMjgKKwlkYy5sCSQwMDA4ZWRjMCwkMjAwMDY3MWEsJGU1YThlOWMxLCQzMDIyODA4MworCWRjLmwJJGU1YTkyMTQwLCQwMDA0MjE0MSwkMDAwODIwMDIsJDI2MWYyNDFmCisJZGMubAkkNGU3NWVkYzEsJDIwMDBlNWE5LCQwNjgyMDAwMCwkMDAyMDIxNDEKKwlkYy5sCSQwMDA0NDJhOCwkMDAwODIwMDIsJDI2MWYyNDFmLCQ0ZTc1ZWRlOAorCWRjLmwJJDAwMDAwMDA0LCQ2NjBlZWRlOCwkMDAwMDAwMDgsJDY3MDAwMDc0CisJZGMubAkkMDY0MDAwMjAsJDQyODEzMjI4LCQwMDAwMDI0MSwkN2ZmZmIwNDEKKwlkYy5sCSQ2ZTFjOTI0MCwkMzAyODAwMDAsJDAyNDA4MDAwLCQ4MjQwMzE0MQorCWRjLmwJJDAwMDA2MWZmLCRmZmZmZmY4MiwkMTAzYzAwMDAsJDRlNzUwYzAxCisJZGMubAkkMDAyMDZlMjAsJGU5ZTgwODQwLCQwMDA0MjE0MCwkMDAwNDIwMjgKKwlkYy5sCSQwMDA4ZTNhOCwkMjE0MDAwMDgsJDAyNjg4MDAwLCQwMDAwMTAzYworCWRjLmwJJDAwMDQ0ZTc1LCQwNDQxMDAyMCwkMjAyODAwMDgsJGUzYTgyMTQwCisJZGMubAkkMDAwNDQyYTgsJDAwMDgwMjY4LCQ4MDAwMDAwMCwkMTAzYzAwMDQKKwlkYy5sCSQ0ZTc1MDI2OCwkODAwMDAwMDAsJDEwM2MwMDAxLCQ0ZTc1NTFmYwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3AuZG9jIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3AuZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODMxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnBzcC5kb2MKQEAgLTAsMCArMSwyOTUgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKzY4MDYwIEZMT0FUSU5HLVBPSU5UIFNPRlRXQVJFIFBBQ0tBR0UgKEtlcm5lbCB2ZXJzaW9uKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBmcHNwLnNhIGNvbnRhaW5zIHRoZSA2ODA2MCBGbG9hdGluZy1Qb2ludCBTb2Z0d2FyZQorUGFja2FnZS4gVGhpcyBwYWNrYWdlIGlzIGVzc2VudGlhbGx5IGEgc2V0IG9mIGV4Y2VwdGlvbiBoYW5kbGVycwordGhhdCBjYW4gYmUgaW50ZWdyYXRlZCBpbnRvIGFuIG9wZXJhdGluZyBzeXN0ZW0uCitUaGVzZSBleGNlcHRpb24gaGFuZGxlcnMgZW11bGF0ZSBVbmltcGxlbWVudGVkIEZQIGluc3RydWN0aW9ucywKK2luc3RydWN0aW9ucyB1c2luZyB1bmltcGxlbWVudGVkIGRhdGEgdHlwZXMsIGFuZCBpbnN0cnVjdGlvbnMKK3VzaW5nIHVuaW1wbGVtZW50ZWQgYWRkcmVzc2luZyBtb2Rlcy4gSW4gYWRkaXRpb24sIHRoaXMgcGFja2FnZQoraW5jbHVkZXMgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHByb3ZpZGUgZnVsbCBJRUVFLTc1NCBjb21wbGlhbnQKK2V4Y2VwdGlvbiBoYW5kbGluZy4KKworUmVsZWFzZSBmaWxlIGZvcm1hdDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBmcHNwLnNhIGlzIGVzc2VudGlhbGx5IGEgaGV4YWRlY2ltYWwgaW1hZ2Ugb2YgdGhlCityZWxlYXNlIHBhY2thZ2UuIFRoaXMgaXMgdGhlIE9OTFkgZm9ybWF0IHdoaWNoIHdpbGwgYmUgc3VwcG9ydGVkLgorVGhlIGhleCBpbWFnZSB3YXMgY3JlYXRlZCBieSBhc3NlbWJsaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQKK3RoZW4gY29udmVydGluZyB0aGUgcmVzdWx0aW5nIGJpbmFyeSBvdXRwdXQgaW1hZ2UgaW50byBhbgorQVNDSUkgdGV4dCBmaWxlLiBUaGUgaGV4YWRlY2ltYWwgbnVtYmVycyBhcmUgbGlzdGVkCit1c2luZyB0aGUgTW90b3JvbGEgQXNzZW1ibHkgU3ludGF4IGFzc2VtYmxlciBkaXJlY3RpdmUgImRjLmwiCisoZGVmaW5lIGNvbnN0YW50IGxvbmd3b3JkKS4gVGhlIGZpbGUgY2FuIGJlIGNvbnZlcnRlZCB0byBvdGhlcgorYXNzZW1ibHkgc3ludGF4ZXMgYnkgdXNpbmcgYW55IHdvcmQgcHJvY2Vzc29yIHdpdGggYSBnbG9iYWwKK3NlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbi4KKworVG8gYXNzaXN0IGluIGFzc2VtYmxpbmcgYW5kIGxpbmtpbmcgdGhpcyBtb2R1bGUgd2l0aCBvdGhlciBtb2R1bGVzLAordGhlIGluc3RhbGxlciBzaG91bGQgYWRkIGEgc3ltYm9saWMgbGFiZWwgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KK1RoaXMgd2lsbCBhbGxvdyBjYWxsaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgZW50cnkgcG9pbnRzCitvZiB0aGlzIHBhY2thZ2UuCisKK1RoZSBzb3VyY2UgY29kZSBmcHNwLnMgaGFzIGFsc28gYmVlbiBpbmNsdWRlZCBidXQgb25seSBmb3IKK2RvY3VtZW50YXRpb24gcHVycG9zZXMuCisKK1JlbGVhc2UgZmlsZSBzdHJ1Y3R1cmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisodG9wIG9mIG1vZHVsZSkKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSAxMjggYnl0ZS1zaXplZCBzZWN0aW9uCisgICAoMSkgIHwgICBDYWxsLU91dAl8IC0gNCBieXRlcyBwZXIgZW50cnkgKHVzZXIgZmlsbHMgdGhlc2UgaW4pCisJfAkJfCAtIGV4YW1wbGUgcm91dGluZXMgaW4gZnNrZWxldG9uLnMKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSA4IGJ5dGVzIHBlciBlbnRyeQorICAgKDIpICB8IEVudHJ5IFBvaW50CXwgLSB1c2VyIGRvZXMgImJyYSIgb3IgImptcCIgdG8gdGhpcyBhZGRyZXNzCisJfAkJfAorCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIGNvZGUgc2VjdGlvbgorICAgKDMpICB+CQl+CisJfAkJfAorCS0tLS0tLS0tLS0tLS0tLS0tCisoYm90dG9tIG9mIG1vZHVsZSkKKworVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdGhlICJDYWxsLW91dCIgc2VjdGlvbi4gVGhpcyBzZWN0aW9uCitpcyBOT1QgSU5DTFVERUQgaW4gZnBzcC5zYSAoYW4gZXhhbXBsZSAiQ2FsbC1vdXQiIHNlY3Rpb24gaXMgcHJvdmlkZWQgYXQKK3RoZSBlbmQgb2YgdGhlIGZpbGUgZnNrZWxldG9uLnMpLiBUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gaXMgdG8gYWxsb3cKK3RoZSBGUFNQIHJvdXRpbmVzIHRvIHJlZmVyZW5jZSBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCBtdXN0IGJlIHByb3ZpZGVkCitieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIHNlY3Rpb24gTVVTVCBiZSBleGFjdGx5IDEyOCBieXRlcyBpbgorc2l6ZS4gVGhlcmUgYXJlIDMyIGZpZWxkcywgZWFjaCA0IGJ5dGVzIGluIHNpemUuIEVhY2ggZmllbGQgY29ycmVzcG9uZHMKK3RvIGEgZnVuY3Rpb24gcmVxdWlyZWQgYnkgdGhlIEZQU1AgKHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgbG9jYXRpb24gYXJlCitsaXN0ZWQgaW4gIjY4MDYwRlBTUCBjYWxsLW91dHMiIGJlbG93KS4gRWFjaCBmaWVsZCBlbnRyeSBzaG91bGQgY29udGFpbgordGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gUkVMQVRJVkUgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MKK29mIHRoZSAiY2FsbC1vdXQiIHNlY3Rpb24uIFRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24gbXVzdCBzaXQgYWRqYWNlbnQgdG8gdGhlCitmcHNwLnNhIGltYWdlIGluIG1lbW9yeS4KKworVGhlIHNlY29uZCBzZWN0aW9uLCB0aGUgIkVudHJ5LXBvaW50IiBzZWN0aW9uLCBpcyB1c2VkIGJ5IGV4dGVybmFsIHJvdXRpbmVzCit0byBhY2Nlc3MgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEZQU1AuIFNpbmNlIHRoZSBmcHNwLnNhIGhleCBmaWxlIGNvbnRhaW5zCitubyBzeW1ib2wgbmFtZXMsIHRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdGhhdCBhcmUgZml4ZWQKK3dpdGggcmVzcGVjdCB0byB0aGUgdG9wIG9mIHRoZSBwYWNrYWdlLiBUaGUgY3VycmVudGx5IGRlZmluZWQgZW50cnktcG9pbnRzCithcmUgbGlzdGVkIGluIHNlY3Rpb24gIjY4MDYwIEZQU1AgZW50cnkgcG9pbnRzIiBiZWxvdy4gQSBjYWxsaW5nIHJvdXRpbmUKK3dvdWxkIHNpbXBseSBleGVjdXRlIGEgImJyYSIgb3IgImptcCIgdGhhdCBqdW1wZWQgdG8gdGhlIHNlbGVjdGVkIGZ1bmN0aW9uCitlbnRyeS1wb2ludC4KKworRm9yIGV4YW1wbGUsIGlmIHRoZSA2ODA2MCBoYXJkd2FyZSB0b29rIGEgIkxpbmUtRiBFbXVsYXRvciIgZXhjZXB0aW9uCisodmVjdG9yICMxMSksIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNob3VsZCBleGVjdXRlIHNvbWV0aGluZyBzaW1pbGFyIHRvOgorCisJYnJhCV8wNjBGUFNQX1RPUCsxMjgrNDgKKworKF8wNjBGUFNQX1RPUCBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgIkNhbGwtb3V0IiBzZWN0aW9uOyB0aGUgIkNhbGwtb3V0Igorc2VjdGlvbiBpcyAxMjggYnl0ZXMgbG9uZzsgYW5kIHRoZSBGLUxpbmUgRlBTUCBoYW5kbGVyIGVudHJ5IHBvaW50IGlzIGxvY2F0ZWQKKzQ4IGJ5dGVzIGZyb20gdGhlIHRvcCBvZiB0aGUgIkVudHJ5LXBvaW50IiBzZWN0aW9uLikKKworVGhlIHRoaXJkIHNlY3Rpb24gaXMgdGhlIGNvZGUgc2VjdGlvbi4gQWZ0ZXIgZW50ZXJpbmcgdGhyb3VnaCBhbiAiRW50cnktcG9pbnQiLAordGhlIGVudHJ5IGNvZGUganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGVtdWxhdGlvbiBjb2RlIHdpdGhpbiB0aGUgY29kZSBzZWN0aW9uLgorCis2ODA2MEZQU1AgY2FsbC1vdXRzOiAoZGV0YWlscyBpbiBmc2tlbGV0b24ucykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDAwMDoJXzA2MF9yZWFsX2JzdW4KKzB4MDA0OglfMDYwX3JlYWxfc25hbgorMHgwMDg6CV8wNjBfcmVhbF9vcGVycgorMHgwMGM6CV8wNjBfcmVhbF9vdmZsCisweDAxMDoJXzA2MF9yZWFsX3VuZmwKKzB4MDE0OglfMDYwX3JlYWxfZHoKKzB4MDE4OglfMDYwX3JlYWxfaW5leAorMHgwMWM6CV8wNjBfcmVhbF9mbGluZQorMHgwMjA6CV8wNjBfcmVhbF9mcHVfZGlzYWJsZWQKKzB4MDI0OglfMDYwX3JlYWxfdHJhcAorMHgwMjg6CV8wNjBfcmVhbF90cmFjZQorMHgwMmM6CV8wNjBfcmVhbF9hY2Nlc3MKKzB4MDMwOglfMDYwX2Zwc3BfZG9uZQorCisweDAzNDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwMzg6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDNjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisKKzB4MDQwOglfMDYwX2ltZW1fcmVhZAorMHgwNDQ6CV8wNjBfZG1lbV9yZWFkCisweDA0ODoJXzA2MF9kbWVtX3dyaXRlCisweDA0YzoJXzA2MF9pbWVtX3JlYWRfd29yZAorMHgwNTA6CV8wNjBfaW1lbV9yZWFkX2xvbmcKKzB4MDU0OglfMDYwX2RtZW1fcmVhZF9ieXRlCisweDA1ODoJXzA2MF9kbWVtX3JlYWRfd29yZAorMHgwNWM6CV8wNjBfZG1lbV9yZWFkX2xvbmcKKzB4MDYwOglfMDYwX2RtZW1fd3JpdGVfYnl0ZQorMHgwNjQ6CV8wNjBfZG1lbV93cml0ZV93b3JkCisweDA2ODoJXzA2MF9kbWVtX3dyaXRlX2xvbmcKKworMHgwNmM6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDcwOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3NDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwNzg6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDdjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisKKzY4MDYwRlBTUCBlbnRyeSBwb2ludHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwMDA6CV8wNjBfZnBzcF9zbmFuCisweDAwODoJXzA2MF9mcHNwX29wZXJyCisweDAxMDoJXzA2MF9mcHNwX292ZmwKKzB4MDE4OglfMDYwX2Zwc3BfdW5mbAorMHgwMjA6CV8wNjBfZnBzcF9kegorMHgwMjg6CV8wNjBfZnBzcF9pbmV4CisweDAzMDoJXzA2MF9mcHNwX2ZsaW5lCisweDAzODoJXzA2MF9mcHNwX3Vuc3VwcAorMHgwNDA6CV8wNjBfZnBzcF9lZmZhZGQKKworCisKK01pc2NlbGxhbmVvdXM6CistLS0tLS0tLS0tLS0tLQorCitfMDYwX2Zwc3Bfc25hbjoKKy0tLS0tLS0tLS0tLS0tLS0KKy0gZG9jdW1lbnRlZCBpbiAzLjUgb2YgMDYwU1Agc3BlYy4KKy0gQmFzaWMgZmxvdzoKKwlleGNlcHRpb24gdGFrZW4gLS0tPiBlbnRlciBfMDYwX2Zwc3Bfc25hbiAtLXwKKwkJCQkJCSAgICB8CisgICAgICAgICAgICBhbHdheXMgZXhpdHMgdGhyb3VnaCBfMDYwX3JlYWxfc25hbiA8LS0tLQorCitfMDYwX2Zwc3Bfb3BlcnI6CistLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMy41IG9mIDA2MFNQIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9mcHNwX29wZXJyIC0tfAorCQkJCQkJICAgICB8CisgICAgICAgICAgIGFsd2F5cyBleGl0cyB0aHJvdWdoIF8wNjBfcmVhbF9vcGVyciA8LS0tLS0KKworXzA2MF9mcHNwX2R6OgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuNyBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9keiAgIC0tfAorCQkJCQkJICAgIHwKKyAgICAgICAgICAgIGFsd2F5cyBleGl0cyB0aHJvdWdoIF8wNjBfcmVhbF9keiAgIDwtLS0tCisKK18wNjBfZnBzcF9pbmV4OgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuNiBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9pbmV4IC0tfAorCQkJCQkJICAgIHwKKyAgICAgICAgICAgIGFsd2F5cyBleGl0cyB0aHJvdWdoIF8wNjBfcmVhbF9pbmV4IDwtLS0tCisKKworXzA2MF9mcHNwX292Zmw6CistLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMy40IG9mIDA2MFNQIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9mcHNwX292ZmwgLS18CisJCQkJCQkgICAgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfaW5leCAgICAgPC0tLXwKKwkJCQkJCSBvciB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9vdmZsICAgICA8LS0tfAorCQkJCQkJIG9yIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9mcHNwX2RvbmUgICAgIDwtLS18CisKK18wNjBfZnBzcF91bmZsOgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuNCBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF91bmZsIC0tfAorCQkJCQkJICAgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2luZXggICAgIDwtLS18CisJCQkJCQkgb3IgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfdW5mbCAgICAgPC0tLXwKKwkJCQkJCSBvciB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfZnBzcF9kb25lICAgICA8LS0tfAorCisKK18wNjBfZnBzcF9mbGluZToKKy0tLS0tLS0tLS0tLS0tLS0tCistIG5vdCBmdWxseSBkb2N1bWVudGVkIGluIDA2MFNQIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9mcHNwX2ZsaW5lIC0tfAorCQkJCQkJICAgICB8CisgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHYgICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgdgorICAgKHVuaW1wbGVtZW50ZWQgICAoZnB1IGRpc2FibGVkKSAgICAgICAocG9zc2libGUgRi1saW5lIGlsbGVnYWwpCisgICAgIHN0YWNrIGZyYW1lKSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgc3BlY2lhbCBjYXNlICJmbW92ZWNyIj8KKyAgICAgICAgICAgIHwgICAgICAgICBleGl0IHRocm91Z2ggICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgIF8wNjBfcmVhbF9mcHVfZGlzYWJsZWQgICAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgIHYKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAoeWVzKSAgICAgICAgKG5vKQorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgdgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgZnB1IGRpc2FibGVkPyAgIGV4aXQgdGhyb3VnaAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIF8wNjBfcmVhbF9mbGluZQorICAgICAgICAgICAgdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgdiAgICAgICAgICAgdgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLSh5ZXMpICAgICAgICAobm8pCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICB8LS0tLTwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgICB8CisgICAgICAgICAgICB8CisgICAgICAgICAgICB8LS0tLT4gbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfdHJhY2UKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwtLS0tPiBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF90cmFwCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8LS0tLT4gbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfYnN1bgorICAgICAgICAgICAgfAorICAgICAgICAgICAgfC0tLS0+IG1heSBleGl0IHRocm91Z2ggXzA2MF9mcHNwX2RvbmUKKworCitfMDYwX2Zwc3BfdW5zdXBwOgorLS0tLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMy4xIG9mIDA2MFNQIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9mcHNwX3Vuc3VwcCAtLXwKKwkJCQkJCSAgICAgIHwKKwkJCQkJCSAgICAgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX3NuYW4gICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX29wZXJyICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX292ZmwgICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX3VuZmwgICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2luZXggICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX3RyYWNlICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9mcHNwX2RvbmUgICAgICA8LS0tLXwKKworCitfMDYwX2Zwc3BfZWZmYWRkOgorLS0tLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMy4zIG9mIDA2MCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9lZmZhZGQgLS18CisJCQkJCQkgICAgICB8CisJCQkJCQkgICAgICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF90cmFjZSAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2ZwdV9kaXNhYmxlZCAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfZnBzcF9kb25lICAgICAgPC0tLS18CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvZnBzcC5zYSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcHNwLnNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTQ4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnBzcC5zYQpAQCAtMCwwICsxLDM0MDEgQEAKKwkubG9uZwkweDYwZmYwMDAwLDB4MTc0MDAwMDAsMHg2MGZmMDAwMCwweDE1ZjQwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDAyYjYwMDAwLDB4NjBmZjAwMDAsMHgwNDcwMDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgxYjEwMDAwMCwweDYwZmYwMDAwLDB4MTlhYTAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MWI1YTAwMDAsMHg2MGZmMDAwMCwweDA2MmUwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDEwMmMwMDAwLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4MmYwMDIwM2EsMHhmZjJjNDg3YiwweDA5MzBmZmZmLDB4ZmVmODIwMmYKKwkubG9uZwkweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmVmMiwweDQ4N2IwOTMwCisJLmxvbmcJMHhmZmZmZmVlMiwweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYQorCS5sb25nCTB4ZmVlMDQ4N2IsMHgwOTMwZmZmZiwweGZlY2MyMDJmLDB4MDAwNDRlNzQKKwkubG9uZwkweDAwMDQyZjAwLDB4MjAzYWZlZDIsMHg0ODdiMDkzMCwweGZmZmZmZWI2CisJLmxvbmcJMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZWE0NDg3YgorCS5sb25nCTB4MDkzMGZmZmYsMHhmZWEwMjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAKKwkubG9uZwkweDIwM2FmZTk2LDB4NDg3YjA5MzAsMHhmZmZmZmU4YSwweDIwMmYwMDA0CisJLmxvbmcJMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmU3YzQ4N2IsMHgwOTMwZmZmZgorCS5sb25nCTB4ZmU3NDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZlNzYKKwkubG9uZwkweDQ4N2IwOTMwLDB4ZmZmZmZlNWUsMHgyMDJmMDAwNCwweDRlNzQwMDA0CisJLmxvbmcJMHgyZjAwMjAzYSwweGZlNjg0ODdiLDB4MDkzMGZmZmYsMHhmZTQ4MjAyZgorCS5sb25nCTB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZTU2LDB4NDg3YjA5MzAKKwkubG9uZwkweGZmZmZmZTMyLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhCisJLmxvbmcJMHhmZTQ0NDg3YiwweDA5MzBmZmZmLDB4ZmUxYzIwMmYsMHgwMDA0NGU3NAorCS5sb25nCTB4MDAwNDJmMDAsMHgyMDNhZmUzMiwweDQ4N2IwOTMwLDB4ZmZmZmZlMDYKKwkubG9uZwkweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZlMjA0ODdiCisJLmxvbmcJMHgwOTMwZmZmZiwweGZkZjAyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMAorCS5sb25nCTB4MjAzYWZlMWUsMHg0ODdiMDkzMCwweGZmZmZmZGRhLDB4MjAyZjAwMDQKKwkubG9uZwkweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZTBjNDg3YiwweDA5MzBmZmZmCisJLmxvbmcJMHhmZGM0MjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmRmYQorCS5sb25nCTB4NDg3YjA5MzAsMHhmZmZmZmRhZSwweDIwMmYwMDA0LDB4NGU3NDAwMDQKKwkubG9uZwkweDJmMDAyMDNhLDB4ZmRlODQ4N2IsMHgwOTMwZmZmZiwweGZkOTgyMDJmCisJLmxvbmcJMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZkZDYsMHg0ODdiMDkzMAorCS5sb25nCTB4ZmZmZmZkODIsMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EKKwkubG9uZwkweGZkYzQ0ODdiLDB4MDkzMGZmZmYsMHhmZDZjMjAyZiwweDAwMDQ0ZTc0CisJLmxvbmcJMHgwMDA0MmYwMCwweDIwM2FmZGIyLDB4NDg3YjA5MzAsMHhmZmZmZmQ1NgorCS5sb25nCTB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmRhMDQ4N2IKKwkubG9uZwkweDA5MzBmZmZmLDB4ZmQ0MDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwCisJLmxvbmcJMHgyMDNhZmQ4ZSwweDQ4N2IwOTMwLDB4ZmZmZmZkMmEsMHgyMDJmMDAwNAorCS5sb25nCTB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZkN2M0ODdiLDB4MDkzMGZmZmYKKwkubG9uZwkweGZkMTQyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZDZhCisJLmxvbmcJMHg0ODdiMDkzMCwweGZmZmZmY2ZlLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNAorCS5sb25nCTB4NDBjNjJkMzgsMHhkM2Q2NDYzNCwweDNkNmY5MGFlLDB4YjFlNzVjYzcKKwkubG9uZwkweDQwMDAwMDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDAwMDAwMDAwCisJLmxvbmcJMHgzZmZmMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgwMDAwMDAwMAorCS5sb25nCTB4M2ZlNDVmMzAsMHg2ZGM5Yzg4MywweDRlNTZmZjQwLDB4ZjMyZWZmNmMKKwkubG9uZwkweDQ4ZWUwMzAzLDB4ZmY5Y2YyMmUsMHhiYzAwZmY2MCwweGYyMmVmMGMwCisJLmxvbmcJMHhmZmRjMmQ2ZSwweGZmNjhmZjQ0LDB4MjA2ZWZmNDQsMHg1OGFlZmY0NAorCS5sb25nCTB4NjFmZmZmZmYsMHhmZjA0MmQ0MCwweGZmNDAwODJlLDB4MDAwNWZmNDIKKwkubG9uZwkweDY2MDAwMTE2LDB4NDFlZWZmNmMsMHg2MWZmMDAwMCwweDA1MWM0MWVlCisJLmxvbmcJMHhmZjZjNjFmZiwweDAwMDBjMWRjLDB4MWQ0MGZmNGUsMHgwODJlMDAwNQorCS5sb25nCTB4ZmY0MzY3MjYsMHhlOWVlMDE4MywweGZmNDI2MWZmLDB4MDAwMGJkMjIKKwkubG9uZwkweDQxZWVmZjc4LDB4NjFmZjAwMDAsMHhjMWJhMGMwMCwweDAwMDY2NjA2CisJLmxvbmcJMHg2MWZmMDAwMCwweGMxMWUxZDQwLDB4ZmY0ZjQyODAsMHgxMDJlZmY2MworCS5sb25nCTB4MTIyZWZmNDMsMHgwMjQxMDA3ZiwweDAyYWUwMGZmLDB4MDFmZmZmNjQKKwkubG9uZwkweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHhmMjNjODgwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg0MWVlZmY2YywweDQzZWVmZjc4LDB4MjIzYjE1MzAsMHgwMDAwNzExMgorCS5sb25nCTB4NGViYjE5MzAsMHgwMDAwNzEwYSwweGU5ZWUwMTgzLDB4ZmY0MjYxZmYKKwkubG9uZwkweDAwMDBiZDRlLDB4MDgyZTAwMDQsMHhmZjYyNjYyMiwweDA4MmUwMDAxCisJLmxvbmcJMHhmZjYyNjY0NCwweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MAorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljNGU1ZSwweDYwZmZmZmZmLDB4ZmNjNmYyMmUKKwkubG9uZwkweGYwNDBmZjZjLDB4M2Q3Y2UwMDUsMHhmZjZlZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHhmMzZlZmY2YworCS5sb25nCTB4NGU1ZTYwZmYsMHhmZmZmZmNiMiwweGYyMmVmMDQwLDB4ZmY2YzFkN2MKKwkubG9uZwkweDAwYzQwMDBiLDB4M2Q3Y2UwMDEsMHhmZjZlZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHhmMzZlZmY2YworCS5sb25nCTB4NGU1ZTYwZmYsMHhmZmZmZmNhZSwweDFkN2MwMDAwLDB4ZmY0ZTQyODAKKwkubG9uZwkweDEwMmVmZjYzLDB4MDJhZWZmZmYsMHgwMGZmZmY2NCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHg0MWVlZmY2YworCS5sb25nCTB4NjFmZjAwMDAsMHhiMmNlMDgyZSwweDAwMDRmZjYyLDB4NjYwMGZmNzAKKwkubG9uZwkweDA4MmUwMDAxLDB4ZmY2MjY2MDAsMHhmZjkwZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHg0ZTVlMDgxNworCS5sb25nCTB4MDAwNzY3ZmYsMHhmZmZmZmMwYywweGYyMmZhNDAwLDB4MDAwODNmN2MKKwkubG9uZwkweDIwMjQwMDA2LDB4NjBmZmZmZmYsMHhmY2VjNGU1NiwweGZmNDBmMzJlCisJLmxvbmcJMHhmZjZjNDhlZSwweDAzMDNmZjljLDB4ZjIyZWJjMDAsMHhmZjYwZjIyZQorCS5sb25nCTB4ZjBjMGZmZGMsMHgyZDZlZmY2OCwweGZmNDQyMDZlLDB4ZmY0NDU4YWUKKwkubG9uZwkweGZmNDQ2MWZmLDB4ZmZmZmZkNDIsMHgyZDQwZmY0MCwweDA4MmUwMDA1CisJLmxvbmcJMHhmZjQyNjYwMCwweDAxMzI0MWVlLDB4ZmY2YzYxZmYsMHgwMDAwMDM1YQorCS5sb25nCTB4NDFlZWZmNmMsMHg2MWZmMDAwMCwweGMwMWExZDQwLDB4ZmY0ZTA4MmUKKwkubG9uZwkweDAwMDVmZjQzLDB4NjcyZTA4MmUsMHgwMDA0ZmY0MywweDY2MjZlOWVlCisJLmxvbmcJMHgwMTgzZmY0MiwweDYxZmYwMDAwLDB4YmI1ODQxZWUsMHhmZjc4NjFmZgorCS5sb25nCTB4MDAwMGJmZjAsMHgwYzAwMDAwNiwweDY2MDY2MWZmLDB4MDAwMGJmNTQKKwkubG9uZwkweDFkNDBmZjRmLDB4NDI4MDEwMmUsMHhmZjYzMTIyZSwweGZmNDMwMjQxCisJLmxvbmcJMHgwMDdmMDJhZSwweDAwZmYwMWZmLDB4ZmY2NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyM2MsMHg4ODAwMDAwMCwweDAwMDA0MWVlLDB4ZmY2YzQzZWUKKwkubG9uZwkweGZmNzgyMjNiLDB4MTUzMDAwMDAsMHg2ZjQ4NGViYiwweDE5MzAwMDAwCisJLmxvbmcJMHg2ZjQwZTllZSwweDAxODNmZjQyLDB4NjFmZjAwMDAsMHhiYjg0MDgyZQorCS5sb25nCTB4MDAwM2ZmNjIsMHg2NjIyMDgyZSwweDAwMDFmZjYyLDB4NjY0ZWYyMmUKKwkubG9uZwkweGQwYzBmZmRjLDB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljCisJLmxvbmcJMHg0ZTVlNjBmZiwweGZmZmZmYWZjLDB4MDgyZTAwMDMsMHhmZjY2NjcwMAorCS5sb25nCTB4ZmZkNmYyMmUsMHhmMDQwZmY2YywweDNkN2NlMDAzLDB4ZmY2ZWYyMmUKKwkubG9uZwkweGQwYzBmZmRjLDB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljCisJLmxvbmcJMHhmMzZlZmY2YywweDRlNWU2MGZmLDB4ZmZmZmZhZjQsMHgwODJlMDAwMQorCS5sb25nCTB4ZmY2NjY3MDAsMHhmZmFhZjIyZSwweGYwNDBmZjZjLDB4MWQ3YzAwYzQKKwkubG9uZwkweDAwMGIzZDdjLDB4ZTAwMWZmNmUsMHhmMjJlZDBjMCwweGZmZGNmMjJlCisJLmxvbmcJMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5Y2YzNmUsMHhmZjZjNGU1ZQorCS5sb25nCTB4NjBmZmZmZmYsMHhmYWQwMWQ3YywweDAwMDBmZjRlLDB4NDI4MDEwMmUKKwkubG9uZwkweGZmNjMwMmFlLDB4ZmZmZjAwZmYsMHhmZjY0ZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIzYywweDg4MDAwMDAwLDB4MDAwMDQxZWUsMHhmZjZjNjFmZgorCS5sb25nCTB4MDAwMGIwZjAsMHgwODJlMDAwMywweGZmNjI2NjAwLDB4ZmY2NjA4MmUKKwkubG9uZwkweDAwMDFmZjYyLDB4NjYwMGZmOTAsMHhmMjJlZDBjMCwweGZmZGNmMjJlCisJLmxvbmcJMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzRlNWUsMHgwODE3MDAwNworCS5sb25nCTB4NjdmZmZmZmYsMHhmYTJlZjIyZiwweGE0MDAwMDA4LDB4M2Y3YzIwMjQKKwkubG9uZwkweDAwMDY2MGZmLDB4ZmZmZmZiMGUsMHg0ZTU2ZmY0MCwweGYzMmVmZjZjCisJLmxvbmcJMHg0OGVlMDMwMywweGZmOWNmMjJlLDB4YmMwMGZmNjAsMHhmMjJlZjBjMAorCS5sb25nCTB4ZmZkYzA4MmUsMHgwMDA1MDAwNCwweDY2MDg0ZTY4LDB4MmQ0OGZmZDgKKwkubG9uZwkweDYwMDg0MWVlLDB4MDAxMDJkNDgsMHhmZmQ4MmQ2ZSwweGZmNjhmZjQ0CisJLmxvbmcJMHgyMDZlZmY0NCwweDU4YWVmZjQ0LDB4NjFmZmZmZmYsMHhmYjRjMmQ0MAorCS5sb25nCTB4ZmY0MDQyMmUsMHhmZjRhMDgyZSwweDAwMDVmZjQyLDB4NjYwMDAyMDgKKwkubG9uZwkweGU5ZWUwMDA2LDB4ZmY0MjBjMDAsMHgwMDEzNjcwMCwweDA0OWUwMmFlCisJLmxvbmcJMHgwMGZmMDBmZiwweGZmNjRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwNDFlZSwweGZmNmM2MWZmLDB4MDAwMDAxM2EKKwkubG9uZwkweDQxZWVmZjZjLDB4NjFmZjAwMDAsMHhiZGZhMGMwMCwweDAwMDY2NjA2CisJLmxvbmcJMHg2MWZmMDAwMCwweGJkNWUxZDQwLDB4ZmY0ZWU5ZWUsMHgwMTgzZmY0MgorCS5sb25nCTB4MDgyZTAwMDUsMHhmZjQzNjcyOCwweDBjMmUwMDNhLDB4ZmY0MzY3MjAKKwkubG9uZwkweDYxZmYwMDAwLDB4YjkyYzQxZWUsMHhmZjc4NjFmZiwweDAwMDBiZGM0CisJLmxvbmcJMHgwYzAwMDAwNiwweDY2MDY2MWZmLDB4MDAwMGJkMjgsMHgxZDQwZmY0ZgorCS5sb25nCTB4NDI4MDEwMmUsMHhmZjYzZTllZSwweDEwNDdmZjQzLDB4NDFlZWZmNmMKKwkubG9uZwkweDQzZWVmZjc4LDB4MjIzYjFkMzAsMHgwMDAwNmQzNiwweDRlYmIxOTMwCisJLmxvbmcJMHgwMDAwNmQyZSwweDEwMmVmZjYyLDB4NjYzNDEwMmUsMHhmZjQzMDIwMAorCS5sb25nCTB4MDAzODBjMDAsMHgwMDM4NjcwYywweGU5ZWUwMTgzLDB4ZmY0MjYxZmYKKwkubG9uZwkweDAwMDBiOTVlLDB4ZjIyZWQwYzAsMHhmZmRjZjIyZSwweDljMDBmZjYwCisJLmxvbmcJMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4NjBmZmZmZmYsMHhmOGU2YzAyZQorCS5sb25nCTB4ZmY2NmVkYzAsMHgwNjA4NjYxNCwweDA4MmUwMDA0LDB4ZmY2NjY3YmEKKwkubG9uZwkweDA4MmUwMDAxLDB4ZmY2MjY3YjIsMHg2MDAwMDA2NiwweDA0ODAwMDAwCisJLmxvbmcJMHgwMDE4MGMwMCwweDAwMDY2NjE0LDB4MDgyZTAwMDMsMHhmZjY2NjYwMAorCS5sb25nCTB4MDA0YTA4MmUsMHgwMDA0ZmY2NiwweDY2MDAwMDQ2LDB4MmYwMDYxZmYKKwkubG9uZwkweDAwMDAwN2UwLDB4MjAxZjNkN2IsMHgwMjIyZmY2ZSwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljZjM2ZQorCS5sb25nCTB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGY4N2FlMDAwLDB4ZTAwNmUwMDQKKwkubG9uZwkweGUwMDVlMDAzLDB4ZTAwMmUwMDEsMHhlMDAxMzAzYywweDAwMDQ2MGJjCisJLmxvbmcJMHgzMDNjMDAwMywweDYwYjZlOWVlLDB4MDAwNmZmNDIsMHgwYzAwMDAxMQorCS5sb25nCTB4NjcwODBjMDAsMHgwMDE1Njc1MCwweDRlNzUzMDI4LDB4MDAwMDAyNDAKKwkubG9uZwkweDdmZmYwYzQwLDB4M2Y4MDY3MDgsMHgwYzQwNDA3ZiwweDY3MmM0ZTc1CisJLmxvbmcJMHgwMmE4N2ZmZiwweGZmZmYwMDA0LDB4NjcxODYxZmYsMHgwMDAwYmJiYworCS5sb25nCTB4NDQ0MDA2NDAsMHgzZjgxMDI2OCwweDgwMDAwMDAwLDB4ODE2ODAwMDAKKwkubG9uZwkweDRlNzUwMjY4LDB4ODAwMDAwMDAsMHg0ZTc1MDIyOCwweDAwN2YwMDA0CisJLmxvbmcJMHgwMDY4N2ZmZiwweDAwMDA0ZTc1LDB4MzAyODAwMDAsMHgwMjQwN2ZmZgorCS5sb25nCTB4MGM0MDNjMDAsMHg2NzA4MGM0MCwweDQzZmY2N2RlLDB4NGU3NTAyYTgKKwkubG9uZwkweDdmZmZmZmZmLDB4MDAwNDY2MDYsMHg0YWE4MDAwOCwweDY3YzQ2MWZmCisJLmxvbmcJMHgwMDAwYmI2OCwweDQ0NDAwNjQwLDB4M2MwMTAyNjgsMHg4MDAwMDAwMAorCS5sb25nCTB4ODE2ODAwMDAsMHg0ZTc1ZTllZSwweDAwYzNmZjQyLDB4MGMwMDAwMDMKKwkubG9uZwkweDY3MDAwNGEyLDB4MGMwMDAwMDcsMHg2NzAwMDQ5YSwweDAyYWVmZmZmCisJLmxvbmcJMHgwMGZmZmY2NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHhmMjNjODgwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgzMDJlZmY2YywweDAyNDA3ZmZmLDB4NjcxMDQxZWUKKwkubG9uZwkweGZmNmM2MWZmLDB4MDAwMGJiNWMsMHgxZDQwZmY0ZSwweDYwMDYxZDdjCisJLmxvbmcJMHgwMDA0ZmY0ZSwweDQyODAxMDJlLDB4ZmY2MzQxZWUsMHhmZjZjMmQ1NgorCS5sb25nCTB4ZmZkNDYxZmYsMHgwMDAwYWRlYywweDEwMmVmZjYyLDB4NjYwMDAwODYKKwkubG9uZwkweDJjYWVmZmQ0LDB4MDgyZTAwMDUsMHgwMDA0NjYyNiwweDIwNmVmZmQ4CisJLmxvbmcJMHg0ZTYwZjIyZSwweGQwYzBmZmRjLDB4ZjIyZTljMDAsMHhmZjYwNGNlZQorCS5sb25nCTB4MDMwM2ZmOWMsMHg0ZTVlMDgxNywweDAwMDc2NjdhLDB4NjBmZmZmZmYKKwkubG9uZwkweGY3MjIwYzJlLDB4MDAwOGZmNGEsMHg2NmQ4ZjIyZSwweGYwODBmZjZjCisJLmxvbmcJMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMworCS5sb25nCTB4ZmY5YzJjNTYsMHgyZjZmMDBjNCwweDAwYjgyZjZmLDB4MDBjODAwYmMKKwkubG9uZwkweDJmNmYwMDJjLDB4MDBjNDJmNmYsMHgwMDMwMDBjOCwweDJmNmYwMDM0CisJLmxvbmcJMHgwMGNjZGZmYywweDAwMDAwMGI4LDB4MDgxNzAwMDcsMHg2NjI4NjBmZgorCS5sb25nCTB4ZmZmZmY2ZDAsMHhjMDJlZmY2NiwweGVkYzAwNjA4LDB4NjYyYTA4MmUKKwkubG9uZwkweDAwMDRmZjY2LDB4NjcwMGZmNmEsMHgwODJlMDAwMSwweGZmNjI2NzAwCisJLmxvbmcJMHhmZjYwNjAwMCwweDAxNjYzZjdjLDB4MjAyNDAwMDYsMHhmMjJmYTQwMAorCS5sb25nCTB4MDAwODYwZmYsMHhmZmZmZjc4ZSwweDA0ODAwMDAwLDB4MDAxODMwM2IKKwkubG9uZwkweDAyMGE0ZWZiLDB4MDAwNjRhZmMsMHgwMDA4MDAwMCwweDAwMDAwMDNhCisJLmxvbmcJMHgwMDY0MDA5NCwweDAwMDAwMTQwLDB4MDAwMGYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4M2Q3YzMwZDgKKwkubG9uZwkweDAwMGEzZDdjLDB4ZTAwNmZmNmUsMHhmMzZlZmY2YywweDRlNWU2MGZmCisJLmxvbmcJMHhmZmZmZjZkNCwweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MAorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljM2Q3YywweDMwZDAwMDBhLDB4M2Q3Y2UwMDQKKwkubG9uZwkweGZmNmVmMzZlLDB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGY2OTRmMjJlCisJLmxvbmcJMHhmMDQwZmY2YywweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MAorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljM2Q3YywweDMwZDQwMDBhLDB4M2Q3Y2UwMDUKKwkubG9uZwkweGZmNmVmMzZlLDB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGY2MGMyY2FlCisJLmxvbmcJMHhmZmQ0MDgyZSwweDAwMDUwMDA0LDB4NjYwMDAwMzgsMHgyMDZlZmZkOAorCS5sb25nCTB4NGU2MGYyMmUsMHhmMDQwZmY2YywweGYyMmVkMGMwLDB4ZmZkY2YyMmUKKwkubG9uZwkweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljM2Q3YywweDMwY2MwMDBhCisJLmxvbmcJMHgzZDdjZTAwMywweGZmNmVmMzZlLDB4ZmY2YzRlNWUsMHg2MGZmZmZmZgorCS5sb25nCTB4ZjVkZTBjMmUsMHgwMDA4ZmY0YSwweDY2YzhmMjJlLDB4ZjA4MGZmNmMKKwkubG9uZwkweGYyMmVmMDQwLDB4ZmY3OGYyMmUsMHhkMGMwZmZkYywweGYyMmU5YzAwCisJLmxvbmcJMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4M2Q3YzMwY2MsMHgwMDBhM2Q3YworCS5sb25nCTB4ZTAwM2ZmN2EsMHhmMzZlZmY3OCwweDJjNTYyZjZmLDB4MDBjNDAwYjgKKwkubG9uZwkweDJmNmYwMGM4LDB4MDBiYzJmNmYsMHgwMGNjMDBjMCwweDJmNmYwMDJjCisJLmxvbmcJMHgwMGM0MmY2ZiwweDAwMzAwMGM4LDB4MmY2ZjAwMzQsMHgwMGNjZGZmYworCS5sb25nCTB4MDAwMDAwYjgsMHg2MGZmZmZmZiwweGY1NzZmMjJlLDB4ZjA0MGZmNmMKKwkubG9uZwkweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzCisJLmxvbmcJMHhmZjljM2Q3YywweDMwYzQwMDBhLDB4M2Q3Y2UwMDEsMHhmZjZlZjM2ZQorCS5sb25nCTB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGY1NWMwMmFlLDB4MDBmZjAwZmYKKwkubG9uZwkweGZmNjRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIzYywweDg4MDAwMDAwCisJLmxvbmcJMHgwMDAwNjFmZiwweDAwMDBiZGJhLDB4NDFlZWZmNmMsMHg2MWZmMDAwMAorCS5sb25nCTB4Yjk2MjFkNDAsMHhmZjRlZTllZSwweDAxODNmZjQyLDB4MDgyZTAwMDUKKwkubG9uZwkweGZmNDM2NzI4LDB4MGMyZTAwM2EsMHhmZjQzNjcyMCwweDYxZmYwMDAwCisJLmxvbmcJMHhiNGEwNDFlZSwweGZmNzg2MWZmLDB4MDAwMGI5MzgsMHgwYzAwMDAwNgorCS5sb25nCTB4NjYwNjYxZmYsMHgwMDAwYjg5YywweDFkNDBmZjRmLDB4NDI4MDEwMmUKKwkubG9uZwkweGZmNjNlOWVlLDB4MTA0N2ZmNDMsMHg0MWVlZmY2YywweDQzZWVmZjc4CisJLmxvbmcJMHgyMjNiMWQzMCwweDAwMDA2OGFhLDB4NGViYjE5MzAsMHgwMDAwNjhhMgorCS5sb25nCTB4MTAyZWZmNjIsMHg2NjAwMDA4YSwweDEwMmVmZjQzLDB4MDIwMDAwMzgKKwkubG9uZwkweDBjMDAwMDM4LDB4NjcwY2U5ZWUsMHgwMTgzZmY0MiwweDYxZmYwMDAwCisJLmxvbmcJMHhiNGQwMDgyZSwweDAwMDUwMDA0LDB4NjYwMDAwMmEsMHgyMDZlZmZkOAorCS5sb25nCTB4NGU2MGYyMmUsMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUKKwkubG9uZwkweDAzMDNmZjljLDB4NGU1ZTA4MTcsMHgwMDA3NjYwMCwweDAxMjY2MGZmCisJLmxvbmcJMHhmZmZmZjQ0MCwweDA4MmUwMDAyLDB4ZmY0YTY3ZDYsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzRlNWUKKwkubG9uZwkweDJmNmYwMDA0LDB4MDAxMDJmNmYsMHgwMDAwMDAwYywweGRmZmMwMDAwCisJLmxvbmcJMHgwMDBjMDgxNywweDAwMDc2NjAwLDB4MDBlYTYwZmYsMHhmZmZmZjQwNAorCS5sb25nCTB4YzAyZWZmNjYsMHhlZGMwMDYwOCwweDY2MTgwODJlLDB4MDAwNGZmNjYKKwkubG9uZwkweDY3MDBmZjY2LDB4MDgyZTAwMDEsMHhmZjYyNjcwMCwweGZmNWM2MDAwCisJLmxvbmcJMHgwMDZlMDQ4MCwweDAwMDAwMDE4LDB4MGMwMDAwMDYsMHg2ZDE0MDgyZQorCS5sb25nCTB4MDAwM2ZmNjYsMHg2NjAwMDA2MCwweDA4MmUwMDA0LDB4ZmY2NjY2MDAKKwkubG9uZwkweDAwNGUwODJlLDB4MDAwNTAwMDQsMHg2NjAwMDA1NCwweDIwNmVmZmQ4CisJLmxvbmcJMHg0ZTYwM2Q3YiwweDAyMmFmZjZlLDB4ZjIyZWQwYzAsMHhmZmRjZjIyZQorCS5sb25nCTB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWNmMzZlLDB4ZmY2YzRlNWUKKwkubG9uZwkweDA4MTcwMDA3LDB4NjYwMDAwNmMsMHg2MGZmZmZmZiwweGYzODZlMDAwCisJLmxvbmcJMHhlMDA2ZTAwNCwweGUwMDVlMDAzLDB4ZTAwMmUwMDEsMHhlMDAxMzAzYworCS5sb25nCTB4MDAwMzYwMDAsMHhmZmFlMzAzYywweDAwMDQ2MDAwLDB4ZmZhNjA4MmUKKwkubG9uZwkweDAwMDJmZjRhLDB4NjdhYzNkN2IsMHgwMmQ2ZmY2ZSwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljZjM2ZQorCS5sb25nCTB4ZmY2YzRlNWUsMHgyZjZmMDAwNCwweDAwMTAyZjZmLDB4MDAwMDAwMGMKKwkubG9uZwkweGRmZmMwMDAwLDB4MDAwYzA4MTcsMHgwMDA3NjYwNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmMzIyM2Y3YywweDIwMjQwMDA2LDB4ZjIyZmE0MDAsMHgwMDA4NjBmZgorCS5sb25nCTB4ZmZmZmY0MDIsMHgwMmFlZmZmZiwweDAwZmZmZjY0LDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGU5ZWUwMTgzCisJLmxvbmcJMHhmZjQyNjFmZiwweDAwMDBiMjJhLDB4NDFlZWZmNmMsMHg2MWZmMDAwMAorCS5sb25nCTB4Yjc1MjBjMDAsMHgwMDA2NjYwNiwweDYxZmYwMDAwLDB4YjZiNjFkNDAKKwkubG9uZwkweGZmNGU0MjgwLDB4MTAyZWZmNjMsMHg0MWVlZmY2YywweDJkNTZmZmQ0CisJLmxvbmcJMHg2MWZmMDAwMCwweGE5NGUxMDJlLDB4ZmY2MjY2MDAsMHgwMDg0MmNhZQorCS5sb25nCTB4ZmZkNDA4MmUsMHgwMDA1MDAwNCwweDY2MjgyMDZlLDB4ZmZkODRlNjAKKwkubG9uZwkweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzCisJLmxvbmcJMHhmZjljNGU1ZSwweDA4MTcwMDA3LDB4NjYwMGZmNjgsMHg2MGZmZmZmZgorCS5sb25nCTB4ZjI4MjA4MmUsMHgwMDAzZmY0YSwweDY3ZDZmMjJlLDB4ZDBjMGZmZGMKKwkubG9uZwkweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweDJjNTYyZjZmCisJLmxvbmcJMHgwMGM0MDBiOCwweDJmNmYwMGM4LDB4MDBiYzJmNmYsMHgwMDM4MDBjNAorCS5sb25nCTB4MmY2ZjAwM2MsMHgwMGM4MmY2ZiwweDAwNDAwMGNjLDB4ZGZmYzAwMDAKKwkubG9uZwkweDAwYjgwODE3LDB4MDAwNzY2MDAsMHhmZjFhNjBmZiwweGZmZmZmMjM0CisJLmxvbmcJMHhjMDJlZmY2NiwweGVkYzAwNjA4LDB4NjcwMGZmNzQsMHgyY2FlZmZkNAorCS5sb25nCTB4MGMwMDAwMWEsMHg2ZTAwMDBlOCwweDY3MDAwMDcyLDB4MDgyZTAwMDUKKwkubG9uZwkweDAwMDQ2NjBhLDB4MjA2ZWZmZDgsMHg0ZTYwNjAwMCwweGZiOGUwYzJlCisJLmxvbmcJMHgwMDA4ZmY0YSwweDY2MDBmYjg0LDB4ZjIyZWQwYzAsMHhmZmRjZjIyZQorCS5sb25nCTB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWMzZDdjLDB4MzBkODAwMGEKKwkubG9uZwkweDNkN2NlMDA2LDB4ZmY2ZWYzNmUsMHhmZjZjMmM1NiwweDJmNmYwMGM0CisJLmxvbmcJMHgwMGI4MmY2ZiwweDAwYzgwMGJjLDB4MmY2ZjAwY2MsMHgwMGMwMmY2ZgorCS5sb25nCTB4MDAzODAwYzQsMHgyZjZmMDAzYywweDAwYzgyZjZmLDB4MDA0MDAwY2MKKwkubG9uZwkweGRmZmMwMDAwLDB4MDBiODYwZmYsMHhmZmZmZjIyYywweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NjYwMCwweDAwMGMyMDZlLDB4ZmZkODRlNjAsMHg2MDAwZmI0NgorCS5sb25nCTB4MGMyZTAwMDgsMHhmZjRhNjYwMCwweGZiM2NmMjJlLDB4ZDBjMGZmZGMKKwkubG9uZwkweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweDNkN2MzMGQwCisJLmxvbmcJMHgwMDBhM2Q3YywweGUwMDRmZjZlLDB4ZjM2ZWZmNmMsMHgyYzU2MmY2ZgorCS5sb25nCTB4MDBjNDAwYjgsMHgyZjZmMDBjOCwweDAwYmMyZjZmLDB4MDBjYzAwYzAKKwkubG9uZwkweDJmNmYwMDM4LDB4MDBjNDJmNmYsMHgwMDNjMDBjOCwweDJmNmYwMDQwCisJLmxvbmcJMHgwMGNjZGZmYywweDAwMDAwMGI4LDB4NjBmZmZmZmYsMHhmMWE0MDgyZQorCS5sb25nCTB4MDAwNTAwMDQsMHg2NjAwMDAwYywweDIwNmVmZmQ4LDB4NGU2MDYwMDAKKwkubG9uZwkweGZiZGEwYzJlLDB4MDAwOGZmNGEsMHg2NjAwZmJkMCwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljM2Q3YworCS5sb25nCTB4MzBjNDAwMGEsMHgzZDdjZTAwMSwweGZmNmVmMzZlLDB4ZmY2YzJjNTYKKwkubG9uZwkweDJmNmYwMGM0LDB4MDBiODJmNmYsMHgwMGM4MDBiYywweDJmNmYwMGNjCisJLmxvbmcJMHgwMGMwMmY2ZiwweDAwMzgwMGM0LDB4MmY2ZjAwM2MsMHgwMGM4MmY2ZgorCS5sb25nCTB4MDA0MDAwY2MsMHhkZmZjMDAwMCwweDAwYjg2MGZmLDB4ZmZmZmYxMDYKKwkubG9uZwkweGU5ZWUwMGMzLDB4ZmY0MjBjMDAsMHgwMDAxNjcwOCwweDBjMDAwMDA1CisJLmxvbmcJMHg2NzM0NGU3NSwweDMwMmVmZjZjLDB4MDI0MDdmZmYsMHg2NzI2MGM0MAorCS5sb25nCTB4M2Y4MDZlMjAsMHg0NDQwMDY0MCwweDNmODEyMjJlLDB4ZmY3MGUwYTkKKwkubG9uZwkweDA4YzEwMDFmLDB4MmQ0MWZmNzAsMHgwMjZlODAwMCwweGZmNmMwMDZlCisJLmxvbmcJMHgzZjgwZmY2YywweDRlNzUzMDJlLDB4ZmY2YzAyNDAsMHg3ZmZmNjczYQorCS5sb25nCTB4MGM0MDNjMDAsMHg2ZTM0NGEyZSwweGZmNmM1YmVlLDB4ZmY2ZTNkNDAKKwkubG9uZwkweGZmNmM0MjgwLDB4NDFlZWZmNmMsMHgzMjNjM2MwMSwweDYxZmYwMDAwCisJLmxvbmcJMHhiMTU2MzAzYywweDNjMDA0YTJlLDB4ZmY2ZTY3MDQsMHgwOGMwMDAwZgorCS5sb25nCTB4MDhlZTAwMDcsMHhmZjcwM2Q0MCwweGZmNmM0ZTc1LDB4MDgyZTAwMDUKKwkubG9uZwkweDAwMDQ2N2ZmLDB4ZmZmZmYxNzYsMHgyZDY4MDAwMCwweGZmNzgyZDY4CisJLmxvbmcJMHgwMDA0ZmY3YywweDJkNjgwMDA4LDB4ZmY4MDQyODEsMHg0ZTc1MmYwMAorCS5sb25nCTB4NGU3YTA4MDgsMHgwODAwMDAwMSwweDY2MDAwNDYwLDB4MjAxZjRlNTYKKwkubG9uZwkweGZmNDA0OGVlLDB4MDMwM2ZmOWMsMHhmMjJlYmMwMCwweGZmNjBmMjJlCisJLmxvbmcJMHhmMGMwZmZkYywweDJkNmUwMDA2LDB4ZmY0NDIwNmUsMHhmZjQ0NThhZQorCS5sb25nCTB4ZmY0NDYxZmYsMHhmZmZmZjE1MiwweDJkNDBmZjQwLDB4NGE0MDZiMDAKKwkubG9uZwkweDAyMGUwMmFlLDB4MDBmZjAwZmYsMHhmZjY0MDgwMCwweDAwMGE2NjE4CisJLmxvbmcJMHgyMDZlZmY0NCwweDQzZWVmZjZjLDB4NzAwYzYxZmYsMHhmZmZmZjBkMgorCS5sb25nCTB4NGE4MTY2MDAsMHgwNDkyNjA0OCwweDIwNmVmZjQ0LDB4NDNlZWZmNmMKKwkubG9uZwkweDcwMGM2MWZmLDB4ZmZmZmYwYmEsMHg0YTgxNjYwMCwweDA0N2FlOWVlCisJLmxvbmcJMHgwMDRmZmY2YywweDBjNDA3ZmZmLDB4NjcyNjEwMmUsMHhmZjZmMDIwMAorCS5sb25nCTB4MDAwZjY2MGMsMHg0YWFlZmY3MCwweDY2MDY0YWFlLDB4ZmY3NDY3MTAKKwkubG9uZwkweDQxZWVmZjZjLDB4NjFmZjAwMDAsMHhiODhjZjIyZSwweGYwODBmZjZjCisJLmxvbmcJMHgwNmFlMDAwMCwweDAwMGNmZjQ0LDB4NDFlZWZmNmMsMHg2MWZmMDAwMAorCS5sb25nCTB4YjNjMjFkNDAsMHhmZjRlMGMwMCwweDAwMDY2NjBhLDB4NjFmZjAwMDAKKwkubG9uZwkweGIzMjIxZDQwLDB4ZmY0ZTQyMmUsMHhmZjUzMDgyZSwweDAwMDVmZjQzCisJLmxvbmcJMHg2NzQ4MDgyZSwweDAwMDRmZjQzLDB4NjYyY2U5ZWUsMHgwMTgzZmY0MgorCS5sb25nCTB4NjFmZjAwMDAsMHhhZWVjNDFlZSwweGZmNzg2MWZmLDB4MDAwMGIzODQKKwkubG9uZwkweDFkNDBmZjRmLDB4MGMwMDAwMDYsMHg2NjIwNjFmZiwweDAwMDBiMmU0CisJLmxvbmcJMHgxZDQwZmY0ZiwweDYwMTQwODJlLDB4MDAwM2ZmNDMsMHg2NzBjNTBlZQorCS5sb25nCTB4ZmY1MzA4MmUsMHgwMDAxZmY0MywweDY3YzA0MjgwLDB4MTAyZWZmNjMKKwkubG9uZwkweDEyMmVmZjQzLDB4MDI0MTAwN2YsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4NDFlZWZmNmMsMHg0M2VlZmY3OAorCS5sb25nCTB4MjIzYjE1MzAsMHgwMDAwNjJjYSwweDRlYmIxOTMwLDB4MDAwMDYyYzIKKwkubG9uZwkweDEwMmVmZjYyLDB4NjY0MDRhMmUsMHhmZjUzNjYwYywweGU5ZWUwMTgzCisJLmxvbmcJMHhmZjQyNjFmZiwweDAwMDBhZWZhLDB4MmQ2ZTAwMDYsMHhmZjY4MmQ2ZQorCS5sb25nCTB4ZmY0NDAwMDYsMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzRlNWUsMHgwODE3MDAwNywweDY2MDAwMDk2CisJLmxvbmcJMHg2MGZmZmZmZiwweGVlNmVjMDJlLDB4ZmY2NmVkYzAsMHgwNjA4NjYxMgorCS5sb25nCTB4MDgyZTAwMDQsMHhmZjY2NjdhZSwweDA4MmUwMDAxLDB4ZmY2MjY3YWMKKwkubG9uZwkweDYwMzQwNDgwLDB4MDAwMDAwMTgsMHgwYzAwMDAwNiwweDY2MTAwODJlCisJLmxvbmcJMHgwMDA0ZmY2NiwweDY2MjAwODJlLDB4MDAwM2ZmNjYsMHg2NjIwM2Q3YgorCS5sb25nCTB4MDIwNmZmNmUsMHg2MDFlZTAwMiwweGUwMDZlMDA0LDB4ZTAwNWUwMDMKKwkubG9uZwkweGUwMDJlMDAxLDB4ZTAwMTNkN2MsMHhlMDA1ZmY2ZSwweDYwMDYzZDdjCisJLmxvbmcJMHhlMDAzZmY2ZSwweDJkNmUwMDA2LDB4ZmY2ODJkNmUsMHhmZjQ0MDAwNgorCS5sb25nCTB4ZjIyZWQwYzAsMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMKKwkubG9uZwkweGZmOWNmMzZlLDB4ZmY2YzRlNWUsMHgwODE3MDAwNywweDY2MDY2MGZmCisJLmxvbmcJMHhmZmZmZWRlMCwweDJmMTczZjZmLDB4MDAwODAwMDQsMHgzZjdjMjAyNAorCS5sb25nCTB4MDAwNmYyMmYsMHhhNDAwMDAwOCwweDYwZmZmZmZmLDB4ZWViODA4MDAKKwkubG9uZwkweDAwMGU2NzAwLDB4MDFjMjA4MmUsMHgwMDA1MDAwNCwweDY2MTY0ZTY4CisJLmxvbmcJMHgyZDQ4ZmZkOCwweDYxZmYwMDAwLDB4OTU2NDIwNmUsMHhmZmQ4NGU2MAorCS5sb25nCTB4NjAwMDAxYWEsMHg0MjJlZmY0YSwweDQxZWUwMDBjLDB4MmQ0OGZmZDgKKwkubG9uZwkweDYxZmYwMDAwLDB4OTU0ODBjMmUsMHgwMDA4ZmY0YSwweDY3MDAwMDg2CisJLmxvbmcJMHgwYzJlMDAwNCwweGZmNGE2NjAwLDB4MDE4NDA4MmUsMHgwMDA3MDAwNAorCS5sb25nCTB4NjYzNjNkYWUsMHgwMDA0MDgwNCwweDJkYWVmZjQ0LDB4MDgwNjNkYmMKKwkubG9uZwkweDAwZjAwODBhLDB4NDFmNjA4MDQsMHgyZDQ4MDAwNCwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljNGU1ZQorCS5sb25nCTB4MmU1ZjYwZmYsMHhmZmZmZWQzYywweDNkYWUwMDA0LDB4MDgwMDJkYWUKKwkubG9uZwkweGZmNDQwODAyLDB4M2RiYzIwMjQsMHgwODA2MmRhZSwweDAwMDYwODA4CisJLmxvbmcJMHg0MWY2MDgwMCwweDJkNDgwMDA0LDB4ZjIyZWQwYzAsMHhmZmRjZjIyZQorCS5sb25nCTB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4MmU1ZjYwZmYKKwkubG9uZwkweGZmZmZlZGYyLDB4MWQ0MTAwMGEsMHgxZDQwMDAwYiwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljMmYxNgorCS5sb25nCTB4MmYwMDJmMDEsMHgyZjJlZmY0NCwweDQyODAxMDJlLDB4MDAwYjQ0ODAKKwkubG9uZwkweDA4MmUwMDA3LDB4MDAwNDY3MWMsMHgzZGFlMDAwNCwweDA4MDAyZGFlCisJLmxvbmcJMHgwMDA2MDgwOCwweDJkOWYwODAyLDB4M2RiYzIwMjQsMHgwODA2NDg3NgorCS5sb25nCTB4MDgwMDYwMTQsMHgzZGFlMDAwNCwweDA4MDQyZDlmLDB4MDgwNjNkYmMKKwkubG9uZwkweDAwZjAwODBhLDB4NDg3NjA4MDQsMHg0MjgxMTIyZSwweDAwMGE0YTAxCisJLmxvbmcJMHg2YTBjZjIzNiwweGYwODAwODBjLDB4MDY4MDAwMDAsMHgwMDBjZTMwOQorCS5sb25nCTB4NmEwY2YyMzYsMHhmMDQwMDgwYywweDA2ODAwMDAwLDB4MDAwY2UzMDkKKwkubG9uZwkweDZhMGNmMjM2LDB4ZjAyMDA4MGMsMHgwNjgwMDAwMCwweDAwMGNlMzA5CisJLmxvbmcJMHg2YTBjZjIzNiwweGYwMTAwODBjLDB4MDY4MDAwMDAsMHgwMDBjZTMwOQorCS5sb25nCTB4NmEwY2YyMzYsMHhmMDA4MDgwYywweDA2ODAwMDAwLDB4MDAwY2UzMDkKKwkubG9uZwkweDZhMGNmMjM2LDB4ZjAwNDA4MGMsMHgwNjgwMDAwMCwweDAwMGNlMzA5CisJLmxvbmcJMHg2YTBjZjIzNiwweGYwMDIwODBjLDB4MDY4MDAwMDAsMHgwMDBjZTMwOQorCS5sb25nCTB4NmEwNmYyMzYsMHhmMDAxMDgwYywweDIyMmYwMDA0LDB4MjAyZjAwMDgKKwkubG9uZwkweDJjNmYwMDBjLDB4MmU1ZjA4MTcsMHgwMDA3NjdmZiwweGZmZmZlYzA0CisJLmxvbmcJMHg2MGZmZmZmZiwweGVjZjA2MWZmLDB4MDAwMDliZGEsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzA4MmUKKwkubG9uZwkweDAwMDcwMDA0LDB4NjYwZTJkNmUsMHhmZjQ0MDAwNiwweDRlNWU2MGZmCisJLmxvbmcJMHhmZmZmZWJkMCwweDJjNTYzZjZmLDB4MDBjNDAwYzAsMHgyZjZmMDBjNgorCS5sb25nCTB4MDBjODJmNmYsMHgwMDA0MDBjMiwweDNmN2MyMDI0LDB4MDBjNmRmZmMKKwkubG9uZwkweDAwMDAwMGMwLDB4NjBmZmZmZmYsMHhlYzljMjAxZiwweDRlNTZmZjQwCisJLmxvbmcJMHg0OGVlMDMwMywweGZmOWMyZDZlLDB4MDAwNmZmNDQsMHgyMDZlZmY0NAorCS5sb25nCTB4NThhZWZmNDQsMHg2MWZmZmZmZiwweGVkMDAyZDQwLDB4ZmY0MDRhNDAKKwkubG9uZwkweDZiMDQ3MDEwLDB4NjAyNjA4MDAsMHgwMDBlNjYxMCwweGU5YzAxNGMzCisJLmxvbmcJMHg3MDBjMGMwMSwweDAwMDc2NjE0LDB4NTg4MDYwMTAsMHg0MjgwNjFmZgorCS5sb25nCTB4MDAwMDk2N2MsMHgyMDJlZmY0NCwweDkwYWUwMDA2LDB4M2Q0MDAwMGEKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzRlNWUsMHg1MThmMmYwMCwweDNmNmYwMDBjCisJLmxvbmcJMHgwMDA0MmY2ZiwweDAwMGUwMDA2LDB4NDI4MDMwMmYsMHgwMDEyMmY2ZgorCS5sb25nCTB4MDAwNjAwMTAsMHhkMWFmMDAwNiwweDNmN2M0MDJjLDB4MDAwYTIwMWYKKwkubG9uZwkweDYwZmZmZmZmLDB4ZWJlNDRlN2EsMHgwODA4MDgwMCwweDAwMDE2NjBjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjBmMjJlLDB4ZDBjMGZmZGMsMHg0Y2VlMDMwMworCS5sb25nCTB4ZmY5YzRlNWUsMHg1MTRmMmVhZiwweDAwMDgzZjZmLDB4MDAwYzAwMDQKKwkubG9uZwkweDNmN2M0MDA4LDB4MDAwNjJmNmYsMHgwMDAyMDAwOCwweDJmN2MwOTQyCisJLmxvbmcJMHg4MDAxMDAwYywweDA4MTcwMDA1LDB4NjcwNjA4ZWYsMHgwMDAyMDAwZAorCS5sb25nCTB4NjBmZmZmZmYsMHhlYmQ2NGZlZSwweGZmNDA0ZTdhLDB4MTgwODA4MDEKKwkubG9uZwkweDAwMDE2NjBjLDB4ZjIyZWQwYzAsMHhmZmRjZjIyZiwweDljMDAwMDIwCisJLmxvbmcJMHgyYzU2MmY2ZiwweDAwYzQwMGJjLDB4M2Y2ZjAwYzgsMHgwMGMwM2Y3YworCS5sb25nCTB4NDAwODAwYzIsMHgyZjQ4MDBjNCwweDNmNDAwMGM4LDB4M2Y3YzAwMDEKKwkubG9uZwkweDAwY2E0Y2VmLDB4MDMwMzAwNWMsMHhkZWZjMDBiYywweDYwYTY0ZTU2CisJLmxvbmcJMHhmZjQwZjMyZSwweGZmNmM0OGVlLDB4MDMwM2ZmOWMsMHhmMjJlYmMwMAorCS5sb25nCTB4ZmY2MGYyMmUsMHhmMGMwZmZkYywweDJkNmVmZjY4LDB4ZmY0NDIwNmUKKwkubG9uZwkweGZmNDQ1OGFlLDB4ZmY0NDYxZmYsMHhmZmZmZWJjZSwweDJkNDBmZjQwCisJLmxvbmcJMHgwODAwMDAwZCwweDY2Mjg0MWVlLDB4ZmY2YzYxZmYsMHhmZmZmZjFlYQorCS5sb25nCTB4ZjIyZWQwYzAsMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMKKwkubG9uZwkweGZmOWNmMzZlLDB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGVhOTQzMjJlCisJLmxvbmcJMHhmZjZjMDI0MSwweDdmZmYwYzQxLDB4N2ZmZjY2MWEsMHg0YWFlZmY3NAorCS5sb25nCTB4NjYwYzIyMmUsMHhmZjcwMDI4MSwweDdmZmZmZmZmLDB4NjcwODJkNmUKKwkubG9uZwkweGZmNzBmZjU0LDB4NjAxMjIyM2MsMHg3ZmZmZmZmZiwweDRhMmVmZjZjCisJLmxvbmcJMHg2YTAyNTI4MSwweDJkNDFmZjU0LDB4ZTljMDA0YzMsMHgxMjJlZmY0MQorCS5sb25nCTB4MzA3YjAyMDYsMHg0ZWZiODgwMiwweDAwNmMwMDAwLDB4MDAwMGZmOTgKKwkubG9uZwkweDAwM2UwMDAwLDB4MDAxMDAwMDAsMHgxMDJlZmY1NCwweDBjMDEwMDA3CisJLmxvbmcJMHg2ZjE2MjA2ZSwweDAwMGM2MWZmLDB4ZmZmZmViODYsMHg0YTgxNjZmZgorCS5sb25nCTB4MDAwMGJjYTgsMHg2MDAwZmY2YSwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweGE4MDQ2MDAwLDB4ZmY1YzMwMmUsMHhmZjU0MGMwMSwweDAwMDc2ZjE2CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4ZWI2ZTRhODEsMHg2NmZmMDAwMAorCS5sb25nCTB4YmM4ODYwMDAsMHhmZjNjMDI0MSwweDAwMDc2MWZmLDB4MDAwMGE3OWEKKwkubG9uZwkweDYwMDBmZjJlLDB4MjAyZWZmNTQsMHgwYzAxMDAwNywweDZmMTYyMDZlCisJLmxvbmcJMHgwMDBjNjFmZiwweGZmZmZlYjU2LDB4NGE4MTY2ZmYsMHgwMDAwYmM2OAorCS5sb25nCTB4NjAwMGZmMGUsMHgwMjQxMDAwNywweDYxZmYwMDAwLDB4YTczMDYwMDAKKwkubG9uZwkweGZmMDA0ZTU2LDB4ZmY0MGYzMmUsMHhmZjZjNDhlZSwweDAzMDNmZjljCisJLmxvbmcJMHhmMjJlYmMwMCwweGZmNjBmMjJlLDB4ZjBjMGZmZGMsMHgyZDZlZmY2OAorCS5sb25nCTB4ZmY0NDIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmLDB4ZmZmZmVhOGEKKwkubG9uZwkweDJkNDBmZjQwLDB4MDgwMDAwMGQsMHg2NjAwMDAyYSwweDQxZWVmZjZjCisJLmxvbmcJMHg2MWZmZmZmZiwweGYwYTRmMjJlLDB4ZDBjMGZmZGMsMHhmMjJlOWMwMAorCS5sb25nCTB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweGYzNmVmZjZjLDB4NGU1ZTYwZmYKKwkubG9uZwkweGZmZmZlOTY0LDB4ZTljMDA0YzMsMHgxMjJlZmY0MSwweDMwN2IwMjA2CisJLmxvbmcJMHg0ZWZiODgwMiwweDAwNzQwMGE2LDB4MDE1YTAwMDAsMHgwMDQyMDEwNAorCS5sb25nCTB4MDAxMDAwMDAsMHgxMDJlZmY3MCwweDA4YzAwMDA2LDB4MGMwMTAwMDcKKwkubG9uZwkweDZmMTYyMDZlLDB4MDAwYzYxZmYsMHhmZmZmZWE3NiwweDRhODE2NmZmCisJLmxvbmcJMHgwMDAwYmI5OCwweDYwMDBmZmEwLDB4MDI0MTAwMDcsMHg2MWZmMDAwMAorCS5sb25nCTB4YTZmNDYwMDAsMHhmZjkyMzAyZSwweGZmNzAwOGMwLDB4MDAwZTBjMDEKKwkubG9uZwkweDAwMDc2ZjE2LDB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweGVhNWE0YTgxCisJLmxvbmcJMHg2NmZmMDAwMCwweGJiNzQ2MDAwLDB4ZmY2ZTAyNDEsMHgwMDA3NjFmZgorCS5sb25nCTB4MDAwMGE2ODYsMHg2MDAwZmY2MCwweDIwMmVmZjcwLDB4MDhjMDAwMWUKKwkubG9uZwkweDBjMDEwMDA3LDB4NmYxNjIwNmUsMHgwMDBjNjFmZiwweGZmZmZlYTNlCisJLmxvbmcJMHg0YTgxNjZmZiwweDAwMDBiYjUwLDB4NjAwMGZmM2MsMHgwMjQxMDAwNworCS5sb25nCTB4NjFmZjAwMDAsMHhhNjE4NjAwMCwweGZmMmUwYzAxLDB4MDAwNzZmMmUKKwkubG9uZwkweDIwMmVmZjZjLDB4MDI4MDgwMDAsMHgwMDAwMDA4MCwweDdmYzAwMDAwCisJLmxvbmcJMHgyMjJlZmY3MCwweGUwODk4MDgxLDB4MjA2ZTAwMGMsMHg2MWZmZmZmZgorCS5sb25nCTB4ZTlmYzRhODEsMHg2NmZmMDAwMCwweGJiMGU2MDAwLDB4ZmVmYTIwMmUKKwkubG9uZwkweGZmNmMwMjgwLDB4ODAwMDAwMDAsMHgwMDgwN2ZjMCwweDAwMDAyZjAxCisJLmxvbmcJMHgyMjJlZmY3MCwweGUwODk4MDgxLDB4MjIxZjAyNDEsMHgwMDA3NjFmZgorCS5sb25nCTB4MDAwMGE1YmEsMHg2MDAwZmVkMCwweDIwMmVmZjZjLDB4MDI4MDgwMDAKKwkubG9uZwkweDAwMDAwMDgwLDB4N2ZmODAwMDAsMHgyMjJlZmY3MCwweDJkNDBmZjg0CisJLmxvbmcJMHg3MDBiZTBhOSwweDgzYWVmZjg0LDB4MjIyZWZmNzAsMHgwMjgxMDAwMAorCS5sb25nCTB4MDdmZmUwYjksMHgyZDQxZmY4OCwweDIyMmVmZjc0LDB4ZTBhOTgzYWUKKwkubG9uZwkweGZmODg0MWVlLDB4ZmY4NDIyNmUsMHgwMDBjNzAwOCwweDYxZmZmZmZmCisJLmxvbmcJMHhlOGNjNGE4MSwweDY2ZmYwMDAwLDB4YmE5YzYwMDAsMHhmZTdhNDIyZQorCS5sb25nCTB4ZmY0YTNkNmUsMHhmZjZjZmY4NCwweDQyNmVmZjg2LDB4MjAyZWZmNzAKKwkubG9uZwkweDA4YzAwMDFlLDB4MmQ0MGZmODgsMHgyZDZlZmY3NCwweGZmOGMwODJlCisJLmxvbmcJMHgwMDA1MDAwNCwweDY2Mzg0ZTY4LDB4MmQ0OGZmZDgsMHgyZDU2ZmZkNAorCS5sb25nCTB4NjFmZjAwMDAsMHg5ODkyMjI0OCwweDJkNDgwMDBjLDB4MjA2ZWZmZDgKKwkubG9uZwkweDRlNjAyY2FlLDB4ZmZkNDQxZWUsMHhmZjg0NzAwYywweDYxZmZmZmZmCisJLmxvbmcJMHhlODZjNGE4MSwweDY2ZmYwMDAwLDB4YmE0YTYwMDAsMHhmZTFhMmQ1NgorCS5sb25nCTB4ZmZkNDYxZmYsMHgwMDAwOTg2MCwweDIyNDgyZDQ4LDB4MDAwYzJjYWUKKwkubG9uZwkweGZmZDQwYzJlLDB4MDAwOGZmNGEsMHg2NmNjZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHhmMzZlZmY2YworCS5sb25nCTB4MmM2ZWZmZDQsMHgyZjZmMDBjNCwweDAwYjgyZjZmLDB4MDBjODAwYmMKKwkubG9uZwkweDJmNmYwMGNjLDB4MDBjMDJmNmYsMHgwMDQ0MDBjNCwweDJmNmYwMDQ4CisJLmxvbmcJMHgwMGM4MmY2ZiwweDAwNGMwMGNjLDB4ZGZmYzAwMDAsMHgwMGI4NjBmZgorCS5sb25nCTB4ZmZmZmU3MzQsMHg0ZTU2ZmY0MCwweGYzMmVmZjZjLDB4NDhlZTAzMDMKKwkubG9uZwkweGZmOWNmMjJlLDB4YmMwMGZmNjAsMHhmMjJlZjBjMCwweGZmZGMyZDZlCisJLmxvbmcJMHhmZjY4ZmY0NCwweDIwNmVmZjQ0LDB4NThhZWZmNDQsMHg2MWZmZmZmZgorCS5sb25nCTB4ZTdmODJkNDAsMHhmZjQwMDgwMCwweDAwMGQ2NjAwLDB4MDEwNmU5YzAKKwkubG9uZwkweDA0YzM2NjIyLDB4MGM2ZTQwMWUsMHhmZjZjNjYxYSwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0MDAwLDB4ZmY3MGYyMmUsMHg2ODAwZmY2YworCS5sb25nCTB4M2Q3Y2UwMDEsMHhmZjZlNDFlZSwweGZmNmM2MWZmLDB4ZmZmZmVkZWEKKwkubG9uZwkweDAyYWUwMGZmLDB4MDFmZmZmNjQsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZTllZTEwMDYsMHhmZjQyMGMwMQorCS5sb25nCTB4MDAxNzY3MDAsMHgwMDk2NDFlZSwweGZmNmM2MWZmLDB4MDAwMGFhODQKKwkubG9uZwkweDFkNDBmZjRlLDB4MDgyZTAwMDUsMHhmZjQzNjcyZSwweDA4MmUwMDA0CisJLmxvbmcJMHhmZjQzNjYyNiwweGU5ZWUwMTgzLDB4ZmY0MjYxZmYsMHgwMDAwYTVjMgorCS5sb25nCTB4NDFlZWZmNzgsMHg2MWZmMDAwMCwweGFhNWEwYzAwLDB4MDAwNjY2MDYKKwkubG9uZwkweDYxZmYwMDAwLDB4YTliZTFkNDAsMHhmZjRmNDI4MCwweDEwMmVmZjYzCisJLmxvbmcJMHgxMjJlZmY0MywweDAyNDEwMDdmLDB4NDFlZWZmNmMsMHg0M2VlZmY3OAorCS5sb25nCTB4MjIzYjE1MzAsMHgwMDAwNTljYSwweDRlYmIxOTMwLDB4MDAwMDU5YzIKKwkubG9uZwkweGU5ZWUwMTgzLDB4ZmY0MjYxZmYsMHgwMDAwYTYwNiwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljZjM2ZQorCS5sb25nCTB4ZmY2YzRlNWUsMHg2MGZmZmZmZiwweGU1Y2M0MjgwLDB4MTAyZWZmNjMKKwkubG9uZwkweDEyMmVmZjQzLDB4MDI4MTAwMDAsMHgwMDdmNjFmZiwweDAwMDA0M2NlCisJLmxvbmcJMHg2MGJlMWQ3YywweDAwMDBmZjRlLDB4NDI4MDEwMmUsMHhmZjYzMDJhZQorCS5sb25nCTB4ZmZmZjAwZmYsMHhmZjY0NDFlZSwweGZmNmM2MWZmLDB4MDAwMDliZTQKKwkubG9uZwkweDYwYWE0ZTU2LDB4ZmY0MGYzMmUsMHhmZjZjNDhlZSwweDAzMDNmZjljCisJLmxvbmcJMHhmMjJlYmMwMCwweGZmNjBmMjJlLDB4ZjBjMGZmZGMsMHgyZDZlZmY2OAorCS5sb25nCTB4ZmY0NDIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmLDB4ZmZmZmU2OWEKKwkubG9uZwkweDJkNDBmZjQwLDB4NDFlZWZmNmMsMHg2MWZmZmZmZiwweGVjYmNmMjJlCisJLmxvbmcJMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YworCS5sb25nCTB4ZjM2ZWZmNmMsMHg0ZTVlNjBmZiwweGZmZmZlNTkyLDB4MGM2ZjIwMmMKKwkubG9uZwkweDAwMDY2N2ZmLDB4MDAwMDAwYWEsMHgwYzZmNDAyYywweDAwMDY2N2ZmCisJLmxvbmcJMHhmZmZmZTVhNiwweDRlNTZmZjQwLDB4NDhlZTAzMDMsMHhmZjljMmQ2ZQorCS5sb25nCTB4MDAwNmZmNDQsMHgyMDZlZmY0NCwweDU4YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweGU2MzhlOWMwLDB4MTAwYTBjNDEsMHgwM2M4NjY2NCwweGU5YzAxNDA2CisJLmxvbmcJMHgwYzAxMDAxNywweDY2NWE0ZTdhLDB4MDgwODA4MDAsMHgwMDAxNjcyYQorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljNGU1ZSwweDUxOGYzZWFmLDB4MDAwODJmNmYKKwkubG9uZwkweDAwMGEwMDAyLDB4M2Y3YzQwMmMsMHgwMDA2MmY2ZiwweDAwMDIwMDBjCisJLmxvbmcJMHg1OGFmMDAwMiwweDYwZmZmZmZmLDB4ZTU0MDRjZWUsMHgwMzAzZmY5YworCS5sb25nCTB4NGU1ZWYyMmYsMHg4NDAwMDAwMiwweDU4YWYwMDAyLDB4MmYxNzJmNmYKKwkubG9uZwkweDAwMDgwMDA0LDB4MWY3YzAwMjAsMHgwMDA2NjBmZiwweDAwMDAwMDEyCisJLmxvbmcJMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4NjBmZmZmZmYsMHhlNGY2NGU1NgorCS5sb25nCTB4ZmY0MDQ4ZWUsMHgwMzAzZmY5YywweGYyMmViYzAwLDB4ZmY2MGYyMmUKKwkubG9uZwkweGYwYzBmZmRjLDB4MDgyZTAwMDUsMHgwMDA0NjYwOCwweDRlNjgyZDQ4CisJLmxvbmcJMHhmZmQ4NjAwYywweDQxZWUwMDEwLDB4MmQ0OGZmZDgsMHgyZDQ4ZmZkNAorCS5sb25nCTB4MmQ2ZWZmNjgsMHhmZjQ0MjA2ZSwweGZmNDQ1OGFlLDB4ZmY0NDYxZmYKKwkubG9uZwkweGZmZmZlNTc2LDB4MmQ0MGZmNDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4NDIyZWZmNGEsMHgwODAwMDAxNgorCS5sb25nCTB4NjYwMDAxODIsMHg0MjJlZmY1MywweDAyYWUwMGZmLDB4MDBmZmZmNjQKKwkubG9uZwkweGU5YzAxNDA2LDB4MGMwMTAwMTcsMHg2NzAwMDBiZSwweDYxZmYwMDAwCisJLmxvbmcJMHg5NWZjNDI4MCwweDEwMmVmZjYzLDB4MTIyZWZmNDMsMHgwMjQxMDAzZgorCS5sb25nCTB4ZTc0OTgyMmUsMHhmZjRlNDNlZSwweGZmNzg0MWVlLDB4ZmY2YzMyM2IKKwkubG9uZwkweDEzMjAwMmIyLDB4NGViYjExMjAsMHgwMmFjMTAyZSwweGZmNjI2NjAwCisJLmxvbmcJMHgwMGEyZTllZSwweDAxODNmZjQyLDB4NjFmZjAwMDAsMHhhM2U0ZjIyZQorCS5sb25nCTB4ZDBjMGZmZGMsMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMKKwkubG9uZwkweDBjMmUwMDA0LDB4ZmY0YTY3MmEsMHgwYzJlMDAwOCwweGZmNGE2NzIyCisJLmxvbmcJMHg0ZTVlMDgxNywweDAwMDc2N2ZmLDB4ZmZmZmUzNTgsMHhmMzI3ZjIyZgorCS5sb25nCTB4YTQwMDAwMTQsMHhmMzVmM2Y3YywweDIwMjQwMDA2LDB4NjBmZmZmZmYKKwkubG9uZwkweGU0MzQwODJlLDB4MDAwNTAwMDQsMHg2NjBjMmYwOCwweDIwNmVmZmQ4CisJLmxvbmcJMHg0ZTYwMjA1ZiwweDYwY2EyZjAwLDB4MjAyZWZmZDgsMHg5MGFlZmZkNAorCS5sb25nCTB4MmRhZTAwMDgsMHgwODA4MmRhZSwweDAwMDQwODA0LDB4M2Q0MDAwMDQKKwkubG9uZwkweDIwMWY0ZTVlLDB4ZGVkNzYwYWEsMHg0MjgwMTAyZSwweGZmNjMxMjJlCisJLmxvbmcJMHhmZjQzMDI4MSwweDAwMDAwMDdmLDB4NjFmZjAwMDAsMHg0MTUwNjAwMAorCS5sb25nCTB4ZmY1YWMwMmUsMHhmZjY2ZWRjMCwweDA2MDg2NjE2LDB4MDgyZTAwMDQKKwkubG9uZwkweGZmNjY2NzAwLDB4ZmY0ZTA4MmUsMHgwMDAxZmY2MiwweDY3MDBmZjQ0CisJLmxvbmcJMHg2MDNlMDQ4MCwweDAwMDAwMDE4LDB4MGMwMDAwMDYsMHg2NjEwMDgyZQorCS5sb25nCTB4MDAwNGZmNjYsMHg2NjJhMDgyZSwweDAwMDNmZjY2LDB4NjYzMDJmMDAKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjFlZTIwMWYsMHgzZDdiMDIwNiwweGZmNmU2MDJhCisJLmxvbmcJMHhlMDAyZTAwNiwweGUwMDRlMDA1LDB4ZTAwM2UwMDIsMHhlMDAxZTAwMQorCS5sb25nCTB4NjFmZmZmZmYsMHhmMWNlM2Q3YywweGUwMDVmZjZlLDB4NjAwYzYxZmYKKwkubG9uZwkweGZmZmZmMWMwLDB4M2Q3Y2UwMDMsMHhmZjZlZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHhmMzZlZmY2YworCS5sb25nCTB4NjAwMGZlZWUsMHhlOWMwMTI4MywweDBjMDEwMDAxLDB4NjcwMDAwNTYKKwkubG9uZwkweDBjMDEwMDA3LDB4NjYwMDAwNzgsMHhlOWMwMTM0MywweDBjMDEwMDAyCisJLmxvbmcJMHg2ZDAwMDA2YywweDYxZmYwMDAwLDB4ODI3ODBjMmUsMHgwMDAyZmY0YQorCS5sb25nCTB4NjcwMDAwZDIsMHgwYzJlMDAwMSwweGZmNGE2NjAwLDB4MDEwMDJkNmUKKwkubG9uZwkweGZmNjgwMDBjLDB4M2Q3YzIwMWMsMHgwMDBhZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHg0ZTVlNjBmZgorCS5sb25nCTB4ZmZmZmUyZGMsMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweGUzNTI0YTgxLDB4NjYwMDA0N2MsMHg0OGMwNjFmZiwweDAwMDA3ZTYwCisJLmxvbmcJMHgwYzJlMDAwMiwweGZmNGE2NzAwLDB4MDA3YzYwMDAsMHgwMGIwNjFmZgorCS5sb25nCTB4MDAwMDg1NjIsMHgwYzJlMDAwMiwweGZmNGE2NzAwLDB4MDA2ODA4MmUKKwkubG9uZwkweDAwMDUwMDA0LDB4NjYwYTIwNmUsMHhmZmQ4NGU2MCwweDYwMDAwMDhlCisJLmxvbmcJMHgwYzJlMDAwOCwweGZmNGE2NjAwLDB4MDA4NGYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4NGU1ZTA4MTcKKwkubG9uZwkweDAwMDc2NjEyLDB4NTU4ZjJlYWYsMHgwMDAyMmY2ZiwweDAwMDYwMDA0CisJLmxvbmcJMHg2MGZmZmZmZiwweGUxN2U1NThmLDB4MmVhZjAwMDIsMHgzZjZmMDAwNgorCS5sb25nCTB4MDAwNDNmN2MsMHgyMDI0MDAwNiwweGYyMmZhNDAwLDB4MDAwODYwZmYKKwkubG9uZwkweGZmZmZlMjUyLDB4M2Q3YzAwYzAsMHgwMDBlMmQ2ZSwweGZmNjgwMDBhCisJLmxvbmcJMHgzZDZlMDAwNCwweDAwMDgzZDdjLDB4ZTAwMGZmNmUsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5Y2YzNmUKKwkubG9uZwkweGZmNmM0ZTVlLDB4NTg4ZjYwZmYsMHhmZmZmZTE4MCwweGYyMmVkMGMwCisJLmxvbmcJMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljNGU1ZQorCS5sb25nCTB4MDgxNzAwMDcsMHg2NjA2NjBmZiwweGZmZmZlMTA4LDB4ZjIyZmE0MDAKKwkubG9uZwkweDAwMDgxZjdjLDB4MDAyNDAwMDcsMHg2MGZmZmZmZiwweGUxZTg0YWZjCisJLmxvbmcJMHgwMWMwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAyOGE0LDB4NGIxZTRiNGMsMHg0ZjRjMjk4MiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMzVjNiwweDRiMWU0YjgyLDB4NGY0YzM3MWEsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAyNGIwLDB4NGIxZTRiOGMsMHg0ZjRjMjc2NiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMjk4OCwweDRiMWU0Yjk0LDB4NGY0YzJhZjAsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDFhYjgsMHg0YjFlNGJkMCwweDRmNGMxY2Y2LDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMWNmYywweDRiMWU0NzQ0LDB4NGY0YzFkYWEsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDM3MjAsMHg0YjFlNDc0NCwweDRmNGMzN2EyLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwNDY4LDB4NGIxZTQ3NDQsMHg0ZjRjMDY0YywweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMGYyYSwweDRiMWU0NzQ0LDB4NGY0YzEwOGUsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDIyZTAsMHg0YjlhNGI3YSwweDRmNGMyNDhjLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAzZDAyLDB4NGI5YTRiN2EsMHg0ZjRjM2RkYywweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwM2RmYSwweDRiOWE0YjdhLDB4NGY0YzNmMmEsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAzMzg2LDB4NDczMjRiODIsMHg0ZjRjMzUzOCwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMzdjOCwweDQ3MzI0YjgyLDB4NGY0YzM3ZjgsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDM4MTgsMHg0NzMyNGI4MiwweDRmNGMzODcyLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDI3ZTYsMHg0YjlhNGI1MiwweDRmNGMyODhhLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDFkYjAsMHg0YmQ2NDc0NCwweDRmNGMxZTQwLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwNDcyLDB4NGI5YTQ3NDQsMHg0ZjRjMDY1MiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMjc2YywweDRiMWU0NzQ0LDB4NGY0YzI3ODgsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDI3YTAsMHg0YjFlNDc0NCwweDRmNGMyN2NlLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwNGNhNCwweDRjZGE0ZDEyLDB4NGVlMjRjYTQsMHg0ZWY0MDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDRkYWMsMHg0ZGUyNGUxYSwweDRlZTI0ZGFjLDB4NGVmNDAwMDAKKwkubG9uZwkweDAwMDA0ZTRlLDB4NGU4NjRlYmUsMHg0ZWUyNGU0ZSwweDRlZjQwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDY2MCwweDRiZjI0YzIwLDB4NGMzMDA4ZjYsMHg0YzQwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDAwNjYwLDB4NGJmMjRjMjAsMHg0YzMwMDhmNiwweDRjNDAwMDAwCisJLmxvbmcJMHgwMDAwMDY2MCwweDRiZjI0YzIwLDB4NGMzMDA4ZjYsMHg0YzQwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDAwNjYwLDB4NGJmMjRjMjAsMHg0YzMwMDhmNiwweDRjNDAwMDAwCisJLmxvbmcJMHgwMDAwMDY2MCwweDRiZjI0YzIwLDB4NGMzMDA4ZjYsMHg0YzQwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDA0Y2VlLDB4MDMwM2ZmOWMsMHhmMjJlOWMwMCwweGZmNjBmMjJlCisJLmxvbmcJMHhkMGMwZmZkYywweDJkNmVmZjY4LDB4MDAwNjRlNWUsMHgyZjE3M2Y2ZgorCS5sb25nCTB4MDAwODAwMDQsMHgzZjdjNDAwOCwweDAwMDYyZjZmLDB4MDAwMjAwMDgKKwkubG9uZwkweDJmN2MwOTQyLDB4ODAwMTAwMGMsMHgwODE3MDAwNSwweDY3MDYwOGVmCisJLmxvbmcJMHgwMDAyMDAwZCwweDYwZmZmZmZmLDB4ZGUzMmJkNmEsMHhhYTc3Y2NjOQorCS5sb25nCTB4OTRmNTNkZTYsMHgxMjA5N2FhZSwweDhkYTFiZTVhLDB4ZTY0NTJhMTEKKwkubG9uZwkweDhhZTQzZWM3LDB4MWRlM2E1MzQsMHgxNTMxYmYyYSwweDAxYTAxYTAxCisJLmxvbmcJMHg4YjU5MDAwMCwweDAwMDAwMDAwLDB4MDAwMDNmZjgsMHgwMDAwODg4OAorCS5sb25nCTB4ODg4ODg4ODgsMHg1OWFmMDAwMCwweDAwMDBiZmZjLDB4MDAwMGFhYWEKKwkubG9uZwkweGFhYWFhYWFhLDB4YWE5OTAwMDAsMHgwMDAwM2QyYSwweGM0ZDBkNjAxCisJLmxvbmcJMHgxZWUzYmRhOSwweDM5NmY5ZjQ1LDB4YWMxOTNlMjEsMHhlZWQ5MDYxMgorCS5sb25nCTB4Yzk3MmJlOTIsMHg3ZTRmYjc5ZCwweDlmY2YzZWZhLDB4MDFhMDFhMDEKKwkubG9uZwkweGQ0MjMwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYmZmNSwweDAwMDBiNjBiCisJLmxvbmcJMHg2MGI2MGI2MSwweGQ0MzgwMDAwLDB4MDAwMDNmZmEsMHgwMDAwYWFhYQorCS5sb25nCTB4YWFhYWFhYWEsMHhhYjVlYmYwMCwweDAwMDAyZDdjLDB4MDAwMDAwMDAKKwkubG9uZwkweGZmNWM2MDA4LDB4MmQ3YzAwMDAsMHgwMDAxZmY1YywweGYyMTA0ODAwCisJLmxvbmcJMHhmMjJlNjgwMCwweGZmODQyMjEwLDB4MzIyODAwMDQsMHgwMjgxN2ZmZgorCS5sb25nCTB4ZmZmZjBjODEsMHgzZmQ3ODAwMCwweDZjMDQ2MDAwLDB4MDE3ODBjODEKKwkubG9uZwkweDQwMDRiYzdlLDB4NmQwNDYwMDAsMHgwNDY4ZjIwMCwweDAwODBmMjNhCisJLmxvbmcJMHg1NGEzZGU3ZSwweDQzZmIwMTcwLDB4MDAwMDA4NjYsMHhmMjJlNjA4MAorCS5sb25nCTB4ZmY1ODIyMmUsMHhmZjU4ZTk4MSwweGQzYzFmMjE5LDB4NDgyOGYyMTEKKwkubG9uZwkweDQ0MjgyMjJlLDB4ZmY1OGQyYWUsMHhmZjVjZTI5OSwweDBjODEwMDAwCisJLmxvbmcJMHgwMDAwNmQwMCwweDAwODhmMjI3LDB4ZTAwY2YyMmUsMHg2ODAwZmY4NAorCS5sb25nCTB4ZjIwMDAwMjMsMHhmMjNhNTU4MCwweGZlZDJmMjNhLDB4NTUwMGZlZDQKKwkubG9uZwkweGYyMDAwMDgwLDB4ZjIwMDA0YTMsMHhlMjk5MDI4MSwweDgwMDAwMDAwCisJLmxvbmcJMHhiM2FlZmY4NCwweGYyMDAwNWEzLDB4ZjIwMDA1MjMsMHhmMjNhNTVhMgorCS5sb25nCTB4ZmViYWYyM2EsMHg1NTIyZmViYywweGYyMDAwNWEzLDB4ZjIwMDA1MjMKKwkubG9uZwkweGYyM2E1NWEyLDB4ZmViNmYyM2EsMHg0OTIyZmVjMCwweGYyMDAwY2EzCisJLmxvbmcJMHhmMjAwMDEyMywweGYyM2E0OGEyLDB4ZmVjMmYyMmUsMHg0ODIzZmY4NAorCS5sb25nCTB4ZjIwMDA4YTIsMHhmMjAwMDQyMywweGYyMWZkMDMwLDB4ZjIwMDkwMDAKKwkubG9uZwkweGYyMmU0ODIyLDB4ZmY4NDYwZmYsMHgwMDAwNDM2NCwweGYyMjdlMDBjCisJLmxvbmcJMHhmMjAwMDAyMywweGYyM2E1NTAwLDB4ZmVhMmYyM2EsMHg1NTgwZmVhNAorCS5sb25nCTB4ZjIwMDAwODAsMHhmMjAwMDRhMywweGYyMmU2ODAwLDB4ZmY4NGUyOTkKKwkubG9uZwkweDAyODE4MDAwLDB4MDAwMGYyMDAsMHgwNTIzYjNhZSwweGZmODQwMjgxCisJLmxvbmcJMHg4MDAwMDAwMCwweGYyMDAwNWEzLDB4MDA4MTNmODAsMHgwMDAwMmQ0MQorCS5sb25nCTB4ZmY1NGYyM2EsMHg1NTIyZmU3NCwweGYyM2E1NWEyLDB4ZmU3NmYyMDAKKwkubG9uZwkweDA1MjNmMjAwLDB4MDVhM2YyM2EsMHg1NTIyZmU3MCwweGYyM2E0OWEyCisJLmxvbmcJMHhmZTdhZjIwMCwweDA1MjNmMjAwLDB4MGNhM2YyM2EsMHg0OTIyZmU3YworCS5sb25nCTB4ZjIzYTQ0YTIsMHhmZTgyZjIwMCwweDA4MjNmMjAwLDB4MDQyMmYyMmUKKwkubG9uZwkweDQ4MjNmZjg0LDB4ZjIxZmQwMzAsMHhmMjAwOTAwMCwweGYyMmU0NDIyCisJLmxvbmcJMHhmZjU0NjBmZiwweDAwMDA0MmM4LDB4MGM4MTNmZmYsMHg4MDAwNmVmZgorCS5sb25nCTB4MDAwMDAzMDAsMHgyMjJlZmY1YywweDBjODEwMDAwLDB4MDAwMDZlMTQKKwkubG9uZwkweGYyMDA5MDAwLDB4MTIzYzAwMDMsMHhmMjJlNDgwMCwweGZmODQ2MGZmCisJLmxvbmcJMHgwMDAwNDI4ZSwweGYyM2M0NDAwLDB4M2Y4MDAwMDAsMHhmMjAwOTAwMAorCS5sb25nCTB4ZjIzYzQ0MjIsMHg4MDgwMDAwMCwweDYwZmYwMDAwLDB4NDI4YTYwZmYKKwkubG9uZwkweDAwMDA0MTEwLDB4ZjIzYzQ0MDAsMHgzZjgwMDAwMCwweDYwZmYwMDAwCisJLmxvbmcJMHg0Mjc2MmQ3YywweDAwMDAwMDA0LDB4ZmY1Y2YyMTAsMHg0ODAwZjIyZQorCS5sb25nCTB4NjgwMGZmODQsMHgyMjEwMzIyOCwweDAwMDQwMjgxLDB4N2ZmZmZmZmYKKwkubG9uZwkweDBjODEzZmQ3LDB4ODAwMDZjMDQsMHg2MDAwMDI0MCwweDBjODE0MDA0CisJLmxvbmcJMHhiYzdlNmQwNCwweDYwMDAwMjdhLDB4ZjIwMDAwODAsMHhmMjNhNTRhMworCS5sb25nCTB4ZGM5MDQzZmIsMHgwMTcwMDAwMCwweDA2NzhmMjJlLDB4NjA4MGZmNTgKKwkubG9uZwkweDIyMmVmZjU4LDB4ZTk4MWQzYzEsMHhmMjE5NDgyOCwweGYyMTE0NDI4CisJLmxvbmcJMHgyMjJlZmY1OCwweGUyOTkwYzgxLDB4MDAwMDAwMDAsMHg2YzAwMDEwNgorCS5sb25nCTB4ZjIyN2UwMDQsMHhmMjJlNjgwMCwweGZmODRmMjAwLDB4MDAyM2YyM2EKKwkubG9uZwkweDU0ODBmY2U4LDB4ZjIzYTU1MDAsMHhmZDMyZjIwMCwweDAwYTNmMjAwCisJLmxvbmcJMHgwMTIzMmYwMiwweDI0MDFlMjlhLDB4MDI4MjgwMDAsMHgwMDAwYjM4MgorCS5sb25nCTB4MDI4MjgwMDAsMHgwMDAwZjIzYSwweDU0YTJmY2M4LDB4ZjIzYTU1MjIKKwkubG9uZwkweGZkMTJmMjAwLDB4MDBhM2I1YWUsMHhmZjg0MjQxZiwweGYyMDAwMTIzCisJLmxvbmcJMHhlMjk5MDI4MSwweDgwMDAwMDAwLDB4MmQ3YzNmODAsMHgwMDAwZmY1NAorCS5sb25nCTB4YjNhZWZmNTQsMHhmMjNhNTRhMiwweGZjYTJmMjNhLDB4NTUyMmZjZWMKKwkubG9uZwkweGYyMDAwMGEzLDB4ZjIwMDAxMjMsMHhmMjJlNjgwMCwweGZmOTBmMjNhCisJLmxvbmcJMHg1NGEyZmM5MCwweGIzYWVmZjkwLDB4ZjIzYTU1MjIsMHhmY2Q2ZjIwMAorCS5sb25nCTB4MDBhM2YyMDAsMHgwMTIzZjIzYSwweDU0YTJmYzgwLDB4ZjIzYTU1MjIKKwkubG9uZwkweGZjY2FmMjAwLDB4MDBhM2YyMDAsMHgwMTIzZjIzYSwweDQ4YTJmYzdjCisJLmxvbmcJMHhmMjNhNDkyMiwweGZjYzZmMjAwLDB4MDBhM2YyMDAsMHgwMTIzZjIzYQorCS5sb25nCTB4NDhhMmZjNzgsMHhmMjNhNDkyMiwweGZjYzJmMjAwLDB4MDBhM2YyMDAKKwkubG9uZwkweDA4MjNmMjJlLDB4NDhhM2ZmODQsMHhmMjNhNDQyMiwweGZjYmFmMjJlCisJLmxvbmcJMHg0ODIzZmY5MCwweGYyMWZkMDIwLDB4ZjIwMDkwMDAsMHhmMjJlNDhhMgorCS5sb25nCTB4ZmY4NDYxZmYsMHgwMDAwNDQ4ZSwweGYyMmU0NDIyLDB4ZmY1NDYwZmYKKwkubG9uZwkweDAwMDA0MGZjLDB4ZjIyN2UwMDQsMHhmMjJlNjgwMCwweGZmODRmMjAwCisJLmxvbmcJMHgwMDIzZjIzYSwweDU0ODBmYzM0LDB4ZjIzYTU1MDAsMHhmYmRlZjIwMAorCS5sb25nCTB4MDBhM2YyMmUsMHg2ODAwZmY5MCwweGYyMDAwMTIzLDB4ZTI5OTAyODEKKwkubG9uZwkweDgwMDAwMDAwLDB4ZjIzYTU0YTIsMHhmYzFhZjIzYSwweDU1MjJmYmM0CisJLmxvbmcJMHhiM2FlZmY4NCwweGIzYWVmZjkwLDB4ZjIwMDAwYTMsMHgwMDgxM2Y4MAorCS5sb25nCTB4MDAwMDJkNDEsMHhmZjU0ZjIwMCwweDAxMjNmMjNhLDB4NTRhMmZiZmMKKwkubG9uZwkweGYyM2E1NTIyLDB4ZmJhNmYyMDAsMHgwMGEzZjIwMCwweDAxMjNmMjNhCisJLmxvbmcJMHg1NGEyZmJmMCwweGYyM2E1NTIyLDB4ZmI5YWYyMDAsMHgwMGEzZjIwMAorCS5sb25nCTB4MDEyM2YyM2EsMHg1NGEyZmJlNCwweGYyM2E1NTIyLDB4ZmI4ZWYyMDAKKwkubG9uZwkweDAwYTNmMjAwLDB4MDEyM2YyM2EsMHg0OGEyZmJlMCwweGYyM2E0OTIyCisJLmxvbmcJMHhmYjhhZjIwMCwweDAwYTNmMjAwLDB4MDEyM2YyM2EsMHg0OGEyZmJkYworCS5sb25nCTB4ZjIzYTQ5MjIsMHhmYjg2ZjIwMCwweDAwYTNmMjAwLDB4MDgyM2YyM2EKKwkubG9uZwkweDQ0YTJmYmQ0LDB4ZjIyZTQ4MjMsMHhmZjg0ZjIyZSwweDQ4YTNmZjkwCisJLmxvbmcJMHhmMjFmZDAyMCwweGYyMDA5MDAwLDB4ZjIyZTQ0YTIsMHhmZjU0NjFmZgorCS5sb25nCTB4MDAwMDQzYTIsMHhmMjJlNDgyMiwweGZmODQ2MGZmLDB4MDAwMDQwMTAKKwkubG9uZwkweDBjODEzZmZmLDB4ODAwMDZlMDAsMHgwMDQ4ZjIzYywweDQ0ODAzZjgwCisJLmxvbmcJMHgwMDAwZjIwMCwweDkwMDBmMjNjLDB4NDRhODAwODAsMHgwMDAwNjFmZgorCS5sb25nCTB4MDAwMDQzNzIsMHhmMjAwYjAwMCwweDEyM2MwMDAzLDB4ZjIyZTQ4MDAKKwkubG9uZwkweGZmODQ2MGZmLDB4MDAwMDNmY2EsMHgyZjAwZjIzYywweDQ0ODAzZjgwCisJLmxvbmcJMHgwMDAwNjFmZiwweDAwMDA0MzRlLDB4MjAxZjYwZmYsMHgwMDAwM2U1NAorCS5sb25nCTB4ZjIyN2UwM2MsMHgyZjAyZjIzYywweDQ0ODAwMDAwLDB4MDAwMDBjODEKKwkubG9uZwkweDdmZmVmZmZmLDB4NjY1MjNkN2MsMHg3ZmZlZmY4NCwweDJkN2NjOTBmCisJLmxvbmcJMHhkYWEyZmY4OCwweDQyYWVmZjhjLDB4M2Q3YzdmZGMsMHhmZjkwMmQ3YworCS5sb25nCTB4ODVhMzA4ZDMsMHhmZjk0NDJhZSwweGZmOThmMjAwLDB4MDAzYWYyOTQKKwkubG9uZwkweDAwMGUwMDJlLDB4MDA4MGZmODQsMHgwMDJlMDA4MCwweGZmOTBmMjJlCisJLmxvbmcJMHg0ODIyZmY4NCwweGYyMDAwMDgwLDB4ZjIyZTQ4MjIsMHhmZjkwZjIwMAorCS5sb25nCTB4MDBhOGYyMmUsMHg0OGEyZmY5MCwweGYyMmU2ODAwLDB4ZmY4NDMyMmUKKwkubG9uZwkweGZmODQyMjQxLDB4MDI4MTAwMDAsMHg3ZmZmMDQ4MSwweDAwMDAzZmZmCisJLmxvbmcJMHgwYzgxMDAwMCwweDAwMWM2ZjBlLDB4MDQ4MTAwMDAsMHgwMDFiMWQ3YworCS5sb25nCTB4MDAwMGZmNTgsMHg2MDA4NDI4MSwweDFkN2MwMDAxLDB4ZmY1ODI0M2MKKwkubG9uZwkweDAwMDAzZmZlLDB4OTQ4MTJkN2MsMHhhMmY5ODM2ZSwweGZmODgyZDdjCisJLmxvbmcJMHg0ZTQ0MTUyYSwweGZmOGMzZDQyLDB4ZmY4NGYyMDAsMHgwMTAwZjIyZQorCS5sb25nCTB4NDkyM2ZmODQsMHgyNDA5NDg0MiwweDAyODI4MDAwLDB4MDAwMDAwODIKKwkubG9uZwkweDVmMDAwMDAwLDB4MmQ0MmZmNTQsMHhmMjJlNDUyMiwweGZmNTRmMjJlCisJLmxvbmcJMHg0NTI4ZmY1NCwweDI0MDEwNjgyLDB4MDAwMDNmZmYsMHgzZDQyZmY4NAorCS5sb25nCTB4MmQ3Y2M5MGYsMHhkYWEyZmY4OCwweDQyYWVmZjhjLDB4MDY4MTAwMDAKKwkubG9uZwkweDNmZGQzZDQxLDB4ZmY5MDJkN2MsMHg4NWEzMDhkMywweGZmOTQ0MmFlCisJLmxvbmcJMHhmZjk4MTIyZSwweGZmNThmMjAwLDB4MGEwMGYyMmUsMHg0YTIzZmY4NAorCS5sb25nCTB4ZjIwMDBhODAsMHhmMjJlNGFhMywweGZmOTBmMjAwLDB4MTE4MGYyMDAKKwkubG9uZwkweDE1YTJmMjAwLDB4MGUyOGYyMDAsMHgwYzI4ZjIwMCwweDE2MjJmMjAwCisJLmxvbmcJMHgwMTgwZjIwMCwweDEwYThmMjAwLDB4MDQyMjBjMDEsMHgwMDAwNmUwMAorCS5sb25nCTB4MDAwZWYyMDAsMHgwMWE4ZjIwMCwweDBjYTI2MDAwLDB4ZmYwY2YyMmUKKwkubG9uZwkweDYxMDBmZjU4LDB4MjQxZmYyMWYsMHhkMDNjMjIyZSwweGZmNWMwYzgxCisJLmxvbmcJMHgwMDAwMDAwNCwweDZkMDBmYTRjLDB4NjAwMGZjMzYsMHgzZWEwYjc1OQorCS5sb25nCTB4ZjUwZjg2ODgsMHhiZWYyYmFhNSwweGE4OTI0ZjA0LDB4YmYzNDZmNTkKKwkubG9uZwkweGIzOWJhNjVmLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDNmZjYwMDAwCisJLmxvbmcJMHhlMDczZDNmYywweDE5OWM0YTAwLDB4MDAwMDAwMDAsMHgzZmY5MDAwMAorCS5sb25nCTB4ZDIzY2Q2ODQsMHgxNWQ5NWZhMSwweDAwMDAwMDAwLDB4YmZmYzAwMDAKKwkubG9uZwkweDg4OTVhNmM1LDB4ZmI0MjNiY2EsMHgwMDAwMDAwMCwweGJmZmQwMDAwCisJLmxvbmcJMHhlZWY1N2UwZCwweGE4NGJjOGNlLDB4MDAwMDAwMDAsMHgzZmZjMDAwMAorCS5sb25nCTB4YTJmOTgzNmUsMHg0ZTQ0MTUyYSwweDAwMDAwMDAwLDB4NDAwMTAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDNmZGYwMDAwCisJLmxvbmcJMHg4NWEzMDhkNCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDIxODAwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweGMyYzc1YmNkLDB4MTA1ZDdjMjMsMHhhMGQwMDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHhiYzdlZGNmNywweGZmNTIzNjExLDB4YTFlODAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4YjYzNjVlMjIsMHhlZTQ2ZjAwMCwweDIxNDgwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHhhMTIwMDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHhhOWE1NjA3OCwweGNjMzA2M2RkLDB4MjFmYzAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4YTM1Y2UxYTMsMHhiYjI1MWRjYiwweDIxMTAwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweDlkMTQ2MmNlLDB4YWExOWQ3YjksMHhhMTU4MDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4MjFlMDAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4OTA4MzY1MjQsMHg4ODAzNGI5NiwweDIwYjAwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweDhhM2FlNjRmLDB4NzZmODA1ODQsMHhhMTg4MDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHg4M2YyNjc3YSwweDY1ZWNiZjczLDB4MjFjNDAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4ZmI1M2QxNGEsMHhhOWMyZjJjMiwweDIwMDAwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGVlYzJkM2EwLDB4ODdhYzY2OWYsMHgyMTM4MDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHhlMjMxZDVmNiwweDY1OTVkYTdiLDB4YTEzMDAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4ZDVhMGQ4NGMsMHg0MzdmNGU1OCwweDlmYzAwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgyMTAwMDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHhiYzdlZGNmNywweGZmNTIzNjExLDB4YTE2ODAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4YWZlZGRmNGQsMHhkZDNiYTllZSwweGEwYTAwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGEzNWNlMWEzLDB4YmIyNTFkY2IsMHgyMDkwMDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4MjE2MDAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4OGEzYWU2NGYsMHg3NmY4MDU4NCwweGExMDgwMDAwLDB4YzAwMjAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHgxZjgwMDAwMCwweGMwMDIwMDAwCisJLmxvbmcJMHhlMjMxZDVmNiwweDY1OTVkYTdiLDB4YTBiMDAwMDAsMHhjMDAyMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDIwODAwMDAwLDB4YzAwMjAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHhhMDIwMDAwMCwweGMwMDIwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4MjBlMDAwMDAsMHhjMDAxMDAwMAorCS5sb25nCTB4ZmI1M2QxNGEsMHhhOWMyZjJjMiwweDFmMDAwMDAwLDB4YzAwMTAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgyMDAwMDAwMCwweGMwMDEwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4MjA2MDAwMDAsMHhjMDAwMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDFmODAwMDAwLDB4YmZmZjAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgxZjAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZmZmMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDlmMDAwMDAwLDB4NDAwMDAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHg5ZjgwMDAwMCwweDQwMDEwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4YTA2MDAwMDAsMHg0MDAxMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweGEwMDAwMDAwLDB4NDAwMTAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHg5ZjAwMDAwMCwweDQwMDIwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4YTBlMDAwMDAsMHg0MDAyMDAwMAorCS5sb25nCTB4YWZlZGRmNGQsMHhkZDNiYTllZSwweDIwMjAwMDAwLDB4NDAwMjAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHhhMDgwMDAwMCwweDQwMDIwMDAwCisJLmxvbmcJMHhlMjMxZDVmNiwweDY1OTVkYTdiLDB4MjBiMDAwMDAsMHg0MDAyMDAwMAorCS5sb25nCTB4ZmI1M2QxNGEsMHhhOWMyZjJjMiwweDlmODAwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweDhhM2FlNjRmLDB4NzZmODA1ODQsMHgyMTA4MDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4YTE2MDAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4YTM1Y2UxYTMsMHhiYjI1MWRjYiwweGEwOTAwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHgyMGEwMDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHhiYzdlZGNmNywweGZmNTIzNjExLDB4MjE2ODAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweGExMDAwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGQ1YTBkODRjLDB4NDM3ZjRlNTgsMHgxZmMwMDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHhlMjMxZDVmNiwweDY1OTVkYTdiLDB4MjEzMDAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4ZWVjMmQzYTAsMHg4N2FjNjY5ZiwweGExMzgwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHhhMDAwMDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHg4M2YyNjc3YSwweDY1ZWNiZjczLDB4YTFjNDAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4OGEzYWU2NGYsMHg3NmY4MDU4NCwweDIxODgwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweDkwODM2NTI0LDB4ODgwMzRiOTYsMHhhMGIwMDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHg5NmNiZTNmOSwweDk5MGU5MWE4LDB4YTFlMDAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4OWQxNDYyY2UsMHhhYTE5ZDdiOSwweDIxNTgwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweGEzNWNlMWEzLDB4YmIyNTFkY2IsMHhhMTEwMDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHhhOWE1NjA3OCwweGNjMzA2M2RkLDB4YTFmYzAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4YWZlZGRmNGQsMHhkZDNiYTllZSwweDIxMjAwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweGI2MzY1ZTIyLDB4ZWU0NmYwMDAsMHhhMTQ4MDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHhiYzdlZGNmNywweGZmNTIzNjExLDB4MjFlODAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4YzJjNzViY2QsMHgxMDVkN2MyMywweDIwZDAwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHhhMTgwMDAwMCwweGYyMTA0ODAwCisJLmxvbmcJMHgyMjEwMzIyOCwweDAwMDQwMjgxLDB4N2ZmZmZmZmYsMHgwYzgxM2ZkNworCS5sb25nCTB4ODAwMDZjMDQsMHg2MDAwMDEzNCwweDBjODE0MDA0LDB4YmM3ZTZkMDQKKwkubG9uZwkweDYwMDAwMTQ0LDB4ZjIwMDAwODAsMHhmMjNhNTRhMywweGQzZDQ0M2ZhCisJLmxvbmcJMHhmZGJjZjIwMSwweDYwODBlOTgxLDB4ZDNjMWYyMTksMHg0ODI4ZjIxMQorCS5sb25nCTB4NDQyOGVhOTksMHgwMjgxODAwMCwweDAwMDBmMjI3LDB4ZTAwYzBjODEKKwkubG9uZwkweDAwMDAwMDAwLDB4NmQwMDAwNzIsMHhmMjAwMDA4MCwweGYyMDAwNGEzCisJLmxvbmcJMHhmMjNhNTU4MCwweGZhZjhmMjNhLDB4NTUwMGZhZmEsMHhmMjAwMDVhMworCS5sb25nCTB4ZjIwMDA1MjMsMHhmMjNhNTVhMiwweGZhZjRmMjNhLDB4NDkyMmZhZmUKKwkubG9uZwkweGYyMDAwNWEzLDB4ZjIwMDA1MjMsMHhmMjNhNDlhMiwweGZiMDBmMjNhCisJLmxvbmcJMHg0OTIyZmIwYSwweGYyMDAwNWEzLDB4ZjIwMDA1MjMsMHhmMjNhNDlhMgorCS5sb25nCTB4ZmIwY2YyMDAsMHgwMTIzZjIwMCwweDBjYTNmMjAwLDB4MDgyMmYyM2MKKwkubG9uZwkweDQ0YTIzZjgwLDB4MDAwMGYyMWYsMHhkMDMwZjIwMCwweDkwMDBmMjAwCisJLmxvbmcJMHgwNDIwNjBmZiwweDAwMDAzOGQ4LDB4ZjIwMDAwODAsMHhmMjAwMDAyMworCS5sb25nCTB4ZjIzYTU1ODAsMHhmYTg4ZjIzYSwweDU1MDBmYThhLDB4ZjIwMDAxYTMKKwkubG9uZwkweGYyMDAwMTIzLDB4ZjIzYTU1YTIsMHhmYTg0ZjIzYSwweDQ5MjJmYThlCisJLmxvbmcJMHhmMjAwMDFhMywweGYyMDAwMTIzLDB4ZjIzYTQ5YTIsMHhmYTkwZjIzYQorCS5sb25nCTB4NDkyMmZhOWEsMHhmMjAwMDFhMywweGYyMDAwMTIzLDB4ZjIzYTQ5YTIKKwkubG9uZwkweGZhOWNmMjAwLDB4MDUyM2YyMDAsMHgwYzIzZjIwMCwweDA4YTJmMjNjCisJLmxvbmcJMHg0NDIyM2Y4MCwweDAwMDBmMjFmLDB4ZDAzMGYyMjcsMHg2ODgwMGE5NworCS5sb25nCTB4ODAwMDAwMDAsMHhmMjAwOTAwMCwweGYyMWY0ODIwLDB4NjBmZjAwMDAKKwkubG9uZwkweDM4NWUwYzgxLDB4M2ZmZjgwMDAsMHg2ZTFjZjIyNywweDY4MDBmMjAwCisJLmxvbmcJMHg5MDAwMTIzYywweDAwMDNmMjFmLDB4NDgwMDYwZmYsMHgwMDAwMzgzMgorCS5sb25nCTB4NjBmZjAwMDAsMHgzNmNlZjIyNywweGUwM2MyZjAyLDB4ZjIzYzQ0ODAKKwkubG9uZwkweDAwMDAwMDAwLDB4MGM4MTdmZmUsMHhmZmZmNjY1MiwweDNkN2M3ZmZlCisJLmxvbmcJMHhmZjg0MmQ3YywweGM5MGZkYWEyLDB4ZmY4ODQyYWUsMHhmZjhjM2Q3YworCS5sb25nCTB4N2ZkY2ZmOTAsMHgyZDdjODVhMywweDA4ZDNmZjk0LDB4NDJhZWZmOTgKKwkubG9uZwkweGYyMDAwMDNhLDB4ZjI5NDAwMGUsMHgwMDJlMDA4MCwweGZmODQwMDJlCisJLmxvbmcJMHgwMDgwZmY5MCwweGYyMmU0ODIyLDB4ZmY4NGYyMDAsMHgwMDgwZjIyZQorCS5sb25nCTB4NDgyMmZmOTAsMHhmMjAwMDBhOCwweGYyMmU0OGEyLDB4ZmY5MGYyMmUKKwkubG9uZwkweDY4MDBmZjg0LDB4MzIyZWZmODQsMHgyMjQxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwNDgxMDAwMCwweDNmZmYwYzgxLDB4MDAwMDAwMWMsMHg2ZjBlMDQ4MQorCS5sb25nCTB4MDAwMDAwMWIsMHgxZDdjMDAwMCwweGZmNTg2MDA4LDB4NDI4MTFkN2MKKwkubG9uZwkweDAwMDFmZjU4LDB4MjQzYzAwMDAsMHgzZmZlOTQ4MSwweDJkN2NhMmY5CisJLmxvbmcJMHg4MzZlZmY4OCwweDJkN2M0ZTQ0LDB4MTUyYWZmOGMsMHgzZDQyZmY4NAorCS5sb25nCTB4ZjIwMDAxMDAsMHhmMjJlNDkyMywweGZmODQyNDA5LDB4NDg0MjAyODIKKwkubG9uZwkweDgwMDAwMDAwLDB4MDA4MjVmMDAsMHgwMDAwMmQ0MiwweGZmNTRmMjJlCisJLmxvbmcJMHg0NTIyZmY1NCwweGYyMmU0NTI4LDB4ZmY1NDI0MDEsMHgwNjgyMDAwMAorCS5sb25nCTB4M2ZmZjNkNDIsMHhmZjg0MmQ3YywweGM5MGZkYWEyLDB4ZmY4ODQyYWUKKwkubG9uZwkweGZmOGMwNjgxLDB4MDAwMDNmZGQsMHgzZDQxZmY5MCwweDJkN2M4NWEzCisJLmxvbmcJMHgwOGQzZmY5NCwweDQyYWVmZjk4LDB4MTIyZWZmNTgsMHhmMjAwMGEwMAorCS5sb25nCTB4ZjIyZTRhMjMsMHhmZjg0ZjIwMCwweDBhODBmMjJlLDB4NGFhM2ZmOTAKKwkubG9uZwkweGYyMDAxMTgwLDB4ZjIwMDE1YTIsMHhmMjAwMGUyOCwweGYyMDAwYzI4CisJLmxvbmcJMHhmMjAwMTYyMiwweGYyMDAwMTgwLDB4ZjIwMDEwYTgsMHhmMjAwMDQyMgorCS5sb25nCTB4MGMwMTAwMDAsMHg2ZTAwMDAwZSwweGYyMDAwMWE4LDB4ZjIwMDBjYTIKKwkubG9uZwkweDYwMDBmZjBjLDB4ZjIyZTYxMDAsMHhmZjU0MjQxZiwweGYyMWZkMDNjCisJLmxvbmcJMHgyMjJlZmY1NCwweGUyOTk2MDAwLDB4ZmQ3MmJmZjYsMHg2ODdlMzE0OQorCS5sb25nCTB4ODdkODQwMDIsMHhhYzY5MzRhMiwweDZkYjNiZmMyLDB4NDc2ZjRlMWQKKwkubG9uZwkweGEyOGUzZmIzLDB4NDQ0NDdmODcsMHg2OTg5YmZiNywweDQ0ZWU3ZmFmCisJLmxvbmcJMHg0NWRiM2ZiYywweDcxYzY0Njk0LDB4MDIyMGJmYzIsMHg0OTI0OTIxOAorCS5sb25nCTB4NzJmOTNmYzksMHg5OTk5OTk5OSwweDhmYTliZmQ1LDB4NTU1NTU1NTUKKwkubG9uZwkweDU1NTViZmI3LDB4MGJmMzk4NTMsMHg5ZTZhM2ZiYywweDcxODc5NjJkCisJLmxvbmcJMHgxZDdkYmZjMiwweDQ5MjQ4MjcxLDB4MDdiODNmYzksMHg5OTk5OTk5NgorCS5sb25nCTB4MjYzZWJmZDUsMHg1NTU1NTU1NSwweDU1MzYzZmZmLDB4MDAwMGM5MGYKKwkubG9uZwkweGRhYTIyMTY4LDB4YzIzNTAwMDAsMHgwMDAwYmZmZiwweDAwMDBjOTBmCisJLmxvbmcJMHhkYWEyMjE2OCwweGMyMzUwMDAwLDB4MDAwMDAwMDEsMHgwMDAwODAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA4MDAxLDB4MDAwMDgwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwM2ZmYiwweDAwMDA4M2QxCisJLmxvbmcJMHg1MmM1MDYwYiwweDdhNTEwMDAwLDB4MDAwMDNmZmIsMHgwMDAwOGJjOAorCS5sb25nCTB4NTQ0NTY1NDksMHg4YjhiMDAwMCwweDAwMDAzZmZiLDB4MDAwMDkzYmUKKwkubG9uZwkweDQwNjAxNzYyLDB4NmIwZDAwMDAsMHgwMDAwM2ZmYiwweDAwMDA5YmIzCisJLmxvbmcJMHgwNzhkMzVhZSwweGMyMDIwMDAwLDB4MDAwMDNmZmIsMHgwMDAwYTNhNgorCS5sb25nCTB4OWE1MjVkZGMsMHhlN2RlMDAwMCwweDAwMDAzZmZiLDB4MDAwMGFiOTgKKwkubG9uZwkweGU5NDM2Mjc2LDB4NTYxOTAwMDAsMHgwMDAwM2ZmYiwweDAwMDBiMzg5CisJLmxvbmcJMHhlNTAyZjljNSwweDk4NjIwMDAwLDB4MDAwMDNmZmIsMHgwMDAwYmI3OQorCS5sb25nCTB4N2U0MzZiMDksMHhlNmZiMDAwMCwweDAwMDAzZmZiLDB4MDAwMGMzNjcKKwkubG9uZwkweGE1YzczOWU1LDB4ZjQ0NjAwMDAsMHgwMDAwM2ZmYiwweDAwMDBjYjU0CisJLmxvbmcJMHg0YzYxY2ZmNywweGQ1YzYwMDAwLDB4MDAwMDNmZmIsMHgwMDAwZDMzZgorCS5sb25nCTB4NjJmODI0ODgsMHg1MzNlMDAwMCwweDAwMDAzZmZiLDB4MDAwMGRiMjgKKwkubG9uZwkweGRhODE2MjQwLDB4NGM3NzAwMDAsMHgwMDAwM2ZmYiwweDAwMDBlMzEwCisJLmxvbmcJMHhhNDA3OGFkMywweDRmMTgwMDAwLDB4MDAwMDNmZmIsMHgwMDAwZWFmNgorCS5sb25nCTB4YjBhODE4OGUsMHhlMWViMDAwMCwweDAwMDAzZmZiLDB4MDAwMGYyZGEKKwkubG9uZwkweGYxOTQ5ZGJlLDB4NzlkNTAwMDAsMHgwMDAwM2ZmYiwweDAwMDBmYWJkCisJLmxvbmcJMHg1ODEzNjFkNCwweDdlM2UwMDAwLDB4MDAwMDNmZmMsMHgwMDAwODM0NgorCS5sb25nCTB4YWMyMTA5NTksMHhlY2M0MDAwMCwweDAwMDAzZmZjLDB4MDAwMDhiMjMKKwkubG9uZwkweDJhMDgzMDQyLDB4ODJkODAwMDAsMHgwMDAwM2ZmYywweDAwMDA5MmZiCisJLmxvbmcJMHg3MGI4ZDI5YSwweGUyZjkwMDAwLDB4MDAwMDNmZmMsMHgwMDAwOWFjZgorCS5sb25nCTB4NDc2ZjVjY2QsMHgxY2I0MDAwMCwweDAwMDAzZmZjLDB4MDAwMGEyOWUKKwkubG9uZwkweDc2MzA0OTU0LDB4ZjIzZjAwMDAsMHgwMDAwM2ZmYywweDAwMDBhYTY4CisJLmxvbmcJMHhjNWQwOGFiOCwweDUyMzAwMDAwLDB4MDAwMDNmZmMsMHgwMDAwYjIyZAorCS5sb25nCTB4ZmZmZDlkNTMsMHg5ZjgzMDAwMCwweDAwMDAzZmZjLDB4MDAwMGI5ZWQKKwkubG9uZwkweGVmNDUzZTkwLDB4MGVhNTAwMDAsMHgwMDAwM2ZmYywweDAwMDBjMWE4CisJLmxvbmcJMHg1ZjFjYzc1ZSwweDNlYTUwMDAwLDB4MDAwMDNmZmMsMHgwMDAwYzk1ZAorCS5sb25nCTB4MWJlODI4MTMsMHg4ZGU2MDAwMCwweDAwMDAzZmZjLDB4MDAwMGQxMGIKKwkubG9uZwkweGYzMDA4NDBkLDB4MmRlNDAwMDAsMHgwMDAwM2ZmYywweDAwMDBkOGI0CisJLmxvbmcJMHhiMmJhNmJjMCwweDVlN2EwMDAwLDB4MDAwMDNmZmMsMHgwMDAwZTA1NworCS5sb25nCTB4MmE2YmI0MjMsMHgzNWY2MDAwMCwweDAwMDAzZmZjLDB4MDAwMGU3ZjMKKwkubG9uZwkweDJhNzBlYTljLDB4YWE4ZjAwMDAsMHgwMDAwM2ZmYywweDAwMDBlZjg4CisJLmxvbmcJMHg4NDMyNjRlYywweGVmYWEwMDAwLDB4MDAwMDNmZmMsMHgwMDAwZjcxNworCS5sb25nCTB4MGEyOGVjYzAsMHg2NjY2MDAwMCwweDAwMDAzZmZkLDB4MDAwMDgxMmYKKwkubG9uZwkweGQyODgzMzJkLDB4YWQzMjAwMDAsMHgwMDAwM2ZmZCwweDAwMDA4OGE4CisJLmxvbmcJMHhkMWIxMjE4ZSwweDRkNjQwMDAwLDB4MDAwMDNmZmQsMHgwMDAwOTAxMgorCS5sb25nCTB4YWIzZjIzZTQsMHhhZWU4MDAwMCwweDAwMDAzZmZkLDB4MDAwMDk3NmMKKwkubG9uZwkweGMzZDQxMWU3LDB4ZjFiOTAwMDAsMHgwMDAwM2ZmZCwweDAwMDA5ZWI2CisJLmxvbmcJMHg4OTQ5Mzg4OSwweGEyMjcwMDAwLDB4MDAwMDNmZmQsMHgwMDAwYTVlZgorCS5sb25nCTB4NzJjMzQ0ODcsMHgzNjFiMDAwMCwweDAwMDAzZmZkLDB4MDAwMGFkMTcKKwkubG9uZwkweDAwYmFmMDdhLDB4NzIyNzAwMDAsMHgwMDAwM2ZmZCwweDAwMDBiNDJjCisJLmxvbmcJMHhiY2ZhZmQzNywweGVmYjcwMDAwLDB4MDAwMDNmZmQsMHgwMDAwYmIzMAorCS5sb25nCTB4M2E5NDBiYTgsMHgwZjg5MDAwMCwweDAwMDAzZmZkLDB4MDAwMGMyMjEKKwkubG9uZwkweDE1YzZmY2FlLDB4YmJhZjAwMDAsMHgwMDAwM2ZmZCwweDAwMDBjOGZlCisJLmxvbmcJMHhmM2U2ODYzMywweDEyMjEwMDAwLDB4MDAwMDNmZmQsMHgwMDAwY2ZjOQorCS5sb25nCTB4ODMzMGI0MDAsMHgwYzcwMDAwMCwweDAwMDAzZmZkLDB4MDAwMGQ2ODAKKwkubG9uZwkweDdhYTExMDJjLDB4NWJmOTAwMDAsMHgwMDAwM2ZmZCwweDAwMDBkZDIzCisJLmxvbmcJMHg5OWJjMzEyNSwweDJhYTMwMDAwLDB4MDAwMDNmZmQsMHgwMDAwZTNiMgorCS5sb25nCTB4YTg1NTZiOGYsMHhjNTE3MDAwMCwweDAwMDAzZmZkLDB4MDAwMGVhMmQKKwkubG9uZwkweDc2NGY2NDMxLDB4NTk4OTAwMDAsMHgwMDAwM2ZmZCwweDAwMDBmM2JmCisJLmxvbmcJMHg1YmY4YmFkMSwweGEyMWQwMDAwLDB4MDAwMDNmZmUsMHgwMDAwODAxYworCS5sb25nCTB4ZTM5ZTBkMjAsMHg1YzlhMDAwMCwweDAwMDAzZmZlLDB4MDAwMDg2MzAKKwkubG9uZwkweGEyZGFkYTFlLDB4ZDA2NjAwMDAsMHgwMDAwM2ZmZSwweDAwMDA4YzFhCisJLmxvbmcJMHhkNDQ1ZjNlMCwweDliOGMwMDAwLDB4MDAwMDNmZmUsMHgwMDAwOTFkYgorCS5sb25nCTB4OGYxNjY0ZjMsMHg1MGUyMDAwMCwweDAwMDAzZmZlLDB4MDAwMDk3NzMKKwkubG9uZwkweDE0MjAzNjVlLDB4NTM4YzAwMDAsMHgwMDAwM2ZmZSwweDAwMDA5Y2UxCisJLmxvbmcJMHhjOGU2YTBiOCwweGNkYmEwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYTIyOAorCS5sb25nCTB4MzJkYmNhZGEsMHhhZTA5MDAwMCwweDAwMDAzZmZlLDB4MDAwMGE3NDYKKwkubG9uZwkweGYyZGRiNzYwLDB4MjI5NDAwMDAsMHgwMDAwM2ZmZSwweDAwMDBhYzNlCisJLmxvbmcJMHhjMGZiOTk3ZCwweGQ2YTIwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYjExMAorCS5sb25nCTB4Njg4YWViZGMsMHg2ZjZhMDAwMCwweDAwMDAzZmZlLDB4MDAwMGI1YmMKKwkubG9uZwkweGM0OTA1OWVjLDB4YzRiMDAwMDAsMHgwMDAwM2ZmZSwweDAwMDBiYTQ0CisJLmxvbmcJMHhiYzdkZDQ3MCwweDc4MmYwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYmVhOQorCS5sb25nCTB4NDE0NGZkMDQsMHg5YWFjMDAwMCwweDAwMDAzZmZlLDB4MDAwMGMyZWIKKwkubG9uZwkweDRhYmI2NjE2LDB4MjhiNjAwMDAsMHgwMDAwM2ZmZSwweDAwMDBjNzBiCisJLmxvbmcJMHhkNTRjZTYwMiwweGVlMTQwMDAwLDB4MDAwMDNmZmUsMHgwMDAwY2QwMAorCS5sb25nCTB4MDU0OWFkZWMsMHg3MTU5MDAwMCwweDAwMDAzZmZlLDB4MDAwMGQ0ODQKKwkubG9uZwkweDU3ZDJkOGVhLDB4NGVhMzAwMDAsMHgwMDAwM2ZmZSwweDAwMDBkYjk0CisJLmxvbmcJMHg4ZGE3MTJkZSwweGNlM2IwMDAwLDB4MDAwMDNmZmUsMHgwMDAwZTIzOAorCS5sb25nCTB4NTVmOTY5ZTgsMHgwOTZhMDAwMCwweDAwMDAzZmZlLDB4MDAwMGU4NzcKKwkubG9uZwkweDExMjljNDM1LDB4MzI1OTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBlZTU3CisJLmxvbmcJMHhjMTZlMGQzNywweDljMGQwMDAwLDB4MDAwMDNmZmUsMHgwMDAwZjNlMQorCS5sb25nCTB4MDIxMWE4N2MsMHgzNzc5MDAwMCwweDAwMDAzZmZlLDB4MDAwMGY5MTkKKwkubG9uZwkweDAzOWQ3NThiLDB4OGQ0MTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBmZTA1CisJLmxvbmcJMHg4YjhmNjQ5MywweDVmYjMwMDAwLDB4MDAwMDNmZmYsMHgwMDAwODE1NQorCS5sb25nCTB4ZmI0OTdiNjgsMHg1ZDA0MDAwMCwweDAwMDAzZmZmLDB4MDAwMDgzODgKKwkubG9uZwkweDllMzU0OWQxLDB4MDhlMTAwMDAsMHgwMDAwM2ZmZiwweDAwMDA4NTljCisJLmxvbmcJMHhmYTc2NTExZCwweDcyNGIwMDAwLDB4MDAwMDNmZmYsMHgwMDAwODc5NQorCS5sb25nCTB4MmVjZmZmODEsMHgzMWU3MDAwMCwweDAwMDAzZmZmLDB4MDAwMDg5NzMKKwkubG9uZwkweDJmZDE5NTU3LDB4NjQxYjAwMDAsMHgwMDAwM2ZmZiwweDAwMDA4YjM4CisJLmxvbmcJMHhjYWQxMDE5MywweDJhMzUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOGNlNworCS5sb25nCTB4YThkODMwMWUsMHhlNmI1MDAwMCwweDAwMDAzZmZmLDB4MDAwMDhmNDYKKwkubG9uZwkweGEzOWUyZWFlLDB4NTI4MTAwMDAsMHgwMDAwM2ZmZiwweDAwMDA5MjJkCisJLmxvbmcJMHhhN2Q3OTE4OCwweDg0ODcwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOTRkMQorCS5sb25nCTB4OWZjYmRlZGYsMHg1MjQxMDAwMCwweDAwMDAzZmZmLDB4MDAwMDk3M2EKKwkubG9uZwkweGI5NDQxOWQyLDB4YTA4YjAwMDAsMHgwMDAwM2ZmZiwweDAwMDA5OTZmCisJLmxvbmcJMHhmMDBlMDhlMSwweDBiOTYwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOWI3NworCS5sb25nCTB4M2Y5NTEyMzIsMHgxZGE3MDAwMCwweDAwMDAzZmZmLDB4MDAwMDlkNTUKKwkubG9uZwkweGNjMzIwZjkzLDB4NTYyNDAwMDAsMHgwMDAwM2ZmZiwweDAwMDA5ZjEwCisJLmxvbmcJMHgwNTc1MDA2YywweGM1NzEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYTBhOQorCS5sb25nCTB4YzI5MGQ5N2MsMHhjMDZjMDAwMCwweDAwMDAzZmZmLDB4MDAwMGEyMjYKKwkubG9uZwkweDU5ZWJlYmMwLDB4NjMwYTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhMzg4CisJLmxvbmcJMHhiNGFmZjZlZiwweDBlYzkwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYTRkMworCS5sb25nCTB4NWYxMDYxZDIsMHg5MmM0MDAwMCwweDAwMDAzZmZmLDB4MDAwMGE2MDgKKwkubG9uZwkweDk1ZGNmYmUzLDB4MTg3ZTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhNzJhCisJLmxvbmcJMHg1MWRjNzM2NywweGJlYWMwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYTgzYQorCS5sb25nCTB4NTE1MzA5NTYsMHgxNjhmMDAwMCwweDAwMDAzZmZmLDB4MDAwMGE5M2EKKwkubG9uZwkweDIwMDc3NTM5LDB4NTQ2ZTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhYTllCisJLmxvbmcJMHg3MjQ1MDIzYiwweDI2MDUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYWM0YworCS5sb25nCTB4ODRiYTZmZTQsMHhkNThmMDAwMCwweDAwMDAzZmZmLDB4MDAwMGFkY2UKKwkubG9uZwkweDRhNGE2MDZiLDB4OTcxMjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhZjJhCisJLmxvbmcJMHgyZGNkOGQyNiwweDNjOWMwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjA2NQorCS5sb25nCTB4NmY4MWYyMjIsMHg2NWM3MDAwMCwweDAwMDAzZmZmLDB4MDAwMGIxODQKKwkubG9uZwkweDY1MTUwZjcxLDB4NDk2YTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiMjhhCisJLmxvbmcJMHhhYTE1NmY5YSwweGRhMzUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjM3YgorCS5sb25nCTB4NDRmZjM3NjYsMHhiODk1MDAwMCwweDAwMDAzZmZmLDB4MDAwMGI0NTgKKwkubG9uZwkweGMzZGNlOTYzLDB4MDQzMzAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiNTI1CisJLmxvbmcJMHg1MjlkNTYyMiwweDQ2YmQwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjVlMgorCS5sb25nCTB4Y2NhOTVmOWQsMHg4OGNjMDAwMCwweDAwMDAzZmZmLDB4MDAwMGI2OTIKKwkubG9uZwkweGNhZGE3YWNhLDB4MWFkYTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiNzM2CisJLmxvbmcJMHhhZWE3YTY5MiwweDU4MzgwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjdjZgorCS5sb25nCTB4YWIyODdlOWYsMHg3YjM2MDAwMCwweDAwMDAzZmZmLDB4MDAwMGI4NWUKKwkubG9uZwkweGNjNjZjYjIxLDB4OTgzNTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiOGU0CisJLmxvbmcJMHhmZDVhMjBhNSwweDkzZGEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjk5ZgorCS5sb25nCTB4NDFmNjRhZmYsMHg5YmI1MDAwMCwweDAwMDAzZmZmLDB4MDAwMGJhN2YKKwkubG9uZwkweDFlMTc4NDJiLDB4YmU3YjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiYjQ3CisJLmxvbmcJMHgxMjg1NzYzNywweGUxN2QwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmJmYQorCS5sb25nCTB4YmU4YTQ3ODgsMHhkZjZmMDAwMCwweDAwMDAzZmZmLDB4MDAwMGJjOWQKKwkubG9uZwkweDBmYWQyYjY4LDB4OWQ3OTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiZDMwCisJLmxvbmcJMHg2YTM5NDcxZSwweGNkODYwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmRiNgorCS5sb25nCTB4YzczMTg1NmEsMHhmMThhMDAwMCwweDAwMDAzZmZmLDB4MDAwMGJlMzEKKwkubG9uZwkweGNhYzUwMmU4LDB4MGQ3MDAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiZWEyCisJLmxvbmcJMHhkNTVjZTMzMSwweDk0ZTIwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmYwYgorCS5sb25nCTB4MTBiN2MwMzEsMHgyOGYwMDAwMCwweDAwMDAzZmZmLDB4MDAwMGJmNmIKKwkubG9uZwkweDdhMThkYWNiLDB4Nzc4ZDAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiZmM0CisJLmxvbmcJMHhlYTQ2NjNmYSwweDE4ZjYwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYzAxOAorCS5sb25nCTB4MWJkZThiODksMHhhNDU0MDAwMCwweDAwMDAzZmZmLDB4MDAwMGMwNjUKKwkubG9uZwkweGIwNjZjZmJmLDB4NjQzOTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBjMGFlCisJLmxvbmcJMHgzNDVmNTYzNCwweDBhZTYwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYzBmMgorCS5sb25nCTB4MjI5MTljYjksMHhlNmE3MDAwMCwweDAwMDBmMjEwLDB4NDgwMDIyMTAKKwkubG9uZwkweDMyMjgwMDA0LDB4ZjIyZTY4MDAsMHhmZjg0MDI4MSwweDdmZmZmZmZmCisJLmxvbmcJMHgwYzgxM2ZmYiwweDgwMDA2YzA0LDB4NjAwMDAwZDAsMHgwYzgxNDAwMgorCS5sb25nCTB4ZmZmZjZmMDQsMHg2MDAwMDE0YywweDAyYWVmODAwLDB4MDAwMGZmODgKKwkubG9uZwkweDAwYWUwNDAwLDB4MDAwMGZmODgsMHgyZDdjMDAwMCwweDAwMDBmZjhjCisJLmxvbmcJMHhmMjAwMDA4MCwweGYyMmU0OGEzLDB4ZmY4NGYyMmUsMHg0ODI4ZmY4NAorCS5sb25nCTB4ZjIzYzQ0YTIsMHgzZjgwMDAwMCwweGYyMDAwNDIwLDB4MmYwMjI0MDEKKwkubG9uZwkweDAyODEwMDAwLDB4NzgwMDAyODIsMHg3ZmZmMDAwMCwweDA0ODIzZmZiCisJLmxvbmcJMHgwMDAwZTI4MiwweGQyODJlZTgxLDB4NDNmYWY3ODAsMHhkM2MxMmQ1OQorCS5sb25nCTB4ZmY5MDJkNTksMHhmZjk0MmQ1OSwweGZmOTgyMjJlLDB4ZmY4NDAyODEKKwkubG9uZwkweDgwMDAwMDAwLDB4ODNhZWZmOTAsMHgyNDFmZjIyNywweGUwMDRmMjAwCisJLmxvbmcJMHgwMDgwZjIwMCwweDA0YTNmMjNhLDB4NTUwMGY2YTAsMHhmMjAwMDUyMgorCS5sb25nCTB4ZjIwMDA1MjMsMHhmMjAwMDBhMywweGYyM2E1NTIyLDB4ZjY5NmYyM2EKKwkubG9uZwkweDU0YTNmNjk4LDB4ZjIwMDA4YTMsMHhmMjAwMDQyMiwweGYyMWZkMDIwCisJLmxvbmcJMHhmMjAwOTAwMCwweGYyMmU0ODIyLDB4ZmY5MDYwZmYsMHgwMDAwMmQzMAorCS5sb25nCTB4MGM4MTNmZmYsMHg4MDAwNmUwMCwweDAwOGEwYzgxLDB4M2ZkNzgwMDAKKwkubG9uZwkweDZkMDAwMDZjLDB4ZjIyN2UwMGMsMHhmMjAwMDAyMywweGYyMDAwMDgwCisJLmxvbmcJMHhmMjAwMDRhMywweGYyM2E1NTAwLDB4ZjY1YWYyM2EsMHg1NTgwZjY1YworCS5sb25nCTB4ZjIwMDA1MjMsMHhmMjAwMDVhMywweGYyM2E1NTIyLDB4ZjY1NmYyM2EKKwkubG9uZwkweDU1YTJmNjU4LDB4ZjIwMDA1MjMsMHhmMjAwMGNhMywweGYyM2E1NTIyCisJLmxvbmcJMHhmNjUyZjIzYSwweDU0YTJmNjU0LDB4ZjIwMDAxMjMsMHhmMjJlNDgyMworCS5sb25nCTB4ZmY4NGYyMDAsMHgwOGEyZjIwMCwweDA0MjNmMjFmLDB4ZDAzMGYyMDAKKwkubG9uZwkweDkwMDBmMjJlLDB4NDgyMmZmODQsMHg2MGZmMDAwMCwweDJjYjJmMjAwCisJLmxvbmcJMHg5MDAwMTIzYywweDAwMDNmMjJlLDB4NDgwMGZmODQsMHg2MGZmMDAwMAorCS5sb25nCTB4MmM5MDBjODEsMHg0MDYzODAwMCwweDZlMDAwMDhlLDB4ZjIyN2UwMGMKKwkubG9uZwkweGYyM2M0NDgwLDB4YmY4MDAwMDAsMHhmMjAwMDBhMCwweGYyMDAwNDAwCisJLmxvbmcJMHhmMjAwMDAyMywweGYyMmU2ODgwLDB4ZmY4NGYyMDAsMHgwMDgwZjIwMAorCS5sb25nCTB4MDRhM2YyM2EsMHg1NTgwZjVlYywweGYyM2E1NTAwLDB4ZjVlZWYyMDAKKwkubG9uZwkweDA1YTNmMjAwLDB4MDUyM2YyM2EsMHg1NWEyZjVlOCwweGYyM2E1NTIyCisJLmxvbmcJMHhmNWVhZjIwMCwweDBjYTNmMjAwLDB4MDEyM2YyM2EsMHg1NGEyZjVlNAorCS5sb25nCTB4ZjIyZTQ4MjMsMHhmZjg0ZjIwMCwweDA4YTJmMjAwLDB4MDQyM2YyMmUKKwkubG9uZwkweDQ4MjJmZjg0LDB4ZjIxZmQwMzAsMHhmMjAwOTAwMCwweDRhMTA2YTBjCisJLmxvbmcJMHhmMjNhNDgyMiwweGY1ZDY2MGZmLDB4MDAwMDJjMjQsMHhmMjNhNDgyMgorCS5sb25nCTB4ZjViYTYwZmYsMHgwMDAwMmMxMCwweDRhMTA2YTE2LDB4ZjIzYTQ4MDAKKwkubG9uZwkweGY1YmFmMjAwLDB4OTAwMGYyM2EsMHg0ODIyZjVjMCwweDYwZmYwMDAwCisJLmxvbmcJMHgyYmZlZjIzYSwweDQ4MDBmNTk0LDB4ZjIwMDkwMDAsMHhmMjNhNDgyMgorCS5sb25nCTB4ZjViYTYwZmYsMHgwMDAwMmJlMCwweDYwZmYwMDAwLDB4MmE2NmYyMTAKKwkubG9uZwkweDQ4MDAyMjEwLDB4MzIyODAwMDQsMHgwMjgxN2ZmZiwweGZmZmYwYzgxCisJLmxvbmcJMHgzZmZmODAwMCwweDZjNGUwYzgxLDB4M2ZkNzgwMDAsMHg2ZDAwMDA3YworCS5sb25nCTB4ZjIzYzQ0ODAsMHgzZjgwMDAwMCwweGYyMDAwMGE4LDB4ZjIyN2UwMDQKKwkubG9uZwkweGYyM2M0NTAwLDB4M2Y4MDAwMDAsMHhmMjAwMDEyMiwweGYyMDAwOGEzCisJLmxvbmcJMHhmMjFmZDAyMCwweGYyMDAwNDg0LDB4ZjIwMDA0MjAsMHhmMjI3ZTAwMQorCS5sb25nCTB4NDFkNzYxZmYsMHhmZmZmZmQ2NiwweGRmZmMwMDAwLDB4MDAwYzYwZmYKKwkubG9uZwkweDAwMDAyYjZjLDB4ZjIwMDAwMTgsMHhmMjNjNDQzOCwweDNmODAwMDAwCisJLmxvbmcJMHhmMmQyMDAwMCwweDI5ZDRmMjNhLDB4NDgwMGM1YTYsMHgyMjEwMDI4MQorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDgxM2Y4MCwweDAwMDAyZjAxLDB4ZjIwMDkwMDAKKwkubG9uZwkweGYyMWY0NDIzLDB4NjBmZjAwMDAsMHgyYjM2ZjIwMCwweDkwMDAxMjNjCisJLmxvbmcJMHgwMDAzZjIxMCwweDQ4MDA2MGZmLDB4MDAwMDJiMTYsMHg2MGZmMDAwMAorCS5sb25nCTB4MjliMmYyMTAsMHg0ODAwMjIxMCwweDMyMjgwMDA0LDB4MDI4MTdmZmYKKwkubG9uZwkweGZmZmYwYzgxLDB4M2ZmZjgwMDAsMHg2YzQ0ZjIzYywweDQ0ODAzZjgwCisJLmxvbmcJMHgwMDAwZjIwMCwweDAwYTJmMjAwLDB4MDAxYWYyM2MsMHg0NDIyM2Y4MAorCS5sb25nCTB4MDAwMGYyMDAsMHgwNDIwZjIwMCwweDAwMDQyZjAwLDB4NDI4MGYyMjcKKwkubG9uZwkweGUwMDE0MWQ3LDB4NjFmZmZmZmYsMHhmY2M0ZGZmYywweDAwMDAwMDBjCisJLmxvbmcJMHhmMjFmOTAwMCwweGYyMDAwMDIyLDB4NjBmZjAwMDAsMHgyYWNhZjIwMAorCS5sb25nCTB4MDAxOGYyM2MsMHg0NDM4M2Y4MCwweDAwMDBmMmQyLDB4MDAwMDI5MmEKKwkubG9uZwkweDRhMTA2YTE4LDB4ZjIzYTQ4MDAsMHhjNGU4ZjIwMCwweDkwMDBmMjNjCisJLmxvbmcJMHg0NDIyMDA4MCwweDAwMDA2MGZmLDB4MDAwMDJhOWMsMHg2MGZmMDAwMAorCS5sb25nCTB4MmNlOGYyMDAsMHg5MDAwZjIzYSwweDQ4MDBjNGQ2LDB4NjBmZjAwMDAKKwkubG9uZwkweDJhODYzZmRjLDB4MDAwMDgyZTMsMHgwODY1NDM2MSwweGM0YzYwMDAwCisJLmxvbmcJMHgwMDAwM2ZhNSwweDU1NTU1NTU1LDB4NGNjMTNmYzUsMHg1NTU1NTU1NQorCS5sb25nCTB4NGE1NDNmODEsMHgxMTExMTExNywweDQzODUzZmE1LDB4NTU1NTU1NTUKKwkubG9uZwkweDRmNWEzZmM1LDB4NTU1NTU1NTUsMHg1NTU1MDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwM2VjNywweDFkZTNhNTc3LDB4NDY4MjNlZmEsMHgwMWEwMTlkNworCS5sb25nCTB4Y2I2ODNmMmEsMHgwMWEwMWEwMSwweDlkZjMzZjU2LDB4YzE2YzE2YzEKKwkubG9uZwkweDcwZTIzZjgxLDB4MTExMTExMTEsMHgxMTExM2ZhNSwweDU1NTU1NTU1CisJLmxvbmcJMHg1NTU1M2ZmYywweDAwMDBhYWFhLDB4YWFhYWFhYWEsMHhhYWFiMDAwMAorCS5sb25nCTB4MDAwMDQ4YjAsMHgwMDAwMDAwMCwweDAwMDAzNzMwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAzZmZmLDB4MDAwMDgwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwM2ZmZiwweDAwMDA4MTY0LDB4ZDFmM2JjMDMsMHgwNzc0OWY4NAorCS5sb25nCTB4MWE5YjNmZmYsMHgwMDAwODJjZCwweDg2OThhYzJiLDB4YTFkODlmYzEKKwkubG9uZwkweGQ1YjkzZmZmLDB4MDAwMDg0M2EsMHgyOGMzYWNkZSwweDQwNDhhMDcyCisJLmxvbmcJMHg4MzY5M2ZmZiwweDAwMDA4NWFhLDB4YzM2N2NjNDgsMHg3YjE0MWZjNQorCS5sb25nCTB4Yzk1YzNmZmYsMHgwMDAwODcxZiwweDYxOTY5ZThkLDB4MTAxMDFlZTgKKwkubG9uZwkweDVjOWYzZmZmLDB4MDAwMDg4OTgsMHgwZTgwOTJkYSwweDg1Mjg5ZmEyCisJLmxvbmcJMHgwNzI5M2ZmZiwweDAwMDA4YTE0LDB4ZDU3NTQ5NmUsMHhmZDljYTA3YgorCS5sb25nCTB4ZjlhZjNmZmYsMHgwMDAwOGI5NSwweGMxZTNlYThiLDB4ZDZlOGEwMDIKKwkubG9uZwkweDBkY2YzZmZmLDB4MDAwMDhkMWEsMHhkZjViN2U1YiwweGE5ZTQyMDVhCisJLmxvbmcJMHg2M2RhM2ZmZiwweDAwMDA4ZWE0LDB4Mzk4YjQ1Y2QsMHg1M2MwMWViNworCS5sb25nCTB4MDA1MTNmZmYsMHgwMDAwOTAzMSwweGRjNDMxNDY2LDB4YjFkYzFmNmUKKwkubG9uZwkweGIwMjkzZmZmLDB4MDAwMDkxYzMsMHhkMzczYWIxMSwweGMzMzhhMDc4CisJLmxvbmcJMHgxNDk0M2ZmZiwweDAwMDA5MzVhLDB4MmIyZjEzZTYsMHhlOTJjOWViMworCS5sb25nCTB4MTliMDNmZmYsMHgwMDAwOTRmNCwweGVmYThmZWY3LDB4MDk2MDIwMTcKKwkubG9uZwkweDQ1N2QzZmZmLDB4MDAwMDk2OTQsMHgyZDM3MjAxOCwweDVhMDAxZjExCisJLmxvbmcJMHhkNTM3M2ZmZiwweDAwMDA5ODM3LDB4ZjA1MThkYjgsMHhhOTcwOWZiOQorCS5sb25nCTB4NTJkZDNmZmYsMHgwMDAwOTllMCwweDQ1OTMyMGI3LDB4ZmE2NDFmZTQKKwkubG9uZwkweDMwODczZmZmLDB4MDAwMDliOGQsMHgzOWI5ZDU0ZSwweDU1MzgxZmEyCisJLmxvbmcJMHhhODE4M2ZmZiwweDAwMDA5ZDNlLDB4ZDlhNzJjZmYsMHhiNzUwMWZkZQorCS5sb25nCTB4NDk0ZDNmZmYsMHgwMDAwOWVmNSwweDMyNjA5MWExLDB4MTFhYzIwNTAKKwkubG9uZwkweDQ4OTAzZmZmLDB4MDAwMGEwYjAsMHg1MTBmYjk3MSwweDRmYzRhMDczCisJLmxvbmcJMHg2OTFjM2ZmZiwweDAwMDBhMjcwLDB4NDMwMzBjNDksMHg2ODE4MWY5YgorCS5sb25nCTB4N2EwNTNmZmYsMHgwMDAwYTQzNSwweDE1YWUwOWU2LDB4ODBhMGEwNzkKKwkubG9uZwkweDcxMjYzZmZmLDB4MDAwMGE1ZmUsMHhkNmE5YjE1MSwweDM4ZWNhMDcxCisJLmxvbmcJMHhhMTQwM2ZmZiwweDAwMDBhN2NkLDB4OTNiNGU5NjUsMHgzNTY4MjA0ZgorCS5sb25nCTB4NjJkYTNmZmYsMHgwMDAwYTlhMSwweDVhYjRlYTdjLDB4MGVmODFmMjgKKwkubG9uZwkweDNjNGEzZmZmLDB4MDAwMGFiN2EsMHgzOWI1YTkzZSwweGQzMzg5ZjlhCisJLmxvbmcJMHg3ZmRjM2ZmZiwweDAwMDBhZDU4LDB4M2VlYTQyYTEsMHg0YWM4YTA1YgorCS5sb25nCTB4M2ZhYzNmZmYsMHgwMDAwYWYzYiwweDc4YWQ2OTBhLDB4NDM3NDFmZGYKKwkubG9uZwkweDI2MTAzZmZmLDB4MDAwMGIxMjMsMHhmNTgxZDJhYywweDI1OTA5ZjcwCisJLmxvbmcJMHg1ZjkwM2ZmZiwweDAwMDBiMzExLDB4YzQxMmE5MTEsMHgyNDg4MjAxZgorCS5sb25nCTB4Njc4YTNmZmYsMHgwMDAwYjUwNCwweGYzMzNmOWRlLDB4NjQ4NDFmMzIKKwkubG9uZwkweGZiMTMzZmZmLDB4MDAwMGI2ZmQsMHg5MWUzMjhkMSwweDc3OTAyMDAzCisJLmxvbmcJMHg4YjMwM2ZmZiwweDAwMDBiOGZiLDB4YWY0NzYyZmIsMHg5ZWU4MjAwZAorCS5sb25nCTB4YzNjYzNmZmYsMHgwMDAwYmFmZiwweDVhYjIxMzNlLDB4NDVmYzlmOGIKKwkubG9uZwkweDJhZTYzZmZmLDB4MDAwMGJkMDgsMHhhMzlmNTgwYywweDM2YzBhMDJiCisJLmxvbmcJMHhiZjcwM2ZmZiwweDAwMDBiZjE3LDB4OTliNjdhNzMsMHgxMDg0YTAwYgorCS5sb25nCTB4ZjUxODNmZmYsMHgwMDAwYzEyYywweDRjY2E2NjcwLDB4OTQ1OGEwNDEKKwkubG9uZwkweGRkNDEzZmZmLDB4MDAwMGMzNDYsMHhjY2RhMjQ5NywweDY0MDg5ZmRmCisJLmxvbmcJMHgxMzdiM2ZmZiwweDAwMDBjNTY3LDB4MmExMTU1MDYsMHhkYWRjMjAxZgorCS5sb25nCTB4MTU2ODNmZmYsMHgwMDAwYzc4ZCwweDc0YzhhYmI5LDB4YjE1YzFmYzEKKwkubG9uZwkweDNhMmUzZmZmLDB4MDAwMGM5YjksMHhiZDg2NmUyZiwweDI3YTRhMDNmCisJLmxvbmcJMHg4ZjAzM2ZmZiwweDAwMDBjYmVjLDB4MTRmZWYyNzIsMHg3YzVjMWZmNAorCS5sb25nCTB4OTA3ZDNmZmYsMHgwMDAwY2UyNCwweDhjMTUxZjg0LDB4ODBlNDllNmUKKwkubG9uZwkweDUzZTQzZmZmLDB4MDAwMGQwNjMsMHgzM2RhZWYyYiwweDI1OTQxZmQ2CisJLmxvbmcJMHhkNDVjM2ZmZiwweDAwMDBkMmE4LDB4MWQ5MWYxMmEsMHhlNDVjYTA3NgorCS5sb25nCTB4ZWRiOTNmZmYsMHgwMDAwZDRmMywweDVhYWJjZmVkLDB4ZmEyMDlmYTYKKwkubG9uZwkweGRlMjEzZmZmLDB4MDAwMGQ3NDQsMHhmY2NhZDY5ZCwweDZhZjQxZWU2CisJLmxvbmcJMHg5YTJmM2ZmZiwweDAwMDBkOTlkLDB4MTVjMjc4YWYsMHhkN2I0MjA3ZgorCS5sb25nCTB4NDM5ZjNmZmYsMHgwMDAwZGJmYiwweGI3OTdkYWYyLDB4Mzc1NDIwMWUKKwkubG9uZwkweGMyMDczZmZmLDB4MDAwMGRlNjAsMHhmNDgyNWUwZSwweDkxMjQ5ZThiCisJLmxvbmcJMHhlMTc1M2ZmZiwweDAwMDBlMGNjLDB4ZGVlYzJhOTQsMHhlMTEwMjAwMworCS5sb25nCTB4MmM0YjNmZmYsMHgwMDAwZTMzZiwweDg5NzJiZThhLDB4NWE1MDIwMDQKKwkubG9uZwkweGRmZjUzZmZmLDB4MDAwMGU1YjksMHgwNmU3N2M4MywweDQ4YTgxZTcyCisJLmxvbmcJMHhmNDdhM2ZmZiwweDAwMDBlODM5LDB4NmE1MDNjNGIsMHhkYzY4MWY3MgorCS5sb25nCTB4MmYyMjNmZmYsMHgwMDAwZWFjMCwweGM2ZTdkZDI0LDB4MzkzMGEwMTcKKwkubG9uZwkweGU5NDUzZmZmLDB4MDAwMGVkNGYsMHgzMDFlZDk5NCwweDJiODQxZjQwCisJLmxvbmcJMHgxYTViM2ZmZiwweDAwMDBlZmU0LDB4Yjk5YmRjZGEsMHhmNWNjOWZiOQorCS5sb25nCTB4YTllMzNmZmYsMHgwMDAwZjI4MSwweDc3M2M1OWZmLDB4YjEzODIwNzQKKwkubG9uZwkweDRjMDUzZmZmLDB4MDAwMGY1MjUsMHg3ZDE1MjQ4NiwweGNjMmMxZjc3CisJLmxvbmcJMHgzYTE5M2ZmZiwweDAwMDBmN2QwLDB4ZGY3MzBhZDEsMHgzYmI4MWZmZQorCS5sb25nCTB4OTBkNTNmZmYsMHgwMDAwZmE4MywweGIyZGI3MjJhLDB4MDMzY2EwNDEKKwkubG9uZwkweGVkMjIzZmZmLDB4MDAwMGZkM2UsMHgwYzBjZjQ4NiwweGMxNzQxZjg1CisJLmxvbmcJMHgzZjNhMjIxMCwweDAyODE3ZmZmLDB4MDAwMDBjODEsMHgzZmJlMDAwMAorCS5sb25nCTB4NmMwNjYwZmYsMHgwMDAwMDEwOCwweDMyMjgwMDA0LDB4MGM4MTQwMGMKKwkubG9uZwkweGIxNjc2ZDA2LDB4NjBmZjAwMDAsMHgwMTBjZjIxMCwweDQ4MDBmMjAwCisJLmxvbmcJMHgwMDgwZjIzYywweDQ0MjM0MmI4LDB4YWEzYmYyMjcsMHhlMDBjMmQ3YworCS5sb25nCTB4MDAwMDAwMDAsMHhmZjU4ZjIwMSwweDYwMDA0M2ZhLDB4ZmJiNmYyMDEKKwkubG9uZwkweDQwMDAyZDQxLDB4ZmY1NDAyODEsMHgwMDAwMDAzZiwweGU5ODlkM2MxCisJLmxvbmcJMHgyMjJlZmY1NCwweGVjODEwNjQxLDB4M2ZmZjNkN2EsMHhmYjA2ZmY1NAorCS5sb25nCTB4ZjIwMDAxMDAsMHhmMjNjNDQyMywweGJjMzE3MjE4LDB4ZjIzYTQ5MjMKKwkubG9uZwkweGZhZjJmMjAwLDB4MDQyMmYyMDAsMHgwODIyZjIwMCwweDAwODBmMjAwCisJLmxvbmcJMHgwNGEzZjIzYywweDQ1MDAzYWI2LDB4MGI3MGYyMDAsMHgwNTIzZjIwMAorCS5sb25nCTB4MDU4MGYyM2MsMHg0NWEzM2MwOCwweDg4OTVmMjNhLDB4NTUyMmZhZDQKKwkubG9uZwkweGYyM2E1NWEyLDB4ZmFkNmYyMDAsMHgwNTIzM2Q0MSwweGZmODQyZDdjCisJLmxvbmcJMHg4MDAwMDAwMCwweGZmODg0MmFlLDB4ZmY4Y2YyMDAsMHgwNWEzZjIzYworCS5sb25nCTB4NDUyMjNmMDAsMHgwMDAwZjIwMCwweDAxYTNmMjAwLDB4MDUyM2YyMDAKKwkubG9uZwkweDBjMjJmMjE5LDB4NDg4MGYyMDAsMHgwODIyZjIwMCwweDA0MjNmMjFmCisJLmxvbmcJMHhkMDMwZjIxMSwweDQ0MjJmMjAwLDB4MDQyMjIyMmUsMHhmZjU4NGE4MQorCS5sb25nCTB4NjcwNmYyMmUsMHg0ODIzZmY5MCwweGYyMDA5MDAwLDB4MTIzYzAwMDAKKwkubG9uZwkweGYyMmU0ODIzLDB4ZmY4NDYwZmYsMHgwMDAwMjRjNiwweGYyMTBkMDgwCisJLmxvbmcJMHhmMjAwOTAwMCwweGYyM2M0NDIyLDB4M2Y4MDAwMDAsMHg2MGZmMDAwMAorCS5sb25nCTB4MjRjNjBjODEsMHg0MDBjYjI3YywweDZlNjZmMjEwLDB4NDgwMGYyMDAKKwkubG9uZwkweDAwODBmMjNjLDB4NDQyMzQyYjgsMHhhYTNiZjIyNywweGUwMGMyZDdjCisJLmxvbmcJMHgwMDAwMDAwMSwweGZmNThmMjAxLDB4NjAwMDQzZmEsMHhmYWE2ZjIwMQorCS5sb25nCTB4NDAwMDJkNDEsMHhmZjU0MDI4MSwweDAwMDAwMDNmLDB4ZTk4OWQzYzEKKwkubG9uZwkweDIyMmVmZjU0LDB4ZWM4MTJkNDEsMHhmZjU0ZTI4MSwweDkzYWVmZjU0CisJLmxvbmcJMHgwNjQxM2ZmZiwweDNkNDFmZjkwLDB4MmQ3YzgwMDAsMHgwMDAwZmY5NAorCS5sb25nCTB4NDJhZWZmOTgsMHgyMjJlZmY1NCwweDA2NDEzZmZmLDB4NjAwMGZlZDIKKwkubG9uZwkweDRhMTA2YmZmLDB4MDAwMDIzNzAsMHg2MGZmMDAwMCwweDI0MTIyZjEwCisJLmxvbmcJMHgwMjk3ODAwMCwweDAwMDAwMDk3LDB4MDA4MDAwMDAsMHhmMjNjNDQwMAorCS5sb25nCTB4M2Y4MDAwMDAsMHhmMjAwOTAwMCwweGYyMWY0NDIyLDB4NjBmZjAwMDAKKwkubG9uZwkweDI0MjYyMjEwLDB4MDI4MTdmZmYsMHgwMDAwMGM4MSwweDNmZmQwMDAwCisJLmxvbmcJMHg2YzA2NjBmZiwweDAwMDAwMTVlLDB4MzIyODAwMDQsMHgwYzgxNDAwNAorCS5sb25nCTB4YzIxNTZmMDYsMHg2MGZmMDAwMCwweDAyNmNmMjEwLDB4NDgwMGYyMDAKKwkubG9uZwkweDAwODBmMjNjLDB4NDQyMzQyYjgsMHhhYTNiZjIyNywweGUwMGNmMjAxCisJLmxvbmcJMHg2MDAwNDNmYSwweGY5ZWVmMjAxLDB4NDAwMDJkNDEsMHhmZjU0MDI4MQorCS5sb25nCTB4MDAwMDAwM2YsMHhlOTg5ZDNjMSwweDIyMmVmZjU0LDB4ZWM4MTJkNDEKKwkubG9uZwkweGZmNTRmMjAwLDB4MDEwMGYyM2MsMHg0NDIzYmMzMSwweDcyMThmMjNhCisJLmxvbmcJMHg0OTIzZjkzMCwweGYyMDAwNDIyLDB4ZjIwMDA4MjIsMHgwNjQxM2ZmZgorCS5sb25nCTB4ZjIwMDAwODAsMHhmMjAwMDRhMywweGYyM2M0NTAwLDB4Mzk1MDA5N2IKKwkubG9uZwkweGYyMDAwNTIzLDB4ZjIwMDA1ODAsMHhmMjNjNDVhMywweDNhYjYwYjZhCisJLmxvbmcJMHhmMjNhNTUyMiwweGY5MWVmMjNhLDB4NTVhMmY5MjAsMHgzZDQxZmY4NAorCS5sb25nCTB4MmQ3YzgwMDAsMHgwMDAwZmY4OCwweDQyYWVmZjhjLDB4ZjIwMDA1MjMKKwkubG9uZwkweDIyMmVmZjU0LDB4NDQ0MWYyMDAsMHgwNWEzMDY0MSwweDNmZmZmMjNhCisJLmxvbmcJMHg1NTIyZjkwMCwweGYyM2M0NWEyLDB4M2YwMDAwMDAsMHhmMjAwMDUyMworCS5sb25nCTB4MDA0MTgwMDAsMHgzZDQxZmY5MCwweDJkN2M4MDAwLDB4MDAwMGZmOTQKKwkubG9uZwkweDQyYWVmZjk4LDB4ZjIwMDBjYTMsMHhmMjAwMDEyMywweGYyMDAwNDIyCisJLmxvbmcJMHhmMjAwMDgyMiwweGYyMWZkMDMwLDB4ZjIxMTQ4MjMsMHgyMjJlZmY1NAorCS5sb25nCTB4MGM4MTAwMDAsMHgwMDNmNmYxYSwweGYyMjk0NDgwLDB4MDAwY2YyMmUKKwkubG9uZwkweDQ4YTJmZjkwLDB4ZjIwMDA0MjIsMHhmMjExNDgyMiwweDYwZmYwMDAwCisJLmxvbmcJMHgwMDM0MGM4MSwweGZmZmZmZmZkLDB4NmMxNmYyMjksMHg0NDIyMDAwYworCS5sb25nCTB4ZjIxMTQ4MjIsMHhmMjJlNDgyMiwweGZmOTA2MGZmLDB4MDAwMDAwMTYKKwkubG9uZwkweGYyMTk0ODgwLDB4ZjIxMTQ0MjIsMHhmMjJlNDhhMiwweGZmOTBmMjAwCisJLmxvbmcJMHgwNDIyZjIwMCwweDkwMDBmMjJlLDB4NDgyM2ZmODQsMHg2MGZmMDAwMAorCS5sb25nCTB4MjJhZTBjODEsMHgzZmJlMDAwMCwweDZjNmMwYzgxLDB4MDAzMzAwMDAKKwkubG9uZwkweDZkMmMyZDdjLDB4ODAwMTAwMDAsMHhmZjg0MmQ3YywweDgwMDAwMDAwCisJLmxvbmcJMHhmZjg4NDJhZSwweGZmOGNmMjEwLDB4NDgwMGYyMDAsMHg5MDAwMTIzYworCS5sb25nCTB4MDAwMmYyMmUsMHg0ODIyZmY4NCwweDYwZmYwMDAwLDB4MjI2NGYyMTAKKwkubG9uZwkweDQ4MDBmMjNhLDB4NTQyM2Y4NmMsMHgyZDdjODAwMSwweDAwMDBmZjg0CisJLmxvbmcJMHgyZDdjODAwMCwweDAwMDBmZjg4LDB4NDJhZWZmOGMsMHhmMjJlNDgyMgorCS5sb25nCTB4ZmY4NGYyMDAsMHg5MDAwMTIzYywweDAwMDBmMjNhLDB4NTQyM2Y4NGMKKwkubG9uZwkweDYwZmYwMDAwLDB4MjIyY2YyMTAsMHg0ODAwZjIwMCwweDAwMjNmMjI3CisJLmxvbmcJMHhlMDBjZjIzYywweDQ0ODAyZjMwLDB4Y2FhOGYyMDAsMHgwMGEzZjIzYworCS5sb25nCTB4NDUwMDMxMGYsMHg4MjkwZjIzYywweDQ0YTIzMmQ3LDB4MzIyMGYyMDAKKwkubG9uZwkweDAxMjNmMjAwLDB4MDBhM2YyM2MsMHg0NTIyMzQ5MywweGYyODFmMjNhCisJLmxvbmcJMHg1NGEyZjdjMCwweGYyMDAwMTIzLDB4ZjIwMDAwYTMsMHhmMjNhNTUyMgorCS5sb25nCTB4ZjdiYWYyM2EsMHg1NGEyZjdiYywweGYyMDAwMTIzLDB4ZjIwMDAwYTMKKwkubG9uZwkweGYyM2E1NTIyLDB4ZjdiNmYyM2EsMHg1NGEyZjdiOCwweGYyMDAwMTIzCisJLmxvbmcJMHhmMjAwMDBhMywweGYyM2E1NTIyLDB4ZjdiMmYyM2EsMHg0OGEyZjdiNAorCS5sb25nCTB4ZjIwMDAxMjMsMHhmMjAwMDBhMywweGYyMDAwMTIzLDB4ZjIxMDQ4YTMKKwkubG9uZwkweGYyM2M0NDIzLDB4M2YwMDAwMDAsMHhmMjAwMDhhMiwweGYyMWZkMDMwCisJLmxvbmcJMHhmMjAwMDQyMiwweGYyMDA5MDAwLDB4ZjIxMDQ4MjIsMHg2MGZmMDAwMAorCS5sb25nCTB4MjE4ZTIyMTAsMHgwYzgxMDAwMCwweDAwMDA2ZTAwLDB4ZmJhY2YyM2MKKwkubG9uZwkweDQ0MDBiZjgwLDB4MDAwMGYyMDAsMHg5MDAwZjIzYywweDQ0MjIwMDgwCisJLmxvbmcJMHgwMDAwNjBmZiwweDAwMDAyMTc4LDB4NjBmZjAwMDAsMHgxZmY2MzAyOAorCS5sb25nCTB4MDAwMDA4ODAsMHgwMDBmMDQ0MCwweDNmZmZmMjAwLDB4NTAwMDZkMDIKKwkubG9uZwkweDRlNzUxZDdjLDB4MDAwOGZmNjQsMHg0ZTc1NjFmZiwweDAwMDA3Y2ZjCisJLmxvbmcJMHg0NDQwMDQ0MCwweDNmZmZmMjAwLDB4NTAwMDFkN2MsMHgwMDA4ZmY2NAorCS5sb25nCTB4NGU3NTMwMjgsMHgwMDAwMDA0MCwweDdmZmYwODgwLDB4MDAwZTJkNjgKKwkubG9uZwkweDAwMDRmZjg4LDB4MmQ2ODAwMDgsMHhmZjhjM2Q0MCwweGZmODRmMjJlCisJLmxvbmcJMHg0ODAwZmY4NCwweDZiMDI0ZTc1LDB4MWQ3YzAwMDgsMHhmZjY0NGU3NQorCS5sb25nCTB4NjFmZjAwMDAsMHg3Y2I2NjBjYSwweDdmZmIwMDAwLDB4ODAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHhmMjEwNDgwMCwweDIyMTAzMjI4CisJLmxvbmcJMHgwMDA0MDI4MSwweDdmZmZmZmZmLDB4MGM4MTQwMGMsMHhiMTY3NmU0MgorCS5sb25nCTB4ZjIwMDAwMTgsMHgyZjAwNDI4MCwweGYyMjdlMDAxLDB4NDFkNzYxZmYKKwkubG9uZwkweGZmZmZmYWQyLDB4ZGZmYzAwMDAsMHgwMDBjZjIzYywweDQ0MjMzZjAwCisJLmxvbmcJMHgwMDAwMjAxZiwweGYyM2M0NDgwLDB4M2U4MDAwMDAsMHhmMjAwMDBhMAorCS5sb25nCTB4ZjIwMDkwMDAsMHgxMjNjMDAwMiwweGYyMDAwNDIyLDB4NjBmZjAwMDAKKwkubG9uZwkweDIwODAwYzgxLDB4NDAwY2IyYjMsMHg2ZTNjZjIwMCwweDAwMThmMjNhCisJLmxvbmcJMHg1NDI4YmFhZSwweGYyM2E1NDI4LDB4YmFiMDJmMDAsMHg0MjgwZjIyNworCS5sb25nCTB4ZTAwMTQxZDcsMHg2MWZmZmZmZiwweGZhN2NkZmZjLDB4MDAwMDAwMGMKKwkubG9uZwkweDIwMWZmMjAwLDB4OTAwMDEyM2MsMHgwMDAwZjIzYSwweDQ4MjNmZjVhCisJLmxvbmcJMHg2MGZmMDAwMCwweDIwM2M2MGZmLDB4MDAwMDIwMTQsMHhmMjNjNDQwMAorCS5sb25nCTB4M2Y4MDAwMDAsMHhmMjAwOTAwMCwweGYyM2M0NDIyLDB4MDA4MDAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MjAzMmYyMTAsMHg0ODAwMjIxMCwweDMyMjgwMDA0CisJLmxvbmcJMHgyMjQxMDI4MSwweDdmZmZmZmZmLDB4MGM4MTQwMGMsMHhiMTY3NmU2MgorCS5sb25nCTB4ZjIwMDAwMTgsMHg0OGU3ODA0MCwweGYyMjdlMDAxLDB4NDFkNzQyODAKKwkubG9uZwkweDYxZmZmZmZmLDB4ZmJlMGRmZmMsMHgwMDAwMDAwYywweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDRjZGYwMjAxLDB4ZjIwMDAwODAsMHhmMjNjNDRhMgorCS5sb25nCTB4M2Y4MDAwMDAsMHhmMjI3NjgwMCwweGYyMDAwNDIwLDB4MjIwOTAyODEKKwkubG9uZwkweDgwMDAwMDAwLDB4MDA4MTNmMDAsMHgwMDAwZjIxZiwweDQ4MjIyZjAxCisJLmxvbmcJMHhmMjAwOTAwMCwweDEyM2MwMDAwLDB4ZjIxZjQ0MjMsMHg2MGZmMDAwMAorCS5sb25nCTB4MWZhMDBjODEsMHg0MDBjYjJiMywweDZlZmYwMDAwLDB4MWY0Y2YyMDAKKwkubG9uZwkweDAwMThmMjNhLDB4NTQyOGI5Y2EsMHgyZjNjMDAwMCwweDAwMDAyZjNjCisJLmxvbmcJMHg4MDAwMDAwMCwweDIyMDkwMjgxLDB4ODAwMDAwMDAsMHgwMDgxN2ZmYgorCS5sb25nCTB4MDAwMDJmMDEsMHhmMjNhNTQyOCwweGI5YjAyZjAwLDB4NDI4MGYyMjcKKwkubG9uZwkweGUwMDE0MWQ3LDB4NjFmZmZmZmYsMHhmOTdjZGZmYywweDAwMDAwMDBjCisJLmxvbmcJMHgyMDFmZjIwMCwweDkwMDAxMjNjLDB4MDAwMGYyMWYsMHg0ODIzNjBmZgorCS5sb25nCTB4MDAwMDFmM2UsMHg2MGZmMDAwMCwweDFkZGFmMjEwLDB4NDgwMGYyMmUKKwkubG9uZwkweDY4MDBmZjg0LDB4MjIxMDMyMjgsMHgwMDA0MmQ0MSwweGZmODQwMjgxCisJLmxvbmcJMHg3ZmZmZmZmZiwweDBjODEzZmQ3LDB4ODAwMDZkMDAsMHgwMDc0MGM4MQorCS5sb25nCTB4M2ZmZmRkY2UsMHg2ZTAwMDA2YSwweDIyMmVmZjg0LDB4MmQ0MWZmNWMKKwkubG9uZwkweDAyODE3ZmZmLDB4MDAwMDA2ODEsMHgwMDAxMDAwMCwweDJkNDFmZjg0CisJLmxvbmcJMHgwMmFlODAwMCwweDAwMDBmZjVjLDB4ZjIyZTQ4MDAsMHhmZjg0MmYwMAorCS5sb25nCTB4NDI4MGYyMjcsMHhlMDAxNDFkNywweDYxZmZmZmZmLDB4ZmFjOGRmZmMKKwkubG9uZwkweDAwMDAwMDBjLDB4MjAxZmYyMDAsMHgwMDgwZjIzYywweDQ0YTI0MDAwCisJLmxvbmcJMHgwMDAwMjIyZSwweGZmNWNmMjJlLDB4Njg4MGZmODQsMHhiM2FlZmY4NAorCS5sb25nCTB4ZjIwMDkwMDAsMHhmMjJlNDgyMCwweGZmODQ2MGZmLDB4MDAwMDFlYjAKKwkubG9uZwkweDBjODEzZmZmLDB4ODAwMDZkMDAsMHgwMDg4MGM4MSwweDQwMDQ4YWExCisJLmxvbmcJMHg2ZTAwMDA5MiwweDIyMmVmZjg0LDB4MmQ0MWZmNWMsMHgwMjgxN2ZmZgorCS5sb25nCTB4MDAwMDA2ODEsMHgwMDAxMDAwMCwweDJkNDFmZjg0LDB4MDJhZTgwMDAKKwkubG9uZwkweDAwMDBmZjVjLDB4MjIyZWZmNWMsMHhmMjJlNDgwMCwweGZmODQyZjAwCisJLmxvbmcJMHg0MjgwZjIyNywweGUwMDE0MWQ3LDB4NjFmZmZmZmYsMHhmODc4ZGZmYworCS5sb25nCTB4MDAwMDAwMGMsMHgyMDFmMjIyZSwweGZmNWNmMjNjLDB4NDQyMjNmODAKKwkubG9uZwkweDAwMDAwYTgxLDB4YzAwMDAwMDAsMHhmMjAxNDQ4MCwweGYyMDAwMGEwCisJLmxvbmcJMHgyMjJlZmY1YywweDAwODEzZjgwLDB4MDAwMGYyMDEsMHg0NDAwZjIwMAorCS5sb25nCTB4OTAwMDEyM2MsMHgwMDAyZjIwMCwweDA0MjI2MGZmLDB4MDAwMDFlMjAKKwkubG9uZwkweGYyMDA5MDAwLDB4MTIzYzAwMDMsMHhmMjJlNDgwMCwweGZmODQ2MGZmCisJLmxvbmcJMHgwMDAwMWRmZSwweDIyMmVmZjg0LDB4MDI4MTgwMDAsMHgwMDAwMDA4MQorCS5sb25nCTB4M2Y4MDAwMDAsMHhmMjAxNDQwMCwweDAyODE4MDAwLDB4MDAwMDBhODEKKwkubG9uZwkweDgwODAwMDAwLDB4ZjIwMDkwMDAsMHhmMjAxNDQyMiwweDYwZmYwMDAwCisJLmxvbmcJMHgxZGRlNjBmZiwweDAwMDAxYzZjLDB4M2ZmZTAwMDAsMHhiMTcyMTdmNworCS5sb25nCTB4ZDFjZjc5YWMsMHgwMDAwMDAwMCwweDNmODAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDdmODAwMDAwLDB4YmY4MDAwMDAsMHgzZmMyNDk5YSwweGI1ZTQwNDBiCisJLmxvbmcJMHhiZmM1NTViNSwweDg0OGNiN2RiLDB4M2ZjOTk5OTksMHg5ODdkODczMAorCS5sb25nCTB4YmZjZmZmZmYsMHhmZjZmN2U5NywweDNmZDU1NTU1LDB4NTU1NTU1YTQKKwkubG9uZwkweGJmZTAwMDAwLDB4MDAwMDAwMDgsMHgzZjE3NTQ5NiwweGFkZDdkYWQ2CisJLmxvbmcJMHgzZjNjNzFjMiwweGZlODBjN2UwLDB4M2Y2MjQ5MjQsMHg5MjhiY2NmZgorCS5sb25nCTB4M2Y4OTk5OTksMHg5OTk5OTVlYywweDNmYjU1NTU1LDB4NTU1NTU1NTUKKwkubG9uZwkweDQwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZjk5MDAwMCwweDgwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhmZTAzZjgwZgorCS5sb25nCTB4ZTAzZjgwZmUsMHgwMDAwMDAwMCwweDNmZjcwMDAwLDB4ZmYwMTUzNTgKKwkubG9uZwkweDgzM2M0N2UyLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGZhMjMyY2YyCisJLmxvbmcJMHg1MjEzOGFjMCwweDAwMDAwMDAwLDB4M2ZmOTAwMDAsMHhiZGM4ZDgzZQorCS5sb25nCTB4YWQ4OGQ1NDksMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZjY2MDNkOTgKKwkubG9uZwkweDBmNjYwM2RhLDB4MDAwMDAwMDAsMHgzZmZhMDAwMCwweDljZjQzZGNmCisJLmxvbmcJMHhmNWVhZmQ0OCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhmMmI5ZDY0OAorCS5sb25nCTB4MGYyYjlkNjUsMHgwMDAwMDAwMCwweDNmZmEwMDAwLDB4ZGExNmViODgKKwkubG9uZwkweGNiOGRmNjE0LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGVmMmViNzFmCisJLmxvbmcJMHhjNDM0NTIzOCwweDAwMDAwMDAwLDB4M2ZmYjAwMDAsMHg4YjI5Yjc3NQorCS5sb25nCTB4MWJkNzA3NDMsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZWJiZGIyYTUKKwkubG9uZwkweGMxNjE5YzhjLDB4MDAwMDAwMDAsMHgzZmZiMDAwMCwweGE4ZDgzOWY4CisJLmxvbmcJMHgzMGMxZmI0OSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhlODY1YWM3YgorCS5sb25nCTB4NzYwM2ExOTcsMHgwMDAwMDAwMCwweDNmZmIwMDAwLDB4YzYxYTJlYjEKKwkubG9uZwkweDhjZDkwN2FkLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGU1MjU5ODJhCisJLmxvbmcJMHhmNzBjODgwZSwweDAwMDAwMDAwLDB4M2ZmYjAwMDAsMHhlMmYyYTQ3YQorCS5sb25nCTB4ZGUzYTE4YWYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZTFmYzc4MGUKKwkubG9uZwkweDFmYzc4MGUyLDB4MDAwMDAwMDAsMHgzZmZiMDAwMCwweGZmNjQ4OThlCisJLmxvbmcJMHhkZjU1ZDU1MSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhkZWU5NWM0YworCS5sb25nCTB4YTAzN2JhNTcsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4OGRiOTU2YTkKKwkubG9uZwkweDdiM2QwMTQ4LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGRiZWI2MWVlCisJLmxvbmcJMHhkMTljNTk1OCwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHg5YjhmZTEwMAorCS5sb25nCTB4ZjQ3YmExZGUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZDkwMWIyMDMKKwkubG9uZwkweDY0MDZjODBlLDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweGE5MzcyZjFkCisJLmxvbmcJMHgwZGExYmQxNywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhkNjJiODBkNgorCS5sb25nCTB4MmI4MGQ2MmMsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4YjZiMDdmMzgKKwkubG9uZwkweGNlOTBlNDZiLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGQzNjgwZDM2CisJLmxvbmcJMHg4MGQzNjgwZCwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHhjM2ZkMDMyOQorCS5sb25nCTB4MDY0ODg0ODEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZDBiNjlmY2IKKwkubG9uZwkweGQyNTgwZDBiLDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweGQxMWRlMGZmCisJLmxvbmcJMHgxNWFiMThjYSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhjZTE2OGE3NworCS5sb25nCTB4MjUwODBjZTEsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4ZGUxNDMzYTEKKwkubG9uZwkweDZjNjZiMTUwLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGNiODcyN2MwCisJLmxvbmcJMHg2NWMzOTNlMCwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHhlYWUxMGI1YQorCS5sb25nCTB4N2RkYzhhZGQsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YzkwN2RhNGUKKwkubG9uZwkweDg3MTE0NmFkLDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweGY3ODU2ZTVlCisJLmxvbmcJMHhlMmM5YjI5MSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhjNjk4MGM2OQorCS5sb25nCTB4ODBjNjk4MGMsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ODIwMTJjYTUKKwkubG9uZwkweGE2ODIwNmQ3LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGM0MzcyZjg1CisJLmxvbmcJMHg1ZDgyNGNhNiwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHg4ODJjNWZjZAorCS5sb25nCTB4NzI1NmE4YzUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YzFlNGJiZDUKKwkubG9uZwkweDk1ZjZlOTQ3LDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweDhlNDRjNjBiCisJLmxvbmcJMHg0Y2NmZDdkZSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiZmEwMmZlOAorCS5sb25nCTB4MGJmYTAyZmYsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4OTQ0YWQwOWUKKwkubG9uZwkweGY0MzUxYWY2LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGJkNjkxMDQ3CisJLmxvbmcJMHgwNzY2MWFhMywweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHg5YTNlZWNkNAorCS5sb25nCTB4YzNlYWE2YjIsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YmIzZWU3MjEKKwkubG9uZwkweGE1NGQ4ODBjLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGEwMjE4NDM0CisJLmxvbmcJMHgzNTNmMWRlOCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiOTIxNDNmYQorCS5sb25nCTB4MzZmNWUwMmUsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4YTVmMmZjYWIKKwkubG9uZwkweGJiYzUwNmRhLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGI3MGZiYjVhCisJLmxvbmcJMHgxOWJlMzY1OSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhhYmIzYjhiYQorCS5sb25nCTB4MmFkMzYyYTUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjUwOWU2OGEKKwkubG9uZwkweDliOTQ4MjFmLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGIxNjQxNzk1CisJLmxvbmcJMHhjZTNjYTk3YiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiMzBmNjM1MgorCS5sb25nCTB4ODkxN2M4MGIsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4YjcwNDc1NTEKKwkubG9uZwkweDVkMGYxYzYxLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGIxMWZkM2I4CisJLmxvbmcJMHgwYjExZmQzYywweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhiYzk1MmFmZQorCS5sb25nCTB4ZWEzZDEzZTEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YWYzYWRkYzYKKwkubG9uZwkweDgwYWYzYWRlLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGMyMTY4ZWQwCisJLmxvbmcJMHhmNDU4YmE0YSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhZDYwMmI1OAorCS5sb25nCTB4MGFkNjAyYjYsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4Yzc4OGY0MzkKKwkubG9uZwkweGIzMTYzYmYxLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGFiOGY2OWUyCisJLmxvbmcJMHg4MzU5Y2QxMSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhjY2VjYWMwOAorCS5sb25nCTB4YmYwNDU2NWQsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTljODRhNDcKKwkubG9uZwkweGEwN2Y1NjM4LDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGQyNDIwNDg3CisJLmxvbmcJMHgyZGQ4NTE2MCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhODBhODBhOAorCS5sb25nCTB4MGE4MGE4MGIsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZDc4OTQ5OTIKKwkubG9uZwkweDNiYzM1ODhhLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGE2NTVjNDM5CisJLmxvbmcJMHgyZDdiNzNhOCwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhkY2MyYzRiNAorCS5sb25nCTB4OTg4N2RhY2MsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTRhOWNmMWQKKwkubG9uZwkweDk2ODMzNzUxLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGUxZWViZDNlCisJLmxvbmcJMHg2ZDZhNmI5ZSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhMzA2NWUzZgorCS5sb25nCTB4YWU3Y2QwZTAsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZTcwZDc4NWMKKwkubG9uZwkweDJmOWY1YmRjLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGExNmIzMTJlCisJLmxvbmcJMHhhOGZjMzc3ZCwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhlYzFmMzkyYworCS5sb25nCTB4NTE3OWYyODMsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OWZkODA5ZmQKKwkubG9uZwkweDgwOWZkODBhLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGYxMjQ0MGQzCisJLmxvbmcJMHhlMzYxMzBlNiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5ZTRjYWQyMworCS5sb25nCTB4ZGQ1ZjNhMjAsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZjYxY2NlOTIKKwkubG9uZwkweDM0NjYwMGJiLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDljYzhlMTYwCisJLmxvbmcJMHhjM2ZiMTliOSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhmYjA5MWZkMworCS5sb25nCTB4ODE0NTYzMGEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OWI0YzZmOWUKKwkubG9uZwkweGYwM2EzY2FhLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGZmZTk3MDQyCisJLmxvbmcJMHhiZmE0YzJhZCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5OWQ3MjJkYQorCS5sb25nCTB4YmRlNThmMDYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODI1ZWZjZWQKKwkubG9uZwkweDQ5MzY5MzMwLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDk4NjhjODA5CisJLmxvbmcJMHg4NjhjODA5OCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4NGMzN2E3YQorCS5sb25nCTB4YjlhOTA1YzksMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTcwMTJlMDIKKwkubG9uZwkweDVjMDRiODA5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg3MjI0YzJlCisJLmxvbmcJMHg4ZTY0NWZiNywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5NWEwMjU2OAorCS5sb25nCTB4MDk1YTAyNTcsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODk3YjhjYWMKKwkubG9uZwkweDlmN2RlMjk4LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDk0NDU4MDk0CisJLmxvbmcJMHg0NTgwOTQ0NiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4YmNmNTVkZQorCS5sb25nCTB4YzRjZDA1ZmUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTJmMTEzODQKKwkubG9uZwkweDA0OTc4ODljLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDhlMWRjMGZiCisJLmxvbmcJMHg4OWUxMjVlNSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5MWEyYjNjNAorCS5sb25nCTB4ZDVlNmY4MDksMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTA2NmU2OGMKKwkubG9uZwkweDk1NWI2YzliLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDkwNWEzODYzCisJLmxvbmcJMHgzZTA2YzQzYiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5MmFhZGU3NAorCS5sb25nCTB4YzdiZTU5ZTAsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OGYxNzc5ZDkKKwkubG9uZwkweGZkYzNhMjE5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDk0ZTliZmY2CisJLmxvbmcJMHgxNTg0NTY0MywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4ZGRhNTIwMgorCS5sb25nCTB4Mzc2OTQ4MDksMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTcyM2ExYjcKKwkubG9uZwkweDIwMTM0MjAzLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDhjYTI5YzA0CisJLmxvbmcJMHg2NTE0ZTAyMywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5OTU4OTljOAorCS5sb25nCTB4OTBlYjg5OTAsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OGI3MDM0NGEKKwkubG9uZwkweDEzOWJjNzVhLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDliODhiZGFhCisJLmxvbmcJMHgzYTNkYWUyZiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4YTQyZjg3MAorCS5sb25nCTB4NTY2OWRiNDYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OWRiNDIyNGYKKwkubG9uZwkweGZmZTExNTdjLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg5MWFjNzNhCisJLmxvbmcJMHhlOTgxOWI1MCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5ZmRhZGMyNgorCS5sb25nCTB4OGI3YTEyZGEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODdmNzgwODcKKwkubG9uZwkweGY3ODA4N2Y4LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGExZmNmZjE3CisJLmxvbmcJMHhjZTczM2JkNCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4NmQ5MDU0NAorCS5sb25nCTB4N2EzNGFjYzYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTQxYTllOGYKKwkubG9uZwkweDU0NDZmYjlmLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg1YmYzNzYxCisJLmxvbmcJMHgyY2VlM2M5YiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhNjMzY2Q3ZQorCS5sb25nCTB4Njc3MWNkOGIsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODRhOWY5YzgKKwkubG9uZwkweDA4NGE5ZjlkLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGE4NDg5ZTYwCisJLmxvbmcJMHgwYjQzNWE1ZSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4Mzk5MzA1MgorCS5sb25nCTB4M2ZiZTMzNjgsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YWE1OTIzM2MKKwkubG9uZwkweGNjYTRiZDQ5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDgyOGNiZmJlCisJLmxvbmcJMHhiOWEwMjBhMywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhYzY1NmRhZQorCS5sb25nCTB4NmJjYzQ5ODUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODE4NDhkYTgKKwkubG9uZwkweGZhZjBkMjc3LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGFlNmQ4ZWUzCisJLmxvbmcJMHg2MGJiMjQ2OCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4MDgwODA4MAorCS5sb25nCTB4ODA4MDgwODEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjA3MTk3YTIKKwkubG9uZwkweDNjNDZjNjU0LDB4MDAwMDAwMDAsMHhmMjEwNDgwMCwweDJkN2MwMDAwCisJLmxvbmcJMHgwMDAwZmY1NCwweDIyMTAzMjI4LDB4MDAwNDJkNTAsMHhmZjg0MmQ2OAorCS5sb25nCTB4MDAwNGZmODgsMHgyZDY4MDAwOCwweGZmOGMwYzgxLDB4MDAwMDAwMDAKKwkubG9uZwkweDZkMDAwMTgyLDB4MGM4MTNmZmUsMHhmMDdkNmQwYSwweDBjODEzZmZmCisJLmxvbmcJMHg4ODQxNmYwMCwweDAwZTJlMDgxLDB4ZTA4MTA0ODEsMHgwMDAwM2ZmZgorCS5sb25nCTB4ZDJhZWZmNTQsMHg0MWZhZjdiMiwweGYyMDE0MDgwLDB4MmQ3YzNmZmYKKwkubG9uZwkweDAwMDBmZjg0LDB4MmQ2ZWZmODgsMHhmZjk0MDJhZSwweGZlMDAwMDAwCisJLmxvbmcJMHhmZjk0MDBhZSwweDAxMDAwMDAwLDB4ZmY5NDIyMmUsMHhmZjk0MDI4MQorCS5sb25nCTB4N2UwMDAwMDAsMHhlMDgxZTA4MSwweGU4ODFkMWMxLDB4ZjIyZTQ4MDAKKwkubG9uZwkweGZmODQyZDdjLDB4M2ZmZjAwMDAsMHhmZjkwNDJhZSwweGZmOThmMjJlCisJLmxvbmcJMHg0ODI4ZmY5MCwweGYyMjdlMDBjLDB4ZjIxMDQ4MjMsMHhmMjNhNDhhMworCS5sb25nCTB4ZjZjOGYyMDAsMHgwMTAwZjIwMCwweDA5MjNmMjJlLDB4Njg4MGZmODQKKwkubG9uZwkweGYyMDAwOTgwLDB4ZjIwMDA4ODAsMHhmMjNhNTRhMywweGY2Y2NmMjNhCisJLmxvbmcJMHg1NTIzZjZjZSwweGYyM2E1NGEyLDB4ZjZkMGYyM2EsMHg1NTIyZjZkMgorCS5sb25nCTB4ZjIwMDBjYTMsMHhmMjAwMGQyMywweGYyM2E1NGEyLDB4ZjZjY2YyM2EKKwkubG9uZwkweDU1MjJmNmNlLDB4ZjIwMDBjYTMsMHhkMWZjMDAwMCwweDAwMTBmMjAwCisJLmxvbmcJMHgwZDIzZjIwMCwweDAwYTNmMjAwLDB4MDgyMmYyMTAsMHg0OGEyZjIxZgorCS5sb25nCTB4ZDAzMGYyMDAsMHgwNDIyZjIwMCwweDkwMDBmMjJlLDB4NDgyMmZmODQKKwkubG9uZwkweDYwZmYwMDAwLDB4MTQyYWYyM2MsMHg1ODM4MDAwMSwweGYyYzEwMDAwCisJLmxvbmcJMHgxNjc4ZjIwMCwweDAwODBmMjNhLDB4NDRhOGY2NGUsMHhmMjNhNDQyMgorCS5sb25nCTB4ZjY0OGYyMDAsMHgwNGEyZjIwMCwweDAwYTBmMjI3LDB4ZTAwY2YyMDAKKwkubG9uZwkweDA0MDBmMjAwLDB4MDAyM2YyMmUsMHg2ODgwZmY4NCwweGYyMDAwMDgwCisJLmxvbmcJMHhmMjAwMDRhMywweGYyM2E1NTgwLDB4ZjY2MGYyM2EsMHg1NTAwZjY2MgorCS5sb25nCTB4ZjIwMDA1YTMsMHhmMjAwMDUyMywweGYyM2E1NWEyLDB4ZjY1Y2YyM2EKKwkubG9uZwkweDU1MjJmNjVlLDB4ZjIwMDBjYTMsMHhmMjAwMDEyMywweGYyM2E1NGEyCisJLmxvbmcJMHhmNjU4ZjIyZSwweDQ4MjNmZjg0LDB4ZjIwMDA4YTIsMHhmMjFmZDAzMAorCS5sb25nCTB4ZjIwMDA0MjMsMHhmMjAwOTAwMCwweGYyMmU0ODIyLDB4ZmY4NDYwZmYKKwkubG9uZwkweDAwMDAxMzljLDB4NjBmZjAwMDAsMHgxMjEwMmQ3YywweGZmZmZmZjljCisJLmxvbmcJMHhmZjU0NDhlNywweDNmMDAyNjEwLDB4MjgyODAwMDQsMHgyYTI4MDAwOAorCS5sb25nCTB4NDI4MjRhODQsMHg2NjM0MjgwNSwweDQyODU3NDIwLDB4NDI4NmVkYzQKKwkubG9uZwkweDYwMDBlZGFjLDB4ZDQ4NjJkNDMsMHhmZjg0MmQ0NCwweGZmODgyZDQ1CisJLmxvbmcJMHhmZjhjNDQ4MiwweDJkNDJmZjU0LDB4ZjIyZTQ4MDAsMHhmZjg0NGNkZgorCS5sb25nCTB4MDBmYzQxZWUsMHhmZjg0NjAwMCwweGZlMGM0Mjg2LDB4ZWRjNDYwMDAKKwkubG9uZwkweDI0MDZlZGFjLDB4MmUwNWVkYWQsMHg0NDg2MDY4NiwweDAwMDAwMDIwCisJLmxvbmcJMHhlY2FmODg4NywweDJkNDNmZjg0LDB4MmQ0NGZmODgsMHgyZDQ1ZmY4YworCS5sb25nCTB4NDQ4MjJkNDIsMHhmZjU0ZjIyZSwweDQ4MDBmZjg0LDB4NGNkZjAwZmMKKwkubG9uZwkweDQxZWVmZjg0LDB4NjAwMGZkY2UsMHhmMjEwNDgwMCwweGYyMDAwMDE4CisJLmxvbmcJMHhmMjNhNDgzOCwweGY1YTRmMjkyLDB4MDAxNGYyMDAsMHg5MDAwMTIzYworCS5sb25nCTB4MDAwM2YyMTAsMHg0ODAwNjBmZiwweDAwMDAxMmQ2LDB4ZjIxMDQ4MDAKKwkubG9uZwkweDJkN2MwMDAwLDB4MDAwMGZmNTQsMHhmMjAwMDA4MCwweGYyM2E0NDIyCisJLmxvbmcJMHhmNTA4ZjIyZSwweDY4MDBmZjg0LDB4M2Q2ZWZmODgsMHhmZjg2MjIyZQorCS5sb25nCTB4ZmY4NDBjODEsMHgwMDAwMDAwMCwweDZmMDAwMGRhLDB4MGM4MTNmZmUKKwkubG9uZwkweDgwMDA2ZDAwLDB4ZmRhMjBjODEsMHgzZmZmYzAwMCwweDZlMDBmZDk4CisJLmxvbmcJMHgwYzgxM2ZmZSwweGYwN2Q2ZDAwLDB4MDAxYTBjODEsMHgzZmZmODg0MQorCS5sb25nCTB4NmUwMDAwMTAsMHhmMjAwMDRhMiwweGYyM2E0NDIyLDB4ZjRiYzYwMDAKKwkubG9uZwkweGZlNzYyZDZlLDB4ZmY4OGZmOTQsMHgwMmFlZmUwMCwweDAwMDBmZjk0CisJLmxvbmcJMHgwMGFlMDEwMCwweDAwMDBmZjk0LDB4MGM4MTNmZmYsMHg4MDAwNmM0NAorCS5sb25nCTB4ZjIzYTQ0MDAsMHhmNGZjMmQ3YywweDNmZmYwMDAwLDB4ZmY5MDQyYWUKKwkubG9uZwkweGZmOThmMjJlLDB4NDgyOGZmOTAsMHgyMjJlZmY5NCwweDAyODE3ZTAwCisJLmxvbmcJMHgwMDAwZTA4MSwweGUwODFlODgxLDB4ZjIwMDA0YTIsMHhmMjI3ZTAwYworCS5sb25nCTB4ZjIwMDA0MjIsMHg0MWZhZjRlMiwweGQxYzFmMjNhLDB4NDQ4MGY0NjYKKwkubG9uZwkweDYwMDBmZDc2LDB4ZjIzYTQ0MDAsMHhmNDUwMmQ3YywweDNmZmYwMDAwCisJLmxvbmcJMHhmZjkwNDJhZSwweGZmOThmMjJlLDB4NDgyOGZmOTAsMHgyMjJlZmY5NAorCS5sb25nCTB4MDI4MTdlMDAsMHgwMDAwZTA4MSwweGUwODFlODgxLDB4ZjIwMDA0MjIKKwkubG9uZwkweGYyMjdlMDBjLDB4NDFmYWY0YTIsMHhkMWMxZjIzYSwweDQ0ODBmNDFlCisJLmxvbmcJMHg2MDAwZmQzNiwweDBjODEwMDAwLDB4MDAwMDZkMTAsMHhmMjNhNDQwMAorCS5sb25nCTB4ZjQxNGYyMDAsMHg5MDAwNjBmZiwweDAwMDAxMDE0LDB4ZjIzYTQ0MDAKKwkubG9uZwkweGYzZmNmMjAwLDB4OTAwMDYwZmYsMHgwMDAwMTAyZSwweDYwZmYwMDAwCisJLmxvbmcJMHgxMDQyMjIxMCwweDMyMjgwMDA0LDB4MDI4MTdmZmYsMHhmZmZmMGM4MQorCS5sb25nCTB4M2ZmZjgwMDAsMHg2YzU2ZjIxMCwweDQ4MThmMjAwLDB4MDA4MGYyMDAKKwkubG9uZwkweDA0OWFmMjAwLDB4MDAyMmYyM2MsMHg0NGEyM2Y4MCwweDAwMDBmMjAwCisJLmxvbmcJMHgwNDIwMjIxMCwweDAyODE4MDAwLDB4MDAwMDAwODEsMHgzZjAwMDAwMAorCS5sb25nCTB4MmYwMTJmMDAsMHg0MjgwZjIyNywweGUwMDE0MWQ3LDB4NjFmZmZmZmYKKwkubG9uZwkweGZlNWFkZmZjLDB4MDAwMDAwMGMsMHgyMDFmZjIwMCwweDkwMDAxMjNjCisJLmxvbmcJMHgwMDAwZjIxZiwweDQ0MjM2MGZmLDB4MDAwMDExMzYsMHhmMjEwNDgxOAorCS5sb25nCTB4ZjIzYzQ0MzgsMHgzZjgwMDAwMCwweGYyZDIwMDAwLDB4MGZhYzYwZmYKKwkubG9uZwkweDAwMDAwZjdjLDB4NjBmZjAwMDAsMHgwZmJhM2ZmZCwweDAwMDBkZTViCisJLmxvbmcJMHhkOGE5MzcyOCwweDcxOTUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjhhYQorCS5sb25nCTB4M2IyOTVjMTcsMHhmMGJjMDAwMCwweDAwMDBmMjNjLDB4NTgwMDAwMDEKKwkubG9uZwkweGYyMTA0ODM4LDB4ZjJjMTAwMDAsMHgxMzUwMjIxMCwweDZkMDAwMDkwCisJLmxvbmcJMHgyZjAwNDI4MCwweDYxZmZmZmZmLDB4ZmJhMmYyMWYsMHg5MDAwZjIzYQorCS5sb25nCTB4NDgyM2ZmYjgsMHg2MGZmMDAwMCwweDEwZDYyMjEwLDB4NmQwMDAwNzAKKwkubG9uZwkweDJmMDA0MjgwLDB4NjFmZmZmZmYsMHhmZDM0ZjIxZiwweDkwMDBmMjNhCisJLmxvbmcJMHg0ODIzZmY5OCwweDYwZmYwMDAwLDB4MTBjNjIyMTAsMHg2ZDAwMDA1MAorCS5sb25nCTB4MjIyODAwMDgsMHg2NjJlMjIyOCwweDAwMDQwMjgxLDB4N2ZmZmZmZmYKKwkubG9uZwkweDY2MjIzMjEwLDB4MDI4MTAwMDAsMHg3ZmZmMDQ4MSwweDAwMDAzZmZmCisJLmxvbmcJMHg2N2ZmMDAwMCwweDEyZTRmMjAwLDB4OTAwMGYyMDEsMHg0MDAwNjBmZgorCS5sb25nCTB4MDAwMDEwN2MsMHgyZjAwNDI4MCwweDYxZmZmZmZmLDB4ZmIyZWYyMWYKKwkubG9uZwkweDkwMDBmMjNhLDB4NDgyM2ZmNTQsMHg2MGZmMDAwMCwweDEwNjI2MGZmCisJLmxvbmcJMHgwMDAwMGVkNiwweDIyMTA2ZDAwLDB4ZmZmNjJmMDAsMHg0MjgwNjFmZgorCS5sb25nCTB4ZmZmZmZjYmEsMHhmMjFmOTAwMCwweGYyM2E0ODIzLDB4ZmYyZTYwZmYKKwkubG9uZwkweDAwMDAxMDRjLDB4NDA2YTkzNGYsMHgwOTc5YTM3MSwweDNmNzM0NDEzCisJLmxvbmcJMHg1MDlmODAwMCwweGJmY2QwMDAwLDB4YzAyMTlkYzEsMHhkYTk5NGZkMgorCS5sb25nCTB4MDAwMDAwMDAsMHg0MDAwMDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTcKKwkubG9uZwkweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCisJLmxvbmcJMHgwMDAwMDAwMCwweDNmNTZjMTZkLDB4NmY3YmQwYjIsMHgzZjgxMTExMgorCS5sb25nCTB4MzAyYzcxMmMsMHgzZmE1NTU1NSwweDU1NTU0Y2MxLDB4M2ZjNTU1NTUKKwkubG9uZwkweDU1NTU0YTU0LDB4M2ZlMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2Y3MzgwMDAsMHgzZmZmMDAwMCwweDgxNjRkMWYzLDB4YmMwMzA3NzMKKwkubG9uZwkweDNmYmVmN2NhLDB4M2ZmZjAwMDAsMHg4MmNkODY5OCwweGFjMmJhMWQ3CisJLmxvbmcJMHgzZmJkZjhhOSwweDNmZmYwMDAwLDB4ODQzYTI4YzMsMHhhY2RlNDA0NgorCS5sb25nCTB4M2ZiY2Q3YzksMHgzZmZmMDAwMCwweDg1YWFjMzY3LDB4Y2M0ODdiMTUKKwkubG9uZwkweGJmYmRlOGRhLDB4M2ZmZjAwMDAsMHg4NzFmNjE5NiwweDllOGQxMDEwCisJLmxvbmcJMHgzZmJkZTg1YywweDNmZmYwMDAwLDB4ODg5ODBlODAsMHg5MmRhODUyNworCS5sb25nCTB4M2ZiZWJiZjEsMHgzZmZmMDAwMCwweDhhMTRkNTc1LDB4NDk2ZWZkOWEKKwkubG9uZwkweDNmYmI4MGNhLDB4M2ZmZjAwMDAsMHg4Yjk1YzFlMywweGVhOGJkNmU3CisJLmxvbmcJMHhiZmJhODM3MywweDNmZmYwMDAwLDB4OGQxYWRmNWIsMHg3ZTViYTllNgorCS5sb25nCTB4YmZiZTk2NzAsMHgzZmZmMDAwMCwweDhlYTQzOThiLDB4NDVjZDUzYzAKKwkubG9uZwkweDNmYmRiNzAwLDB4M2ZmZjAwMDAsMHg5MDMxZGM0MywweDE0NjZiMWRjCisJLmxvbmcJMHgzZmJlZWViMCwweDNmZmYwMDAwLDB4OTFjM2QzNzMsMHhhYjExYzMzNgorCS5sb25nCTB4M2ZiYmZkNmQsMHgzZmZmMDAwMCwweDkzNWEyYjJmLDB4MTNlNmU5MmMKKwkubG9uZwkweGJmYmRiMzE5LDB4M2ZmZjAwMDAsMHg5NGY0ZWZhOCwweGZlZjcwOTYxCisJLmxvbmcJMHgzZmJkYmEyYiwweDNmZmYwMDAwLDB4OTY5NDJkMzcsMHgyMDE4NWEwMAorCS5sb25nCTB4M2ZiZTkxZDUsMHgzZmZmMDAwMCwweDk4MzdmMDUxLDB4OGRiOGE5NmYKKwkubG9uZwkweDNmYmU4ZDVhLDB4M2ZmZjAwMDAsMHg5OWUwNDU5MywweDIwYjdmYTY1CisJLmxvbmcJMHhiZmJjZGU3YiwweDNmZmYwMDAwLDB4OWI4ZDM5YjksMHhkNTRlNTUzOQorCS5sb25nCTB4YmZiZWJhYWYsMHgzZmZmMDAwMCwweDlkM2VkOWE3LDB4MmNmZmI3NTEKKwkubG9uZwkweGJmYmQ4NmRhLDB4M2ZmZjAwMDAsMHg5ZWY1MzI2MCwweDkxYTExMWFlCisJLmxvbmcJMHhiZmJlYmVkZCwweDNmZmYwMDAwLDB4YTBiMDUxMGYsMHhiOTcxNGZjMgorCS5sb25nCTB4M2ZiY2M5NmUsMHgzZmZmMDAwMCwweGEyNzA0MzAzLDB4MGM0OTY4MTkKKwkubG9uZwkweGJmYmVjOTBiLDB4M2ZmZjAwMDAsMHhhNDM1MTVhZSwweDA5ZTY4MDllCisJLmxvbmcJMHgzZmJiZDFkYiwweDNmZmYwMDAwLDB4YTVmZWQ2YTksMHhiMTUxMzhlYQorCS5sb25nCTB4M2ZiY2U1ZWIsMHgzZmZmMDAwMCwweGE3Y2Q5M2I0LDB4ZTk2NTM1NmEKKwkubG9uZwkweGJmYmVjMjc0LDB4M2ZmZjAwMDAsMHhhOWExNWFiNCwweGVhN2MwZWY4CisJLmxvbmcJMHgzZmJlYTgzYywweDNmZmYwMDAwLDB4YWI3YTM5YjUsMHhhOTNlZDMzNworCS5sb25nCTB4M2ZiZWNiMDAsMHgzZmZmMDAwMCwweGFkNTgzZWVhLDB4NDJhMTRhYzYKKwkubG9uZwkweDNmYmU5MzAxLDB4M2ZmZjAwMDAsMHhhZjNiNzhhZCwweDY5MGE0Mzc1CisJLmxvbmcJMHhiZmJkODM2NywweDNmZmYwMDAwLDB4YjEyM2Y1ODEsMHhkMmFjMjU5MAorCS5sb25nCTB4YmZiZWYwNWYsMHgzZmZmMDAwMCwweGIzMTFjNDEyLDB4YTkxMTI0ODkKKwkubG9uZwkweDNmYmRmYjNjLDB4M2ZmZjAwMDAsMHhiNTA0ZjMzMywweGY5ZGU2NDg0CisJLmxvbmcJMHgzZmJlYjJmYiwweDNmZmYwMDAwLDB4YjZmZDkxZTMsMHgyOGQxNzc5MQorCS5sb25nCTB4M2ZiYWUyY2IsMHgzZmZmMDAwMCwweGI4ZmJhZjQ3LDB4NjJmYjllZTkKKwkubG9uZwkweDNmYmNkYzNjLDB4M2ZmZjAwMDAsMHhiYWZmNWFiMiwweDEzM2U0NWZiCisJLmxvbmcJMHgzZmJlZTlhYSwweDNmZmYwMDAwLDB4YmQwOGEzOWYsMHg1ODBjMzZiZgorCS5sb25nCTB4YmZiZWFlZmQsMHgzZmZmMDAwMCwweGJmMTc5OWI2LDB4N2E3MzEwODMKKwkubG9uZwkweGJmYmNiZjUxLDB4M2ZmZjAwMDAsMHhjMTJjNGNjYSwweDY2NzA5NDU2CisJLmxvbmcJMHgzZmJlZjg4YSwweDNmZmYwMDAwLDB4YzM0NmNjZGEsMHgyNDk3NjQwNworCS5sb25nCTB4M2ZiZDgzYjIsMHgzZmZmMDAwMCwweGM1NjcyYTExLDB4NTUwNmRhZGQKKwkubG9uZwkweDNmYmRmOGFiLDB4M2ZmZjAwMDAsMHhjNzhkNzRjOCwweGFiYjliMTVkCisJLmxvbmcJMHhiZmJkZmIxNywweDNmZmYwMDAwLDB4YzliOWJkODYsMHg2ZTJmMjdhMworCS5sb25nCTB4YmZiZWZlM2MsMHgzZmZmMDAwMCwweGNiZWMxNGZlLDB4ZjI3MjdjNWQKKwkubG9uZwkweGJmYmJiNmY4LDB4M2ZmZjAwMDAsMHhjZTI0OGMxNSwweDFmODQ4MGU0CisJLmxvbmcJMHhiZmJjZWU1MywweDNmZmYwMDAwLDB4ZDA2MzMzZGEsMHhlZjJiMjU5NQorCS5sb25nCTB4YmZiZGE0YWUsMHgzZmZmMDAwMCwweGQyYTgxZDkxLDB4ZjEyYWU0NWEKKwkubG9uZwkweDNmYmM5MTI0LDB4M2ZmZjAwMDAsMHhkNGYzNWFhYiwweGNmZWRmYTFmCisJLmxvbmcJMHgzZmJlYjI0MywweDNmZmYwMDAwLDB4ZDc0NGZjY2EsMHhkNjlkNmFmNAorCS5sb25nCTB4M2ZiZGU2OWEsMHgzZmZmMDAwMCwweGQ5OWQxNWMyLDB4NzhhZmQ3YjYKKwkubG9uZwkweGJmYjhiYzYxLDB4M2ZmZjAwMDAsMHhkYmZiYjc5NywweGRhZjIzNzU1CisJLmxvbmcJMHgzZmJkZjYxMCwweDNmZmYwMDAwLDB4ZGU2MGY0ODIsMHg1ZTBlOTEyNAorCS5sb25nCTB4YmZiZDhiZTEsMHgzZmZmMDAwMCwweGUwY2NkZWVjLDB4MmE5NGUxMTEKKwkubG9uZwkweDNmYmFjYjEyLDB4M2ZmZjAwMDAsMHhlMzNmODk3MiwweGJlOGE1YTUxCisJLmxvbmcJMHgzZmJiOWJmZSwweDNmZmYwMDAwLDB4ZTViOTA2ZTcsMHg3YzgzNDhhOAorCS5sb25nCTB4M2ZiY2YyZjQsMHgzZmZmMDAwMCwweGU4Mzk2YTUwLDB4M2M0YmRjNjgKKwkubG9uZwkweDNmYmVmMjJmLDB4M2ZmZjAwMDAsMHhlYWMwYzZlNywweGRkMjQzOTJmCisJLmxvbmcJMHhiZmJkYmY0YSwweDNmZmYwMDAwLDB4ZWQ0ZjMwMWUsMHhkOTk0MmI4NAorCS5sb25nCTB4M2ZiZWMwMWEsMHgzZmZmMDAwMCwweGVmZTRiOTliLDB4ZGNkYWY1Y2IKKwkubG9uZwkweDNmYmU4Y2FjLDB4M2ZmZjAwMDAsMHhmMjgxNzczYywweDU5ZmZiMTNhCisJLmxvbmcJMHhiZmJjYmIzZiwweDNmZmYwMDAwLDB4ZjUyNTdkMTUsMHgyNDg2Y2MyYworCS5sb25nCTB4M2ZiZWY3M2EsMHgzZmZmMDAwMCwweGY3ZDBkZjczLDB4MGFkMTNiYjkKKwkubG9uZwkweGJmYjhiNzk1LDB4M2ZmZjAwMDAsMHhmYTgzYjJkYiwweDcyMmEwMzNhCisJLmxvbmcJMHgzZmJlZjg0YiwweDNmZmYwMDAwLDB4ZmQzZTBjMGMsMHhmNDg2YzE3NQorCS5sb25nCTB4YmZiZWY1ODEsMHhmMjEwZDA4MCwweDIyMTAzMjI4LDB4MDAwNGYyMmUKKwkubG9uZwkweDY4MDBmZjg0LDB4MDI4MTdmZmYsMHhmZmZmMGM4MSwweDNmYjk4MDAwCisJLmxvbmcJMHg2YzA0NjAwMCwweDAwODgwYzgxLDB4NDAwZDgwYzAsMHg2ZjA0NjAwMAorCS5sb25nCTB4MDA3Y2YyMDAsMHgwMDgwZjIzYywweDQ0YTM0MjgwLDB4MDAwMGYyMmUKKwkubG9uZwkweDYwODBmZjU0LDB4MmYwMjQzZmEsMHhmYmJjZjIyZSwweDQwODBmZjU0CisJLmxvbmcJMHgyMjJlZmY1NCwweDI0MDEwMjgxLDB4MDAwMDAwM2YsMHhlOTgxZDNjMQorCS5sb25nCTB4ZWM4MjIyMDIsMHhlMjgxOTQ4MSwweDA2ODIwMDAwLDB4M2ZmZmYyMjcKKwkubG9uZwkweGUwMGNmMjNjLDB4NDRhMzNjODAsMHgwMDAwMmQ1OSwweGZmODQyZDU5CisJLmxvbmcJMHhmZjg4MmQ1OSwweGZmOGMzZDU5LDB4ZmY5MGYyMDAsMHgwNDI4M2Q1OQorCS5sb25nCTB4ZmY5NDQyNmUsMHhmZjk2NDJhZSwweGZmOThkMzZlLDB4ZmY4NGYyM2EKKwkubG9uZwkweDQ4MjNmYjIyLDB4ZDM2ZWZmOTAsMHg2MDAwMDEwMCwweDBjODEzZmZmCisJLmxvbmcJMHg4MDAwNmUxMiwweGYyMDA5MDAwLDB4ZjIzYzQ0MjIsMHgzZjgwMDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgwYjEyMjIyZSwweGZmODQwYzgxLDB4MDAwMDAwMDAKKwkubG9uZwkweDZkMDY2MGZmLDB4MDAwMDBhYzgsMHg2MGZmMDAwMCwweDBhMWFmMjAwCisJLmxvbmcJMHg5MDAwZjIzYywweDQ0MDAzZjgwLDB4MDAwMDIyMTAsMHgwMDgxMDA4MAorCS5sb25nCTB4MDAwMWYyMDEsMHg0NDIyNjBmZiwweDAwMDAwYWRjLDB4ZjIxMGQwODAKKwkubG9uZwkweDIyMTAzMjI4LDB4MDAwNGYyMmUsMHg2ODAwZmY4NCwweDAyODE3ZmZmCisJLmxvbmcJMHhmZmZmMGM4MSwweDNmYjk4MDAwLDB4NmMwNDYwMDAsMHhmZjkwMGM4MQorCS5sb25nCTB4NDAwYjliMDcsMHg2ZjA0NjAwMCwweGZmODRmMjAwLDB4MDA4MGYyM2EKKwkubG9uZwkweDU0YTNmYTYyLDB4ZjIyZTYwODAsMHhmZjU0MmYwMiwweDQzZmFmYWM2CisJLmxvbmcJMHhmMjJlNDA4MCwweGZmNTQyMjJlLDB4ZmY1NDI0MDEsMHgwMjgxMDAwMAorCS5sb25nCTB4MDAzZmU5ODEsMHhkM2MxZWM4MiwweDIyMDJlMjgxLDB4OTQ4MTA2ODIKKwkubG9uZwkweDAwMDAzZmZmLDB4ZjIyN2UwMGMsMHhmMjAwMDUwMCwweGYyM2E1NGEzCisJLmxvbmcJMHhmYTJjMmQ1OSwweGZmODRmMjNhLDB4NDkyM2ZhMmEsMHgyZDU5ZmY4OAorCS5sb25nCTB4MmQ1OWZmOGMsMHhmMjAwMDQyOCwweDNkNTlmZjkwLDB4ZjIwMDA4MjgKKwkubG9uZwkweDNkNTlmZjk0LDB4NDI2ZWZmOTYsMHg0MmFlZmY5OCwweGYyM2E0ODIzCisJLmxvbmcJMHhmYTE0ZDM2ZSwweGZmODRkMzZlLDB4ZmY5MGYyMDAsMHgwMDgwZjIwMAorCS5sb25nCTB4MDRhM2YyM2EsMHg1NTAwZmExZSwweGYyM2E1NTgwLDB4ZmEyMGYyMDAKKwkubG9uZwkweDA1MjNmMjAwLDB4MDVhM2YyM2EsMHg1NTIyZmExYSwweGYyM2E1NWEyCisJLmxvbmcJMHhmYTFjZjIwMCwweDA1MjNmMjAwLDB4MDVhM2YyM2EsMHg1NTIyZmExNgorCS5sb25nCTB4ZjIwMDAxYTMsMHhmMjAwMDUyMywweGYyMDAwYzIyLDB4ZjIwMDA4MjIKKwkubG9uZwkweGYyMWZkMDMwLDB4ZjIyZTQ4MjMsMHhmZjg0ZjIyZSwweDQ4MjJmZjkwCisJLmxvbmcJMHhmMjJlNDgyMiwweGZmODRmMjAwLDB4OTAwMDNkNDIsMHhmZjg0MjQxZgorCS5sb25nCTB4MmQ3YzgwMDAsMHgwMDAwZmY4OCwweDQyYWVmZjhjLDB4MTIzYzAwMDAKKwkubG9uZwkweGYyMmU0ODIzLDB4ZmY4NDYwZmYsMHgwMDAwMDk5NiwweGYyMDA5MDAwCisJLmxvbmcJMHhmMjNjNDQwMCwweDNmODAwMDAwLDB4MjIxMDAwODEsMHgwMDgwMDAwMQorCS5sb25nCTB4ZjIwMTQ0MjIsMHg2MGZmMDAwMCwweDA5OGUyZjAxLDB4ZTgwODIyMDAKKwkubG9uZwkweDAyNDEwMDAzLDB4MDI0MDAwMGMsMHg0ODQwMzAwMSwweDIyMWY0YTAxCisJLmxvbmcJMHg2NzFlMGMwMSwweDAwMGE2ZjEyLDB4MGMwMTAwMGUsMHg2ZjNjMGMwMQorCS5sb25nCTB4MDAyZjZmMDYsMHgwYzAxMDAzZiwweDZmNjI2MGZmLDB4MDAwMDBiYWEKKwkubG9uZwkweDRhMDA2NjBjLDB4NDFmYjAxNzAsMHgwMDAwMDBkNiwweDYwMDAwMDg2CisJLmxvbmcJMHgwYzAwMDAwMywweDY3MGE0MWZiLDB4MDE3MDAwMDAsMHgwMGQwNjA3NAorCS5sb25nCTB4NDFmYjAxNzAsMHgwMDAwMDBkMiwweDYwNmEwNDAxLDB4MDAwYjRhMDAKKwkubG9uZwkweDY2MTA0MWZiLDB4MDE3MDAwMDAsMHgwMGNjMGMwMSwweDAwMDI2ZjU0CisJLmxvbmcJMHg2MDVhMGMwMCwweDAwMDM2NzBhLDB4NDFmYjAxNzAsMHgwMDAwMDBmMgorCS5sb25nCTB4NjBlODQxZmIsMHgwMTcwMDAwMCwweDAxMjQ2MGRlLDB4MDQwMTAwMzAKKwkubG9uZwkweDRhMDA2NjE2LDB4NDFmYjAxNzAsMHgwMDAwMDE0ZSwweDBjMDEwMDAxCisJLmxvbmcJMHg2ZjIyMGMwMSwweDAwMDc2ZjI0LDB4NjAxYTBjMDAsMHgwMDAzNjcwYQorCS5sb25nCTB4NDFmYjAxNzAsMHgwMDAwMDFmMiwweDYwZTI0MWZiLDB4MDE3MDAwMDAKKwkubG9uZwkweDAyYTg2MGQ4LDB4MDBhZTAwMDAsMHgwMjA4ZmY2NCwweGMyZmMwMDBjCisJLmxvbmcJMHg0ODQwNGEwMCwweDY2MDhmMjMwLDB4ZDA4MDEwMDAsMHg0ZTc1NDg0MAorCS5sb25nCTB4M2Q3MDEwMDAsMHhmZjkwMmQ3MCwweDEwMDRmZjk0LDB4MmQ3MDEwMDgKKwkubG9uZwkweGZmOTgyMjAwLDB4NDI4MDQxZWUsMHhmZjkwNDI2OCwweDAwMDI2MWZmCisJLmxvbmcJMHgwMDAwNjJjNiwweGYyMTBkMDgwLDB4NGU3NTUxZmMsMHg0MDAwMDAwMAorCS5sb25nCTB4YzkwZmRhYTIsMHgyMTY4YzIzNSwweDQwMDAwMDAwLDB4YzkwZmRhYTIKKwkubG9uZwkweDIxNjhjMjM0LDB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1CisJLmxvbmcJMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTgsMHg0MDAwMDAwMAorCS5sb25nCTB4YWRmODU0NTgsMHhhMmJiNGE5YSwweDNmZmYwMDAwLDB4YjhhYTNiMjkKKwkubG9uZwkweDVjMTdmMGJjLDB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1CisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZmZkMDAwMAorCS5sb25nCTB4OWEyMDlhODQsMHhmYmNmZjc5OCwweDQwMDAwMDAwLDB4YWRmODU0NTgKKwkubG9uZwkweGEyYmI0YTlhLDB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJiCisJLmxvbmcJMHgzZmZkMDAwMCwweGRlNWJkOGE5LDB4MzcyODcxOTUsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4OWEyMDlhODQKKwkubG9uZwkweGZiY2ZmNzk5LDB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTliCisJLmxvbmcJMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmMsMHgzZmZkMDAwMAorCS5sb25nCTB4ZGU1YmQ4YTksMHgzNzI4NzE5NSwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCisJLmxvbmcJMHg0MDAwMDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTcsMHgzZmZmMDAwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDQwMDIwMDAwLDB4YTAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4NDAwNTAwMDAsMHhjODAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg0MDBjMDAwMCwweDljNDAwMDAwLDB4MDAwMDAwMDAsMHg0MDE5MDAwMAorCS5sb25nCTB4YmViYzIwMDAsMHgwMDAwMDAwMCwweDQwMzQwMDAwLDB4OGUxYmM5YmYKKwkubG9uZwkweDA0MDAwMDAwLDB4NDA2OTAwMDAsMHg5ZGM1YWRhOCwweDJiNzBiNTllCisJLmxvbmcJMHg0MGQzMDAwMCwweGMyNzgxZjQ5LDB4ZmZjZmE2ZDUsMHg0MWE4MDAwMAorCS5sb25nCTB4OTNiYTQ3YzksMHg4MGU5OGNlMCwweDQzNTEwMDAwLDB4YWE3ZWViZmIKKwkubG9uZwkweDlkZjlkZThlLDB4NDZhMzAwMDAsMHhlMzE5YTBhZSwweGE2MGU5MWM3CisJLmxvbmcJMHg0ZDQ4MDAwMCwweGM5NzY3NTg2LDB4ODE3NTBjMTcsMHg1YTkyMDAwMAorCS5sb25nCTB4OWU4YjNiNWQsMHhjNTNkNWRlNSwweDc1MjUwMDAwLDB4YzQ2MDUyMDIKKwkubG9uZwkweDhhMjA5NzliLDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFiCisJLmxvbmcJMHg0MDAwMDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTYsMHgzZmZmMDAwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDQwMDIwMDAwLDB4YTAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4NDAwNTAwMDAsMHhjODAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg0MDBjMDAwMCwweDljNDAwMDAwLDB4MDAwMDAwMDAsMHg0MDE5MDAwMAorCS5sb25nCTB4YmViYzIwMDAsMHgwMDAwMDAwMCwweDQwMzQwMDAwLDB4OGUxYmM5YmYKKwkubG9uZwkweDA0MDAwMDAwLDB4NDA2OTAwMDAsMHg5ZGM1YWRhOCwweDJiNzBiNTlkCisJLmxvbmcJMHg0MGQzMDAwMCwweGMyNzgxZjQ5LDB4ZmZjZmE2ZDUsMHg0MWE4MDAwMAorCS5sb25nCTB4OTNiYTQ3YzksMHg4MGU5OGNkZiwweDQzNTEwMDAwLDB4YWE3ZWViZmIKKwkubG9uZwkweDlkZjlkZThkLDB4NDZhMzAwMDAsMHhlMzE5YTBhZSwweGE2MGU5MWM2CisJLmxvbmcJMHg0ZDQ4MDAwMCwweGM5NzY3NTg2LDB4ODE3NTBjMTcsMHg1YTkyMDAwMAorCS5sb25nCTB4OWU4YjNiNWQsMHhjNTNkNWRlNCwweDc1MjUwMDAwLDB4YzQ2MDUyMDIKKwkubG9uZwkweDhhMjA5NzlhLDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCisJLmxvbmcJMHg0MDAwMDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTcsMHgzZmZmMDAwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDQwMDIwMDAwLDB4YTAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4NDAwNTAwMDAsMHhjODAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg0MDBjMDAwMCwweDljNDAwMDAwLDB4MDAwMDAwMDAsMHg0MDE5MDAwMAorCS5sb25nCTB4YmViYzIwMDAsMHgwMDAwMDAwMCwweDQwMzQwMDAwLDB4OGUxYmM5YmYKKwkubG9uZwkweDA0MDAwMDAwLDB4NDA2OTAwMDAsMHg5ZGM1YWRhOCwweDJiNzBiNTllCisJLmxvbmcJMHg0MGQzMDAwMCwweGMyNzgxZjQ5LDB4ZmZjZmE2ZDYsMHg0MWE4MDAwMAorCS5sb25nCTB4OTNiYTQ3YzksMHg4MGU5OGNlMCwweDQzNTEwMDAwLDB4YWE3ZWViZmIKKwkubG9uZwkweDlkZjlkZThlLDB4NDZhMzAwMDAsMHhlMzE5YTBhZSwweGE2MGU5MWM3CisJLmxvbmcJMHg0ZDQ4MDAwMCwweGM5NzY3NTg2LDB4ODE3NTBjMTgsMHg1YTkyMDAwMAorCS5sb25nCTB4OWU4YjNiNWQsMHhjNTNkNWRlNSwweDc1MjUwMDAwLDB4YzQ2MDUyMDIKKwkubG9uZwkweDhhMjA5NzliLDB4MmYwMDMyMjksMHgwMDAwNWJlZSwweGZmNTQwMjgxCisJLmxvbmcJMHgwMDAwN2ZmZiwweDMwMjgwMDAwLDB4MDI0MDdmZmYsMHgwYzQwM2ZmZgorCS5sb25nCTB4NmQwMDAwYzAsMHgwYzQwNDAwYywweDZlMDAwMGE0LDB4ZjIyODQ4MDMKKwkubG9uZwkweDAwMDBmMjAwLDB4NjAwMGYyM2MsMHg4ODAwMDAwMCwweDAwMDA0YTI5CisJLmxvbmcJMHgwMDA0NmI1ZSwweDJmMDAzZDY5LDB4MDAwMGZmODQsMHgyZDY5MDAwNAorCS5sb25nCTB4ZmY4ODJkNjksMHgwMDA4ZmY4YywweDQxZWVmZjg0LDB4NjFmZjAwMDAKKwkubG9uZwkweDYwYmE0NDgwLDB4ZDA5ZmYyMmUsMHhkMDgwZmY4NCwweDBjNDBjMDAxCisJLmxvbmcJMHg2YzM2ZjIxZiwweDkwMDAyMjNjLDB4ODAwMDAwMDAsMHgwNDgwZmZmZgorCS5sb25nCTB4YzAwMTQ0ODAsMHgwYzAwMDAyMCwweDZjMGFlMGE5LDB4NDJhNzJmMDEKKwkubG9uZwkweDQyYTc2MDI4LDB4MDQwMDAwMjAsMHhlMGE5MmYwMSwweDQyYTc0MmE3CisJLmxvbmcJMHg2MDFhZjIyOSwweGQwODAwMDAwLDB4ZjIxZjkwMDAsMHgwNjQwM2ZmZgorCS5sb25nCTB4NDg0MDQyYTcsMHgyZjNjODAwMCwweDAwMDAyZjAwLDB4ZjIwMGIwMDAKKwkubG9uZwkweDEyM2MwMDAwLDB4ZjIxZjQ4MjMsMHg2MGZmMDAwMCwweDA0Y2UyMDFmCisJLmxvbmcJMHhjMTQ5NGEyOSwweDAwMDA2YmZmLDB4MDAwMDAzOGMsMHg2MGZmMDAwMAorCS5sb25nCTB4MDNjNDRhMjksMHgwMDA0NmExNiwweDIwMWZmMjAwLDB4OTAwMDEyM2MKKwkubG9uZwkweDAwMDNmMjI5LDB4NDgwMDAwMDAsMHg2MGZmMDAwMCwweDA0OWUyMDFmCisJLmxvbmcJMHgyMDQ5NjBmZiwweDAwMDAwMmUyLDB4MDAwMTAwMDAsMHg4MDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDQyMmVmZjY1LDB4MmYwMDQyMmUKKwkubG9uZwkweGZmNWM2MDBjLDB4NDIyZWZmNjUsMHgyZjAwMWQ3YywweDAwMDFmZjVjCisJLmxvbmcJMHg0OGU3M2YwMCwweDM2MjgwMDAwLDB4M2Q0M2ZmNTgsMHgwMjgzMDAwMAorCS5sb25nCTB4N2ZmZjI4MjgsMHgwMDA0MmEyOCwweDAwMDg0YTgzLDB4NjYzYzI2M2MKKwkubG9uZwkweDAwMDAzZmZlLDB4NGE4NDY2MTYsMHgyODA1NDI4NSwweDA0ODMwMDAwCisJLmxvbmcJMHgwMDIwNDI4NiwweGVkYzQ2MDAwLDB4ZWRhYzk2ODYsMHg2MDIyNDI4NgorCS5sb25nCTB4ZWRjNDYwMDAsMHg5Njg2ZWRhYywweDJlMDVlZGFkLDB4NDQ4NjA2ODYKKwkubG9uZwkweDAwMDAwMDIwLDB4ZWNhZjg4ODcsMHg2MDA2MDY4MywweDAwMDAzZmZlCisJLmxvbmcJMHgzMDI5MDAwMCwweDNkNDBmZjVhLDB4MzIyZWZmNTgsMHhiMTgxMDI4MQorCS5sb25nCTB4MDAwMDgwMDAsMHgzZDQxZmY1ZSwweDAyODAwMDAwLDB4N2ZmZjIyMjkKKwkubG9uZwkweDAwMDQyNDI5LDB4MDAwODRhODAsMHg2NjNjMjAzYywweDAwMDAzZmZlCisJLmxvbmcJMHg0YTgxNjYxNiwweDIyMDI0MjgyLDB4MDQ4MDAwMDAsMHgwMDIwNDI4NgorCS5sb25nCTB4ZWRjMTYwMDAsMHhlZGE5OTA4NiwweDYwMjI0Mjg2LDB4ZWRjMTYwMDAKKwkubG9uZwkweDkwODZlZGE5LDB4MmUwMmVkYWEsMHg0NDg2MDY4NiwweDAwMDAwMDIwCisJLmxvbmcJMHhlY2FmODI4NywweDYwMDYwNjgwLDB4MDAwMDNmZmUsMHgyZDQzZmY1NAorCS5sb25nCTB4MmYwMDkwODMsMHg0Mjg2NDI4MywweDIyN2MwMDAwLDB4MDAwMDRhODAKKwkubG9uZwkweDZjMDYyMDFmLDB4NjAwMDAwNmEsMHg1ODhmNGE4NiwweDZlMGViMjg0CisJLmxvbmcJMHg2NjA4YjQ4NSwweDY2MDQ2MDAwLDB4MDEzNjY1MDgsMHg5NDg1OTM4NAorCS5sb25nCTB4NDI4NjUyODMsMHg0YTgwNjcwZSwweGQ2ODNkNDgyLDB4ZTM5MTU1YzYKKwkubG9uZwkweDUyODk1MzgwLDB4NjBkNDIwMmUsMHhmZjU0NGE4MSwweDY2MTYyMjAyCisJLmxvbmcJMHg0MjgyMDQ4MCwweDAwMDAwMDIwLDB4NDI4NmVkYzEsMHg2MDAwZWRhOQorCS5sb25nCTB4OTA4NjYwMWMsMHg0Mjg2ZWRjMSwweDYwMDA2YjE0LDB4OTA4NmVkYTkKKwkubG9uZwkweDJlMDJlZGFhLDB4NDQ4NjA2ODYsMHgwMDAwMDAyMCwweGVjYWY4Mjg3CisJLmxvbmcJMHgwYzgwMDAwMCwweDQxZmU2YzJhLDB4M2Q0MGZmOTAsMHgyZDQxZmY5NAorCS5sb25nCTB4MmQ0MmZmOTgsMHgyYzJlZmY1NCwweDNkNDZmZjg0LDB4MmQ0NGZmODgKKwkubG9uZwkweDJkNDVmZjhjLDB4ZjIyZTQ4MDAsMHhmZjkwMWQ3YywweDAwMDFmZjVkCisJLmxvbmcJMHg2MDM2MmQ0MSwweGZmOTQyZDQyLDB4ZmY5ODA0ODAsMHgwMDAwM2ZmZQorCS5sb25nCTB4M2Q0MGZmOTAsMHgyYzJlZmY1NCwweDA0ODYwMDAwLDB4M2ZmZTJkNDYKKwkubG9uZwkweGZmNTRmMjJlLDB4NDgwMGZmOTAsMHgzZDQ2ZmY4NCwweDJkNDRmZjg4CisJLmxvbmcJMHgyZDQ1ZmY4YywweDQyMmVmZjVkLDB4NGEyZWZmNWMsMHg2NzIyMmMyZQorCS5sb25nCTB4ZmY1NDUzODYsMHhiMDg2NmQxOCwweDZlMGViMjg0LDB4NjYwOGI0ODUKKwkubG9uZwkweDY2MDQ2MDAwLDB4MDA3YTY1MDgsMHhmMjJlNDgyOCwweGZmODQ1MjgzCisJLmxvbmcJMHgzYzJlZmY1YSwweDZjMDRmMjAwLDB4MDAxYTQyODYsMHgzYzJlZmY1ZQorCS5sb25nCTB4N2UwOGVlYWUsMHgwMjgzMDAwMCwweDAwN2Y4Njg2LDB4MWQ0M2ZmNjUKKwkubG9uZwkweDRjZGYwMGZjLDB4MjAxZmYyMDAsMHg5MDAwNGEyZSwweGZmNWQ2NzEwCisJLmxvbmcJMHgxMjNjMDAwMCwweGYyM2E0ODIzLDB4ZmRjMDYwZmYsMHgwMDAwMDI0YworCS5sb25nCTB4MTIzYzAwMDMsMHhmMjAwMDAwMCwweDYwZmYwMDAwLDB4MDIzZTUyODMKKwkubG9uZwkweDBjODAwMDAwLDB4MDAwODZjMDQsMHhlMWFiNjAwMiwweDQyODNmMjNjCisJLmxvbmcJMHg0NDAwMDAwMCwweDAwMDA0MjJlLDB4ZmY1ZDYwMDAsMHhmZjk0MmMwMworCS5sb25nCTB4MDI4NjAwMDAsMHgwMDAxNGE4NiwweDY3MDBmZjg2LDB4NTI4MzNjMmUKKwkubG9uZwkweGZmNWEwYTg2LDB4MDAwMDgwMDAsMHgzZDQ2ZmY1YSwweDYwMDBmZjcyCisJLmxvbmcJMHg3ZmZmMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHg0YTI4MDAwMAorCS5sb25nCTB4NmIxMmYyM2MsMHg0NDAwN2Y4MCwweDAwMDAwMGFlLDB4MDIwMDA0MTAKKwkubG9uZwkweGZmNjQ0ZTc1LDB4ZjIzYzQ0MDAsMHhmZjgwMDAwMCwweDAwYWUwYTAwCisJLmxvbmcJMHgwNDEwZmY2NCwweDRlNzUwMGFlLDB4MDEwMDIwODAsMHhmZjY0ZjIzYQorCS5sb25nCTB4ZDA4MGZmYmUsMHg0ZTc1MDBhZSwweDAwMDAwODAwLDB4ZmY2NDYwMDgKKwkubG9uZwkweDAwYWUwMDAwLDB4MGEyOGZmNjQsMHgyMjQ4MjIwMCwweDAyMDEwMGMwCisJLmxvbmcJMHg2NjBlNGEyOCwweDAwMDA2YTE4LDB4MDhlZTAwMDMsMHhmZjY0NjAxMAorCS5sb25nCTB4MmYwOTRhMjgsMHgwMDAwNWJjMSwweDYxZmYwMDAwLDB4MDE5NjIyNWYKKwkubG9uZwkweGYyMTBkMDgwLDB4MTAyZWZmNjIsMHgwMjAwMDAwYSwweDY2MDI0ZTc1CisJLmxvbmcJMHgzZDY5MDAwMCwweGZmODQyZDY5LDB4MDAwNGZmODgsMHgyZDY5MDAwOAorCS5sb25nCTB4ZmY4YzQxZWUsMHhmZjg0NjFmZiwweDAwMDA1Y2QwLDB4MDY4MDAwMDAKKwkubG9uZwkweDYwMDAwMjZlLDB4ODAwMGZmODQsMHg4MTZlZmY4NCwweGYyMmVkMDQwCisJLmxvbmcJMHhmZjg0NGU3NSwweDAwYWUwMDAwLDB4MGEyOGZmNjQsMHg0YTEwNWJjMQorCS5sb25nCTB4NjFmZjAwMDAsMHgwMTNlZjIxMCwweGQwODBmMjNjLDB4NDQ4MDAwMDAKKwkubG9uZwkweDAwMDA0ZTc1LDB4MDBhZTAwMDAsMHgwYTI4ZmY2NCwweDUxYzE2MWZmCisJLmxvbmcJMHgwMDAwMDEyMCwweGYyMTBkMDgwLDB4ZjIzYzQ0ODAsMHgwMDAwMDAwMAorCS5sb25nCTB4NGU3NTAwYWUsMHgwMDAwMTA0OCwweGZmNjQxMjAwLDB4MDIwMTAwYzAKKwkubG9uZwkweDY3NWM0YTI4LDB4MDAwNDZiMjQsMHgzZDY4MDAwMCwweGZmODQyZDY4CisJLmxvbmcJMHgwMDA0ZmY4OCwweDJkNjgwMDA4LDB4ZmY4YzQxZWUsMHhmZjg0NDhlNworCS5sb25nCTB4YzA4MDYxZmYsMHgwMDAwNWM0NCwweDRjZGYwMTAzLDB4MGMwMTAwNDAKKwkubG9uZwkweDY2MGU0YWE4LDB4MDAwODY2MTQsMHg0YTI4MDAwNywweDY2MGU2MDFlCisJLmxvbmcJMHgyMjI4MDAwOCwweDAyODEwMDAwLDB4MDdmZjY3MTIsMHgwMGFlMDAwMAorCS5sb25nCTB4MDIwMGZmNjQsMHg2MDA4MDBhZSwweDAwMDAxMjQ4LDB4ZmY2NDRhMjgKKwkubG9uZwkweDAwMDA1YmMxLDB4NjFmZjAwMDAsMHg1ZjI2MWQ0MCwweGZmNjRmMjEwCisJLmxvbmcJMHhkMDgwZjIzYywweDQ0ODAwMDAwLDB4MDAwMDRlNzUsMHgwMGFlMDAwMAorCS5sb25nCTB4MTI0OGZmNjQsMHg1MWMxNjFmZiwweDAwMDA1ZjA0LDB4MWQ0MGZmNjQKKwkubG9uZwkweGYyMTBkMDgwLDB4ZjIzYzQ0ODAsMHgwMDAwMDAwMCwweDRlNzVmMzI3CisJLmxvbmcJMHg0YTJmMDAwMiwweDZiMmVkZmZjLDB4MDAwMDAwMGMsMHhmMjk0MDAwZQorCS5sb25nCTB4ZjI4MTAwMTQsMHgwMDZlMDIwOCwweGZmNjY0ZTc1LDB4MDBhZTA4MDAKKwkubG9uZwkweDAyMDhmZjY0LDB4NGU3NTFkN2MsMHgwMDA0ZmY2NCwweDAwNmUwMjA4CisJLmxvbmcJMHhmZjY2NGU3NSwweDAwNmUwMjA4LDB4ZmY2NjYxZmYsMHgwMDAwMGJhZQorCS5sb25nCTB4ZGZmYzAwMDAsMHgwMDBjNGU3NSwweGYzMjc0YTJmLDB4MDAwMjZiZWEKKwkubG9uZwkweGRmZmMwMDAwLDB4MDAwY2YyMDAsMHhhODAwODFhZSwweGZmNjQ0ZTc1CisJLmxvbmcJMHgwMGFlMDAwMCwweDBhMjhmZjY0LDB4MDI0MTAwMTAsMHhlODA4MDIwMAorCS5sb25nCTB4MDAwZjgwMDEsMHgyMjAwZTMwOSwweDFkN2IwMDBhLDB4ZmY2NDQxZmIKKwkubG9uZwkweDE2MjA0ZTc1LDB4MDQwNDA0MDAsMHgwNDA0MDQwMCwweDA0MDQwNDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDBjMGMwODBjLDB4MGMwYzA4MGMsMHgwYzBjMDgwYworCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNmODEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzZjgxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNmODEwMDAwLDB4MDAwMDAxMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzYzAxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNjMDEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzYzAxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDA4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhiZjgxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmY4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGJmODEwMDAwLDB4MDAwMDAxMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhiZjgxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmMwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGJjMDEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhiYzAxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDA4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmMwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDRhMjgwMDAwLDB4NmIxMGYyM2MsMHg0NDAwMDAwMCwweDAwMDAxZDdjCisJLmxvbmcJMHgwMDA0ZmY2NCwweDRlNzVmMjNjLDB4NDQwMDgwMDAsMHgwMDAwMWQ3YworCS5sb25nCTB4MDAwY2ZmNjQsMHg0ZTc1NGEyOSwweDAwMDA2YmVhLDB4NjBkODRhMjgKKwkubG9uZwkweDAwMDA2YjEwLDB4ZjIzYzQ0MDAsMHg3ZjgwMDAwMCwweDFkN2MwMDAyCisJLmxvbmcJMHhmZjY0NGU3NSwweGYyM2M0NDAwLDB4ZmY4MDAwMDAsMHgxZDdjMDAwYQorCS5sb25nCTB4ZmY2NDRlNzUsMHg0YTI5MDAwMCwweDZiZWE2MGQ4LDB4NGEyODAwMDAKKwkubG9uZwkweDZiYTQ2MGQwLDB4NGEyODAwMDAsMHg2YjAwZmJiYywweDYwYzY0YTI4CisJLmxvbmcJMHgwMDAwNmIxNiwweDYwYmU0YTI4LDB4MDAwMDZiMGUsMHhmMjNjNDQwMAorCS5sb25nCTB4M2Y4MDAwMDAsMHg0MjJlZmY2NCwweDRlNzVmMjNjLDB4NDQwMGJmODAKKwkubG9uZwkweDAwMDAxZDdjLDB4MDAwOGZmNjQsMHg0ZTc1M2ZmZiwweDAwMDBjOTBmCisJLmxvbmcJMHhkYWEyMjE2OCwweGMyMzViZmZmLDB4MDAwMGM5MGYsMHhkYWEyMjE2OAorCS5sb25nCTB4YzIzNTRhMjgsMHgwMDAwNmIwZSwweGYyMDA5MDAwLDB4ZjIzYTQ4MDAKKwkubG9uZwkweGZmZGE2MDAwLDB4ZmNmMGYyMDAsMHg5MDAwZjIzYSwweDQ4MDBmZmQ4CisJLmxvbmcJMHg2MDAwZmNlYSwweGYyM2M0NDgwLDB4M2Y4MDAwMDAsMHg0YTI4MDAwMAorCS5sb25nCTB4NmExMGYyM2MsMHg0NDAwODAwMCwweDAwMDAxZDdjLDB4MDAwY2ZmNjQKKwkubG9uZwkweDYwNDBmMjNjLDB4NDQwMDAwMDAsMHgwMDAwMWQ3YywweDAwMDRmZjY0CisJLmxvbmcJMHg2MDMwZjIzYSwweDQ4ODBmYWVhLDB4NjFmZjAwMDAsMHgwMDI4NjAwMAorCS5sb25nCTB4ZmIxNmYyMjgsMHg0ODgwMDAwMCwweDYxZmYwMDAwLDB4MDAxODYwMDAKKwkubG9uZwkweDAzMGVmMjI4LDB4NDg4MDAwMDAsMHg2MWZmMDAwMCwweDAwMDg2MDAwCisJLmxvbmcJMHgwMmVlMTAyZSwweGZmNDMwMjQwLDB4MDAwNzMwM2IsMHgwMjA2NGVmYgorCS5sb25nCTB4MDAwMjAwMTAsMHgwMDE4MDAyMCwweDAwMjYwMDJjLDB4MDAzMjAwMzgKKwkubG9uZwkweDAwM2VmMjJlLDB4ZjA0MGZmZGMsMHg0ZTc1ZjIyZSwweGYwNDBmZmU4CisJLmxvbmcJMHg0ZTc1ZjIwMCwweDA1MDA0ZTc1LDB4ZjIwMDA1ODAsMHg0ZTc1ZjIwMAorCS5sb25nCTB4MDYwMDRlNzUsMHhmMjAwMDY4MCwweDRlNzVmMjAwLDB4MDcwMDRlNzUKKwkubG9uZwkweGYyMDAwNzgwLDB4NGU3NTEyMmUsMHhmZjRmNjdmZiwweGZmZmZmN2RjCisJLmxvbmcJMHgwYzAxMDAwMSwweDY3MDAwMDk2LDB4MGMwMTAwMDIsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZmE4ODBjMDEsMHgwMDA0NjdmZiwweGZmZmZmN2MwLDB4MGMwMTAwMDUKKwkubG9uZwkweDY3ZmYwMDAwLDB4MDI0MDYwZmYsMHgwMDAwMDI0YSwweDEyMmVmZjRmCisJLmxvbmcJMHg2N2ZmZmZmZiwweGZhNjQwYzAxLDB4MDAwMTY3ZmYsMHhmZmZmZmE1YQorCS5sb25nCTB4MGMwMTAwMDIsMHg2N2ZmZmZmZiwweGZhNTAwYzAxLDB4MDAwNDY3ZmYKKwkubG9uZwkweGZmZmZmYTQ2LDB4MGMwMTAwMDMsMHg2N2ZmMDAwMCwweDAyMTg2MGZmCisJLmxvbmcJMHgwMDAwMDIwMiwweDEyMmVmZjRmLDB4NjdmZjAwMDAsMHgwMDRlMGMwMQorCS5sb25nCTB4MDAwMTY3ZmYsMHgwMDAwMDAyOCwweDBjMDEwMDAyLDB4NjdmZmZmZmYKKwkubG9uZwkweGZhMTgwYzAxLDB4MDAwNDY3ZmYsMHgwMDAwMDAzMCwweDBjMDEwMDAzCisJLmxvbmcJMHg2N2ZmMDAwMCwweDAxZTA2MGZmLDB4MDAwMDAxY2EsMHgxMjI4MDAwMAorCS5sb25nCTB4MTAyOTAwMDAsMHhiMTAxMDIwMSwweDAwODAxZDQxLDB4ZmY2NTRhMDAKKwkubG9uZwkweDZhMDBmZGM0LDB4NjAwMGZkZDAsMHg0MjJlZmY2NSwweDJmMDAxMjI4CisJLmxvbmcJMHgwMDAwMTAyOSwweDAwMDBiMTAxLDB4MDIwMTAwODAsMHgxZDQxZmY2NQorCS5sb25nCTB4MGMyZTAwMDQsMHhmZjRmNjYwYywweDQxZTkwMDAwLDB4MjAxZjYwZmYKKwkubG9uZwkweGZmZmZmOWM2LDB4ZjIxZjkwMDAsMHhmMjI5NDgwMCwweDAwMDA0YTI5CisJLmxvbmcJMHgwMDAwNmIwMiwweDRlNzUxZDdjLDB4MDAwOGZmNjQsMHg0ZTc1MTIyZQorCS5sb25nCTB4ZmY0ZjY3ZmYsMHhmZmZmZjZlMCwweDBjMDEwMDAxLDB4NjcwMGZmOGUKKwkubG9uZwkweDBjMDEwMDAyLDB4NjdmZmZmZmYsMHhmOTgwMGMwMSwweDAwMDQ2N2ZmCisJLmxvbmcJMHhmZmZmZjZjNCwweDBjMDEwMDAzLDB4NjdmZjAwMDAsMHgwMTQ4NjBmZgorCS5sb25nCTB4MDAwMDAxMzIsMHgxMjJlZmY0ZiwweDY3ZmZmZmZmLDB4Zjk1YzBjMDEKKwkubG9uZwkweDAwMDE2N2ZmLDB4ZmZmZmY5NTIsMHgwYzAxMDAwMiwweDY3ZmZmZmZmCisJLmxvbmcJMHhmOTQ4MGMwMSwweDAwMDQ2N2ZmLDB4ZmZmZmY5M2UsMHgwYzAxMDAwMworCS5sb25nCTB4NjdmZjAwMDAsMHgwMTEwNjBmZiwweDAwMDAwMGZhLDB4MTIyZWZmNGYKKwkubG9uZwkweDY3MDBmZjQ2LDB4MGMwMTAwMDEsMHg2NzAwZmYyMiwweDBjMDEwMDAyCisJLmxvbmcJMHg2N2ZmZmZmZiwweGY5MTQwYzAxLDB4MDAwNDY3ZmYsMHhmZmZmZmYyYworCS5sb25nCTB4MGMwMTAwMDMsMHg2N2ZmMDAwMCwweDAwZGM2MGZmLDB4MDAwMDAwYzYKKwkubG9uZwkweDEyMmVmZjRmLDB4NjdmZmZmZmYsMHhmNTFlMGMwMSwweDAwMDE2N2ZmCisJLmxvbmcJMHhmZmZmZmNlNiwweDBjMDEwMDAyLDB4NjdmZmZmZmYsMHhmZDBhMGMwMQorCS5sb25nCTB4MDAwNDY3ZmYsMHhmZmZmZjUwMCwweDBjMDEwMDAzLDB4NjdmZjAwMDAKKwkubG9uZwkweDAwYTQ2MGZmLDB4MDAwMDAwOGUsMHgxMjJlZmY0ZiwweDY3ZmZmZmZmCisJLmxvbmcJMHhmNGU2MGMwMSwweDAwMDE2N2ZmLDB4ZmZmZmZjYWUsMHgwYzAxMDAwMgorCS5sb25nCTB4NjdmZmZmZmYsMHhmY2QyMGMwMSwweDAwMDQ2N2ZmLDB4ZmZmZmY0YzgKKwkubG9uZwkweDBjMDEwMDAzLDB4NjdmZjAwMDAsMHgwMDZjNjBmZiwweDAwMDAwMDU2CisJLmxvbmcJMHgxMjJlZmY0ZiwweDY3ZmZmZmZmLDB4Zjg4MDBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4MDAwMDAwNTIsMHgwYzAxMDAwNSwweDY3ZmYwMDAwLDB4MDAzODYwZmYKKwkubG9uZwkweGZmZmZmODY2LDB4MTIyZWZmNGYsMHgwYzAxMDAwMywweDY3MzQwYzAxCisJLmxvbmcJMHgwMDA1NjcxZSwweDYwNTgxMjJlLDB4ZmY0ZjBjMDEsMHgwMDAzNjcwOAorCS5sb25nCTB4MGMwMTAwMDUsMHg2NzBjNjAzNiwweDAwYWUwMTAwLDB4NDA4MGZmNjQKKwkubG9uZwkweDYwMTBmMjI5LDB4NDgwMDAwMDAsMHhmMjAwYTgwMCwweDgxYWVmZjY0CisJLmxvbmcJMHg0ZTc1ZjIyOSwweDQ4MDAwMDAwLDB4NGEyOTAwMDAsMHg2YjA4MWQ3YworCS5sb25nCTB4MDAwMWZmNjQsMHg0ZTc1MWQ3YywweDAwMDlmZjY0LDB4NGU3NWYyMjgKKwkubG9uZwkweDQ4MDAwMDAwLDB4ZjIwMGE4MDAsMHg4MWFlZmY2NCwweDRlNzVmMjI4CisJLmxvbmcJMHg0ODAwMDAwMCwweDRhMjgwMDAwLDB4NmJkYzFkN2MsMHgwMDAxZmY2NAorCS5sb25nCTB4NGU3NTFkN2MsMHgwMDA5ZmY2NCwweDRlNzUxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZkOTM2LDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGZiYTYwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmYmNhLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZDlmNjBjMDEsMHgwMDAzNjdmZiwweGZmZmZmZmI2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZmYTAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmZTYyMCwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGZiNmUwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZmJjOAorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGU3NTYwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmZjdlLDB4NjBmZmZmZmYsMHhmZjY4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZDRkMiwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmYjM2MGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZmI5YSwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGQ3NmEwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmY0NiwweDYwZmZmZmZmCisJLmxvbmcJMHhmZjMwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmQ5NzIsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmYWZlMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmZiNmEKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhkYWJjMGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmYwZSwweDYwZmZmZmZmLDB4ZmVmODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmNhNmEsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZmFjNjBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmZiNmUsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhjYzhhMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZlZDYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmVjMDEyMmUsMHhmZjRlNjdmZiwweGZmZmZjYzc2LDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmE4ZTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmNmFhCisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4Y2QwNjBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZlOWUsMHg2MGZmZmZmZiwweGZlODgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZlNjYyLDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGZhNTYwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmNjcyLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZTZjNjBjMDEsMHgwMDAzNjdmZiwweGZmZmZmZTY2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZlNTAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmYjM3MiwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGZhMWUwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjYzYQorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGI1MzgwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmZTJlLDB4NjBmZmZmZmYsMHhmZTE4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmYmRmYywweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmOWU2MGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjYwMiwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGJmNDIwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmRmNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmZGUwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmQxN2EsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmYTJhMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmZhMDAKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhkMzA4MGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmRiZSwweDYwZmZmZmZmLDB4ZmRhODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmViNjQsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZjlmMjBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY5YzgsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhlYzIwMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZkODYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmQ3MDEyMmUsMHhmZjRlNjdmZiwweGZmZmZlYzI0LDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZjliYTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmOTkwCisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4ZWQzNjBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZkNGUsMHg2MGZmZmZmZiwweGZkMzgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZlMTc4LDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGY1MWEwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmOTYwLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZTMwYzBjMDEsMHgwMDAzNjdmZiwweGZmZmZmZDE2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZkMDAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmZTU4MiwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGY0ZTIwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjkyOAorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGU1OTQwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmY2RlLDB4NjBmZmZmZmYsMHhmY2M4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZTU5YSwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmNGFhMGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjhmMCwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGU1ZDYwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmNhNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmYzkwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmQ1MzAsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmOGRhMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmY4ODgKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhkNWI2MGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmM2ZSwweDYwZmZmZmZmLDB4ZmM1ODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmNhYzIsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZjhkZTBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY0NDIsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhjYjM0MGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZjMzYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmMyMDEyMmUsMHhmZjRlNjdmZiwweGZmZmZiMTRjLDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4Zjg2YTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmNDBhCisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4YjMwZTBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZiZmUsMHg2MGZmZmZmZiwweGZiZTgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZkNDBlLDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGY3YjYwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmM2QyLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZDQwYzBjMDEsMHgwMDAzNjdmZiwweGZmZmZmYmM2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZiYjAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmZDQwYSwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGY3N2UwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjM5YQorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGQ0MWEwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmYjhlLDB4NjBmZmZmZmYsMHhmYjc4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmYjI5MiwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmODFhMGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjgzZSwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGI1MGEwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZjgzYSwweDYwZmZmZmZmCisJLmxvbmcJMHhmODQ0MTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmY4OWUsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmOGNhMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmY4ZjgKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhmODgwMGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmFiNCwweDYwZmZmZmZmLDB4ZmFjMDEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmY5NmUsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4Zjk5YTBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY5YzgsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhmOTUwMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZhN2MsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmE4ODEyMmUsMHhmZjRlNjdmZiwweGZmZmZmOWQ4LDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmEwNjBjMDEsMHgwMDAyNjdmZiwweGZmZmZmYTM0CisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4ZjliYTBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZhNDQsMHg2MGZmZmZmZiwweGZhNTAwYzJmLDB4MDAwNzAwMDMKKwkubG9uZwkweDY3M2UxZDdjLDB4MDAwMGZmNGUsMHgxZDdjMDAwMCwweGZmNGZmMjJlCisJLmxvbmcJMHhmMDgwZmY3OCwweDQxZWYwMDA0LDB4NDNlZWZmNzgsMHgwYzAxMDAwMworCS5sb25nCTB4NjcxNjBjMDEsMHgwMDAyNjcwOCwweDYxZmYwMDAwLDB4MDIwMDRlNzUKKwkubG9uZwkweDYxZmYwMDAwLDB4MWI5ZTRlNzUsMHg2MWZmMDAwMCwweDA1ZTQ0ZTc1CisJLmxvbmcJMHgxZDdjMDAwNCwweGZmNGU2MGMwLDB4NGFmYzAwNmQsMHgwMDAwMDVkMgorCS5sb25nCTB4MDAwMDBmYzgsMHhmZmZmZmE2ZSwweDAwMDAxMDZjLDB4MDAwMDIzMTQKKwkubG9uZwkweDAwMDAwMDAwLDB4ZmZmZmZhYTYsMHgwMDAwMDAwMCwweGZmZmZmYWRlCisJLmxvbmcJMHhmZmZmZmIxNiwweGZmZmZmYjRlLDB4MDAwMDAwMDAsMHhmZmZmZmI4NgorCS5sb25nCTB4ZmZmZmZiYmUsMHhmZmZmZmJmNiwweGZmZmZmYzJlLDB4ZmZmZmZjNjYKKwkubG9uZwkweGZmZmZmYzllLDB4ZmZmZmZjZDYsMHgwMDAwMDAwMCwweGZmZmZmZDBlCisJLmxvbmcJMHhmZmZmZmQ0NiwweGZmZmZmZDdlLDB4MDAwMDAwMDAsMHgwMDAwMTExMgorCS5sb25nCTB4ZmZmZmZkYjYsMHgwMDAwMGNhOCwweDAwMDAwMDAwLDB4ZmZmZmZkZWUKKwkubG9uZwkweGZmZmZmZTI2LDB4ZmZmZmZlNWUsMHhmZmZmZmU5NiwweDAwMDAwODllCisJLmxvbmcJMHhmZmZmZmYwNiwweDAwMDAxYjg0LDB4MDAwMDAxZGUsMHgwMDAwMTg1NAorCS5sb25nCTB4ZmZmZmZmM2UsMHhmZmZmZmY3NiwweDAwMDAxNTEyLDB4MDAwMDFmNGMKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHhmZmZmZmVjZQorCS5sb25nCTB4ZmZmZmZlY2UsMHhmZmZmZmVjZSwweGZmZmZmZWNlLDB4ZmZmZmZlY2UKKwkubG9uZwkweGZmZmZmZWNlLDB4ZmZmZmZlY2UsMHhmZmZmZmVjZSwweDAwMDAxM2IwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwZjU2LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDA1YzAKKwkubG9uZwkweDAwMDAyMzAyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwNWNhCisJLmxvbmcJMHgwMDAwMjMwYywweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDExMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDBjOTYsMHgwMDAwMDAwMCwweDAwMDAxMTBhCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwY2EwLDB4MDAwMDAwMDAsMHgwMDAwMDg4YworCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMWI3MiwweDAwMDAwMWNjLDB4MDAwMDA4OTYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDFiN2MsMHgwMDAwMDFkNiwweDAwMDAxZjNhCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMWY0NAorCS5sb25nCTB4ZmZmZmMwMDEsMHhmZmZmZmY4MSwweGZmZmZmYzAxLDB4MDAwMDQwMDAKKwkubG9uZwkweDAwMDAwMDdmLDB4MDAwMDAzZmYsMHgwMjAwMDAzMCwweDAwMDAwMDQwCisJLmxvbmcJMHg2MDA4MDIwMCwweDAwMzAwMDAwLDB4MDA4MDJkNDAsMHhmZjVjNDI0MQorCS5sb25nCTB4MTIyZWZmNGYsMHhlNzA5ODIyZSwweGZmNGU2NjAwLDB4MDJlNDNkNjkKKwkubG9uZwkweDAwMDBmZjkwLDB4MmQ2OTAwMDQsMHhmZjk0MmQ2OSwweDAwMDhmZjk4CisJLmxvbmcJMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOAorCS5sb25nCTB4ZmY4YzYxZmYsMHgwMDAwMjRjZSwweDJmMDA2MWZmLDB4MDAwMDI1NzIKKwkubG9uZwkweGQxOTczMjJlLDB4ZmY1ZWVjMDksMHgyMDFmYjBiYiwweDE0ODQ2NzAwCisJLmxvbmcJMHgwMTFlNmQwMCwweDAwNjJiMGJiLDB4MTQ4NDY3MDAsMHgwMjFhNmUwMAorCS5sb25nCTB4MDE0YWYyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODIzZmY4NCwweGYyMDFhODAwCisJLmxvbmcJMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHhmMjJlZjA4MAorCS5sb25nCTB4ZmY4NDJmMDIsMHgzMjJlZmY4NCwweDI0MDEwMjgxLDB4MDAwMDdmZmYKKwkubG9uZwkweDAyNDI4MDAwLDB4OTI4MDgyNDIsMHgzZDQxZmY4NCwweDI0MWZmMjJlCisJLmxvbmcJMHhkMDgwZmY4NCwweDRlNzVmMjJlLDB4ZDA4MGZmOTAsMHhmMjJlOTAwMAorCS5sb25nCTB4ZmY1Y2YyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgyM2ZmODQKKwkubG9uZwkweGYyMDFhODAwLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0CisJLmxvbmcJMHgwMGFlMDAwMCwweDEwNDhmZjY0LDB4MTIyZWZmNjIsMHgwMjAxMDAxMworCS5sb25nCTB4NjYxYzA4MmUsMHgwMDAzZmY2NCwweDU2YzEyMDJlLDB4ZmY1YzYxZmYKKwkubG9uZwkweDAwMDA0ZmNjLDB4ODEyZWZmNjQsMHhmMjEwZDA4MCwweDRlNzUyMjJlCisJLmxvbmcJMHhmZjVjMDIwMSwweDAwYzA2NjM0LDB4ZjIyZWYwODAsMHhmZjg0MmYwMgorCS5sb25nCTB4MzIyZWZmODQsMHgzNDAxMDI4MSwweDAwMDA3ZmZmLDB4OTI4MDA0ODEKKwkubG9uZwkweDAwMDA2MDAwLDB4MDI0MTdmZmYsMHgwMjQyODAwMCwweDgyNDIzZDQxCisJLmxvbmcJMHhmZjg0MjQxZiwweGYyMmVkMDQwLDB4ZmY4NDYwYTYsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY5MDIyMmUsMHhmZjVjMDIwMSwweDAwMzBmMjAxLDB4OTAwMGYyMmUKKwkubG9uZwkweDQ4MjNmZjg0LDB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDYwYWFmMjJlCisJLmxvbmcJMHhkMDgwZmY5MCwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHg0ODIzZmY4NCwweGYyMDFhODAwLDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHhmMjAwMDA5OCwweGYyM2M1OGI4CisJLmxvbmcJMHgwMDAyZjI5MywweGZmM2M2MDAwLDB4ZmVlNDA4ZWUsMHgwMDAzZmY2NgorCS5sb25nCTB4ZjIyZWQwODAsMHhmZjkwZjIzYywweDkwMDAwMDAwLDB4MDAxMGYyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODIzZmY4NCwweGYyMDFhODAwCisJLmxvbmcJMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHgxMjJlZmY2MgorCS5sb25nCTB4MDIwMTAwMGIsMHg2NjIwZjIyZSwweGYwODBmZjg0LDB4NDFlZWZmODQKKwkubG9uZwkweDIyMmVmZjVjLDB4NjFmZjAwMDAsMHg0ZGQ4ODEyZSwweGZmNjRmMjJlCisJLmxvbmcJMHhkMDgwZmY4NCwweDRlNzVmMjJlLDB4ZDA0MGZmOTAsMHgyMjJlZmY1YworCS5sb25nCTB4MDIwMTAwYzAsMHg2NjUyZjIyZSwweDkwMDBmZjVjLDB4ZjIzYzg4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIyZTQ4YTMsMHhmZjg0ZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIyZSwweGYwNDBmZjg0LDB4MmYwMjMyMmUsMHhmZjg0MjQwMQorCS5sb25nCTB4MDI4MTAwMDAsMHg3ZmZmMDI0MiwweDgwMDA5MjgwLDB4MDY4MTAwMDAKKwkubG9uZwkweDYwMDAwMjQxLDB4N2ZmZjgyNDIsMHgzZDQxZmY4NCwweDI0MWZmMjJlCisJLmxvbmcJMHhkMDQwZmY4NCwweDYwMDBmZjgwLDB4MjIyZWZmNWMsMHgwMjAxMDAzMAorCS5sb25nCTB4ZjIwMTkwMDAsMHg2MGE2ZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjNmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4ZjIwMDAwOTgsMHhmMjNjNThiOCwweDAwMDJmMjkyLDB4ZmRlMGYyOTQKKwkubG9uZwkweGZlZmFmMjJlLDB4ZDA0MGZmOTAsMHgyMjJlZmY1YywweDAyMDEwMGMwCisJLmxvbmcJMHgwMDAxMDAxMCwweGYyMDE5MDAwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIyZTQ4YTMsMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDAKKwkubG9uZwkweDA0OThmMjNjLDB4NThiODAwMDIsMHhmMjkzZmRhMiwweDYwMDBmZWJjCisJLmxvbmcJMHgzMjNiMTIwYSwweDRlZmIxMDA2LDB4NGFmYzAwMzAsMHhmZDEyMDA3MgorCS5sb25nCTB4MDBjYzAwNmMsMHhmZDEyMDA2NiwweDAwMDAwMDAwLDB4MDA3MjAwNzIKKwkubG9uZwkweDAwNjAwMDZjLDB4MDA3MjAwNjYsMHgwMDAwMDAwMCwweDAwOWUwMDYwCisJLmxvbmcJMHgwMDllMDA2YywweDAwOWUwMDY2LDB4MDAwMDAwMDAsMHgwMDZjMDA2YworCS5sb25nCTB4MDA2YzAwNmMsMHgwMDZjMDA2NiwweDAwMDAwMDAwLDB4ZmQxMjAwNzIKKwkubG9uZwkweDAwY2MwMDZjLDB4ZmQxMjAwNjYsMHgwMDAwMDAwMCwweDAwNjYwMDY2CisJLmxvbmcJMHgwMDY2MDA2NiwweDAwNjYwMDY2LDB4MDAwMDAwMDAsMHg2MGZmMDAwMAorCS5sb25nCTB4MjMwZTYwZmYsMHgwMDAwMjI4NCwweDYwZmYwMDAwLDB4MjI3ZTEwMjgKKwkubG9uZwkweDAwMDAxMjI5LDB4MDAwMGIxMDEsMHg2YTEwZjIzYywweDQ0MDA4MDAwCisJLmxvbmcJMHgwMDAwMWQ3YywweDAwMGNmZjY0LDB4NGU3NWYyM2MsMHg0NDAwMDAwMAorCS5sb25nCTB4MDAwMDFkN2MsMHgwMDA0ZmY2NCwweDRlNzVmMjI5LDB4ZDA4MDAwMDAKKwkubG9uZwkweDEwMjgwMDAwLDB4MTIyOTAwMDAsMHhiMTAxNmExMCwweGYyMDAwMDE4CisJLmxvbmcJMHhmMjAwMDAxYSwweDFkN2MwMDBhLDB4ZmY2NDRlNzUsMHhmMjAwMDAxOAorCS5sb25nCTB4MWQ3YzAwMDIsMHhmZjY0NGU3NSwweGYyMjhkMDgwLDB4MDAwMDEwMjgKKwkubG9uZwkweDAwMDAxMjI5LDB4MDAwMGIxMDEsMHg2YWUyNjBkMCwweDAyMDAwMDMwCisJLmxvbmcJMHgwMDAwMDA0MCwweDYwMDgwMjAwLDB4MDAzMDAwMDAsMHgwMDgwMmQ0MAorCS5sb25nCTB4ZmY1YzEyMmUsMHhmZjRlNjYwMCwweDAyNjIwMjAwLDB4MDBjMDY2MDAKKwkubG9uZwkweDAwN2M0YTI4LDB4MDAwMDZhMDYsMHgwOGVlMDAwMywweGZmNjRmMjI4CisJLmxvbmcJMHhkMDgwMDAwMCwweDRlNzUwMjAwLDB4MDBjMDY2MDAsMHgwMDYwMDhlZQorCS5sb25nCTB4MDAwM2ZmNjYsMHg0YTI4MDAwMCwweDZhMDYwOGVlLDB4MDAwM2ZmNjQKKwkubG9uZwkweGYyMjhkMDgwLDB4MDAwMDA4MmUsMHgwMDAzZmY2MiwweDY2MDI0ZTc1CisJLmxvbmcJMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOAorCS5sb25nCTB4ZmY4YzQxZWUsMHhmZjg0NjFmZiwweDAwMDA0OTUwLDB4NDQ0MDA2NDAKKwkubG9uZwkweDYwMDAzMjJlLDB4ZmY4NDAyNDEsMHg4MDAwMDI0MCwweDdmZmY4MDQxCisJLmxvbmcJMHgzZDQwZmY4NCwweGYyMmVkMDQwLDB4ZmY4NDRlNzUsMHgwYzAwMDA0MAorCS5sb25nCTB4NjY3ZTNkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgKKwkubG9uZwkweDAwMDhmZjhjLDB4NjFmZjAwMDAsMHgyMDZjMGM4MCwweDAwMDAwMDdmCisJLmxvbmcJMHg2YzAwMDA5MiwweDBjODBmZmZmLDB4ZmY4MTY3MDAsMHgwMTc4NmQwMAorCS5sb25nCTB4MDBmNGYyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4OTAwMGZmNWMKKwkubG9uZwkweGYyMmU0ODAwLDB4ZmY4NGYyMDEsMHhhODAwZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwODNhZSwweGZmNjQyZjAyLDB4ZjIyZWYwODAsMHhmZjg0MzIyZQorCS5sb25nCTB4ZmY4NDM0MDEsMHgwMjgxMDAwMCwweDdmZmY5MjgwLDB4MDI0MjgwMDAKKwkubG9uZwkweDg0NDEzZDQyLDB4ZmY4NDI0MWYsMHhmMjJlZDA4MCwweGZmODQ0ZTc1CisJLmxvbmcJMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOAorCS5sb25nCTB4ZmY4YzYxZmYsMHgwMDAwMWZlZSwweDBjODAwMDAwLDB4MDNmZjZjMDAKKwkubG9uZwkweDAwMTQwYzgwLDB4ZmZmZmZjMDEsMHg2NzAwMDBmYSwweDZkMDAwMDc2CisJLmxvbmcJMHg2MDAwZmY4MCwweDA4ZWUwMDAzLDB4ZmY2NjRhMmUsMHhmZjg0NmEwNgorCS5sb25nCTB4MDhlZTAwMDMsMHhmZjY0MTIyZSwweGZmNjIwMjAxLDB4MDAwYjY2MWEKKwkubG9uZwkweDQxZWVmZjg0LDB4MjIyZWZmNWMsMHg2MWZmMDAwMCwweDRhNzQ4MTJlCisJLmxvbmcJMHhmZjY0ZjIyZSwweGQwODBmZjg0LDB4NGU3NTJkNmUsMHhmZjg4ZmY5NAorCS5sb25nCTB4MmQ2ZWZmOGMsMHhmZjk4MzIyZSwweGZmODQyZjAyLDB4MzQwMTAyODEKKwkubG9uZwkweDAwMDA3ZmZmLDB4OTI4MDAyNDIsMHg4MDAwMDY4MSwweDAwMDA2MDAwCisJLmxvbmcJMHgwMjQxN2ZmZiwweDg0NDEzZDQyLDB4ZmY5MGYyMmUsMHhkMDQwZmY5MAorCS5sb25nCTB4MjQxZjYwYWMsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjJlLDB4NDgwMGZmODQsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhmMjAxYTgwMCwweDgzYWVmZjY0LDB4MDBhZTAwMDAsMHgxMDQ4ZmY2NAorCS5sb25nCTB4MTIyZWZmNjIsMHgwMjAxMDAxMywweDY2MWMwODJlLDB4MDAwM2ZmNjQKKwkubG9uZwkweDU2YzEyMDJlLDB4ZmY1YzYxZmYsMHgwMDAwNGFlNCwweDgxMmVmZjY0CisJLmxvbmcJMHhmMjEwZDA4MCwweDRlNzUyZjAyLDB4MzIyZWZmODQsMHgyNDAxMDI4MQorCS5sb25nCTB4MDAwMDdmZmYsMHgwMjQyODAwMCwweDkyODAwNDgxLDB4MDAwMDYwMDAKKwkubG9uZwkweDAyNDE3ZmZmLDB4ODI0MjNkNDEsMHhmZjg0MjQxZiwweGYyMmVkMDQwCisJLmxvbmcJMHhmZjg0NjBiNiwweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlOTAwMAorCS5sb25nCTB4ZmY1Y2YyMmUsMHg0ODAwZmY4NCwweGYyMDFhODAwLDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHhmMjAwMDA5OCwweGYyM2M1OGI4CisJLmxvbmcJMHgwMDAyZjI5MywweGZmNzQ2MDAwLDB4ZmU3ZTBjMDEsMHgwMDA0NjcwMAorCS5sb25nCTB4ZmRiNjBjMDEsMHgwMDA1NjdmZiwweDAwMDAxZjk4LDB4MGMwMTAwMDMKKwkubG9uZwkweDY3ZmYwMDAwLDB4MWZhMmYyMjgsMHg0ODAwMDAwMCwweGYyMDBhODAwCisJLmxvbmcJMHhlMTk4MWQ0MCwweGZmNjQ0ZTc1LDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4MDAwMDNmZmYsMHgwMDAwMDA3ZSwweDAwMDAwM2ZlLDB4ZmZmZmMwMDEKKwkubG9uZwkweGZmZmZmZjgxLDB4ZmZmZmZjMDEsMHgwMjAwMDAzMCwweDAwMDAwMDQwCisJLmxvbmcJMHg2MDA4MDIwMCwweDAwMzAwMDAwLDB4MDA4MDJkNDAsMHhmZjVjNDI0MQorCS5sb25nCTB4MTIyZWZmNGYsMHhlNzA5ODIyZSwweGZmNGU2NjAwLDB4MDJkNjNkNjkKKwkubG9uZwkweDAwMDBmZjkwLDB4MmQ2OTAwMDQsMHhmZjk0MmQ2OSwweDAwMDhmZjk4CisJLmxvbmcJMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOAorCS5sb25nCTB4ZmY4YzYxZmYsMHgwMDAwMWUwZSwweDJmMDA2MWZmLDB4MDAwMDFlYjIKKwkubG9uZwkweDQ0OTdkMTk3LDB4MzIyZWZmNWUsMHhlYzA5MjAxZiwweGIwYmIxNDhlCisJLmxvbmcJMHg2ZjAwMDA3NCwweGIwYmIxNTIwLDB4ZmY3YTY3MDAsMHgwMjBjNmUwMAorCS5sb25nCTB4MDEzY2YyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODIwZmY4NCwweGYyMDFhODAwCisJLmxvbmcJMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHhmMjJlZjA4MAorCS5sb25nCTB4ZmY4NDJmMDIsMHgzMjJlZmY4NCwweDI0MDEwMjgxLDB4MDAwMDdmZmYKKwkubG9uZwkweDAyNDI4MDAwLDB4OTI4MDgyNDIsMHgzZDQxZmY4NCwweDI0MWZmMjJlCisJLmxvbmcJMHhkMDgwZmY4NCwweDRlNzUwMDAwLDB4N2ZmZjAwMDAsMHg0MDdmMDAwMAorCS5sb25nCTB4NDNmZjIwMWYsMHg2MGM2MmYwMCwweGYyMmVkMDgwLDB4ZmY5MGYyMmUKKwkubG9uZwkweDkwMDBmZjVjLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0ODIwCisJLmxvbmcJMHhmZjg0ZjIwMCwweGE4MDBmMjNjLDB4OTAwMDAwMDAsMHgwMDAwODFhZQorCS5sb25nCTB4ZmY2NGYyMjcsMHhlMDAxMzAxNywweGRmZmMwMDAwLDB4MDAwYzAyODAKKwkubG9uZwkweDAwMDA3ZmZmLDB4OTA5N2IwYmIsMHgxNGFlNmRiNiwweDIwMWYwMGFlCisJLmxvbmcJMHgwMDAwMTA0OCwweGZmNjQxMjJlLDB4ZmY2MjAyMDEsMHgwMDEzNjYxYworCS5sb25nCTB4MDgyZTAwMDMsMHhmZjY0NTZjMSwweDIwMmVmZjVjLDB4NjFmZjAwMDAKKwkubG9uZwkweDQ4ZGU4MTJlLDB4ZmY2NGYyMTAsMHhkMDgwNGU3NSwweDIyMmVmZjVjCisJLmxvbmcJMHgwMjAxMDBjMCwweDY2MzRmMjJlLDB4ZjA4MGZmODQsMHgyZjAyMzIyZQorCS5sb25nCTB4ZmY4NDM0MDEsMHgwMjgxMDAwMCwweDdmZmY5MjgwLDB4MDQ4MTAwMDAKKwkubG9uZwkweDYwMDAwMjQxLDB4N2ZmZjAyNDIsMHg4MDAwODI0MiwweDNkNDFmZjg0CisJLmxvbmcJMHgyNDFmZjIyZSwweGQwNDBmZjg0LDB4NjBhNmYyMmUsMHhkMDgwZmY5MAorCS5sb25nCTB4MjIyZWZmNWMsMHgwMjAxMDAzMCwweGYyMDE5MDAwLDB4ZjIyZTQ4MjAKKwkubG9uZwkweGZmODRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwNjBhYSwweDA4ZWUwMDAzCisJLmxvbmcJMHhmZjY2ZjIyZSwweGQwODBmZjkwLDB4ZjIzYzkwMDAsMHgwMDAwMDAxMAorCS5sb25nCTB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0ODIwLDB4ZmY4NGYyMDEKKwkubG9uZwkweGE4MDBmMjNjLDB4OTAwMDAwMDAsMHgwMDAwODNhZSwweGZmNjQxMjJlCisJLmxvbmcJMHhmZjYyMDIwMSwweDAwMGI2NjIwLDB4ZjIyZWYwODAsMHhmZjg0NDFlZQorCS5sb25nCTB4ZmY4NDIyMmUsMHhmZjVjNjFmZiwweDAwMDA0NzI2LDB4ODEyZWZmNjQKKwkubG9uZwkweGYyMmVkMDgwLDB4ZmY4NDRlNzUsMHhmMjJlZDA0MCwweGZmOTAyMjJlCisJLmxvbmcJMHhmZjVjMDIwMSwweDAwYzA2NjUyLDB4ZjIyZTkwMDAsMHhmZjVjZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4YTBmZjg0LDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIyZWYwNDAsMHhmZjg0MmYwMiwweDMyMmVmZjg0CisJLmxvbmcJMHgyNDAxMDI4MSwweDAwMDA3ZmZmLDB4MDI0MjgwMDAsMHg5MjgwMDY4MQorCS5sb25nCTB4MDAwMDYwMDAsMHgwMjQxN2ZmZiwweDgyNDIzZDQxLDB4ZmY4NDI0MWYKKwkubG9uZwkweGYyMmVkMDQwLDB4ZmY4NDYwMDAsMHhmZjgwMjIyZSwweGZmNWMwMjAxCisJLmxvbmcJMHgwMDMwZjIwMSwweDkwMDA2MGE2LDB4ZjIyZWQwODAsMHhmZjkwZjIyZQorCS5sb25nCTB4OTAwMGZmNWMsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTQ4MjAKKwkubG9uZwkweGZmODRmMjAxLDB4YTgwMGYyM2MsMHg5MDAwMDAwMCwweDAwMDA4M2FlCisJLmxvbmcJMHhmZjY0ZjIwMCwweDAwOThmMjNjLDB4NThiODAwMDEsMHhmMjkyZmRlZQorCS5sb25nCTB4ZjI5NGZlZmEsMHhmMjJlZDA0MCwweGZmOTAyMjJlLDB4ZmY1YzAyMDEKKwkubG9uZwkweDAwYzAwMDAxLDB4MDAxMGYyMDEsMHg5MDAwZjIzYywweDg4MDAwMDAwCisJLmxvbmcJMHgwMDAwZjIyZSwweDQ4YTBmZjg0LDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIwMDA0OTgsMHhmMjNjNThiOCwweDAwMDFmMjkzLDB4ZmRiMDYwMDAKKwkubG9uZwkweGZlYmMzMjNiLDB4MTIwYTRlZmIsMHgxMDA2NGFmYywweDAwMzBmZDIwCisJLmxvbmcJMHgwMDllMDA3MiwweDAwNjBmZDIwLDB4MDA2NjAwMDAsMHgwMDAwMDA3MgorCS5sb25nCTB4MDA2YzAwNzIsMHgwMDYwMDA3MiwweDAwNjYwMDAwLDB4MDAwMDAwZDAKKwkubG9uZwkweDAwZDAwMDZjLDB4MDA2MDAwZDAsMHgwMDY2MDAwMCwweDAwMDAwMDYwCisJLmxvbmcJMHgwMDYwMDA2MCwweDAwNjAwMDYwLDB4MDA2NjAwMDAsMHgwMDAwZmQyMAorCS5sb25nCTB4MDA5ZTAwNzIsMHgwMDYwZmQyMCwweDAwNjYwMDAwLDB4MDAwMDAwNjYKKwkubG9uZwkweDAwNjYwMDY2LDB4MDA2NjAwNjYsMHgwMDY2MDAwMCwweDAwMDA2MGZmCisJLmxvbmcJMHgwMDAwMWJkOCwweDYwZmYwMDAwLDB4MWJkMjYwZmYsMHgwMDAwMWM1MAorCS5sb25nCTB4MTAyODAwMDAsMHgxMjI5MDAwMCwweGIxMDE2YTEwLDB4ZjIzYzQ0MDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MWQ3YzAwMGMsMHhmZjY0NGU3NSwweGYyM2M0NDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDFkN2MwMDA0LDB4ZmY2NDRlNzUsMHgwMDZlMDQxMAorCS5sb25nCTB4ZmY2NjEwMjgsMHgwMDAwMTIyOSwweDAwMDBiMTAxLDB4NmExMGYyM2MKKwkubG9uZwkweDQ0MDBmZjgwLDB4MDAwMDFkN2MsMHgwMDBhZmY2NCwweDRlNzVmMjNjCisJLmxvbmcJMHg0NDAwN2Y4MCwweDAwMDAxZDdjLDB4MDAwMmZmNjQsMHg0ZTc1MTAyOQorCS5sb25nCTB4MDAwMDEyMjgsMHgwMDAwYjEwMSwweDZhMTZmMjI5LDB4ZDA4MDAwMDAKKwkubG9uZwkweGYyMDAwMDE4LDB4ZjIwMDAwMWEsMHgxZDdjMDAwYSwweGZmNjQ0ZTc1CisJLmxvbmcJMHhmMjI5ZDA4MCwweDAwMDBmMjAwLDB4MDAxODFkN2MsMHgwMDAyZmY2NAorCS5sb25nCTB4NGU3NTAyMDAsMHgwMDMwMDAwMCwweDAwNDA2MDA4LDB4MDIwMDAwMzAKKwkubG9uZwkweDAwMDAwMDgwLDB4MmQ0MGZmNWMsMHgxMjJlZmY0ZSwweDY2MDAwMjc2CisJLmxvbmcJMHgwMjAwMDBjMCwweDY2MDAwMDkwLDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OAorCS5sb25nCTB4MDAwOGZmOGMsMHgzMDI4MDAwMCwweDBhNDA4MDAwLDB4NmEwNjFkN2MKKwkubG9uZwkweDAwMDhmZjY0LDB4M2Q0MGZmODQsMHhmMjJlZDA4MCwweGZmODQ0ZTc1CisJLmxvbmcJMHgwMjAwMDBjMCwweDY2NjAwOGVlLDB4MDAwM2ZmNjYsMHgyZDY4MDAwNAorCS5sb25nCTB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDMwMjgwMDAwLDB4MGE0MDgwMDAKKwkubG9uZwkweDZhMDYxZDdjLDB4MDAwOGZmNjQsMHgzZDQwZmY4NCwweGYyMmVkMDgwCisJLmxvbmcJMHhmZjg0MDgyZSwweDAwMDNmZjYyLDB4NjYwMjRlNzUsMHg0MWVlZmY4NAorCS5sb25nCTB4NjFmZjAwMDAsMHg0MjY2NDQ0MCwweDA2NDA2MDAwLDB4MzIyZWZmODQKKwkubG9uZwkweDAyNDE4MDAwLDB4MDI0MDdmZmYsMHg4MDQxM2Q0MCwweGZmODRmMjJlCisJLmxvbmcJMHhkMDQwZmY4NCwweDRlNzUwYzAwLDB4MDA0MDY2N2UsMHgzZDY4MDAwMAorCS5sb25nCTB4ZmY4NDJkNjgsMHgwMDA0ZmY4OCwweDJkNjgwMDA4LDB4ZmY4YzYxZmYKKwkubG9uZwkweDAwMDAxOTgyLDB4MGM4MDAwMDAsMHgwMDdmNmMwMCwweDAwOTAwYzgwCisJLmxvbmcJMHhmZmZmZmY4MSwweDY3MDAwMTc4LDB4NmQwMDAwZjQsMHhmMjNjODgwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjJlOTAwMCwweGZmNWNmMjJlLDB4NDgxYWZmODQKKwkubG9uZwkweGYyMDFhODAwLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0CisJLmxvbmcJMHgyZjAyZjIyZSwweGYwODBmZjg0LDB4MzIyZWZmODQsMHgzNDAxMDI4MQorCS5sb25nCTB4MDAwMDdmZmYsMHg5MjgwMDI0MiwweDgwMDA4NDQxLDB4M2Q0MmZmODQKKwkubG9uZwkweDI0MWZmMjJlLDB4ZDA4MGZmODQsMHg0ZTc1M2Q2OCwweDAwMDBmZjg0CisJLmxvbmcJMHgyZDY4MDAwNCwweGZmODgyZDY4LDB4MDAwOGZmOGMsMHg2MWZmMDAwMAorCS5sb25nCTB4MTkwNDBjODAsMHgwMDAwMDNmZiwweDZjMTIwYzgwLDB4ZmZmZmZjMDEKKwkubG9uZwkweDY3MDAwMGZjLDB4NmQwMDAwNzgsMHg2MDAwZmY4MiwweDA4ZWUwMDAzCisJLmxvbmcJMHhmZjY2MGEyZSwweDAwODBmZjg0LDB4NmEwNjA4ZWUsMHgwMDAzZmY2NAorCS5sb25nCTB4MTIyZWZmNjIsMHgwMjAxMDAwYiwweDY2MWE0MWVlLDB4ZmY4NDIyMmUKKwkubG9uZwkweGZmNWM2MWZmLDB4MDAwMDQzOGEsMHg4MTJlZmY2NCwweGYyMmVkMDgwCisJLmxvbmcJMHhmZjg0NGU3NSwweDJkNmVmZjg4LDB4ZmY5NDJkNmUsMHhmZjhjZmY5OAorCS5sb25nCTB4MzIyZWZmODQsMHgyZjAyMjQwMSwweDAyODEwMDAwLDB4N2ZmZjAyNDIKKwkubG9uZwkweDgwMDA5MjgwLDB4MDY4MTAwMDAsMHg2MDAwMDI0MSwweDdmZmY4MjQyCisJLmxvbmcJMHgzZDQxZmY5MCwweGYyMmVkMDQwLDB4ZmY5MDI0MWYsMHg2MGFjZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MWEKKwkubG9uZwkweGZmODRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIwMSwweGE4MDA4M2FlCisJLmxvbmcJMHhmZjY0MDBhZSwweDAwMDAxMDQ4LDB4ZmY2NDEyMmUsMHhmZjYyMDIwMQorCS5sb25nCTB4MDAxMzY2MWMsMHgwODJlMDAwMywweGZmNjQ1NmMxLDB4MjAyZWZmNWMKKwkubG9uZwkweDYxZmYwMDAwLDB4NDNmYTgxMmUsMHhmZjY0ZjIxMCwweGQwODA0ZTc1CisJLmxvbmcJMHgyZjAyMzIyZSwweGZmODQyNDAxLDB4MDI4MTAwMDAsMHg3ZmZmMDI0MgorCS5sb25nCTB4ODAwMDkyODAsMHgwNDgxMDAwMCwweDYwMDAwMjQxLDB4N2ZmZjgyNDIKKwkubG9uZwkweDNkNDFmZjg0LDB4ZjIyZWQwNDAsMHhmZjg0MjQxZiwweDYwYjZmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4OTAwMGZmNWMsMHhmMjJlNDgxYQorCS5sb25nCTB4ZmY4NGYyMDEsMHhhODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMDgzYWUKKwkubG9uZwkweGZmNjRmMjAwLDB4MDA5OGYyM2MsMHg1OGI4MDAwMiwweGYyOTNmZjc0CisJLmxvbmcJMHg2MDAwZmU3ZSwweDBjMDEwMDA0LDB4NjcwMGZkYjYsMHgwYzAxMDAwNQorCS5sb25nCTB4NjdmZjAwMDAsMHgxOGFlMGMwMSwweDAwMDM2N2ZmLDB4MDAwMDE4YjgKKwkubG9uZwkweGYyMjg0ODFhLDB4MDAwMGYyMDAsMHhhODAwZTE5OCwweDFkNDBmZjY0CisJLmxvbmcJMHg0ZTc1MTIyZSwweGZmNGU2NjEwLDB4NGEyODAwMDAsMHg2YjAyNGU3NQorCS5sb25nCTB4MWQ3YzAwMDgsMHhmZjY0NGU3NSwweDBjMDEwMDAxLDB4Njc0MDBjMDEKKwkubG9uZwkweDAwMDI2NzI0LDB4MGMwMTAwMDUsMHg2N2ZmMDAwMCwweDE4NjYwYzAxCisJLmxvbmcJMHgwMDAzNjdmZiwweDAwMDAxODcwLDB4NGEyODAwMDAsMHg2YjAyNGU3NQorCS5sb25nCTB4MWQ3YzAwMDgsMHhmZjY0NGU3NSwweDRhMjgwMDAwLDB4NmIwODFkN2MKKwkubG9uZwkweDAwMDJmZjY0LDB4NGU3NTFkN2MsMHgwMDBhZmY2NCwweDRlNzU0YTI4CisJLmxvbmcJMHgwMDAwNmIwOCwweDFkN2MwMDA0LDB4ZmY2NDRlNzUsMHgxZDdjMDAwYworCS5sb25nCTB4ZmY2NDRlNzUsMHgxMjJlZmY0ZSwweDY2MjgwMjAwLDB4MDAzMGYyMDAKKwkubG9uZwkweDkwMDBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyOCwweDQ4MDEwMDAwCisJLmxvbmcJMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIwMGE4MDAsMHg4MWFlZmY2NAorCS5sb25nCTB4NGU3NTBjMDEsMHgwMDAxNjcyZSwweDBjMDEwMDAyLDB4Njc0ZTBjMDEKKwkubG9uZwkweDAwMDQ2NzEwLDB4MGMwMTAwMDUsMHg2N2ZmMDAwMCwweDE3ZDY2MGZmCisJLmxvbmcJMHgwMDAwMTdlNCwweDNkNjgwMDAwLDB4ZmY4NDFkN2MsMHgwMDgwZmY4OAorCS5sb25nCTB4NDFlZWZmODQsMHg2MGE0NGEyOCwweDAwMDA2YjEwLDB4ZjIzYzQ0MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MWQ3YzAwMDQsMHhmZjY0NGU3NSwweGYyM2M0NDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDFkN2MwMDBjLDB4ZmY2NDRlNzUsMHhmMjI4ZDA4MAorCS5sb25nCTB4MDAwMDRhMjgsMHgwMDAwNmIwOCwweDFkN2MwMDAyLDB4ZmY2NDRlNzUKKwkubG9uZwkweDFkN2MwMDBhLDB4ZmY2NDRlNzUsMHgxMjJlZmY0ZSwweDY2MThmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjI4LDB4NDgwMzAwMDAsMHhmMjAwYTgwMAorCS5sb25nCTB4ODFhZWZmNjQsMHg0ZTc1MGMwMSwweDAwMDE2NzJlLDB4MGMwMTAwMDIKKwkubG9uZwkweDY3NGUwYzAxLDB4MDAwNDY3MTAsMHgwYzAxMDAwNSwweDY3ZmYwMDAwCisJLmxvbmcJMHgxNzQyNjBmZiwweDAwMDAxNzUwLDB4M2Q2ODAwMDAsMHhmZjg0MWQ3YworCS5sb25nCTB4MDA4MGZmODgsMHg0MWVlZmY4NCwweDYwYjQ0YTI4LDB4MDAwMDZiMTAKKwkubG9uZwkweGYyM2M0NDAwLDB4MDAwMDAwMDAsMHgxZDdjMDAwNCwweGZmNjQ0ZTc1CisJLmxvbmcJMHhmMjNjNDQwMCwweDgwMDAwMDAwLDB4MWQ3YzAwMGMsMHhmZjY0NGU3NQorCS5sb25nCTB4ZjIyOGQwODAsMHgwMDAwNGEyOCwweDAwMDA2YjA4LDB4MWQ3YzAwMDIKKwkubG9uZwkweGZmNjQ0ZTc1LDB4MWQ3YzAwMGEsMHhmZjY0NGU3NSwweDAyMDAwMDMwCisJLmxvbmcJMHgwMDAwMDA0MCwweDYwMDgwMjAwLDB4MDAzMDAwMDAsMHgwMDgwMmQ0MAorCS5sb25nCTB4ZmY1YzEyMmUsMHhmZjRlNjYwMCwweDAyNWMwMjAwLDB4MDBjMDY2N2UKKwkubG9uZwkweDJkNjgwMDA0LDB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDMyMjgwMDAwCisJLmxvbmcJMHgwODgxMDAwZiwweDNkNDFmZjg0LDB4ZjIyZWQwODAsMHhmZjg0NGU3NQorCS5sb25nCTB4MDIwMDAwYzAsMHg2NjU4MDhlZSwweDAwMDNmZjY2LDB4MmQ2ODAwMDQKKwkubG9uZwkweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgzMDI4MDAwMCwweDA4ODAwMDBmCisJLmxvbmcJMHgzZDQwZmY4NCwweGYyMmVkMDgwLDB4ZmY4NDA4MmUsMHgwMDAzZmY2MgorCS5sb25nCTB4NjYwMjRlNzUsMHg0MWVlZmY4NCwweDYxZmYwMDAwLDB4M2UwZTQ0NDAKKwkubG9uZwkweDA2NDA2MDAwLDB4MzIyZWZmODQsMHgwMjQxODAwMCwweDAyNDA3ZmZmCisJLmxvbmcJMHg4MDQxM2Q0MCwweGZmODRmMjJlLDB4ZDA0MGZmODQsMHg0ZTc1MGMwMAorCS5sb25nCTB4MDA0MDY2N2UsMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgKKwkubG9uZwkweDJkNjgwMDA4LDB4ZmY4YzYxZmYsMHgwMDAwMTUyYSwweDBjODAwMDAwCisJLmxvbmcJMHgwMDdmNmMwMCwweDAwOTAwYzgwLDB4ZmZmZmZmODEsMHg2NzAwMDE3MAorCS5sb25nCTB4NmQwMDAwZWMsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjJlLDB4NDgxOGZmODQsMHhmMjAxYTgwMCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4MmYwMmYyMmUsMHhmMDgwZmY4NAorCS5sb25nCTB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmLDB4OTI4MDAyNDIKKwkubG9uZwkweDgwMDA4NDQxLDB4M2Q0MmZmODQsMHgyNDFmZjIyZSwweGQwODBmZjg0CisJLmxvbmcJMHg0ZTc1M2Q2OCwweDAwMDBmZjg0LDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OAorCS5sb25nCTB4MDAwOGZmOGMsMHg2MWZmMDAwMCwweDE0YWMwYzgwLDB4MDAwMDAzZmYKKwkubG9uZwkweDZjMTIwYzgwLDB4ZmZmZmZjMDEsMHg2NzAwMDBmNCwweDZkMDAwMDcwCisJLmxvbmcJMHg2MDAwZmY4MiwweDA4ZWUwMDAzLDB4ZmY2NjA4YWUsMHgwMDA3ZmY4NAorCS5sb25nCTB4MTIyZWZmNjIsMHgwMjAxMDAwYiwweDY2MWE0MWVlLDB4ZmY4NDIyMmUKKwkubG9uZwkweGZmNWM2MWZmLDB4MDAwMDNmM2EsMHg4MTJlZmY2NCwweGYyMmVkMDgwCisJLmxvbmcJMHhmZjg0NGU3NSwweDJkNmVmZjg4LDB4ZmY5NDJkNmUsMHhmZjhjZmY5OAorCS5sb25nCTB4MzIyZWZmODQsMHgyZjAyMjQwMSwweDAyODEwMDAwLDB4N2ZmZjAyNDIKKwkubG9uZwkweDgwMDA5MjgwLDB4MDY4MTAwMDAsMHg2MDAwMDI0MSwweDdmZmY4MjQyCisJLmxvbmcJMHgzZDQxZmY5MCwweGYyMmVkMDQwLDB4ZmY5MDI0MWYsMHg2MGFjZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MTgKKwkubG9uZwkweGZmODRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIwMSwweGE4MDA4M2FlCisJLmxvbmcJMHhmZjY0MDBhZSwweDAwMDAxMDQ4LDB4ZmY2NDEyMmUsMHhmZjYyMDIwMQorCS5sb25nCTB4MDAxMzY2MWMsMHgwODJlMDAwMywweGZmNjQ1NmMxLDB4MjAyZWZmNWMKKwkubG9uZwkweDYxZmYwMDAwLDB4M2ZhYTgxMmUsMHhmZjY0ZjIxMCwweGQwODA0ZTc1CisJLmxvbmcJMHgyZjAyMzIyZSwweGZmODQyNDAxLDB4MDI4MTAwMDAsMHg3ZmZmMDI0MgorCS5sb25nCTB4ODAwMDkyODAsMHgwNDgxMDAwMCwweDYwMDAwMjQxLDB4N2ZmZjgyNDIKKwkubG9uZwkweDNkNDFmZjg0LDB4ZjIyZWQwNDAsMHhmZjg0MjQxZiwweDYwYjZmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4OTAwMGZmNWMsMHhmMjJlNDgxOAorCS5sb25nCTB4ZmY4NGYyMDEsMHhhODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMDgzYWUKKwkubG9uZwkweGZmNjRmMjAwLDB4MDA5OGYyM2MsMHg1OGI4MDAwMiwweGYyOTNmZjc0CisJLmxvbmcJMHg2MDAwZmU4NiwweDBjMDEwMDA0LDB4NjcwMGZkYzYsMHgwYzAxMDAwNQorCS5sb25nCTB4NjdmZjAwMDAsMHgxNDVlMGMwMSwweDAwMDM2N2ZmLDB4MDAwMDE0NjgKKwkubG9uZwkweGYyMjg0ODE4LDB4MDAwMDBjMDEsMHgwMDAyNjcwOCwweDFkN2MwMDA0CisJLmxvbmcJMHhmZjY0NGU3NSwweDFkN2MwMDAyLDB4ZmY2NDRlNzUsMHg0MjQxMTIyZQorCS5sb25nCTB4ZmY0ZmU3MDksMHg4MjJlZmY0ZSwweDY2MThmMjI5LDB4ZDA4MDAwMDAKKwkubG9uZwkweGYyMjg0ODM4LDB4MDAwMGYyMDAsMHhhODAwZTE5OCwweDFkNDBmZjY0CisJLmxvbmcJMHg0ZTc1MzIzYiwweDEyMGE0ZWZiLDB4MTAwNjRhZmMsMHgwMDMwZmZkYworCS5sb25nCTB4ZmZkY2ZmZGMsMHgwMDYwMDBmOCwweDAwNmUwMDAwLDB4MDAwMGZmZGMKKwkubG9uZwkweGZmZGNmZmRjLDB4MDA2MDAwN2MsMHgwMDZlMDAwMCwweDAwMDBmZmRjCisJLmxvbmcJMHhmZmRjZmZkYywweDAwNjAwMDdjLDB4MDA2ZTAwMDAsMHgwMDAwMDA2MAorCS5sb25nCTB4MDA2MDAwNjAsMHgwMDYwMDA2MCwweDAwNmUwMDAwLDB4MDAwMDAxMTQKKwkubG9uZwkweDAwOWMwMDljLDB4MDA2MDAwYmMsMHgwMDZlMDAwMCwweDAwMDAwMDZlCisJLmxvbmcJMHgwMDZlMDA2ZSwweDAwNmUwMDZlLDB4MDA2ZTAwMDAsMHgwMDAwNjFmZgorCS5sb25nCTB4MDAwMDEzODgsMHgwMjJlMDBmNywweGZmNjQ0ZTc1LDB4NjFmZjAwMDAKKwkubG9uZwkweDEzN2EwMjJlLDB4MDBmN2ZmNjQsMHg0ZTc1M2Q2OCwweDAwMDBmZjg0CisJLmxvbmcJMHgyMDI4MDAwNCwweDA4YzAwMDFmLDB4MmQ0MGZmODgsMHgyZDY4MDAwOAorCS5sb25nCTB4ZmY4YzQxZWUsMHhmZjg0NjAwMCwweGZmNDIyZDY5LDB4MDAwMGZmODQKKwkubG9uZwkweDIwMjkwMDA0LDB4MDhjMDAwMWYsMHgyZDQwZmY4OCwweDJkNjkwMDA4CisJLmxvbmcJMHhmZjhjNDNlZSwweGZmODQ2MDAwLDB4ZmYyMjNkNjksMHgwMDAwZmY5MAorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MjAyOSwweDAwMDQwOGMwLDB4MDAxZjJkNDAKKwkubG9uZwkweGZmOTQyMDI4LDB4MDAwNDA4YzAsMHgwMDFmMmQ0MCwweGZmODgyZDY5CisJLmxvbmcJMHgwMDA4ZmY5OCwweDJkNjgwMDA4LDB4ZmY4YzQzZWUsMHhmZjkwNDFlZQorCS5sb25nCTB4ZmY4NDYwMDAsMHhmZWU2MTAyOCwweDAwMDAxMjI5LDB4MDAwMGIxMDEKKwkubG9uZwkweDZiMDBmZjc4LDB4NGEwMDZiMDIsMHg0ZTc1MWQ3YywweDAwMDhmZjY0CisJLmxvbmcJMHg0ZTc1MTAyOCwweDAwMDAxMjI5LDB4MDAwMGIxMDEsMHg2YjAwZmY3YworCS5sb25nCTB4NGEwMDZhMDIsMHg0ZTc1MWQ3YywweDAwMDhmZjY0LDB4NGU3NTJkNDAKKwkubG9uZwkweGZmNWM0MjQxLDB4MTIyZWZmNGYsMHhlNzA5ODIyZSwweGZmNGU2NjAwCisJLmxvbmcJMHgwMmEwM2Q2OSwweDAwMDBmZjkwLDB4MmQ2OTAwMDQsMHhmZjk0MmQ2OQorCS5sb25nCTB4MDAwOGZmOTgsMHgzZDY4MDAwMCwweGZmODQyZDY4LDB4MDAwNGZmODgKKwkubG9uZwkweDJkNjgwMDA4LDB4ZmY4YzYxZmYsMHgwMDAwMTE5YSwweDJmMDA2MWZmCisJLmxvbmcJMHgwMDAwMTIzZSwweGQwOWYwYzgwLDB4ZmZmZmMwMDEsMHg2NzAwMDBmOAorCS5sb25nCTB4NmQwMDAwNjQsMHgwYzgwMDAwMCwweDQwMDA2NzAwLDB4MDFkYTZlMDAKKwkubG9uZwkweDAxMjJmMjJlLDB4ZDA4MGZmOTAsMHhmMjJlOTAwMCwweGZmNWNmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgyN2ZmODQsMHhmMjAxYTgwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIyZWYwODAKKwkubG9uZwkweGZmODQyZjAyLDB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMjQyODAwMCwweDkyODA4MjQyLDB4M2Q0MWZmODQsMHgyNDFmZjIyZQorCS5sb25nCTB4ZDA4MGZmODQsMHg0ZTc1ZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjdmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4MDBhZTAwMDAsMHgxMDQ4ZmY2NCwweDEyMmVmZjYyLDB4MDIwMTAwMTMKKwkubG9uZwkweDY2MjAwODJlLDB4MDAwM2ZmNjQsMHg1NmMxMjAyZSwweGZmNWMwMjAwCisJLmxvbmcJMHgwMDMwNjFmZiwweDAwMDAzYzk4LDB4ODEyZWZmNjQsMHhmMjEwZDA4MAorCS5sb25nCTB4NGU3NWYyMmUsMHhmMDgwZmY4NCwweDJmMDIzMjJlLDB4ZmY4NDI0MDEKKwkubG9uZwkweDAyODEwMDAwLDB4N2ZmZjkyODAsMHgwNDgxMDAwMCwweDYwMDAwMjQxCisJLmxvbmcJMHg3ZmZmMDI0MiwweDgwMDA4MjQyLDB4M2Q0MWZmODQsMHgyNDFmZjIyZQorCS5sb25nCTB4ZDA0MGZmODQsMHg2MGFjZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjdmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4ZjIwMDAwOTgsMHhmMjNjNThiOCwweDAwMDJmMjkzLDB4ZmY2NDYwMDAKKwkubG9uZwkweGZmMGMwOGVlLDB4MDAwM2ZmNjYsMHhmMjJlZDA4MCwweGZmOTBmMjNjCisJLmxvbmcJMHg5MDAwMDAwMCwweDAwMTBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZQorCS5sb25nCTB4NDgyN2ZmODQsMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDgzYWVmZjY0LDB4MTIyZWZmNjIsMHgwMjAxMDAwYiwweDY2MjBmMjJlCisJLmxvbmcJMHhmMDgwZmY4NCwweDQxZWVmZjg0LDB4MjIyZWZmNWMsMHg2MWZmMDAwMAorCS5sb25nCTB4M2I1NjgxMmUsMHhmZjY0ZjIyZSwweGQwODBmZjg0LDB4NGU3NWYyMmUKKwkubG9uZwkweGQwNDBmZjkwLDB4ZjIyZTkwMDAsMHhmZjVjZjIzYywweDg4MDAwMDAwCisJLmxvbmcJMHgwMDAwZjIyZSwweDQ4YTdmZjg0LDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIyZWYwNDAsMHhmZjg0MmYwMiwweDMyMmVmZjg0LDB4MjQwMTAyODEKKwkubG9uZwkweDAwMDA3ZmZmLDB4MDI0MjgwMDAsMHg5MjgwMDY4MSwweDAwMDA2MDAwCisJLmxvbmcJMHgwMjQxN2ZmZiwweDgyNDIzZDQxLDB4ZmY4NDI0MWYsMHhmMjJlZDA0MAorCS5sb25nCTB4ZmY4NDYwMDAsMHhmZjhhZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjdmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4ZjIwMDAwOTgsMHhmMjNjNThiOCwweDAwMDJmMjkyLDB4ZmUyMGYyOTQKKwkubG9uZwkweGZmMTJmMjJlLDB4ZDA0MGZmOTAsMHgyMjJlZmY1YywweDAyMDEwMGMwCisJLmxvbmcJMHgwMDAxMDAxMCwweGYyMDE5MDAwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIyZTQ4YTcsMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDAKKwkubG9uZwkweDA0OThmMjNjLDB4NThiODAwMDIsMHhmMjkzZmRlMiwweDYwMDBmZWQ0CisJLmxvbmcJMHgzMjNiMTIwYSwweDRlZmIxMDA2LDB4NGFmYzAwMzAsMHhmZDU2MDA3MgorCS5sb25nCTB4MDA3ODAwNmMsMHhmZDU2MDA2NiwweDAwMDAwMDAwLDB4MDA3MjAwNzIKKwkubG9uZwkweDAwNjAwMDZjLDB4MDA3MjAwNjYsMHgwMDAwMDAwMCwweDAwN2UwMDYwCisJLmxvbmcJMHgwMDdlMDA2YywweDAwN2UwMDY2LDB4MDAwMDAwMDAsMHgwMDZjMDA2YworCS5sb25nCTB4MDA2YzAwNmMsMHgwMDZjMDA2NiwweDAwMDAwMDAwLDB4ZmQ1NjAwNzIKKwkubG9uZwkweDAwNzgwMDZjLDB4ZmQ1NjAwNjYsMHgwMDAwMDAwMCwweDAwNjYwMDY2CisJLmxvbmcJMHgwMDY2MDA2NiwweDAwNjYwMDY2LDB4MDAwMDAwMDAsMHg2MGZmMDAwMAorCS5sb25nCTB4MTAxZTYwZmYsMHgwMDAwMGY5NCwweDYwZmYwMDAwLDB4MGY4ZTYwZmYKKwkubG9uZwkweGZmZmZlZDBlLDB4NjBmZmZmZmYsMHhlZDYyNjBmZiwweGZmZmZlZDJlCisJLmxvbmcJMHgyZDQwZmY1YywweDQyNDExMjJlLDB4ZmY0ZmU3MDksMHg4MjJlZmY0ZQorCS5sb25nCTB4NjYwMDAyN2MsMHgzZDY5MDAwMCwweGZmOTAyZDY5LDB4MDAwNGZmOTQKKwkubG9uZwkweDJkNjkwMDA4LDB4ZmY5ODNkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0CisJLmxvbmcJMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4NjFmZjAwMDAsMHgwZTU4MmYwMAorCS5sb25nCTB4NjFmZjAwMDAsMHgwZWZjNDQ5NywweGQxOTczMjJlLDB4ZmY1ZWVjMDkKKwkubG9uZwkweDIwMWYwYzgwLDB4ZmZmZmMwMDEsMHg2ZjAwMDA2NCwweDBjODAwMDAwCisJLmxvbmcJMHgzZmZmNjcwMCwweDAxYjY2ZTAwLDB4MDEwMGYyMmUsMHhkMDgwZmY5MAorCS5sb25nCTB4ZjIyZTkwMDAsMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUKKwkubG9uZwkweDQ4MjRmZjg0LDB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg4M2FlZmY2NCwweGYyMmVmMDgwLDB4ZmY4NDJmMDIsMHgzMjJlZmY4NAorCS5sb25nCTB4MjQwMTAyODEsMHgwMDAwN2ZmZiwweDAyNDI4MDAwLDB4OTI4MDgyNDIKKwkubG9uZwkweDNkNDFmZjg0LDB4MjQxZmYyMmUsMHhkMDgwZmY4NCwweDRlNzVmMjJlCisJLmxvbmcJMHhkMDgwZmY5MCwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHg0ODI0ZmY4NCwweGYyMDFhODAwLDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ODNhZWZmNjQsMHhmMjI3ZTAwMSwweDMyMTdkZmZjCisJLmxvbmcJMHgwMDAwMDAwYywweDAyODEwMDAwLDB4N2ZmZjkyODAsMHgwYzgxMDAwMAorCS5sb25nCTB4N2ZmZjZkOTAsMHgwMDZlMTA0OCwweGZmNjYxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMTM2NjIwLDB4MDgyZTAwMDMsMHhmZjY0NTZjMSwweDIwMmVmZjVjCisJLmxvbmcJMHgwMjAwMDAzMCwweDYxZmYwMDAwLDB4MzkzNjgxMmUsMHhmZjY0ZjIxMAorCS5sb25nCTB4ZDA4MDRlNzUsMHhmMjJlZjA4MCwweGZmODQyZjAyLDB4MzIyZWZmODQKKwkubG9uZwkweDI0MDEwMjgxLDB4MDAwMDdmZmYsMHgwMjQyODAwMCwweDkyODAwNDgxCisJLmxvbmcJMHgwMDAwNjAwMCwweDAyNDE3ZmZmLDB4ODI0MjNkNDEsMHhmZjg0MjQxZgorCS5sb25nCTB4ZjIyZWQwNDAsMHhmZjg0NjBhYywweDA4ZWUwMDAzLDB4ZmY2NmYyMmUKKwkubG9uZwkweGQwODBmZjkwLDB4ZjIzYzkwMDAsMHgwMDAwMDAxMCwweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0ODI0LDB4ZmY4NGYyMDEsMHhhODAwZjIzYworCS5sb25nCTB4OTAwMDAwMDAsMHgwMDAwODNhZSwweGZmNjQxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMGI2NjIwLDB4ZjIyZWYwODAsMHhmZjg0NDFlZSwweGZmODQyMjJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDAzODMwLDB4ODEyZWZmNjQsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY4NDRlNzUsMHhmMjJlZDA0MCwweGZmOTBmMjJlLDB4OTAwMGZmNWMKKwkubG9uZwkweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDhhNCwweGZmODRmMjNjCisJLmxvbmcJMHg5MDAwMDAwMCwweDAwMDBmMjJlLDB4ZjA0MGZmODQsMHgyZjAyMzIyZQorCS5sb25nCTB4ZmY4NDI0MDEsMHgwMjgxMDAwMCwweDdmZmYwMjQyLDB4ODAwMDkyODAKKwkubG9uZwkweDA2ODEwMDAwLDB4NjAwMDAyNDEsMHg3ZmZmODI0MiwweDNkNDFmZjg0CisJLmxvbmcJMHgyNDFmZjIyZSwweGQwNDBmZjg0LDB4NjA4YWYyMmUsMHhkMDgwZmY5MAorCS5sb25nCTB4ZjIyZTkwMDAsMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUKKwkubG9uZwkweDQ4MjRmZjg0LDB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg4M2FlZmY2NCwweGYyMDAwMDk4LDB4ZjIzYzU4YjgsMHgwMDAxZjI5MgorCS5sb25nCTB4ZmU0NGYyOTQsMHhmZjE0ZjIyZSwweGQwNDBmZjkwLDB4NDI4MTAwMDEKKwkubG9uZwkweDAwMTBmMjAxLDB4OTAwMGYyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjJlCisJLmxvbmcJMHg0OGE0ZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHhmMjAwMDQ5OAorCS5sb25nCTB4ZjIzYzU4YjgsMHgwMDAxZjI5MywweGZlMGM2MDAwLDB4ZmVkYzMyM2IKKwkubG9uZwkweDEyMGE0ZWZiLDB4MTAwNjRhZmMsMHgwMDMwZmQ3YSwweDAwNzIwMDc4CisJLmxvbmcJMHgwMDYwZmQ3YSwweDAwNjYwMDAwLDB4MDAwMDAwNzgsMHgwMDZjMDA3OAorCS5sb25nCTB4MDA2MDAwNzgsMHgwMDY2MDAwMCwweDAwMDAwMDdlLDB4MDA3ZTAwNmMKKwkubG9uZwkweDAwNjAwMDdlLDB4MDA2NjAwMDAsMHgwMDAwMDA2MCwweDAwNjAwMDYwCisJLmxvbmcJMHgwMDYwMDA2MCwweDAwNjYwMDAwLDB4MDAwMGZkN2EsMHgwMDcyMDA3OAorCS5sb25nCTB4MDA2MGZkN2EsMHgwMDY2MDAwMCwweDAwMDAwMDY2LDB4MDA2NjAwNjYKKwkubG9uZwkweDAwNjYwMDY2LDB4MDA2NjAwMDAsMHgwMDAwNjBmZiwweDAwMDAwYzdjCisJLmxvbmcJMHg2MGZmMDAwMCwweDBjNzY2MGZmLDB4MDAwMDBjZjQsMHg2MGZmZmZmZgorCS5sb25nCTB4ZjBjZTYwZmYsMHhmZmZmZjA5YywweDYwZmZmZmZmLDB4ZjBmNDAyMDAKKwkubG9uZwkweDAwMzAwMDAwLDB4MDA0MDYwMDgsMHgwMjAwMDAzMCwweDAwMDAwMDgwCisJLmxvbmcJMHgyZDQwZmY1YywweDQyNDExMjJlLDB4ZmY0ZmU3MDksMHg4MjJlZmY0ZQorCS5sb25nCTB4NjYwMDAyNGMsMHg2MWZmMDAwMCwweDBhNWNmMjJlLDB4ZDA4MGZmOTAKKwkubG9uZwkweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlOTAwMCwweGZmNWNmMjJlCisJLmxvbmcJMHg0ODIyZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHhmMjAxYTgwMAorCS5sb25nCTB4ODNhZWZmNjQsMHhmMjgxMDAzYywweDJmMDJmMjI3LDB4ZTAwMTMyMmUKKwkubG9uZwkweGZmNWVlYzA5LDB4MzQxNzAyODIsMHgwMDAwN2ZmZiwweDk0ODBiNGJiCisJLmxvbmcJMHgxNDI0NmMzOCwweGI0YmIxNDJhLDB4NmQwMDAwYjgsMHg2NzAwMDE4NAorCS5sb25nCTB4MzIxNzAyNDEsMHg4MDAwODI0MiwweDNlODFmMjFmLDB4ZDA4MDI0MWYKKwkubG9uZwkweDRlNzU0ZTc1LDB4MDAwMDdmZmYsMHgwMDAwNDA3ZiwweDAwMDA0M2ZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAzZjgxLDB4MDAwMDNjMDEsMHgwMGFlMDAwMAorCS5sb25nCTB4MTA0OGZmNjQsMHgxMjJlZmY2MiwweDAyMDEwMDEzLDB4NjYyNGRmZmMKKwkubG9uZwkweDAwMDAwMDBjLDB4MDgyZTAwMDMsMHhmZjY0NTZjMSwweDIwMmVmZjVjCisJLmxvbmcJMHg2MWZmMDAwMCwweDM2NmE4MTJlLDB4ZmY2NGYyMTAsMHhkMDgwMjQxZgorCS5sb25nCTB4NGU3NTEyMmUsMHhmZjVjMDIwMSwweDAwYzA2NjFhLDB4MzIxNzAyNDEKKwkubG9uZwkweDgwMDAwNDgyLDB4MDAwMDYwMDAsMHgwMjQyN2ZmZiwweDgyNDIzZTgxCisJLmxvbmcJMHhmMjFmZDA0MCwweDYwYmVmMjJlLDB4ZDA4MGZmOTAsMHgyMjJlZmY1YworCS5sb25nCTB4MDIwMTAwMzAsMHhmMjAxOTAwMCwweGYyMmU0ODIyLDB4ZmY4NGYyM2MKKwkubG9uZwkweDkwMDAwMDAwLDB4MDAwMGRmZmMsMHgwMDAwMDAwYywweGYyMjdlMDAxCisJLmxvbmcJMHg2MGJhMDhlZSwweDAwMDNmZjY2LDB4ZGZmYzAwMDAsMHgwMDBjZjIyZQorCS5sb25nCTB4ZDA4MGZmOTAsMHhmMjNjOTAwMCwweDAwMDAwMDEwLDB4ZjIzYzg4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIyZTQ4MjIsMHhmZjg0ZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIwMSwweGE4MDA4M2FlLDB4ZmY2NDEyMmUsMHhmZjYyMDIwMQorCS5sb25nCTB4MDAwYjY2MjIsMHhmMjJlZjA4MCwweGZmODQ0MWVlLDB4ZmY4NDIyMmUKKwkubG9uZwkweGZmNWM2MWZmLDB4MDAwMDM0YmEsMHg4MTJlZmY2NCwweGYyMmVkMDgwCisJLmxvbmcJMHhmZjg0MjQxZiwweDRlNzVmMjJlLDB4ZDA0MGZmOTAsMHgyMjJlZmY1YworCS5sb25nCTB4MDIwMTAwYzAsMHg2NjRlZjIyZSwweDkwMDBmZjVjLDB4ZjIzYzg4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIyZTQ4YTIsMHhmZjg0ZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIyZSwweGYwNDBmZjg0LDB4MzIyZWZmODQsMHgyNDAxMDI4MQorCS5sb25nCTB4MDAwMDdmZmYsMHgwMjQyODAwMCwweDkyODAwNjgxLDB4MDAwMDYwMDAKKwkubG9uZwkweDAyNDE3ZmZmLDB4ODI0MjNkNDEsMHhmZjg0ZjIyZSwweGQwNDBmZjg0CisJLmxvbmcJMHg2MDAwZmY4MiwweDIyMmVmZjVjLDB4MDIwMTAwMzAsMHhmMjAxOTAwMAorCS5sb25nCTB4NjBhYTIyMmUsMHhmZjVjMDIwMSwweDAwYzA2NzAwLDB4ZmU3NDIyMmYKKwkubG9uZwkweDAwMDQwYzgxLDB4ODAwMDAwMDAsMHg2NjAwZmU2NiwweDRhYWYwMDA4CisJLmxvbmcJMHg2NjAwZmU1ZSwweDA4MmUwMDAxLDB4ZmY2NjY3MDAsMHhmZTU0ZjIyZQorCS5sb25nCTB4ZDA0MGZmOTAsMHgyMjJlZmY1YywweDAyMDEwMGMwLDB4MDAwMTAwMTAKKwkubG9uZwkweGYyMDE5MDAwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0OGEyCisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDAsMHgwMDE4ZjIwMAorCS5sb25nCTB4MDQ5OGYyMDAsMHgwNDM4ZjI5MiwweGZlY2E2MDAwLDB4ZmUxNDMyM2IKKwkubG9uZwkweDEyMGE0ZWZiLDB4MTAwNjRhZmMsMHgwMDMwZmRhYSwweDAwZTQwMTFjCisJLmxvbmcJMHgwMDYwZmRhYSwweDAwNjYwMDAwLDB4MDAwMDAwYmMsMHgwMDZjMDExYworCS5sb25nCTB4MDA2MDAwYmMsMHgwMDY2MDAwMCwweDAwMDAwMTMwLDB4MDEzMDAxMGMKKwkubG9uZwkweDAwNjAwMTMwLDB4MDA2NjAwMDAsMHgwMDAwMDA2MCwweDAwNjAwMDYwCisJLmxvbmcJMHgwMDYwMDA2MCwweDAwNjYwMDAwLDB4MDAwMGZkYWEsMHgwMGU0MDExYworCS5sb25nCTB4MDA2MGZkYWEsMHgwMDY2MDAwMCwweDAwMDAwMDY2LDB4MDA2NjAwNjYKKwkubG9uZwkweDAwNjYwMDY2LDB4MDA2NjAwMDAsMHgwMDAwNjBmZiwweDAwMDAwOTdjCisJLmxvbmcJMHg2MGZmMDAwMCwweDA5NzYxMDI4LDB4MDAwMDEyMjksMHgwMDAwYjEwMQorCS5sb25nCTB4NmIwMDAwMTYsMHg0YTAwNmIyZSwweGYyM2M0NDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDFkN2MwMDA0LDB4ZmY2NDRlNzUsMHgxMjJlZmY1ZiwweDAyMDEwMDMwCisJLmxvbmcJMHgwYzAxMDAyMCwweDY3MTBmMjNjLDB4NDQwMDAwMDAsMHgwMDAwMWQ3YworCS5sb25nCTB4MDAwNGZmNjQsMHg0ZTc1ZjIzYywweDQ0MDA4MDAwLDB4MDAwMDFkN2MKKwkubG9uZwkweDAwMGNmZjY0LDB4NGU3NTNkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0CisJLmxvbmcJMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4NjFmZjAwMDAsMHgwODI4NDI2ZQorCS5sb25nCTB4ZmY5MDQyYWUsMHhmZjk0NDJhZSwweGZmOTg2MDAwLDB4ZmNjZTNkNjkKKwkubG9uZwkweDAwMDBmZjkwLDB4MmQ2OTAwMDQsMHhmZjk0MmQ2OSwweDAwMDhmZjk4CisJLmxvbmcJMHg2MWZmMDAwMCwweDA4YWM0MjZlLDB4ZmY4NDQyYWUsMHhmZjg4NDJhZQorCS5sb25nCTB4ZmY4YzYwMDAsMHhmY2E2MTAyOCwweDAwMDAxMjI5LDB4MDAwMGIzMDAKKwkubG9uZwkweDZiZmYwMDAwLDB4MDk0YWYyMjgsMHhkMDgwMDAwMCwweDRhMjgwMDAwCisJLmxvbmcJMHg2YTFjMWQ3YywweDAwMGFmZjY0LDB4NGU3NWYyMjksMHhkMDgwMDAwMAorCS5sb25nCTB4NGEyOTAwMDAsMHg2YTA4MWQ3YywweDAwMGFmZjY0LDB4NGU3NTFkN2MKKwkubG9uZwkweDAwMDJmZjY0LDB4NGU3NTAyMDAsMHgwMDMwMDAwMCwweDAwNDA2MDA4CisJLmxvbmcJMHgwMjAwMDAzMCwweDAwMDAwMDgwLDB4MmQ0MGZmNWMsMHg0MjQxMTIyZQorCS5sb25nCTB4ZmY0ZmU3MDksMHg4MjJlZmY0ZSwweDY2MDAwMjRjLDB4NjFmZjAwMDAKKwkubG9uZwkweDA2OTRmMjJlLDB4ZDA4MGZmOTAsMHhmMjNjODgwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhmMjJlOTAwMCwweGZmNWNmMjJlLDB4NDgyOGZmODQsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjAxYTgwMCwweDgzYWVmZjY0LDB4ZjI4MTAwM2MKKwkubG9uZwkweDJmMDJmMjI3LDB4ZTAwMTMyMmUsMHhmZjVlZWMwOSwweDM0MTcwMjgyCisJLmxvbmcJMHgwMDAwN2ZmZiwweDk0ODBiNGJiLDB4MTQyNDZjMzgsMHhiNGJiMTQyYQorCS5sb25nCTB4NmQwMDAwYjgsMHg2NzAwMDE4NCwweDMyMTcwMjQxLDB4ODAwMDgyNDIKKwkubG9uZwkweDNlODFmMjFmLDB4ZDA4MDI0MWYsMHg0ZTc1NGU3NSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMDAwNDA3ZiwweDAwMDA0M2ZmLDB4MDAwMDAwMDAsMHgwMDAwM2Y4MQorCS5sb25nCTB4MDAwMDNjMDEsMHgwMGFlMDAwMCwweDEwNDhmZjY0LDB4MTIyZWZmNjIKKwkubG9uZwkweDAyMDEwMDEzLDB4NjYyNGRmZmMsMHgwMDAwMDAwYywweDA4MmUwMDAzCisJLmxvbmcJMHhmZjY0NTZjMSwweDIwMmVmZjVjLDB4NjFmZjAwMDAsMHgzMmEyODEyZQorCS5sb25nCTB4ZmY2NGYyMTAsMHhkMDgwMjQxZiwweDRlNzUxMjJlLDB4ZmY1YzAyMDEKKwkubG9uZwkweDAwYzA2NjFhLDB4MzIxNzAyNDEsMHg4MDAwMDQ4MiwweDAwMDA2MDAwCisJLmxvbmcJMHgwMjQyN2ZmZiwweDgyNDIzZTgxLDB4ZjIxZmQwNDAsMHg2MGJlZjIyZQorCS5sb25nCTB4ZDA4MGZmOTAsMHgyMjJlZmY1YywweDAyMDEwMDMwLDB4ZjIwMTkwMDAKKwkubG9uZwkweGYyMmU0ODI4LDB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBkZmZjCisJLmxvbmcJMHgwMDAwMDAwYywweGYyMjdlMDAxLDB4NjBiYTA4ZWUsMHgwMDAzZmY2NgorCS5sb25nCTB4ZGZmYzAwMDAsMHgwMDBjZjIyZSwweGQwODBmZjkwLDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDEwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0ODI4CisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEsMHhhODAwODNhZQorCS5sb25nCTB4ZmY2NDEyMmUsMHhmZjYyMDIwMSwweDAwMGI2NjIyLDB4ZjIyZWYwODAKKwkubG9uZwkweGZmODQ0MWVlLDB4ZmY4NDIyMmUsMHhmZjVjNjFmZiwweDAwMDAzMGYyCisJLmxvbmcJMHg4MTJlZmY2NCwweGYyMmVkMDgwLDB4ZmY4NDI0MWYsMHg0ZTc1ZjIyZQorCS5sb25nCTB4ZDA0MGZmOTAsMHgyMjJlZmY1YywweDAyMDEwMGMwLDB4NjY0ZWYyMmUKKwkubG9uZwkweDkwMDBmZjVjLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0OGE4CisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMmUsMHhmMDQwZmY4NAorCS5sb25nCTB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmLDB4MDI0MjgwMDAKKwkubG9uZwkweDkyODAwNjgxLDB4MDAwMDYwMDAsMHgwMjQxN2ZmZiwweDgyNDIzZDQxCisJLmxvbmcJMHhmZjg0ZjIyZSwweGQwNDBmZjg0LDB4NjAwMGZmODIsMHgyMjJlZmY1YworCS5sb25nCTB4MDIwMTAwMzAsMHhmMjAxOTAwMCwweDYwYWEyMjJlLDB4ZmY1YzAyMDEKKwkubG9uZwkweDAwYzA2NzAwLDB4ZmU3NDIyMmYsMHgwMDA0MGM4MSwweDgwMDAwMDAwCisJLmxvbmcJMHg2NjAwZmU2NiwweDRhYWYwMDA4LDB4NjYwMGZlNWUsMHgwODJlMDAwMQorCS5sb25nCTB4ZmY2NjY3MDAsMHhmZTU0ZjIyZSwweGQwNDBmZjkwLDB4MjIyZWZmNWMKKwkubG9uZwkweDAyMDEwMGMwLDB4MDAwMTAwMTAsMHhmMjAxOTAwMCwweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0OGE4LDB4ZmY4NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyMDAsMHgwMDE4ZjIwMCwweDA0OThmMjAwLDB4MDQzOGYyOTIKKwkubG9uZwkweGZlY2E2MDAwLDB4ZmUxNDMyM2IsMHgxMjBhNGVmYiwweDEwMDY0YWZjCisJLmxvbmcJMHgwMDMwZmRhYSwweDAwZTIwMTFhLDB4MDA2MGZkYWEsMHgwMDY2MDAwMAorCS5sb25nCTB4MDAwMDAwYmEsMHgwMDZjMDExYSwweDAwNjAwMGJhLDB4MDA2NjAwMDAKKwkubG9uZwkweDAwMDAwMTMwLDB4MDEzMDAxMGEsMHgwMDYwMDEzMCwweDAwNjYwMDAwCisJLmxvbmcJMHgwMDAwMDA2MCwweDAwNjAwMDYwLDB4MDA2MDAwNjAsMHgwMDY2MDAwMAorCS5sb25nCTB4MDAwMGZkYWEsMHgwMGUyMDExYSwweDAwNjBmZGFhLDB4MDA2NjAwMDAKKwkubG9uZwkweDAwMDAwMDY2LDB4MDA2NjAwNjYsMHgwMDY2MDA2NiwweDAwNjYwMDAwCisJLmxvbmcJMHgwMDAwNjBmZiwweDAwMDAwNWI0LDB4NjBmZjAwMDAsMHgwNWFlMTAyOAorCS5sb25nCTB4MDAwMDEyMjksMHgwMDAwYjMwMCwweDZhMTQ0YTAwLDB4NmIyZWYyM2MKKwkubG9uZwkweDQ0MDAwMDAwLDB4MDAwMDFkN2MsMHgwMDA0ZmY2NCwweDRlNzUxMjJlCisJLmxvbmcJMHhmZjVmMDIwMSwweDAwMzAwYzAxLDB4MDAyMDY3MTAsMHhmMjNjNDQwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgxZDdjMDAwNCwweGZmNjQ0ZTc1LDB4ZjIzYzQ0MDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MWQ3YzAwMGMsMHhmZjY0NGU3NSwweDNkNjgwMDAwCisJLmxvbmcJMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgsMHhmZjhjNjFmZgorCS5sb25nCTB4MDAwMDA0NjIsMHg0MjZlZmY5MCwweDQyYWVmZjk0LDB4NDJhZWZmOTgKKwkubG9uZwkweDYwMDBmY2QwLDB4M2Q2OTAwMDAsMHhmZjkwMmQ2OSwweDAwMDRmZjk0CisJLmxvbmcJMHgyZDY5MDAwOCwweGZmOTg2MWZmLDB4MDAwMDA0ZTYsMHg0MjZlZmY4NAorCS5sb25nCTB4NDJhZWZmODgsMHg0MmFlZmY4YywweDYwMDBmY2E4LDB4MTAyODAwMDAKKwkubG9uZwkweDEyMjkwMDAwLDB4YjMwMDZhZmYsMHgwMDAwMDU4NCwweGYyMjhkMDgwCisJLmxvbmcJMHgwMDAwZjIwMCwweDAwMWFmMjkzLDB4MDAxZTFkN2MsMHgwMDBhZmY2NAorCS5sb25nCTB4NGU3NWYyMjksMHhkMDgwMDAwMCwweDRhMjkwMDAwLDB4NmEwODFkN2MKKwkubG9uZwkweDAwMGFmZjY0LDB4NGU3NTFkN2MsMHgwMDAyZmY2NCwweDRlNzUwMjAwCisJLmxvbmcJMHgwMDMwMDAwMCwweDAwNDA2MDA4LDB4MDIwMDAwMzAsMHgwMDAwMDA4MAorCS5sb25nCTB4MmQ0MGZmNWMsMHg0MjQxMTIyZSwweGZmNGU2NjAwLDB4MDI3NDRhMjgKKwkubG9uZwkweDAwMDA2YmZmLDB4MDAwMDA1MjgsMHgwMjAwMDBjMCwweDY2NDhmMjJlCisJLmxvbmcJMHg5MDAwZmY1YywweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjEwNDgwNAorCS5sb25nCTB4ZjIwMWE4MDAsMHg4M2FlZmY2NCwweDRlNzU0YTI4LDB4MDAwMDZiZmYKKwkubG9uZwkweDAwMDAwNGZjLDB4MDIwMDAwYzAsMHg2NjFjM2Q2OCwweDAwMDBmZjg0CisJLmxvbmcJMHgyZDY4MDAwNCwweGZmODgyZDY4LDB4MDAwOGZmOGMsMHg2MWZmMDAwMAorCS5sb25nCTB4MDNhZTYwMDAsMHgwMDNlMGMwMCwweDAwNDA2NjAwLDB4MDA4NDNkNjgKKwkubG9uZwkweDAwMDBmZjg0LDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OCwweDAwMDhmZjhjCisJLmxvbmcJMHg2MWZmMDAwMCwweDAzOGEwYzgwLDB4MDAwMDAwN2UsMHg2NzAwMDA5OAorCS5sb25nCTB4NmUwMDAwOWUsMHgwYzgwZmZmZiwweGZmODA2NzAwLDB4MDFhNDZkMDAKKwkubG9uZwkweDAxMjBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjCisJLmxvbmcJMHhmMjJlNDgwNCwweGZmODRmMjAxLDB4YTgwMGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMDgzYWUsMHhmZjY0MmYwMiwweGYyMmVmMDgwLDB4ZmY4NDMyMmUKKwkubG9uZwkweGZmODQyNDAxLDB4MDI4MTAwMDAsMHg3ZmZmOTI4MCwweDAyNDI4MDAwCisJLmxvbmcJMHg4NDQxM2Q0MiwweGZmODQyNDFmLDB4ZjIyZWQwODAsMHhmZjg0NGU3NQorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM2MWZmLDB4MDAwMDAzMDgsMHgwYzgwMDAwMCwweDAzZmU2NzAwCisJLmxvbmcJMHgwMDE2NmUxYywweDBjODBmZmZmLDB4ZmMwMDY3MDAsMHgwMTI0NmQwMAorCS5sb25nCTB4MDBhMDYwMDAsMHhmZjdlMDgyZSwweDAwMDBmZjg1LDB4NjYwMGZmNzQKKwkubG9uZwkweDA4ZWUwMDAzLDB4ZmY2NmYyM2MsMHg5MDAwMDAwMCwweDAwMTBmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgwNGZmODQsMHhmMjAxYTgwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4MTIyZWZmNjIKKwkubG9uZwkweDAyMDEwMDBiLDB4NjYyMGYyMmUsMHhmMDgwZmY4NCwweDQxZWVmZjg0CisJLmxvbmcJMHgyMjJlZmY1YywweDYxZmYwMDAwLDB4MmQyODgxMmUsMHhmZjY0ZjIyZQorCS5sb25nCTB4ZDA4MGZmODQsMHg0ZTc1MmQ2ZSwweGZmODhmZjk0LDB4MmQ2ZWZmOGMKKwkubG9uZwkweGZmOTgzMjJlLDB4ZmY4NDJmMDIsMHgyNDAxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMjQyODAwMCwweDkyODAwNjgxLDB4MDAwMDYwMDAsMHgwMjQxN2ZmZgorCS5sb25nCTB4ODI0MjNkNDEsMHhmZjkwZjIyZSwweGQwNDBmZjkwLDB4MjQxZjYwYTYKKwkubG9uZwkweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlOTAwMCwweGZmNWNmMjJlCisJLmxvbmcJMHg0ODA0ZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHhmMjAxYTgwMAorCS5sb25nCTB4ODNhZWZmNjQsMHgwMGFlMDAwMCwweDEwNDhmZjY0LDB4MTIyZWZmNjIKKwkubG9uZwkweDAyMDEwMDEzLDB4NjYxYzA4MmUsMHgwMDAzZmY2NCwweDU2YzEyMDJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDAyZDk4LDB4ODEyZWZmNjQsMHhmMjEwZDA4MAorCS5sb25nCTB4NGU3NTJmMDIsMHgzMjJlZmY4NCwweDI0MDEwMjgxLDB4MDAwMDdmZmYKKwkubG9uZwkweDAyNDI4MDAwLDB4OTI4MDA0ODEsMHgwMDAwNjAwMCwweDAyNDE3ZmZmCisJLmxvbmcJMHg4MjQyM2Q0MSwweGZmODRmMjJlLDB4ZDA0MGZmODQsMHgyNDFmNjBiNgorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjg1NjYwMCwweGZmNzhmMjNjLDB4ODgwMDAwMDAKKwkubG9uZwkweDAwMDBmMjJlLDB4OTAwMGZmNWMsMHhmMjJlNDgwNCwweGZmODRmMjAxCisJLmxvbmcJMHhhODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMDgzYWUsMHhmZjY0ZjIwMAorCS5sb25nCTB4MDA4MGYyM2MsMHg1OGI4MDAwMSwweGYyOTNmZjZhLDB4NjAwMGZlNDgKKwkubG9uZwkweDBjMDEwMDA0LDB4NjcwMGZkYjQsMHgwYzAxMDAwMSwweDY3MTYwYzAxCisJLmxvbmcJMHgwMDAyNjczNiwweDBjMDEwMDA1LDB4NjdmZjAwMDAsMHgwMjM2NjBmZgorCS5sb25nCTB4MDAwMDAyNDQsMHg0YTI4MDAwMCwweDZiMTBmMjNjLDB4NDQwMDAwMDAKKwkubG9uZwkweDAwMDAxZDdjLDB4MDAwNGZmNjQsMHg0ZTc1ZjIzYywweDQ0MDA4MDAwCisJLmxvbmcJMHgwMDAwMWQ3YywweDAwMGNmZjY0LDB4NGU3NTRhMjgsMHgwMDAwNmJmZgorCS5sb25nCTB4MDAwMDAyNmMsMHhmMjI4ZDA4MCwweDAwMDAxZDdjLDB4MDAwMmZmNjQKKwkubG9uZwkweDRlNzUyZDY4LDB4MDAwNGZmODgsMHgyZDY5MDAwNCwweGZmOTQyZDY4CisJLmxvbmcJMHgwMDA4ZmY4YywweDJkNjkwMDA4LDB4ZmY5ODMwMjgsMHgwMDAwMzIyOQorCS5sb25nCTB4MDAwMDNkNDAsMHhmZjg0M2Q0MSwweGZmOTAwMjQwLDB4N2ZmZjAyNDEKKwkubG9uZwkweDdmZmYzZDQwLDB4ZmY1NDNkNDEsMHhmZjU2YjA0MSwweDZjZmYwMDAwCisJLmxvbmcJMHgwMDVjNjFmZiwweDAwMDAwMTVhLDB4MmYwMDBjMmUsMHgwMDA0ZmY0ZQorCS5sb25nCTB4NjYxMDQxZWUsMHhmZjg0NjFmZiwweDAwMDAyOTQwLDB4NDQ0MDNkNDAKKwkubG9uZwkweGZmNTQzMDJlLDB4ZmY1NjA0NDAsMHgwMDQyYjA2ZSwweGZmNTQ2YzFhCisJLmxvbmcJMHgzMDJlZmY1NCwweGQwNmYwMDAyLDB4MzIyZWZmODQsMHgwMjQxODAwMAorCS5sb25nCTB4ODA0MTNkNDAsMHhmZjg0MjAxZiwweDRlNzUwMjZlLDB4ODAwMGZmODQKKwkubG9uZwkweDA4ZWUwMDAwLDB4ZmY4NTIwMWYsMHg0ZTc1NjFmZiwweDAwMDAwMDU2CisJLmxvbmcJMHgyZjAwMGMyZSwweDAwMDRmZjRmLDB4NjYxMDQxZWUsMHhmZjkwNjFmZgorCS5sb25nCTB4MDAwMDI4ZTgsMHg0NDQwM2Q0MCwweGZmNTYzMDJlLDB4ZmY1NDA0NDAKKwkubG9uZwkweDAwNDJiMDZlLDB4ZmY1NjZjMWEsMHgzMDJlZmY1NiwweGQwNmYwMDAyCisJLmxvbmcJMHgzMjJlZmY5MCwweDAyNDE4MDAwLDB4ODA0MTNkNDAsMHhmZjkwMjAxZgorCS5sb25nCTB4NGU3NTAyNmUsMHg4MDAwZmY5MCwweDA4ZWUwMDAwLDB4ZmY5MTIwMWYKKwkubG9uZwkweDRlNzUzMjJlLDB4ZmY4NDMwMDEsMHgwMjgxMDAwMCwweDdmZmYwMjQwCisJLmxvbmcJMHg4MDAwMDA0MCwweDNmZmYzZDQwLDB4ZmY4NDBjMmUsMHgwMDA0ZmY0ZQorCS5sb25nCTB4NjcwYTIwM2MsMHgwMDAwM2ZmZiwweDkwODE0ZTc1LDB4NDFlZWZmODQKKwkubG9uZwkweDYxZmYwMDAwLDB4Mjg3NjQ0ODAsMHgyMjAwNjBlNiwweDBjMmUwMDA0CisJLmxvbmcJMHhmZjRlNjczYSwweDMyMmVmZjg0LDB4MDI4MTAwMDAsMHg3ZmZmMDI2ZQorCS5sb25nCTB4ODAwMGZmODQsMHgwODAxMDAwMCwweDY3MTIwMDZlLDB4M2ZmZmZmODQKKwkubG9uZwkweDIwM2MwMDAwLDB4M2ZmZjkwODEsMHhlMjgwNGU3NSwweDAwNmUzZmZlCisJLmxvbmcJMHhmZjg0MjAzYywweDAwMDAzZmZlLDB4OTA4MWUyODAsMHg0ZTc1NDFlZQorCS5sb25nCTB4ZmY4NDYxZmYsMHgwMDAwMjgyNCwweDA4MDAwMDAwLDB4NjcxMDAwNmUKKwkubG9uZwkweDNmZmZmZjg0LDB4MDY4MDAwMDAsMHgzZmZmZTI4MCwweDRlNzUwMDZlCisJLmxvbmcJMHgzZmZlZmY4NCwweDA2ODAwMDAwLDB4M2ZmZWUyODAsMHg0ZTc1MzIyZQorCS5sb25nCTB4ZmY5MDMwMDEsMHgwMjgxMDAwMCwweDdmZmYwMjQwLDB4ODAwMDAwNDAKKwkubG9uZwkweDNmZmYzZDQwLDB4ZmY5MDBjMmUsMHgwMDA0ZmY0ZiwweDY3MGEyMDNjCisJLmxvbmcJMHgwMDAwM2ZmZiwweDkwODE0ZTc1LDB4NDFlZWZmOTAsMHg2MWZmMDAwMAorCS5sb25nCTB4MjdjYTQ0ODAsMHgyMjAwNjBlNiwweDBjMmUwMDA1LDB4ZmY0ZjY3MzIKKwkubG9uZwkweDBjMmUwMDAzLDB4ZmY0ZjY3M2UsMHgwYzJlMDAwMywweGZmNGU2NzE0CisJLmxvbmcJMHgwOGVlMDAwNiwweGZmNzAwMGFlLDB4MDEwMDQwODAsMHhmZjY0NDFlZQorCS5sb25nCTB4ZmY2YzYwNDIsMHgwMGFlMDEwMCwweDAwMDBmZjY0LDB4NDFlZWZmNmMKKwkubG9uZwkweDYwMzQwMGFlLDB4MDEwMDQwODAsMHhmZjY0MDhlZSwweDAwMDZmZjdjCisJLmxvbmcJMHg0MWVlZmY3OCwweDYwMjA0MWVlLDB4ZmY3ODBjMmUsMHgwMDA1ZmY0ZQorCS5sb25nCTB4NjZmZjAwMDAsMHgwMDBjMDBhZSwweDAwMDA0MDgwLDB4ZmY2NDAwYWUKKwkubG9uZwkweDAxMDAwMDAwLDB4ZmY2NDA4MjgsMHgwMDA3MDAwMCwweDY3MDgwMGFlCisJLmxvbmcJMHgwODAwMDAwMCwweGZmNjRmMjEwLDB4ZDA4MDRlNzUsMHgwMGFlMDEwMAorCS5sb25nCTB4MjA4MGZmNjQsMHhmMjNiZDA4MCwweDAxNzAwMDAwLDB4MDAwODRlNzUKKwkubG9uZwkweDdmZmYwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDJkNDBmZjU0CisJLmxvbmcJMHgzMDJlZmY0MiwweDQyODExMjJlLDB4ZmY2NGUwOTksMHhmMjAxODgwMAorCS5sb25nCTB4MzIzYjAyMDYsMHg0ZWZiMTAwMiwweDAyMzQwMDQwLDB4MDJmODAzMGMKKwkubG9uZwkweDAzMjAwMzM0LDB4MDM0ODAzNWMsMHgwMzY2MDM1MiwweDAzM2UwMzJhCisJLmxvbmcJMHgwMzE2MDMwMiwweDAwNGEwMjM4LDB4MDIzYTAyNzYsMHgwMDU0MDA5ZQorCS5sb25nCTB4MDEwMjAxNGMsMHgwMWIyMDFmYywweDAyMTgwMWQ4LDB4MDE4YzAxMjgKKwkubG9uZwkweDAwZGUwMDdhLDB4MDJiNjAyNWEsMHhmMjgxMDAwNiwweDYwMDAwMzJhCisJLmxvbmcJMHg0ZTc1ZjI4ZSwweDAwMDY2MDAwLDB4MDMyMDRlNzUsMHhmMjkyMDAyMgorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAzMTAwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDMyYywweDYwMDAwMmZhCisJLmxvbmcJMHg0ZTc1ZjI5ZCwweDAwMDY2MDAwLDB4MDJmMDA4MmUsMHgwMDAwZmY2NAorCS5sb25nCTB4NjcxMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIKKwkubG9uZwkweDY2MDAwMzA0LDB4NGU3NWYyOTMsMHgwMDIyMDgyZSwweDAwMDBmZjY0CisJLmxvbmcJMHg2NzAwMDJjNiwweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNworCS5sb25nCTB4ZmY2MjY2MDAsMHgwMmUyNjAwMCwweDAyYjAwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MTIwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyCisJLmxvbmcJMHg2NjAwMDJjNCwweDRlNzVmMjljLDB4MDAwNjYwMDAsMHgwMjhjMDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzEyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUKKwkubG9uZwkweDAwMDdmZjYyLDB4NjYwMDAyYTAsMHg0ZTc1ZjI5NCwweDAwMjIwODJlCisJLmxvbmcJMHgwMDAwZmY2NCwweDY3MDAwMjYyLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAyN2U2MDAwLDB4MDI0YzRlNzUKKwkubG9uZwkweGYyOWIwMDA2LDB4NjAwMDAyNDIsMHgwODJlMDAwMCwweGZmNjQ2NzEyCisJLmxvbmcJMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcsMHhmZjYyNjYwMAorCS5sb25nCTB4MDI1NjRlNzUsMHhmMjk1MDAyMiwweDA4MmUwMDAwLDB4ZmY2NDY3MDAKKwkubG9uZwkweDAyMTgwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyCisJLmxvbmcJMHg2NjAwMDIzNCwweDYwMDAwMjAyLDB4MDgyZTAwMDAsMHhmZjY0NjcxMgorCS5sb25nCTB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAKKwkubG9uZwkweDAyMTY0ZTc1LDB4ZjI5YTAwMDYsMHg2MDAwMDFkZSwweDA4MmUwMDAwCisJLmxvbmcJMHhmZjY0NjcwMCwweDAwMTQwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZQorCS5sb25nCTB4MDAwN2ZmNjIsMHg2NjAwMDFmMCwweDRlNzVmMjk2LDB4MDAyMjA4MmUKKwkubG9uZwkweDAwMDBmZjY0LDB4NjcwMDAxYjIsMHgwMGFlMDAwMCwweDgwODBmZjY0CisJLmxvbmcJMHgwODJlMDAwNywweGZmNjI2NjAwLDB4MDFjZTYwMDAsMHgwMTljNGU3NQorCS5sb25nCTB4ZjI5OTAwMDYsMHg2MDAwMDE5MiwweDA4MmUwMDAwLDB4ZmY2NDY3MTIKKwkubG9uZwkweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwCisJLmxvbmcJMHgwMWE2NGU3NSwweGYyOTcwMDE4LDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAxOGU2MDAwLDB4MDE1YzRlNzUKKwkubG9uZwkweGYyOTgwMDA2LDB4NjAwMDAxNTIsMHgwMGFlMDAwMCwweDgwODBmZjY0CisJLmxvbmcJMHgwODJlMDAwNywweGZmNjI2NjAwLDB4MDE2ZTRlNzUsMHg2MDAwMDEzYQorCS5sb25nCTB4NGU3NTA4MmUsMHgwMDAwZmY2NCwweDY3MDAwMTJlLDB4MDBhZTAwMDAKKwkubG9uZwkweDgwODBmZjY0LDB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAxNGE2MDAwCisJLmxvbmcJMHgwMTE4MDgyZSwweDAwMDBmZjY0LDB4NjcxMjAwYWUsMHgwMDAwODA4MAorCS5sb25nCTB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMTJjLDB4NGU3NWYyOTEKKwkubG9uZwkweDAwMjIwODJlLDB4MDAwMGZmNjQsMHg2NzAwMDBlZSwweDAwYWUwMDAwCisJLmxvbmcJMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMTBhNjAwMAorCS5sb25nCTB4MDBkODA4MmUsMHgwMDAwZmY2NCwweDY3MTIwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDBlYywweDRlNzVmMjllCisJLmxvbmcJMHgwMDIyMDgyZSwweDAwMDBmZjY0LDB4NjcwMDAwYWUsMHgwMGFlMDAwMAorCS5sb25nCTB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwLDB4MDBjYTYwMDAKKwkubG9uZwkweDAwOTgwODJlLDB4MDAwMGZmNjQsMHg2NzAwMDAxNCwweDAwYWUwMDAwCisJLmxvbmcJMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMGFhNGU3NQorCS5sb25nCTB4ZjI4MjAwMDYsMHg2MDAwMDA3MiwweDRlNzVmMjhkLDB4MDAwNjYwMDAKKwkubG9uZwkweDAwNjg0ZTc1LDB4ZjI4MzAwMDYsMHg2MDAwMDA1ZSwweDRlNzVmMjhjCisJLmxvbmcJMHgwMDA2NjAwMCwweDAwNTQ0ZTc1LDB4ZjI4NDAwMDYsMHg2MDAwMDA0YQorCS5sb25nCTB4NGU3NWYyOGIsMHgwMDA2NjAwMCwweDAwNDA0ZTc1LDB4ZjI4NTAwMDYKKwkubG9uZwkweDYwMDAwMDM2LDB4NGU3NWYyOGEsMHgwMDA2NjAwMCwweDAwMmM0ZTc1CisJLmxvbmcJMHhmMjg2MDAwNiwweDYwMDAwMDIyLDB4NGU3NWYyODksMHgwMDA2NjAwMAorCS5sb25nCTB4MDAxODRlNzUsMHhmMjg3MDAwNiwweDYwMDAwMDBlLDB4NGU3NWYyODgKKwkubG9uZwkweDAwMDY2MDAwLDB4MDAwNDRlNzUsMHgxMjJlZmY0MSwweDAyNDEwMDA3CisJLmxvbmcJMHg2MWZmMDAwMCwweDFkNjY1MzQwLDB4NjFmZjAwMDAsMHgxZGQwMGM0MAorCS5sb25nCTB4ZmZmZjY2MDIsMHg0ZTc1MjAyZSwweGZmNTRkMGFlLDB4ZmY2ODU4ODAKKwkubG9uZwkweDJkNDAwMDA2LDB4NGU3NTFkN2MsMHgwMDAyZmY0YSwweDRlNzUzMDJlCisJLmxvbmcJMHhmZjQyNDI4MSwweDEyMmVmZjY0LDB4ZTA5OWYyMDEsMHg4ODAwMzIzYgorCS5sb25nCTB4MDIwNjRlZmIsMHgxMDAyMDIxZSwweDAwNDAwMmU0LDB4MDJmMDAyZmMKKwkubG9uZwkweDAzMDgwMzE0LDB4MDMyMDAzMjYsMHgwMzFhMDMwZSwweDAzMDIwMmY2CisJLmxvbmcJMHgwMmVhMDA0NiwweDAyMjAwMjI0LDB4MDI2MDAwNGMsMHgwMDkyMDBmOAorCS5sb25nCTB4MDEzZTAxYTQsMHgwMWVhMDIwMiwweDAxYzQwMTdlLDB4MDExODAwZDIKKwkubG9uZwkweDAwNmMwMmEyLDB4MDI0MGYyODEsMHgwMmVhNGU3NSwweGYyOGUwMmU0CisJLmxvbmcJMHg0ZTc1ZjI5MiwweDAyZGUwODJlLDB4MDAwMGZmNjQsMHg2NzEyMDBhZQorCS5sb25nCTB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAyY2MKKwkubG9uZwkweDRlNzVmMjlkLDB4MDAwNDRlNzUsMHgwODJlMDAwMCwweGZmNjQ2NzAwCisJLmxvbmcJMHgwMmIyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MgorCS5sb25nCTB4NjYwMDAyYTgsMHg2MDAwMDI5YywweGYyOTMwMDFlLDB4MDgyZTAwMDAKKwkubG9uZwkweGZmNjQ2NzEyLDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3CisJLmxvbmcJMHhmZjYyNjYwMCwweDAyODY0ZTc1LDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDI3MjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIKKwkubG9uZwkweDY2MDAwMjY4LDB4NjAwMDAyNWMsMHhmMjljMDAwNCwweDRlNzUwODJlCisJLmxvbmcJMHgwMDAwZmY2NCwweDY3MDAwMjRjLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAyNDI2MDAwLDB4MDIzNmYyOTQKKwkubG9uZwkweDAyMzIwODJlLDB4MDAwMGZmNjQsMHg2NzEyMDBhZSwweDAwMDA4MDgwCisJLmxvbmcJMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAyMjAsMHg0ZTc1ZjI5YgorCS5sb25nCTB4MDAwNDRlNzUsMHgwODJlMDAwMCwweGZmNjQ2NzAwLDB4MDIwNjAwYWUKKwkubG9uZwkweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMWZjCisJLmxvbmcJMHg2MDAwMDFmMCwweGYyOTUwMDFlLDB4MDgyZTAwMDAsMHhmZjY0NjcxMgorCS5sb25nCTB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAKKwkubG9uZwkweDAxZGE0ZTc1LDB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAxYzYwMGFlCisJLmxvbmcJMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDFiYworCS5sb25nCTB4NjAwMDAxYjAsMHhmMjlhMDAwNCwweDRlNzUwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MDAwMWEwLDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3CisJLmxvbmcJMHhmZjYyNjYwMCwweDAxOTY2MDAwLDB4MDE4YWYyOTYsMHgwMTg2MDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzEyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUKKwkubG9uZwkweDAwMDdmZjYyLDB4NjYwMDAxNzQsMHg0ZTc1ZjI5OSwweDAwMDQ0ZTc1CisJLmxvbmcJMHgwODJlMDAwMCwweGZmNjQ2NzAwLDB4MDE1YTAwYWUsMHgwMDAwODA4MAorCS5sb25nCTB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMTUwLDB4NjAwMDAxNDQKKwkubG9uZwkweGYyOTcwMTQwLDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3CisJLmxvbmcJMHhmZjYyNjYwMCwweDAxMzY0ZTc1LDB4ZjI5ODAwMDQsMHg0ZTc1MDBhZQorCS5sb25nCTB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAxMWMKKwkubG9uZwkweDYwMDAwMTEwLDB4NGU3NTYwMDAsMHgwMTBhMDgyZSwweDAwMDBmZjY0CisJLmxvbmcJMHg2NzEyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MgorCS5sb25nCTB4NjYwMDAwZjgsMHg0ZTc1MDgyZSwweDAwMDBmZjY0LDB4NjcwMDAwZTQKKwkubG9uZwkweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwCisJLmxvbmcJMHgwMGRhNjAwMCwweDAwY2VmMjkxLDB4MDAyMDA4MmUsMHgwMDAwZmY2NAorCS5sb25nCTB4NjcwMDAwMTQsMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcKKwkubG9uZwkweGZmNjI2NjAwLDB4MDBiNjRlNzUsMHgwODJlMDAwMCwweGZmNjQ2NzAwCisJLmxvbmcJMHgwMGEyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MgorCS5sb25nCTB4NjYwMDAwOTgsMHg2MDAwMDA4YywweGYyOWUwMDIwLDB4MDgyZTAwMDAKKwkubG9uZwkweGZmNjQ2NzAwLDB4MDAxNDAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlCisJLmxvbmcJMHgwMDA3ZmY2MiwweDY2MDAwMDc0LDB4NGU3NTA4MmUsMHgwMDAwZmY2NAorCS5sb25nCTB4NjcwMDAwNjAsMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcKKwkubG9uZwkweGZmNjI2NjAwLDB4MDA1NjYwMDAsMHgwMDRhZjI4MiwweDAwNDY0ZTc1CisJLmxvbmcJMHhmMjhkMDA0MCwweDRlNzVmMjgzLDB4MDAzYTRlNzUsMHhmMjhjMDAzNAorCS5sb25nCTB4NGU3NWYyODQsMHgwMDJlNGU3NSwweGYyOGIwMDI4LDB4NGU3NWYyODUKKwkubG9uZwkweDAwMjI0ZTc1LDB4ZjI4YTAwMWMsMHg0ZTc1ZjI4NiwweDAwMTY0ZTc1CisJLmxvbmcJMHhmMjg5MDAxMCwweDRlNzVmMjg3LDB4MDAwYTRlNzUsMHhmMjg4MDAwNAorCS5sb25nCTB4NGU3NTFkN2MsMHgwMDAxZmY0YSwweDRlNzUxZDdjLDB4MDAwMmZmNGEKKwkubG9uZwkweDRlNzUzMDJlLDB4ZmY0MjQyODEsMHgxMjJlZmY2NCwweGUwOTlmMjAxCisJLmxvbmcJMHg4ODAwMzIzYiwweDAyMDY0ZWZiLDB4MTAwMjAyMDgsMHgwMDQwMDJhYworCS5sb25nCTB4MDJjYzAyZWMsMHgwMzBjMDMyYywweDAzNGMwMzVjLDB4MDMzYzAzMWMKKwkubG9uZwkweDAyZmMwMmRjLDB4MDJiYzAwNTAsMHgwMjBlMDIxNCwweDAyNDQwMDYwCisJLmxvbmcJMHgwMGE0MDBmYSwweDAxM2UwMTk0LDB4MDFkODAxZjAsMHgwMWI2MDE3MgorCS5sb25nCTB4MDExYzAwZDgsMHgwMDgyMDI3OCwweDAyMmNmMjgxLDB4MDAwODQyMDAKKwkubG9uZwkweDYwMDAwMzJlLDB4NTBjMDYwMDAsMHgwMzI4ZjI4ZSwweDAwMDg0MjAwCisJLmxvbmcJMHg2MDAwMDMxZSwweDUwYzA2MDAwLDB4MDMxOGYyOTIsMHgwMDFhNDIwMAorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAzMDgwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQ2MDAwLDB4MDJmMjUwYzAsMHg2MDAwMDJmNiwweGYyOWQwMDA4CisJLmxvbmcJMHg0MjAwNjAwMCwweDAyZWM1MGMwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDJlMDAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDJjYWYyOTMKKwkubG9uZwkweDAwMWE0MjAwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAyYzQwMGFlCisJLmxvbmcJMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDJhZTUwYzAsMHgwODJlMDAwMAorCS5sb25nCTB4ZmY2NDY3MDAsMHgwMmFjMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDYwMDAKKwkubG9uZwkweDAyOTZmMjljLDB4MDAwODQyMDAsMHg2MDAwMDI5NiwweDUwYzAwODJlCisJLmxvbmcJMHgwMDAwZmY2NCwweDY3MDAwMjhhLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4NjAwMDAyNzQsMHhmMjk0MDAxYSwweDQyMDAwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MDAwMjZlLDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDYwMDAwMjU4CisJLmxvbmcJMHg1MGMwNjAwMCwweDAyNWNmMjliLDB4MDAwODQyMDAsMHg2MDAwMDI1MgorCS5sb25nCTB4NTBjMDA4MmUsMHgwMDAwZmY2NCwweDY3MDAwMjQ2LDB4MDBhZTAwMDAKKwkubG9uZwkweDgwODBmZjY0LDB4NjAwMDAyMzAsMHhmMjk1MDAxYSwweDQyMDAwODJlCisJLmxvbmcJMHgwMDAwZmY2NCwweDY3MDAwMjJhLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4NjAwMDAyMTQsMHg1MGMwMDgyZSwweDAwMDBmZjY0LDB4NjcwMDAyMTIKKwkubG9uZwkweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHg2MDAwMDFmYywweGYyOWEwMDA4CisJLmxvbmcJMHg0MjAwNjAwMCwweDAxZmM1MGMwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDFmMDAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDFkYWYyOTYKKwkubG9uZwkweDAwMWE0MjAwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAxZDQwMGFlCisJLmxvbmcJMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDFiZTUwYzAsMHg2MDAwMDFjMgorCS5sb25nCTB4ZjI5OTAwMDgsMHg0MjAwNjAwMCwweDAxYjg1MGMwLDB4MDgyZTAwMDAKKwkubG9uZwkweGZmNjQ2NzAwLDB4MDFhYzAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwCisJLmxvbmcJMHgwMTk2ZjI5NywweDAwMTA0MjAwLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4NjAwMDAxODQsMHg1MGMwNjAwMCwweDAxODhmMjk4LDB4MDAwODQyMDAKKwkubG9uZwkweDYwMDAwMTdlLDB4NTBjMDAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwCisJLmxvbmcJMHgwMTY2NDIwMCwweDYwMDAwMTZhLDB4NTBjMDYwMDAsMHgwMTY0NDIwMAorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAxNTgwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQ2MDAwLDB4MDE0MjUwYzAsMHgwODJlMDAwMCwweGZmNjQ2NzAwCisJLmxvbmcJMHgwMTQwMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDYwMDAsMHgwMTJhZjI5MQorCS5sb25nCTB4MDAxYTQyMDAsMHgwODJlMDAwMCwweGZmNjQ2NzAwLDB4MDEyNDAwYWUKKwkubG9uZwkweDAwMDA4MDgwLDB4ZmY2NDYwMDAsMHgwMTBlNTBjMCwweDA4MmUwMDAwCisJLmxvbmcJMHhmZjY0NjcwMCwweDAxMGMwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMAorCS5sb25nCTB4MDBmNmYyOWUsMHgwMDFhNDIwMCwweDA4MmUwMDAwLDB4ZmY2NDY3MDAKKwkubG9uZwkweDAwZjAwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMCwweDAwZGE1MGMwCisJLmxvbmcJMHgwODJlMDAwMCwweGZmNjQ2NzAwLDB4MDBkODAwYWUsMHgwMDAwODA4MAorCS5sb25nCTB4ZmY2NDYwMDAsMHgwMGMyZjI4MiwweDAwMDg0MjAwLDB4NjAwMDAwYzIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDBiY2YyOGQsMHgwMDA4NDIwMCwweDYwMDAwMGIyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwYWNmMjgzLDB4MDAwODQyMDAsMHg2MDAwMDBhMgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDljZjI4YywweDAwMDg0MjAwLDB4NjAwMDAwOTIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDA4Y2YyODQsMHgwMDA4NDIwMCwweDYwMDAwMDgyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwN2NmMjhiLDB4MDAwODQyMDAsMHg2MDAwMDA3MgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDZjZjI4NSwweDAwMDg0MjAwLDB4NjAwMDAwNjIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDA1Y2YyOGEsMHgwMDA4NDIwMCwweDYwMDAwMDUyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwNGNmMjg2LDB4MDAwODQyMDAsMHg2MDAwMDA0MgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDNjZjI4OSwweDAwMDg0MjAwLDB4NjAwMDAwMzIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDAyY2YyODcsMHgwMDA4NDIwMCwweDYwMDAwMDIyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwMWNmMjg4LDB4MDAwODQyMDAsMHg2MDAwMDAxMgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDBjMDgyZSwweDAwMDdmZjYyLDB4NjYwMDAwODgKKwkubG9uZwkweDIwNDAxMjJlLDB4ZmY0MTIwMDEsMHgwMjAxMDAzOCwweDY2MTAyMjAwCisJLmxvbmcJMHgwMjQxMDAwNywweDIwMDg2MWZmLDB4MDAwMDE3MmEsMHg0ZTc1MGMwMQorCS5sb25nCTB4MDAxODY3MWEsMHgwYzAxMDAyMCwweDY3MzgyMDA4LDB4MjA2ZTAwMGMKKwkubG9uZwkweDYxZmZmZmZmLDB4NWE3YzRhODEsMHg2NjAwMDA1NCwweDRlNzUyMDA4CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4NWE2ODRhODEsMHg2NjAwMDA0MAorCS5sb25nCTB4MTIyZWZmNDEsMHgwMjQxMDAwNywweDcwMDE2MWZmLDB4MDAwMDE3MjIKKwkubG9uZwkweDRlNzUyMDA4LDB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweDVhNDQ0YTgxCisJLmxvbmcJMHg2NjAwMDAxYywweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHg3MDAxNjFmZgorCS5sb25nCTB4MDAwMDE3NGUsMHg0ZTc1MWQ3YywweDAwMDJmZjRhLDB4NGU3NTNkN2MKKwkubG9uZwkweDAwYTEwMDBhLDB4NjBmZjAwMDAsMHgyYjg2MTIyZSwweGZmNDMwMjQxCisJLmxvbmcJMHgwMDcwZTgwOSwweDYxZmYwMDAwLDB4MTViMjAyODAsMHgwMDAwMDBmZgorCS5sb25nCTB4MmYwMDEwM2IsMHgwOTIwMDE0OCwweDJmMDA2MWZmLDB4MDAwMDAzNDAKKwkubG9uZwkweDIwMWYyMjFmLDB4NjcwMDAxMzQsMHgwODJlMDAwNSwweGZmNDI2NzAwCisJLmxvbmcJMHgwMGI4MDgyZSwweDAwMDRmZjQyLDB4NjYwMDAwMWEsMHgxMjNiMTEyMAorCS5sb25nCTB4MDIxZTA4MmUsMHgwMDA1MDAwNCwweDY3MGEwYzJlLDB4MDAwOGZmNGEKKwkubG9uZwkweDY2MDI0ZTc1LDB4MjI0ODlmYzAsMHg0MWQ3NGEwMSwweDZhMGMyMGVlCisJLmxvbmcJMHhmZmRjMjBlZSwweGZmZTAyMGVlLDB4ZmZlNGUzMDksMHg2YTBjMjBlZQorCS5sb25nCTB4ZmZlODIwZWUsMHhmZmVjMjBlZSwweGZmZjBlMzA5LDB4NmEwYWYyMTAKKwkubG9uZwkweGYwMjBkMWZjLDB4MDAwMDAwMGMsMHhlMzA5NmEwYSwweGYyMTBmMDEwCisJLmxvbmcJMHhkMWZjMDAwMCwweDAwMGNlMzA5LDB4NmEwYWYyMTAsMHhmMDA4ZDFmYworCS5sb25nCTB4MDAwMDAwMGMsMHhlMzA5NmEwYSwweGYyMTBmMDA0LDB4ZDFmYzAwMDAKKwkubG9uZwkweDAwMGNlMzA5LDB4NmEwYWYyMTAsMHhmMDAyZDFmYywweDAwMDAwMDBjCisJLmxvbmcJMHhlMzA5NmEwYSwweGYyMTBmMDAxLDB4ZDFmYzAwMDAsMHgwMDBjMmQ0OQorCS5sb25nCTB4ZmY1NDQxZDcsMHgyZjAwNjFmZiwweGZmZmY1OGIyLDB4MjAxZmRmYzAKKwkubG9uZwkweDRhODE2NjAwLDB4MDcxZTRlNzUsMHgyZDQ4ZmY1NCwweDlmYzA0M2Q3CisJLmxvbmcJMHgyZjAxMmYwMCwweDYxZmZmZmZmLDB4NTg3ZTIwMWYsMHg0YTgxNjYwMAorCS5sb25nCTB4MDcwZTIyMWYsMHg0MWQ3NGEwMSwweDZhMGMyZDU4LDB4ZmZkYzJkNTgKKwkubG9uZwkweGZmZTAyZDU4LDB4ZmZlNGUzMDksMHg2YTBjMmQ1OCwweGZmZTgyZDU4CisJLmxvbmcJMHhmZmVjMmQ1OCwweGZmZjBlMzA5LDB4NmEwNGYyMTgsMHhkMDIwZTMwOQorCS5sb25nCTB4NmEwNGYyMTgsMHhkMDEwZTMwOSwweDZhMDRmMjE4LDB4ZDAwOGUzMDkKKwkubG9uZwkweDZhMDRmMjE4LDB4ZDAwNGUzMDksMHg2YTA0ZjIxOCwweGQwMDJlMzA5CisJLmxvbmcJMHg2YTA0ZjIxOCwweGQwMDFkZmMwLDB4NGU3NTRlNzUsMHgwMDBjMGMxOAorCS5sb25nCTB4MGMxODE4MjQsMHgwYzE4MTgyNCwweDE4MjQyNDMwLDB4MGMxODE4MjQKKwkubG9uZwkweDE4MjQyNDMwLDB4MTgyNDI0MzAsMHgyNDMwMzAzYywweDBjMTgxODI0CisJLmxvbmcJMHgxODI0MjQzMCwweDE4MjQyNDMwLDB4MjQzMDMwM2MsMHgxODI0MjQzMAorCS5sb25nCTB4MjQzMDMwM2MsMHgyNDMwMzAzYywweDMwM2MzYzQ4LDB4MGMxODE4MjQKKwkubG9uZwkweDE4MjQyNDMwLDB4MTgyNDI0MzAsMHgyNDMwMzAzYywweDE4MjQyNDMwCisJLmxvbmcJMHgyNDMwMzAzYywweDI0MzAzMDNjLDB4MzAzYzNjNDgsMHgxODI0MjQzMAorCS5sb25nCTB4MjQzMDMwM2MsMHgyNDMwMzAzYywweDMwM2MzYzQ4LDB4MjQzMDMwM2MKKwkubG9uZwkweDMwM2MzYzQ4LDB4MzAzYzNjNDgsMHgzYzQ4NDg1NCwweDBjMTgxODI0CisJLmxvbmcJMHgxODI0MjQzMCwweDE4MjQyNDMwLDB4MjQzMDMwM2MsMHgxODI0MjQzMAorCS5sb25nCTB4MjQzMDMwM2MsMHgyNDMwMzAzYywweDMwM2MzYzQ4LDB4MTgyNDI0MzAKKwkubG9uZwkweDI0MzAzMDNjLDB4MjQzMDMwM2MsMHgzMDNjM2M0OCwweDI0MzAzMDNjCisJLmxvbmcJMHgzMDNjM2M0OCwweDMwM2MzYzQ4LDB4M2M0ODQ4NTQsMHgxODI0MjQzMAorCS5sb25nCTB4MjQzMDMwM2MsMHgyNDMwMzAzYywweDMwM2MzYzQ4LDB4MjQzMDMwM2MKKwkubG9uZwkweDMwM2MzYzQ4LDB4MzAzYzNjNDgsMHgzYzQ4NDg1NCwweDI0MzAzMDNjCisJLmxvbmcJMHgzMDNjM2M0OCwweDMwM2MzYzQ4LDB4M2M0ODQ4NTQsMHgzMDNjM2M0OAorCS5sb25nCTB4M2M0ODQ4NTQsMHgzYzQ4NDg1NCwweDQ4NTQ1NDYwLDB4MDA4MDQwYzAKKwkubG9uZwkweDIwYTA2MGUwLDB4MTA5MDUwZDAsMHgzMGIwNzBmMCwweDA4ODg0OGM4CisJLmxvbmcJMHgyOGE4NjhlOCwweDE4OTg1OGQ4LDB4MzhiODc4ZjgsMHgwNDg0NDRjNAorCS5sb25nCTB4MjRhNDY0ZTQsMHgxNDk0NTRkNCwweDM0YjQ3NGY0LDB4MGM4YzRjY2MKKwkubG9uZwkweDJjYWM2Y2VjLDB4MWM5YzVjZGMsMHgzY2JjN2NmYywweDAyODI0MmMyCisJLmxvbmcJMHgyMmEyNjJlMiwweDEyOTI1MmQyLDB4MzJiMjcyZjIsMHgwYThhNGFjYQorCS5sb25nCTB4MmFhYTZhZWEsMHgxYTlhNWFkYSwweDNhYmE3YWZhLDB4MDY4NjQ2YzYKKwkubG9uZwkweDI2YTY2NmU2LDB4MTY5NjU2ZDYsMHgzNmI2NzZmNiwweDBlOGU0ZWNlCisJLmxvbmcJMHgyZWFlNmVlZSwweDFlOWU1ZWRlLDB4M2ViZTdlZmUsMHgwMTgxNDFjMQorCS5sb25nCTB4MjFhMTYxZTEsMHgxMTkxNTFkMSwweDMxYjE3MWYxLDB4MDk4OTQ5YzkKKwkubG9uZwkweDI5YTk2OWU5LDB4MTk5OTU5ZDksMHgzOWI5NzlmOSwweDA1ODU0NWM1CisJLmxvbmcJMHgyNWE1NjVlNSwweDE1OTU1NWQ1LDB4MzViNTc1ZjUsMHgwZDhkNGRjZAorCS5sb25nCTB4MmRhZDZkZWQsMHgxZDlkNWRkZCwweDNkYmQ3ZGZkLDB4MDM4MzQzYzMKKwkubG9uZwkweDIzYTM2M2UzLDB4MTM5MzUzZDMsMHgzM2IzNzNmMywweDBiOGI0YmNiCisJLmxvbmcJMHgyYmFiNmJlYiwweDFiOWI1YmRiLDB4M2JiYjdiZmIsMHgwNzg3NDdjNworCS5sb25nCTB4MjdhNzY3ZTcsMHgxNzk3NTdkNywweDM3Yjc3N2Y3LDB4MGY4ZjRmY2YKKwkubG9uZwkweDJmYWY2ZmVmLDB4MWY5ZjVmZGYsMHgzZmJmN2ZmZiwweDIwNDAzMDJlCisJLmxvbmcJMHhmZjQwMzIwMCwweDAyNDAwMDNmLDB4MDI4MTAwMDAsMHgwMDA3MzAzYgorCS5sb25nCTB4MDIwYTRlZmIsMHgwMDA2NGFmYywweDAwNDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwODAsMHgwMDg2MDA4YworCS5sb25nCTB4MDA5MDAwOTQsMHgwMDk4MDA5YywweDAwYTAwMGE2LDB4MDBiNjAwYzYKKwkubG9uZwkweDAwZDIwMGRlLDB4MDBlYTAwZjYsMHgwMTAyMDExOCwweDAxMjYwMTM0CisJLmxvbmcJMHgwMTNlMDE0OCwweDAxNTIwMTVjLDB4MDE2NjAxN2EsMHgwMTk4MDFiNgorCS5sb25nCTB4MDFkMjAxZWUsMHgwMjBhMDIyNiwweDAyNDIwMjYwLDB4MDI2MDAyNjAKKwkubG9uZwkweDAyNjAwMjYwLDB4MDI2MDAyNjAsMHgwMjYwMDJjMCwweDAyZGEwMmY0CisJLmxvbmcJMHgwMzE0MDAwMCwweDAwMDAwMDAwLDB4MDAwMDIwNmUsMHhmZmE0NGU3NQorCS5sb25nCTB4MjA2ZWZmYTgsMHg0ZTc1MjA0YSwweDRlNzUyMDRiLDB4NGU3NTIwNGMKKwkubG9uZwkweDRlNzUyMDRkLDB4NGU3NTIwNTYsMHg0ZTc1MjA2ZSwweGZmZDg0ZTc1CisJLmxvbmcJMHgyMDJlZmZhNCwweDIyMDBkMjg4LDB4MmQ0MWZmYTQsMHgyMDQwNGU3NQorCS5sb25nCTB4MjAyZWZmYTgsMHgyMjAwZDI4OCwweDJkNDFmZmE4LDB4MjA0MDRlNzUKKwkubG9uZwkweDIwMGEyMjAwLDB4ZDI4ODI0NDEsMHgyMDQwNGU3NSwweDIwMGIyMjAwCisJLmxvbmcJMHhkMjg4MjY0MSwweDIwNDA0ZTc1LDB4MjAwYzIyMDAsMHhkMjg4Mjg0MQorCS5sb25nCTB4MjA0MDRlNzUsMHgyMDBkMjIwMCwweGQyODgyYTQxLDB4MjA0MDRlNzUKKwkubG9uZwkweDIwMTYyMjAwLDB4ZDI4ODJjODEsMHgyMDQwNGU3NSwweDFkN2MwMDA0CisJLmxvbmcJMHhmZjRhMjAyZSwweGZmZDgyMjAwLDB4ZDI4ODJkNDEsMHhmZmQ4MjA0MAorCS5sb25nCTB4NGU3NTIwMmUsMHhmZmE0OTA4OCwweDJkNDBmZmE0LDB4MjA0MDRlNzUKKwkubG9uZwkweDIwMmVmZmE4LDB4OTA4ODJkNDAsMHhmZmE4MjA0MCwweDRlNzUyMDBhCisJLmxvbmcJMHg5MDg4MjQ0MCwweDIwNDA0ZTc1LDB4MjAwYjkwODgsMHgyNjQwMjA0MAorCS5sb25nCTB4NGU3NTIwMGMsMHg5MDg4Mjg0MCwweDIwNDA0ZTc1LDB4MjAwZDkwODgKKwkubG9uZwkweDJhNDAyMDQwLDB4NGU3NTIwMTYsMHg5MDg4MmM4MCwweDIwNDA0ZTc1CisJLmxvbmcJMHgxZDdjMDAwOCwweGZmNGEyMDJlLDB4ZmZkODkwODgsMHgyZDQwZmZkOAorCS5sb25nCTB4MjA0MDRlNzUsMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweDU0YTI0YTgxLDB4NjZmZmZmZmYsMHg2ODIwMzA0MCwweGQxZWVmZmE0CisJLmxvbmcJMHg0ZTc1MjA2ZSwweGZmNDQ1NGFlLDB4ZmY0NDYxZmYsMHhmZmZmNTQ4NAorCS5sb25nCTB4NGE4MTY2ZmYsMHhmZmZmNjgwMiwweDMwNDBkMWVlLDB4ZmZhODRlNzUKKwkubG9uZwkweDIwNmVmZjQ0LDB4NTRhZWZmNDQsMHg2MWZmZmZmZiwweDU0NjY0YTgxCisJLmxvbmcJMHg2NmZmZmZmZiwweDY3ZTQzMDQwLDB4ZDFjYTRlNzUsMHgyMDZlZmY0NAorCS5sb25nCTB4NTRhZWZmNDQsMHg2MWZmZmZmZiwweDU0NGE0YTgxLDB4NjZmZmZmZmYKKwkubG9uZwkweDY3YzgzMDQwLDB4ZDFjYjRlNzUsMHgyMDZlZmY0NCwweDU0YWVmZjQ0CisJLmxvbmcJMHg2MWZmZmZmZiwweDU0MmU0YTgxLDB4NjZmZmZmZmYsMHg2N2FjMzA0MAorCS5sb25nCTB4ZDFjYzRlNzUsMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweDU0MTI0YTgxLDB4NjZmZmZmZmYsMHg2NzkwMzA0MCwweGQxY2Q0ZTc1CisJLmxvbmcJMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYsMHg1M2Y2NGE4MQorCS5sb25nCTB4NjZmZmZmZmYsMHg2Nzc0MzA0MCwweGQxZDY0ZTc1LDB4MjA2ZWZmNDQKKwkubG9uZwkweDU0YWVmZjQ0LDB4NjFmZmZmZmYsMHg1M2RhNGE4MSwweDY2ZmZmZmZmCisJLmxvbmcJMHg2NzU4MzA0MCwweGQxZWVmZmQ4LDB4NGU3NTUwODEsMHg2MWZmMDAwMAorCS5sb25nCTB4MGZkYTJmMDAsMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweDUzYjI0YTgxLDB4NjZmZmZmZmYsMHg2NzMwMjA1ZiwweDA4MDAwMDA4CisJLmxvbmcJMHg2NjAwMDBlNiwweDJkNDBmZjU0LDB4MjIwMGU5NTksMHgwMjQxMDAwZgorCS5sb25nCTB4NjFmZjAwMDAsMHgwZmE2MmYwMiwweDI0MmVmZjU0LDB4MDgwMjAwMGIKKwkubG9uZwkweDY2MDI0OGMwLDB4MjIwMmVmNTksMHgwMjgxMDAwMCwweDAwMDNlM2E4CisJLmxvbmcJMHg0OWMyZDA4MiwweGQxYzAyNDFmLDB4NGU3NTIwNmUsMHhmZjQ0NTRhZQorCS5sb25nCTB4ZmY0NDYxZmYsMHhmZmZmNTM1YywweDRhODE2NmZmLDB4ZmZmZjY2ZGEKKwkubG9uZwkweDMwNDA0ZTc1LDB4MjA2ZWZmNDQsMHg1OGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHg1MzU4NGE4MSwweDY2ZmZmZmZmLDB4NjZjMDIwNDAsMHg0ZTc1MjA2ZQorCS5sb25nCTB4ZmY0NDU0YWUsMHhmZjQ0NjFmZiwweGZmZmY1MzI4LDB4NGE4MTY2ZmYKKwkubG9uZwkweGZmZmY2NmE2LDB4MzA0MGQxZWUsMHhmZjQ0NTU4OCwweDRlNzUyMDZlCisJLmxvbmcJMHhmZjQ0NTRhZSwweGZmNDQ2MWZmLDB4ZmZmZjUzMDgsMHg0YTgxNjZmZgorCS5sb25nCTB4ZmZmZjY2ODYsMHgyMDZlZmY0NCwweDU1ODgwODAwLDB4MDAwODY2MDAKKwkubG9uZwkweDAwMzgyZDQwLDB4ZmY1NDIyMDAsMHhlOTU5MDI0MSwweDAwMGY2MWZmCisJLmxvbmcJMHgwMDAwMGVmOCwweDJmMDIyNDJlLDB4ZmY1NDA4MDIsMHgwMDBiNjYwMgorCS5sb25nCTB4NDhjMDIyMDIsMHhlZjU5MDI4MSwweDAwMDAwMDAzLDB4ZTNhODQ5YzIKKwkubG9uZwkweGQwODJkMWMwLDB4MjQxZjRlNzUsMHgwODAwMDAwNiwweDY3MGM0OGU3CisJLmxvbmcJMHgzYzAwMmEwMCwweDI2MDg0MjgyLDB4NjAyODJkNDAsMHhmZjU0ZTljMAorCS5sb25nCTB4MTQwNDYxZmYsMHgwMDAwMGViNCwweDQ4ZTczYzAwLDB4MjQwMDJhMmUKKwkubG9uZwkweGZmNTQyNjA4LDB4MDgwNTAwMGIsMHg2NjAyNDhjMiwweGU5YzUwNTQyCisJLmxvbmcJMHhlMWFhMDgwNSwweDAwMDc2NzAyLDB4NDI4M2U5YzUsMHgwNjgyMGMwMAorCS5sb25nCTB4MDAwMjZkMzQsMHg2NzE4MjA2ZSwweGZmNDQ1OGFlLDB4ZmY0NDYxZmYKKwkubG9uZwkweGZmZmY1Mjc2LDB4NGE4MTY2ZmYsMHgwMDAwMDBiMCwweDYwMTgyMDZlCisJLmxvbmcJMHhmZjQ0NTRhZSwweGZmNDQ2MWZmLDB4ZmZmZjUyNDgsMHg0YTgxNjZmZgorCS5sb25nCTB4MDAwMDAwOTgsMHg0OGMwZDY4MCwweGU5YzUwNzgyLDB4NjcwMDAwNmUKKwkubG9uZwkweDBjMDAwMDAyLDB4NmQzNDY3MTgsMHgyMDZlZmY0NCwweDU4YWVmZjQ0CisJLmxvbmcJMHg2MWZmZmZmZiwweDUyMzQ0YTgxLDB4NjZmZjAwMDAsMHgwMDZlNjAxYworCS5sb25nCTB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmLDB4NTIwNjRhODEKKwkubG9uZwkweDY2ZmYwMDAwLDB4MDA1NjQ4YzAsMHg2MDAyNDI4MCwweDI4MDAwODA1CisJLmxvbmcJMHgwMDAyNjcxNCwweDIwNDM2MWZmLDB4ZmZmZjUyNDAsMHg0YTgxNjYwMAorCS5sb25nCTB4MDAyOGQwODIsMHhkMDg0NjAxOCwweGQ2ODIyMDQzLDB4NjFmZmZmZmYKKwkubG9uZwkweDUyMmE0YTgxLDB4NjYwMDAwMTIsMHhkMDg0NjAwNCwweGQ2ODIyMDAzCisJLmxvbmcJMHgyMDQwNGNkZiwweDAwM2M0ZTc1LDB4MjA0MzRjZGYsMHgwMDNjMzAzYworCS5sb25nCTB4MDEwMTYwZmYsMHhmZmZmNjU4MiwweDRjZGYwMDNjLDB4NjBmZmZmZmYKKwkubG9uZwkweDY1Mjg2MWZmLDB4MDAwMDIzYzYsMHgzMDNjMDBlMSwweDYwMGE2MWZmCisJLmxvbmcJMHgwMDAwMjNiYSwweDMwM2MwMTYxLDB4MjA2ZWZmNTQsMHg2MGZmZmZmZgorCS5sb25nCTB4NjU1ODEwMmUsMHhmZjQyMGMwMCwweDAwOWM2NzAwLDB4MDBiMjBjMDAKKwkubG9uZwkweDAwOTg2NzAwLDB4MDA3NDBjMDAsMHgwMDk0NjczNiwweDIwNmVmZjQ0CisJLmxvbmcJMHg1OGFlZmY0NCwweDYxZmZmZmZmLDB4NTE3MDRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4NjRkODJkNDAsMHhmZjY0MjA2ZSwweGZmNDQ1OGFlLDB4ZmY0NDYxZmYKKwkubG9uZwkweGZmZmY1MTU2LDB4NGE4MTY2ZmYsMHhmZmZmNjRiZSwweDJkNDBmZjY4CisJLmxvbmcJMHg0ZTc1MjA2ZSwweGZmNDQ1OGFlLDB4ZmY0NDYxZmYsMHhmZmZmNTEzYQorCS5sb25nCTB4NGE4MTY2ZmYsMHhmZmZmNjRhMiwweDJkNDBmZjYwLDB4MjA2ZWZmNDQKKwkubG9uZwkweDU4YWVmZjQ0LDB4NjFmZmZmZmYsMHg1MTIwNGE4MSwweDY2ZmZmZmZmCisJLmxvbmcJMHg2NDg4MmQ0MCwweGZmNjg0ZTc1LDB4MjA2ZWZmNDQsMHg1OGFlZmY0NAorCS5sb25nCTB4NjFmZmZmZmYsMHg1MTA0NGE4MSwweDY2ZmZmZmZmLDB4NjQ2YzJkNDAKKwkubG9uZwkweGZmNjAyMDZlLDB4ZmY0NDU4YWUsMHhmZjQ0NjFmZiwweGZmZmY1MGVhCisJLmxvbmcJMHg0YTgxNjZmZiwweGZmZmY2NDUyLDB4MmQ0MGZmNjQsMHg0ZTc1MjA2ZQorCS5sb25nCTB4ZmY0NDU4YWUsMHhmZjQ0NjFmZiwweGZmZmY1MGNlLDB4NGE4MTY2ZmYKKwkubG9uZwkweGZmZmY2NDM2LDB4MmQ0MGZmNjAsMHgyMDZlZmY0NCwweDU4YWVmZjQ0CisJLmxvbmcJMHg2MWZmZmZmZiwweDUwYjQ0YTgxLDB4NjZmZmZmZmYsMHg2NDFjMmQ0MAorCS5sb25nCTB4ZmY2NDIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmLDB4ZmZmZjUwOWEKKwkubG9uZwkweDRhODE2NmZmLDB4ZmZmZjY0MDIsMHgyZDQwZmY2OCwweDRlNzUyMDQwCisJLmxvbmcJMHgxMDJlZmY0MSwweDIyMDAwMjQwLDB4MDAzODAyODEsMHgwMDAwMDAwNworCS5sb25nCTB4MGMwMDAwMTgsMHg2NzI0MGMwMCwweDAwMjA2NzJjLDB4ODA0MTBjMDAKKwkubG9uZwkweDAwM2M2NzA2LDB4MjA2ZTAwMGMsMHg0ZTc1MWQ3YywweDAwODBmZjRhCisJLmxvbmcJMHg0MWY2MDE2MiwweGZmNjgwMDA0LDB4NGU3NTIwMDgsMHg2MWZmMDAwMAorCS5sb25nCTB4MGQ3MDIwNmUsMHgwMDBjNGU3NSwweDIwMDg2MWZmLDB4MDAwMDBkYjIKKwkubG9uZwkweDIwNmUwMDBjLDB4MGMwMDAwMGMsMHg2NzAyNGU3NSwweDUxODgyZDQ4CisJLmxvbmcJMHgwMDBjNGU3NSwweDEwMmVmZjQxLDB4MjIwMDAyNDAsMHgwMDM4MDI4MQorCS5sb25nCTB4MDAwMDAwMDcsMHgwYzAwMDAxOCwweDY3MGUwYzAwLDB4MDAyMDY3MDAKKwkubG9uZwkweDAwNzYyMDZlLDB4MDAwYzRlNzUsMHgzMjNiMTIwZSwweDIwNmUwMDBjCisJLmxvbmcJMHg0ZWZiMTAwNiwweDRhZmMwMDA4LDB4MDAxMDAwMWEsMHgwMDI0MDAyYworCS5sb25nCTB4MDAzNDAwM2MsMHgwMDQ0MDA0ZSwweDA2YWUwMDAwLDB4MDAwY2ZmYTQKKwkubG9uZwkweDRlNzUwNmFlLDB4MDAwMDAwMGMsMHhmZmE4NGU3NSwweGQ1ZmMwMDAwCisJLmxvbmcJMHgwMDBjNGU3NSwweGQ3ZmMwMDAwLDB4MDAwYzRlNzUsMHhkOWZjMDAwMAorCS5sb25nCTB4MDAwYzRlNzUsMHhkYmZjMDAwMCwweDAwMGM0ZTc1LDB4MDZhZTAwMDAKKwkubG9uZwkweDAwMGNmZmQ0LDB4NGU3NTFkN2MsMHgwMDA0ZmY0YSwweDA2YWUwMDAwCisJLmxvbmcJMHgwMDBjZmZkOCwweDRlNzUzMjNiLDB4MTIxNDIwNmUsMHgwMDBjNTE4OAorCS5sb25nCTB4NTFhZTAwMGMsMHg0ZWZiMTAwNiwweDRhZmMwMDA4LDB4MDAxMDAwMTYKKwkubG9uZwkweDAwMWMwMDIwLDB4MDAyNDAwMjgsMHgwMDJjMDAzMiwweDJkNDhmZmE0CisJLmxvbmcJMHg0ZTc1MmQ0OCwweGZmYTg0ZTc1LDB4MjQ0ODRlNzUsMHgyNjQ4NGU3NQorCS5sb25nCTB4Mjg0ODRlNzUsMHgyYTQ4NGU3NSwweDJkNDhmZmQ0LDB4NGU3NTJkNDgKKwkubG9uZwkweGZmZDgxZDdjLDB4MDAwOGZmNGEsMHg0ZTc1MDgyZSwweDAwMDZmZjQyCisJLmxvbmcJMHg2NjY0MTAyZSwweGZmNDMwODAwLDB4MDAwNTY3MmMsMHgwODAwMDAwNAorCS5sb25nCTB4NjcwYTAyNDAsMHgwMDdmMGM0MCwweDAwMzg2NjFjLDB4ZTllZTAxODMKKwkubG9uZwkweGZmNDI2MWZmLDB4MDAwMDBkNmEsMHg2MWZmMDAwMCwweDEyMDYwYzAwCisJLmxvbmcJMHgwMDA2NjcyMiwweDFkNDBmZjRmLDB4ZTllZTAwYzMsMHhmZjQyNjFmZgorCS5sb25nCTB4MDAwMDBjYmUsMHg2MWZmMDAwMCwweDExZWEwYzAwLDB4MDAwNjY3MGUKKwkubG9uZwkweDFkNDBmZjRlLDB4NGU3NTYxZmYsMHgwMDAwMTE0OCwweDYwZDY2MWZmCisJLmxvbmcJMHgwMDAwMTE0MCwweDYwZWEzMDJlLDB4ZmY0MjA4MDAsMHgwMDA1NjcyYworCS5sb25nCTB4MDgwMDAwMDQsMHg2NzBhMDI0MCwweDAwN2YwYzQwLDB4MDAzODY2MWMKKwkubG9uZwkweGU5ZWUwMTgzLDB4ZmY0MjYxZmYsMHgwMDAwMGQwNiwweDYxZmYwMDAwCisJLmxvbmcJMHgxMWEyMGMwMCwweDAwMDY2NzI2LDB4MWQ0MGZmNGYsMHhlOWVlMDBjMworCS5sb25nCTB4ZmY0MmU5ZWUsMHgxMjgzZmY0MCwweDY2MDAwMGJlLDB4NDIyZWZmNGUKKwkubG9uZwkweGU5ZWUxMzQzLDB4ZmY0MDMwM2IsMHgwMjEyNGVmYiwweDAwMGU2MWZmCisJLmxvbmcJMHgwMDAwMTBlMCwweDYwZDI0YWZjLDB4MDAwODAwMTAsMHgwMDZhMDAwMAorCS5sb25nCTB4MDAwMDAwMmUsMHgwMDAwMDA0YywweDAwMDA2MWZmLDB4MDAwMDBhNWMKKwkubG9uZwkweGYyMDA0MDAwLDB4ZjIyZWYwODAsMHhmZjZjZjI4MSwweDAwMDQ0ZTc1CisJLmxvbmcJMHgxZDdjMDAwMSwweGZmNGU0ZTc1LDB4NjFmZjAwMDAsMHgwYTNlZjIwMAorCS5sb25nCTB4NTAwMGYyMmUsMHhmMDgwZmY2YywweGYyODEwMDA0LDB4NGU3NTFkN2MKKwkubG9uZwkweDAwMDFmZjRlLDB4NGU3NTYxZmYsMHgwMDAwMGEyMCwweGYyMDA1ODAwCisJLmxvbmcJMHhmMjJlZjA4MCwweGZmNmNmMjgxLDB4MDAwNDRlNzUsMHgxZDdjMDAwMQorCS5sb25nCTB4ZmY0ZTRlNzUsMHg2MWZmMDAwMCwweDBhMDIyZDQwLDB4ZmY1NDQxZWUKKwkubG9uZwkweGZmNTQ2MWZmLDB4MDAwMDExZGUsMHgxZDQwZmY0ZSwweDBjMDAwMDA1CisJLmxvbmcJMHg2NzAwMDFhNCwweDBjMDAwMDA0LDB4NjcwMDAxNWUsMHhmMjEwNDQwMAorCS5sb25nCTB4ZjIyZWYwODAsMHhmZjZjNGU3NSwweDQyMmVmZjRlLDB4MzAzYjAyMGEKKwkubG9uZwkweDRlZmIwMDA2LDB4NGFmYzAwMDgsMHgwMDEwMDBlMiwweDAyNzIwMmIwCisJLmxvbmcJMHgwMDU2MDFhMCwweDAwOWMwMDAwLDB4NzAwNDYxZmYsMHhmZmZmZmQyMgorCS5sb25nCTB4MGMyZTAwODAsMHhmZjRhNjcyNiwweDYxZmZmZmZmLDB4NGRkZTRhODEKKwkubG9uZwkweDY2ZmYwMDAwLDB4MWVlY2YyMDAsMHg0MDAwZjIyZSwweGYwODBmZjZjCisJLmxvbmcJMHhmMjgxMDAwNCwweDRlNzUxZDdjLDB4MDAwMWZmNGUsMHg0ZTc1NjFmZgorCS5sb25nCTB4ZmZmZjRkNzYsMHg0YTgxNjZmZiwweGZmZmY2ZThhLDB4NjBkODcwMDIKKwkubG9uZwkweDYxZmZmZmZmLDB4ZmNkYzBjMmUsMHgwMDgwZmY0YSwweDY3MjY2MWZmCisJLmxvbmcJMHhmZmZmNGQ4MiwweDRhODE2NmZmLDB4MDAwMDFlOTgsMHhmMjAwNTAwMAorCS5sb25nCTB4ZjIyZWYwODAsMHhmZjZjZjI4MSwweDAwMDQ0ZTc1LDB4MWQ3YzAwMDEKKwkubG9uZwkweGZmNGU0ZTc1LDB4NjFmZmZmZmYsMHg0ZDFhNGE4MSwweDY2ZmZmZmZmCisJLmxvbmcJMHg2ZTQ0NjBkOCwweDcwMDE2MWZmLDB4ZmZmZmZjOTYsMHgwYzJlMDA4MAorCS5sb25nCTB4ZmY0YTY3MjYsMHg2MWZmZmZmZiwweDRkMjY0YTgxLDB4NjZmZjAwMDAKKwkubG9uZwkweDFlNDJmMjAwLDB4NTgwMGYyMmUsMHhmMDgwZmY2YywweGYyODEwMDA0CisJLmxvbmcJMHg0ZTc1MWQ3YywweDAwMDFmZjRlLDB4NGU3NTYxZmYsMHhmZmZmNGNkNAorCS5sb25nCTB4NGE4MTY2ZmYsMHhmZmZmNmRmZSwweDYwZDg3MDA0LDB4NjFmZmZmZmYKKwkubG9uZwkweGZjNTAwYzJlLDB4MDA4MGZmNGEsMHg2NzNlNjFmZiwweGZmZmY0ZDBjCisJLmxvbmcJMHgyZDQwZmY1NCwweDRhODE2NmZmLDB4MDAwMDFlMTYsMHg0MWVlZmY1NAorCS5sb25nCTB4NjFmZjAwMDAsMHgxMGEwMWQ0MCwweGZmNGUwYzAwLDB4MDAwNDY3MDAKKwkubG9uZwkweDAwMjgwYzAwLDB4MDAwNTY3MDAsMHgwMDVlZjIyZSwweDQ0MDBmZjU0CisJLmxvbmcJMHhmMjJlZjA4MCwweGZmNmM0ZTc1LDB4NjFmZmZmZmYsMHg0YzhjNGE4MQorCS5sb25nCTB4NjZmZmZmZmYsMHg2ZGEwNjBjNCwweDQyNmVmZjZjLDB4ZTlkMDAyNTcKKwkubG9uZwkweGUxODgyZDQwLDB4ZmY3MDQyYWUsMHhmZjc0NDI2ZSwweGZmNmMwODEwCisJLmxvbmcJMHgwMDA3NjcwNiwweDA4ZWUwMDA3LDB4ZmY2YzQxZWUsMHhmZjZjNjFmZgorCS5sb25nCTB4MDAwMDBlNzgsMHgzMjNjM2Y4MSwweDkyNDA4MzZlLDB4ZmY2YzFkN2MKKwkubG9uZwkweDAwMDBmZjRlLDB4NGU3NTNkN2MsMHg3ZmZmZmY2YywweGU5ZDAwMjU3CisJLmxvbmcJMHhlMTg4MmQ0MCwweGZmNzA0MmFlLDB4ZmY3NDA4MTAsMHgwMDA3NjcwNgorCS5sb25nCTB4MDhlZTAwMDcsMHhmZjZjNGU3NSwweDcwMDg2MWZmLDB4ZmZmZmZiOTIKKwkubG9uZwkweDBjMmUwMDgwLDB4ZmY0YTY3NDAsMHg0M2VlZmY1NCwweDcwMDg2MWZmCisJLmxvbmcJMHhmZmZmNGJjNCwweDRhODE2NmZmLDB4MDAwMDFkNjQsMHg0MWVlZmY1NAorCS5sb25nCTB4NjFmZjAwMDAsMHgwZjcwMWQ0MCwweGZmNGUwYzAwLDB4MDAwNDY3MDAKKwkubG9uZwkweDAwMmUwYzAwLDB4MDAwNTY3MDAsMHgwMDY4ZjIyZSwweDU0MDBmZjU0CisJLmxvbmcJMHhmMjJlZjA4MCwweGZmNmM0ZTc1LDB4NDNlZWZmNTQsMHg3MDA4NjFmZgorCS5sb25nCTB4ZmZmZjRiNmUsMHg0YTgxNjZmZiwweGZmZmY2Y2RhLDB4NjBiZTQyNmUKKwkubG9uZwkweGZmNmNlOWQwLDB4MDMxZjJkNDAsMHhmZjcwZTllOCwweDAyZDUwMDA0CisJLmxvbmcJMHg3MjBiZTNhOCwweDJkNDBmZjc0LDB4MDgxMDAwMDcsMHg2NzA2MDhlZQorCS5sb25nCTB4MDAwN2ZmNmMsMHg0MWVlZmY2YywweDYxZmYwMDAwLDB4MGRhZTMyM2MKKwkubG9uZwkweDNjMDE5MjQwLDB4ODM2ZWZmNmMsMHgxZDdjMDAwMCwweGZmNGU0ZTc1CisJLmxvbmcJMHgzZDdjN2ZmZiwweGZmNmNlOWQwLDB4MDMxZjJkNDAsMHhmZjcwZTllOAorCS5sb25nCTB4MDJkNTAwMDQsMHg3MjBiZTNhOCwweDJkNDBmZjc0LDB4MDgxMDAwMDcKKwkubG9uZwkweDY3MDYwOGVlLDB4MDAwN2ZmNmMsMHg0ZTc1NzAwYywweDYxZmZmZmZmCisJLmxvbmcJMHhmYWMwNDNlZSwweGZmNmM3MDBjLDB4NjFmZmZmZmYsMHg0YWZhNGE4MQorCS5sb25nCTB4NjZmZjAwMDAsMHgxY2E4NDFlZSwweGZmNmM2MWZmLDB4MDAwMDBlMjQKKwkubG9uZwkweDBjMDAwMDA2LDB4NjcwNjFkNDAsMHhmZjRlNGU3NSwweDYxZmYwMDAwCisJLmxvbmcJMHgwZDgyMWQ0MCwweGZmNGU0ZTc1LDB4NjFmZjAwMDAsMHgxMjU0NDFlZQorCS5sb25nCTB4ZmY2YzYxZmYsMHgwMDAwMGRmYywweDBjMDAwMDA2LDB4NjcwNjFkNDAKKwkubG9uZwkweGZmNGU0ZTc1LDB4NjFmZjAwMDAsMHgwZDVhMWQ0MCwweGZmNGU0ZTc1CisJLmxvbmcJMHhlOWVlMTBjMywweGZmNDIzMjdiLDB4MTIwYTRlZmIsMHg5ODA2NGFmYworCS5sb25nCTB4MDAwODAwZTAsMHgwMWUwMDE0OCwweDA2MjAwMDc4LDB4MDQxYTAwMTAKKwkubG9uZwkweDA2MjA0YTJlLDB4ZmY0ZTY2NGMsMHhmMjI4ZDA4MCwweDAwMDBmMjAwCisJLmxvbmcJMHg5MDAwZjIwMCwweDc4MDBmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIwMQorCS5sb25nCTB4YTgwMDgzNmUsMHhmZjY2MTIyZSwweGZmNDEwMjAxLDB4MDAzODY3MTQKKwkubG9uZwkweDIwNmUwMDBjLDB4NjFmZmZmZmYsMHg0YWU4NGE4MSwweDY2ZmYwMDAwCisJLmxvbmcJMHgxYzBhNGU3NSwweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHg2MWZmMDAwMAorCS5sb25nCTB4MDc2NDRlNzUsMHgyMjI4MDAwMCwweDAyODE4MDAwLDB4MDAwMDAwODEKKwkubG9uZwkweDAwODAwMDAwLDB4ZjIwMTQ0MDAsMHg2MGE0NGEyZSwweGZmNGU2NjRjCisJLmxvbmcJMHhmMjI4ZDA4MCwweDAwMDBmMjAwLDB4OTAwMGYyMDAsMHg3MDAwZjIzYworCS5sb25nCTB4OTAwMDAwMDAsMHgwMDAwZjIwMSwweGE4MDA4MzZlLDB4ZmY2NjEyMmUKKwkubG9uZwkweGZmNDEwMjAxLDB4MDAzODY3MTQsMHgyMDZlMDAwYywweDYxZmZmZmZmCisJLmxvbmcJMHg0YTk2NGE4MSwweDY2ZmYwMDAwLDB4MWJiMDRlNzUsMHgxMjJlZmY0MQorCS5sb25nCTB4MDI0MTAwMDcsMHg2MWZmMDAwMCwweDA2YzA0ZTc1LDB4MjIyODAwMDAKKwkubG9uZwkweDAyODE4MDAwLDB4MDAwMDAwODEsMHgwMDgwMDAwMCwweGYyMDE0NDAwCisJLmxvbmcJMHg2MGE0NGEyZSwweGZmNGU2NjRjLDB4ZjIyOGQwODAsMHgwMDAwZjIwMAorCS5sb25nCTB4OTAwMGYyMDAsMHg2MDAwZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEKKwkubG9uZwkweGE4MDA4MzZlLDB4ZmY2NjEyMmUsMHhmZjQxMDIwMSwweDAwMzg2NzE0CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4NGE0NDRhODEsMHg2NmZmMDAwMAorCS5sb25nCTB4MWI1NjRlNzUsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweDA2MWM0ZTc1LDB4MjIyODAwMDAsMHgwMjgxODAwMCwweDAwMDAwMDgxCisJLmxvbmcJMHgwMDgwMDAwMCwweGYyMDE0NDAwLDB4NjBhNDNkNjgsMHgwMDAwZmY4NAorCS5sb25nCTB4NDI2ZWZmODYsMHgyZDY4MDAwNCwweGZmODgyZDY4LDB4MDAwOGZmOGMKKwkubG9uZwkweGYyMjhkMDgwLDB4MDAwMDYxZmYsMHhmZmZmZjk0YywweDIyNDg0MWVlCisJLmxvbmcJMHhmZjg0NzAwYywweDBjMmUwMDA4LDB4ZmY0YTY3MjYsMHg2MWZmZmZmZgorCS5sb25nCTB4NDkyYzRhODEsMHg2NjAwMDA1MiwweDRhMmVmZjRlLDB4NjYwMjRlNzUKKwkubG9uZwkweDA4ZWUwMDAzLDB4ZmY2NjEwMmUsMHhmZjYyMDIwMCwweDAwMGE2NjE2CisJLmxvbmcJMHg0ZTc1NjFmZiwweGZmZmY1Nzg4LDB4NGE4MTY2MDAsMHgwMDJjNGEyZQorCS5sb25nCTB4ZmY0ZTY2ZGMsMHg0ZTc1NDFlZSwweGZmODQ2MWZmLDB4MDAwMDBiM2MKKwkubG9uZwkweDQ0NDAwMjQwLDB4N2ZmZjAyNmUsMHg4MDAwZmY4NCwweDgxNmVmZjg0CisJLmxvbmcJMHhmMjJlZDA0MCwweGZmODQ0ZTc1LDB4MmNhZWZmZDQsMHg2MGZmMDAwMAorCS5sb25nCTB4MWFiMjAyMDAsMHgwMDMwMDAwMCwweDAwNDAyZDQwLDB4ZmY1YzMwMjgKKwkubG9uZwkweDAwMDAwMjQwLDB4N2ZmZjBjNDAsMHg0MDdlNmUwMCwweDAwZTY2NzAwCisJLmxvbmcJMHgwMTUyMGM0MCwweDNmODE2ZDAwLDB4MDA1OGYyMjgsMHhkMDgwMDAwMAorCS5sb25nCTB4ZjIyZTkwMDAsMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMDAKKwkubG9uZwkweDY0MDBmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIwMSwweGE4MDA4MzZlCisJLmxvbmcJMHhmZjY2MTIyZSwweGZmNDEwMjAxLDB4MDAzODY3MTQsMHgyMDZlMDAwYworCS5sb25nCTB4NjFmZmZmZmYsMHg0OTE4NGE4MSwweDY2ZmYwMDAwLDB4MWEyYTRlNzUKKwkubG9uZwkweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHg2MWZmMDAwMCwweDA0ZjA0ZTc1CisJLmxvbmcJMHgwOGVlMDAwMywweGZmNjYzZDY4LDB4MDAwMGZmODQsMHgyZDY4MDAwNAorCS5sb25nCTB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDJmMDg0MjgwLDB4MGMyZTAwMDQKKwkubG9uZwkweGZmNGU2NjBhLDB4NDFlZWZmODQsMHg2MWZmMDAwMCwweDBhNmU0MWVlCisJLmxvbmcJMHhmZjg0MjIyZSwweGZmNWM2MWZmLDB4MDAwMDBjODYsMHg0MWVlZmY4NAorCS5sb25nCTB4NjFmZjAwMDAsMHgwMzRjMTIyZSwweGZmNDEwMjAxLDB4MDAzODY3MTQKKwkubG9uZwkweDIwNmUwMDBjLDB4NjFmZmZmZmYsMHg0OGE0NGE4MSwweDY2ZmYwMDAwCisJLmxvbmcJMHgxOWI2NjAwZSwweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHg2MWZmMDAwMAorCS5sb25nCTB4MDQ3YzEyMmUsMHhmZjYyMDIwMSwweDAwMGE2NjAwLDB4MDBiODU4OGYKKwkubG9uZwkweDRlNzU0YTI4LDB4MDAwNzY2MGUsMHg0YWE4MDAwOCwweDY2MDgwMDZlCisJLmxvbmcJMHgxMDQ4ZmY2NiwweDYwMDYwMDZlLDB4MTI0OGZmNjYsMHgyZjA4NGEyOAorCS5sb25nCTB4MDAwMDViYzEsMHgyMDJlZmY1YywweDYxZmYwMDAwLDB4MGQxMmYyMTAKKwkubG9uZwkweGQwODBmMjAwLDB4NjQwMDEyMmUsMHhmZjQxMDIwMSwweDAwMzg2NzE0CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4NDgzNDRhODEsMHg2NmZmMDAwMAorCS5sb25nCTB4MTk0NjYwMGUsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweDA0MGMxMjJlLDB4ZmY2MjAyMDEsMHgwMDBhNjYwMCwweDAwN2M1ODhmCisJLmxvbmcJMHg0ZTc1MzIyOCwweDAwMDAwMjQxLDB4ODAwMDAwNDEsMHgzZmZmM2Q0MQorCS5sb25nCTB4ZmY4NDJkNjgsMHgwMDA0ZmY4OCwweDJkNjgwMDA4LDB4ZmY4Y2YyMmUKKwkubG9uZwkweDkwMDBmZjVjLDB4ZjIyZTQ4MDAsMHhmZjg0ZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIwMCwweDAwMThmMjNjLDB4NTgzODAwMDIsMHhmMjk0ZmU3YworCS5sb25nCTB4NjAwMGZmNTAsMHgyMDVmM2Q2OCwweDAwMDBmZjg0LDB4MmQ2ODAwMDQKKwkubG9uZwkweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgwYzJlMDAwNCwweGZmNGU2NjJjCisJLmxvbmcJMHg0MWVlZmY4NCwweDYxZmYwMDAwLDB4MDk0MjQ0ODAsMHgwMjQwN2ZmZgorCS5sb25nCTB4ZWZlZTAwNGYsMHhmZjg0NjAxNCwweDIwNWYzZDY4LDB4MDAwMGZmODQKKwkubG9uZwkweDJkNjgwMDA0LDB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDA4YWUwMDA3CisJLmxvbmcJMHhmZjg0NTZlZSwweGZmODY0MWVlLDB4ZmY4NDEyMmUsMHhmZjVmZTgwOQorCS5sb25nCTB4MDI0MTAwMGMsMHg0ODQxMTIyZSwweGZmNWZlODA5LDB4MDI0MTAwMDMKKwkubG9uZwkweDQyODA2MWZmLDB4MDAwMDA3ODIsMHg0YTJlZmY4NiwweDY3MDYwOGVlCisJLmxvbmcJMHgwMDA3ZmY4NCwweGYyMmVkMDQwLDB4ZmY4NDRlNzUsMHgwMjAwMDAzMAorCS5sb25nCTB4MDAwMDAwODAsMHgyZDQwZmY1YywweDMwMjgwMDAwLDB4MDI0MDdmZmYKKwkubG9uZwkweDBjNDA0M2ZlLDB4NmUwMDAwYzgsMHg2NzAwMDEyMCwweDBjNDAzYzAxCisJLmxvbmcJMHg2ZDAwMDA0NiwweGYyMjhkMDgwLDB4MDAwMGYyMmUsMHg5MDAwZmY1YworCS5sb25nCTB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU3NDAwLDB4ZmY1NGYyM2MKKwkubG9uZwkweDkwMDAwMDAwLDB4MDAwMGYyMDAsMHhhODAwODE2ZSwweGZmNjYyMjZlCisJLmxvbmcJMHgwMDBjNDFlZSwweGZmNTQ3MDA4LDB4NjFmZmZmZmYsMHg0NjMwNGE4MQorCS5sb25nCTB4NjZmZjAwMDAsMHgxODAwNGU3NSwweDA4ZWUwMDAzLDB4ZmY2NjNkNjgKKwkubG9uZwkweDAwMDBmZjg0LDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OCwweDAwMDhmZjhjCisJLmxvbmcJMHgyZjA4NDI4MCwweDBjMmUwMDA0LDB4ZmY0ZTY2MGEsMHg0MWVlZmY4NAorCS5sb25nCTB4NjFmZjAwMDAsMHgwODQ2NDFlZSwweGZmODQyMjJlLDB4ZmY1YzYxZmYKKwkubG9uZwkweDAwMDAwYTVlLDB4NDFlZWZmODQsMHg2MWZmMDAwMCwweDAwZDIyZDQwCisJLmxvbmcJMHhmZjU0MmQ0MSwweGZmNTgyMjZlLDB4MDAwYzQxZWUsMHhmZjU0NzAwOAorCS5sb25nCTB4NjFmZmZmZmYsMHg0NWM4NGE4MSwweDY2ZmYwMDAwLDB4MTc5ODEyMmUKKwkubG9uZwkweGZmNjIwMjAxLDB4MDAwYTY2MDAsMHhmZTljNTg4ZiwweDRlNzUzMDI4CisJLmxvbmcJMHgwMDBhMDI0MCwweDA3ZmY2NjA4LDB4MDA2ZTEwNDgsMHhmZjY2NjAwNgorCS5sb25nCTB4MDA2ZTEyNDgsMHhmZjY2MmYwOCwweDRhMjgwMDAwLDB4NWJjMTIwMmUKKwkubG9uZwkweGZmNWM2MWZmLDB4MDAwMDBhZjgsMHhmMjEwZDA4MCwweGYyMmU3NDAwCisJLmxvbmcJMHhmZjU0MjI2ZSwweDAwMGM0MWVlLDB4ZmY1NDcwMDgsMHg2MWZmZmZmZgorCS5sb25nCTB4NDU2YzRhODEsMHg2NmZmMDAwMCwweDE3M2MxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMGE2NjAwLDB4ZmU3NDU4OGYsMHg0ZTc1MzIyOCwweDAwMDAwMjQxCisJLmxvbmcJMHg4MDAwMDA0MSwweDNmZmYzZDQxLDB4ZmY4NDJkNjgsMHgwMDA0ZmY4OAorCS5sb25nCTB4MmQ2ODAwMDgsMHhmZjhjZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MDAKKwkubG9uZwkweGZmODRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZjIwMCwweDAwMThmMjNjCisJLmxvbmcJMHg1ODM4MDAwMiwweGYyOTRmZWFlLDB4NjAwMGZmNjQsMHg0MjgwMzAyOAorCS5sb25nCTB4MDAwMDA0NDAsMHgzZmZmMDY0MCwweDAzZmY0YTI4LDB4MDAwNDZiMDIKKwkubG9uZwkweDUzNDA0ODQwLDB4ZTk4ODRhMjgsMHgwMDAwNmEwNCwweDA4YzAwMDFmCisJLmxvbmcJMHgyMjI4MDAwNCwweGU5YzExMDU0LDB4ODA4MTJkNDAsMHhmZjU0MjIyOAorCS5sb25nCTB4MDAwNDcwMTUsMHhlMWE5MmQ0MSwweGZmNTgyMjI4LDB4MDAwOGU5YzEKKwkubG9uZwkweDAwMTUyMjJlLDB4ZmY1ODgyODAsMHgyMDJlZmY1NCwweDRlNzU0MjgwCisJLmxvbmcJMHgzMDI4MDAwMCwweDA0NDAzZmZmLDB4MDY0MDAwN2YsMHg0YTI4MDAwNAorCS5sb25nCTB4NmIwMjUzNDAsMHg0ODQwZWY4OCwweDRhMjgwMDAwLDB4NmEwNDA4YzAKKwkubG9uZwkweDAwMWYyMjI4LDB4MDAwNDAyODEsMHg3ZmZmZmYwMCwweGUwODk4MDgxCisJLmxvbmcJMHg0ZTc1NjFmZiwweGZmZmZmNDkwLDB4MmYwODEwMmUsMHhmZjRlNjYwMAorCS5sb25nCTB4MDA4MjA4MmUsMHgwMDA0ZmY0MiwweDY3MTIxMjJlLDB4ZmY0M2U4MDkKKwkubG9uZwkweDAyNDEwMDA3LDB4NjFmZjAwMDAsMHgwMDkyNjAwNCwweDEwMmVmZjQzCisJLmxvbmcJMHhlYmMwMDY0NywweDJmMDA0MWVlLDB4ZmY2YzYxZmYsMHgwMDAwMGVkMAorCS5sb25nCTB4MDJhZWNmZmYsMHhmMDBmZmY4NCwweDIwMWY0YTJlLDB4ZmY4NzY2MTYKKwkubG9uZwkweDRhYWVmZjg4LDB4NjYxMDRhYWUsMHhmZjhjNjYwYSwweDRhODA2NjA2CisJLmxvbmcJMHgwMjZlZjAwMCwweGZmODQ0MWVlLDB4ZmY4NDIyNWYsMHg3MDBjMGMyZQorCS5sb25nCTB4MDAwOGZmNGEsMHg2NzBlNjFmZiwweGZmZmY0NDEyLDB4NGE4MTY2MDAKKwkubG9uZwkweGZiMzg0ZTc1LDB4NjFmZmZmZmYsMHg1Mjg2NGE4MSwweDY2MDBmYjJhCisJLmxvbmcJMHg0ZTc1MGMwMCwweDAwMDQ2NzAwLDB4ZmY3YTQxZWUsMHhmZjZjNDI2ZQorCS5sb25nCTB4ZmY2ZTBjMDAsMHgwMDA1NjcwMiwweDYwYzAwMDZlLDB4NDA4MGZmNjYKKwkubG9uZwkweDA4ZWUwMDA2LDB4ZmY3MDYwYjIsMHgzMDNiMTIwNiwweDRlZmIwMDAyCisJLmxvbmcJMHgwMDIwMDAyNiwweDAwMmMwMDMwLDB4MDAzNDAwMzgsMHgwMDNjMDA0MAorCS5sb25nCTB4MDA0NDAwNGEsMHgwMDUwMDA1NCwweDAwNTgwMDVjLDB4MDA2MDAwNjQKKwkubG9uZwkweDIwMmVmZjljLDB4NGU3NTIwMmUsMHhmZmEwNGU3NSwweDIwMDI0ZTc1CisJLmxvbmcJMHgyMDAzNGU3NSwweDIwMDQ0ZTc1LDB4MjAwNTRlNzUsMHgyMDA2NGU3NQorCS5sb25nCTB4MjAwNzRlNzUsMHgyMDJlZmZhNCwweDRlNzUyMDJlLDB4ZmZhODRlNzUKKwkubG9uZwkweDIwMGE0ZTc1LDB4MjAwYjRlNzUsMHgyMDBjNGU3NSwweDIwMGQ0ZTc1CisJLmxvbmcJMHgyMDE2NGU3NSwweDIwMmVmZmQ4LDB4NGU3NTMyM2IsMHgxMjA2NGVmYgorCS5sb25nCTB4MTAwMjAwMTAsMHgwMDE2MDAxYywweDAwMjAwMDI0LDB4MDAyODAwMmMKKwkubG9uZwkweDAwMzAyZDQwLDB4ZmY5YzRlNzUsMHgyZDQwZmZhMCwweDRlNzUyNDAwCisJLmxvbmcJMHg0ZTc1MjYwMCwweDRlNzUyODAwLDB4NGU3NTJhMDAsMHg0ZTc1MmMwMAorCS5sb25nCTB4NGU3NTJlMDAsMHg0ZTc1MzIzYiwweDEyMDY0ZWZiLDB4MTAwMjAwMTAKKwkubG9uZwkweDAwMTYwMDFjLDB4MDAyMDAwMjQsMHgwMDI4MDAyYywweDAwMzAzZDQwCisJLmxvbmcJMHhmZjllNGU3NSwweDNkNDBmZmEyLDB4NGU3NTM0MDAsMHg0ZTc1MzYwMAorCS5sb25nCTB4NGU3NTM4MDAsMHg0ZTc1M2EwMCwweDRlNzUzYzAwLDB4NGU3NTNlMDAKKwkubG9uZwkweDRlNzUzMjNiLDB4MTIwNjRlZmIsMHgxMDAyMDAxMCwweDAwMTYwMDFjCisJLmxvbmcJMHgwMDIwMDAyNCwweDAwMjgwMDJjLDB4MDAzMDFkNDAsMHhmZjlmNGU3NQorCS5sb25nCTB4MWQ0MGZmYTMsMHg0ZTc1MTQwMCwweDRlNzUxNjAwLDB4NGU3NTE4MDAKKwkubG9uZwkweDRlNzUxYTAwLDB4NGU3NTFjMDAsMHg0ZTc1MWUwMCwweDRlNzUzMjNiCisJLmxvbmcJMHgxMjA2NGVmYiwweDEwMDIwMDEwLDB4MDAxNjAwMWMsMHgwMDIwMDAyNAorCS5sb25nCTB4MDAyODAwMmMsMHgwMDMwZDFhZSwweGZmYTQ0ZTc1LDB4ZDFhZWZmYTgKKwkubG9uZwkweDRlNzVkNWMwLDB4NGU3NWQ3YzAsMHg0ZTc1ZDljMCwweDRlNzVkYmMwCisJLmxvbmcJMHg0ZTc1ZDE5NiwweDRlNzUxZDdjLDB4MDAwNGZmNGEsMHgwYzAwMDAwMQorCS5sb25nCTB4NjcwNmQxYWUsMHhmZmQ4NGU3NSwweDU0YWVmZmQ4LDB4NGU3NTMyM2IKKwkubG9uZwkweDEyMDY0ZWZiLDB4MTAwMjAwMTAsMHgwMDE2MDAxYywweDAwMjAwMDI0CisJLmxvbmcJMHgwMDI4MDAyYywweDAwMzA5MWFlLDB4ZmZhNDRlNzUsMHg5MWFlZmZhOAorCS5sb25nCTB4NGU3NTk1YzAsMHg0ZTc1OTdjMCwweDRlNzU5OWMwLDB4NGU3NTliYzAKKwkubG9uZwkweDRlNzU5MTk2LDB4NGU3NTFkN2MsMHgwMDA4ZmY0YSwweDBjMDAwMDAxCisJLmxvbmcJMHg2NzA2OTFhZSwweGZmZDg0ZTc1LDB4NTVhZWZmZDgsMHg0ZTc1MzAzYgorCS5sb25nCTB4MDIwNjRlZmIsMHgwMDAyMDAxMCwweDAwMjgwMDQwLDB4MDA0YzAwNTgKKwkubG9uZwkweDAwNjQwMDcwLDB4MDA3YzJkNmUsMHhmZmRjZmY2YywweDJkNmVmZmUwCisJLmxvbmcJMHhmZjcwMmQ2ZSwweGZmZTRmZjc0LDB4NDFlZWZmNmMsMHg0ZTc1MmQ2ZQorCS5sb25nCTB4ZmZlOGZmNmMsMHgyZDZlZmZlYywweGZmNzAyZDZlLDB4ZmZmMGZmNzQKKwkubG9uZwkweDQxZWVmZjZjLDB4NGU3NWYyMmUsMHhmMDIwZmY2YywweDQxZWVmZjZjCisJLmxvbmcJMHg0ZTc1ZjIyZSwweGYwMTBmZjZjLDB4NDFlZWZmNmMsMHg0ZTc1ZjIyZQorCS5sb25nCTB4ZjAwOGZmNmMsMHg0MWVlZmY2YywweDRlNzVmMjJlLDB4ZjAwNGZmNmMKKwkubG9uZwkweDQxZWVmZjZjLDB4NGU3NWYyMmUsMHhmMDAyZmY2YywweDQxZWVmZjZjCisJLmxvbmcJMHg0ZTc1ZjIyZSwweGYwMDFmZjZjLDB4NDFlZWZmNmMsMHg0ZTc1MzAzYgorCS5sb25nCTB4MDIwNjRlZmIsMHgwMDAyMDAxMCwweDAwMjgwMDQwLDB4MDA0YzAwNTgKKwkubG9uZwkweDAwNjQwMDcwLDB4MDA3YzJkNmUsMHhmZmRjZmY3OCwweDJkNmVmZmUwCisJLmxvbmcJMHhmZjdjMmQ2ZSwweGZmZTRmZjgwLDB4NDFlZWZmNzgsMHg0ZTc1MmQ2ZQorCS5sb25nCTB4ZmZlOGZmNzgsMHgyZDZlZmZlYywweGZmN2MyZDZlLDB4ZmZmMGZmODAKKwkubG9uZwkweDQxZWVmZjc4LDB4NGU3NWYyMmUsMHhmMDIwZmY3OCwweDQxZWVmZjc4CisJLmxvbmcJMHg0ZTc1ZjIyZSwweGYwMTBmZjc4LDB4NDFlZWZmNzgsMHg0ZTc1ZjIyZQorCS5sb25nCTB4ZjAwOGZmNzgsMHg0MWVlZmY3OCwweDRlNzVmMjJlLDB4ZjAwNGZmNzgKKwkubG9uZwkweDQxZWVmZjc4LDB4NGU3NWYyMmUsMHhmMDAyZmY3OCwweDQxZWVmZjc4CisJLmxvbmcJMHg0ZTc1ZjIyZSwweGYwMDFmZjc4LDB4NDFlZWZmNzgsMHg0ZTc1MzAzYgorCS5sb25nCTB4MDIwNjRlZmIsMHgwMDAyMDAxMCwweDAwMTgwMDIwLDB4MDAyYTAwMzQKKwkubG9uZwkweDAwM2UwMDQ4LDB4MDA1MmYyMmUsMHhmMDgwZmZkYywweDRlNzVmMjJlCisJLmxvbmcJMHhmMDgwZmZlOCwweDRlNzVmMjI3LDB4ZTAwMWYyMWYsMHhkMDIwNGU3NQorCS5sb25nCTB4ZjIyN2UwMDEsMHhmMjFmZDAxMCwweDRlNzVmMjI3LDB4ZTAwMWYyMWYKKwkubG9uZwkweGQwMDg0ZTc1LDB4ZjIyN2UwMDEsMHhmMjFmZDAwNCwweDRlNzVmMjI3CisJLmxvbmcJMHhlMDAxZjIxZiwweGQwMDI0ZTc1LDB4ZjIyN2UwMDEsMHhmMjFmZDAwMQorCS5sb25nCTB4NGU3NTAwMDAsMHgzZjgxM2MwMSwweGU0MDgzMjNiLDB4MDJmNjMwMDEKKwkubG9uZwkweDkwNjgwMDAwLDB4MGM0MDAwNDIsMHg2YTE2NDI4MCwweDA4MmUwMDAxCisJLmxvbmcJMHhmZjY2NjcwNCwweDA4YzAwMDFkLDB4NjFmZjAwMDAsMHgwMDFhNGU3NQorCS5sb25nCTB4MjAzYzIwMDAsMHgwMDAwMzE0MSwweDAwMDA0MmE4LDB4MDAwNDQyYTgKKwkubG9uZwkweDAwMDg0ZTc1LDB4MmQ2ODAwMDgsMHhmZjU0MmQ0MCwweGZmNTgyMDAxCisJLmxvbmcJMHg5MjY4MDAwMCwweDZmMTAwYzQxLDB4MDAyMDZkMTAsMHgwYzQxMDA0MAorCS5sb25nCTB4NmQ1MDYwMDAsMHgwMDlhMjAyZSwweGZmNTg0ZTc1LDB4MmYwMjMxNDAKKwkubG9uZwkweDAwMDA3MDIwLDB4OTA0MTBjNDEsMHgwMDFkNmQwOCwweDE0MmVmZjU4CisJLmxvbmcJMHg4NTJlZmY1NywweGU5ZTgyMDIwLDB4MDAwNGU5ZTgsMHgxODAwMDAwNAorCS5sb25nCTB4ZTllZTA4MDAsMHhmZjU0MjE0MiwweDAwMDQyMTQxLDB4MDAwOGU4YzAKKwkubG9uZwkweDAwOWU2NzA0LDB4MDhjMDAwMWQsMHgwMjgwZTAwMCwweDAwMDAyNDFmCisJLmxvbmcJMHg0ZTc1MmYwMiwweDMxNDAwMDAwLDB4MDQ0MTAwMjAsMHg3MDIwOTA0MQorCS5sb25nCTB4MTQyZWZmNTgsMHg4NTJlZmY1NywweGU5ZTgyMDIwLDB4MDAwNGU5ZTgKKwkubG9uZwkweDE4MDAwMDA0LDB4ZThjMTAwOWUsMHg2NjBjZThlZSwweDA4MWZmZjU0CisJLmxvbmcJMHg2NjA0MjAwMSwweDYwMDYyMDAxLDB4MDhjMDAwMWQsMHg0MmE4MDAwNAorCS5sb25nCTB4MjE0MjAwMDgsMHgwMjgwZTAwMCwweDAwMDAyNDFmLDB4NGU3NTMxNDAKKwkubG9uZwkweDAwMDAwYzQxLDB4MDA0MTZkMTIsMHg2NzI0NDJhOCwweDAwMDQ0MmE4CisJLmxvbmcJMHgwMDA4MjAzYywweDIwMDAwMDAwLDB4NGU3NTIwMjgsMHgwMDA0MjIwMAorCS5sb25nCTB4MDI4MGMwMDAsMHgwMDAwMDI4MSwweDNmZmZmZmZmLDB4NjAxMjIwMjgKKwkubG9uZwkweDAwMDQwMjgwLDB4ODAwMDAwMDAsMHhlMjg4MDI4MSwweDdmZmZmZmZmCisJLmxvbmcJMHg2NjE2NGFhOCwweDAwMDg2NjEwLDB4NGEyZWZmNTgsMHg2NjBhNDJhOAorCS5sb25nCTB4MDAwNDQyYTgsMHgwMDA4NGU3NSwweDA4YzAwMDFkLDB4NDJhODAwMDQKKwkubG9uZwkweDQyYTgwMDA4LDB4NGU3NTYxZmYsMHgwMDAwMDExMCwweDRhODA2NzAwCisJLmxvbmcJMHgwMGZhMDA2ZSwweDAyMDhmZjY2LDB4MzI3YjEyMDYsMHg0ZWZiOTgwMgorCS5sb25nCTB4MDA0MDAwZWEsMHgwMDI0MDAwOCwweDRhMjgwMDAyLDB4NmIwMDAwZGMKKwkubG9uZwkweDcwZmY0ODQxLDB4MGMwMTAwMDQsMHg2NzAwMDAzZSwweDZlMDAwMDk0CisJLmxvbmcJMHg2MDAwMDA2NCwweDRhMjgwMDAyLDB4NmEwMDAwYzAsMHg3MGZmNDg0MQorCS5sb25nCTB4MGMwMTAwMDQsMHg2NzAwMDAyMiwweDZlMDAwMDc4LDB4NjAwMDAwNDgKKwkubG9uZwkweGUzODA2NDAwLDB4MDBhNjQ4NDEsMHgwYzAxMDAwNCwweDY3MDAwMDBhCisJLmxvbmcJMHg2ZTAwMDA2MCwweDYwMDAwMDMwLDB4MDZhODAwMDAsMHgwMTAwMDAwNAorCS5sb25nCTB4NjQwY2U0ZTgsMHgwMDA0ZTRlOCwweDAwMDY1MjY4LDB4MDAwMDRhODAKKwkubG9uZwkweDY2MDYwMjY4LDB4ZmUwMDAwMDYsMHgwMmE4ZmZmZiwweGZmMDAwMDA0CisJLmxvbmcJMHg0MmE4MDAwOCwweDRlNzU1MmE4LDB4MDAwODY0MWEsMHg1MmE4MDAwNAorCS5sb25nCTB4NjQxNGU0ZTgsMHgwMDA0ZTRlOCwweDAwMDZlNGU4LDB4MDAwOGU0ZTgKKwkubG9uZwkweDAwMGE1MjY4LDB4MDAwMDRhODAsMHg2NjA2MDIyOCwweDAwZmUwMDBiCisJLmxvbmcJMHg0ZTc1MDZhOCwweDAwMDAwODAwLDB4MDAwODY0MWEsMHg1MmE4MDAwNAorCS5sb25nCTB4NjQxNGU0ZTgsMHgwMDA0ZTRlOCwweDAwMDZlNGU4LDB4MDAwOGU0ZTgKKwkubG9uZwkweDAwMGE1MjY4LDB4MDAwMDRhODAsMHg2NjA2MDI2OCwweGYwMDAwMDBhCisJLmxvbmcJMHgwMmE4ZmZmZiwweGY4MDAwMDA4LDB4NGU3NTQ4NDEsMHgwYzAxMDAwNAorCS5sb25nCTB4NjcwMGZmODYsMHg2ZWVhNGU3NSwweDQ4NDE0YTAxLDB4NjYwNDQ4NDEKKwkubG9uZwkweDRlNzU0OGU3LDB4MzAwMDBjMDEsMHgwMDA0NjYyMiwweGU5ZTgzNjAyCisJLmxvbmcJMHgwMDA0NzQxZSwweGU1YWIyNDI4LDB4MDAwNDAyODIsMHgwMDAwMDAzZgorCS5sb25nCTB4NjYyODRhYTgsMHgwMDA4NjYyMiwweDRhODA2NjFlLDB4NjAyMGU5ZTgKKwkubG9uZwkweDM1NDIwMDA4LDB4NzQxZWU1YWIsMHgyNDI4MDAwOCwweDAyODIwMDAwCisJLmxvbmcJMHgwMWZmNjYwNiwweDRhODA2NjAyLDB4NjAwNDA4YzMsMHgwMDFkMjAwMworCS5sb25nCTB4NGNkZjAwMGMsMHg0ODQxNGU3NSwweDJmMDIyZjAzLDB4MjAyODAwMDQKKwkubG9uZwkweDIyMjgwMDA4LDB4ZWRjMDIwMDAsMHg2NzFhZTVhOCwweGU5YzEzMDIyCisJLmxvbmcJMHg4MDgzZTVhOSwweDIxNDAwMDA0LDB4MjE0MTAwMDgsMHgyMDAyMjYxZgorCS5sb25nCTB4MjQxZjRlNzUsMHhlZGMxMjAwMCwweGU1YTkwNjgyLDB4MDAwMDAwMjAKKwkubG9uZwkweDIxNDEwMDA0LDB4NDJhODAwMDgsMHgyMDAyMjYxZiwweDI0MWY0ZTc1CisJLmxvbmcJMHhlZGU4MDAwMCwweDAwMDQ2NjBlLDB4ZWRlODAwMDAsMHgwMDA4NjcwMAorCS5sb25nCTB4MDA3NDA2NDAsMHgwMDIwNDI4MSwweDMyMjgwMDAwLDB4MDI0MTdmZmYKKwkubG9uZwkweGIwNDE2ZTFjLDB4OTI0MDMwMjgsMHgwMDAwMDI0MCwweDgwMDA4MjQwCisJLmxvbmcJMHgzMTQxMDAwMCwweDYxZmZmZmZmLDB4ZmY4MjEwM2MsMHgwMDAwNGU3NQorCS5sb25nCTB4MGMwMTAwMjAsMHg2ZTIwZTllOCwweDA4NDAwMDA0LDB4MjE0MDAwMDQKKwkubG9uZwkweDIwMjgwMDA4LDB4ZTNhODIxNDAsMHgwMDA4MDI2OCwweDgwMDAwMDAwCisJLmxvbmcJMHgxMDNjMDAwNCwweDRlNzUwNDQxLDB4MDAyMDIwMjgsMHgwMDA4ZTNhOAorCS5sb25nCTB4MjE0MDAwMDQsMHg0MmE4MDAwOCwweDAyNjg4MDAwLDB4MDAwMDEwM2MKKwkubG9uZwkweDAwMDQ0ZTc1LDB4MDI2ODgwMDAsMHgwMDAwMTAzYywweDAwMDE0ZTc1CisJLmxvbmcJMHgzMDI4MDAwMCwweDAyNDA3ZmZmLDB4MGM0MDdmZmYsMHg2NzQ4MDgyOAorCS5sb25nCTB4MDAwNzAwMDQsMHg2NzA2MTAzYywweDAwMDA0ZTc1LDB4NGE0MDY2MTgKKwkubG9uZwkweDRhYTgwMDA0LDB4NjYwYzRhYTgsMHgwMDA4NjYwNiwweDEwM2MwMDAxCisJLmxvbmcJMHg0ZTc1MTAzYywweDAwMDQ0ZTc1LDB4NGFhODAwMDQsMHg2NjEyNGFhOAorCS5sb25nCTB4MDAwODY2MGMsMHgwMjY4ODAwMCwweDAwMDAxMDNjLDB4MDAwMTRlNzUKKwkubG9uZwkweDEwM2MwMDA2LDB4NGU3NTRhYTgsMHgwMDA4NjYxMiwweDIwMjgwMDA0CisJLmxvbmcJMHgwMjgwN2ZmZiwweGZmZmY2NjA2LDB4MTAzYzAwMDIsMHg0ZTc1MDgyOAorCS5sb25nCTB4MDAwNjAwMDQsMHg2NzA2MTAzYywweDAwMDM0ZTc1LDB4MTAzYzAwMDUKKwkubG9uZwkweDRlNzUyMDI4LDB4MDAwMDIyMDAsMHgwMjgwN2ZmMCwweDAwMDA2NzBlCisJLmxvbmcJMHgwYzgwN2ZmMCwweDAwMDA2NzI4LDB4MTAzYzAwMDAsMHg0ZTc1MDI4MQorCS5sb25nCTB4MDAwZmZmZmYsMHg2NmZmMDAwMCwweDAwMTQ0YWE4LDB4MDAwNDY2ZmYKKwkubG9uZwkweDAwMDAwMDBhLDB4MTAzYzAwMDEsMHg0ZTc1MTAzYywweDAwMDQ0ZTc1CisJLmxvbmcJMHgwMjgxMDAwZiwweGZmZmY2NmZmLDB4MDAwMDAwMTQsMHg0YWE4MDAwNAorCS5sb25nCTB4NjZmZjAwMDAsMHgwMDBhMTAzYywweDAwMDI0ZTc1LDB4MDgwMTAwMTMKKwkubG9uZwkweDY2ZmYwMDAwLDB4MDAwYTEwM2MsMHgwMDA1NGU3NSwweDEwM2MwMDAzCisJLmxvbmcJMHg0ZTc1MjAyOCwweDAwMDAyMjAwLDB4MDI4MDdmODAsMHgwMDAwNjcwZQorCS5sb25nCTB4MGM4MDdmODAsMHgwMDAwNjcxZSwweDEwM2MwMDAwLDB4NGU3NTAyODEKKwkubG9uZwkweDAwN2ZmZmZmLDB4NjZmZjAwMDAsMHgwMDBhMTAzYywweDAwMDE0ZTc1CisJLmxvbmcJMHgxMDNjMDAwNCwweDRlNzUwMjgxLDB4MDA3ZmZmZmYsMHg2NmZmMDAwMAorCS5sb25nCTB4MDAwYTEwM2MsMHgwMDAyNGU3NSwweDA4MDEwMDE2LDB4NjZmZjAwMDAKKwkubG9uZwkweDAwMGExMDNjLDB4MDAwNTRlNzUsMHgxMDNjMDAwMywweDRlNzUyZjAxCisJLmxvbmcJMHgwODI4MDAwNywweDAwMDA1NmU4LDB4MDAwMjMyMjgsMHgwMDAwMDI0MQorCS5sb25nCTB4N2ZmZjkyNDAsMHgzMTQxMDAwMCwweDJmMDgyMDJmLDB4MDAwNDAyNDAKKwkubG9uZwkweDAwYzBlODQ4LDB4NjFmZmZmZmYsMHhmYWUyMjA1NywweDMyMmYwMDA2CisJLmxvbmcJMHgwMjQxMDBjMCwweGU4NDk0ODQxLDB4MzIyZjAwMDYsMHgwMjQxMDAzMAorCS5sb25nCTB4ZTg0OTYxZmYsMHhmZmZmZmMyMiwweDIwNWYwOGE4LDB4MDAwNzAwMDAKKwkubG9uZwkweDRhMjgwMDAyLDB4NjcwYTA4ZTgsMHgwMDA3MDAwMCwweDQyMjgwMDAyCisJLmxvbmcJMHg0MjgwNGFhOCwweDAwMDQ2NjBhLDB4NGFhODAwMDgsMHg2NjA0MDhjMAorCS5sb25nCTB4MDAwMjA4MmUsMHgwMDAxZmY2NiwweDY3MDYwOGVlLDB4MDAwNWZmNjcKKwkubG9uZwkweDU4OGY0ZTc1LDB4MmYwMTA4MjgsMHgwMDA3MDAwMCwweDU2ZTgwMDAyCisJLmxvbmcJMHgzMjI4MDAwMCwweDAyNDE3ZmZmLDB4OTI0MDMxNDEsMHgwMDAwMmYwOAorCS5sb25nCTB4NDI4MDYxZmYsMHhmZmZmZmE2NCwweDIwNTczMjNjLDB4MDAwNDQ4NDEKKwkubG9uZwkweDMyMmYwMDA2LDB4MDI0MTAwMzAsMHhlODQ5NjFmZiwweGZmZmZmYmFhCisJLmxvbmcJMHgyMDVmMDhhOCwweDAwMDcwMDAwLDB4NGEyODAwMDIsMHg2NzBhMDhlOAorCS5sb25nCTB4MDAwNzAwMDAsMHg0MjI4MDAwMiwweDQyODA0YWE4LDB4MDAwNDY2MGEKKwkubG9uZwkweDRhYTgwMDA4LDB4NjYwNDA4YzAsMHgwMDAyMDgyZSwweDAwMDFmZjY2CisJLmxvbmcJMHg2NzA2MDhlZSwweDAwMDVmZjY3LDB4NTg4ZjRlNzUsMHgwMjQxMDAxMAorCS5sb25nCTB4ZTgwODgyMDAsMHgzMDAxZTMwOSwweDYwMGUwMjQxLDB4MDAxMDgyMDAKKwkubG9uZwkweDQ4NDA4MjAwLDB4MzAwMWUzMDksMHgxMDNiMDAwOCwweDQxZmIxNjIwCisJLmxvbmcJMHg0ZTc1MDIwMCwweDAwMDIwMjAwLDB4MDAwMjAyMDAsMHgwMDAyMDAwMAorCS5sb25nCTB4MDAwMDBhMDgsMHgwYTA4MGEwOCwweDBhMDgwYTA4LDB4MGEwODdmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA3ZmZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZmZmZjAwMDAsMHgwMDAwN2ZmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGZmZmYwMDAwLDB4MDAwMDdmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwNDA3ZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZjAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDQwN2UKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmYwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDQzZmUKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmZmZmZmZmYsMHhmODAwMDAwMCwweDAwMDA0M2ZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZjgwMDAwMDAsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBmZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwZmZmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGZmZmYwMDAwLDB4MDAwMGZmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBmZmZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZmZmZjAwMDAsMHgwMDAwZmZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGMwN2UKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmYwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBmZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYzA3ZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZjAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGZmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBjM2ZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZjgwMDAwMDAsMHgwMDAwZmZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGMzZmUKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmZmZmZmZmYsMHhmODAwMDAwMCwweDAwMDA3MDBjCisJLmxvbmcJMHg2MWZmZmZmZiwweGU4MmM0M2VlLDB4ZmY2YzcwMGMsMHg2MWZmZmZmZgorCS5sb25nCTB4Mzg2NjRhODEsMHg2NmZmMDAwMCwweDBhMTRlOWVlLDB4MDA0ZmZmNmMKKwkubG9uZwkweDBjNDA3ZmZmLDB4NjYwMjRlNzUsMHgxMDJlZmY2ZiwweDAyMDAwMDBmCisJLmxvbmcJMHg2NjBlNGFhZSwweGZmNzA2NjA4LDB4NGFhZWZmNzQsMHg2NjAyNGU3NQorCS5sb25nCTB4NDFlZWZmNmMsMHg2MWZmMDAwMCwweDAwMWNmMjJlLDB4ZjA4MGZmNmMKKwkubG9uZwkweDRlNzUwMDAwLDB4MDAwMDAyMDMsMHgwMjAzMDIwMywweDAzMDIwMzAyCisJLmxvbmcJMHgwMjAzMmQ2OCwweDAwMDBmZjg0LDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OAorCS5sb25nCTB4MDAwOGZmOGMsMHg0MWVlZmY4NCwweDQ4ZTczYzAwLDB4ZjIyN2UwMDEKKwkubG9uZwkweDc0MDI3NjA0LDB4MjgxMDQyODEsMHg0YzNjMTAwMSwweDAwMDAwMDBhCisJLmxvbmcJMHhlOWM0MDhjNCwweGQyODA1ODAzLDB4NTFjYWZmZWUsMHgwODA0MDAxZQorCS5sb25nCTB4NjcwMjQ0ODEsMHgwNDgxMDAwMCwweDAwMTA2YzBlLDB4NDQ4MTAwODQKKwkubG9uZwkweDQwMDAwMDAwLDB4MDA5MDQwMDAsMHgwMDAwMmYwMSwweDcyMDFmMjNjCisJLmxvbmcJMHg0NDAwMDAwMCwweDAwMDBlOWQwLDB4MDcwNGYyMDAsMHg1ODIyMjgzMAorCS5sb25nCTB4MWMwMDc2MDAsMHg3NDA3ZjIzYywweDQ0MjM0MTIwLDB4MDAwMGU5YzQKKwkubG9uZwkweDA4YzRmMjAwLDB4NTgyMjU4MDMsMHg1MWNhZmZlYywweDUyODEwYzgxCisJLmxvbmcJMHgwMDAwMDAwMiwweDZmZDgwODEwLDB4MDAxZjY3MDQsMHhmMjAwMDAxYQorCS5sb25nCTB4MjIxNzBjODEsMHgwMDAwMDAxYiwweDZmMDAwMGU0LDB4MDgxMDAwMWUKKwkubG9uZwkweDY2NzQ0MjgxLDB4MjgxMGU5YzQsMHgwNzA0NjYyNCwweDUyODE3YTAxCisJLmxvbmcJMHgyODMwNWMwMCwweDY2MDg1MDgxLDB4NTI4NTI4MzAsMHg1YzAwNDI4MworCS5sb25nCTB4NzQwN2U5YzQsMHgwOGM0NjYwOCwweDU4ODM1MjgxLDB4NTFjYWZmZjQKKwkubG9uZwkweDIwMDEyMjE3LDB4OTI4MDZjMTAsMHg0NDgxMjgxMCwweDAwODQ0MDAwCisJLmxvbmcJMHgwMDAwMDA5MCwweDQwMDAwMDAwLDB4NDNmYjAxNzAsMHgwMDAwMDY2NgorCS5sb25nCTB4NDI4M2YyM2MsMHg0NDgwM2Y4MCwweDAwMDA3NDAzLDB4ZTI4MDY0MDYKKwkubG9uZwkweGYyMzE0OGEzLDB4MzgwMDA2ODMsMHgwMDAwMDAwYywweDRhODA2NmVjCisJLmxvbmcJMHhmMjAwMDQyMywweDYwNjg0MjgxLDB4N2EwMjI4MzAsMHg1YzAwNjYwOAorCS5sb25nCTB4NTM4NTUwODEsMHgyODMwNWMwMCwweDc2MWM3NDA3LDB4ZTljNDA4YzQKKwkubG9uZwkweDY2MDg1OTgzLDB4NTI4MTUxY2EsMHhmZmY0MjAwMSwweDIyMTc5MjgwCisJLmxvbmcJMHg2ZTEwNDQ4MSwweDI4MTAwMjg0LDB4YmZmZmZmZmYsMHgwMjkwYmZmZgorCS5sb25nCTB4ZmZmZjQzZmIsMHgwMTcwMDAwMCwweDA1ZmM0MjgzLDB4ZjIzYzQ0ODAKKwkubG9uZwkweDNmODAwMDAwLDB4NzQwM2UyODAsMHg2NDA2ZjIzMSwweDQ4YTMzODAwCisJLmxvbmcJMHgwNjgzMDAwMCwweDAwMGM0YTgwLDB4NjZlY2YyMDAsMHgwNDIwMjYyZQorCS5sb25nCTB4ZmY2MGU5YzMsMHgyNjgyMjgxMCwweGU1ODJlOWM0LDB4MDAwMmQ0ODAKKwkubG9uZwkweDQzZmFmZTUwLDB4MTAzMTI4MDAsMHg0MjgzZWZjMywweDA2ODJmMjAzCisJLmxvbmcJMHg5MDAwZTI4MCwweDY0MGE0M2ZiLDB4MDE3MDAwMDAsMHgwNjQ0NjAxNgorCS5sb25nCTB4ZTI4MDY0MGEsMHg0M2ZiMDE3MCwweDAwMDAwNmQyLDB4NjAwODQzZmIKKwkubG9uZwkweDAxNzAwMDAwLDB4MDU5MDIwMDEsMHg2YTA4NDQ4MCwweDAwOTA0MDAwCisJLmxvbmcJMHgwMDAwNDI4MywweGYyM2M0NDgwLDB4M2Y4MDAwMDAsMHhlMjgwNjQwNgorCS5sb25nCTB4ZjIzMTQ4YTMsMHgzODAwMDY4MywweDAwMDAwMDBjLDB4NGE4MDY2ZWMKKwkubG9uZwkweDA4MTAwMDFlLDB4NjcwNmYyMDAsMHgwNDIwNjAwNCwweGYyMDAwNDIzCisJLmxvbmcJMHhmMjAwYTgwMCwweDA4ODAwMDA5LDB4NjcwNjAwNmUsMHgwMTA4ZmY2NgorCS5sb25nCTB4NTg4ZmYyMWYsMHhkMDQwNGNkZiwweDAwM2NmMjNjLDB4OTAwMDAwMDAKKwkubG9uZwkweDAwMDBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwNGU3NSwweDNmZmQwMDAwCisJLmxvbmcJMHg5YTIwOWE4NCwweGZiY2ZmNzk4LDB4MDAwMDAwMDAsMHgzZmZkMDAwMAorCS5sb25nCTB4OWEyMDlhODQsMHhmYmNmZjc5OSwweDAwMDAwMDAwLDB4M2Y4MDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDQwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MTIwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4NDU5YTI4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMzAzMDIwMiwweDAzMDIwMjAzLDB4MDIwMzAzMDIsMHg0OGU3M2YyMAorCS5sb25nCTB4ZjIyN2UwMDcsMHhmMjNjOTAwMCwweDAwMDAwMDIwLDB4MmQ1MGZmNTgKKwkubG9uZwkweDJlMDA0MjJlLDB4ZmY1MDBjMmUsMHgwMDA0ZmY0ZSwweDY2MDAwMDMwCisJLmxvbmcJMHgzMDEwMDI0MCwweDdmZmYyMjI4LDB4MDAwNDI0MjgsMHgwMDA4NTM0MAorCS5sb25nCTB4ZTM4YWUzOTEsMHg0YTgxNmNmNiwweDRhNDA2ZTA0LDB4NTBlZWZmNTAKKwkubG9uZwkweDAyNDA3ZmZmLDB4MzA4MDIxNDEsMHgwMDA0MjE0MiwweDAwMDgyZDUwCisJLmxvbmcJMHhmZjkwMmQ2OCwweDAwMDRmZjk0LDB4MmQ2ODAwMDgsMHhmZjk4MDJhZQorCS5sb25nCTB4N2ZmZmZmZmYsMHhmZjkwNGEyZSwweGZmNTA2NzA4LDB4MmMzY2ZmZmYKKwkubG9uZwkweGVjYmI2MDM4LDB4MzAyZWZmOTAsMHgzZDdjM2ZmZiwweGZmOTBmMjJlCisJLmxvbmcJMHg0ODAwZmY5MCwweDA0NDAzZmZmLDB4ZjIwMDUwMjIsMHhmMjNhNDQyOAorCS5sb25nCTB4ZmYxY2YyOTMsMHgwMDBlZjIzYSwweDQ4MjNmZjAyLDB4ZjIwNjYwMDAKKwkubG9uZwkweDYwMGFmMjNhLDB4NDgyM2ZlZTYsMHhmMjA2NjAwMCwweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQyNDU0YTg3LDB4NmYwNDI4MDcsMHg2MDA2MjgwNgorCS5sb25nCTB4OTg4NzUyODQsMHg0YTg0NmYxOCwweDBjODQwMDAwLDB4MDAxMTZmMTIKKwkubG9uZwkweDc4MTE0YTg3LDB4NmYwYzAwYWUsMHgwMDAwMjA4MCwweGZmNjQ2MDAyCisJLmxvbmcJMHg3ODAxNGE4NywweDZlMDZiZTg2LDB4NmQwMjJjMDcsMHgyMDA2NTI4MAorCS5sb25nCTB4OTA4NDQ4NDUsMHg0MjQ1NDI0MiwweDRhODA2YzE0LDB4NTI0NTBjODAKKwkubG9uZwkweGZmZmZlY2Q0LDB4NmUwODA2ODAsMHgwMDAwMDAxOCwweDc0MTg0NDgwCisJLmxvbmcJMHhmMjNhNDQ4MCwweGZlOThlOWVlLDB4MTY4MmZmNjAsMHhlMzQ5ZDI0NQorCS5sb25nCTB4ZTM0OTRhYWUsMHhmZjU4NmMwMiwweDUyODE0NWZhLDB4ZmVjMDE2MzIKKwkubG9uZwkweDE4MDBlOThiLDB4ZjIwMzkwMDAsMHhlODhiNGEwMywweDY2MGE0M2ZiCisJLmxvbmcJMHgwMTcwMDAwMCwweDAzNzA2MDE2LDB4ZTIwYjY0MGEsMHg0M2ZiMDE3MAorCS5sb25nCTB4MDAwMDAzZmUsMHg2MDA4NDNmYiwweDAxNzAwMDAwLDB4MDQ5MDQyODMKKwkubG9uZwkweGUyODg2NDA2LDB4ZjIzMTQ4YTMsMHgzODAwMDY4MywweDAwMDAwMDBjCisJLmxvbmcJMHg0YTgwNjZlYywweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMTAsMHhmMjEwNDgwMCwweGYyMDAwMDE4LDB4NGE0NTY2MDgKKwkubG9uZwkweGYyMDAwNDIwLDB4NjAwMDAwOGUsMHg0YTJlZmY1MCwweDY3MDAwMDcyCisJLmxvbmcJMHhmMjI3ZTAwMiwweDM2MTcwMjQzLDB4N2ZmZjAwNTAsMHg4MDAwZDY1MAorCS5sb25nCTB4MDQ0MzNmZmYsMHhkNjY5MDAyNCwweDA0NDMzZmZmLDB4ZDY2OTAwMzAKKwkubG9uZwkweDA0NDMzZmZmLDB4NmIwMDAwNDgsMHgwMjU3ODAwMCwweDg3NTcwMjUwCisJLmxvbmcJMHg3ZmZmMmYyOCwweDAwMDgyZjI4LDB4MDAwNDJmM2MsMHgzZmZmMDAwMAorCS5sb25nCTB4ZjIxZmQwODAsMHhmMjFmNDgyMywweDJmMjkwMDJjLDB4MmYyOTAwMjgKKwkubG9uZwkweDJmM2MzZmZmLDB4MDAwMDJmMjksMHgwMDM4MmYyOSwweDAwMzQyZjNjCisJLmxvbmcJMHgzZmZmMDAwMCwweGYyMWY0ODIzLDB4ZjIxZjQ4MjMsMHg2MDE2NjBmZQorCS5sb25nCTB4NGE0MjY3MGMsMHhmMjI5NDgyMywweDAwMjRmMjI5LDB4NDgyMzAwMzAKKwkubG9uZwkweGYyMDAwNDIzLDB4ZjIwMGE4MDAsMHhmMjJlNjgwMCwweGZmOTA0NWVlCisJLmxvbmcJMHhmZjkwMDgwMCwweDAwMDk2NzBlLDB4MDBhYTAwMDAsMHgwMDAxMDAwOAorCS5sb25nCTB4ZjIyZTQ4MDAsMHhmZjkwMmQ2ZSwweGZmNjBmZjU0LDB4MDJhZTAwMDAKKwkubG9uZwkweDAwMzBmZjYwLDB4NDhlN2MwYzAsMHgyZjJlZmY1NCwweDJmMmVmZjU4CisJLmxvbmcJMHg0MWVlZmY5MCwweGYyMTA2ODAwLDB4NGFhZWZmNTgsMHg2YzA2MDA5MAorCS5sb25nCTB4ODAwMDAwMDAsMHgyZjJlZmY2NCwweGYyMmU5MDAwLDB4ZmY2MGYyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODAxZmY5MCwweGYyMDBhODAwCisJLmxvbmcJMHg4MTZlZmY2NiwweDFkNTdmZjY0LDB4NTg4ZjJkNWYsMHhmZjU4MmQ1ZgorCS5sb25nCTB4ZmY1NDRjZGYsMHgwMzAzMmQ2ZSwweGZmNThmZjkwLDB4MmQ2ZWZmNTQKKwkubG9uZwkweGZmNjA0ODQ1LDB4NGE0NTY2ZmYsMHgwMDAwMDA4NiwweGYyM2E0NTAwCisJLmxvbmcJMHhmY2VjMjAwNCwweDUzODA0MjgzLDB4ZTI4ODY0MDYsMHhmMjMxNDkyMworCS5sb25nCTB4MzgwMDA2ODMsMHgwMDAwMDAwYywweDRhODA2NmVjLDB4NGEyZWZmNTAKKwkubG9uZwkweDY3MGFmMjAwLDB4MDAxODYwZmYsMHgwMDAwMDAyOCwweGYyMDAwMDE4CisJLmxvbmcJMHhmMjAwMDgzOCwweGYyOTMwMDFhLDB4NTM4NjNhM2MsMHgwMDAxZjIzYworCS5sb25nCTB4OTAwMDAwMDAsMHgwMDIwZjIzYSwweDQ1MjNmY2MyLDB4NjAwMGZkYTgKKwkubG9uZwkweGYyM2E0NTIzLDB4ZmNiOGYyMDAsMHgwODM4ZjI5NCwweDAwNWNmMjkyCisJLmxvbmcJMHgwMDBjZjIzYSwweDQ0MjBmY2E2LDB4NTI4NjYwNGMsMHg1Mjg2M2EzYworCS5sb25nCTB4MDAwMWYyM2MsMHg5MDAwMDAwMCwweDAwMjA2MDAwLDB4ZmQ3YWYyM2EKKwkubG9uZwkweDQ1MDBmYzZhLDB4MjAwNDQyODMsMHhlMjg4NjQwNiwweGYyMzE0OTIzCisJLmxvbmcJMHgzODAwMDY4MywweDAwMDAwMDBjLDB4NGE4MDY2ZWMsMHhmMjAwMDAxOAorCS5sb25nCTB4ZjIwMDA4MzgsMHhmMjhlMDAxMiwweGYyM2E0NDIwLDB4ZmM2MDUyODYKKwkubG9uZwkweDUyODRmMjNhLDB4NDUyM2ZjNTYsMHhmMjNjOTAwMCwweDAwMDAwMDEwCisJLmxvbmcJMHhmMjAwMDgyMCwweDQxZWVmZjg0LDB4ZjIxMDY4MDAsMHgyNDI4MDAwNAorCS5sb25nCTB4MjYyODAwMDgsMHg0MmE4MDAwNCwweDQyYTgwMDA4LDB4MjAxMDQ4NDAKKwkubG9uZwkweDY3MTQwNDgwLDB4MDAwMDNmZmQsMHg0YTgwNmUwYSwweDQ0ODBlMjhhCisJLmxvbmcJMHhlMjkzNTFjOCwweGZmZmE0YTgyLDB4NjYwNDRhODMsMHg2NzEwNDI4MQorCS5sb25nCTB4MDY4MzAwMDAsMHgwMDgwZDU4MSwweDAyODNmZmZmLDB4ZmY4MDIwMDQKKwkubG9uZwkweDU2ODg2MWZmLDB4MDAwMDAyYjAsMHg0YTJlZmY1MCwweDY3MjhmMjAwCisJLmxvbmcJMHgwMDNhZjI4MSwweDAwMGNmMjA2LDB4NDAwMGYyMDAsMHgwMDE4NjAyZQorCS5sb25nCTB4NGE4NzZkMDgsMHhmMjNhNDQwMCwweGZiZTQ2MDIyLDB4ZjIwNjQwMDAKKwkubG9uZwkweGYyMDAwMDE4LDB4NjAxOGYyMDAsMHgwMDNhZjI4ZSwweDAwMGFmMjNhCisJLmxvbmcJMHg0NDAwZmI5YSwweDYwMDhmMjA2LDB4NDAwMGYyMDAsMHgwMDE4ZjIyOQorCS5sb25nCTB4NDgyMDAwMTgsMHhmMjJlNjgwMCwweGZmOTAyNDJhLDB4MDAwNDI2MmEKKwkubG9uZwkweDAwMDgzMDEyLDB4NjcwZTA0NDAsMHgzZmZkNDQ0MCwweGUyOGFlMjkzCisJLmxvbmcJMHg1MWM4ZmZmYSwweDQyODEwNjgzLDB4MDAwMDAwODAsMHhkNTgxMDI4MworCS5sb25nCTB4ZmZmZmZmODAsMHg3MDA0NDFlZSwweGZmNTQ2MWZmLDB4MDAwMDAyMjgKKwkubG9uZwkweDIwMmVmZjU0LDB4NzIwY2UyYTgsMHhlZmVlMDEwYywweGZmODRlMmE4CisJLmxvbmcJMHhlZmVlMDQwNCwweGZmODQ0YTAwLDB4NjcwODAwYWUsMHgwMDAwMjA4MAorCS5sb25nCTB4ZmY2NDQyODAsMHgwMjJlMDAwZiwweGZmODQ0YWFlLDB4ZmY1ODZjMDIKKwkubG9uZwkweDcwMDI0YTg2LDB4NmMwMjUyODAsMHhlZmVlMDAwMiwweGZmODRmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjFmLDB4ZDBlMDRjZGYsMHgwNGZjNGU3NQorCS5sb25nCTB4NDAwMjAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4NDAwNTAwMDAKKwkubG9uZwkweGM4MDAwMDAwLDB4MDAwMDAwMDAsMHg0MDBjMDAwMCwweDljNDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMTkwMDAwLDB4YmViYzIwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAzNDAwMDAsMHg4ZTFiYzliZiwweDA0MDAwMDAwLDB4NDA2OTAwMDAKKwkubG9uZwkweDlkYzVhZGE4LDB4MmI3MGI1OWUsMHg0MGQzMDAwMCwweGMyNzgxZjQ5CisJLmxvbmcJMHhmZmNmYTZkNSwweDQxYTgwMDAwLDB4OTNiYTQ3YzksMHg4MGU5OGNlMAorCS5sb25nCTB4NDM1MTAwMDAsMHhhYTdlZWJmYiwweDlkZjlkZThlLDB4NDZhMzAwMDAKKwkubG9uZwkweGUzMTlhMGFlLDB4YTYwZTkxYzcsMHg0ZDQ4MDAwMCwweGM5NzY3NTg2CisJLmxvbmcJMHg4MTc1MGMxNywweDVhOTIwMDAwLDB4OWU4YjNiNWQsMHhjNTNkNWRlNQorCS5sb25nCTB4NzUyNTAwMDAsMHhjNDYwNTIwMiwweDhhMjA5NzliLDB4NDAwMjAwMDAKKwkubG9uZwkweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MDA1MDAwMCwweGM4MDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMGMwMDAwLDB4OWM0MDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAxOTAwMDAsMHhiZWJjMjAwMCwweDAwMDAwMDAwLDB4NDAzNDAwMDAKKwkubG9uZwkweDhlMWJjOWJmLDB4MDQwMDAwMDAsMHg0MDY5MDAwMCwweDlkYzVhZGE4CisJLmxvbmcJMHgyYjcwYjU5ZSwweDQwZDMwMDAwLDB4YzI3ODFmNDksMHhmZmNmYTZkNgorCS5sb25nCTB4NDFhODAwMDAsMHg5M2JhNDdjOSwweDgwZTk4Y2UwLDB4NDM1MTAwMDAKKwkubG9uZwkweGFhN2VlYmZiLDB4OWRmOWRlOGUsMHg0NmEzMDAwMCwweGUzMTlhMGFlCisJLmxvbmcJMHhhNjBlOTFjNywweDRkNDgwMDAwLDB4Yzk3Njc1ODYsMHg4MTc1MGMxOAorCS5sb25nCTB4NWE5MjAwMDAsMHg5ZThiM2I1ZCwweGM1M2Q1ZGU1LDB4NzUyNTAwMDAKKwkubG9uZwkweGM0NjA1MjAyLDB4OGEyMDk3OWIsMHg0MDAyMDAwMCwweGEwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMDUwMDAwLDB4YzgwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAwYzAwMDAsMHg5YzQwMDAwMCwweDAwMDAwMDAwLDB4NDAxOTAwMDAKKwkubG9uZwkweGJlYmMyMDAwLDB4MDAwMDAwMDAsMHg0MDM0MDAwMCwweDhlMWJjOWJmCisJLmxvbmcJMHgwNDAwMDAwMCwweDQwNjkwMDAwLDB4OWRjNWFkYTgsMHgyYjcwYjU5ZAorCS5sb25nCTB4NDBkMzAwMDAsMHhjMjc4MWY0OSwweGZmY2ZhNmQ1LDB4NDFhODAwMDAKKwkubG9uZwkweDkzYmE0N2M5LDB4ODBlOThjZGYsMHg0MzUxMDAwMCwweGFhN2VlYmZiCisJLmxvbmcJMHg5ZGY5ZGU4ZCwweDQ2YTMwMDAwLDB4ZTMxOWEwYWUsMHhhNjBlOTFjNgorCS5sb25nCTB4NGQ0ODAwMDAsMHhjOTc2NzU4NiwweDgxNzUwYzE3LDB4NWE5MjAwMDAKKwkubG9uZwkweDllOGIzYjVkLDB4YzUzZDVkZTQsMHg3NTI1MDAwMCwweGM0NjA1MjAyCisJLmxvbmcJMHg4YTIwOTc5YSwweDQ4ZTdmZjAwLDB4N2UwMTUzODAsMHgyODAyMmEwMworCS5sb25nCTB4ZTljMjEwMDMsMHhlNzgyZTljMywweDYwMDNlNzgzLDB4ODQ4NmUzODUKKwkubG9uZwkweGUzOTQ0ODQ2LDB4ZDM0NmQ2ODUsMHg0ZTcxZDU4NCwweDRlNzFkMzQ2CisJLmxvbmcJMHg0ODQ2NGE0NywweDY3MTI0ODQ3LDB4ZTk0N2RlNDEsMHgxMGM3NDg0NworCS5sb25nCTB4NDI0NzUxYzgsMHhmZmM4NjAxMiwweDQ4NDczZTAxLDB4NDg0NzUyNDcKKwkubG9uZwkweDUxYzhmZmJhLDB4NDg0N2U5NGYsMHgxMGM3NGNkZiwweDAwZmY0ZTc1CisJLmxvbmcJMHg3MDAxNjEwMCwweDAwZDYzZDdjLDB4MDEyMTAwMGEsMHg2MDAwMDA3ZQorCS5sb25nCTB4NzAwMjYxMDAsMHgwMGM2M2Q3YywweDAxNDEwMDBhLDB4NjA2ZTcwMDQKKwkubG9uZwkweDYxMDAwMGI4LDB4M2Q3YzAxMDEsMHgwMDBhNjA2MCwweDcwMDg2MTAwCisJLmxvbmcJMHgwMGFhM2Q3YywweDAxNjEwMDBhLDB4NjA1MjcwMGMsMHg2MTAwMDA5YworCS5sb25nCTB4M2Q3YzAxNjEsMHgwMDBhNjA0NCwweDcwMDE2MTAwLDB4MDA4ZTNkN2MKKwkubG9uZwkweDAwYTEwMDBhLDB4NjAzNjcwMDIsMHg2MTAwMDA4MCwweDNkN2MwMGMxCisJLmxvbmcJMHgwMDBhNjAyOCwweDcwMDQ2MTAwLDB4MDA3MjNkN2MsMHgwMDgxMDAwYQorCS5sb25nCTB4NjAxYTcwMDgsMHg2MTAwMDA2NCwweDNkN2MwMGUxLDB4MDAwYTYwMGMKKwkubG9uZwkweDcwMGM2MTAwLDB4MDA1NjNkN2MsMHgwMGUxMDAwYSwweDJkNmVmZjY4CisJLmxvbmcJMHgwMDA2ZjIyZSwweGQwYzBmZmRjLDB4ZjIyZTljMDAsMHhmZjYwNGNlZQorCS5sb25nCTB4MDMwM2ZmOWMsMHg0ZTVlMmYxNywweDJmNmYwMDA4LDB4MDAwNDJmNmYKKwkubG9uZwkweDAwMGMwMDA4LDB4MmY3YzAwMDAsMHgwMDAxMDAwYywweDNmNmYwMDA2CisJLmxvbmcJMHgwMDBjM2Y3YywweDQwMDgwMDA2LDB4MDgxNzAwMDUsMHg2NzA2MDhlZgorCS5sb25nCTB4MDAwMjAwMGQsMHg2MGZmZmZmZiwweDJkODIxMjJlLDB4ZmY0MTAyMDEKKwkubG9uZwkweDAwMzgwYzAxLDB4MDAxODY3MDAsMHgwMDBjMGMwMSwweDAwMjA2NzAwCisJLmxvbmcJMHgwMDYwNGU3NSwweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHgzMjNiMTIwNgorCS5sb25nCTB4NGVmYjEwMDIsMHgwMDEwMDAxNiwweDAwMWMwMDIwLDB4MDAyNDAwMjgKKwkubG9uZwkweDAwMmMwMDMwLDB4OTFhZWZmYTQsMHg0ZTc1OTFhZSwweGZmYTg0ZTc1CisJLmxvbmcJMHg5NWMwNGU3NSwweDk3YzA0ZTc1LDB4OTljMDRlNzUsMHg5YmMwNGU3NQorCS5sb25nCTB4OTE5NjRlNzUsMHgwYzJlMDAzMCwweDAwMGE2NjEyLDB4MDgyZTAwMDUKKwkubG9uZwkweDAwMDQ2NjBhLDB4NGU3YTg4MDAsMHg5MWMwNGU3YiwweDg4MDA0ZTc1CisJLmxvbmcJMHg0NDgwNjBhMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Zza2VsZXRvbi5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zza2VsZXRvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NWE0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnNrZWxldG9uLlMKQEAgLTAsMCArMSwzNDIgQEAKK3x+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK3xNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCit8TTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCit8TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK3xQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorfAorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK3wKK3xUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK3xUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorfE1PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK3xJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorfGFuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCit8KElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCit8Cit8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK3xJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKK3woSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorfEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCit8QVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorfE1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCit8Cit8WW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3xzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorfHJlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorfE5vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK3xvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit8fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cit8IGZza2VsZXRvbi5zCit8Cit8IFRoaXMgZmlsZSBjb250YWluczoKK3wJKDEpIGV4YW1wbGUgIkNhbGwtb3V0InMKK3wJKDIpIGV4YW1wbGUgcGFja2FnZSBlbnRyeSBjb2RlCit8CSgzKSBleGFtcGxlICJDYWxsLW91dCIgdGFibGUKK3wKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit8ICgxKSBFWEFNUExFIENBTEwtT1VUUwkJIworfAkJCQkjCit8IF8wNjBfZnBzcF9kb25lKCkJCSMKK3wgXzA2MF9yZWFsX292ZmwoKQkJIworfCBfMDYwX3JlYWxfdW5mbCgpCQkjCit8IF8wNjBfcmVhbF9vcGVycigpCQkjCit8IF8wNjBfcmVhbF9zbmFuKCkJCSMKK3wgXzA2MF9yZWFsX2R6KCkJCSMKK3wgXzA2MF9yZWFsX2luZXgoKQkJIworfCBfMDYwX3JlYWxfYnN1bigpCQkjCit8IF8wNjBfcmVhbF9mbGluZSgpCQkjCit8IF8wNjBfcmVhbF9mcHVfZGlzYWJsZWQoKQkjCit8IF8wNjBfcmVhbF90cmFwKCkJCSMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8Cit8IF8wNjBfZnBzcF9kb25lKCk6Cit8Cit8IFRoaXMgaXMgdGhlIG1haW4gZXhpdCBwb2ludCBmb3IgdGhlIDY4MDYwIEZsb2F0aW5nLVBvaW50Cit8IFNvZnR3YXJlIFBhY2thZ2UuIEZvciBhIG5vcm1hbCBleGl0LCBhbGwgMDYwRlBTUCByb3V0aW5lcyBjYWxsIHRoaXMKK3wgcm91dGluZS4gVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGRvIHN5c3RlbSBkZXBlbmRlbnQgY2xlYW4tdXAgb3IKK3wgc2ltcGx5IGV4ZWN1dGUgYW4gInJ0ZSIgYXMgd2l0aCB0aGUgc2FtcGxlIGNvZGUgYmVsb3cuCit8CisJLmdsb2JhbAkJXzA2MF9mcHNwX2RvbmUKK18wNjBfZnBzcF9kb25lOgorCWJyYWwJIF8wNjBfaXNwX2RvbmUJfCBkbyB0aGUgc2FtZSBhcyBpc3BfZG9uZQorCit8Cit8IF8wNjBfcmVhbF9vdmZsKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW5hYmxlZCBvdmVyZmxvdyBleGNlcHRpb24KK3wgaXMgcHJlc2VudC4gVGhlIHJvdXRpbmUgYmVsb3cgc2hvdWxkIHBvaW50IHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGhhbmRsZXIKK3wgZm9yIGVuYWJsZWQgb3ZlcmZsb3cgY29uZGl0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhbiBvdmVyZmxvdworfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBFWENFUFRJT05BTCBPUEVSQU5ELgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgc2ltcGx5IGNsZWFycyB0aGUgZXhjZXB0aW9uIHN0YXR1cyBiaXQgYW5kCit8IGRvZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX292ZmwKK18wNjBfcmVhbF9vdmZsOgorCWZzYXZlCQktKCVzcCkKKwltb3ZlLncJCSMweDYwMDAsMHgyKCVzcCkKKwlmcmVzdG9yZQkoJXNwKSsKKwlicmFsCQl0cmFwCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworCit8Cit8IF8wNjBfcmVhbF91bmZsKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW5hYmxlZCB1bmRlcmZsb3cgZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIHVuZGVyZmxvdyBjb25kaXRpb25zLiBUaGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGFuIHVuZGVyZmxvdworfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBFWENFUFRJT05BTCBPUEVSQU5ELgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgc2ltcGx5IGNsZWFycyB0aGUgZXhjZXB0aW9uIHN0YXR1cyBiaXQgYW5kCit8IGRvZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX3VuZmwKK18wNjBfcmVhbF91bmZsOgorCWZzYXZlCQktKCVzcCkKKwltb3ZlLncJCSMweDYwMDAsMHgyKCVzcCkKKwlmcmVzdG9yZQkoJXNwKSsKKwlicmFsCQl0cmFwCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworfAorfCBfMDYwX3JlYWxfb3BlcnIoKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbmFibGVkIG9wZXJhbmQgZXJyb3IgZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIG9wZXJhbmQgZXJyb3IgZXhjZXB0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhbiBvcGVyYW5kIGVycm9yCit8IHN0YWNrIGZyYW1lLiBUaGUgRlAgc3RhdGUgZnJhbWUgaG9sZHMgdGhlIHNvdXJjZSBvcGVyYW5kIG9mIHRoZSBmYXVsdGluZworfCBpbnN0cnVjdGlvbi4KK3wKK3wgVGhlIHNhbXBsZSByb3V0aW5lIGJlbG93IHNpbXBseSBjbGVhcnMgdGhlIGV4Y2VwdGlvbiBzdGF0dXMgYml0IGFuZAorfCBkb2VzIGFuICJydGUiLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9vcGVycgorXzA2MF9yZWFsX29wZXJyOgorCWZzYXZlCQktKCVzcCkKKwltb3ZlLncJCSMweDYwMDAsMHgyKCVzcCkKKwlmcmVzdG9yZQkoJXNwKSsKKwlicmFsCQl0cmFwCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworfAorfCBfMDYwX3JlYWxfc25hbigpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGVuYWJsZWQgc2lnbmFsbGluZyBOYU4gZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIHNpZ25hbGxpbmcgTmFOIGV4Y2VwdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYSBzaWduYWxsaW5nIE5hTgorfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBzb3VyY2Ugb3BlcmFuZCBvZiB0aGUgZmF1bHRpbmcKK3wgaW5zdHJ1Y3Rpb24uCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBzaW1wbHkgY2xlYXJzIHRoZSBleGNlcHRpb24gc3RhdHVzIGJpdCBhbmQKK3wgZG9lcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfc25hbgorXzA2MF9yZWFsX3NuYW46CisJZnNhdmUJCS0oJXNwKQorCW1vdmUudwkJIzB4NjAwMCwweDIoJXNwKQorCWZyZXN0b3JlCSglc3ApKworCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9keigpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGVuYWJsZWQgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYSBkaXZpZGUtYnktemVybworfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBzb3VyY2Ugb3BlcmFuZCBvZiB0aGUgZmF1bHRpbmcKK3wgaW5zdHJ1Y3Rpb24uCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBzaW1wbHkgY2xlYXJzIHRoZSBleGNlcHRpb24gc3RhdHVzIGJpdCBhbmQKK3wgZG9lcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfZHoKK18wNjBfcmVhbF9kejoKKwlmc2F2ZQkJLSglc3ApCisJbW92ZS53CQkjMHg2MDAwLDB4Miglc3ApCisJZnJlc3RvcmUJKCVzcCkrCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wKK3wgXzA2MF9yZWFsX2luZXgoKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbmFibGVkIGluZXhhY3QgZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIGluZXhhY3QgZXhjZXB0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhbiBpbmV4YWN0Cit8IHN0YWNrIGZyYW1lLiBUaGUgRlAgc3RhdGUgZnJhbWUgaG9sZHMgdGhlIHNvdXJjZSBvcGVyYW5kIG9mIHRoZSBmYXVsdGluZworfCBpbnN0cnVjdGlvbi4KK3wKK3wgVGhlIHNhbXBsZSByb3V0aW5lIGJlbG93IHNpbXBseSBjbGVhcnMgdGhlIGV4Y2VwdGlvbiBzdGF0dXMgYml0IGFuZAorfCBkb2VzIGFuICJydGUiLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9pbmV4CitfMDYwX3JlYWxfaW5leDoKKwlmc2F2ZQkJLSglc3ApCisJbW92ZS53CQkjMHg2MDAwLDB4Miglc3ApCisJZnJlc3RvcmUJKCVzcCkrCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wKK3wgXzA2MF9yZWFsX2JzdW4oKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbmFibGVkIGJzdW4gZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIGJzdW4gZXhjZXB0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhIGJzdW4KK3wgc3RhY2sgZnJhbWUuCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBjbGVhcnMgdGhlIGV4Y2VwdGlvbiBzdGF0dXMgYml0LCBjbGVhcnMgdGhlIE5hTgorfCBiaXQgaW4gdGhlIEZQU1IsIGFuZCBkb2VzIGFuICJydGUiLiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlCit8IGJzdW4gd2lsbCBub3cgYmUgcmUtZXhlY3V0ZWQgYnV0IHdpdGggdGhlIE5hTiBGUFNSIGJpdCBjbGVhcmVkLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9ic3VuCitfMDYwX3JlYWxfYnN1bjoKK3wJZnNhdmUJCS0oJXNwKQorCisJZm1vdmUubAkJJWZwc3IsLSglc3ApCisJYW5kaS5iCQkjMHhmZSwoJXNwKQorCWZtb3ZlLmwJCSglc3ApKywlZnBzcgorCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wKK3wgXzA2MF9yZWFsX2ZsaW5lKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gRi1MaW5lIElsbGVnYWwgZXhjZXB0aW9uIGlzCit8IGVuY291bnRlcmVkLiBUaHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgZXhjZXB0aW9ucyBjYW4gZW50ZXIgdGhlIEYtTGluZSBleGNlcHRpb24KK3wgdmVjdG9yIG51bWJlciAxMTogRlAgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbnMsIEZQIGltcGxlbWVudGVkIGluc3RydWN0aW9ucyB3aGVuCit8IHRoZSBGUFUgaXMgZGlzYWJsZWQsIGFuZCBGLUxpbmUgSWxsZWdhbCBpbnN0cnVjdGlvbnMuIFRoZSAwNjBGUFNQIG1vZHVsZQorfCBfZnBzcF9mbGluZSgpIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGUgdGhyZWUgYW5kIGFjdHMgYXBwcm9wcmlhdGVseS4gRi1MaW5lCit8IElsbGVnYWxzIGJyYW5jaCBoZXJlLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9mbGluZQorXzA2MF9yZWFsX2ZsaW5lOgorCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9mcHVfZGlzYWJsZWQoKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBGUFUgZGlzYWJsZWQgZXhjZXB0aW9uIGlzCit8IGVuY291bnRlcmVkLiBUaHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgZXhjZXB0aW9ucyBjYW4gZW50ZXIgdGhlIEYtTGluZSBleGNlcHRpb24KK3wgdmVjdG9yIG51bWJlciAxMTogRlAgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbnMsIEZQIGltcGxlbWVudGVkIGluc3RydWN0aW9ucyB3aGVuCit8IHRoZSBGUFUgaXMgZGlzYWJsZWQsIGFuZCBGLUxpbmUgSWxsZWdhbCBpbnN0cnVjdGlvbnMuIFRoZSAwNjBGUFNQIG1vZHVsZQorfCBfZnBzcF9mbGluZSgpIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGUgdGhyZWUgYW5kIGFjdHMgYXBwcm9wcmlhdGVseS4gRlBVIGRpc2FibGVkCit8IGV4Y2VwdGlvbnMgYnJhbmNoIGhlcmUuCit8Cit8IFRoZSBzYW1wbGUgY29kZSBiZWxvdyBlbmFibGVzIHRoZSBGUFUsIHNldHMgdGhlIFBDIGZpZWxkIGluIHRoZSBleGNlcHRpb24gc3RhY2sKK3wgZnJhbWUgdG8gdGhlIFBDIG9mIHRoZSBpbnN0cnVjdGlvbiBjYXVzaW5nIHRoZSBleGNlcHRpb24sIGFuZCBkb2VzIGFuICJydGUiLgorfCBUaGUgZXhlY3V0aW9uIG9mIHRoZSBpbnN0cnVjdGlvbiB0aGVuIHByb2NlZWRzIHdpdGggYW4gZW5hYmxlZCBmbG9hdGluZy1wb2ludAorfCB1bml0LgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9mcHVfZGlzYWJsZWQKK18wNjBfcmVhbF9mcHVfZGlzYWJsZWQ6CisJbW92ZS5sCQklZDAsLSglc3ApCQl8IGVuYWJsZWQgdGhlIGZwdQorCS5sb25nCTB4NEU3QTA4MDgJCQl8bW92ZWMJCXBjciwlZDAKKwliY2xyCQkjMHgxLCVkMAorCS5sb25nCTB4NEU3QjA4MDgJCQl8bW92ZWMJCSVkMCxwY3IKKwltb3ZlLmwJCSglc3ApKywlZDAKKworCW1vdmUubAkJMHhjKCVzcCksMHgyKCVzcCkJfCBzZXQgIkN1cnJlbnQgUEMiCisJcnRlCisKK3wKK3wgXzA2MF9yZWFsX3RyYXAoKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbXVsYXRlZCAiZnRyYXBjYyIgaW5zdHJ1Y3Rpb24KK3wgZGlzY292ZXJzIHRoYXQgdGhlIHRyYXAgY29uZGl0aW9uIGlzIHRydWUgYW5kIGl0IHNob3VsZCBicmFuY2ggdG8gdGhlIG9wZXJhdGluZworfCBzeXN0ZW0gaGFuZGxlciBmb3IgdGhlIHRyYXAgZXhjZXB0aW9uIHZlY3RvciBudW1iZXIgNy4KK3wKK3wgVGhlIHNhbXBsZSBjb2RlIGJlbG93IHNpbXBseSBleGVjdXRlcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfdHJhcAorXzA2MF9yZWFsX3RyYXA6CisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3wgKDIpIEVYQU1QTEUgUEFDS0FHRSBFTlRSWSBDT0RFICMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCS5nbG9iYWwJCV8wNjBfZnBzcF9zbmFuCitfMDYwX2Zwc3Bfc25hbjoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgwMAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX29wZXJyCitfMDYwX2Zwc3Bfb3BlcnI6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MDgKKworCS5nbG9iYWwJCV8wNjBfZnBzcF9vdmZsCitfMDYwX2Zwc3Bfb3ZmbDoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgxMAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX3VuZmwKK18wNjBfZnBzcF91bmZsOgorCWJyYS5sCQlfRlBfQ0FMTF9UT1ArMHg4MCsweDE4CisKKwkuZ2xvYmFsCQlfMDYwX2Zwc3BfZHoKK18wNjBfZnBzcF9kejoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgyMAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX2luZXgKK18wNjBfZnBzcF9pbmV4OgorCWJyYS5sCQlfRlBfQ0FMTF9UT1ArMHg4MCsweDI4CisKKwkuZ2xvYmFsCQlfMDYwX2Zwc3BfZmxpbmUKK18wNjBfZnBzcF9mbGluZToKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgzMAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX3Vuc3VwcAorXzA2MF9mcHNwX3Vuc3VwcDoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgzOAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX2VmZmFkZAorXzA2MF9mcHNwX2VmZmFkZDoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHg0MAorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfCAoMykgRVhBTVBMRSBDQUxMLU9VVCBTRUNUSU9OICMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wgVGhlIHNpemUgb2YgdGhpcyBzZWN0aW9uIE1VU1QgYmUgMTI4IGJ5dGVzISEhCisKK19GUF9DQUxMX1RPUDoKKwkubG9uZwlfMDYwX3JlYWxfYnN1bgkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfc25hbgkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfb3BlcnIJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX292ZmwJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3VuZmwJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2R6CQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9pbmV4CQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9mbGluZQkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfZnB1X2Rpc2FibGVkCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3RyYXAJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3RyYWNlCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9hY2Nlc3MJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2Zwc3BfZG9uZQkJLSBfRlBfQ0FMTF9UT1AKKworCS5sb25nCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKworCS5sb25nCV8wNjBfaW1lbV9yZWFkCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV9yZWFkCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV93cml0ZQkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2ltZW1fcmVhZF93b3JkCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9pbWVtX3JlYWRfbG9uZwktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV9yZWFkX2J5dGUJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZF93b3JkCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWRfbG9uZwktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV93cml0ZV9ieXRlCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3dyaXRlX3dvcmQJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGVfbG9uZwktIF9GUF9DQUxMX1RPUAorCisJLmxvbmcJMHgwMDAwMDAwMAorCisJLmxvbmcJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IDA2MCBGUFNQIEtFUk5FTCBQQUNLQUdFIE5FRURTIFRPIEdPIEhFUkUhISEKKworI2luY2x1ZGUgImZwc3Auc2EiCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvZnRlc3Quc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvZnRlc3Quc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2NWJjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mdGVzdC5zYQpAQCAtMCwwICsxLDM3MSBAQAorCWRjLmwJJDYwZmYwMDAwLCQwMGQ0MDAwMCwkNjBmZjAwMDAsJDAxNmMwMDAwCisJZGMubAkkNjBmZjAwMDAsJDAxYTgwMDAwLCQ1NDY1NzM3NCwkNjk2ZTY3MjAKKwlkYy5sCSQzNjM4MzAzNiwkMzAyMDQ2NTAsJDUzNTAyMDczLCQ3NDYxNzI3NAorCWRjLmwJJDY1NjQzYTBhLCQwMDU0NjU3MywkNzQ2OTZlNjcsJDIwMzYzODMwCisJZGMubAkkMzYzMDIwNDYsJDUwNTM1MDIwLCQ3NTZlNjk2ZCwkNzA2YzY1NmQKKwlkYy5sCSQ2NTZlNzQ2NSwkNjQyMDY5NmUsJDczNzQ3Mjc1LCQ2Mzc0Njk2ZgorCWRjLmwJJDZlMjA3Mzc0LCQ2MTcyNzQ2NSwkNjQzYTBhMDAsJDU0NjU3Mzc0CisJZGMubAkkNjk2ZTY3MjAsJDM2MzgzMDM2LCQzMDIwNDY1MCwkNTM1MDIwNjUKKwlkYy5sCSQ3ODYzNjU3MCwkNzQ2OTZmNmUsJDIwNjU2ZTYxLCQ2MjZjNjU2NAorCWRjLmwJJDIwNzM3NDYxLCQ3Mjc0NjU2NCwkM2EwYTAwNzAsJDYxNzM3MzY1CisJZGMubAkkNjQwYTAwMjAsJDY2NjE2OTZjLCQ2NTY0MGEwMCwkNGE4MDY2MGUKKwlkYy5sCSQ0ODdhZmZlOSwkNjFmZjAwMDAsJDE2NDI1ODhmLCQ0ZTc1MmYwMQorCWRjLmwJJDYxZmYwMDAwLCQxNjRjNTg4ZiwkNDg3YWZmZDksJDYxZmYwMDAwCisJZGMubAkkMTYyYTU4OGYsJDRlNzU0ZTU2LCRmZTgwNDhlNywkM2YzY2YyMjcKKwlkYy5sCSRlMGZmNDg3YSwkZmYzNDYxZmYsJDAwMDAxNjEwLCQ1ODhmNDJhZQorCWRjLmwJJGZlYTA0ODdiLCQwMTcwMDAwMCwkMDU4MDYxZmYsJDAwMDAxNWZjCisJZGMubAkkNTg4ZjYxZmYsJDAwMDAwNTg4LCQ2MWZmZmZmZiwkZmZhMjQyYWUKKwlkYy5sCSRmZWEwNDg3YiwkMDE3MDAwMDAsJDEyNmM2MWZmLCQwMDAwMTVkYworCWRjLmwJJDU4OGY2MWZmLCQwMDAwMTI4MCwkNjFmZmZmZmYsJGZmODI0MmFlCisJZGMubAkkZmVhMDQ4N2IsJDAxNzAwMDAwLCQwYjY0NjFmZiwkMDAwMDE1YmMKKwlkYy5sCSQ2MWZmMDAwMCwkMGI3MjYxZmYsJGZmZmZmZjY0LCQ0MmFlZmVhMAorCWRjLmwJJDQ4N2IwMTcwLCQwMDAwMGRlMiwkNjFmZjAwMDAsJDE1OWU2MWZmCisJZGMubAkkMDAwMDBkZjAsJDYxZmZmZmZmLCRmZjQ2NGNkZiwkM2NmY2YyMWYKKwlkYy5sCSRkMGZmNGU1ZSwkNGU3NTRlNTYsJGZlODA0OGU3LCQzZjNjZjIyNworCWRjLmwJJGUwZmY0ODdhLCRmZWIxNjFmZiwkMDAwMDE1NzAsJDU4OGY0MmFlCisJZGMubAkkZmVhMDQ4N2IsJDAxNzAwMDAwLCQwMGZlNjFmZiwkMDAwMDE1NWMKKwlkYy5sCSQ1ODhmNjFmZiwkMDAwMDAxMTAsJDYxZmZmZmZmLCRmZjAyNGNkZgorCWRjLmwJJDNjZmNmMjFmLCRkMGZmNGU1ZSwkNGU3NTRlNTYsJGZlODA0OGU3CisJZGMubAkkM2YzY2YyMjcsJGUwZmY0ODdhLCRmZWE0NjFmZiwkMDAwMDE1MmMKKwlkYy5sCSQ1ODhmNDJhZSwkZmVhMDQ4N2IsJDAxNzAwMDAwLCQwZjE0NjFmZgorCWRjLmwJJDAwMDAxNTE4LCQ2MWZmMDAwMCwkMGYxYTYxZmYsJGZmZmZmZWMwCisJZGMubAkkNDJhZWZlYTAsJDQ4N2IwMTcwLCQwMDAwMGZkMiwkNjFmZjAwMDAKKwlkYy5sCSQxNGZhNjFmZiwkMDAwMDBmZDgsJDYxZmZmZmZmLCRmZWEyNDJhZQorCWRjLmwJJGZlYTA0ODdiLCQwMTcwMDAwMCwkMGI2MDYxZmYsJDAwMDAxNGRjCisJZGMubAkkNjFmZjAwMDAsJDBiNmE2MWZmLCRmZmZmZmU4NCwkNDJhZWZlYTAKKwlkYy5sCSQ0ODdiMDE3MCwkMDAwMDBjMjIsJDYxZmYwMDAwLCQxNGJlNjFmZgorCWRjLmwJJDAwMDAwYzJjLCQ2MWZmZmZmZiwkZmU2NjQyYWUsJGZlYTA0ODdiCisJZGMubAkkMDE3MDAwMDAsJDEwNTY2MWZmLCQwMDAwMTRhMCwkNjFmZjAwMDAKKwlkYy5sCSQxMDVhNjFmZiwkZmZmZmZlNDgsJDQyYWVmZWEwLCQ0ODdiMDE3MAorCWRjLmwJJDAwMDAwZGEyLCQ2MWZmMDAwMCwkMTQ4MjYxZmYsJDAwMDAwZGE4CisJZGMubAkkNjFmZmZmZmYsJGZlMmE0Y2RmLCQzY2ZjZjIxZiwkZDBmZjRlNWUKKwlkYy5sCSQ0ZTc1MDk1NSwkNmU2OTZkNzAsJDZjNjU2ZDY1LCQ2ZTc0NjU2NAorCWRjLmwJJDIwNDY1MDIwLCQ2OTZlNzM3NCwkNzI3NTYzNzQsJDY5NmY2ZTczCisJZGMubAkkMmUyZTJlMDAsJDUyYWVmZWEwLCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMzkwZjIzYiwkZDBmZjAxNzAsJDAwMDAxM2M2LCRmMjNiOWMwMAorCWRjLmwJJDAxNzAwMDAwLCQxNDFjM2Q3YywkMDAwMGZlYTYsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MGYyMmUsJGYwZmZmZjIwLCRmMjJlYmMwMCwkZmViNDJkN2MKKwlkYy5sCSQ0MDAwMDAwMCwkZmU4MDJkN2MsJGM5MGZkYWEyLCRmZTg0MmQ3YworCWRjLmwJJDIxNjhjMjM1LCRmZTg4NDRmYywkMDAwMGYyMmUsJDQ4MGVmZTgwCisJZGMubAkkNDJlZWZlYTQsJDQ4ZWU3ZmZmLCRmZmMwZjIyZSwkZjBmZmZlYzAKKwlkYy5sCSRmMjJlYmMwMCwkZmVhODJkN2MsJGJmYmYwMDAwLCRmZjIwMmQ3YworCWRjLmwJJDgwMDAwMDAwLCRmZjI0MmQ3YywkMDAwMDAwMDAsJGZmMjgyZDdjCisJZGMubAkkMDgwMDAyMDgsJGZlYjg0MWZhLCRmZmMyMmQ0OCwkZmViYzYxZmYKKwlkYy5sCSQwMDAwMTI4OCwkNGEwMDY2ZmYsJDAwMDAxMmFlLCQ2MWZmMDAwMAorCWRjLmwJJDEyYjA0YTAwLCQ2NmZmMDAwMCwkMTJhMDUyYWUsJGZlYTA0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxMmRhLCRmMjNiZDBmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMzEwZjIzYiwkOWMwMDAxNzAsJDAwMDAxMzY2LCQzZDdjMDAwMAorCWRjLmwJJGZlYTY0OGVlLCQ3ZmZmZmY4MCwkZjIyZWYwZmYsJGZmMjBmMjJlCisJZGMubAkkYmMwMGZlYjQsJDJkN2MzZmZlLCQwMDAwZmU4MCwkMmQ3Y2M5MGYKKwlkYy5sCSRkYWEyZmU4NCwkMmQ3YzIxNjgsJGMyMzVmZTg4LCQ0NGZjMDAwMAorCWRjLmwJJGYyMmU0ODBmLCRmZTgwNDJlZSwkZmVhNDQ4ZWUsJDdmZmZmZmMwCisJZGMubAkkZjIyZWYwZmYsJGZlYzBmMjJlLCRiYzAwZmVhOCwkMmQ3YzNmZmYKKwlkYy5sCSQwMDAwZmYyMCwkMmQ3YzgwMDAsJDAwMDBmZjI0LCQyZDdjMDAwMAorCWRjLmwJJDAwMDBmZjI4LCQyZDdjMDAwMCwkMDIwOGZlYjgsJDQxZmFmZmMyCisJZGMubAkkMmQ0OGZlYmMsJDYxZmYwMDAwLCQxMWQyNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxMWY4NjFmZiwkMDAwMDExZmEsJDRhMDA2NmZmLCQwMDAwMTFlYQorCWRjLmwJJDUyYWVmZWEwLCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEyMjRmMjNiCisJZGMubAkkZDBmZjAxNzAsJDAwMDAxMjVhLCRmMjNiOWMwMCwkMDE3MDAwMDAKKwlkYy5sCSQxMmIwM2Q3YywkMDAwMGZlYTYsJDQ4ZWU3ZmZmLCRmZjgwZjIyZQorCWRjLmwJJGYwZmZmZjIwLCRmMjJlYmMwMCwkZmViNDQ0ZmMsJDAwMDBmMjAwCisJZGMubAkkNWMzMTQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMCwkZjIyZWYwZmYKKwlkYy5sCSRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2M0MDAwLCQwMDAwZmYyMAorCWRjLmwJJDJkN2M5MzVkLCQ4ZGRkZmYyNCwkMmQ3Y2FhYTgsJGFjMTdmZjI4CisJZGMubAkkMmQ3YzAwMDAsJDAyMDhmZWI4LCQ0MWZhZmZjNCwkMmQ0OGZlYmMKKwlkYy5sCSQ2MWZmMDAwMCwkMTEzNjRhMDAsJDY2ZmYwMDAwLCQxMTVjNjFmZgorCWRjLmwJJDAwMDAxMTVlLCQ0YTAwNjZmZiwkMDAwMDExNGUsJDUyYWVmZWEwCisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMTg4ZjIzYiwkZDBmZjAxNzAKKwlkYy5sCSQwMDAwMTFiZSwkZjIzYjljMDAsJDAxNzAwMDAwLCQxMjE0ZjIzYworCWRjLmwJJDg4MDAwZjAwLCQwMDAwN2UwMCwkM2Q3YzAwMDAsJGZlYTY0OGVlCisJZGMubAkkN2ZmZmZmODAsJGYyMmVmMGZmLCRmZjIwZjIyZSwkYmMwMGZlYjQKKwlkYy5sCSQ0NGZjMDAwMCwkZjI0NzAwMTIsJDQyZWVmZWE0LCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzBmMjJlLCRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgyZDdjCisJZGMubAkkMGYwMDgwODAsJGZlYjg0MWZhLCRmZmRjMmQ0OCwkZmViYzYxZmYKKwlkYy5sCSQwMDAwMTBhOCwkNGEwMDY2ZmYsJDAwMDAxMGNlLCQ2MWZmMDAwMAorCWRjLmwJJDEwZDA0YTAwLCQ2NmZmMDAwMCwkMTBjMDUyYWUsJGZlYTA0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxMGZhLCRmMjNiZDBmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMTMwZjIzYiwkOWMwMDAxNzAsJDAwMDAxMTg2LCRmMjNjODgwMAorCWRjLmwJJDBmMDAwMDAwLCQ3ZTAyM2Q3YywkMDAwMGZlYTYsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MGYyMmUsJGYwZmZmZjIwLCRmMjJlYmMwMCwkZmViNDQ0ZmMKKwlkYy5sCSQwMDAwZjI0ZiwkMDAxMmZmZmMsJDQyZWVmZWE0LCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzBmMjJlLCRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgzZDdjCisJZGMubAkkZmZmZmZmOWUsJDJkN2MwZjAwLCQ4MDgwZmViOCwkNDFmYWZmZDQKKwlkYy5sCSQyZDQ4ZmViYywkNjFmZjAwMDAsJDEwMTI0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDEwMzg2MWZmLCQwMDAwMTAzYSwkNGEwMDY2ZmYsJDAwMDAxMDJhCisJZGMubAkkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMTA2NGYyM2IKKwlkYy5sCSRkMGZmMDE3MCwkMDAwMDEwOWEsJGYyM2I5YzAwLCQwMTcwMDAwMAorCWRjLmwJJDEwZjBmMjNjLCQ4ODAwMGYwMCwkMDAwMDNkN2MsJDAwMDBmZWE2CisJZGMubAkkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMCwkZjIyZWJjMDAKKwlkYy5sCSRmZWI0NDRmYywkMDAwMGYyN2IsJDAwMTJhYmNkLCRlZjAxNDJlZQorCWRjLmwJJGZlYTQ0OGVlLCQ3ZmZmZmZjMCwkZjIyZWYwZmYsJGZlYzBmMjJlCisJZGMubAkkYmMwMGZlYTgsJDJkN2MwZjAwLCQ4MDgwZmViOCwkNDFmYWZmZDgKKwlkYy5sCSQyZDQ4ZmViYywkNjFmZjAwMDAsJDBmODI0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDBmYTg2MWZmLCQwMDAwMGZhYSwkNGEwMDY2ZmYsJDAwMDAwZjlhCisJZGMubAkkNDI4MDRlNzUsJDA5NTU2ZTY5LCQ2ZDcwNmM2NSwkNmQ2NTZlNzQKKwlkYy5sCSQ2NTY0MjAzYywkNjU2MTNlMmUsJDJlMmUwMDAwLCQ1MmFlZmVhMAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMGZiOGYyM2IsJGQwZmYwMTcwCisJZGMubAkkMDAwMDBmZWUsJGYyM2I5YzAwLCQwMTcwMDAwMCwkMTA0NDNkN2MKKwlkYy5sCSQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMAorCWRjLmwJJGYyMmViYzAwLCRmZWI0ZjIzYywkNTgwMDAwMDIsJDQ0ZmMwMDAwCisJZGMubAkkZjIzYzQ4MjMsJGMwMDAwMDAwLCQ4MDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQ0MmVlZmVhNCwkNDhlZTdmZmYsJGZmYzBmMjJlLCRmMGZmZmVjMAorCWRjLmwJJGYyMmViYzAwLCRmZWE4MmQ3YywkYzAwMTAwMDAsJGZmMjAyZDdjCisJZGMubAkkODAwMDAwMDAsJGZmMjQyZDdjLCQwMDAwMDAwMCwkZmYyODJkN2MKKwlkYy5sCSQwODAwMDAwMCwkZmViODQxZmEsJGZmYjgyZDQ4LCRmZWJjNjFmZgorCWRjLmwJJDAwMDAwZWI4LCQ0YTAwNjZmZiwkMDAwMDBlZGUsJDYxZmYwMDAwCisJZGMubAkkMGVlMDRhMDAsJDY2ZmYwMDAwLCQwZWQwNTJhZSwkZmVhMDRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDBmMGEsJGYyM2JkMGZmLCQwMTcwMDAwMAorCWRjLmwJJDBmNDBmMjNiLCQ5YzAwMDE3MCwkMDAwMDBmOTYsJDNkN2MwMDAwCisJZGMubAkkZmVhNjQ4ZWUsJDdmZmZmZjgwLCRmMjJlZjBmZiwkZmYyMGYyMmUKKwlkYy5sCSRiYzAwZmViNCwkNDRmYzAwMDAsJGYyM2M0YzE4LCRjMTIzMDAwMQorCWRjLmwJJDIzNDU2Nzg5LCQxMjM0NTY3OCwkNDJlZWZlYTQsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMGYyMmUsJGYwZmZmZWMwLCRmMjJlYmMwMCwkZmVhODJkN2MKKwlkYy5sCSQzZTY2MDAwMCwkZmYyMDJkN2MsJGQwZWQyM2U4LCRmZjI0MmQ3YworCWRjLmwJJGQxNDAzNWJjLCRmZjI4MmQ3YywkMDAwMDAxMDgsJGZlYjg0MWZhCisJZGMubAkkZmZiODJkNDgsJGZlYmM2MWZmLCQwMDAwMGUxMCwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMGUzNiwkNjFmZjAwMDAsJDBlMzg0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDBlMjg1MmFlLCRmZWEwNGNmYiwkM2ZmZjAxNzAsJDAwMDAwZTYyCisJZGMubAkkZjIzYmQwZmYsJDAxNzAwMDAwLCQwZTk4ZjIzYiwkOWMwMDAxNzAKKwlkYy5sCSQwMDAwMGVlZSwkM2Q3YzAwMDAsJGZlYTY0NGZjLCQwMDAwNDhlZQorCWRjLmwJJDdmZmZmZjgwLCRmMjJlZjBmZiwkZmYyMGYyMmUsJGJjMDBmZWI0CisJZGMubAkkZjIzYzk4MDAsJGZmZmZmZmZmLCRmZmZmZmZmZiwkNDJlZWZlYTQKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMGYyMmUsJGYwZmZmZWMwLCRmMjJlYmMwMAorCWRjLmwJJGZlYTgyZDdjLCQwMDAwZmZmMCwkZmViNDJkN2MsJDBmZmZmZmY4CisJZGMubAkkZmViODYxZmYsJDAwMDAwZDg0LCQ0YTAwNjZmZiwkMDAwMDBkYWEKKwlkYy5sCSQ2MWZmMDAwMCwkMGRhYzRhMDAsJDY2ZmYwMDAwLCQwZDljNTJhZQorCWRjLmwJJGZlYTA0Y2ZiLCQzZmZmMDE3MCwkMDAwMDBkZDYsJGYyM2JkMGZmCisJZGMubAkkMDE3MDAwMDAsJDBlMGNmMjNiLCQ5YzAwMDE3MCwkMDAwMDBlNjIKKwlkYy5sCSQzZDdjMDAwMCwkZmVhNjQ0ZmMsJDAwMDA0OGVlLCQ3ZmZmZmY4MAorCWRjLmwJJGYyMmVmMGZmLCRmZjIwZjIyZSwkYmMwMGZlYjQsJGYyM2M5NDAwCisJZGMubAkkZmZmZmZmZmYsJGZmZmZmZmZmLCQ0MmVlZmVhNCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwZjIyZSwkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4MmQ3YworCWRjLmwJJDAwMDBmZmYwLCRmZWI0MmQ3YywkZmZmZmZmZmYsJGZlYmM2MWZmCisJZGMubAkkMDAwMDBjZjgsJDRhMDA2NmZmLCQwMDAwMGQxZSwkNjFmZjAwMDAKKwlkYy5sCSQwZDIwNGEwMCwkNjZmZjAwMDAsJDBkMTA1MmFlLCRmZWEwNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMGQ0YSwkZjIzYmQwZmYsJDAxNzAwMDAwCisJZGMubAkkMGQ4MGYyM2IsJDljMDAwMTcwLCQwMDAwMGRkNiwkM2Q3YzAwMDAKKwlkYy5sCSRmZWE2NDRmYywkMDAwMDQ4ZWUsJDdmZmZmZjgwLCRmMjJlZjBmZgorCWRjLmwJJGZmMjBmMjJlLCRiYzAwZmViNCwkZjIzYzhjMDAsJGZmZmZmZmZmCisJZGMubAkkZmZmZmZmZmYsJDQyZWVmZWE0LCQ0OGVlN2ZmZiwkZmZjMGYyMmUKKwlkYy5sCSRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgyZDdjLCQwZmZmZmZmOAorCWRjLmwJJGZlYjgyZDdjLCRmZmZmZmZmZiwkZmViYzYxZmYsJDAwMDAwYzZjCisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwYzkyLCQ2MWZmMDAwMCwkMGM5NDRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMGM4NDUyYWUsJGZlYTA0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAwY2JlLCRmMjNiZDBmZiwkMDE3MDAwMDAsJDBjZjRmMjNiCisJZGMubAkkOWMwMDAxNzAsJDAwMDAwZDRhLCQzZDdjMDAwMCwkZmVhNjQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkN2ZmZmZmODAsJGYyMmVmMGZmLCRmZjIwZjIyZQorCWRjLmwJJGJjMDBmZWI0LCRmMjNjOWMwMCwkZmZmZmZmZmYsJGZmZmZmZmZmCisJZGMubAkkZmZmZmZmZmYsJDQyZWVmZWE0LCQ0OGVlN2ZmZiwkZmZjMGYyMmUKKwlkYy5sCSRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgyZDdjLCQwMDAwZmZmMAorCWRjLmwJJGZlYjQyZDdjLCQwZmZmZmZmOCwkZmViODJkN2MsJGZmZmZmZmZmCisJZGMubAkkZmViYzYxZmYsJDAwMDAwYmQ0LCQ0YTAwNjZmZiwkMDAwMDBiZmEKKwlkYy5sCSQ2MWZmMDAwMCwkMGJmYzRhMDAsJDY2ZmYwMDAwLCQwYmVjNTJhZQorCWRjLmwJJGZlYTA0Y2ZiLCQzZmZmMDE3MCwkMDAwMDBjMjYsJGYyM2JkMGZmCisJZGMubAkkMDE3MDAwMDAsJDBjNWNmMjNiLCQ5YzAwMDE3MCwkMDAwMDBjYjIKKwlkYy5sCSRmMjNjNTgwMCwkMDAwMWYyM2MsJDU4ODAwMDAyLCRmMjNjNTkwMAorCWRjLmwJJDAwMDNmMjNjLCQ1OTgwMDAwNCwkZjIzYzVhMDAsJDAwMDVmMjNjCisJZGMubAkkNWE4MDAwMDYsJGYyM2M1YjAwLCQwMDA3ZjIzYywkNWI4MDAwMDgKKwlkYy5sCSRmMjNjODQwMCwkMDAwMDAwMDAsJDcwYWEzZDdjLCQwMDAwZmVhNgorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwZjIyZSwkYmMwMGZlYjQsJGYyMmVmMGZmCisJZGMubAkkZmYyMDQ0ZmMsJDAwMDBmMjI3LCRlODAwNDJlZSwkZmVhNGYyMmUKKwlkYy5sCSRiYzAwZmVhOCwkZjIzYzQ0ODAsJDdmODAwMDAwLCRmMjNjNDU4MAorCWRjLmwJJDdmODAwMDAwLCRmMjNjNDY4MCwkN2Y4MDAwMDAsJGYyM2M0NzgwCisJZGMubAkkN2Y4MDAwMDAsJGYyMWY0ODgwLCRmMjFmNDk4MCwkZjIxZjRhODAKKwlkYy5sCSRmMjFmNGI4MCwkNDhlZWZmZmYsJGZmYzBmMjJlLCRmMGZmZmVjMAorCWRjLmwJJDYxZmYwMDAwLCQwYWY2NGEwMCwkNjZmZjAwMDAsJDBiMWM2MWZmCisJZGMubAkkMDAwMDBiMWUsJDRhMDA2NmZmLCQwMDAwMGIwZSwkNTJhZWZlYTAKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBiNDhmMjNiLCRkMGZmMDE3MAorCWRjLmwJJDAwMDAwYjdlLCRmMjNiOWMwMCwkMDE3MDAwMDAsJDBiZDRmMjNjCisJZGMubAkkNTgwMDAwMDEsJGYyM2M1ODgwLCQwMDAyZjIzYywkNTkwMDAwMDMKKwlkYy5sCSRmMjNjNTk4MCwkMDAwNGYyM2MsJDVhMDAwMDA1LCRmMjNjNWE4MAorCWRjLmwJJDAwMDZmMjNjLCQ1YjAwMDAwNywkZjIzYzViODAsJDAwMDhmMjI3CisJZGMubAkkNmIwMGYyMjcsJDZhMDBmMjI3LCQ2OTAwZjIyNywkNjgwMGYyMmUKKwlkYy5sCSRmMGZmZmYyMCwkZjIzYzQ3MDAsJDdmODAwMDAwLCRmMjNjNDYwMAorCWRjLmwJJDdmODAwMDAwLCRmMjNjNDUwMCwkN2Y4MDAwMDAsJGYyM2M0NDAwCisJZGMubAkkN2Y4MDAwMDAsJGYyM2M4NDAwLCQwMDAwMDAwMCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkNzBhYTNkN2MsJDAwMDBmZWE2LCQ0OGVlZmZmZgorCWRjLmwJJGZmODBmMjJlLCRiYzAwZmViNCwkNDRmYzAwMDAsJGYyMWZkODAwCisJZGMubAkkNDJlZWZlYTQsJGYyMmViYzAwLCRmZWE4NDhlZSwkZmZmZmZmYzAKKwlkYy5sCSRmMjJlZjBmZiwkZmVjMDYxZmYsJDAwMDAwYTEwLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwYTM2LCQ2MWZmMDAwMCwkMGEzODRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMGEyODUyYWUsJGZlYTA0Y2ZiLCQzZmZmMDE3MCwkMDAwMDBhNjIKKwlkYy5sCSRmMjNiZDBmZiwkMDE3MDAwMDAsJDBhOThmMjNiLCQ5YzAwMDE3MAorCWRjLmwJJDAwMDAwYWVlLCRmMjNjNTgwMCwkMDAwMWYyM2MsJDU4ODAwMDAyCisJZGMubAkkZjIzYzU5MDAsJDAwMDNmMjNjLCQ1OTgwMDAwNCwkZjIzYzVhMDAKKwlkYy5sCSQwMDA1ZjIzYywkNWE4MDAwMDYsJGYyM2M1YjAwLCQwMDA3ZjIzYworCWRjLmwJJDViODAwMDA4LCRmMjNjODQwMCwkMDAwMDAwMDAsJDIwM2NmZmZmCisJZGMubAkkZmYwMDNkN2MsJDAwMDBmZWE2LCQ0OGVlZmZmZiwkZmY4MGYyMmUKKwlkYy5sCSRiYzAwZmViNCwkZjIyZWYwZmYsJGZmMjA0NGZjLCQwMDAwZjIyNworCWRjLmwJJGU4MDA0MmVlLCRmZWE0ZjIyZSwkYmMwMGZlYTgsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMGYyMmUsJGYwZmZmZWMwLCQ2MWZmMDAwMCwkMDk1ZTRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMDk4NDYxZmYsJDAwMDAwOTg2LCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwOTc2LCQ0MjgwNGU3NSwkMDk0ZTZmNmUsJDJkNmQ2MTczCisJZGMubAkkNmI2MTYyNmMsJDY1MjA2Zjc2LCQ2NTcyNjY2YywkNmY3NzJlMmUKKwlkYy5sCSQyZTAwNTFmYywkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDA5OTBmMjNiLCRkMGZmMDE3MCwkMDAwMDA5YzYsJGYyM2I5YzAwCisJZGMubAkkMDE3MDAwMDAsJDBhMWMzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwZjIyZSwkZjBmZmZmMjAsJGYyMmViYzAwLCRmZWI0ZjIzYworCWRjLmwJJDU4MDAwMDAyLCQyZDdjN2ZmZSwkMDAwMGZlODAsJDJkN2M4MDAwCisJZGMubAkkMDAwMGZlODQsJDJkN2MwMDAwLCQwMDAwZmU4OCwkNDRmYzAwMDAKKwlkYy5sCSRmMjJlNDgyMywkZmU4MDQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJGYyMmVmMGZmLCRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2M3ZmZmCisJZGMubAkkMDAwMGZmMjAsJDJkN2MwMDAwLCQwMDAwZmYyNCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAwZmYyOCwkMmQ3YzAyMDAsJDEwNDhmZWI4LCQ0MWZhZmZjMgorCWRjLmwJJDJkNDhmZWJjLCQ2MWZmMDAwMCwkMDg4MjRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDhhODYxZmYsJDAwMDAwOGFhLCQ0YTAwNjZmZiwkMDAwMDA4OWEKKwlkYy5sCSQ0MjgwNGU3NSwkMDk0NTZlNjEsJDYyNmM2NTY0LCQyMDZmNzY2NQorCWRjLmwJJDcyNjY2YzZmLCQ3NzJlMmUyZSwkMDAwMDUxZmMsJDUyYWVmZWEwCisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQwOGI4ZjIzYiwkZDBmZjAxNzAKKwlkYy5sCSQwMDAwMDhlZSwkZjIzYjljMDAsJDAxNzAwMDAwLCQwOTQ0M2Q3YworCWRjLmwJJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUsJGYwZmZmZjIwCisJZGMubAkkZjIzYzkwMDAsJDAwMDAxMDAwLCRmMjJlYmMwMCwkZmViNGYyM2MKKwlkYy5sCSQ1ODAwMDAwMiwkMmQ3YzdmZmUsJDAwMDBmZTgwLCQyZDdjODAwMAorCWRjLmwJJDAwMDBmZTg0LCQyZDdjMDAwMCwkMDAwMGZlODgsJDQ0ZmMwMDAwCisJZGMubAkkZjIyZTQ4MjMsJGZlODA0MmVlLCRmZWE0NDhlZSwkN2ZmZmZmYzAKKwlkYy5sCSRmMjJlZjBmZiwkZmVjMGYyMmUsJGJjMDBmZWE4LCQyZDdjN2ZmZgorCWRjLmwJJDAwMDBmZjIwLCQyZDdjMDAwMCwkMDAwMGZmMjQsJDJkN2MwMDAwCisJZGMubAkkMDAwMGZmMjgsJDJkN2MwMjAwLCQxMDQ4ZmViOCwkNDFmYWZmYzIKKwlkYy5sCSQyZDQ4ZmViYywkNjFmZjAwMDAsJDA3YTI0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDA3Yzg2MWZmLCQwMDAwMDdjYSwkNGEwMDY2ZmYsJDAwMDAwN2JhCisJZGMubAkkNDI4MDRlNzUsJDA5NDU2ZTYxLCQ2MjZjNjU2NCwkMjA3NTZlNjQKKwlkYy5sCSQ2NTcyNjY2YywkNmY3NzJlMmUsJDJlMDA1MWZjLCQ1MmFlZmVhMAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDdkOGYyM2IsJGQwZmYwMTcwCisJZGMubAkkMDAwMDA4MGUsJGYyM2I5YzAwLCQwMTcwMDAwMCwkMDg2NDNkN2MKKwlkYy5sCSQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDgwMCwkZjIyZWJjMDAsJGZlYjQyZDdjCisJZGMubAkkMDAwMDAwMDAsJGZlODAyZDdjLCQ4MDAwMDAwMCwkZmU4NDJkN2MKKwlkYy5sCSQwMDAwMDAwMCwkZmU4OGYyMmUsJGQwODBmZTgwLCQ0NGZjMDAwMAorCWRjLmwJJGYyM2M1ODIwLCQwMDAyNDJlZSwkZmVhNDQ4ZWUsJDdmZmZmZmMwCisJZGMubAkkZjIyZWYwZmYsJGZlYzBmMjJlLCRiYzAwZmVhOCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAwZmYyMCwkMmQ3YzQwMDAsJDAwMDBmZjI0LCQyZDdjMDAwMAorCWRjLmwJJDAwMDBmZjI4LCQyZDdjMDAwMCwkMDgwMGZlYjgsJDQxZmFmZmMyCisJZGMubAkkMmQ0OGZlYmMsJDYxZmYwMDAwLCQwNmMyNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwNmU4NjFmZiwkMDAwMDA2ZWEsJDRhMDA2NmZmLCQwMDAwMDZkYQorCWRjLmwJJDQyODA0ZTc1LCQwOTRlNmY2ZSwkMmQ2ZDYxNzMsJDZiNjE2MjZjCisJZGMubAkkNjUyMDc1NmUsJDY0NjU3MjY2LCQ2YzZmNzcyZSwkMmUyZTAwMDAKKwlkYy5sCSQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNmY0ZjIzYgorCWRjLmwJJGQwZmYwMTcwLCQwMDAwMDcyYSwkZjIzYjljMDAsJDAxNzAwMDAwCisJZGMubAkkMDc4MDNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUKKwlkYy5sCSRmMGZmZmYyMCwkZjIyZWJjMDAsJGZlYjQyZDdjLCQwMDAwMDAwMAorCWRjLmwJJGZlODAyZDdjLCQ4MDAwMDAwMCwkZmU4NDJkN2MsJDAwMDAwMDAwCisJZGMubAkkZmU4OGYyMmUsJGQwODBmZTgwLCQ0NGZjMDAwMCwkZjIzYzU4MjAKKwlkYy5sCSQwMDAyNDJlZSwkZmVhNDQ4ZWUsJDdmZmZmZmMwLCRmMjJlZjBmZgorCWRjLmwJJGZlYzBmMjJlLCRiYzAwZmVhOCwkMmQ3YzAwMDAsJDAwMDBmZjIwCisJZGMubAkkMmQ3YzQwMDAsJDAwMDBmZjI0LCQyZDdjMDAwMCwkMDAwMGZmMjgKKwlkYy5sCSQyZDdjMDAwMCwkMDgwMGZlYjgsJDQxZmFmZmMyLCQyZDQ4ZmViYworCWRjLmwJJDYxZmYwMDAwLCQwNWU2NGEwMCwkNjZmZjAwMDAsJDA2MGM2MWZmCisJZGMubAkkMDAwMDA2MGUsJDRhMDA2NmZmLCQwMDAwMDVmZSwkNDI4MDRlNzUKKwlkYy5sCSQwOTQ1NmU2MSwkNjI2YzY1NjQsJDIwNjk2ZTY1LCQ3ODYxNjM3NAorCWRjLmwJJDJlMmUyZTAwLCQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMDYyMGYyM2IsJGQwZmYwMTcwLCQwMDAwMDY1NiwkZjIzYjljMDAKKwlkYy5sCSQwMTcwMDAwMCwkMDZhYzNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZgorCWRjLmwJJGZmODBmMjJlLCRmMGZmZmYyMCwkZjIzYzkwMDAsJDAwMDAwMjAwCisJZGMubAkkZjIyZWJjMDAsJGZlYjQyZDdjLCQ1MDAwMDAwMCwkZmU4MDJkN2MKKwlkYy5sCSQ4MDAwMDAwMCwkZmU4NDJkN2MsJDAwMDAwMDAwLCRmZTg4ZjIyZQorCWRjLmwJJGQwODBmZTgwLCQ0NGZjMDAwMCwkZjIzYzU4MjIsJDAwMDI0MmVlCisJZGMubAkkZmVhNDQ4ZWUsJDdmZmZmZmMwLCRmMjJlZjBmZiwkZmVjMGYyMmUKKwlkYy5sCSRiYzAwZmVhOCwkMmQ3YzUwMDAsJDAwMDBmZjIwLCQyZDdjODAwMAorCWRjLmwJJDAwMDBmZjI0LCQyZDdjMDAwMCwkMDAwMGZmMjgsJDJkN2MwMDAwCisJZGMubAkkMDIwOGZlYjgsJDQxZmFmZmMyLCQyZDQ4ZmViYywkNjFmZjAwMDAKKwlkYy5sCSQwNTBhNGEwMCwkNjZmZjAwMDAsJDA1MzA2MWZmLCQwMDAwMDUzMgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDUyMiwkNDI4MDRlNzUsJDA5NDU2ZTYxCisJZGMubAkkNjI2YzY1NjQsJDIwNTM0ZTQxLCQ0ZTJlMmUyZSwkMDAwMDUxZmMKKwlkYy5sCSQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNTQ0ZjIzYgorCWRjLmwJJGQwZmYwMTcwLCQwMDAwMDU3YSwkZjIzYjljMDAsJDAxNzAwMDAwCisJZGMubAkkMDVkMDNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUKKwlkYy5sCSRmMGZmZmYyMCwkZjIzYzkwMDAsJDAwMDA0MDAwLCRmMjJlYmMwMAorCWRjLmwJJGZlYjQyZDdjLCRmZmZmMDAwMCwkZmU4MDJkN2MsJDAwMDAwMDAwCisJZGMubAkkZmU4NDJkN2MsJDAwMDAwMDAxLCRmZTg4ZjIyZSwkZDA4MGZlODAKKwlkYy5sCSQ0NGZjMDAwMCwkZjIzYzU4MjIsJDAwMDI0MmVlLCRmZWE0NDhlZQorCWRjLmwJJDdmZmZmZmMwLCRmMjJlZjBmZiwkZmVjMGYyMmUsJGJjMDBmZWE4CisJZGMubAkkMmQ3Y2ZmZmYsJDAwMDBmZjIwLCQyZDdjMDAwMCwkMDAwMGZmMjQKKwlkYy5sCSQyZDdjMDAwMCwkMDAwMWZmMjgsJDJkN2MwOTAwLCQ0MDgwZmViOAorCWRjLmwJJDQxZmFmZmMyLCQyZDQ4ZmViYywkNjFmZjAwMDAsJDA0MmU0YTAwCisJZGMubAkkNjZmZjAwMDAsJDA0NTQ2MWZmLCQwMDAwMDQ1NiwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMDQ0NiwkNDI4MDRlNzUsJDA5NDU2ZTYxLCQ2MjZjNjU2NAorCWRjLmwJJDIwNGY1MDQ1LCQ1MjUyMmUyZSwkMmUwMDUxZmMsJDUyYWVmZWEwCisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNDY4ZjIzYiwkZDBmZjAxNzAKKwlkYy5sCSQwMDAwMDQ5ZSwkZjIzYjljMDAsJDAxNzAwMDAwLCQwNGY0M2Q3YworCWRjLmwJJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUsJGYwZmZmZjIwCisJZGMubAkkZjIzYzkwMDAsJDAwMDAyMDAwLCRmMjJlYmMwMCwkZmViNDJkN2MKKwlkYy5sCSRmZmZmMDAwMCwkZmU4MDJkN2MsJDAwMDAwMDAwLCRmZTg0MmQ3YworCWRjLmwJJDAwMDAwMDAwLCRmZTg4ZjIyZSwkZDA4MGZlODAsJDQ0ZmMwMDAwCisJZGMubAkkZjIzYzQ0MjIsJDdmODAwMDAwLCQ0MmVlZmVhNCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwZjIyZSwkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4MmQ3YworCWRjLmwJJGZmZmYwMDAwLCRmZjIwMmQ3YywkMDAwMDAwMDAsJGZmMjQyZDdjCisJZGMubAkkMDAwMDAwMDAsJGZmMjgyZDdjLCQwMTAwMjA4MCwkZmViODQxZmEKKwlkYy5sCSRmZmMwMmQ0OCwkZmViYzYxZmYsJDAwMDAwMzUwLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwMzc2LCQ2MWZmMDAwMCwkMDM3ODRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDM2ODQyODAsJDRlNzUwOTQ1LCQ2ZTYxNjI2YywkNjU2NDIwNDQKKwlkYy5sCSQ1YTJlMmUyZSwkMDAwMDUxZmMsJDUyYWVmZWEwLCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwMzhjZjIzYiwkZDBmZjAxNzAsJDAwMDAwM2MyCisJZGMubAkkZjIzYjljMDAsJDAxNzAwMDAwLCQwNDE4M2Q3YywkMDAwMGZlYTYKKwlkYy5sCSQ0OGVlN2ZmZiwkZmY4MGYyMmUsJGYwZmZmZjIwLCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwNDAwLCRmMjJlYmMwMCwkZmViNDJkN2MsJDQwMDAwMDAwCisJZGMubAkkZmU4MDJkN2MsJDgwMDAwMDAwLCRmZTg0MmQ3YywkMDAwMDAwMDAKKwlkYy5sCSRmZTg4ZjIyZSwkZDA4MGZlODAsJDQ0ZmMwMDAwLCRmMjNjNTgyMAorCWRjLmwJJDAwMDA0MmVlLCRmZWE0NDhlZSwkN2ZmZmZmYzAsJGYyMmVmMGZmCisJZGMubAkkZmVjMGYyMmUsJGJjMDBmZWE4LCQyZDdjNDAwMCwkMDAwMGZmMjAKKwlkYy5sCSQyZDdjODAwMCwkMDAwMGZmMjQsJDJkN2MwMDAwLCQwMDAwZmYyOAorCWRjLmwJJDJkN2MwMjAwLCQwNDEwZmViOCwkNDFmYWZmYzIsJDJkNDhmZWJjCisJZGMubAkkNjFmZjAwMDAsJDAyNzY0YTAwLCQ2NmZmMDAwMCwkMDI5YzYxZmYKKwlkYy5sCSQwMDAwMDI5ZSwkNGEwMDY2ZmYsJDAwMDAwMjhlLCQ0MjgwNGU3NQorCWRjLmwJJDA5NTU2ZTY5LCQ2ZDcwNmM2NSwkNmQ2NTZlNzQsJDY1NjQyMDY0CisJZGMubAkkNjE3NDYxMjAsJDc0Nzk3MDY1LCQyZjY2NmY3MiwkNmQ2MTc0MmUKKwlkYy5sCSQyZTJlMDAwMCwkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDAyYTBmMjNiLCRkMGZmMDE3MCwkMDAwMDAyZDYsJGYyM2I5YzAwCisJZGMubAkkMDE3MDAwMDAsJDAzMmMzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwZjIyZSwkZjBmZmZmMjAsJGYyMmViYzAwLCRmZWI0MmQ3YworCWRjLmwJJGMwM2YwMDAwLCRmZTgwMmQ3YywkMDAwMDAwMDAsJGZlODQyZDdjCisJZGMubAkkMDAwMDAwMDEsJGZlODhmMjNjLCQ1ODAwMDAwMiwkNDRmYzAwMDAKKwlkYy5sCSRmMjJlNDgyMywkZmU4MDQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJGYyMmVmMGZmLCRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2NjMDAxCisJZGMubAkkMDAwMGZmMjAsJDJkN2M4MDAwLCQwMDAwZmYyNCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAwZmYyOCwkMmQ3YzA4MDAsJDAwMDBmZWI4LCQ0MWZhZmZjMgorCWRjLmwJJDJkNDhmZWJjLCQ2MWZmMDAwMCwkMDE5MjRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDFiODYxZmYsJDAwMDAwMWJhLCQ0YTAwNjZmZiwkMDAwMDAxYWEKKwlkYy5sCSQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwMWU0ZjIzYgorCWRjLmwJJGQwZmYwMTcwLCQwMDAwMDIxYSwkZjIzYjljMDAsJDAxNzAwMDAwCisJZGMubAkkMDI3MDNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUKKwlkYy5sCSRmMGZmZmYyMCwkZjIyZWJjMDAsJGZlYjQyZDdjLCQ4MDAwMDAwMAorCWRjLmwJJGZlODAyZDdjLCQwMTAwMDAwMCwkZmU4NDJkN2MsJDAwMDAwMDAwCisJZGMubAkkZmU4OGYyM2MsJDQwMDA3ZmZmLCRmZmZmNDRmYywkMDAwMGYyMmUKKwlkYy5sCSQ0ODIzZmU4MCwkNDJlZWZlYTQsJDQ4ZWU3ZmZmLCRmZmMwZjIyZQorCWRjLmwJJGYwZmZmZWMwLCRmMjJlYmMwMCwkZmVhODJkN2MsJDgwMTcwMDAwCisJZGMubAkkZmYyMDJkN2MsJGZmZmZmZmZlLCRmZjI0MmQ3YywkMDAwMDAwMDAKKwlkYy5sCSRmZjI4MmQ3YywkMDgwMDAwMDAsJGZlYjg0MWZhLCRmZmMyMmQ0OAorCWRjLmwJJGZlYmM2MWZmLCQwMDAwMDBkNCwkNGEwMDY2ZmYsJDAwMDAwMGZhCisJZGMubAkkNjFmZjAwMDAsJDAwZmM0YTAwLCQ2NmZmMDAwMCwkMDBlYzUyYWUKKwlkYy5sCSRmZWEwNGNmYiwkM2ZmZjAxNzAsJDAwMDAwMTI2LCRmMjNiZDBmZgorCWRjLmwJJDAxNzAwMDAwLCQwMTVjZjIzYiwkOWMwMDAxNzAsJDAwMDAwMWIyCisJZGMubAkkM2Q3YzAwMDAsJGZlYTY0OGVlLCQ3ZmZmZmY4MCwkZjIyZWYwZmYKKwlkYy5sCSRmZjIwZjIyZSwkYmMwMGZlYjQsJDJkN2NjMTIzLCQwMDAxZmU4MAorCWRjLmwJJDJkN2MyMzQ1LCQ2Nzg5ZmU4NCwkMmQ3YzEyMzQsJDU2NzhmZTg4CisJZGMubAkkNDRmYzAwMDAsJGYyMmU0YzE4LCRmZTgwNDJlZSwkZmVhNDQ4ZWUKKwlkYy5sCSQ3ZmZmZmZjMCwkZjIyZWYwZmYsJGZlYzBmMjJlLCRiYzAwZmVhOAorCWRjLmwJJDJkN2MzZTY2LCQwMDAwZmYyMCwkMmQ3Y2QwZWQsJDIzZThmZjI0CisJZGMubAkkMmQ3Y2QxNDAsJDM1YmNmZjI4LCQyZDdjMDAwMCwkMDEwOGZlYjgKKwlkYy5sCSQ0MWZhZmZjMiwkMmQ0OGZlYmMsJDYxZmYwMDAwLCQwMDFlNGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQwMDQ0NjFmZiwkMDAwMDAwNDYsJDRhMDA2NmZmCisJZGMubAkkMDAwMDAwMzYsJDQyODA0ZTc1LCQ0MWVlZmY4MCwkNDNlZWZmYzAKKwlkYy5sCSQ3MDBlYjE4OSwkNjZmZjAwMDAsJDAwMWM1MWM4LCRmZmY2MzAyZQorCWRjLmwJJGZlYTYzMjJlLCRmZWE0YjA0MSwkNjZmZjAwMDAsJDAwMDg0MjgwCisJZGMubAkkNGU3NTcwMDEsJDRlNzUyMjJlLCRmZWEwNzAwMSwkNGU3NTQxZWUKKwlkYy5sCSRmZjIwNDNlZSwkZmVjMDcwMTcsJGIxODk2NmZmLCQwMDAwMDAyYworCWRjLmwJJDUxYzhmZmY2LCQ0MWVlZmViNCwkNDNlZWZlYTgsJGIxODk2NmZmCisJZGMubAkkMDAwMDAwMTgsJGIxODk2NmZmLCQwMDAwMDAxMCwkYjE4OTY2ZmYKKwlkYy5sCSQwMDAwMDAwOCwkNDI4MDRlNzUsJDcwMDE0ZTc1LCRhY2FjYWNhYworCWRjLmwJJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjCisJZGMubAkkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYworCWRjLmwJJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMsJDdmZmYwMDAwCisJZGMubAkkZmZmZmZmZmYsJGZmZmZmZmZmLCQ3ZmZmMDAwMCwkZmZmZmZmZmYKKwlkYy5sCSRmZmZmZmZmZiwkN2ZmZjAwMDAsJGZmZmZmZmZmLCRmZmZmZmZmZgorCWRjLmwJJDdmZmYwMDAwLCRmZmZmZmZmZiwkZmZmZmZmZmYsJDdmZmYwMDAwCisJZGMubAkkZmZmZmZmZmYsJGZmZmZmZmZmLCQ3ZmZmMDAwMCwkZmZmZmZmZmYKKwlkYy5sCSRmZmZmZmZmZiwkN2ZmZjAwMDAsJGZmZmZmZmZmLCRmZmZmZmZmZgorCWRjLmwJJDdmZmYwMDAwLCRmZmZmZmZmZiwkZmZmZmZmZmYsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQyZjAwMjAzYSwkZTg4NDQ4N2IKKwlkYy5sCSQwOTMwZmZmZiwkZTg4MDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMAorCWRjLmwJJDIwM2FlODcyLCQ0ODdiMDkzMCwkZmZmZmU4NmEsJDIwMmYwMDA0CisJZGMubAkkNGU3NDAwMDQsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLmRvYyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmZhZTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lsc3AuZG9jCkBAIC0wLDAgKzEsMTUwIEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cis2ODA2MCBJTlRFR0VSIFNPRlRXQVJFIFBBQ0tBR0UgKExpYnJhcnkgdmVyc2lvbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgaWxzcC5zIGNvbnRhaW5zIHRoZSAiTGlicmFyeSB2ZXJzaW9uIiBvZiB0aGUKKzY4MDYwIEludGVnZXIgU29mdHdhcmUgUGFja2FnZS4gUm91dGluZXMgaW5jbHVkZWQgaW4gdGhpcworbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGVtdWxhdGUgNjQtYml0IGRpdmlkZSBhbmQgbXVsdGlwbHksCithbmQgdGhlICJjbXAyIiBpbnN0cnVjdGlvbi4gVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBub3QKK2ltcGxlbWVudGVkIGluIGhhcmR3YXJlIG9uIHRoZSA2ODA2MCBhbmQgbm9ybWFsbHkgdGFrZQorZXhjZXB0aW9uIHZlY3RvciAjNjEgIlVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnN0cnVjdGlvbiIuCisKK0J5IHJlLWNvbXBpbGluZyBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZXNlIGluc3RydWN0aW9ucywgYW5kCittYWtpbmcgc3Vicm91dGluZSBjYWxscyBpbiBwbGFjZSBvZiB0aGUgdW5pbXBsZW1lbnRlZAoraW5zdHJ1Y3Rpb25zLCBhIHByb2dyYW0gY2FuIGF2b2lkIHRoZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGgKK3Rha2luZyB0aGUgZXhjZXB0aW9uLgorCitSZWxlYXNlIGZpbGUgZm9ybWF0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmaWxlIGlsc3Auc2EgaXMgZXNzZW50aWFsbHkgYSBoZXhhZGVjaW1hbCBpbWFnZSBvZiB0aGUKK3JlbGVhc2UgcGFja2FnZS4gVGhpcyBpcyB0aGUgT05MWSBmb3JtYXQgd2hpY2ggd2lsbCBiZSBzdXBwb3J0ZWQuCitUaGUgaGV4IGltYWdlIHdhcyBjcmVhdGVkIGJ5IGFzc2VtYmxpbmcgdGhlIHNvdXJjZSBjb2RlIGFuZAordGhlbiBjb252ZXJ0aW5nIHRoZSByZXN1bHRpbmcgYmluYXJ5IG91dHB1dCBpbWFnZSBpbnRvIGFuCitBU0NJSSB0ZXh0IGZpbGUuIFRoZSBoZXhhZGVjaW1hbCBudW1iZXJzIGFyZSBsaXN0ZWQKK3VzaW5nIHRoZSBNb3Rvcm9sYSBBc3NlbWJseSBTeW50YXggYXNzZW1ibGVyIGRpcmVjdGl2ZSAiZGMubCIKKyhkZWZpbmUgY29uc3RhbnQgbG9uZ3dvcmQpLiBUaGUgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIG90aGVyCithc3NlbWJseSBzeW50YXhlcyBieSB1c2luZyBhbnkgd29yZCBwcm9jZXNzb3Igd2l0aCBhIGdsb2JhbAorc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9uLgorCitUbyBhc3Npc3QgaW4gYXNzZW1ibGluZyBhbmQgbGlua2luZyB0aGlzIG1vZHVsZSB3aXRoIG90aGVyIG1vZHVsZXMsCit0aGUgaW5zdGFsbGVyIHNob3VsZCBhZGQgYSBzeW1ib2xpYyBsYWJlbCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgcm91dGluZXMgdG8gYWNjZXNzIHRoZSBlbnRyeSBwb2ludHMKK29mIHRoaXMgcGFja2FnZS4KKworVGhlIHNvdXJjZSBjb2RlIGlsc3AucyBoYXMgYWxzbyBiZWVuIGluY2x1ZGVkIGJ1dCBvbmx5IGZvcgorZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4KKworUmVsZWFzZSBmaWxlIHN0cnVjdHVyZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBpbHNwLnNhIGNvbnRhaW5zIGFuICJFbnRyeS1Qb2ludCIgc2VjdGlvbiBhbmQgYQorY29kZSBzZWN0aW9uLiBUaGUgSUxTUCBoYXMgbm8gIkNhbGwtT3V0IiBzZWN0aW9uLiBUaGUgZmlyc3Qgc2VjdGlvbgoraXMgdGhlICJFbnRyeS1Qb2ludCIgc2VjdGlvbi4gSW4gb3JkZXIgdG8gYWNjZXNzIGEgZnVuY3Rpb24gaW4gdGhlCitwYWNrYWdlLCBhIHByb2dyYW0gbXVzdCAiYnNyIiBvciAianNyIiB0byB0aGUgbG9jYXRpb24gbGlzdGVkCitiZWxvdyBpbiAiNjgwNjBJTFNQIEVudHJ5IFBvaW50cyIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZGVzaXJlZAorZnVuY3Rpb24uIEEgYnJhbmNoIGluc3RydWN0aW9uIGxvY2F0ZWQgYXQgdGhlIHNlbGVjdGVkIGVudHJ5IHBvaW50Cit3aXRoaW4gdGhlIHBhY2thZ2Ugd2lsbCB0aGVuIGVudGVyIHRoZSBjb3JyZWN0IGVtdWxhdGlvbiBjb2RlIHJvdXRpbmUuCisKK1RoZSBlbnRyeSBwb2ludCBhZGRyZXNzZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFja2FnZSB3aWxsIHJlbWFpbgorZml4ZWQgc28gdGhhdCBhIHByb2dyYW0gY2FsbGluZyB0aGUgcm91dGluZXMgd2lsbCBub3QgaGF2ZSB0byBiZQorcmUtY29tcGlsZWQgd2l0aCBldmVyeSBuZXcgNjgwNjBJTFNQIHJlbGVhc2UuCisKK0ZvciBleGFtcGxlLCB0byB1c2UgYSA2NC1iaXQgbXVsdGlwbHkgaW5zdHJ1Y3Rpb24sCitkbyBhICJic3IiIG9yICJqc3IiIHRvIHRoZSBlbnRyeSBwb2ludCBkZWZpbmVkIGJ5Cit0aGUgMDYwSUxTUCBlbnRyeSB0YWJsZS4gQSBjb21waWxlciBnZW5lcmF0ZWQgY29kZSBzZXF1ZW5jZQorZm9yIHVuc2lnbmVkIG11bHRpcGx5IGNvdWxkIGxvb2sgbGlrZToKKworIyBtdWx1LmwgPGVhPixEaDpEbAorIyBtdWx1LmwgX211bHRpcGxpZXIsJWQxOiVkMAorCisJc3VicS5sCSYweDgsJXNwCSMgbWFrZSByb29tIGZvciByZXN1bHQgb24gc3RhY2sKKwlwZWEJKCVzcCkJCSMgcGFzczogcmVzdWx0IGFkZHIgb24gc3RhY2sKKwltb3YubAklZDAsLSglc3ApCSMgcGFzczogbXVsdGlwbGljYW5kIG9uIHN0YWNrCisJbW92LmwJX211bHRpcGxpZXIsLSglc3ApICMgcGFzczogbXVsdGlwbGllciBvbiBzdGFjaworCWJzci5sCV8wNjBMSVNQX1RPUCsweDE4ICMgYnJhbmNoIHRvIG11bHRpcGx5IHJvdXRpbmUKKwlhZGQubAkmMHhjLCVzcAkjIGNsZWFyIGFyZ3VtZW50cyBmcm9tIHN0YWNrCisJbW92LmwJKCVzcCkrLCVkMQkjIGxvYWQgcmVzdWx0WzYzOjMyXQorCW1vdi5sCSglc3ApKywlZDAJIyBsb2FkIHJlc3VsdFszMTowXQorCitGb3IgYSBkaXZpZGU6CisKKyMgZGl2dS5sIDxlYT4sRHI6RHEKKyMgZGl2dS5sIF9kaXZpc29yLCVkMTolZDAKKworCXN1YnEubAkmMHg4LCVzcAkjIG1ha2Ugcm9vbSBmb3IgcmVzdWx0IG9uIHN0YWNrCisJcGVhCSglc3ApCQkjIHBhc3M6IHJlc3VsdCBhZGRyIG9uIHN0YWNrCisJbW92LmwJJWQwLC0oJXNwKQkjIHBhc3M6IGRpdmlkZW5kIGhpIG9uIHN0YWNrCisJbW92LmwJJWQxLC0oJXNwKQkjIHBhc3M6IGRpdmlkZW5kIGhpIG9uIHN0YWNrCisJbW92LmwJX2Rpdmlzb3IsLSglc3ApICMgcGFzczogZGl2aXNvciBvbiBzdGFjaworCWJzci5sCV8wNjBMSVNQX1RPUCsweDA4ICMgYnJhbmNoIHRvIGRpdmlkZSByb3V0aW5lCisJYWRkLmwJJjB4Yywlc3AJIyBjbGVhciBhcmd1bWVudHMgZnJvbSBzdGFjaworCW1vdi5sCSglc3ApKywlZDEJIyBsb2FkIHJlbWFpbmRlcgorCW1vdi5sCSglc3ApKywlZDAJIyBsb2FkIHF1b3RpZW50CisKK1RoZSBsaWJyYXJ5IHJvdXRpbmVzIGFsc28gcmV0dXJuIHRoZSBjb3JyZWN0IGNvbmRpdGlvbiBjb2RlCityZWdpc3RlciB2YWx1ZS4gSWYgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZW4gdGhlIGNhbGxlciBvZiB0aGUgbGlicmFyeQorcm91dGluZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZSBpc24ndCBsb3N0IHdoaWxlIHBvcHBpbmcKK290aGVyIGl0ZW1zIG9mZiBvZiB0aGUgc3RhY2suCisKK0FuIGV4YW1wbGUgb2YgdXNpbmcgdGhlICJjbXAyIiBpbnN0cnVjdGlvbiBpcyBhcyBmb2xsb3dzOgorCisjIGNtcDIubCA8ZWE+LFJuCisjIGNtcDIubCBfYm91bmRzLCVkMAorCisJcGVhCV9ib3VuZHMJCSMgcGFzcyBwdHIgdG8gYm91bmRzCisJbW92LmwJJWQwLC0oJXNwKQkjIHBhc3MgUm4KKwlic3IubAlfMDYwTFNQX1RPUF8rMHg0OCAjIGJyYW5jaCB0byAiY21wMiIgcm91dGluZQorCW1vdi53CSVjYyxfdG1wCSMgc2F2ZSBvZmYgY29uZGl0aW9uIGNvZGVzCisJYWRkcS5sCSYweDgsJXNwCSMgY2xlYXIgYXJndW1lbnRzIGZyb20gc3RhY2sKKworRXhjZXB0aW9uIHJlcG9ydGluZzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQgaXMgYSBkaXZpZGUgYW5kIHRoZSBzb3VyY2UKK29wZXJhbmQgaXMgYSB6ZXJvLCB0aGVuIHRoZSBsaWJyYXJ5IHJvdXRpbmUsIGFzIGl0cyBsYXN0CitpbnN0cnVjdGlvbiwgZXhlY3V0ZXMgYW4gaW1wbGVtZW50ZWQgZGl2aWRlIHVzaW5nIGEgemVybworc291cmNlIG9wZXJhbmQgc28gdGhhdCBhbiAiSW50ZWdlciBEaXZpZGUtYnktWmVybyIgZXhjZXB0aW9uCit3aWxsIGJlIHRha2VuLiBBbHRob3VnaCB0aGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIHdpbGwgbm90Citwb2ludCB0byB0aGUgY29ycmVjdCBpbnN0cnVjdGlvbiwgdGhlIHVzZXIgd2lsbCBhdCBsZWFzdCBiZSBhYmxlCit0byByZWNvcmQgdGhhdCBzdWNoIGFuIGV2ZW50IG9jY3VycmVkIGlmIGRlc2lyZWQuCisKKzY4MDYwSUxTUCBlbnRyeSBwb2ludHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorXzA2MElMU1BfVE9QOgorMHgwMDA6CV8wNjBMU1BfX2lkaXZzNjRfCisweDAwODoJXzA2MExTUF9faWRpdnU2NF8KKworMHgwMTA6CV8wNjBMU1BfX2ltdWxzNjRfCisweDAxODoJXzA2MExTUF9faW11bHU2NF8KKworMHgwMjA6CV8wNjBMU1BfX2NtcDJfQWJfCisweDAyODoJXzA2MExTUF9fY21wMl9Bd18KKzB4MDMwOglfMDYwTFNQX19jbXAyX0FsXworMHgwMzg6CV8wNjBMU1BfX2NtcDJfRGJfCisweDA0MDoJXzA2MExTUF9fY21wMl9Ed18KKzB4MDQ4OglfMDYwTFNQX19jbXAyX0RsXwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lsc3Auc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvaWxzcC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU3ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lsc3Auc2EKQEAgLTAsMCArMSwxMDEgQEAKKwlkYy5sCSQ2MGZmMDAwMCwkMDFmZTAwMDAsJDYwZmYwMDAwLCQwMjA4MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwNDkwMDAwMCwkNjBmZjAwMDAsJDA0MDgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDA1MWUwMDAwLCQ2MGZmMDAwMCwkMDUzYzAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDU1YTAwMDAsJDYwZmYwMDAwLCQwNTc0MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwNTk0MDAwMCwkNjBmZjAwMDAsJDA1YjQwMDAwCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNGU1NmZmZjAsJDQ4ZTczZjAwLCQ0MmVlZmZmMCwkNTBlZWZmZmYKKwlkYy5sCSQ2MDEwNGU1NiwkZmZmMDQ4ZTcsJDNmMDA0MmVlLCRmZmYwNTFlZQorCWRjLmwJJGZmZmYyZTJlLCQwMDA4NjcwMCwkMDBhZTJhMmUsJDAwMGMyYzJlCisJZGMubAkkMDAxMDRhMmUsJGZmZmY2NzFhLCQ0YTg3NWRlZSwkZmZmZTZhMDIKKwlkYy5sCSQ0NDg3NGE4NSwkNWRlZWZmZmQsJDZhMDg0NGZjLCQwMDAwNDA4NgorCWRjLmwJJDQwODU0YTg1LCQ2NjE2NGE4NiwkNjcwMDAwNDYsJGJlODY2MzA2CisJZGMubAkkY2I0NjYwMDAsJDAwMTI0YzQ3LCQ2MDA1NjAwYSwkYmU4NTYzNGMKKwlkYy5sCSQ2MWZmMDAwMCwkMDA4NjRhMmUsJGZmZmY2NzI0LCQ0YTJlZmZmZAorCWRjLmwJJDY3MDI0NDg1LCQxMDJlZmZmZSwkYjEyZWZmZmQsJDY3MGMwYzg2CisJZGMubAkkODAwMDAwMDAsJDYyMjY0NDg2LCQ2MDA2MDgwNiwkMDAxZjY2MWMKKwlkYy5sCSQwMjZlMDAxMCwkZmZmMDQ0ZWUsJGZmZjA0YTg2LCQ0OGY2MDA2MAorCWRjLmwJJDAxNjEwMDE0LCQ0Y2RmMDBmYywkNGU1ZTRlNzUsJDJhMmUwMDBjCisJZGMubAkkMmMyZTAwMTAsJDAyNmUwMDFjLCRmZmYwMDA2ZSwkMDAwMmZmZjAKKwlkYy5sCSQ0NGVlZmZmMCwkNjBkNjJkYWUsJDAwMGMwMTYxLCQwMDE0MmRhZQorCWRjLmwJJDAwMTAwMTYyLCQwMDE0MDAwNCwkNDRlZWZmZjAsJDRjZGYwMGZjCisJZGMubAkkNGU1ZTgwZmMsJDAwMDA0ZTc1LCQwYzg3MDAwMCwkZmZmZjYyMWUKKwlkYy5sCSQ0MjgxNDg0NSwkNDg0NjNhMDYsJDhhYzczMjA1LCQ0ODQ2M2EwNgorCWRjLmwJJDhhYzc0ODQxLCQzMjA1NDI0NSwkNDg0NTJjMDEsJDRlNzU0MmFlCisJZGMubAkkZmZmODQyMmUsJGZmZmM0MjgxLCQwODA3MDAxZiwkNjYwZTUyYWUKKwlkYy5sCSRmZmY4ZTM4ZiwkZTM4ZWUzOTUsJDYwMDBmZmVlLCQyNjA3MjQwNQorCWRjLmwJJDQ4NDI0ODQzLCRiNDQzNjYwNiwkMzIzY2ZmZmYsJDYwMGEyMjA1CisJZGMubAkkODJjMzAyODEsJDAwMDBmZmZmLCQyZjA2NDI0NiwkNDg0NjI2MDcKKwlkYy5sCSQyNDAxYzRjNywkNDg0M2M2YzEsJDI4MDU5ODgzLCQ0ODQ0MzAwNAorCWRjLmwJJDM4MDY0YTQwLCQ2NjAwMDAwYSwkYjQ4NDYzMDQsJDUzODE2MGRlCisJZGMubAkkMmYwNTJjMDEsJDQ4NDYyYTA3LCQ2MWZmMDAwMCwkMDA2YTI0MDUKKwlkYy5sCSQyNjA2MmExZiwkMmMxZjljODMsJDliODI2NGZmLCQwMDAwMDAxYQorCWRjLmwJJDUzODE0MjgyLCQyNjA3NDg0MywkNDI0M2RjODMsJGRiODIyNjA3CisJZGMubAkkNDI0MzQ4NDMsJGRhODM0YTJlLCRmZmZjNjYxNiwkM2Q0MWZmZjQKKwlkYy5sCSQ0MjgxNDg0NSwkNDg0NjNhMDYsJDQyNDY1MGVlLCRmZmZjNjAwMAorCWRjLmwJJGZmNmMzZDQxLCRmZmY2M2MwNSwkNDg0NjQ4NDUsJDJlMmVmZmY4CisJZGMubAkkNjcwYTUzODcsJGUyOGRlMjk2LCQ1MWNmZmZmYSwkMmEwNjJjMmUKKwlkYy5sCSRmZmY0NGU3NSwkMjQwNjI2MDYsJDI4MDU0ODQzLCQ0ODQ0Y2NjNQorCWRjLmwJJGNhYzNjNGM0LCRjNmM0NDI4NCwkNDg0NmRjNDUsJGQ3NDRkYzQyCisJZGMubAkkZDc0NDQ4NDYsJDQyNDU0MjQyLCQ0ODQ1NDg0MiwkZGE4MmRhODMKKwlkYy5sCSQ0ZTc1NGU1NiwkZmZmYzQ4ZTcsJDM4MDA0MmVlLCRmZmZjMjAyZQorCWRjLmwJJDAwMDg2NzAwLCQwMDVhMjIyZSwkMDAwYzY3MDAsJDAwNTIyNDAwCisJZGMubAkkMjYwMDI4MDEsJDQ4NDM0ODQ0LCRjMGMxYzJjMywkYzRjNGM2YzQKKwlkYy5sCSQ0Mjg0NDg0MCwkZDA0MWQ3ODQsJGQwNDJkNzg0LCQ0ODQwNDI0MQorCWRjLmwJJDQyNDI0ODQxLCQ0ODQyZDI4MiwkZDI4MzM4MmUsJGZmZmMwMjA0CisJZGMubAkkMDAxMDRhODEsJDZhMDQwMDA0LCQwMDA4NDRjNCwkYzM0MDQ4ZjYKKwlkYy5sCSQwMDAzMDE2MSwkMDAxMDRjZGYsJDAwMWM0ZTVlLCQ0ZTc1NDI4MAorCWRjLmwJJDQyODEzODJlLCRmZmZjMDIwNCwkMDAxMDAwMDQsJDAwMDQ0NGM0CisJZGMubAkkNjBkYTRlNTYsJGZmZmM0OGU3LCQzYzAwNDJlZSwkZmZmYzIwMmUKKwlkYy5sCSQwMDA4NjdkYSwkMjIyZTAwMGMsJDY3ZDQ0MjA1LCQ0YTgwNmMwNgorCWRjLmwJJDQ0ODAwMDA1LCQwMDAxNGE4MSwkNmMwNjQ0ODEsJDBhMDUwMDAxCisJZGMubAkkMjQwMDI2MDAsJDI4MDE0ODQzLCQ0ODQ0YzBjMSwkYzJjM2M0YzQKKwlkYy5sCSRjNmM0NDI4NCwkNDg0MGQwNDEsJGQ3ODRkMDQyLCRkNzg0NDg0MAorCWRjLmwJJDQyNDE0MjQyLCQ0ODQxNDg0MiwkZDI4MmQyODMsJDRhMDU2NzA4CisJZGMubAkkNDY4MDQ2ODEsJDUyODBkMzg0LCQzODJlZmZmYywkMDIwNDAwMTAKKwlkYy5sCSQ0YTgxNmEwNCwkMDAwNDAwMDgsJDQ0YzRjMzQwLCQ0OGY2MDAwMworCWRjLmwJJDAxNjEwMDEwLCQ0Y2RmMDAzYywkNGU1ZTRlNzUsJDQyODA0MjgxCisJZGMubAkkMzgyZWZmZmMsJDAyMDQwMDEwLCQwMDA0MDAwNCwkNDRjNDYwZGEKKwlkYy5sCSQ0ZTU2ZmZmYywkNDhlNzM4MDAsJDQyZWVmZmZjLCQyNDJlMDAwOAorCWRjLmwJJDEwMzYwMTYxLCQwMDBjMTIzNiwkMDE2MjAwMGMsJDAwMDE0OWMwCisJZGMubAkkNDljMTYwMDAsJDAwYjg0ZTU2LCRmZmZjNDhlNywkMzgwMDQyZWUKKwlkYy5sCSRmZmZjMjQyZSwkMDAwODMwMzYsJDAxNjEwMDBjLCQzMjM2MDE2MgorCWRjLmwJJDAwMGMwMDAyLCQ0OGMwNDhjMSwkNjAwMDAwOTIsJDRlNTZmZmZjCisJZGMubAkkNDhlNzM4MDAsJDQyZWVmZmZjLCQyNDJlMDAwOCwkMjAzNjAxNjEKKwlkYy5sCSQwMDBjMjIzNiwkMDE2MjAwMGMsJDAwMDQ2MDAwLCQwMDcwNGU1NgorCWRjLmwJJGZmZmM0OGU3LCQzODAwNDJlZSwkZmZmYzI0MmUsJDAwMDgxMDM2CisJZGMubAkkMDE2MTAwMGMsJDEyMzYwMTYyLCQwMDBjMDAwMSwkNDljMDQ5YzEKKwlkYy5sCSQ0OWMyNjAwMCwkMDA0ODRlNTYsJGZmZmM0OGU3LCQzODAwNDJlZQorCWRjLmwJJGZmZmMyNDJlLCQwMDA4MzAzNiwkMDE2MTAwMGMsJDMyMzYwMTYyCisJZGMubAkkMDAwYzAwMDIsJDQ4YzA0OGMxLCQ0OGMyNjAwMCwkMDAyMDRlNTYKKwlkYy5sCSRmZmZjNDhlNywkMzgwMDQyZWUsJGZmZmMyNDJlLCQwMDA4MjAzNgorCWRjLmwJJDAxNjEwMDBjLCQyMjM2MDE2MiwkMDAwYzAwMDQsJDk0ODA0MmMzCisJZGMubAkkMDIwMzAwMDQsJDkyODBiMjgyLCQ0MmM0ODYwNCwkMDIwMzAwMDUKKwlkYy5sCSQzODJlZmZmYywkMDIwNDAwMWEsJDg4MDM0NGM0LCQ0Y2RmMDAxYworCWRjLmwJJDRlNWU0ZTc1LCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaXNrZWxldG9uLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNrZWxldG9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzYTZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pc2tlbGV0b24uUwpAQCAtMCwwICsxLDM0OSBAQAorfH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorfE1PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK3xNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK3xNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorfFByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0Cit8Cit8TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorfAorfFRIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorfFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCit8TU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorfElOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCit8YW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKK3woSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KK3wKK3xUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorfElOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorfChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCit8QlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK3xBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCit8TW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KK3wKK3xZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorfHNvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCit8cmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCit8Tm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworfG9yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK3x+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK3wgaXNrZWxldG9uLnMKK3wKK3wgVGhpcyBmaWxlIGNvbnRhaW5zOgorfAkoMSkgZXhhbXBsZSAiQ2FsbC1vdXQicworfAkoMikgZXhhbXBsZSBwYWNrYWdlIGVudHJ5IGNvZGUKK3wJKDMpIGV4YW1wbGUgIkNhbGwtb3V0IiB0YWJsZQorfAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit8ICgxKSBFWEFNUExFIENBTEwtT1VUUwkJIworfAkJCQkjCit8IF8wNjBfaXNwX2RvbmUoKQkJIworfCBfMDYwX3JlYWxfY2hrKCkJCSMKK3wgXzA2MF9yZWFsX2RpdmJ5emVybygpCQkjCit8CQkJCSMKK3wgXzA2MF9yZWFsX2NhcygpCQkjCit8IF8wNjBfcmVhbF9jYXMyKCkJCSMKK3wgXzA2MF9yZWFsX2xvY2tfcGFnZSgpCQkjCit8IF8wNjBfcmVhbF91bmxvY2tfcGFnZSgpCSMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8Cit8IF8wNjBfaXNwX2RvbmUoKToKK3wKK3wgVGhpcyBpcyBhbmQgZXhhbXBsZSBtYWluIGV4aXQgcG9pbnQgZm9yIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIKK3wgSW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGhhbmRsZXIuIEZvciBhIG5vcm1hbCBleGl0LCB0aGUKK3wgX2lzcF91bmltcCgpIGJyYW5jaGVzIHRvIGhlcmUgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbQorfCBjYW4gZG8gYW55IGNsZWFuLXVwIGRlc2lyZWQuIFRoZSBzdGFjayBmcmFtZSBpcyB0aGUKK3wgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEluc3RydWN0aW9uIHN0YWNrIGZyYW1lIHdpdGgKK3wgdGhlIFBDIHBvaW50aW5nIHRvIHRoZSBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9uCit8IGp1c3QgZW11bGF0ZWQuCit8IFRvIHNpbXBseSBjb250aW51ZSBleGVjdXRpb24gYXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24sIGp1c3QKK3wgZG8gYW4gInJ0ZSIuCit8Cit8IExpbnV4LzY4azogSWYgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UsIGNoZWNrIGZvciBuZWVkZWQgcmVzZWxlY3Rpb25zLgorCisJLmdsb2JhbAkJXzA2MF9pc3BfZG9uZQorXzA2MF9pc3BfZG9uZToKKwlidHN0CSMweDUsJXNwQAkJfCBzdXBlcnZpc29yIGJpdCBzZXQgaW4gc2F2ZWQgU1I/CisJYmVxCS5Mbm90a2VybgorCXJ0ZQorLkxub3RrZXJuOgorCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwl0c3RiCSVjdXJwdHJAKFRBU0tfTkVFRFJFU0NIRUQpCisJam5lCXJldF9mcm9tX2V4Y2VwdGlvbgl8IGRlbGl2ZXIgc2lnbmFscywKKwkJCQkJfCByZXNjaGVkdWxlIGV0Yy4uCisJUkVTVE9SRV9BTEwKKworfAorfCBfMDYwX3JlYWxfY2hrKCk6Cit8Cit8IFRoaXMgaXMgYW4gYWx0ZXJuYXRlIGV4aXQgcG9pbnQgZm9yIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIKK3wgSW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGhhbmRsZXIuIElmIHRoZSBpbnN0cnVjdGlvbiB3YXMgYSAiY2hrMiIKK3wgYW5kIHRoZSBvcGVyYW5kIHdhcyBvdXQgb2YgYm91bmRzLCB0aGVuIF9pc3BfdW5pbXAoKSBjcmVhdGVzCit8IGEgQ0hLIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmcm9tIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIgSW5zdHJjdXRpb24KK3wgc3RhY2sgZnJhbWUgYW5kIGJyYW5jaGVzIHRvIHRoaXMgcm91dGluZS4KK3wKK3wgTGludXgvNjhrOiBjb21tZW50ZWQgb3V0IHRlc3QgZm9yIHRyYWNpbmcKKworCS5nbG9iYWwJCV8wNjBfcmVhbF9jaGsKK18wNjBfcmVhbF9jaGs6Cit8CXRzdC5iCQkoJXNwKQkJCXwgaXMgdHJhY2luZyBlbmFibGVkPworfAlicGxzCQlyZWFsX2Noa19lbmQJCXwgbm8KKworfAorfAkgICAgQ0hLIEZSQU1FCQkgICBUUkFDRSBGUkFNRQorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAkqICAgQ3VycmVudCBQQwkqCSogICBDdXJyZW50IFBDCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAweDIgKiAgMHgwMTgJKgkqIDB4MiAqICAweDAyNAkqCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8CSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKK3wJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wKK3wJbW92ZS5iCQkjMHgyNCwweDcoJXNwKQkJfCBzZXQgdHJhY2UgdmVjbm8KK3wJYnJhbAkJXzA2MF9yZWFsX3RyYWNlCisKK3JlYWxfY2hrX2VuZDoKKwlicmFsCQl0cmFwCQkJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9kaXZieXplcm86Cit8Cit8IFRoaXMgaXMgYW4gYWx0ZXJuYXRlIGV4aXQgcG9pbnQgZm9yIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIKK3wgSW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGhhbmRsZXIgaXNwX3VuaW1wKCkuIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBhIDY0LWJpdAorfCBpbnRlZ2VyIGRpdmlkZSB3aGVyZSB0aGUgc291cmNlIG9wZXJhbmQgaXMgYSB6ZXJvLCB0aGVuIHRoZSBfaXNwX3VuaW1wKCkKK3wgY3JlYXRlcyBhIERpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmcm9tIHRoZSBVbmltcGxlbWVudGVkCit8IEludGVnZXIgSW5zdHJ1Y3Rpb24gc3RhY2sgZnJhbWUgYW5kIGJyYW5jaGVzIHRvIHRoaXMgcm91dGluZS4KK3wKK3wgUmVtZW1iZXIgdGhhdCBhIHRyYWNlIGV4Y2VwdGlvbiBtYXkgYmUgcGVuZGluZy4gVGhlIGNvZGUgYmVsb3cgcGVyZm9ybXMKK3wgbm8gYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgImNoayIgZXhjZXB0aW9uLiBJZiB0cmFjaW5nIGlzIGVuYWJsZWQsCit8IHRoZW4gaXQgY3JlYXRlIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGZyb20gdGhlICJjaGsiIGV4Y2VwdGlvbgorfCBzdGFjayBmcmFtZSBhbmQgYnJhbmNoZXMgdG8gdGhlIF9yZWFsX3RyYWNlKCkgZW50cnkgcG9pbnQuCit8Cit8IExpbnV4LzY4azogY29tbWVudGVkIG91dCB0ZXN0IGZvciB0cmFjaW5nCisKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfZGl2Ynl6ZXJvCitfMDYwX3JlYWxfZGl2Ynl6ZXJvOgorfAl0c3QuYgkJKCVzcCkJCQl8IGlzIHRyYWNpbmcgZW5hYmxlZD8KK3wJYnBscwkJcmVhbF9kaXZieXplcm9fZW5kCXwgbm8KKworfAorfAkgRElWQllaRVJPIEZSQU1FCSAgIFRSQUNFIEZSQU1FCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8CSogICBDdXJyZW50IFBDCSoJKiAgIEN1cnJlbnQgUEMJKgorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAkqIDB4MiAqICAweDAxNAkqCSogMHgyICogIDB4MDI0CSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAgICAgTmV4dAkqCSogICAgIE5leHQJKgorfAkqICAgICAgUEMJKgkqICAgICAgUEMJKgorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAkqICAgICAgU1IJKgkqICAgICAgU1IJKgorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAorfAltb3ZlLmIJCSMweDI0LDB4Nyglc3ApCQl8IHNldCB0cmFjZSB2ZWNubworfAlicmFsCQlfMDYwX3JlYWxfdHJhY2UKKworcmVhbF9kaXZieXplcm9fZW5kOgorCWJyYWwJCXRyYXAJCQl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8Cit8IF8wNjBfcmVhbF9jYXMoKToKK3wKK3wgRW50cnkgcG9pbnQgZm9yIHRoZSBzZWxlY3RlZCBjYXMgZW11bGF0aW9uIGNvZGUgaW1wbGVtZW50YXRpb24uCit8IElmIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgNjgwNjBJU1AgaXMgc3VmZmljaWVudCwKK3wgdGhlbiB0aGlzIHJvdXRpbmUgc2ltcGx5IHJlLWVudGVycyB0aGUgcGFja2FnZSB0aHJvdWdoIF9pc3BfY2FzLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9jYXMKK18wNjBfcmVhbF9jYXM6CisJYnJhbAkJX0lfQ0FMTF9UT1ArMHg4MCsweDA4CisKK3wKK3wgXzA2MF9yZWFsX2NhczIoKToKK3wKK3wgRW50cnkgcG9pbnQgZm9yIHRoZSBzZWxlY3RlZCBjYXMyIGVtdWxhdGlvbiBjb2RlIGltcGxlbWVudGF0aW9uLgorfCBJZiB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIDY4MDYwSVNQIGlzIHN1ZmZpY2llbnQsCit8IHRoZW4gdGhpcyByb3V0aW5lIHNpbXBseSByZS1lbnRlcnMgdGhlIHBhY2thZ2UgdGhyb3VnaCBfaXNwX2NhczIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX2NhczIKK18wNjBfcmVhbF9jYXMyOgorCWJyYWwJCV9JX0NBTExfVE9QKzB4ODArMHgxMAorCit8Cit8IF8wNjBfbG9ja19wYWdlKCk6Cit8Cit8IEVudHJ5IHBvaW50IGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbWBzIHJvdXRpbmUgdG8gImxvY2siIGEgcGFnZQorfCBmcm9tIGJlaW5nIHBhZ2VkIG91dC4gVGhpcyByb3V0aW5lIGlzIG5lZWRlZCBieSB0aGUgY2FzL2NhczIKK3wgYWxnb3JpdGhtcyBzbyB0aGF0IG5vIHBhZ2UgZmF1bHRzIG9jY3VyIHdpdGhpbiB0aGUgImNvcmUiIGNvZGUKK3wgcmVnaW9uLiBOb3RlOiB0aGUgcm91dGluZSBtdXN0IGxvY2sgdHdvIHBhZ2VzIGlmIHRoZSBvcGVyYW5kCit8IHNwYW5zIHR3byBwYWdlcy4KK3wgTk9URTogVEhFIFJPVVRJTkUgU0hPVUxEIFJFVFVSTiBBTiBGU0xXIFZBTFVFIElOIEQwIE9OIEZBSUxVUkUKK3wgU08gVEhBVCBUSEUgMDYwU1AgQ0FOIENSRUFURSBBIFBST1BFUiBBQ0NFU1MgRVJST1IgRlJBTUUuCit8IEFyZ3VtZW50czoKK3wJYTAgPSBvcGVyYW5kIGFkZHJlc3MKK3wJZDAgPSBgeHh4eHh4ZmYgLT4gc3VwZXJ2aXNvcjsgYHh4eHh4eDAwIC0+IHVzZXIKK3wJZDEgPSBgeHh4eHh4ZmYgLT4gbG9uZ3dvcmQ7IGB4eHh4eHgwMCAtPiB3b3JkCit8IEV4cGVjdGVkIG91dHB1dHM6Cit8CWQwID0gMCAtPiBzdWNjZXNzOyBub24temVybyAtPiBmYWlsdXJlCit8Cit8IExpbnV4L202OGs6IE1ha2Ugc3VyZSB0aGUgcGFnZSBpcyBwcm9wZXJseSBwYWdlZCBpbiwgc28gd2UgdXNlCit8IHBscGF3IGFuZCBoYW5kbGUgYW55IGV4Y2VwdGlvbiBoZXJlLiBUaGUga2VybmVsIG11c3Qgbm90IGJlCit8IHByZWVtcHRlZCB1bnRpbCBfMDYwX3VubG9ja19wYWdlKCksIHNvIHRoYXQgdGhlIHBhZ2Ugc3RheXMgbWFwcGVkLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9sb2NrX3BhZ2UKK18wNjBfcmVhbF9sb2NrX3BhZ2U6CisJbW92ZS5sCSVkMiwtKCVzcCkKKwl8IGxvYWQgc2ZjL2RmYworCXRzdC5iCSVkMAorCWpuZQkxZgorCW1vdmVxCSMxLCVkMAorCWpyYQkyZgorMToJbW92ZXEJIzUsJWQwCisyOgltb3ZlYy5sCSVkZmMsJWQyCisJbW92ZWMubAklZDAsJWRmYworCW1vdmVjLmwJJWQwLCVzZmMKKworCWNsci5sCSVkMAorCXwgcHJlZmV0Y2ggYWRkcmVzcworCS5jaGlwCTY4MDYwCisJbW92ZS5sCSVhMCwlYTEKKzE6CXBscGF3CSglYTEpCisJYWRkcS53CSMxLCVhMAorCXRzdC5iCSVkMQorCWplcQkyZgorCWFkZHEudwkjMiwlYTAKKzI6CXBscGF3CSglYTApCiszOgkuY2hpcAk2OGsKKworCXwgcmVzdG9yZSBzZmMvZGZjCisJbW92ZWMubAklZDIsJWRmYworCW1vdmVjLmwJJWQyLCVzZmMKKwltb3ZlLmwJKCVzcCkrLCVkMgorCXJ0cworCisuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgk0CisJLmxvbmcJMWIsMTFmCisJLmxvbmcJMmIsMjFmCisucHJldmlvdXMKKy5zZWN0aW9uIC5maXh1cCwiYXgiCisJLmV2ZW4KKzExOgltb3ZlLmwJIzB4MDIwMDAzYzAsJWQwCisJb3IubAklZDIsJWQwCisJc3dhcAklZDAKKwlqcmEJM2IKKzIxOgltb3ZlLmwJIzB4MDIwMDBiYzAsJWQwCisJb3IubAklZDIsJWQwCisJc3dhcAklZDAKKwlqcmEJM2IKKy5wcmV2aW91cworCit8Cit8IF8wNjBfdW5sb2NrX3BhZ2UoKToKK3wKK3wgRW50cnkgcG9pbnQgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtYHMgcm91dGluZSB0byAidW5sb2NrIiBhCit8IHBhZ2UgdGhhdCBoYXMgYmVlbiAibG9ja2VkIiBwcmV2aW91c2x5IHdpdGggX3JlYWxfbG9ja19wYWdlLgorfCBOb3RlOiB0aGUgcm91dGluZSBtdXN0IHVubG9jayB0d28gcGFnZXMgaWYgdGhlIG9wZXJhbmQgc3BhbnMKK3wgdHdvIHBhZ2VzLgorfCBBcmd1bWVudHM6Cit8CWEwID0gb3BlcmFuZCBhZGRyZXNzCit8CWQwID0gYHh4eHh4eGZmIC0+IHN1cGVydmlzb3I7IGB4eHh4eHgwMCAtPiB1c2VyCit8CWQxID0gYHh4eHh4eGZmIC0+IGxvbmd3b3JkOyBgeHh4eHh4MDAgLT4gd29yZAorfAorfCBMaW51eC9tNjhrOiBwZXJoYXBzIHJlZW5hYmxlIHByZWVtcHRpb24gaGVyZS4uLgorCisJLmdsb2JhbAkJXzA2MF9yZWFsX3VubG9ja19wYWdlCitfMDYwX3JlYWxfdW5sb2NrX3BhZ2U6CisJY2xyLmwJCSVkMAorCXJ0cworCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3wgKDIpIEVYQU1QTEUgUEFDS0FHRSBFTlRSWSBDT0RFICMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCS5nbG9iYWwJCV8wNjBfaXNwX3VuaW1wCitfMDYwX2lzcF91bmltcDoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MDAKKworCS5nbG9iYWwJCV8wNjBfaXNwX2NhcworXzA2MF9pc3BfY2FzOgorCWJyYWwJCV9JX0NBTExfVE9QKzB4ODArMHgwOAorCisJLmdsb2JhbAkJXzA2MF9pc3BfY2FzMgorXzA2MF9pc3BfY2FzMjoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MTAKKworCS5nbG9iYWwJCV8wNjBfaXNwX2Nhc19maW5pc2gKK18wNjBfaXNwX2Nhc19maW5pc2g6CisJYnJhLmwJCV9JX0NBTExfVE9QKzB4ODArMHgxOAorCisJLmdsb2JhbAkJXzA2MF9pc3BfY2FzMl9maW5pc2gKK18wNjBfaXNwX2NhczJfZmluaXNoOgorCWJyYWwJCV9JX0NBTExfVE9QKzB4ODArMHgyMAorCisJLmdsb2JhbAkJXzA2MF9pc3BfY2FzX2lucmFuZ2UKK18wNjBfaXNwX2Nhc19pbnJhbmdlOgorCWJyYWwJCV9JX0NBTExfVE9QKzB4ODArMHgyOAorCisJLmdsb2JhbAkJXzA2MF9pc3BfY2FzX3Rlcm1pbmF0ZQorXzA2MF9pc3BfY2FzX3Rlcm1pbmF0ZToKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MzAKKworCS5nbG9iYWwJCV8wNjBfaXNwX2Nhc19yZXN0YXJ0CitfMDYwX2lzcF9jYXNfcmVzdGFydDoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MzgKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfCAoMykgRVhBTVBMRSBDQUxMLU9VVCBTRUNUSU9OICMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wgVGhlIHNpemUgb2YgdGhpcyBzZWN0aW9uIE1VU1QgYmUgMTI4IGJ5dGVzISEhCisKK19JX0NBTExfVE9QOgorCS5sb25nCV8wNjBfcmVhbF9jaGsJCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfZGl2Ynl6ZXJvCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfdHJhY2UJCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfYWNjZXNzCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2lzcF9kb25lCQktIF9JX0NBTExfVE9QCisKKwkubG9uZwlfMDYwX3JlYWxfY2FzCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2NhczIJCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfbG9ja19wYWdlCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfdW5sb2NrX3BhZ2UJLSBfSV9DQUxMX1RPUAorCisJLmxvbmcJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKworCS5sb25nCV8wNjBfaW1lbV9yZWFkCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWQJCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGUJCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2ltZW1fcmVhZF93b3JkCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2ltZW1fcmVhZF9sb25nCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZF9ieXRlCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZF93b3JkCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZF9sb25nCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGVfYnl0ZQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3dyaXRlX3dvcmQJLSBfSV9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV93cml0ZV9sb25nCS0gX0lfQ0FMTF9UT1AKKworCS5sb25nCTB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfCAwNjAgSU5URUdFUiBLRVJORUwgUEFDS0FHRSBNVVNUIEdPIEhFUkUhISEKKyNpbmNsdWRlICJpc3Auc2EiCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaXNwLmRvYyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pc3AuZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTBmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNwLmRvYwpAQCAtMCwwICsxLDIxOCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorNjgwNjAgSU5URUdFUiBTT0ZUV0FSRSBQQUNLQUdFIChLZXJuZWwgdmVyc2lvbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBpc3Auc2EgY29udGFpbnMgdGhlIDY4MDYwIEludGVnZXIgU29mdHdhcmUgUGFja2FnZS4KK1RoaXMgcGFja2FnZSBpcyBlc3NlbnRpYWxseSBhbiBleGNlcHRpb24gaGFuZGxlciB0aGF0IGNhbiBiZQoraW50ZWdyYXRlZCBpbnRvIGFuIG9wZXJhdGluZyBzeXN0ZW0gdG8gaGFuZGxlIHRoZSAiVW5pbXBsZW1lbnRlZAorSW50ZWdlciBJbnN0cnVjdGlvbiIgZXhjZXB0aW9uIHZlY3RvciAjNjEuCitUaGlzIGV4Y2VwdGlvbiBpcyB0YWtlbiB3aGVuIGFueSBvZiB0aGUgaW50ZWdlciBpbnN0cnVjdGlvbnMKK25vdCBoYXJkd2FyZSBpbXBsZW1lbnRlZCBvbiB0aGUgNjgwNjAgYXJlIGVuY291bnRlcmVkLiBUaGUKK2lzcC5zYSBwcm92aWRlcyBmdWxsIGVtdWxhdGlvbiBzdXBwb3J0IGZvciB0aGVzZSBpbnN0cnVjdGlvbnMuCisKK1RoZSB1bmltcGxlbWVudGVkIGludGVnZXIgaW5zdHJ1Y3Rpb25zIGFyZToKKwk2NC1iaXQgZGl2aWRlCisJNjQtYml0IG11bHRpcGx5CisJbW92ZXAKKwljbXAyCisJY2hrMgorCWNhcyAody8gYSBtaXNhbGlnbmVkIGVmZmVjdGl2ZSBhZGRyZXNzKQorCWNhczIKKworUmVsZWFzZSBmaWxlIGZvcm1hdDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBpc3Auc2EgaXMgZXNzZW50aWFsbHkgYSBoZXhhZGVjaW1hbCBpbWFnZSBvZiB0aGUKK3JlbGVhc2UgcGFja2FnZS4gVGhpcyBpcyB0aGUgT05MWSBmb3JtYXQgd2hpY2ggd2lsbCBiZSBzdXBwb3J0ZWQuCitUaGUgaGV4IGltYWdlIHdhcyBjcmVhdGVkIGJ5IGFzc2VtYmxpbmcgdGhlIHNvdXJjZSBjb2RlIGFuZAordGhlbiBjb252ZXJ0aW5nIHRoZSByZXN1bHRpbmcgYmluYXJ5IG91dHB1dCBpbWFnZSBpbnRvIGFuCitBU0NJSSB0ZXh0IGZpbGUuIFRoZSBoZXhhZGVjaW1hbCBudW1iZXJzIGFyZSBsaXN0ZWQKK3VzaW5nIHRoZSBNb3Rvcm9sYSBBc3NlbWJseSBTeW50YXggYXNzZW1ibGVyIGRpcmVjdGl2ZSAiZGMubCIKKyhkZWZpbmUgY29uc3RhbnQgbG9uZ3dvcmQpLiBUaGUgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIG90aGVyCithc3NlbWJseSBzeW50YXhlcyBieSB1c2luZyBhbnkgd29yZCBwcm9jZXNzb3Igd2l0aCBhIGdsb2JhbAorc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9uLgorCitUbyBhc3Npc3QgaW4gYXNzZW1ibGluZyBhbmQgbGlua2luZyB0aGlzIG1vZHVsZSB3aXRoIG90aGVyIG1vZHVsZXMsCit0aGUgaW5zdGFsbGVyIHNob3VsZCBhZGQgYSBzeW1ib2xpYyBsYWJlbCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgcm91dGluZXMgdG8gYWNjZXNzIHRoZSBlbnRyeSBwb2ludHMKK29mIHRoaXMgcGFja2FnZS4KKworVGhlIHNvdXJjZSBjb2RlIGlzcC5zIGhhcyBhbHNvIGJlZW4gaW5jbHVkZWQgYnV0IG9ubHkgZm9yCitkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgorCitSZWxlYXNlIGZpbGUgc3RydWN0dXJlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHRvcCBvZiBtb2R1bGUpCisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gMTI4IGJ5dGUtc2l6ZWQgc2VjdGlvbgorICAgKDEpICB8ICAgQ2FsbC1PdXQgICAgfCAtIDQgYnl0ZXMgcGVyIGVudHJ5ICh1c2VyIGZpbGxzIHRoZXNlIGluKQorCXwJCXwgLSBleGFtcGxlIHJvdXRpbmVzIGluIGlza2VsZXRvbi5zCisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gOCBieXRlcyBwZXIgZW50cnkKKyAgICgyKSAgfCBFbnRyeSBQb2ludCAgIHwgLSB1c2VyIGRvZXMgYSAiYnJhIiBvciAiam1wIiB0byB0aGlzIGFkZHJlc3MKKwl8ICAgICAgICAgICAgICAgfAorCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIGNvZGUgc2VjdGlvbgorICAgKDMpICB+CQl+CisJfAkJfAorCS0tLS0tLS0tLS0tLS0tLS0tCisoYm90dG9tIG9mIG1vZHVsZSkKKworVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdGhlICJDYWxsLW91dCIgc2VjdGlvbi4gVGhpcyBzZWN0aW9uCitpcyBOT1QgSU5DTFVERUQgaW4gaXNwLnNhIChhbiBleGFtcGxlICJDYWxsLW91dCIgc2VjdGlvbiBpcyBwcm92aWRlZCBhdAordGhlIGVuZCBvZiB0aGUgZmlsZSBpc2tlbGV0b24ucykuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiBpcyB0byBhbGxvdwordGhlIElTUCByb3V0aW5lcyB0byByZWZlcmVuY2UgZXh0ZXJuYWwgZnVuY3Rpb25zIHRoYXQgbXVzdCBiZSBwcm92aWRlZAorYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBzZWN0aW9uIE1VU1QgYmUgZXhhY3RseSAxMjggYnl0ZXMgaW4KK3NpemUuIFRoZXJlIGFyZSAzMiBmaWVsZHMsIGVhY2ggNCBieXRlcyBpbiBzaXplLiBFYWNoIGZpZWxkIGNvcnJlc3BvbmRzCit0byBhIGZ1bmN0aW9uIHJlcXVpcmVkIGJ5IHRoZSBJU1AgKHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgbG9jYXRpb24gYXJlCitsaXN0ZWQgaW4gIjY4MDYwSVNQIGNhbGwtb3V0cyIgYmVsb3cpLiBFYWNoIGZpZWxkIGVudHJ5IHNob3VsZCBjb250YWluCit0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBSRUxBVElWRSB0byB0aGUgc3RhcnRpbmcgYWRkcmVzcworb2YgdGhlICJjYWxsLW91dCIgc2VjdGlvbi4gVGhlICJDYWxsLW91dCIgc2VjdGlvbiBtdXN0IHNpdCBhZGphY2VudCB0byB0aGUKK2lzcC5zYSBpbWFnZSBpbiBtZW1vcnkuCisKK1RoZSBzZWNvbmQgc2VjdGlvbiwgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbiwgaXMgdXNlZCBieSBleHRlcm5hbCByb3V0aW5lcwordG8gYWNjZXNzIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBJU1AuIFNpbmNlIHRoZSBpc3Auc2EgaGV4IGZpbGUgY29udGFpbnMKK25vIHN5bWJvbCBuYW1lcywgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBmaXhlZAord2l0aCByZXNwZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHBhY2thZ2UuIFRoZSBjdXJyZW50bHkgZGVmaW5lZCBlbnRyeS1wb2ludHMKK2FyZSBsaXN0ZWQgaW4gc2VjdGlvbiAiNjgwNjAgSVNQIGVudHJ5IHBvaW50cyIgYmVsb3cuIEEgY2FsbGluZyByb3V0aW5lCit3b3VsZCBzaW1wbHkgZXhlY3V0ZSBhICJicmEiIG9yICJqbXAiIHRoYXQganVtcGVkIHRvIHRoZSBzZWxlY3RlZCBmdW5jdGlvbgorZW50cnktcG9pbnQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgNjgwNjAgaGFyZHdhcmUgdG9vayBhICJVbmltcGxlbWVudGVkIEludGVnZXIgSW5zdHJ1Y3Rpb24iCitleGNlcHRpb24gKHZlY3RvciAjNjEpLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgZXhlY3V0ZSBzb21ldGhpbmcKK3NpbWlsYXIgdG86CisKKwlicmEJXzA2MElTUF9UT1ArMTI4KzAKKworKF8wNjBJU1BfVE9QIGlzIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSAiQ2FsbC1vdXQiIHNlY3Rpb247IHRoZSAiQ2FsbC1vdXQiCitzZWN0aW9uIGlzIDEyOCBieXRlcyBsb25nOyBhbmQgdGhlIFVuaW1wbGVtZW50ZWQgSW50ZWdlciBJU1AgaGFuZGxlciBlbnRyeQorcG9pbnQgaXMgbG9jYXRlZCAwIGJ5dGVzIGZyb20gdGhlIHRvcCBvZiB0aGUgIkVudHJ5LXBvaW50IiBzZWN0aW9uLikKKworVGhlIHRoaXJkIHNlY3Rpb24gaXMgdGhlIGNvZGUgc2VjdGlvbi4gQWZ0ZXIgZW50ZXJpbmcgdGhyb3VnaCBhbiAiRW50cnktcG9pbnQiLAordGhlIGVudHJ5IGNvZGUganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGVtdWxhdGlvbiBjb2RlIHdpdGhpbiB0aGUgY29kZSBzZWN0aW9uLgorCis2ODA2MElTUCBjYWxsLW91dHM6IChkZXRhaWxzIGluIGlza2VsZXRvbi5zKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzB4MDAwOglfMDYwX3JlYWxfY2hrCisweDAwNDoJXzA2MF9yZWFsX2RpdmJ5emVybworMHgwMDg6CV8wNjBfcmVhbF90cmFjZQorMHgwMGM6CV8wNjBfcmVhbF9hY2Nlc3MKKzB4MDEwOglfMDYwX2lzcF9kb25lCisKKzB4MDE0OglfMDYwX3JlYWxfY2FzCisweDAxODoJXzA2MF9yZWFsX2NhczIKKzB4MDFjOglfMDYwX3JlYWxfbG9ja19wYWdlCisweDAyMDoJXzA2MF9yZWFsX3VubG9ja19wYWdlCisKKzB4MDI0OgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDAyODoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwMmM6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDMwOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDAzNDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwMzg6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDNjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisKKzB4MDQwOglfMDYwX2ltZW1fcmVhZAorMHgwNDQ6CV8wNjBfZG1lbV9yZWFkCisweDA0ODoJXzA2MF9kbWVtX3dyaXRlCisweDA0YzoJXzA2MF9pbWVtX3JlYWRfd29yZAorMHgwNTA6CV8wNjBfaW1lbV9yZWFkX2xvbmcKKzB4MDU0OglfMDYwX2RtZW1fcmVhZF9ieXRlCisweDA1ODoJXzA2MF9kbWVtX3JlYWRfd29yZAorMHgwNWM6CV8wNjBfZG1lbV9yZWFkX2xvbmcKKzB4MDYwOglfMDYwX2RtZW1fd3JpdGVfYnl0ZQorMHgwNjQ6CV8wNjBfZG1lbV93cml0ZV93b3JkCisweDA2ODoJXzA2MF9kbWVtX3dyaXRlX2xvbmcKKworMHgwNmM6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDcwOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3NDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwNzg6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDdjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisKKzY4MDYwSVNQIGVudHJ5IHBvaW50czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDAwMDoJXzA2MF9pc3BfdW5pbXAKKworMHgwMDg6CV8wNjBfaXNwX2NhcworMHgwMTA6CV8wNjBfaXNwX2NhczIKKzB4MDE4OglfMDYwX2lzcF9jYXNfZmluaXNoCisweDAyMDoJXzA2MF9pc3BfY2FzMl9maW5pc2gKKzB4MDI4OglfMDYwX2lzcF9jYXNfaW5yYW5nZQorMHgwMzA6CV8wNjBfaXNwX2Nhc190ZXJtaW5hdGUKKzB4MDM4OglfMDYwX2lzcF9jYXNfcmVzdGFydAorCitJbnRlZ3JhdGluZyBjYXMvY2FzMjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGluc3RydWN0aW9ucyAiY2FzMiIgYW5kICJjYXMiICh3aGVuIHVzZWQgd2l0aCBhIG1pc2FsaWduZWQgZWZmZWN0aXZlCithZGRyZXNzKSB0YWtlIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIgSW5zdHJ1Y3Rpb24gZXhjZXB0aW9uLiBXaGVuIHRoZQorMDYwSVNQIGlzIGluc3RhbGxlZCBwcm9wZXJseSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIHdpbGwgZW50ZXIgdGhyb3VnaCB0aGUKK18wNjBfaXNwX3VuaW1wKCkgZW50cnkgcG9pbnQgb2YgdGhlIElTUC4KKworQWZ0ZXIgdGhlIDA2MElTUCBkZWNvZGVzIHRoZSBpbnN0cnVjdGlvbiB0eXBlIGFuZCBmZXRjaGVzIHRoZSBhcHByb3ByaWF0ZQorZGF0YSByZWdpc3RlcnMsIGFuZCBCRUZPUkUgdGhlIGFjdHVhbCBlbXVsYXRlZCB0cmFuc2ZlcnMgb2NjdXIsIHRoZQorcGFja2FnZSBjYWxscyBlaXRoZXIgdGhlICJDYWxsLW91dCIgXzA2MF9yZWFsX2NhcygpIG9yIF8wNjBfcmVhbF9jYXMyKCkuCitJZiB0aGUgZW11bGF0aW9uIGNvZGUgcHJvdmlkZWQgYnkgdGhlIDA2MElTUCBpcyBzdWZmaWNpZW50IGZvciB0aGUKK2hvc3Qgc3lzdGVtIChzZWUgaXNwLnMgc291cmNlIGNvZGUpLCB0aGVuIHRoZXNlICJDYWxsLW91dCJzIHNob3VsZCBiZQorbWFkZSwgYnkgdGhlIHN5c3RlbSBpbnRlZ3JhdG9yLCB0byBwb2ludCBkaXJlY3RseSBiYWNrIGludG8gdGhlIHBhY2thZ2UKK3Rocm91Z2ggdGhlICJFbnRyeS1wb2ludCJzIF8wNjBfaXNwX2NhcygpIG9yIF8wNjBfaXNwX2NhczIoKS4KKworT25lIG90aGVyIG5lY2Vzc2FyeSBhY3Rpb24gYnkgdGhlIGludGVncmF0b3IgaXMgdG8gc3VwcGx5IHRoZSByb3V0aW5lcworXzA2MF9yZWFsX2xvY2tfcGFnZSgpIGFuZCBfMDYwX3JlYWxfdW5sb2NrX3BhZ2UoKS4gVGhlc2UgZnVuY3Rpb25zIGFyZQorZGVmaW5lZCBmdXJ0aGVyIGluIGlza2VsZXRvbi5zIGFuZCB0aGUgNjgwNjAgU29mdHdhcmUgUGFja2FnZSBTcGVjaWZpY2F0aW9uLgorCitJZiB0aGUgImNvcmUiIGVtdWxhdGlvbiByb3V0aW5lcyBvZiBlaXRoZXIgImNhcyIgb3IgImNhczIiIHBlcmZvcm0gc29tZQorYWN0aW9ucyB3aGljaCBhcmUgdG9vIHN5c3RlbS1zcGVjaWZpYywgdGhlbiB0aGUgc3lzdGVtIGludGVncmF0b3IgbXVzdAorc3VwcGx5IG5ldyBlbXVsYXRpb24gY29kZS4gVGhpcyBuZXcgZW11bGF0aW9uIGNvZGUgc2hvdWxkIHJlc2lkZSB3aXRoaW4KK3RoZSBmdW5jdGlvbnMgXzA2MF9yZWFsX2NhcygpIG9yIF8wNjBfcmVhbF9jYXMyKCkuIFdoZW4gdGhpcyBuZXcgZW11bGF0aW9uCitjb2RlIGhhcyBjb21wbGV0ZWQsIHRoZW4gaXQgc2hvdWxkIHJlLWVudGVyIHRoZSAwNjBJU1AgcGFja2FnZSB0aHJvdWdoIHRoZQorIkVudHJ5LXBvaW50IiBfMDYwX2lzcF9jYXNfZmluaXNoKCkgb3IgXzA2MF9pc3BfY2FzMl9maW5pc2goKS4KK1RvIHNlZSB3aGF0IHRoZSByZWdpc3RlciBzdGF0ZSBpcyB1cG9uIGVudGVyaW5nIF8wNjBfcmVhbF9jYXMoKSBvcgorXzA2MF9yZWFsX2NhczIoKSBhbmQgd2hhdCBpdCBzaG91bGQgYmUgdXBvbiByZXR1cm4gdG8gdGhlIHBhY2thZ2UgdGhyb3VnaAorXzA2MF9pc3BfY2FzX2ZpbmlzaCgpIG9yIF8wNjBfaXNwX2NhczJfZmluaXNoKCksIHBsZWFzZSByZWZlciB0byB0aGUKK3NvdXJjZSBjb2RlIGluIGlzcC5zLgorCitNaXNjZWxsYW5lb3VzOgorLS0tLS0tLS0tLS0tLS0KKworXzA2MF9pc3BfdW5pbXA6CistLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMi4yIGluIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9pc3BfdW5pbXAgICAtLXwKKwkJCQkJCSAgICAgIHwKKwkJCQkJCSAgICAgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2l0cmFjZSAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2NoayAgICAgICA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2RpdmJ5emVybyA8LS0tLXwKKwkJCQkJCSAgb3IgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9pc3BfZG9uZSAgICAgICA8LS0tLXwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9pc3Auc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNwLnNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODhkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNwLnNhCkBAIC0wLDAgKzEsMzkyIEBACisJLmxvbmcJMHg2MGZmMDAwMCwweDAyMzYwMDAwLDB4NjBmZjAwMDAsMHgxNjI2MDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgxMmRjMDAwMCwweDYwZmYwMDAwLDB4MTFlYTAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MTBkZTAwMDAsMHg2MGZmMDAwMCwweDEyYTQwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDEyNTYwMDAwLDB4NjBmZjAwMDAsMHgxMjJhMDAwMAorCS5sb25nCTB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDJmMDAyMDNhLDB4ZmVmYzQ4N2IsMHgwOTMwZmZmZiwweGZlZjgyMDJmCisJLmxvbmcJMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZlZWEsMHg0ODdiMDkzMAorCS5sb25nCTB4ZmZmZmZlZTIsMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EKKwkubG9uZwkweGZlZDg0ODdiLDB4MDkzMGZmZmYsMHhmZWNjMjAyZiwweDAwMDQ0ZTc0CisJLmxvbmcJMHgwMDA0MmYwMCwweDIwM2FmZWM2LDB4NDg3YjA5MzAsMHhmZmZmZmViNgorCS5sb25nCTB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmViNDQ4N2IKKwkubG9uZwkweDA5MzBmZmZmLDB4ZmVhMDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwCisJLmxvbmcJMHgyMDNhZmVhMiwweDQ4N2IwOTMwLDB4ZmZmZmZlOGEsMHgyMDJmMDAwNAorCS5sb25nCTB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZlOTA0ODdiLDB4MDkzMGZmZmYKKwkubG9uZwkweGZlNzQyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZTdlCisJLmxvbmcJMHg0ODdiMDkzMCwweGZmZmZmZTVlLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNAorCS5sb25nCTB4MmYwMDIwM2EsMHhmZTZjNDg3YiwweDA5MzBmZmZmLDB4ZmU0ODIwMmYKKwkubG9uZwkweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmU3NiwweDQ4N2IwOTMwCisJLmxvbmcJMHhmZmZmZmUzMiwweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYQorCS5sb25nCTB4ZmU2NDQ4N2IsMHgwOTMwZmZmZiwweGZlMWMyMDJmLDB4MDAwNDRlNzQKKwkubG9uZwkweDAwMDQyZjAwLDB4MjAzYWZlNTIsMHg0ODdiMDkzMCwweGZmZmZmZTA2CisJLmxvbmcJMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZTQwNDg3YgorCS5sb25nCTB4MDkzMGZmZmYsMHhmZGYwMjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAKKwkubG9uZwkweDIwM2FmZTJlLDB4NDg3YjA5MzAsMHhmZmZmZmRkYSwweDIwMmYwMDA0CisJLmxvbmcJMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmUxYzQ4N2IsMHgwOTMwZmZmZgorCS5sb25nCTB4ZmRjNDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZlMGEKKwkubG9uZwkweDQ4N2IwOTMwLDB4ZmZmZmZkYWUsMHgyMDJmMDAwNCwweDRlNzQwMDA0CisJLmxvbmcJMHgyZjAwMjAzYSwweGZkZjg0ODdiLDB4MDkzMGZmZmYsMHhmZDk4MjAyZgorCS5sb25nCTB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZGU2LDB4NDg3YjA5MzAKKwkubG9uZwkweGZmZmZmZDgyLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhCisJLmxvbmcJMHhmZGQ0NDg3YiwweDA5MzBmZmZmLDB4ZmQ2YzIwMmYsMHgwMDA0NGU3NAorCS5sb25nCTB4MDAwNDJmMDAsMHgyMDNhZmRjMiwweDQ4N2IwOTMwLDB4ZmZmZmZkNTYKKwkubG9uZwkweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHg0ZTU2ZmZhMCwweDQ4ZWUzZmZmCisJLmxvbmcJMHhmZmMwMmQ1NiwweGZmZjgwODJlLDB4MDAwNTAwMDQsMHg2NjA4NGU2OAorCS5sb25nCTB4MmQ0OGZmZmMsMHg2MDA4NDFlZSwweDAwMGMyZDQ4LDB4ZmZmYzQyMmUKKwkubG9uZwkweGZmYWEzZDZlLDB4MDAwNGZmYTgsMHgyZDZlMDAwNiwweGZmYTQyMDZlCisJLmxvbmcJMHhmZmE0NThhZSwweGZmYTQ2MWZmLDB4ZmZmZmZmMjYsMHgyZDQwZmZhMAorCS5sb25nCTB4MDgwMDAwMWUsMHg2NzY4MDgwMCwweDAwMTY2NjI4LDB4NjFmZjAwMDAKKwkubG9uZwkweDBjYjAwODJlLDB4MDAwNTAwMDQsMHg2NzAwMDBhYywweDA4MmUwMDAyCisJLmxvbmcJMHhmZmFhNjcwMCwweDAwYTIwODJlLDB4MDAwNzAwMDQsMHg2NjAwMDE4NgorCS5sb25nCTB4NjAwMDAxYjAsMHg2MWZmMDAwMCwweDBhMjgwODJlLDB4MDAwMmZmYWEKKwkubG9uZwkweDY2MGUwODJlLDB4MDAwNWZmYWEsMHg2NjAwMDEwYSwweDYwMDAwMDc4CisJLmxvbmcJMHgwODJlMDAwNSwweDAwMDQ2N2VhLDB4MDgyZTAwMDUsMHhmZmFhNjYwMAorCS5sb25nCTB4MDEyNjRhMmUsMHgwMDA0NmIwMCwweDAxNGM2MDAwLDB4MDE3NjA4MDAKKwkubG9uZwkweDAwMTg2NzBhLDB4NjFmZjAwMDAsMHgwN2FlNjAwMCwweDAwNGEwODAwCisJLmxvbmcJMHgwMDFiNjczMCwweDQ4NDAwYzAwLDB4MDBmYzY3MGEsMHg2MWZmMDAwMAorCS5sb25nCTB4MGU5MjYwMDAsMHgwMDMyMjA2ZSwweGZmYTQ1NGFlLDB4ZmZhNDYxZmYKKwkubG9uZwkweGZmZmZmZTY4LDB4NGE4MTY2MDAsMHgwMTk4NjFmZiwweDAwMDAwZDIwCisJLmxvbmcJMHg2MDAwMDAxNCwweDYxZmYwMDAwLDB4MDhjNDBjMmUsMHgwMDEwZmZhYQorCS5sb25nCTB4NjYwMDAwMDQsMHg2MDVjMWQ2ZSwweGZmYTkwMDA1LDB4MDgyZTAwMDUKKwkubG9uZwkweDAwMDQ2NjA2LDB4MjA2ZWZmZmMsMHg0ZTYwNGNlZSwweDNmZmZmZmMwCisJLmxvbmcJMHgwODJlMDAwNywweDAwMDQ2NjEyLDB4MmQ2ZWZmYTQsMHgwMDA2MmNhZQorCS5sb25nCTB4ZmZmODRlNWUsMHg2MGZmZmZmZiwweGZkNjIyZDZlLDB4ZmZmOGZmZmMKKwkubG9uZwkweDNkNmUwMDA0LDB4MDAwMDJkNmUsMHgwMDA2MDAwOCwweDJkNmVmZmE0CisJLmxvbmcJMHgwMDAyM2Q3YywweDIwMjQwMDA2LDB4NTk4ZTRlNWUsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmQwZTFkNmUsMHhmZmE5MDAwNSwweDRjZWUzZmZmLDB4ZmZjMDNjYWUKKwkubG9uZwkweDAwMDQyZDZlLDB4MDAwNjAwMDgsMHgyZDZlZmZhNCwweDAwMDIzZDdjCisJLmxvbmcJMHgyMDE4MDAwNiwweDJjNmVmZmY4LDB4ZGZmYzAwMDAsMHgwMDYwNjBmZgorCS5sb25nCTB4ZmZmZmZjYjAsMHgxZDZlZmZhOSwweDAwMDU0Y2VlLDB4M2ZmZmZmYzAKKwkubG9uZwkweDNjYWUwMDA0LDB4MmQ2ZTAwMDYsMHgwMDA4MmQ2ZSwweGZmYTQwMDAyCisJLmxvbmcJMHgzZDdjMjAxNCwweDAwMDYyYzZlLDB4ZmZmOGRmZmMsMHgwMDAwMDA2MAorCS5sb25nCTB4NjBmZmZmZmYsMHhmYzk0MWQ2ZSwweGZmYTkwMDA1LDB4NGNlZTNmZmYKKwkubG9uZwkweGZmYzAyZDZlLDB4MDAwNjAwMGMsMHgzZDdjMjAxNCwweDAwMGEyZDZlCisJLmxvbmcJMHhmZmE0MDAwNiwweDJjNmVmZmY4LDB4ZGZmYzAwMDAsMHgwMDY0NjBmZgorCS5sb25nCTB4ZmZmZmZjNjYsMHgxZDZlZmZhOSwweDAwMDU0Y2VlLDB4M2ZmZmZmYzAKKwkubG9uZwkweDJkNmUwMDA2LDB4MDAwYzNkN2MsMHgyMDI0MDAwYSwweDJkNmVmZmE0CisJLmxvbmcJMHgwMDA2MmM2ZSwweGZmZjhkZmZjLDB4MDAwMDAwNjQsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmM0ZTFkNmUsMHhmZmE5MDAwNSwweDRjZWUzZmZmLDB4ZmZjMDNkN2MKKwkubG9uZwkweDAwZjQwMDBlLDB4MmQ2ZWZmYTQsMHgwMDBhM2Q2ZSwweDAwMDQwMDA4CisJLmxvbmcJMHgyYzZlZmZmOCwweGRmZmMwMDAwLDB4MDA2ODYwZmYsMHhmZmZmZmM0YworCS5sb25nCTB4MmM4ODJkNDAsMHhmZmZjNGZlZSwweGZmYzA0Y2RmLDB4N2ZmZjJmMmYKKwkubG9uZwkweDAwMGMyZjZmLDB4MDAwNDAwMTAsMHgyZjZmMDAwYywweDAwMDQyZjZmCisJLmxvbmcJMHgwMDA4MDAwYywweDJmNWYwMDA0LDB4M2Y3YzQwMDgsMHgwMDA2NjAyOAorCS5sb25nCTB4NGNlZTNmZmYsMHhmZmMwNGU1ZSwweDUxNGYyZWFmLDB4MDAwODNmNmYKKwkubG9uZwkweDAwMGMwMDA0LDB4M2Y3YzQwMDgsMHgwMDA2MmY2ZiwweDAwMDIwMDA4CisJLmxvbmcJMHgyZjdjMDk0MiwweDgwMDEwMDBjLDB4MDgxNzAwMDUsMHg2NzA2MDhlZgorCS5sb25nCTB4MDAwMjAwMGQsMHg2MGZmZmZmZiwweGZiY2MwYzJlLDB4MDA0MGZmYWEKKwkubG9uZwkweDY2MGM0MjgwLDB4MTAyZWZmYWIsMHgyZGFlZmZhYywweDBjZTA0ZTc1CisJLmxvbmcJMHgyMDQwMzAyZSwweGZmYTAzMjAwLDB4MDI0MDAwM2YsMHgwMjgxMDAwMAorCS5sb25nCTB4MDAwNzMwM2IsMHgwMjBhNGVmYiwweDAwMDY0YWZjLDB4MDA0MDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA4MAorCS5sb25nCTB4MDA4NjAwOGMsMHgwMDkyMDA5OCwweDAwOWUwMGE0LDB4MDBhYTAwYjAKKwkubG9uZwkweDAwY2UwMGVjLDB4MDEwYTAxMjgsMHgwMTQ2MDE2NCwweDAxODIwMTk2CisJLmxvbmcJMHgwMWI0MDFkMiwweDAxZjAwMjBlLDB4MDIyYzAyNGEsMHgwMjY4MDI3YworCS5sb25nCTB4MDI5YTAyYjgsMHgwMmQ2MDJmNCwweDAzMTIwMzMwLDB4MDM0ZTAzNmMKKwkubG9uZwkweDAzNmMwMzZjLDB4MDM2YzAzNmMsMHgwMzZjMDM2YywweDAzNmMwM2Q2CisJLmxvbmcJMHgwM2YwMDQwYSwweDA0MmEwM2NhLDB4MDAwMDAwMDAsMHgwMDAwMjA2ZQorCS5sb25nCTB4ZmZlMDRlNzUsMHgyMDZlZmZlNCwweDRlNzUyMDZlLDB4ZmZlODRlNzUKKwkubG9uZwkweDIwNmVmZmVjLDB4NGU3NTIwNmUsMHhmZmYwNGU3NSwweDIwNmVmZmY0CisJLmxvbmcJMHg0ZTc1MjA2ZSwweGZmZjg0ZTc1LDB4MjA2ZWZmZmMsMHg0ZTc1MjAwOAorCS5sb25nCTB4MjA2ZWZmZTAsMHhkMDg4MmQ0MCwweGZmZTAyZDQ4LDB4ZmZhYzFkN2MKKwkubG9uZwkweDAwMDBmZmFiLDB4MWQ3YzAwNDAsMHhmZmFhNGU3NSwweDIwMDgyMDZlCisJLmxvbmcJMHhmZmU0ZDA4OCwweDJkNDBmZmU0LDB4MmQ0OGZmYWMsMHgxZDdjMDAwMQorCS5sb25nCTB4ZmZhYjFkN2MsMHgwMDQwZmZhYSwweDRlNzUyMDA4LDB4MjA2ZWZmZTgKKwkubG9uZwkweGQwODgyZDQwLDB4ZmZlODJkNDgsMHhmZmFjMWQ3YywweDAwMDJmZmFiCisJLmxvbmcJMHgxZDdjMDA0MCwweGZmYWE0ZTc1LDB4MjAwODIwNmUsMHhmZmVjZDA4OAorCS5sb25nCTB4MmQ0MGZmZWMsMHgyZDQ4ZmZhYywweDFkN2MwMDAzLDB4ZmZhYjFkN2MKKwkubG9uZwkweDAwNDBmZmFhLDB4NGU3NTIwMDgsMHgyMDZlZmZmMCwweGQwODgyZDQwCisJLmxvbmcJMHhmZmYwMmQ0OCwweGZmYWMxZDdjLDB4MDAwNGZmYWIsMHgxZDdjMDA0MAorCS5sb25nCTB4ZmZhYTRlNzUsMHgyMDA4MjA2ZSwweGZmZjRkMDg4LDB4MmQ0MGZmZjQKKwkubG9uZwkweDJkNDhmZmFjLDB4MWQ3YzAwMDUsMHhmZmFiMWQ3YywweDAwNDBmZmFhCisJLmxvbmcJMHg0ZTc1MjAwOCwweDIwNmVmZmY4LDB4ZDA4ODJkNDAsMHhmZmY4MmQ0OAorCS5sb25nCTB4ZmZhYzFkN2MsMHgwMDA2ZmZhYiwweDFkN2MwMDQwLDB4ZmZhYTRlNzUKKwkubG9uZwkweDFkN2MwMDA0LDB4ZmZhYTIwMDgsMHgyMDZlZmZmYywweGQwODgyZDQwCisJLmxvbmcJMHhmZmZjNGU3NSwweDIwMmVmZmUwLDB4MmQ0MGZmYWMsMHg5MDg4MmQ0MAorCS5sb25nCTB4ZmZlMDIwNDAsMHgxZDdjMDAwMCwweGZmYWIxZDdjLDB4MDA0MGZmYWEKKwkubG9uZwkweDRlNzUyMDJlLDB4ZmZlNDJkNDAsMHhmZmFjOTA4OCwweDJkNDBmZmU0CisJLmxvbmcJMHgyMDQwMWQ3YywweDAwMDFmZmFiLDB4MWQ3YzAwNDAsMHhmZmFhNGU3NQorCS5sb25nCTB4MjAyZWZmZTgsMHgyZDQwZmZhYywweDkwODgyZDQwLDB4ZmZlODIwNDAKKwkubG9uZwkweDFkN2MwMDAyLDB4ZmZhYjFkN2MsMHgwMDQwZmZhYSwweDRlNzUyMDJlCisJLmxvbmcJMHhmZmVjMmQ0MCwweGZmYWM5MDg4LDB4MmQ0MGZmZWMsMHgyMDQwMWQ3YworCS5sb25nCTB4MDAwM2ZmYWIsMHgxZDdjMDA0MCwweGZmYWE0ZTc1LDB4MjAyZWZmZjAKKwkubG9uZwkweDJkNDBmZmFjLDB4OTA4ODJkNDAsMHhmZmYwMjA0MCwweDFkN2MwMDA0CisJLmxvbmcJMHhmZmFiMWQ3YywweDAwNDBmZmFhLDB4NGU3NTIwMmUsMHhmZmY0MmQ0MAorCS5sb25nCTB4ZmZhYzkwODgsMHgyZDQwZmZmNCwweDIwNDAxZDdjLDB4MDAwNWZmYWIKKwkubG9uZwkweDFkN2MwMDQwLDB4ZmZhYTRlNzUsMHgyMDJlZmZmOCwweDJkNDBmZmFjCisJLmxvbmcJMHg5MDg4MmQ0MCwweGZmZjgyMDQwLDB4MWQ3YzAwMDYsMHhmZmFiMWQ3YworCS5sb25nCTB4MDA0MGZmYWEsMHg0ZTc1MWQ3YywweDAwMDhmZmFhLDB4MjAyZWZmZmMKKwkubG9uZwkweDkwODgyZDQwLDB4ZmZmYzIwNDAsMHg0ZTc1MjA2ZSwweGZmYTQ1NGFlCisJLmxvbmcJMHhmZmE0NjFmZiwweGZmZmZmOWQ0LDB4NGE4MTY2ZmYsMHhmZmZmZmQwNAorCS5sb25nCTB4MzA0MGQxZWUsMHhmZmUwNGU3NSwweDIwNmVmZmE0LDB4NTRhZWZmYTQKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjliNjRhODEsMHg2NmZmZmZmZiwweGZjZTYzMDQwCisJLmxvbmcJMHhkMWVlZmZlNCwweDRlNzUyMDZlLDB4ZmZhNDU0YWUsMHhmZmE0NjFmZgorCS5sb25nCTB4ZmZmZmY5OTgsMHg0YTgxNjZmZiwweGZmZmZmY2M4LDB4MzA0MGQxZWUKKwkubG9uZwkweGZmZTg0ZTc1LDB4MjA2ZWZmYTQsMHg1NGFlZmZhNCwweDYxZmZmZmZmCisJLmxvbmcJMHhmOTdhNGE4MSwweDY2ZmZmZmZmLDB4ZmNhYTMwNDAsMHhkMWVlZmZlYworCS5sb25nCTB4NGU3NTIwNmUsMHhmZmE0NTRhZSwweGZmYTQ2MWZmLDB4ZmZmZmY5NWMKKwkubG9uZwkweDRhODE2NmZmLDB4ZmZmZmZjOGMsMHgzMDQwZDFlZSwweGZmZjA0ZTc1CisJLmxvbmcJMHgyMDZlZmZhNCwweDU0YWVmZmE0LDB4NjFmZmZmZmYsMHhmOTNlNGE4MQorCS5sb25nCTB4NjZmZmZmZmYsMHhmYzZlMzA0MCwweGQxZWVmZmY0LDB4NGU3NTIwNmUKKwkubG9uZwkweGZmYTQ1NGFlLDB4ZmZhNDYxZmYsMHhmZmZmZjkyMCwweDRhODE2NmZmCisJLmxvbmcJMHhmZmZmZmM1MCwweDMwNDBkMWVlLDB4ZmZmODRlNzUsMHgyMDZlZmZhNAorCS5sb25nCTB4NTRhZWZmYTQsMHg2MWZmZmZmZiwweGY5MDI0YTgxLDB4NjZmZmZmZmYKKwkubG9uZwkweGZjMzIzMDQwLDB4ZDFlZWZmZmMsMHg0ZTc1MmYwMSwweDIwNmVmZmE0CisJLmxvbmcJMHg1NGFlZmZhNCwweDYxZmZmZmZmLDB4ZjhlMjRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4ZmMxMjIyMWYsMHgyMDc2MTRlMCwweDA4MDAwMDA4LDB4NjcwZTQ4ZTcKKwkubG9uZwkweDNjMDAyYTAwLDB4MjYwODYwZmYsMHgwMDAwMDBlYywweDJmMDIyMjAwCisJLmxvbmcJMHhlOTU5MDI0MSwweDAwMGYyMjM2LDB4MTRjMDA4MDAsMHgwMDBiNjYwMgorCS5sb25nCTB4NDhjMTI0MDAsMHhlZjVhMDI4MiwweDAwMDAwMDAzLDB4ZTVhOTQ5YzAKKwkubG9uZwkweGQwODFkMWMwLDB4MjQxZjRlNzUsMHgxZDdjMDA4MCwweGZmYWEyMDZlCisJLmxvbmcJMHhmZmE0NGU3NSwweDIwNmVmZmE0LDB4NTRhZWZmYTQsMHg2MWZmZmZmZgorCS5sb25nCTB4Zjg3YTRhODEsMHg2NmZmZmZmZiwweGZiYWEzMDQwLDB4NGU3NTIwNmUKKwkubG9uZwkweGZmYTQ1OGFlLDB4ZmZhNDYxZmYsMHhmZmZmZjg3NiwweDRhODE2NmZmCisJLmxvbmcJMHhmZmZmZmI5MCwweDIwNDA0ZTc1LDB4MjA2ZWZmYTQsMHg1NGFlZmZhNAorCS5sb25nCTB4NjFmZmZmZmYsMHhmODQ2NGE4MSwweDY2ZmZmZmZmLDB4ZmI3NjMwNDAKKwkubG9uZwkweGQxZWVmZmE0LDB4NTU4ODRlNzUsMHgyMDZlZmZhNCwweDU0YWVmZmE0CisJLmxvbmcJMHg2MWZmZmZmZiwweGY4MjY0YTgxLDB4NjZmZmZmZmYsMHhmYjU2MjA2ZQorCS5sb25nCTB4ZmZhNDU1ODgsMHgwODAwMDAwOCwweDY3MGU0OGU3LDB4M2MwMDJhMDAKKwkubG9uZwkweDI2MDg2MGZmLDB4MDAwMDAwMzAsMHgyZjAyMjIwMCwweGU5NTkwMjQxCisJLmxvbmcJMHgwMDBmMjIzNiwweDE0YzAwODAwLDB4MDAwYjY2MDIsMHg0OGMxMjQwMAorCS5sb25nCTB4ZWY1YTAyODIsMHgwMDAwMDAwMywweGU1YTk0OWMwLDB4ZDA4MWQxYzAKKwkubG9uZwkweDI0MWY0ZTc1LDB4MDgwNTAwMDYsMHg2NzA0NDI4MiwweDYwMTZlOWM1CisJLmxvbmcJMHgyNDA0MjQzNiwweDI0YzAwODA1LDB4MDAwYjY2MDIsMHg0OGMyZTljNQorCS5sb25nCTB4MDU0MmUxYWEsMHgwODA1MDAwNywweDY3MDI0MjgzLDB4ZTljNTA2ODIKKwkubG9uZwkweDBjMDAwMDAyLDB4NmQzNDY3MTgsMHgyMDZlZmZhNCwweDU4YWVmZmE0CisJLmxvbmcJMHg2MWZmZmZmZiwweGY3YWM0YTgxLDB4NjZmZmZmZmYsMHhmYWM2NjAxOAorCS5sb25nCTB4MjA2ZWZmYTQsMHg1NGFlZmZhNCwweDYxZmZmZmZmLDB4Zjc3ZTRhODEKKwkubG9uZwkweDY2ZmZmZmZmLDB4ZmFhZTQ4YzAsMHhkNjgwZTljNSwweDA3ODI2NzAwCisJLmxvbmcJMHgwMDZhMGMwMCwweDAwMDI2ZDM0LDB4NjcxODIwNmUsMHhmZmE0NThhZQorCS5sb25nCTB4ZmZhNDYxZmYsMHhmZmZmZjc2YSwweDRhODE2NmZmLDB4ZmZmZmZhODQKKwkubG9uZwkweDYwMWMyMDZlLDB4ZmZhNDU0YWUsMHhmZmE0NjFmZiwweGZmZmZmNzNjCisJLmxvbmcJMHg0YTgxNjZmZiwweGZmZmZmYTZjLDB4NDhjMDYwMDIsMHg0MjgwMjgwMAorCS5sb25nCTB4MDgwNTAwMDIsMHg2NzEyMjA0MywweDYxZmZmZmZmLDB4Zjc3NjRhODEKKwkubG9uZwkweDY2MjRkMDgyLDB4ZDA4NDYwMTYsMHhkNjgyMjA0MywweDYxZmZmZmZmCisJLmxvbmcJMHhmNzYyNGE4MSwweDY2MTBkMDg0LDB4NjAwNGQ2ODIsMHgyMDAzMjA0MAorCS5sb25nCTB4NGNkZjAwM2MsMHg0ZTc1MjA0MywweDIwM2MwMTAxLDB4MDAwMTYwZmYKKwkubG9uZwkweGZmZmZmOWYwLDB4MzIyZWZmYTAsMHgxMDAxMDI0MCwweDAwMDcyMDc2CisJLmxvbmcJMHgwNGUwZDBlZSwweGZmYTIwODAxLDB4MDAwNzY3MDAsMHgwMDhjMzAwMQorCS5sb25nCTB4ZWY1ODAyNDAsMHgwMDA3MjAzNiwweDA0YzAwODAxLDB4MDAwNjY3NTIKKwkubG9uZwkweDI0MDAyNDQ4LDB4ZTE5YTIwMDIsMHg2MWZmZmZmZiwweGY3MWM0YTgxCisJLmxvbmcJMHg2NjAwMDBmYywweDU0NGEyMDRhLDB4ZTE5YTIwMDIsMHg2MWZmZmZmZgorCS5sb25nCTB4ZjcwODRhODEsMHg2NjAwMDBlOCwweDU0NGEyMDRhLDB4ZTE5YTIwMDIKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjZmNDRhODEsMHg2NjAwMDBkNCwweDU0NGEyMDRhCisJLmxvbmcJMHhlMTlhMjAwMiwweDYxZmZmZmZmLDB4ZjZlMDRhODEsMHg2NjAwMDBjMAorCS5sb25nCTB4NGU3NTI0MDAsMHgyNDQ4ZTA0OCwweDYxZmZmZmZmLDB4ZjZjYzRhODEKKwkubG9uZwkweDY2MDAwMGFjLDB4NTQ0YTIwNGEsMHgyMDAyNjFmZiwweGZmZmZmNmJhCisJLmxvbmcJMHg0YTgxNjYwMCwweDAwOWE0ZTc1LDB4MDgwMTAwMDYsMHg2NzVjMjQ0OAorCS5sb25nCTB4NjFmZmZmZmYsMHhmNjYyNGE4MSwweDY2MDAwMDkyLDB4MjQwMDU0NGEKKwkubG9uZwkweDIwNGE2MWZmLDB4ZmZmZmY2NTAsMHg0YTgxNjYwMCwweDAwODBlMTRhCisJLmxvbmcJMHgxNDAwNTQ0YSwweDIwNGE2MWZmLDB4ZmZmZmY2M2MsMHg0YTgxNjYwMAorCS5sb25nCTB4MDA2Y2UxOGEsMHgxNDAwNTQ0YSwweDIwNGE2MWZmLDB4ZmZmZmY2MjgKKwkubG9uZwkweDRhODE2NjAwLDB4MDA1OGUxOGEsMHgxNDAwMTIyZSwweGZmYTBlMjA5CisJLmxvbmcJMHgwMjQxMDAwNywweDJkODIxNGMwLDB4NGU3NTI0NDgsMHg2MWZmZmZmZgorCS5sb25nCTB4ZjYwNjRhODEsMHg2NjAwMDAzNiwweDI0MDA1NDRhLDB4MjA0YTYxZmYKKwkubG9uZwkweGZmZmZmNWY0LDB4NGE4MTY2MDAsMHgwMDI0ZTE0YSwweDE0MDAxMjJlCisJLmxvbmcJMHhmZmEwZTIwOSwweDAyNDEwMDA3LDB4M2Q4MjE0YzIsMHg0ZTc1MjA0YQorCS5sb25nCTB4MjAzYzAwYTEsMHgwMDAxNjBmZiwweGZmZmZmOGE4LDB4MjA0YTIwM2MKKwkubG9uZwkweDAxMjEwMDAxLDB4NjBmZmZmZmYsMHhmODlhNjFmZiwweGZmZmZmOTE0CisJLmxvbmcJMHgxMDJlZmZhMiwweGU5MTgwMjQwLDB4MDAwZjI0MzYsMHgwNGMwMGMyZQorCS5sb25nCTB4MDAwMmZmYTAsMHg2ZDUwNjcyOCwweDI0NDg2MWZmLDB4ZmZmZmY1YzQKKwkubG9uZwkweDRhODE2NjAwLDB4MDA5ZTI2MDAsMHg1ODhhMjA0YSwweDYxZmZmZmZmCisJLmxvbmcJMHhmNWIyNGE4MSwweDY2MDAwMDhjLDB4MjIwMDIwMDMsMHg2MDAwMDA0OAorCS5sb25nCTB4MjQ0ODYxZmYsMHhmZmZmZjU5YywweDRhODE2NjAwLDB4MDA3NjMyMDAKKwkubG9uZwkweDQ4NDA0OGMwLDB4NDhjMTA4MmUsMHgwMDA3ZmZhMiwweDY2MDAwMDI4CisJLmxvbmcJMHg0OGMyNjAwMCwweDAwMjIyNDQ4LDB4NjFmZmZmZmYsMHhmNTYwNGE4MQorCS5sb25nCTB4NjYwMDAwNWUsMHgxMjAwZTA0OCwweDQ5YzA0OWMxLDB4MDgyZTAwMDcKKwkubG9uZwkweGZmYTI2NjAyLDB4NDljMjk0ODAsMHg0MmMzMDIwMywweDAwMDQ5MjgwCisJLmxvbmcJMHhiMjgyNDJjNCwweDg2MDQwMjAzLDB4MDAwNTM4MmUsMHhmZmE4MDIwNAorCS5sb25nCTB4MDAxYTg4MDMsMHgzZDQ0ZmZhOCwweDA4MmUwMDAzLDB4ZmZhMjY2MDIKKwkubG9uZwkweDRlNzUwODA0LDB4MDAwMDY2MDIsMHg0ZTc1MWQ3YywweDAwMTBmZmFhCisJLmxvbmcJMHg0ZTc1MjA0YSwweDIwM2MwMTAxLDB4MDAwMTYwZmYsMHhmZmZmZjdjNAorCS5sb25nCTB4MjA0YTIwM2MsMHgwMTQxMDAwMSwweDYwZmZmZmZmLDB4ZjdiNjEwMmUKKwkubG9uZwkweGZmYTEwMjAwLDB4MDAzODY2MDAsMHgwMjA4MTAyZSwweGZmYTEwMjQwCisJLmxvbmcJMHgwMDA3MmUzNiwweDA0YzA2NzAwLDB4MDBjMDEwMmUsMHhmZmEzMTIyZQorCS5sb25nCTB4ZmZhMjAyNDAsMHgwMDA3ZTgwOSwweDAyNDEwMDA3LDB4M2Q0MGZmYjIKKwkubG9uZwkweDNkNDFmZmI0LDB4MmEzNjA0YzAsMHgyYzM2MTRjMCwweDA4MmUwMDAzCisJLmxvbmcJMHhmZmEyNjcxYSwweDRhODc1ZGVlLDB4ZmZiMDZhMDIsMHg0NDg3NGE4NQorCS5sb25nCTB4NWRlZWZmYjEsMHg2YTA4NDRmYywweDAwMDA0MDg2LDB4NDA4NTRhODUKKwkubG9uZwkweDY2MTY0YTg2LDB4NjcwMDAwNDgsMHhiZTg2NjMwNiwweGNiNDY2MDAwCisJLmxvbmcJMHgwMDEyNGM0NywweDYwMDU2MDBhLDB4YmU4NTYzNGUsMHg2MWZmMDAwMAorCS5sb25nCTB4MDA2ODA4MmUsMHgwMDAzZmZhMiwweDY3MjQ0YTJlLDB4ZmZiMTY3MDIKKwkubG9uZwkweDQ0ODUxMDJlLDB4ZmZiMGIxMmUsMHhmZmIxNjcwYywweDBjODY4MDAwCisJLmxvbmcJMHgwMDAwNjIyNiwweDQ0ODY2MDA2LDB4MDgwNjAwMWYsMHg2NjFjNDRlZQorCS5sb25nCTB4ZmZhODRhODYsMHg0MmVlZmZhOCwweDMwMmVmZmIyLDB4MzIyZWZmYjQKKwkubG9uZwkweDJkODUwNGMwLDB4MmQ4NjE0YzAsMHg0ZTc1MDhlZSwweDAwMDFmZmE5CisJLmxvbmcJMHgwOGFlMDAwMCwweGZmYTk0ZTc1LDB4MDIyZTAwMWUsMHhmZmE5MDAyZQorCS5sb25nCTB4MDAyMGZmYWEsMHg0ZTc1MGM4NywweDAwMDBmZmZmLDB4NjIxZTQyODEKKwkubG9uZwkweDQ4NDU0ODQ2LDB4M2EwNjhhYzcsMHgzMjA1NDg0NiwweDNhMDY4YWM3CisJLmxvbmcJMHg0ODQxMzIwNSwweDQyNDU0ODQ1LDB4MmMwMTRlNzUsMHg0MmFlZmZiYworCS5sb25nCTB4NDIyZWZmYjYsMHg0MjgxMDgwNywweDAwMWY2NjBlLDB4NTJhZWZmYmMKKwkubG9uZwkweGUzOGZlMzhlLDB4ZTM5NTYwMDAsMHhmZmVlMjYwNywweDI0MDU0ODQyCisJLmxvbmcJMHg0ODQzYjQ0MywweDY2MDYzMjNjLDB4ZmZmZjYwMGEsMHgyMjA1ODJjMworCS5sb25nCTB4MDI4MTAwMDAsMHhmZmZmMmYwNiwweDQyNDY0ODQ2LDB4MjYwNzI0MDEKKwkubG9uZwkweGM0Yzc0ODQzLDB4YzZjMTI4MDUsMHg5ODgzNDg0NCwweDMwMDQzODA2CisJLmxvbmcJMHg0YTQwNjYwMCwweDAwMGFiNDg0LDB4NjMwNDUzODEsMHg2MGRlMmYwNQorCS5sb25nCTB4MmMwMTQ4NDYsMHgyYTA3NjFmZiwweDAwMDAwMDZhLDB4MjQwNTI2MDYKKwkubG9uZwkweDJhMWYyYzFmLDB4OWM4MzliODIsMHg2NGZmMDAwMCwweDAwMWE1MzgxCisJLmxvbmcJMHg0MjgyMjYwNywweDQ4NDM0MjQzLDB4ZGM4M2RiODIsMHgyNjA3NDI0MworCS5sb25nCTB4NDg0M2RhODMsMHg0YTJlZmZiNiwweDY2MTYzZDQxLDB4ZmZiODQyODEKKwkubG9uZwkweDQ4NDU0ODQ2LDB4M2EwNjQyNDYsMHg1MGVlZmZiNiwweDYwMDBmZjZjCisJLmxvbmcJMHgzZDQxZmZiYSwweDNjMDU0ODQ2LDB4NDg0NTJlMmUsMHhmZmJjNjcwYQorCS5sb25nCTB4NTM4N2UyOGQsMHhlMjk2NTFjZiwweGZmZmEyYTA2LDB4MmMyZWZmYjgKKwkubG9uZwkweDRlNzUyNDA2LDB4MjYwNjI4MDUsMHg0ODQzNDg0NCwweGNjYzVjYWMzCisJLmxvbmcJMHhjNGM0YzZjNCwweDQyODQ0ODQ2LDB4ZGM0NWQ3NDQsMHhkYzQyZDc0NAorCS5sb25nCTB4NDg0NjQyNDUsMHg0MjQyNDg0NSwweDQ4NDJkYTgyLDB4ZGE4MzRlNzUKKwkubG9uZwkweDcwMDQ2MWZmLDB4ZmZmZmY2MWMsMHgwYzJlMDA4MCwweGZmYWE2NzEyCisJLmxvbmcJMHgyNDQ4NjFmZiwweGZmZmZmMmRjLDB4NGE4MTY2MWUsMHgyZTAwNjAwMAorCS5sb25nCTB4ZmRlNjU4YWUsMHhmZmE0NjFmZiwweGZmZmZmMjg2LDB4NGE4MTY2ZmYKKwkubG9uZwkweGZmZmZmNWEwLDB4MmUwMDYwMDAsMHhmZGNlNjFmZiwweGZmZmZmNWNlCisJLmxvbmcJMHgyMDRhMjAzYywweDAxMDEwMDAxLDB4NjBmZmZmZmYsMHhmNTU2MTAyZQorCS5sb25nCTB4ZmZhMTBjMDAsMHgwMDA3NmUwMCwweDAwYjQwMjQwLDB4MDAwNzI2MzYKKwkubG9uZwkweDA0YzAzNDJlLDB4ZmZhMjQyNDEsMHgxMjAyZTk1YSwweDAyNDIwMDA3CisJLmxvbmcJMHgyODM2MjRjMCwweDRhODQ2NzAwLDB4MDA4ODRhODMsMHg2NzAwMDA4MgorCS5sb25nCTB4NDIyZWZmYjAsMHgwODJlMDAwMywweGZmYTI2NzE4LDB4NGE4MzZjMDgKKwkubG9uZwkweDQ0ODMwMDJlLDB4MDAwMWZmYjAsMHg0YTg0NmMwOCwweDQ0ODQwYTJlCisJLmxvbmcJMHgwMDAxZmZiMCwweDJhMDMyYzAzLDB4MmUwNDQ4NDYsMHg0ODQ3YzZjNAorCS5sb25nCTB4YzhjNmNhYzcsMHhjY2M3NDI4NywweDQ4NDNkNjQ0LDB4ZGQ4N2Q2NDUKKwkubG9uZwkweGRkODc0ODQzLDB4NDI0NDQyNDUsMHg0ODQ0NDg0NSwweGQ4ODVkODg2CisJLmxvbmcJMHg0YTJlZmZiMCwweDY3MDg0NjgzLDB4NDY4NDUyODMsMHhkOTg3MmQ4MworCS5sb25nCTB4MjRjMDQ0ZmMsMHgwMDAwMmQ4NCwweDE0YzA0MmM3LDB4MDIwNzAwMDgKKwkubG9uZwkweDFjMmVmZmE5LDB4MDIwNjAwMTAsMHg4YzA3MWQ0NiwweGZmYTk0ZTc1CisJLmxvbmcJMHg0MmI2MjRjMCwweDQyYjYxNGMwLDB4N2UwNDYwZTQsMHg3MDA0NjFmZgorCS5sb25nCTB4ZmZmZmY1MTAsMHgwYzJlMDA4MCwweGZmYWE2NzE0LDB4MjQ0ODYxZmYKKwkubG9uZwkweGZmZmZmMWQwLDB4NGE4MTY2MDAsMHgwMDIwMjYwMCwweDYwMDBmZjM0CisJLmxvbmcJMHg1OGFlZmZhNCwweDYxZmZmZmZmLDB4ZjE3ODRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4ZjQ5MjI2MDAsMHg2MDAwZmYxYywweDYxZmZmZmZmLDB4ZjRjMDIwNGEKKwkubG9uZwkweDIwM2MwMTAxLDB4MDAwMTYwZmYsMHhmZmZmZjQ0OCwweDJkNDBmZmI0CisJLmxvbmcJMHgyMjAwZTk1OCwweDAyNDAwMDBmLDB4MjI3NjA0YzAsMHgyZDQ5ZmZiMAorCS5sb25nCTB4MjAwMWVjNDksMHgwMjQxMDAwNywweDJhMzYxNGMwLDB4MDI0MDAwMDcKKwkubG9uZwkweDI2MzYwNGMwLDB4M2Q0MGZmYmEsMHgzMDJlZmZhMiwweDIyMDBlOTU4CisJLmxvbmcJMHgwMjQwMDAwZiwweDIwNzYwNGMwLDB4MmQ0OGZmYmMsMHgyMDAxZWM0OQorCS5sb25nCTB4MDI0MTAwMDcsMHgyODM2MTRjMCwweDAyNDAwMDA3LDB4MjQzNjA0YzAKKwkubG9uZwkweDNkNDBmZmI4LDB4MDgyZTAwMDEsMHhmZmEwNTZjNywweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NTZjNiwweDI0NDgyNjQ5LDB4MjIwNzIwMDYsMHg2MWZmZmZmZgorCS5sb25nCTB4ZjA1YzIwNGEsMHg0YTgwNjZmZiwweDAwMDAwMWM4LDB4MjIwNzIwMDYKKwkubG9uZwkweDIwNGI2MWZmLDB4ZmZmZmYwNDYsMHgyMDRiNGE4MCwweDY2MGEyMDRhCisJLmxvbmcJMHgyMjRiNjBmZiwweGZmZmZmMDIwLDB4MmYwMDIyMDcsMHgyMDA2MjA0YQorCS5sb25nCTB4NjFmZmZmZmYsMHhmMDNlMjAxZiwweDIwNGI2MGZmLDB4MDAwMDAxOTQKKwkubG9uZwkweDA4MmUwMDAxLDB4ZmZhMDY2NDgsMHg0NGVlZmZhOCwweGIwNDI2NjAyCisJLmxvbmcJMHhiMjQzNDJlZSwweGZmYTg0YTA0LDB4NjYxMDM2MmUsMHhmZmJhM2Q4MQorCS5sb25nCTB4MzRjMjM0MmUsMHhmZmI4M2Q4MCwweDI0YzIwODJlLDB4MDAwNTAwMDQKKwkubG9uZwkweDU2YzIyMDAyLDB4NTFjMTIwNmUsMHhmZmJjNjFmZiwweGZmZmZlZmY0CisJLmxvbmcJMHgyMDAyNTFjMSwweDIwNmVmZmIwLDB4NjFmZmZmZmYsMHhlZmU2NGU3NQorCS5sb25nCTB4NDRlZWZmYTgsMHhiMDgyNjYwMiwweGIyODM0MmVlLDB4ZmZhODRhMDQKKwkubG9uZwkweDY2MTAzNjJlLDB4ZmZiYTJkODEsMHgzNGMwMzQyZSwweGZmYjgyZDgwCisJLmxvbmcJMHgyNGMwMDgyZSwweDAwMDUwMDA0LDB4NTZjMjIwMDIsMHg1MGMxMjA2ZQorCS5sb25nCTB4ZmZiYzYxZmYsMHhmZmZmZWZhYywweDIwMDI1MGMxLDB4MjA2ZWZmYjAKKwkubG9uZwkweDYxZmZmZmZmLDB4ZWY5ZTRlNzUsMHgyMDJlZmZiNCwweDYwMDBmZWFlCisJLmxvbmcJMHgwODJlMDAwMSwweGZmYTA2NjEwLDB4NzAwMjYxZmYsMHhmZmZmZjM2NAorCS5sb25nCTB4MmQ0OGZmYjQsMHg1MWM3NjAwZSwweDcwMDQ2MWZmLDB4ZmZmZmYzNTQKKwkubG9uZwkweDJkNDhmZmI0LDB4NTBjNzMwMmUsMHhmZmEyMjIwMCwweGVjNDgwMjQwCisJLmxvbmcJMHgwMDA3MjQzNiwweDA0YzAwMjQxLDB4MDAwNzI4MzYsMHgxNGMwM2Q0MQorCS5sb25nCTB4ZmZiODA4MmUsMHgwMDA1MDAwNCwweDU2YzYyNDQ4LDB4MjIwNzIwMDYKKwkubG9uZwkweDYxZmZmZmZmLDB4ZWYyODRhODAsMHg2NjAwMDA5NiwweDIwNGE2MGZmCisJLmxvbmcJMHhmZmZmZWVlZSwweDA4MmUwMDAxLDB4ZmZhMDY2MmMsMHg0NGVlZmZhOAorCS5sb25nCTB4YjA0NDQyZWUsMHhmZmE4NGEwMSwweDY2MDgzNjJlLDB4ZmZiODNkODAKKwkubG9uZwkweDM0YzIyMDZlLDB4ZmZiNDUxYzEsMHgwODJlMDAwNSwweDAwMDQ1NmMwCisJLmxvbmcJMHg2MWZmZmZmZiwweGVlZmU0ZTc1LDB4NDRlZWZmYTgsMHhiMDg0NDJlZQorCS5sb25nCTB4ZmZhODRhMDEsMHg2NjA4MzYyZSwweGZmYjgyZDgwLDB4MzRjMDIwNmUKKwkubG9uZwkweGZmYjQ1MGMxLDB4MDgyZTAwMDUsMHgwMDA0NTZjMCwweDYxZmZmZmZmCisJLmxvbmcJMHhlZWQyNGU3NSwweDRlN2I2MDAwLDB4NGU3YjYwMDEsMHgwYzJlMDBmYworCS5sb25nCTB4ZmZhMTY3ZmYsMHhmZmZmZmYyNCwweDIwNmVmZmI0LDB4MDgyZTAwMDEKKwkubG9uZwkweGZmYTA1NmM3LDB4NjAwMGZmNDAsMHg0ZTdiNjAwMCwweDRlN2I2MDAxCisJLmxvbmcJMHgyNDQ4MmYwMCwweDYxZmZmZmZmLDB4ZjI2NDIwMWYsMHg1ODhmNTE4ZgorCS5sb25nCTB4NTE4ZTcyMWEsMHg0MWVmMDAwOCwweDQzZWYwMDAwLDB4MjJkODUxYzkKKwkubG9uZwkweGZmZmMzZDdjLDB4NDAwODAwMGEsMHgyZDRhMDAwYywweDJkNDAwMDEwCisJLmxvbmcJMHg0Y2VlM2ZmZiwweGZmYzA0ZTVlLDB4NjBmZmZmZmYsMHhlZGY4NDI4MAorCS5sb25nCTB4NDNmYjAxNzAsMHgwMDAwMDVhZSwweGIzYzg2ZDBlLDB4NDNmYjAxNzAKKwkubG9uZwkweDAwMDAwMDEwLDB4YjFjOTZkMDIsMHg0ZTc1NzBmZiwweDRlNzU0YTA2CisJLmxvbmcJMHg2NjA0NzAwMSwweDYwMDI3MDA1LDB4NGEwNzY3MDAsMHgwMWU0MjQ0OAorCS5sb25nCTB4MjY0OTI4NDgsMHgyYTQ5NTY4YywweDU2OGQyMjBhLDB4NDBjNzAwN2MKKwkubG9uZwkweDA3MDA0ZTdhLDB4NjAwMDRlN2IsMHgwMDAwNGU3YiwweDAwMDFmNThhCisJLmxvbmcJMHhmNThjZjU4YiwweGY1OGRmNDZhLDB4ZjQ2Y2Y0NmIsMHhmNDZkMjQ0MQorCS5sb25nCTB4NTY4MTI4NDEsMHhmNWNhZjVjYywweDI0N2M4MDAwLDB4MDAwMDI2N2MKKwkubG9uZwkweGEwMDAwMDAwLDB4Mjg3YzAwMDAsMHgwMDAwMjAwOCwweDAyMDAwMDAzCisJLmxvbmcJMHg2NzFjMGMwMCwweDAwMDI2NzAwLDB4MDA5NjYwMDAsMHgwMTAyNTFmYworCS5sb25nCTB4NGU3YmEwMDgsMHgwZTkxMTAwMCwweDBlOTAwMDAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGIwODI2NjFjLDB4YjI4MzY2MTgsMHgwZTkxNTgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHg0ZTdiYjAwOCwweDBlOTA0ODAwLDB4NGU3YmMwMDgsMHg2MDM0NjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHgwZTkwMDgwMCwweDRlN2JjMDA4LDB4NjAxMjYwMGUKKwkubG9uZwkweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE2MGIwCisJLmxvbmcJMHg0ZTdiNjAwMCwweDRlN2I2MDAxLDB4NDZjNzUxYzQsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmQ0MjRlN2IsMHg2MDAwNGU3YiwweDYwMDE0NmM3LDB4NTBjNDYwZmYKKwkubG9uZwkweGZmZmZmZDMwLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg0ZTdiYTAwOCwweDBlOTExMDAwLDB4MGU5MDAwMDAsMHg2MDAyNjAwZQorCS5sb25nCTB4YjA4MjY2MmMsMHhiMjgzNjYyOCwweDBlOTE1ODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweDQ4NDQwZTU4LDB4NDgwMDRlN2IsMHhiMDA4NDg0NCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTUwNDgwMCwweDRlN2JjMDA4LDB4NjAwMGZmYTgsMHg0ZTcxNjAwZQorCS5sb25nCTB4NDg0MDBlNTgsMHgwODAwNGU3YiwweGIwMDg0ODQwLDB4NjAwMjYwMGUKKwkubG9uZwkweDBlNTAwODAwLDB4NGU3YmMwMDgsMHg2MDAwZmY3NiwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjA5MAorCS5sb25nCTB4NGU3YmEwMDgsMHgwZTkxMTAwMCwweDBlOTAwMDAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGIwODI2NjNjLDB4YjI4MzY2MzgsMHgwZTkxNTgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhlMTljMGUxOCwweDQ4MDA0ODQ0LDB4MGU1ODQ4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4ZTE5YzRlN2IsMHhiMDA4MGUxMCwweDQ4MDA2MDA0LDB4NGU3MTYwMGUKKwkubG9uZwkweDRlN2JjMDA4LDB4NjAwMGZmMmMsMHg0ZTcxNGU3MSwweDRlNzE2MDBlCisJLmxvbmcJMHhlMTk4MGUxOCwweDA4MDA0ODQwLDB4MGU1ODA4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4ZTE5ODRlN2IsMHhiMDA4MGUxMCwweDA4MDA2MDA0LDB4NGU3MTYwMGUKKwkubG9uZwkweDRlN2JjMDA4LDB4NjAwMGZlZWEsMHg0ZTcxNGU3MSwweDRlNzE2MDBjCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg2MDAwZmY3MgorCS5sb25nCTB4MjQ0ODI2NDksMHgyODQ4MmE0OSwweDUyOGM1MjhkLDB4MjIwYTQwYzcKKwkubG9uZwkweDAwN2MwNzAwLDB4NGU3YTYwMDAsMHg0ZTdiMDAwMCwweDRlN2IwMDAxCisJLmxvbmcJMHhmNThhZjU4YywweGY1OGJmNThkLDB4ZjQ2YWY0NmMsMHhmNDZiZjQ2ZAorCS5sb25nCTB4MjQ0MTU2ODEsMHgyODQxZjVjYSwweGY1Y2MyNDdjLDB4ODAwMDAwMDAKKwkubG9uZwkweDI2N2NhMDAwLDB4MDAwMDI4N2MsMHgwMDAwMDAwMCwweDIwMDgwODAwCisJLmxvbmcJMHgwMDAwNjYwMCwweDAwOWE2MDE2LDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YmEwMDgsMHgwZTUxMTAwMCwweDBlNTAwMDAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGIwNDI2NjFjLDB4YjI0MzY2MTgsMHgwZTUxNTgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHg0ZTdiYjAwOCwweDBlNTA0ODAwLDB4NGU3YmMwMDgsMHg2MDM0NjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHgwZTUwMDgwMCwweDRlN2JjMDA4LDB4NjAxMjYwMGUKKwkubG9uZwkweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE2MGIwCisJLmxvbmcJMHg0ZTdiNjAwMCwweDRlN2I2MDAxLDB4NDZjNzUxYzQsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmI2MjRlN2IsMHg2MDAwNGU3YiwweDYwMDE0NmM3LDB4NTBjNDYwZmYKKwkubG9uZwkweGZmZmZmYjUwLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg0ZTdiYTAwOCwweDBlNTExMDAwLDB4MGU1MDAwMDAsMHg2MDAyNjAwZQorCS5sb25nCTB4YjA0MjY2MmMsMHhiMjQzNjYyOCwweDBlNTE1ODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGUwOWMwZTE4LDB4NDgwMDRlN2IsMHhiMDA4ZTE5YywweDYwMDI2MDBlCisJLmxvbmcJMHgwZTEwNDgwMCwweDRlN2JjMDA4LDB4NjAwMGZmYTgsMHg0ZTcxNjAwZQorCS5sb25nCTB4ZTA5ODBlMTgsMHgwODAwNGU3YiwweGIwMDhlMTk4LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlMTAwODAwLDB4NGU3YmMwMDgsMHg2MDAwZmY3NiwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjA5MAorCS5sb25nCTB4NGEwNjY2MDQsMHg3MDAxNjAwMiwweDcwMDU0YTA3LDB4NjYwMDAwYzYKKwkubG9uZwkweDIyNDgyNDQ4LDB4NTI4YTI2MDIsMHhlMDRhNDBjNywweDAwN2MwNzAwCisJLmxvbmcJMHg0ZTdhNjAwMCwweDRlN2IwMDAwLDB4NGU3YjAwMDEsMHhmNTg5ZjU4YQorCS5sb25nCTB4ZjQ2OWY0NmEsMHgyMjdjODAwMCwweDAwMDAyNDdjLDB4YTAwMDAwMDAKKwkubG9uZwkweDI2N2MwMDAwLDB4MDAwMDYwMTYsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg0ZTdiOTAwOCwweDBlNTAwMDAwLDB4YjA0NDY2MjQsMHg2MDAyNjAwZQorCS5sb25nCTB4MGUxODI4MDAsMHg0ZTdiYTAwOCwweDBlMTAzODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweDRlN2JiMDA4LDB4NjA0YzRlNzEsMHg0ZTcxNGU3MSwweDRlNzE2MDBlCisJLmxvbmcJMHhlMDk4MGUxOCwweDA4MDA0ZTdiLDB4YTAwOGUxOTgsMHg2MDAyNjAwZQorCS5sb25nCTB4MGUxMDA4MDAsMHg0ZTdiYjAwOCwweDYwMTY0ZTcxLDB4NGU3MTYwMGUKKwkubG9uZwkweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE2MGEwCisJLmxvbmcJMHg0ZTdiNjAwMCwweDRlN2I2MDAxLDB4NDZjNzUxYzEsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmIxNjRlN2IsMHg2MDAwNGU3YiwweDYwMDE0NmM3LDB4NTBjMTYwZmYKKwkubG9uZwkweGZmZmZmYjA0LDB4MjI0ODI0NDgsMHg1NjhhMjIwOCwweDA4MDEwMDAwCisJLmxvbmcJMHg2NjAwMDBjMiwweDI2MDI0ODQyLDB4NDBjNzAwN2MsMHgwNzAwNGU3YQorCS5sb25nCTB4NjAwMDRlN2IsMHgwMDAwNGU3YiwweDAwMDFmNTg5LDB4ZjU4YWY0NjkKKwkubG9uZwkweGY0NmEyMjdjLDB4ODAwMDAwMDAsMHgyNDdjYTAwMCwweDAwMDAyNjdjCisJLmxvbmcJMHgwMDAwMDAwMCwweDYwMTg1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YjkwMDgsMHgwZTkwMDAwMCwweGIwODQ2NjI0LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlNTgyODAwLDB4NGU3YmEwMDgsMHgwZTUwMzgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHg0ZTdiYjAwOCwweDYwNGM0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjAwZQorCS5sb25nCTB4NDg0MDBlNTgsMHgwODAwNDg0MCwweDRlN2JhMDA4LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlNTAwODAwLDB4NGU3YmIwMDgsMHg2MDE2NGU3MSwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjBhMAorCS5sb25nCTB4NGU3YjYwMDAsMHg0ZTdiNjAwMSwweDQ2Yzc1MWMxLDB4NjBmZmZmZmYKKwkubG9uZwkweGZhNDY0ZTdiLDB4NjAwMDRlN2IsMHg2MDAxNDZjNywweDUwYzE2MGZmCisJLmxvbmcJMHhmZmZmZmEzNCwweDJhMDJlMDhhLDB4MjYwMjQ4NDIsMHg0MGM3MDA3YworCS5sb25nCTB4MDcwMDRlN2EsMHg2MDAwNGU3YiwweDAwMDA0ZTdiLDB4MDAwMWY1ODkKKwkubG9uZwkweGY1OGFmNDY5LDB4ZjQ2YTIyN2MsMHg4MDAwMDAwMCwweDI0N2NhMDAwCisJLmxvbmcJMHgwMDAwMjY3YywweDAwMDAwMDAwLDB4NjAxNDUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YjkwMDgsMHgwZTkwMDAwMCwweGIwODQ2NjI0LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlMTgyODAwLDB4MGU1ODM4MDAsMHg0ZTdiYTAwOCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTEwNTgwMCwweDRlN2JiMDA4LDB4NjAwMGZmODgsMHg0ZTcxNjAwZQorCS5sb25nCTB4ZTE5ODBlMTgsMHgwODAwNDg0MCwweDBlNTgwODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGUxOTg0ZTdiLDB4YTAwODBlMTAsMHgwODAwNjAwNCwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTdiYjAwOCwweDYwMDBmZjRhLDB4NGU3MTRlNzEsMHg0ZTcxNjAwZQorCS5sb25nCTB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTYwOTAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9pdGVzdC5zYSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pdGVzdC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE1ZWFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2l0ZXN0LnNhCkBAIC0wLDAgKzEsMTI4MSBAQAorCWRjLmwJJDYwZmYwMDAwLCQwMDVjNTQ2NSwkNzM3NDY5NmUsJDY3MjAzNjM4CisJZGMubAkkMzAzNjMwMjAsJDQ5NTM1MDIwLCQ3Mzc0NjE3MiwkNzQ2NTY0M2EKKwlkYy5sCSQwYTAwNzA2MSwkNzM3MzY1NjQsJDBhMDAyMDY2LCQ2MTY5NmM2NQorCWRjLmwJJDY0MGEwMDAwLCQ0YTgwNjYwZSwkNDg3YWZmZTgsJDYxZmYwMDAwCisJZGMubAkkNGY5YTU4OGYsJDRlNzUyZjAxLCQ2MWZmMDAwMCwkNGZhNDU4OGYKKwlkYy5sCSQ0ODdhZmZkOCwkNjFmZjAwMDAsJDRmODI1ODhmLCQ0ZTc1NGU1NgorCWRjLmwJJGZmNjA0OGU3LCQzZjNjNDg3YSwkZmY5ZTYxZmYsJDAwMDA0ZjZjCisJZGMubAkkNTg4ZjQyYWUsJGZmNzg0ODdiLCQwMTcwMDAwMCwkMDBlYTYxZmYKKwlkYy5sCSQwMDAwNGY1OCwkNTg4ZjYxZmYsJDAwMDAwMGYwLCQ2MWZmZmZmZgorCWRjLmwJJGZmYTY0MmFlLCRmZjc4NDg3YiwkMDE3MDAwMDAsJDBhZjY2MWZmCisJZGMubAkkMDAwMDRmMzgsJDU4OGY2MWZmLCQwMDAwMGFmOCwkNjFmZmZmZmYKKwlkYy5sCSRmZjg2NDJhZSwkZmY3ODQ4N2IsJDAxNzAwMDAwLCQxNzljNjFmZgorCWRjLmwJJDAwMDA0ZjE4LCQ1ODhmNjFmZiwkMDAwMDE3OWMsJDYxZmZmZmZmCisJZGMubAkkZmY2NjQyYWUsJGZmNzg0ODdiLCQwMTcwMDAwMCwkMDM4NjYxZmYKKwlkYy5sCSQwMDAwNGVmOCwkNTg4ZjYxZmYsJDAwMDAwMzgwLCQ2MWZmZmZmZgorCWRjLmwJJGZmNDY0MmFlLCRmZjc4NDg3YiwkMDE3MDAwMDAsJDIwMmM2MWZmCisJZGMubAkkMDAwMDRlZDgsJDU4OGYyZDdjLCQwMDAwMDAwMiwkZmY3NDYxZmYKKwlkYy5sCSQwMDAwMjAyYywkNjFmZmZmZmYsJGZmMWU0MmFlLCRmZjc4NDg3YgorCWRjLmwJJDAxNzAwMDAwLCQwZDdjNjFmZiwkMDAwMDRlYjAsJDU4OGY2MWZmCisJZGMubAkkMDAwMDBkNzQsJDYxZmZmZmZmLCRmZWZlNDJhZSwkZmY3ODQ4N2IKKwlkYy5sCSQwMTcwMDAwMCwkMGY4ZTYxZmYsJDAwMDA0ZTkwLCQ1ODhmNjFmZgorCWRjLmwJJDAwMDAwZjg4LCQ2MWZmZmZmZiwkZmVkZTRjZGYsJDNjZmM0ZTVlCisJZGMubAkkNGU3NTA5MzYsJDM0MmQ2MjY5LCQ3NDIwNmQ3NSwkNmM3NDY5NzAKKwlkYy5sCSQ2Yzc5MmUyZSwkMmUwMDUxZmMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQ0ZTE4NDI4MSwkMjQzYzk5OTksJDk5OTkyNjNjCisJZGMubAkkODg4ODg4ODgsJDNkN2MwMDA0LCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkNGMwMTM0MDIsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA0MmFlLCRmZjg4NDJhZSwkZmY4YzYxZmYsJDAwMDA0ZGE2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDA0ZGNjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkNGRjODIyM2MsJDc3Nzc3Nzc3LCQyNDNjOTk5OQorCWRjLmwJJDk5OTk3NjAwLCQzZDdjMDAwNCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjMDEzNDAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNDJhZSwkZmY4ODQyYWUsJGZmOGM2MWZmLCQwMDAwNGQ1NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwNGQ3YywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDRkNzg3MjEwLCQyNDNjNjY2NiwkNjY2NjNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMwMQorCWRjLmwJJDI0MDI0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNmZmODgsJDYxZmYwMDAwLCQ0ZDBjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQ0ZDMyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwNGQyZQorCWRjLmwJJDIyM2M1NTU1LCQ1NTU1NzQwMCwkNzYwMzNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMwMSwkMzQwMjQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkN2ZmZmZmYzAsJDJkN2MwMDAwLCQwMDAwZmY4OAorCWRjLmwJJDJkN2NmZmZmLCRmZmZmZmY4YywkNjFmZjAwMDAsJDRjYjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDRjZGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwNGNkYSwkMjIzYzQwMDAsJDAwMDA3NDAwLCQ3NjA0M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODA0YzAxCisJZGMubAkkMzQwMjQyZWUsJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAxZmY4OCwkMmQ3YzAwMDAsJDAwMDBmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDRjNjQ0YTAwLCQ2NmZmMDAwMCwkNGM4YTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDA0Yzg2LCQ3MmZmNzQwMCwkNzZmZjNkN2MKKwlkYy5sCSQwMDA4ZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMwMQorCWRjLmwJJDM0MDI0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDJkN2NmZmZmCisJZGMubAkkZmZmZWZmODgsJDJkN2MwMDAwLCQwMDAxZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQ0YzE0NGEwMCwkNjZmZjAwMDAsJDRjM2E1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwNGMzNiwkMjIzYzgwMDAsJDAwMDA3NDAwCisJZGMubAkkNzZmZjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwNGMwMSwkM2MwMjQyZWUsJGZmN2U0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDAwZmY4OCwkMmQ3YzgwMDAsJDAwMDBmZjhjCisJZGMubAkkNjFmZjAwMDAsJDRiYzA0YTAwLCQ2NmZmMDAwMCwkNGJlNjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDA0YmUyLCQyMjNjODAwMAorCWRjLmwJJDAwMDA3NDAwLCQ3NjAxM2Q3YywkMDAwOGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODA0YzAxLCQzYzAyNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSQ3ZmZmZmZjMCwkMmQ3Y2ZmZmYsJGZmZmZmZjg4LCQyZDdjODAwMAorCWRjLmwJJDAwMDBmZjhjLCQ2MWZmMDAwMCwkNGI2YzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkNGI5MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDRiOGUKKwlkYy5sCSQ3MjAxNzQwMCwkMjYzYzgwMDAsJDAwMDAzZDdjLCQwMDA4ZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjMDEsJDNjMDI0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQyZDdjZmZmZiwkZmZmZmZmODgKKwlkYy5sCSQyZDdjODAwMCwkMDAwMGZmOGMsJDYxZmYwMDAwLCQ0YjE4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQ0YjNlMjIyZSwkZmY3ODQyODAsJDRlNzUwOTZkCisJZGMubAkkNmY3NjY1NzAsJDJlMmUyZTAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkNGIyODQxZWUsJGZmNjAzMDNjLCRhYWFhNDIyOAorCWRjLmwJJDAwMDA0MjI4LCQwMDAyM2Q3YywkMDAxZmZmN2MsJDQ0ZmMwMDFmCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMTg4LCQwMDAwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSQ3ZmZmZmZjMCwkMTIyODAwMDIsJGUxNDkxMjI4LCQwMDAwYjA0MQorCWRjLmwJJDY2ZmYwMDAwLCQ0YWRlNjFmZiwkMDAwMDRhYWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDRhZDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQ0YWNjNDFlZSwkZmY2NDMwM2MsJGFhYWE0MmE4LCRmZmZjNDI5MAorCWRjLmwJJDQyYTgwMDA0LCQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlCisJZGMubAkkN2ZmZmZmODAsJDAxODgwMDAwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNGFhOCwkZmZmYzY2ZmYsJDAwMDA0YTg4LCQ0YWE4MDAwNAorCWRjLmwJJDY2ZmYwMDAwLCQ0YTdlMGM5MCwkYWEwMGFhMDAsJDY2ZmYwMDAwCisJZGMubAkkNGE3MjYxZmYsJDAwMDA0YTNlLCQ0YTAwNjZmZiwkMDAwMDRhNjQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0YTYwNDFlZQorCWRjLmwJJGZmNjAzMDNjLCRhYWFhNDIyOCwkMDAwMDQyMjgsJDAwMDIzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAxODgKKwlkYy5sCSQwMDAwNDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQxMjI4MDAwMgorCWRjLmwJJGUxNDkxMjI4LCQwMDAwYjA0MSwkNjZmZjAwMDAsJDRhMTY2MWZmCisJZGMubAkkMDAwMDQ5ZTIsJDRhMDA2NmZmLCQwMDAwNGEwOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDRhMDQ0MWVlLCRmZjYwMTE3YworCWRjLmwJJDAwYWEwMDAwLCQxMTdjMDBhYSwkMDAwMjNkN2MsJDAwMWZmZjdjCisJZGMubAkkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDEwOCwkMDAwMDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkN2ZmZmZmYzAsJDNkN2NhYWFhLCRmZjgyMzIzYworCWRjLmwJJGFhYWFiMDQxLCQ2NmZmMDAwMCwkNDliYTYxZmYsJDAwMDA0OTg2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDA0OWFjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkNDlhODQxZWUsJGZmNjAyMDNjLCRhYWFhYWFhYQorCWRjLmwJJDQyMjgwMDAwLCQ0MjI4MDAwMiwkNDIyODAwMDQsJDQyMjgwMDA2CisJZGMubAkkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSQwMWM4MDAwMCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMTIyOAorCWRjLmwJJDAwMDZlMTg5LCQxMjI4MDAwNCwkZTE4OTEyMjgsJDAwMDJlMTg5CisJZGMubAkkMTIyODAwMDAsJGIwODE2NmZmLCQwMDAwNDk0OCwkNjFmZjAwMDAKKwlkYy5sCSQ0OTE0NGEwMCwkNjZmZjAwMDAsJDQ5M2E1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwNDkzNiwkNDFlZWZmNjQsJDIwM2NhYWFhCisJZGMubAkkYWFhYTQyYTgsJGZmZmM0MjkwLCQ0MmE4MDAwNCwkNDJhODAwMDgKKwlkYy5sCSQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlLCQ3ZmZmZmY4MAorCWRjLmwJJDAxYzgwMDAwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA0YWE4CisJZGMubAkkZmZmYzY2ZmYsJDAwMDA0OGVjLCQ0YWE4MDAwOCwkNjZmZjAwMDAKKwlkYy5sCSQ0OGUyMGM5MCwkYWEwMGFhMDAsJDY2ZmYwMDAwLCQ0OGQ2MGNhOAorCWRjLmwJJGFhMDBhYTAwLCQwMDA0NjZmZiwkMDAwMDQ4YzgsJDYxZmYwMDAwCisJZGMubAkkNDg5NDRhMDAsJDY2ZmYwMDAwLCQ0OGJhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDQ4YjYsJDQxZWVmZjYwLCQxMTdjMDBhYQorCWRjLmwJJDAwMDAxMTdjLCQwMGFhMDAwMiwkMTE3YzAwYWEsJDAwMDQxMTdjCisJZGMubAkkMDBhYTAwMDYsJDNkN2MwMDFmLCRmZjdjNDRmYywkMDAxZjQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkMDE0ODAwMDAsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzAyZDdjLCRhYWFhYWFhYSwkZmY4MDIyM2MsJGFhYWFhYWFhCisJZGMubAkkYjA4MTY2ZmYsJDAwMDA0ODVjLCQ2MWZmMDAwMCwkNDgyODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkNDg0ZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDA0ODRhLCQ0MWVlZmY2MCwkM2UzY2FhYWEsJDQyMjgwMDAwCisJZGMubAkkNDIyODAwMDIsJDNkN2MwMDFmLCRmZjdjNDRmYywkMDAxZjQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkMGY4ODAwMDAsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzAxMjI4LCQwMDAyZTE0OSwkMTIyODAwMDAsJGJlNDE2NmZmCisJZGMubAkkMDAwMDQ4MDAsJDYxZmYwMDAwLCQ0N2NjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQ0N2YyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwNDdlZQorCWRjLmwJJDQxZWVmZjYwLCQxMTdjMDBhYSwkMDAwMDExN2MsJDAwYWEwMDAyCisJZGMubAkkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSQwZjA4MDAwMCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwM2Q3YworCWRjLmwJJGFhYWFmZjllLCQzMjNjYWFhYSwkYmU0MTY2ZmYsJDAwMDA0N2E0CisJZGMubAkkNjFmZjAwMDAsJDQ3NzA0YTAwLCQ2NmZmMDAwMCwkNDc5NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDA0NzkyLCQ0MWVlZmY2MAorCWRjLmwJJDMwM2NhYWFhLCQ0MjI4MDAwMCwkNDIyODAwMDIsJDNkN2MwMDFmCisJZGMubAkkZmY3YzQ0ZmMsJDAwMWY0OGVlLCQ3ZmZmZmY4MCwkMDE4ODAwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzAxMjI4LCQwMDAyZTE0OQorCWRjLmwJJDEyMjgwMDAwLCRiMDQxNjZmZiwkMDAwMDQ3NDgsJDYxZmYwMDAwCisJZGMubAkkNDcxNDRhMDAsJDY2ZmYwMDAwLCQ0NzNhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDQ3MzYsJDQxZWVmZjYwLCQzMDNjYWFhYQorCWRjLmwJJDQyMjgwMDA4LCQ0MjI4MDAwYSwkM2Q3YzAwMWYsJGZmN2M0NGZjCisJZGMubAkkMDAxZjQ4ZWUsJDdmZmZmZjgwLCQwMTg4MDAwOCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDEyMjgsJDAwMGFlMTQ5LCQxMjI4MDAwOAorCWRjLmwJJGIwNDE2NmZmLCQwMDAwNDZlYywkNjFmZjAwMDAsJDQ2Yjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDQ2ZGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwNDZkYSwkNDFlZWZmNjAsJDExN2MwMGFhLCQwMDA4MTE3YworCWRjLmwJJDAwYWEwMDBhLCQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlCisJZGMubAkkN2ZmZmZmODAsJDAxMDgwMDA4LCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwM2Q3YywkYWFhYWZmODIsJDMyM2NhYWFhLCRiMDQxNjZmZgorCWRjLmwJJDAwMDA0NjkwLCQ2MWZmMDAwMCwkNDY1YzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkNDY4MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDQ2N2UKKwlkYy5sCSQ0MWVlZmY2MCwkMjAzY2FhYWEsJGFhYWE0MjI4LCQwMDA4NDIyOAorCWRjLmwJJDAwMGE0MjI4LCQwMDBjNDIyOCwkMDAwZTNkN2MsJDAwMWZmZjdjCisJZGMubAkkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDFjOCwkMDAwODQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkN2ZmZmZmYzAsJDEyMjgwMDBlLCRlMTg5MTIyOAorCWRjLmwJJDAwMGNlMTg5LCQxMjI4MDAwYSwkZTE4OTEyMjgsJDAwMDhiMDgxCisJZGMubAkkNjZmZjAwMDAsJDQ2MWU2MWZmLCQwMDAwNDVlYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwNDYxMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDQ2MGM0MWVlLCRmZjYwMTE3YywkMDBhYTAwMDgsJDExN2MwMGFhCisJZGMubAkkMDAwYTExN2MsJDAwYWEwMDBjLCQxMTdjMDBhYSwkMDAwZTNkN2MKKwlkYy5sCSQwMDFmZmY3YywkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDE0OAorCWRjLmwJJDAwMDg0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDJkN2NhYWFhCisJZGMubAkkYWFhYWZmODAsJDIyM2NhYWFhLCRhYWFhYjA4MSwkNjZmZjAwMDAKKwlkYy5sCSQ0NWIyNjFmZiwkMDAwMDQ1N2UsJDRhMDA2NmZmLCQwMDAwNDVhNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQ1YTA0MWVlCisJZGMubAkkZmY2ODMwM2MsJGFhYWE0MjI4LCRmZmY4NDIyOCwkZmZmYTNkN2MKKwlkYy5sCSQwMDFmZmY3YywkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDE4OAorCWRjLmwJJGZmZjg0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDEyMjhmZmZhCisJZGMubAkkZTE0OTEyMjgsJGZmZjhiMDQxLCQ2NmZmMDAwMCwkNDU1NjYxZmYKKwlkYy5sCSQwMDAwNDUyMiwkNGEwMDY2ZmYsJDAwMDA0NTQ4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDU0NDQxZWUsJGZmNjgxMTdjCisJZGMubAkkMDBhYWZmZjgsJDExN2MwMGFhLCRmZmZhM2Q3YywkMDAxZmZmN2MKKwlkYy5sCSQ0NGZjMDAxZiwkNDhlZTdmZmYsJGZmODAwMTA4LCRmZmY4NDJlZQorCWRjLmwJJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkM2Q3Y2FhYWEsJGZmODIzMjNjCisJZGMubAkkYWFhYWIwNDEsJDY2ZmYwMDAwLCQ0NGZhNjFmZiwkMDAwMDQ0YzYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDQ0ZWMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQ0NGU4NDFlZSwkZmY2ODIwM2MsJGFhYWFhYWFhCisJZGMubAkkNDIyOGZmZjgsJDQyMjhmZmZhLCQ0MjI4ZmZmYywkNDIyODAwMDAKKwlkYy5sCSQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlLCQ3ZmZmZmY4MAorCWRjLmwJJDAxYzhmZmY4LCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzAxMjI4CisJZGMubAkkZmZmZWUxODksJDEyMjhmZmZjLCRlMTg5MTIyOCwkZmZmYWUxODkKKwlkYy5sCSQxMjI4ZmZmOCwkYjA4MTY2ZmYsJDAwMDA0NDg4LCQ2MWZmMDAwMAorCWRjLmwJJDQ0NTQ0YTAwLCQ2NmZmMDAwMCwkNDQ3YTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDA0NDc2LCQ0MWVlZmY2OCwkMTE3YzAwYWEKKwlkYy5sCSRmZmY4MTE3YywkMDBhYWZmZmEsJDExN2MwMGFhLCRmZmZjMTE3YworCWRjLmwJJDAwYWEwMDAwLCQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlCisJZGMubAkkN2ZmZmZmODAsJDAxNDhmZmY4LCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMmQ3YywkYWFhYWFhYWEsJGZmODAyMjNjLCRhYWFhYWFhYQorCWRjLmwJJGIwODE2NmZmLCQwMDAwNDQxYywkNjFmZjAwMDAsJDQzZTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDQ0MGUyMjJlLCRmZjc4NDI4MCwkNGU3NTA5MzYKKwlkYy5sCSQzNDJkNjI2OSwkNzQyMDY0NjksJDc2Njk2NDY1LCQyZTJlMmUwMAorCWRjLmwJJDUyYWVmZjc4LCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkNDNlYzcyMDEsJDc0MDA3NjAwLCQzZDdjMDAxNCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDFmNDhlZSwkN2ZmZmZmODAsJDRjNDEzNDAyLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDQzOGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDQzYjAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQ0M2FjMjIzYywkNDQ0NDQ0NDQsJDc0MDAyNjNjLCQ1NTU1NTU1NQorCWRjLmwJJDNkN2MwMDEwLCRmZjdjNDRmYywkMDAxZjQ4ZWUsJDdmZmZmZjgwCisJZGMubAkkNGM0MTM0MDIsJDQyZWVmZjdlLCQ0OGVlN2ZmZiwkZmZjMDJkN2MKKwlkYy5sCSQxMTExMTExMSwkZmY4ODJkN2MsJDAwMDAwMDAxLCRmZjhjNjFmZgorCWRjLmwJJDAwMDA0MzMyLCQ0YTAwNjZmZiwkMDAwMDQzNTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0MzU0MjIzYywkNTU1NTU1NTUKKwlkYy5sCSQ3NDAwMjYzYywkNDQ0NDQ0NDQsJDNkN2MwMDE0LCRmZjdjNDRmYworCWRjLmwJJDAwMWY0OGVlLCQ3ZmZmZmY4MCwkNGM0MTM0MDIsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzAyZDdjLCQ0NDQ0NDQ0NCwkZmY4ODJkN2MKKwlkYy5sCSQwMDAwMDAwMCwkZmY4YzYxZmYsJDAwMDA0MmRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDA0MzAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkNDJmYzIyM2MsJDExMTExMTExLCQyNDNjNDQ0NCwkNDQ0NDI2M2MKKwlkYy5sCSQ0NDQ0NDQ0NCwkM2Q3YzAwMWUsJGZmN2M0NGZjLCQwMDFkNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQ0YzQxMzQwMiwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDYxZmYsJDAwMDA0MjhlLCQ0YTAwNjZmZiwkMDAwMDQyYjQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0MmIwNzJmZQorCWRjLmwJJDc0MDE3NjAyLCQzZDdjMDAxZSwkZmY3YzQ0ZmMsJDAwMWQ0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjNDEzYzAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDQyNGUsJDRhMDA2NmZmLCQwMDAwNDI3NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQyNzA3MmZlCisJZGMubAkkNzQwMTc2MDAsJDNkN2MwMDE4LCRmZjdjNDRmYywkMDAxZDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkNGM0MTNjMDIsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwMCwkZmY4ODJkN2MsJDgwMDAwMDAwCisJZGMubAkkZmY4YzYxZmYsJDAwMDA0MWZlLCQ0YTAwNjZmZiwkMDAwMDQyMjQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0MjIwNzIwMgorCWRjLmwJJDc0MDE3NjAwLCQzZDdjMDAxZSwkZmY3YzQ0ZmMsJDAwMWQ0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjNDEzYzAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDQxYmUsJDRhMDA2NmZmLCQwMDAwNDFlNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQxZTA3MmZmCisJZGMubAkkNzRmZTc2ZmYsJDNkN2MwMDA4LCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkNGM0MTM0MDIsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA2MWZmLCQwMDAwNDE3ZSwkNGEwMDY2ZmYsJDAwMDA0MWE0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDFhMDcyZmYKKwlkYy5sCSQ3NGZlNzZmZiwkM2Q3YzAwMDgsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQ0YzdjMjQwMiwkZmZmZmZmZmYsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzAyZDdjLCRmZmZmZmZmZiwkZmY4ODYxZmYKKwlkYy5sCSQwMDAwNDEzMiwkNGEwMDY2ZmYsJDAwMDA0MTU4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDE1NDIyM2MsJDAwMDBmZmZmCisJZGMubAkkNzQwMTI2M2MsJDU1NTU1NTU1LCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkN2ZmZmZmODAsJDRjNDEzNDAyLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwMmQ3YywkMDAwMGFhYWIsJGZmODgyZDdjCisJZGMubAkkMDAwMTU1NTYsJGZmOGM2MWZmLCQwMDAwNDBkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwNDEwMCwkMjIyZWZmNzgsJDQyODA0ZTc1LCQwOTYzNjE3MworCWRjLmwJJDJlMmUyZTAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkNDBlYzQxZWUsJGZmNjEzMGJjLCRhYWFhMzIzYywkYWFhYTM0M2MKKwlkYy5sCSRiYmJiM2Q3YywkMDAxNGZmN2MsJDQ0ZmMwMDEwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwY2QwLCQwMDgxNDJlZSwkZmY3ZTM2MTAsJDNkN2NiYmJiCisJZGMubAkkZmY4ZTQ4ZWUsJDdmZmZmZmMwLCQ2MWZmMDAwMCwkNDA3ODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkNDA5ZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDA0MDlhLCQ0MWVlZmY2MSwkMzBiY2VlZWUsJDMyM2NhYWFhCisJZGMubAkkMzQzY2JiYmIsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkMGNkMDAwODEsJDQyZWVmZjdlLCQzNjEwM2Q3YworCWRjLmwJJGVlZWVmZjg2LCQzZDdjZWVlZSwkZmY4ZTQ4ZWUsJDdmZmZmZmMwCisJZGMubAkkNjFmZjAwMDAsJDQwMjA0YTAwLCQ2NmZmMDAwMCwkNDA0NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDA0MDQyLCQ0MWVlZmY2MgorCWRjLmwJJDIwYmNhYWFhLCRhYWFhMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiCisJZGMubAkkYmJiYjNkN2MsJDAwMDRmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwMGVkMCwkMDA4MTQyZWUsJGZmN2UyNjEwLCQyZDdjYmJiYgorCWRjLmwJJGJiYmJmZjhjLCQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzZmM2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAzZmVjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkM2ZlODQxZWUsJGZmNjIyMGJjLCRlZWVlZWVlZQorCWRjLmwJJDIyM2NhYWFhLCRhYWFhMjQzYywkYmJiYmJiYmIsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCQ3ZmZmZmY4MCwkMGVkMDAwODEKKwlkYy5sCSQ0MmVlZmY3ZSwkMjYxMDJkN2MsJGVlZWVlZWVlLCRmZjg0MmQ3YworCWRjLmwJJGVlZWVlZWVlLCRmZjhjNDhlZSwkN2ZmZmZmYzAsJDYxZmYwMDAwCisJZGMubAkkM2Y2NDRhMDAsJDY2ZmYwMDAwLCQzZjhhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDNmODYsJDQxZWVmZjYxLCQyMGJjYWFhYQorCWRjLmwJJGFhYWEyMjNjLCRhYWFhYWFhYSwkMjQzY2JiYmIsJGJiYmIzZDdjCisJZGMubAkkMDAwNGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDBlZDAKKwlkYy5sCSQwMDgxNDJlZSwkZmY3ZTI2MTAsJDJkN2NiYmJiLCRiYmJiZmY4YworCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDNmMGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDNmMzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQzZjJjNDFlZSwkZmY2MTIwYmMsJDdmZmZmZmZmLCQyMjNjODAwMAorCWRjLmwJJDAwMDAyNDNjLCRiYmJiYmJiYiwkM2Q3YzAwMWIsJGZmN2M0NGZjCisJZGMubAkkMDAxMDQ4ZWUsJDdmZmZmZjgwLCQwZWQwMDA4MSwkNDJlZWZmN2UKKwlkYy5sCSQyNjEwMmQ3YywkN2ZmZmZmZmYsJGZmODQyZDdjLCQ3ZmZmZmZmZgorCWRjLmwJJGZmOGM0OGVlLCQ3ZmZmZmZjMCwkNjFmZjAwMDAsJDNlYTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDNlY2UyMjJlLCRmZjc4NDI4MCwkNGU3NTA5NjMKKwlkYy5sCSQ2MTczMzIyZSwkMmUyZTAwMDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQzZWI4NDFlZSwkZmY2MDQzZWUsJGZmNjQyMGJjCisJZGMubAkkYWFhYWFhYWEsJDIyYmNiYmJiLCRiYmJiMjIzYywkYWFhYWFhYWEKKwlkYy5sCSQyNDNjYmJiYiwkYmJiYjI2M2MsJGNjY2NjY2NjLCQyODNjZGRkZAorCWRjLmwJJGRkZGQzZDdjLCQwMDE0ZmY3YywkNDRmYzAwMTAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBlZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkMmExMDJjMTEKKwlkYy5sCSQyZDdjY2NjYywkY2NjY2ZmOTQsJDJkN2NkZGRkLCRkZGRkZmY5OAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDNlMWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDNlNDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQzZTNjNDFlZSwkZmY2MTQzZWUsJGZmNjUyMGJjLCRhYWFhYWFhYQorCWRjLmwJJDIyYmNiYmJiLCRiYmJiMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiCisJZGMubAkkYmJiYjI2M2MsJGNjY2NjY2NjLCQyODNjZGRkZCwkZGRkZDNkN2MKKwlkYy5sCSQwMDE0ZmY3YywkNDRmYzAwMTAsJDQ4ZWU3ZmZmLCRmZjgwMGVmYworCWRjLmwJJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkMmExMDJjMTEsJDJkN2NjY2NjCisJZGMubAkkY2NjY2ZmOTQsJDJkN2NkZGRkLCRkZGRkZmY5OCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDNkOWUsJDRhMDA2NmZmLCQwMDAwM2RjNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDNkYzA0MWVlCisJZGMubAkkZmY2MjQzZWUsJGZmNjYyMGJjLCRhYWFhYWFhYSwkMjJiY2JiYmIKKwlkYy5sCSRiYmJiMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiLCRiYmJiMjYzYworCWRjLmwJJGNjY2NjY2NjLCQyODNjZGRkZCwkZGRkZDNkN2MsJDAwMTRmZjdjCisJZGMubAkkNDRmYzAwMTAsJDQ4ZWU3ZmZmLCRmZjgwMGVmYywkODBjMTkxMDIKKwlkYy5sCSQ0MmVlZmY3ZSwkMmExMDJjMTEsJDJkN2NjY2NjLCRjY2NjZmY5NAorCWRjLmwJJDJkN2NkZGRkLCRkZGRkZmY5OCwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDNkMjIsJDRhMDA2NmZmLCQwMDAwM2Q0OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDNkNDQ0MWVlLCRmZjYwNDNlZQorCWRjLmwJJGZmNjQyMGJjLCRlZWVlZWVlZSwkMjJiY2JiYmIsJGJiYmIyMjNjCisJZGMubAkkYWFhYWFhYWEsJDI0M2NiYmJiLCRiYmJiMjYzYywkY2NjY2NjY2MKKwlkYy5sCSQyODNjZGRkZCwkZGRkZDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMGVmYywkODBjMTkxMDIsJDQyZWVmZjdlCisJZGMubAkkMmExMDJjMTEsJDJkN2NlZWVlLCRlZWVlZmY4NCwkMmQ3Y2JiYmIKKwlkYy5sCSRiYmJiZmY4OCwkMmQ3Y2VlZWUsJGVlZWVmZjk0LCQyZDdjYmJiYgorCWRjLmwJJGJiYmJmZjk4LCQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzYzk2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAzY2JjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkM2NiODQxZWUsJGZmNjE0M2VlLCRmZjY1MjBiYworCWRjLmwJJGVlZWVlZWVlLCQyMmJjYmJiYiwkYmJiYjIyM2MsJGFhYWFhYWFhCisJZGMubAkkMjQzY2JiYmIsJGJiYmIyNjNjLCRjY2NjY2NjYywkMjgzY2RkZGQKKwlkYy5sCSRkZGRkM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwZWZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UsJDJhMTAyYzExCisJZGMubAkkMmQ3Y2VlZWUsJGVlZWVmZjg0LCQyZDdjYmJiYiwkYmJiYmZmODgKKwlkYy5sCSQyZDdjZWVlZSwkZWVlZWZmOTQsJDJkN2NiYmJiLCRiYmJiZmY5OAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDNjMGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDNjMzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQzYzJjNDFlZSwkZmY2MjQzZWUsJGZmNjYyMGJjLCRlZWVlZWVlZQorCWRjLmwJJDIyYmNiYmJiLCRiYmJiMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiCisJZGMubAkkYmJiYjI2M2MsJGNjY2NjY2NjLCQyODNjZGRkZCwkZGRkZDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMGVmYworCWRjLmwJJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkMmExMDJjMTEsJDJkN2NlZWVlCisJZGMubAkkZWVlZWZmODQsJDJkN2NiYmJiLCRiYmJiZmY4OCwkMmQ3Y2VlZWUKKwlkYy5sCSRlZWVlZmY5NCwkMmQ3Y2JiYmIsJGJiYmJmZjk4LCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA2MWZmLCQwMDAwM2I3ZSwkNGEwMDY2ZmYsJDAwMDAzYmE0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkM2JhMDQxZWUKKwlkYy5sCSRmZjYwNDNlZSwkZmY2NDIwYmMsJGFhYWFhYWFhLCQyMmJjZWVlZQorCWRjLmwJJGVlZWUyMjNjLCRhYWFhYWFhYSwkMjQzY2JiYmIsJGJiYmIyNjNjCisJZGMubAkkY2NjY2NjY2MsJDI4M2NkZGRkLCRkZGRkM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwZWZjLCQ4MGMxOTEwMgorCWRjLmwJJDQyZWVmZjdlLCQyYTEwMmMxMSwkMmQ3Y2FhYWEsJGFhYWFmZjg0CisJZGMubAkkMmQ3Y2VlZWUsJGVlZWVmZjg4LCQyZDdjYWFhYSwkYWFhYWZmOTQKKwlkYy5sCSQyZDdjZWVlZSwkZWVlZWZmOTgsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzYWYyLCQ0YTAwNjZmZiwkMDAwMDNiMTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzYjE0NDFlZSwkZmY2MTQzZWUKKwlkYy5sCSRmZjY1MjBiYywkYWFhYWFhYWEsJDIyYmNlZWVlLCRlZWVlMjIzYworCWRjLmwJJGFhYWFhYWFhLCQyNDNjYmJiYiwkYmJiYjI2M2MsJGNjY2NjY2NjCisJZGMubAkkMjgzY2RkZGQsJGRkZGQzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlN2ZmZiwkZmY4MDBlZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZQorCWRjLmwJJDJhMTAyYzExLCQyZDdjYWFhYSwkYWFhYWZmODQsJDJkN2NlZWVlCisJZGMubAkkZWVlZWZmODgsJDJkN2NhYWFhLCRhYWFhZmY5NCwkMmQ3Y2VlZWUKKwlkYy5sCSRlZWVlZmY5OCwkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwM2E2NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwM2E4YywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDNhODg0MWVlLCRmZjYyNDNlZSwkZmY2NjIwYmMKKwlkYy5sCSRhYWFhYWFhYSwkMjJiYzdmZmYsJGZmZmYyMjNjLCRhYWFhYWFhYQorCWRjLmwJJDI0M2M4MDAwLCQwMDAwMjYzYywkY2NjY2NjY2MsJDI4M2NkZGRkCisJZGMubAkkZGRkZDNkN2MsJDAwMGJmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwMGVmYywkODBjMTkxMDIsJDQyZWVmZjdlLCQyYTEwMmMxMQorCWRjLmwJJDJkN2NhYWFhLCRhYWFhZmY4NCwkMmQ3YzdmZmYsJGZmZmZmZjg4CisJZGMubAkkMmQ3Y2FhYWEsJGFhYWFmZjk0LCQyZDdjN2ZmZiwkZmZmZmZmOTgKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzOWRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzYTAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzlmYzQxZWUsJGZmNjA0M2VlLCRmZjY0MzBiYywkYWFhYTMyYmMKKwlkYy5sCSRiYmJiMzIzYywkYWFhYTM0M2MsJGJiYmIzNjNjLCRjY2NjMzgzYworCWRjLmwJJGRkZGQzZDdjLCQwMDE0ZmY3YywkNDRmYzAwMTAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBjZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkM2ExMDNjMTEKKwlkYy5sCSQzZDdjY2NjYywkZmY5NjNkN2MsJGRkZGRmZjlhLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA2MWZmLCQwMDAwMzk2ZSwkNGEwMDY2ZmYsJDAwMDAzOTk0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMzk5MDQxZWUKKwlkYy5sCSRmZjYxNDNlZSwkZmY2NTMwYmMsJGFhYWEzMmJjLCRiYmJiMzIzYworCWRjLmwJJGFhYWEzNDNjLCRiYmJiMzYzYywkY2NjYzM4M2MsJGRkZGQzZDdjCisJZGMubAkkMDAwNGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDBjZmMKKwlkYy5sCSQ4MGMxOTEwMiwkNDJlZWZmN2UsJDNhMTAzYzExLCQzZDdjY2NjYworCWRjLmwJJGZmOTYzZDdjLCRkZGRkZmY5YSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM5MDIsJDRhMDA2NmZmLCQwMDAwMzkyOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM5MjQ0MWVlLCRmZjYwNDNlZQorCWRjLmwJJGZmNjQzMGJjLCRlZWVlMzJiYywkYmJiYjMyM2MsJGFhYWEzNDNjCisJZGMubAkkYmJiYjM2M2MsJGNjY2MzODNjLCRkZGRkM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwY2ZjLCQ4MGMxOTEwMgorCWRjLmwJJDQyZWVmZjdlLCQzYTEwM2MxMSwkM2Q3Y2VlZWUsJGZmODYzZDdjCisJZGMubAkkYmJiYmZmOGEsJDNkN2NlZWVlLCRmZjk2M2Q3YywkYmJiYmZmOWEKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzODhhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzOGIwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzhhYzQxZWUsJGZmNjE0M2VlLCRmZjY1MzBiYywkZWVlZTMyYmMKKwlkYy5sCSRiYmJiMzIzYywkYWFhYTM0M2MsJGJiYmIzNjNjLCRjY2NjMzgzYworCWRjLmwJJGRkZGQzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBjZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkM2ExMDNjMTEKKwlkYy5sCSQzZDdjZWVlZSwkZmY4NjNkN2MsJGJiYmJmZjhhLCQzZDdjZWVlZQorCWRjLmwJJGZmOTYzZDdjLCRiYmJiZmY5YSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM4MTIsJDRhMDA2NmZmLCQwMDAwMzgzOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM4MzQ0MWVlLCRmZjYwNDNlZQorCWRjLmwJJGZmNjQzMGJjLCRhYWFhMzJiYywkZWVlZTMyM2MsJGFhYWEzNDNjCisJZGMubAkkYmJiYjM2M2MsJGNjY2MzODNjLCRkZGRkM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwY2ZjLCQ4MGMxOTEwMgorCWRjLmwJJDQyZWVmZjdlLCQzYTEwM2MxMSwkM2Q3Y2FhYWEsJGZmODYzZDdjCisJZGMubAkkZWVlZWZmOGEsJDNkN2NhYWFhLCRmZjk2M2Q3YywkZWVlZWZmOWEKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzNzlhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzN2MwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzdiYzQxZWUsJGZmNjE0M2VlLCRmZjY1MzBiYywkYWFhYTMyYmMKKwlkYy5sCSQ3ZmZmMzIzYywkYWFhYTM0M2MsJDgwMDAzNjNjLCRjY2NjMzgzYworCWRjLmwJJGRkZGQzZDdjLCQwMDFiZmY3YywkNDRmYzAwMTAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBjZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkM2ExMDNjMTEKKwlkYy5sCSQzZDdjYWFhYSwkZmY4NjNkN2MsJDdmZmZmZjhhLCQzZDdjYWFhYQorCWRjLmwJJGZmOTYzZDdjLCQ3ZmZmZmY5YSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM3MjIsJDRhMDA2NmZmLCQwMDAwMzc0OCwkMjIyZWZmNzgKKwlkYy5sCSQ0MjgwNGU3NSwkMDk2MzZkNzAsJDMyMmM2MzY4LCQ2YjMyMmUyZQorCWRjLmwJJDJlMDA1MWZjLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzcyYzNkN2MsJDIwNDBmZjYwLCQyMjNjMTExMSwkMTEyMDNkN2MKKwlkYy5sCSQwMDA0ZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDEwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM2YzIsJDRhMDA2NmZmLCQwMDAwMzZlOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM2ZTQzZDdjLCQyMDQwZmY2MAorCWRjLmwJJDIyN2MwMDAwLCQwMDQwM2Q3YywkMDAwNGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQ5MDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzNjdhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzNmEwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzY5YzNkN2MsJDIwNDBmZjYwLCQyMjNjMTExMSwkMTEzMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDE4MDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM2MzIsJDRhMDA2NmZmLCQwMDAwMzY1OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM2NTQzZDdjLCQyMDQwZmY2MAorCWRjLmwJJDIyN2MwMDAwLCQwMDEwM2Q3YywkMDAwMWZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQ5MDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzNWVhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzNjEwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzYwYzNkN2MsJDIwNDBmZjYwLCQyMjNjMTExMSwkMTE1MDNkN2MKKwlkYy5sCSQwMDAxZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDEwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDM1YTIsJDRhMDA2NmZmLCQwMDAwMzVjOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM1YzQzZDdjLCQyMDQwZmY2MAorCWRjLmwJJDIyN2MwMDAwLCQwMDkwM2Q3YywkMDAwMWZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQ5MDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzNTVhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzNTgwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzU3YzJkN2MsJDIwMDBhMDAwLCRmZjYwMjIzYywkMTExMTIwMDAKKwlkYy5sCSQzZDdjMDAwNCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCQ3ZmZmZmY4MAorCWRjLmwJJDAyZWUxMDAwLCRmZjYwNDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwCisJZGMubAkkNjFmZjAwMDAsJDM1MTA0YTAwLCQ2NmZmMDAwMCwkMzUzNjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAzNTMyLCQyZDdjMjAwMAorCWRjLmwJJGEwMDBmZjYwLCQyMjdjZmZmZiwkYTAwMDNkN2MsJDAwMDRmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDJlZSwkOTAwMGZmNjAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzRjNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMzRlYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDM0ZTgyZDdjLCQyMDAwYTAwMCwkZmY2MDIyM2MKKwlkYy5sCSQxMTExMzAwMCwkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQwMmVlMTgwMCwkZmY2MDQyZWUsJGZmN2U0OGVlCisJZGMubAkkN2ZmZmZmYzAsJDYxZmYwMDAwLCQzNDdjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQzNGEyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMzQ5ZQorCWRjLmwJJDJkN2MyMDAwLCRhMDAwZmY2MCwkMjI3Y2ZmZmYsJDkwMDAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAyZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzNDMyLCQ0YTAwNjZmZiwkMDAwMDM0NTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzNDU0MmQ3YywkMjAwMGEwMDAKKwlkYy5sCSRmZjYwMjIzYywkMTExMTEwMDAsJDNkN2MwMDAxLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCQ3ZmZmZmY4MCwkMDJlZTEwMDAsJGZmNjA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQ2MWZmMDAwMCwkMzNlODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMzQwZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAzNDBhLCQyZDdjMjAwMCwkYTAwMGZmNjAsJDIyN2NmZmZmCisJZGMubAkkYjAwMDNkN2MsJDAwMDFmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwMDJlZSwkOTAwMGZmNjAsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA2MWZmLCQwMDAwMzM5ZSwkNGEwMDY2ZmYsJDAwMDAzM2M0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMzNjMDJkN2MKKwlkYy5sCSRhMDAwMDAwMCwkZmY2MDJkN2MsJGMwMDAwMDAwLCRmZjY0MjIzYworCWRjLmwJJGEwMDAwMDAwLCQzZDdjMDAwYywkZmY3YzQ0ZmMsJDAwMDg0OGVlCisJZGMubAkkN2ZmZmZmODAsJDA0ZWUxMDAwLCRmZjYwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSQ3ZmZmZmZjMCwkNjFmZjAwMDAsJDMzNGM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDMzNzI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAzMzZlCisJZGMubAkkMmQ3Y2EwMDAsJDAwMDBmZjYwLCQyZDdjYzAwMCwkMDAwMGZmNjQKKwlkYy5sCSQyMjdjYzAwMCwkMDAwMDNkN2MsJDAwMGNmZjdjLCQ0NGZjMDAwOAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDRlZSwkOTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzJmYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzMyMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDMzMWMyZDdjLCRhMDAwMDAwMCwkZmY2MDJkN2MsJGMwMDAwMDAwCisJZGMubAkkZmY2NDIyM2MsJGIwMDAwMDAwLCQzZDdjMDAwOCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDA4NDhlZSwkN2ZmZmZmODAsJDA0ZWUxODAwLCRmZjYwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkNjFmZjAwMDAsJDMyYTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDMyY2U1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMzJjYSwkMmQ3Y2EwMDAsJDAwMDBmZjYwLCQyZDdjYzAwMAorCWRjLmwJJDAwMDBmZjY0LCQyMjdjMTAwMCwkMDAwMDNkN2MsJDAwMDlmZjdjCisJZGMubAkkNDRmYzAwMDgsJDQ4ZWU3ZmZmLCRmZjgwMDRlZSwkOTAwMGZmNjAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzI1NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMzI3YywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDMyNzgyZDdjLCRhMDAwMDAwMCwkZmY2MDJkN2MKKwlkYy5sCSRjMDAwMDAwMCwkZmY2NDIyM2MsJDkwMDAwMDAwLCQzZDdjMDAwOQorCWRjLmwJJGZmN2M0NGZjLCQwMDA4NDhlZSwkN2ZmZmZmODAsJDA0ZWUxMDAwCisJZGMubAkkZmY2MDQyZWUsJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkNjFmZjAwMDAKKwlkYy5sCSQzMjA0NGEwMCwkNjZmZjAwMDAsJDMyMmE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMzIyNiwkMmQ3Y2EwMDAsJDAwMDBmZjYwCisJZGMubAkkMmQ3Y2MwMDAsJDAwMDBmZjY0LCQyMjdjZDAwMCwkMDAwMDNkN2MKKwlkYy5sCSQwMDA5ZmY3YywkNDRmYzAwMDgsJDQ4ZWU3ZmZmLCRmZjgwMDRlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDMxYjIsJDRhMDA2NmZmLCQwMDAwMzFkOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDMxZDQzZDdjLCRhMDQwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMWEwM2Q3YywkMDAwNGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxMDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzMTZhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzMTkwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzE4YzNkN2MsJGEwNDBmZjYwLCQyMjdjMDAwMCwkMDA0MDNkN2MKKwlkYy5sCSQwMDA0ZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDk4MDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDMxMjIsJDRhMDA2NmZmLCQwMDAwMzE0OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDMxNDQzZDdjLCRhMDQwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMWIwM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxMDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzMGRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzMTAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzBmYzNkN2MsJGEwNDBmZjYwLCQyMjdjMDAwMCwkMDAxMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDMwOTIsJDRhMDA2NmZmLCQwMDAwMzBiOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDMwYjQzZDdjLCRhMDQwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMTkwM2Q3YywkMDAwMWZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxMDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzMDRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzMDcwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMzA2YzNkN2MsJGEwNDBmZjYwLCQyMjdjMDAwMCwkMDA1MDNkN2MKKwlkYy5sCSQwMDAxZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDMwMDIsJDRhMDA2NmZmLCQwMDAwMzAyOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDMwMjQzZDdjLCRhMGMwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMWEwM2Q3YywkMDAwNGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxMDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAyZmJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyZmUwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMmZkYzNkN2MsJGEwYzBmZjYwLCQyMjdjZmZmZiwkZmZjMDNkN2MKKwlkYy5sCSQwMDA0ZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDJmNzIsJDRhMDA2NmZmLCQwMDAwMmY5OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDJmOTQzZDdjLCRhMGMwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMWIwM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxODAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAyZjJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyZjUwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMmY0YzNkN2MsJGEwYzBmZjYwLCQyMjdjMTExMSwkMTE5MDNkN2MKKwlkYy5sCSQwMDAxZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDJlZTIsJDRhMDA2NmZmLCQwMDAwMmYwOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDJmMDQzZDdjLCRhMGMwZmY2MAorCWRjLmwJJDIyM2MxMTExLCQxMWQwM2Q3YywkMDAwMWZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwMGVlLCQxMDAwZmY2MCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAyZTlhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyZWMwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMmViYzNkN2MsJGEwYzBmZjYwLCQyMjdjMDAwMCwkMDA1MDNkN2MKKwlkYy5sCSQwMDFiZmY3YywkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDBlZQorCWRjLmwJJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzA2MWZmCisJZGMubAkkMDAwMDJlNTIsJDRhMDA2NmZmLCQwMDAwMmU3OCwkMjIyZWZmNzgKKwlkYy5sCSQ0MjgwNGU3NSwkMDk0NTY2NjYsJDY1NjM3NDY5LCQ3NjY1MjA2MQorCWRjLmwJJDY0NjQ3MjY1LCQ3MzczNjU3MywkMmUyZTJlMDAsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyZTU0NDI4MiwkNzYwMjQxZWUKKwlkYy5sCSRmZjc0M2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzEwLCQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMmRlODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMmUwZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyZTBhLCQ0MjgyNzYwMiwkNDFlZWZmNzQsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMxODM0MDIKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM0MWVlLCRmZjc4MmQ0OCwkZmZhMDYxZmYsJDAwMDAyZDk2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyZGJjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMmRiODQyODIsJDc2MDI0MWVlLCRmZjc4M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzIwCisJZGMubAkkMzQwMjQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNDFlZWZmNzQsJDJkNDhmZmEwLCQ2MWZmMDAwMAorCWRjLmwJJDJkNDQ0YTAwLCQ2NmZmMDAwMCwkMmQ2YTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyZDY2LCQ0MjgyNzYwMiwkNDFlZTBmNzQKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMjgzNDAyLCRmMDAwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMmNmODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMmQxZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyZDFhLCQ0MjgyNzYwMiwkNDFlZWVmNzQsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMyODM0MDIKKwlkYy5sCSQxMDAwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMmNhYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMmNkMjUyYWUsJGZmNzg1MmFlLCRmZjc4NTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDJjYzYsJDQyODI3NjAyLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjM2MzNDAyCisJZGMubAkkMDAwMDAwMDIsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyYzVhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyYzgwLCQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyYzc2LCQ0MjgyNzYwMiwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzNhMzQwMgorCWRjLmwJJGZmZGE0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQyYzBjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQyYzMyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMmMyZQorCWRjLmwJJDQyODI3NjAyLCQ0M2VlZmY3OCwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzIxMzQwMiwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNDFlZQorCWRjLmwJJGZmNzQyZDQ4LCRmZmE0NjFmZiwkMDAwMDJiYmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDJiZTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQyYmRjNDI4MiwkNzYwMjQ1ZWUsJGZmNzgzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMjIsJDM0MDI0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ0MWVlZmY3NCwkMmQ0OGZmYTgsJDYxZmYwMDAwLCQyYjY4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyYjhlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDJiOGEsJDQyODI3NjAyLCQ0N2VlZmY3OCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzIzMzQwMgorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzQxZWUsJGZmNzQyZDQ4LCRmZmFjNjFmZiwkMDAwMDJiMTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDJiM2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQyYjM4NDI4MiwkNzYwMjQ5ZWUsJGZmNzgzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMjQKKwlkYy5sCSQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ0MWVlZmY3NCwkMmQ0OGZmYjAsJDYxZmYwMDAwCisJZGMubAkkMmFjNDRhMDAsJDY2ZmYwMDAwLCQyYWVhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDJhZTYsJDQyODI3NjAyLCQ0YmVlZmY3OAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMyNTM0MDIsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzQxZWUsJGZmNzQyZDQ4LCRmZmI0NjFmZgorCWRjLmwJJDAwMDAyYTcyLCQ0YTAwNjZmZiwkMDAwMDJhOTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyYTk0MjI0ZSwkNDI4Mjc2MDIKKwlkYy5sCSQ0ZGU5ZmY3OCwkMzM3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlOQorCWRjLmwJJGZmZmZmZjgwLCQ0YzI2MzQwMiwkNDJlOWZmN2UsJDQ4ZTlmZmZmCisJZGMubAkkZmZjMDIzN2MsJDAwMDAwMDA0LCRmZjhjNDFlOSwkZmY3NDIzNDgKKwlkYy5sCSRmZmI4MmM0OSwkNjFmZjAwMDAsJDJhMWM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDJhNDI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAyYTNlCisJZGMubAkkNDI4Mjc2MDIsJDIwNGY0ZmVlLCRmZjc4M2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzI3LCQzNDAyNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNDNlZWZmNzQsJDJkNDlmZmJjLCQyZTQ4NjFmZiwkMDAwMDI5YzYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDI5ZWMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQyOWU4NDI4MiwkNzYwMjQxZWUsJGZmNzQ3OGYwCisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzMwMzQwMiwkNDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDI5Nzg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDI5OWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMjk5YSwkNDI4Mjc2MDIsJDQxZWVmZjc0LCQ3OGY4M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzMwCisJZGMubAkkMzQwMjQyMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyOTJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyOTUwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMjk0YzQyODIsJDc2MDI0MWVlLCRmZjc0NzhmYywkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzMwMzQwMgorCWRjLmwJJDQ0MTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQyOGRjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQyOTAyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMjhmZQorCWRjLmwJJDQyODI3NjAyLCQ0MWVlZmY3NCwkNzhmZTNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMCwkMzQwMjQ2MTAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMjg4ZSwkNGEwMDY2ZmYsJDAwMDAyOGI0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMjhiMDQyODIKKwlkYy5sCSQ3NjAyNDFlZSwkZmY3NDc4ZjAsJDNkN2MwMDAwLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzMDM0MDIsJDQ4MTA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMjg0MDRhMDAsJDY2ZmYwMDAwLCQyODY2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDI4NjIsJDQyODI3NjAyCisJZGMubAkkNDFlZWZmNzQsJDc4ZjgzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMzAsJDM0MDI0YTEwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDI3ZjIsJDRhMDA2NmZmLCQwMDAwMjgxOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDI4MTQ0MjgyLCQ3NjAyNDFlZQorCWRjLmwJJGZmNzQ3OGZjLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjMzAzNDAyLCQ0YzEwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDI3YTQ0YTAwLCQ2NmZmMDAwMCwkMjdjYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyN2M2LCQ0MjgyNzYwMiwkNDFlZWZmNzQKKwlkYy5sCSQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzMwLCQzNDAyNGUxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDI3NTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDI3N2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQyNzc4NDI4MiwkNzYwMjQxZWUsJGZmNzQyODdjCisJZGMubAkkZmZmZmZmZmUsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMzMDM0MDIsJGNlMTA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMjcwNDRhMDAsJDY2ZmYwMDAwLCQyNzJhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDI3MjYsJDQyODI3NjAyLCQ0MWVlZmY3NAorCWRjLmwJJDI4N2MwMDAwLCQwMDAyM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzMwLCQzNDAyY2VmMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAyNmIyLCQ0YTAwNjZmZiwkMDAwMDI2ZDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyNmQ0NDI4MiwkNzYwMjQzZWUKKwlkYy5sCSRmZjc0NzhmMCwkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzMxMzQwMiwkNDAxMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQyNjY0NGEwMCwkNjZmZjAwMDAsJDI2OGE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMjY4NiwkNDI4Mjc2MDIsJDQ1ZWVmZjc0CisJZGMubAkkNzhmMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzMiwkMzQwMjQwMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyNjE2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyNjNjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMjYzODQyODIsJDc2MDI0N2VlLCRmZjc0NzhmMAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzMzM0MDIsJDQwMTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQyNWM4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyNWVlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDI1ZWEsJDQyODI3NjAyLCQ0OWVlZmY3NCwkNzhmMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNAorCWRjLmwJJDM0MDI0MDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMjU3YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMjVhMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDI1OWM0MjgyLCQ3NjAyNGJlZSwkZmY3NDc4ZjAsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzNTM0MDIKKwlkYy5sCSQ0MDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMjUyYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMjU1MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDI1NGUKKwlkYy5sCSQyMjRlNDI4MiwkNzYwMjRkZTksJGZmNzQ3OGYwLCQzMzdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlOSwkZmZmZmZmODAsJDRjMzYzNDAyCisJZGMubAkkNDAxMDQyZTksJGZmN2U0OGU5LCRmZmZmZmZjMCwkMjM3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkMmM0OTYxZmYsJDAwMDAyNGRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyNTAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMjRmYzQyODIsJDc2MDIyMDRmLCQ0ZmVlZmY3NCwkNzhmMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNworCWRjLmwJJDM0MDI0MDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGMyZTQ4LCQ2MWZmMDAwMCwkMjQ4ODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMjRhZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyNGFhLCQ0MjgyNzYwMiwkNDNlZWZmNzQsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMxMTM0MDIKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMjQzZSwkNGEwMDY2ZmYsJDAwMDAyNDY0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMjQ2MDQyODIKKwlkYy5sCSQ3NjAyNDVlZSwkZmY3NDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMxMiwkMzQwMjQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQyM2Y0NGEwMCwkNjZmZjAwMDAsJDI0MWE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMjQxNiwkNDI4Mjc2MDIsJDQ3ZWVmZjc0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzEzMzQwMiwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDIzYWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDIzZDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQyM2NjNDI4MiwkNzYwMjQ5ZWUsJGZmNzQzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMTQsJDM0MDI0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMjM2MDRhMDAsJDY2ZmYwMDAwLCQyMzg2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDIzODIsJDQyODI3NjAyCisJZGMubAkkNGJlZWZmNzQsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMxNTM0MDIsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyMzE2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyMzNjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMjMzODIyNGUsJDQyODI3NjAyLCQ0ZGU5ZmY3NAorCWRjLmwJJDMzN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZTksJGZmZmZmZjgwCisJZGMubAkkNGMxNjM0MDIsJDQyZTlmZjdlLCQ0OGU5ZmZmZiwkZmZjMDIzN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzJjNDksJDYxZmYwMDAwLCQyMmM4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyMmVlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDIyZWEsJDQyODI3NjAyLCQyMDRmNGZlZSwkZmY3NDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMxNworCWRjLmwJJDM0MDI0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDJlNDg2MWZmLCQwMDAwMjI3YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMjJhMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDIyOWM0MjgyLCQ3NjAyNDNlZSwkZmY3NDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMxOSwkMzQwMjQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDQxZWVmZjc4LCQyZDQ4ZmZhNCwkNjFmZjAwMDAsJDIyMjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDIyNGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMjI0YSwkNDI4Mjc2MDIsJDQ1ZWVmZjc0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMWEzNDAyCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNDFlZSwkZmY3ODJkNDgsJGZmYTg2MWZmLCQwMDAwMjFkNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMjFmYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDIxZjg0MjgyLCQ3NjAyNDdlZSwkZmY3NDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMxYgorCWRjLmwJJDM0MDI0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDQxZWVmZjc4LCQyZDQ4ZmZhYywkNjFmZjAwMDAKKwlkYy5sCSQyMTg0NGEwMCwkNjZmZjAwMDAsJDIxYWE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMjFhNiwkNDI4Mjc2MDIsJDQ5ZWVmZjc0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzFjMzQwMiwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNDFlZSwkZmY3ODJkNDgsJGZmYjA2MWZmCisJZGMubAkkMDAwMDIxMzIsJDRhMDA2NmZmLCQwMDAwMjE1OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDIxNTQ0MjgyLCQ3NjAyNGJlZQorCWRjLmwJJGZmNzQzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMWQsJDM0MDI0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDQxZWVmZjc4LCQyZDQ4ZmZiNAorCWRjLmwJJDYxZmYwMDAwLCQyMGUwNGEwMCwkNjZmZjAwMDAsJDIxMDY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMjEwMiwkMjI0ZTQyODIKKwlkYy5sCSQ3NjAyNGRlOSwkZmY3NDMzN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZTlmZmZmLCRmZjgwNGMxZSwkMzQwMjQyZTksJGZmN2U0OGU5CisJZGMubAkkZmZmZmZmYzAsJDIzN2MwMDAwLCQwMDA0ZmY4YywkNDFlOWZmNzgKKwlkYy5sCSQyMzQ4ZmZiOCwkMmM0OTYxZmYsJDAwMDAyMDhhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyMGIwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMjBhYzQyODIsJDc2MDIyMDRmLCQ0ZmVlZmY3NCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzFmMzQwMgorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzQzZWUsJGZmNzgyZDQ5LCRmZmJjMmU0OCwkNjFmZjAwMDAKKwlkYy5sCSQyMDM0NGEwMCwkNjZmZjAwMDAsJDIwNWE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMjA1NiwkNDI4Mjc2MDIsJDQzZWVlZjc0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzI5MzQwMiwkMTAwMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDFmZTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDIwMGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMjAwYSwkNDI4Mjc2MDIsJDQ1ZWVlZjc0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMmEzNDAyCisJZGMubAkkMTAwMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDFmOWM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDFmYzI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAxZmJlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZWVlZjc0LCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMmIzNDAyLCQxMDAwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDFmNTA0YTAwLCQ2NmZmMDAwMCwkMWY3NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAxZjcyLCQ0MjgyNzYwMgorCWRjLmwJJDQ5ZWVlZjc0LCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjMmMzNDAyLCQxMDAwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDFmMDQ0YTAwLCQ2NmZmMDAwMCwkMWYyYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxZjI2LCQ0MjgyNzYwMiwkNGJlZWVmNzQKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMmQzNDAyLCQxMDAwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMWViODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMWVkZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxZWRhLCQyMjRlNDI4MiwkNzYwMjRkZTksJGVmNzQzMzdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGU5ZmZmZiwkZmY4MDRjMmUKKwlkYy5sCSQzNDAyMTAwMCwkNDJlOWZmN2UsJDQ4ZTlmZmZmLCRmZmMwMjM3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjMmM0OSwkNjFmZjAwMDAsJDFlNjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDFlOGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMWU4YSwkNDI4Mjc2MDIsJDIwNGY0ZmVlLCRlZjc0M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzJmCisJZGMubAkkMzQwMjEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzJlNDgsJDYxZmYwMDAwLCQxZTE4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQxZTNlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDFlM2EsJDQyODI3NjAyLCQ0MWVlMGY3NCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzI4MzQwMgorCWRjLmwJJGYwMDA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQxZGNjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxZGYyNTJhZSwkZmY3ODYwMDQsJDAwMDAwMDAyLCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQxZGU4NDI4MiwkNzYwMjNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYSwkMzQwMmZmZGEKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMWQ3ZSwkNGEwMDY2ZmYsJDAwMDAxZGE0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMWRhMDQyODIKKwlkYy5sCSQ3NjAyNDdlZSwkZmY3NDc4ZjAsJDNkN2MwMDAwLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzMzM0MDIsJDQwMTA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMWQzMDRhMDAsJDY2ZmYwMDAwLCQxZDU2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDFkNTIsJDQyODI3NjAyCisJZGMubAkkNDdlZWZmNzQsJDc4ZjgzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMzMsJDM0MDI0MjEwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDFjZTIsJDRhMDA2NmZmLCQwMDAwMWQwOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDFkMDQ0MjgyLCQ3NjAyNDdlZQorCWRjLmwJJGZmNzQ3OGZjLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjMzMzNDAyLCQ0NDEwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDFjOTQ0YTAwLCQ2NmZmMDAwMCwkMWNiYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxY2I2LCQ0MjgyNzYwMiwkNDdlZWZmNzQKKwlkYy5sCSQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzMzLCQzNDAyNDYxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDFjNDYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDFjNmMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQxYzY4NDI4MiwkNzYwMjQ3ZWUsJGZmNzQ3OGYwCisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzMzMzQwMiwkNDgxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDFiZjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDFjMWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMWMxYSwkNDI4Mjc2MDIsJDQ3ZWVmZjc0LCQ3OGY4M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzMzCisJZGMubAkkMzQwMjRhMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxYmFhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAxYmQwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMWJjYzQyODIsJDc2MDI0N2VlLCRmZjc0NzhmYywkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzMzMzQwMgorCWRjLmwJJDRjMTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQxYjVjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxYjgyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMWI3ZQorCWRjLmwJJDQyODI3NjAyLCQ0N2VlZmY3NCwkNzhmZTNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMywkMzQwMjRlMTAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMWIwZSwkNGEwMDY2ZmYsJDAwMDAxYjM0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMWIzMDQyODIKKwlkYy5sCSQ3NjAyNDdlZSwkZmY3NDI4N2MsJDAwMDAwMDAyLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzMzNDAyCisJZGMubAkkY2VmMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDFhYmM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDFhZTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAxYWRlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZWVmZjc0LCQyODdjMDAwMCwkMDAwMjNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMworCWRjLmwJJDM0MDIwNzUwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMWE2YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMWE5MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDFhOGM0MjgyLCQ3NjAyNDdlZSwkZmY3NDI4NGIsJGQ5ZmMwMDAwCisJZGMubAkkMDAxMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzMCwkMzQwMmM5YTAsJGZmZjA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMWExNDRhMDAsJDY2ZmYwMDAwLCQxYTNhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDFhMzYsJDQyODI3NjAyLCQ0N2VlZmY3NAorCWRjLmwJJDI4N2MwMDAwLCQwMDAyM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzMzLCQzNDAyY2VmMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxOWMyLCQ0YTAwNjZmZiwkMDAwMDE5ZTgsJDUyYWVmZjc4CisJZGMubAkkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MCwkMDAwMDE5ZGUKKwlkYy5sCSQ0MjgyNzYwMiwkNDdlZWZmNzQsJDc4ZjAzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0MGU0CisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDE5NmUsJDRhMDA2NmZmLCQwMDAwMTk5NAorCWRjLmwJJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDE5OGEsJDQyODI3NjAyLCQ0MWVlZmY3NCwkNzhmODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0MmU0LCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTkxYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTk0MCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTkzNiwkNDI4Mjc2MDIsJDQxZWVmZjc0CisJZGMubAkkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwNGMzYiwkMzQwMjQ0ZTQsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxOGM2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAxOGVjLCQ1MmFlZmY3OCwkNjAwNDAwMDAKKwlkYy5sCSQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxOGUyLCQ0MjgyNzYwMgorCWRjLmwJJDQxZWVmZjc0LCQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODA0YzNiLCQzNDAyNDZlNCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxODcyLCQ0YTAwNjZmZiwkMDAwMDE4OTgsJDUyYWVmZjc4CisJZGMubAkkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MCwkMDAwMDE4OGUKKwlkYy5sCSQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZjAzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjM2IsJDM0MDI0OGU0CisJZGMubAkkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDE4MWUsJDRhMDA2NmZmLCQwMDAwMTg0NAorCWRjLmwJJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDE4M2EsJDQyODI3NjAyLCQ0MWVlZmY3NCwkNzhmODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0YWU0LCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTdjYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTdmMCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTdlNiwkNDI4Mjc2MDIsJDQxZWVmZjc0CisJZGMubAkkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwNGMzYiwkMzQwMjRjZTQsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxNzc2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAxNzljLCQ1MmFlZmY3OCwkNjAwNDAwMDAKKwlkYy5sCSQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxNzkyLCQ0MjgyNzYwMgorCWRjLmwJJDQxZWVmZjc0LCQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODA0YzNiLCQzNDAyNGVlNCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxNzIyLCQ0YTAwNjZmZiwkMDAwMDE3NDgsJDUyYWVmZjc4CisJZGMubAkkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MCwkMDAwMDE3M2UKKwlkYy5sCSQ0MjgyNzYwMiwkNDdlZWZmNzQsJDI4N2NmZmZmLCRmZmZlM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiCisJZGMubAkkMzQwMmNlZTAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxNmNhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAxNmYwLCQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxNmU2LCQ0MjgyNzYwMiwkNDdlZWZmNzQKKwlkYy5sCSQyODdjMDAwMCwkMDAwMjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjA3NjAsJGZmZDA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMTY3MDRhMDAsJDY2ZmYwMDAwLCQxNjk2NTJhZQorCWRjLmwJJGZmNzg1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAxNjhlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZjlmZmZmLCRmZjc0Mjg3YywkMDAwMDAwMDIKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjM2IzNDAyLCRjZjMwMDAwMCwkMDAwYTQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjAwNDAwMDAKKwlkYy5sCSQwMDAyNjFmZiwkMDAwMDE2MGUsJDRhMDA2NmZmLCQwMDAwMTYzNAorCWRjLmwJJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDE2MmEsJDQyODI3NjAyLCQ0M2VlZmY3NCwkNzhmMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0MGU0LCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTViYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTVlMCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTVkNiwkNDI4Mjc2MDIsJDQxZWVmZjc0CisJZGMubAkkNzhmODNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzYiwkMzQwMjQyZTQsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxNTY2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAxNThjLCQ1MmFlZmY3OCwkNjAwNDAwMDAKKwlkYy5sCSQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxNTgyLCQ0MjgyNzYwMgorCWRjLmwJJDQxZWVmZjc0LCQ3OGZjM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNDRlNCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxNTEyLCQ0YTAwNjZmZiwkMDAwMDE1MzgsJDUyYWVmZjc4CisJZGMubAkkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MCwkMDAwMDE1MmUKKwlkYy5sCSQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0NmU0CisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDE0YmUsJDRhMDA2NmZmLCQwMDAwMTRlNAorCWRjLmwJJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDE0ZGEsJDQyODI3NjAyLCQ0MWVlZmY3NCwkNzhmMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0OGU0LCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTQ2YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTQ5MCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTQ4NiwkNDI4Mjc2MDIsJDQxZWVmZjc0CisJZGMubAkkNzhmODNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzYiwkMzQwMjRhZTQsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxNDE2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAxNDNjLCQ1MmFlZmY3OCwkNjAwNDAwMDAKKwlkYy5sCSQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxNDMyLCQ0MjgyNzYwMgorCWRjLmwJJDQxZWVmZjc0LCQ3OGZjM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNGNlNCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxM2MyLCQ0YTAwNjZmZiwkMDAwMDEzZTgsJDUyYWVmZjc4CisJZGMubAkkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MCwkMDAwMDEzZGUKKwlkYy5sCSQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0ZWU0CisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDEzNmUsJDRhMDA2NmZmLCQwMDAwMTM5NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEzOTA0MjgyCisJZGMubAkkNzYwMjQxZWUsJGZmNzQ3OGZlLCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjM2IzNDAyLCQ0ZTI2NDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjAwNDAwMDAsJDAwMDI2MWZmLCQwMDAwMTMxYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTM0MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDEzM2M0MjgyLCQ3NjAyNDdlZSwkZWY3NDQ5ZWUsJGZmNzAyODhiCisJZGMubAkkNzhmMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzNCwkMzQwMjQxMjIsJDAwMTAxMDAwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDEyYzIsJDRhMDA2NmZmLCQwMDAwMTJlOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEyZTQ0MjgyLCQ3NjAyNDdlZQorCWRjLmwJJGVmNzQ0OWVlLCRmZjcwMjg4YiwkNzhmODNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjQzMjIKKwlkYy5sCSQwMDEwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDEyNmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDEyOTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMjhjNDI4MiwkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDc4ZmMzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzQsJDM0MDI0NTIyLCQwMDEwMTAwMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxMjEyLCQ0YTAwNjZmZiwkMDAwMDEyMzgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMjM0NDI4MiwkNzYwMjQ3ZWUKKwlkYy5sCSRlZjc0NDllZSwkZmY3MDI4OGIsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDI0NzIyCisJZGMubAkkMDAxMDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxMWJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAxMWUwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMTFkYzQyODIsJDc2MDI0N2VlLCRlZjc0NDllZSwkZmY3MDI4OGIKKwlkYy5sCSQ3OGYwM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzM0LCQzNDAyNDkyMiwkMDAxMDEwMDAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTE2MiwkNGEwMDY2ZmYsJDAwMDAxMTg4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMTE4NDQyODIsJDc2MDI0N2VlCisJZGMubAkkZWY3NDQ5ZWUsJGZmNzAyODhiLCQ3OGY4M2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzM0LCQzNDAyNGIyMgorCWRjLmwJJDAwMTAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTEwYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTEzMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDExMmM0MjgyLCQ3NjAyNDdlZSwkZWY3NDQ5ZWUsJGZmNzAyODhiCisJZGMubAkkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzNCwkMzQwMjRkMjIsJDAwMTAxMDAwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDEwYjIsJDRhMDA2NmZmLCQwMDAwMTBkOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEwZDQ0MjgyLCQ3NjAyNDdlZQorCWRjLmwJJGVmNzQ0OWVlLCRmZjcwMjg4YiwkNzhmZTNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjRmMjIKKwlkYy5sCSQwMDEwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDEwNWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDEwODAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMDdjNDI4MiwkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDc4ZmUzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzQsJDM0MDI0ZjMzLCQwMDAwMDAxMCwkMDAwMDEwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMGZmZSwkNGEwMDY2ZmYsJDAwMDAxMDI0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMTAyMDQyODIKKwlkYy5sCSQ3NjAyNDdlZSwkZWY3NDQ5ZWUsJGZmNzAyODhiLCQ3OGZlM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzM0CisJZGMubAkkMzQwMjA3NTMsJDAwMDAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMGZhNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMGZjYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDBmYzg0MjgyLCQ3NjAyNDdlZSwkZWY3NDQ5ZWUKKwlkYy5sCSRmZjcwMjg4YiwkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjA3NTMsJDAwMDAxMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDBmNGUsJDRhMDA2NmZmLCQwMDAwMGY3NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBmNzA0MjgyCisJZGMubAkkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YiwkNzhmMGQ4OGMKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMzAzNDAyLCQ0OWIzMDAwMCwkMDAxMDAwMDAsJDEwMDA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMGVmMDRhMDAsJDY2ZmYwMDAwLCQwZjE2NTJhZQorCWRjLmwJJGZmNzg1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwZjBlCisJZGMubAkkMjI0ZTQyODIsJDc2MDI0N2U5LCQwZjc0NDllOSwkZmY3MDI4OGIKKwlkYy5sCSQyYzdjZmZmZiwkZmZmZTMzN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZTlmZmZmLCRmZjgwNGMzNCwkMzQwMmVmMjIsJDAwMTBmMDAwCisJZGMubAkkNDJlOWZmN2UsJDQ4ZTlmZmZmLCRmZmMwMjM3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjMmM0OSwkNjFmZjAwMDAsJDBlOGM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDBlYjI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwZWFlCisJZGMubAkkMjI0ZTQyODIsJDc2MDI0N2U5LCQwZjc0NDllOSwkZmY3MDI4OGIKKwlkYy5sCSQyYzdjMDAwMCwkMDAwMjMzN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZTlmZmZmLCRmZjgwNGMzNCwkMzQwMmVmMjIsJGZmZjBmMDAwCisJZGMubAkkNDJlOWZmN2UsJDQ4ZTlmZmZmLCRmZmMwMjM3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjMmM0OSwkNjFmZjAwMDAsJDBlMmM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDBlNTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwZTRlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZWVmZjU0LCQ0OWVlZmY3MCwkMjg4Yjk5ZmMKKwlkYy5sCSQwMDAwMDAxMCwkNzgxMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjQxMjYsJDAwMTAwMDEwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDBkY2UsJDRhMDA2NmZmLCQwMDAwMGRmNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBkZjA0MjgyCisJZGMubAkkNzYwMjQ3ZWUsJGZmNTQ0OWVlLCRmZjcwMjg4YiwkOTlmYzAwMDAKKwlkYy5sCSQwMDEwNzgwOCwkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzM0MzQwMiwkNDMyNjAwMTAsJDAwMTA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMGQ3MDRhMDAsJDY2ZmYwMDAwLCQwZDk2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDBkOTIsJDQyODI3NjAyCisJZGMubAkkNDdlZWZmNTQsJDQ5ZWVmZjcwLCQyODhiOTlmYywkMDAwMDAwMTAKKwlkYy5sCSQ3ODA0M2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzM0LCQzNDAyNDUyNiwkMDAxMDAwMTAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMGQxMiwkNGEwMDY2ZmYsJDAwMDAwZDM4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMGQzNDQyODIsJDc2MDI0N2VlCisJZGMubAkkZmY1NDQ5ZWUsJGZmNzAyODhiLCQ5OWZjMDAwMCwkMDAxMDc4MDIKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMzQzNDAyLCQ0NzI2MDAxMCwkMDAxMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQwY2I0NGEwMCwkNjZmZjAwMDAsJDBjZGE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMGNkNiwkNDI4Mjc2MDIsJDQ3ZWVmZjU0CisJZGMubAkkNDllZWZmNzAsJDI4OGI5OWZjLCQwMDAwMDAxMCwkNzgxMDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNAorCWRjLmwJJDM0MDI0OTI2LCQwMDEwMDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDBjNTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDBjN2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwYzc4NDI4MiwkNzYwMjQ3ZWUsJGZmNTQ0OWVlCisJZGMubAkkZmY3MDI4OGIsJDk5ZmMwMDAwLCQwMDEwNzgwOCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzM0MzQwMgorCWRjLmwJJDQzMjYwMDEwLCQwMDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMGJmODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMGMxZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAwYzFhLCQ0MjgyNzYwMiwkNDdlZWZmNTQsJDQ5ZWVmZjcwCisJZGMubAkkMjg4Yjk5ZmMsJDAwMDAwMDEwLCQ3ODA0M2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzM0LCQzNDAyNGQyNgorCWRjLmwJJDAwMTAwMDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMGI5YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMGJjMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDBiYmM0MjgyLCQ3NjAyNDdlZSwkZmY1NDQ5ZWUsJGZmNzAyODhiCisJZGMubAkkOTlmYzAwMDAsJDAwMTA3ODAyLCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzQzNDAyLCQ0ZjI2MDAxMAorCWRjLmwJJDAwMTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQwYjNjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwYjYyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMGI1ZQorCWRjLmwJJDQyODI3NjAyLCQ0N2VlZmY1NCwkNDllZWZmNzAsJDI4OGI5OWZjCisJZGMubAkkMDAwMDAwMTAsJDc4MDIzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDI0ZjM3LCQwMDAwMDAxMAorCWRjLmwJJDAwMDAwMDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMGFkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMGIwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDBhZmM0MjgyLCQ3NjAyNDdlZSwkZmY1NDQ5ZWUsJGZmNzAyODhiCisJZGMubAkkNzgwMjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzNCwkMzQwMjA3NTMsJDAwMDAwMDIwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDBhODIsJDRhMDA2NmZmLCQwMDAwMGFhOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBhYTQyMDRmLCQ0MjgyNzYwMgorCWRjLmwJJDQ3ZWVmZjU0LCQ0ZmVlZmY3MCwkMmU4Yjc4MjAsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzNzM0MDIKKwlkYy5sCSQ0OTE1NDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQyZTQ4NjFmZiwkMDAwMDBhMmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDBhNTAsJDUyYWVmZjc4LCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMGE0ODIyNGUsJDQyODI3NjAyLCQ0N2U5ZmY3NAorCWRjLmwJJDRkZTlmZjcwLCQyYzhiZGRmYywkMDAwMDAwMTAsJDJhN2NmZmZmCisJZGMubAkkZmZmZTMzN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlOWZmZmYKKwlkYy5sCSRmZjgwNGMzNiwkMzQwMmRmMjcsJGZmZjAwMDAwLCQwMDEwNDJlOQorCWRjLmwJJGZmN2U0OGU5LCRmZmZmZmZjMCwkMjM3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkMmM0OTYxZmYsJDAwMDAwOWJlLCQ0YTAwNjZmZiwkMDAwMDA5ZTQKKwlkYy5sCSQyMjJlZmY3OCwkNDI4MDRlNzUsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwOWQ4NDI4MiwkNzYwMjQ3ZmEsJGVmNzQ0OWZhCisJZGMubAkkZmY3MDI4OGIsJDc4ZjAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0MTIyLCRmZjgwMTAwMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwOTVlLCQ0YTAwNjZmZiwkMDAwMDA5ODQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwOTgwNDI4MgorCWRjLmwJJDc2MDI0N2ZhLCRlZjc0NDlmYSwkZmY3MDI4OGIsJDc4ZjgzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNDMyMiwkZmY4MDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwOTA2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwOTJjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDkyODQyODIsJDc2MDI0N2ZhLCRlZjc0NDlmYQorCWRjLmwJJGZmNzAyODhiLCQ3OGZjM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNDUyMiwkZmY4MDEwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDhhZSwkNGEwMDY2ZmYsJDAwMDAwOGQ0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDhkMDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZWY3NDQ5ZmEsJGZmNzAyODhiLCQ3OGZlM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiCisJZGMubAkkMzQwMjQ3MjIsJGZmODAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDg1NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDg3YywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDA4Nzg0MjgyLCQ3NjAyNDdmYSwkZWY3NDQ5ZmEKKwlkYy5sCSRmZjcwMjg4YiwkNzhmMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjQ5MjIsJGZmODAxMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDA3ZmUsJDRhMDA2NmZmLCQwMDAwMDgyNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDA4MjA0MjgyCisJZGMubAkkNzYwMjQ3ZmEsJGVmNzQ0OWZhLCRmZjcwMjg4YiwkNzhmODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0YjIyLCRmZjgwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDA3YTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDA3Y2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwN2M4NDI4MiwkNzYwMjQ3ZmEsJGVmNzQ0OWZhCisJZGMubAkkZmY3MDI4OGIsJDc4ZmMzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0ZDIyLCRmZjgwMTAwMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwNzRlLCQ0YTAwNjZmZiwkMDAwMDA3NzQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNzcwNDI4MgorCWRjLmwJJDc2MDI0N2ZhLCRlZjc0NDlmYSwkZmY3MDI4OGIsJDc4ZmUzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNGYyMiwkZmY4MDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwNmY2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwNzFjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDcxODQyODIsJDc2MDI0N2ZhLCRlZjc0NDlmYQorCWRjLmwJJGZmNzAyODhiLCQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNGYzMywkZmZmZmZmODAKKwlkYy5sCSQwMDAwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDA2OWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDA2YzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwNmJjNDI4MiwkNzYwMjQ3ZmEsJGVmNzQ0OWZhLCRmZjcwMjg4YgorCWRjLmwJJDc4ZmUzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDIwNzczLCRmZmZmZmY3MCwkMDAwMDEwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDYzZSwkNGEwMDY2ZmYsJDAwMDAwNjY0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDY2MDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZWY3NDQ5ZmEsJGZmNzAyODhiLCQyODBjM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzMwCisJZGMubAkkMzQwMjQ5OTMsJDAwMDAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDVlNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDYwYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDA2MDg0MjgyLCQ3NjAyNDdmYSwkZWY3NDQ5ZmEKKwlkYy5sCSRmZjcwMjg4YiwkNzhmMGQ4OGMsJDNkN2MwMDAwLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzMDM0MDIsJDQ5YjMwMDAwCisJZGMubAkkMDAxMDAwMDAsJDEwMDA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQwNTg4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQwNWFlNTJhZSwkZmY3ODQyODIsJDc2MDI0N2ZhCisJZGMubAkkZmY3NDQ5ZmEsJGZmNzAyODhiLCQ3OGYwM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzMwLCQzNDAyMDFmMQorCWRjLmwJJGZmZmZmZjcwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDUzYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMDU2MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDA1NWM0MjgyLCQ3NjAyNDdmYSwkMGY3NDQ5ZmEsJGZmNzAyODhiCisJZGMubAkkMmM3YzAwMDAsJDAwMDIzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDJlZjIyLCRmZjYwZjAwMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwNGRlLCQ0YTAwNjZmZiwkMDAwMDA1MDQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNTAwMjA0ZgorCWRjLmwJJDQyODI3NjAyLCQ0N2ZhMGY3NCwkNDlmYWZmNzAsJDI4OGIyZTdjCisJZGMubAkkMDAwMDAwMDIsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMzYjM0MDIsJGZmMjJmZjYwLCRmMDAwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkMmU0ODYxZmYsJDAwMDAwNDdlLCQ0YTAwNjZmZiwkMDAwMDA0YTQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwNGEwNDI4MgorCWRjLmwJJDc2MDI0N2ZhLCRmZjU0NDlmYSwkZmY3MDI4OGIsJDk5ZmMwMDAwCisJZGMubAkkMDAxMDc4MTAsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMzYjM0MDIsJDQxMjZmZjcwLCQwMDEwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDA0MjA0YTAwLCQ2NmZmMDAwMCwkMDQ0NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwNDQyLCQ0MjgyNzYwMgorCWRjLmwJJDQ3ZmFmZjU0LCQ0OWZhZmY3MCwkMjg4Yjk5ZmMsJDAwMDAwMDEwCisJZGMubAkkNzgwODNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzYiwkMzQwMjQzMjYsJGZmNzAwMDEwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDAzYzIsJDRhMDA2NmZmLCQwMDAwMDNlOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDAzZTQ0MjgyLCQ3NjAyNDdmYQorCWRjLmwJJGZmNTQ0OWZhLCRmZjcwMjg4YiwkOTlmYzAwMDAsJDAwMTA3ODA0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzNiMzQwMiwkNDUyNmZmNzAsJDAwMTA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMDM2NDRhMDAsJDY2ZmYwMDAwLCQwMzhhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDAzODYsJDQyODI3NjAyLCQ0N2ZhZmY1NAorCWRjLmwJJDQ5ZmFmZjcwLCQyODhiOTlmYywkMDAwMDAwMTAsJDc4MDIzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNDcyNiwkZmY3MDAwMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwMzA2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwMzJjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDMyODQyODIsJDc2MDI0N2ZhLCRmZjU0NDlmYQorCWRjLmwJJGZmNzAyODhiLCQ5OWZjMDAwMCwkMDAxMDc4MTAsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzYjM0MDIKKwlkYy5sCSQ0OTI2ZmY3MCwkMDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDAyYTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDAyY2U1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMDJjYSwkNDI4Mjc2MDIsJDQ3ZmFmZjU0LCQ0OWZhZmY3MAorCWRjLmwJJDI4OGI5OWZjLCQwMDAwMDAxMCwkNzgwODNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjQzMjYKKwlkYy5sCSRmZjcwMDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDAyNGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDAyNzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwMjZjNDI4MiwkNzYwMjQ3ZmEsJGZmNTQ0OWZhLCRmZjcwMjg4YgorCWRjLmwJJDk5ZmMwMDAwLCQwMDEwNzgwNCwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzNiMzQwMiwkNGQyNmZmNzAKKwlkYy5sCSQwMDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMDFlYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDIxMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDAyMGUKKwlkYy5sCSQ0MjgyNzYwMiwkNDdmYWZmNTQsJDQ5ZmFmZjcwLCQyODhiOTlmYworCWRjLmwJJDAwMDAwMDEwLCQ3ODAyM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNGYyNiwkZmY3MDAwMTAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDE4ZSwkNGEwMDY2ZmYsJDAwMDAwMWI0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDFiMDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZmY1NDQ5ZmEsJGZmNzAyODhiLCQ5OWZjMDAwMAorCWRjLmwJJDAwMTA3ODAyLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjM2IzNDAyLCQ0ZjM3ZmZmZiwkZmY3MDAwMDAKKwlkYy5sCSQwMDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMDEyYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDE1MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDAxNGUKKwlkYy5sCSQ0MjgyNzYwMiwkNDdmYWZmNTQsJDQ5ZmFmZjcwLCQyODhiNzgwMgorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzYjM0MDIsJDA3NzNmZmZmLCRmZjcwMDAwMCwkMDAyMDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDYxZmYwMDAwLCQwMGQwNGEwMCwkNjZmZjAwMDAsJDAwZjY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMDBmMiwkNDI4Mjc2MDIKKwlkYy5sCSQ0N2ZhZmY1NCwkNDlmYWZmNzAsJDI4OGI3ODA0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzAzNDAyCisJZGMubAkkNGZiNWZmZmYsJGZmNzA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQwMDc4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQwMDllNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDAwOWEsJDIwNGY0MjgyLCQ3NjAyNDdmYSwkZmY3NDRkZmEKKwlkYy5sCSRmZjcwMmM4YiwkZGRmYzAwMDAsJDAwMTAyZTdjLCRmZmZmZmZmZQorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzYjM0MDIsJGZmMjdmZjcwLCQwMDAwMDAxMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjMmU0OAorCWRjLmwJJDYxZmYwMDAwLCQwMDEwNGEwMCwkNjZmZjAwMDAsJDAwMzY0MjgwCisJZGMubAkkNGU3NTQxZWUsJGZmODA0M2VlLCRmZmMwNzAwZSwkYjE4OTY2ZmYKKwlkYy5sCSQwMDAwMDAxYywkNTFjOGZmZjYsJDMwMmVmZjdjLCQzMjJlZmY3ZQorCWRjLmwJJGIwNDE2NmZmLCQwMDAwMDAwOCwkNDI4MDRlNzUsJDcwMDE0ZTc1CisJZGMubAkkMjIyZWZmNzgsJDcwMDE0ZTc1LCRhY2FjYWNhYywkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYworCWRjLmwJJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjCisJZGMubAkkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJDJmMDAyMDNhLCRhZmE0NDg3YgorCWRjLmwJJDA5MzBmZmZmLCRhZmEwMjAyZiwkMDAwNDRlNzQsJDAwMDQyZjAwCisJZGMubAkkMjAzYWFmOTIsJDQ4N2IwOTMwLCRmZmZmYWY4YSwkMjAyZjAwMDQKKwlkYy5sCSQ0ZTc0MDAwNCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL29zLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvb3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRkZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL29zLlMKQEAgLTAsMCArMSwzOTYgQEAKK3x+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK3xNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCit8TTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCit8TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK3xQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorfAorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK3wKK3xUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK3xUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorfE1PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK3xJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorfGFuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCit8KElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCit8Cit8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK3xJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKK3woSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorfEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCit8QVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorfE1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCit8Cit8WW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3xzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorfHJlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorfE5vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK3xvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit8fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cit8IG9zLnMKK3wKK3wgVGhpcyBmaWxlIGNvbnRhaW5zOgorfAktIGV4YW1wbGUgIkNhbGwtT3V0InMgcmVxdWlyZWQgYnkgYm90aCB0aGUgSVNQIGFuZCBGUFNQLgorfAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3wgRVhBTVBMRSBDQUxMLU9VVFMJCSMKK3wJCQkJIworfCBfMDYwX2RtZW1fd3JpdGUoKQkJIworfCBfMDYwX2RtZW1fcmVhZCgpCQkjCit8IF8wNjBfaW1lbV9yZWFkKCkJCSMKK3wgXzA2MF9kbWVtX3JlYWRfYnl0ZSgpCQkjCit8IF8wNjBfZG1lbV9yZWFkX3dvcmQoKQkJIworfCBfMDYwX2RtZW1fcmVhZF9sb25nKCkJCSMKK3wgXzA2MF9pbWVtX3JlYWRfd29yZCgpCQkjCit8IF8wNjBfaW1lbV9yZWFkX2xvbmcoKQkJIworfCBfMDYwX2RtZW1fd3JpdGVfYnl0ZSgpCSMKK3wgXzA2MF9kbWVtX3dyaXRlX3dvcmQoKQkjCit8IF8wNjBfZG1lbV93cml0ZV9sb25nKCkJIworfAkJCQkjCit8IF8wNjBfcmVhbF90cmFjZSgpCQkjCit8IF8wNjBfcmVhbF9hY2Nlc3MoKQkJIworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wKK3wgRWFjaCBJTyByb3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIG1lbW9yeSB3cml0ZS9yZWFkIGlzIHRvL2Zyb20gdXNlcgorfCBvciBzdXBlcnZpc29yIGFwcGxpY2F0aW9uIHNwYWNlLiBUaGUgZXhhbXBsZXMgYmVsb3cgdXNlIHNpbXBsZSAibW92ZSIKK3wgaW5zdHJ1Y3Rpb25zIGZvciBzdXBlcnZpc29yIG1vZGUgYXBwbGljYXRpb25zIGFuZCBjYWxsIF9jb3B5aW4oKS9fY29weW91dCgpCit8IGZvciB1c2VyIG1vZGUgYXBwbGljYXRpb25zLgorfCBXaGVuIGluc3RhbGxpbmcgdGhlIDA2MFNQLCB0aGUgX2NvcHlpbigpL19jb3B5b3V0KCkgZXF1aXZhbGVudHMgZm9yIGEKK3wgZ2l2ZW4gb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgYmUgc3Vic3RpdHV0ZWQuCit8Cit8IFRoZSBhZGRyZXNzZXMgd2l0aGluIHRoZSAwNjBTUCBhcmUgZ3VhcmFudGVlZCB0byBiZSBvbiB0aGUgc3RhY2suCit8IFRoZSByZXN1bHQgaXMgdGhhdCBVbml4IHByb2Nlc3NlcyBhcmUgYWxsb3dlZCB0byBzbGVlcCBhcyBhIGNvbnNlcXVlbmNlCit8IG9mIGEgcGFnZSBmYXVsdCBkdXJpbmcgYSBfY29weW91dC4KK3wKK3wgTGludXgvNjhrOiBUaGUgXzA2MF9baWRdbWVtX3tyZWFkLHdyaXRlfV97Ynl0ZSx3b3JkLGxvbmd9IGZ1bmN0aW9ucworfCAoaS5lLiBhbGwgdGhlIGtub3duIGxlbmd0aCA8PSA0KSBhcmUgaW1wbGVtZW50ZWQgYnkgc2luZ2xlIG1vdmVzCit8IHN0YXRlbWVudHMgaW5zdGVhZCBvZiAobW9yZSBleHBlbnNpdmUpIGNvcHl7aW4sb3V0fSBjYWxscywgaWYKK3wgd29ya2luZyBpbiB1c2VyIHNwYWNlCisKK3wKK3wgXzA2MF9kbWVtX3dyaXRlKCk6Cit8Cit8IFdyaXRlcyB0byBkYXRhIG1lbW9yeSB3aGlsZSBpbiBzdXBlcnZpc29yIG1vZGUuCit8Cit8IElOUFVUUzoKK3wJYTAgLSBzdXBlcnZpc29yIHNvdXJjZSBhZGRyZXNzCit8CWExIC0gdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CWQwIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorCS5nbG9iYWwJCV8wNjBfZG1lbV93cml0ZQorXzA2MF9kbWVtX3dyaXRlOgorCXN1YnEubAkJIzEsJWQwCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJlcXMJCXVzZXJfd3JpdGUKK3N1cGVyX3dyaXRlOgorCW1vdmUuYgkJKCVhMCkrLCglYTEpKwkJfCBjb3B5IDEgYnl0ZQorCWRicmEJCSVkMCxzdXBlcl93cml0ZQkJfCBxdWl0IGlmIC0tY3RyIDwgMAorCWNsci5sCQklZDEJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCit1c2VyX3dyaXRlOgorCW1vdmUuYgkJKCVhMCkrLCVkMQkJfCBjb3B5IDEgYnl0ZQorY29weW91dGFlOgorCW1vdnMuYgkJJWQxLCglYTEpKworCWRicmEJCSVkMCx1c2VyX3dyaXRlCQl8IHF1aXQgaWYgLS1jdHIgPCAwCisJY2xyLmwJCSVkMQkJCXwgcmV0dXJuIHN1Y2Nlc3MKKwlydHMKKworfAorfCBfMDYwX2ltZW1fcmVhZCgpLCBfMDYwX2RtZW1fcmVhZCgpOgorfAorfCBSZWFkcyBmcm9tIGRhdGEvaW5zdHJ1Y3Rpb24gbWVtb3J5IHdoaWxlIGluIHN1cGVydmlzb3IgbW9kZS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgc291cmNlIGFkZHJlc3MKK3wJYTEgLSBzdXBlcnZpc29yIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wJZDAgLSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorfAkweDQoJWE2KSxiaXQ1IC0gMSA9IHN1cGVydmlzb3IgbW9kZSwgMCA9IHVzZXIgbW9kZQorfCBPVVRQVVRTOgorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKKwkuZ2xvYmFsCQlfMDYwX2ltZW1fcmVhZAorCS5nbG9iYWwJCV8wNjBfZG1lbV9yZWFkCitfMDYwX2ltZW1fcmVhZDoKK18wNjBfZG1lbV9yZWFkOgorCXN1YnEubAkJIzEsJWQwCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJlcXMJCXVzZXJfcmVhZAorc3VwZXJfcmVhZDoKKwltb3ZlLmIJCSglYTApKywoJWExKSsJCXwgY29weSAxIGJ5dGUKKwlkYnJhCQklZDAsc3VwZXJfcmVhZAkJfCBxdWl0IGlmIC0tY3RyIDwgMAorCWNsci5sCQklZDEJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCit1c2VyX3JlYWQ6Citjb3B5aW5hZToKKwltb3ZzLmIJCSglYTApKywlZDEKKwltb3ZlLmIJCSVkMSwoJWExKSsJCXwgY29weSAxIGJ5dGUKKwlkYnJhCQklZDAsdXNlcl9yZWFkCQl8IHF1aXQgaWYgLS1jdHIgPCAwCisJY2xyLmwJCSVkMQkJCXwgcmV0dXJuIHN1Y2Nlc3MKKwlydHMKKworfAorfCBfMDYwX2RtZW1fcmVhZF9ieXRlKCk6Cit8Cit8IFJlYWQgYSBkYXRhIGJ5dGUgZnJvbSB1c2VyIG1lbW9yeS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgc291cmNlIGFkZHJlc3MKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDAgLSBkYXRhIGJ5dGUgaW4gZDAKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3JlYWRfYnl0ZQorXzA2MF9kbWVtX3JlYWRfYnl0ZToKKwljbHIubAkJJWQwCQkJfCBjbGVhciB3aG9sZSBsb25nd29yZAorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJuZXMJCWRtcmJzCQkJfCBzdXBlcnZpc29yCitkbXJidWFlOm1vdnMuYgkJKCVhMCksJWQwCQl8IGZldGNoIHVzZXIgYnl0ZQorCXJ0cworZG1yYnM6CW1vdmUuYgkJKCVhMCksJWQwCQl8IGZldGNoIHN1cGVyIGJ5dGUKKwlydHMKKworfAorfCBfMDYwX2RtZW1fcmVhZF93b3JkKCk6Cit8Cit8IFJlYWQgYSBkYXRhIHdvcmQgZnJvbSB1c2VyIG1lbW9yeS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgc291cmNlIGFkZHJlc3MKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDAgLSBkYXRhIHdvcmQgaW4gZDAKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8Cit8IF8wNjBfaW1lbV9yZWFkX3dvcmQoKToKK3wKK3wgUmVhZCBhbiBpbnN0cnVjdGlvbiB3b3JkIGZyb20gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQwIC0gaW5zdHJ1Y3Rpb24gd29yZCBpbiBkMAorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKKwkuZ2xvYmFsCQlfMDYwX2RtZW1fcmVhZF93b3JkCisJLmdsb2JhbAkJXzA2MF9pbWVtX3JlYWRfd29yZAorXzA2MF9kbWVtX3JlYWRfd29yZDoKK18wNjBfaW1lbV9yZWFkX3dvcmQ6CisJY2xyLmwJCSVkMQkJCXwgYXNzdW1lIHN1Y2Nlc3MKKwljbHIubAkJJWQwCQkJfCBjbGVhciB3aG9sZSBsb25nd29yZAorCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwlibmVzCQlkbXJ3cwkJCXwgc3VwZXJ2aXNvcgorZG1yd3VhZTptb3ZzLncJCSglYTApLCAlZDAJCXwgZmV0Y2ggdXNlciB3b3JkCisJcnRzCitkbXJ3czoJbW92ZS53CQkoJWEwKSwgJWQwCQl8IGZldGNoIHN1cGVyIHdvcmQKKwlydHMKKworfAorfCBfMDYwX2RtZW1fcmVhZF9sb25nKCk6Cit8CisKK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgc291cmNlIGFkZHJlc3MKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDAgLSBkYXRhIGxvbmd3b3JkIGluIGQwCit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorfCBfMDYwX2ltZW1fcmVhZF9sb25nKCk6Cit8Cit8IFJlYWQgYW4gaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQgZnJvbSB1c2VyIG1lbW9yeS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgc291cmNlIGFkZHJlc3MKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDAgLSBpbnN0cnVjdGlvbiBsb25nd29yZCBpbiBkMAorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKKwkuZ2xvYmFsCQlfMDYwX2RtZW1fcmVhZF9sb25nCisJLmdsb2JhbAkJXzA2MF9pbWVtX3JlYWRfbG9uZworXzA2MF9kbWVtX3JlYWRfbG9uZzoKK18wNjBfaW1lbV9yZWFkX2xvbmc6CisJY2xyLmwJCSVkMQkJCXwgYXNzdW1lIHN1Y2Nlc3MKKwlidHN0CQkjMHg1LDB4NCglYTYpCQl8IGNoZWNrIGZvciBzdXBlcnZpc29yIHN0YXRlCisJYm5lcwkJZG1ybHMJCQl8IHN1cGVydmlzb3IKK2Rtcmx1YWU6bW92cy5sCQkoJWEwKSwlZDAJCXwgZmV0Y2ggdXNlciBsb25nd29yZAorCXJ0cworZG1ybHM6CW1vdmUubAkJKCVhMCksJWQwCQl8IGZldGNoIHN1cGVyIGxvbmd3b3JkCisJcnRzCisKK3wKK3wgXzA2MF9kbWVtX3dyaXRlX2J5dGUoKToKK3wKK3wgV3JpdGUgYSBkYXRhIGJ5dGUgdG8gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wJZDAgLSBkYXRhIGJ5dGUgaW4gZDAKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3dyaXRlX2J5dGUKK18wNjBfZG1lbV93cml0ZV9ieXRlOgorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJuZXMJCWRtd2JzCQkJfCBzdXBlcnZpc29yCitkbXdidWFlOm1vdnMuYgkJJWQwLCglYTApCQl8IHN0b3JlIHVzZXIgYnl0ZQorCXJ0cworZG13YnM6CW1vdmUuYgkJJWQwLCglYTApCQl8IHN0b3JlIHN1cGVyIGJ5dGUKKwlydHMKKworfAorfCBfMDYwX2RtZW1fd3JpdGVfd29yZCgpOgorfAorfCBXcml0ZSBhIGRhdGEgd29yZCB0byB1c2VyIG1lbW9yeS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIGRhdGEgd29yZCBpbiBkMAorfAkweDQoJWE2KSxiaXQ1IC0gMSA9IHN1cGVydmlzb3IgbW9kZSwgMCA9IHVzZXIgbW9kZQorfCBPVVRQVVRTOgorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKKwkuZ2xvYmFsCQlfMDYwX2RtZW1fd3JpdGVfd29yZAorXzA2MF9kbWVtX3dyaXRlX3dvcmQ6CisJY2xyLmwJCSVkMQkJCXwgYXNzdW1lIHN1Y2Nlc3MKKwlidHN0CQkjMHg1LDB4NCglYTYpCQl8IGNoZWNrIGZvciBzdXBlcnZpc29yIHN0YXRlCisJYm5lcwkJZG13d3MJCQl8IHN1cGVydmlzb3IKK2Rtd3d1OgorZG13d3VhZTptb3ZzLncJCSVkMCwoJWEwKQkJfCBzdG9yZSB1c2VyIHdvcmQKKwlicmFzCQlkbXd3cgorZG13d3M6CW1vdmUudwkJJWQwLCglYTApCQl8IHN0b3JlIHN1cGVyIHdvcmQKK2Rtd3dyOgljbHIubAkJJWQxCQkJfCByZXR1cm4gc3VjY2VzcworCXJ0cworCit8Cit8IF8wNjBfZG1lbV93cml0ZV9sb25nKCk6Cit8Cit8IFdyaXRlIGEgZGF0YSBsb25nd29yZCB0byB1c2VyIG1lbW9yeS4KK3wKK3wgSU5QVVRTOgorfAlhMCAtIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIGRhdGEgbG9uZ3dvcmQgaW4gZDAKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3dyaXRlX2xvbmcKK18wNjBfZG1lbV93cml0ZV9sb25nOgorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJuZXMJCWRtd2xzCQkJfCBzdXBlcnZpc29yCitkbXdsdWFlOm1vdnMubAkJJWQwLCglYTApCQl8IHN0b3JlIHVzZXIgbG9uZ3dvcmQKKwlydHMKK2Rtd2xzOgltb3ZlLmwJCSVkMCwoJWEwKQkJfCBzdG9yZSBzdXBlciBsb25nd29yZAorCXJ0cworCisKKyNpZiAwCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfAorfCBVc2UgdGhlc2Ugcm91dGluZXMgaWYgeW91ciBrZXJuZWwgZG9lc24ndCBoYXZlIF9jb3B5b3V0L19jb3B5aW4gZXF1aXZhbGVudHMuCit8IEFzc3VtZXMgdGhhdCBEMC9EMS9BMC9BMSBhcmUgc2NyYXRjaCByZWdpc3RlcnMuIFRoZSBfY29weWluL19jb3B5b3V0Cit8IGJlbG93IGFzc3VtZSB0aGF0IHRoZSBTRkMvREZDIGhhdmUgYmVlbiBzZXQgcHJldmlvdXNseS4KK3wKK3wgTGludXgvNjhrOiBUaGVzZSBhcmUgYmFzaWNhbGx5IG5vbi1pbmxpbmVkIHZlcnNpb25zIG9mCit8IG1lbWNweV97dG8sZnJvbX1mcywgYnV0IHdpdGhvdXQgbG9uZy10cmFuc2ZlciBvcHRpbWl6YXRpb24KK3wgTm90ZTogQXNzdW1lZCB0aGF0IFNGQy9ERkMgYXJlIHBvaW50aW5nIGNvcnJlY3RseSB0byB1c2VyIGRhdGEKK3wgc3BhY2UuLi4gU2hvdWxkIGJlIHJpZ2h0LCBvciBhcmUgdGhlcmUgYW55IGV4Y2VwdGlvbnM/CisKK3wKK3wgaW50IF9jb3B5b3V0KHN1cGVydmlzb3JfYWRkciwgdXNlcl9hZGRyLCBuYnl0ZXMpCit8CisJLmdsb2JhbAkJX2NvcHlvdXQKK19jb3B5b3V0OgorCW1vdmUubAkJNCglc3ApLCVhMAkJfCBzb3VyY2UKKwltb3ZlLmwJCTgoJXNwKSwlYTEJCXwgZGVzdGluYXRpb24KKwltb3ZlLmwJCTEyKCVzcCksJWQwCQl8IGNvdW50CisJc3VicS5sCQkjMSwlZDAKK21vcmVvdXQ6CisJbW92ZS5iCQkoJWEwKSssJWQxCQl8IGZldGNoIHN1cGVydmlzb3IgYnl0ZQorY29weW91dGFlOgorCW1vdnMuYgkJJWQxLCglYTEpKwkJfCBzdG9yZSB1c2VyIGJ5dGUKKwlkYnJhCQklZDAsbW9yZW91dAkJfCBhcmUgd2UgdGhyb3VnaCB5ZXQ/CisJbW92ZXEJCSMwLCVkMAkJCXwgcmV0dXJuIHN1Y2Nlc3MKKwlydHMKKworfAorfCBpbnQgX2NvcHlpbih1c2VyX2FkZHIsIHN1cGVydmlzb3JfYWRkciwgbmJ5dGVzKQorfAorCS5nbG9iYWwJCV9jb3B5aW4KK19jb3B5aW46CisJbW92ZS5sCQk0KCVzcCksJWEwCQl8IHNvdXJjZQorCW1vdmUubAkJOCglc3ApLCVhMQkJfCBkZXN0aW5hdGlvbgorCW1vdmUubAkJMTIoJXNwKSwlZDAJCXwgY291bnQKKyAgICBzdWJxLmwgICAgICAjMSwlZDAKK21vcmVpbjoKK2NvcHlpbmFlOgorCW1vdnMuYgkJKCVhMCkrLCVkMQkJfCBmZXRjaCB1c2VyIGJ5dGUKKwltb3ZlLmIJCSVkMSwoJWExKSsJCXwgd3JpdGUgc3VwZXJ2aXNvciBieXRlCisJZGJyYQkJJWQwLG1vcmVpbgkJfCBhcmUgd2UgdGhyb3VnaCB5ZXQ/CisJbW92ZXEJCSMwLCVkMAkJCXwgcmV0dXJuIHN1Y2Nlc3MKKwlydHMKKyNlbmRpZgorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wKK3wgXzA2MF9yZWFsX3RyYWNlKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gaW5zdHJ1Y3Rpb24gaXMgYmVpbmcgdHJhY2VkCit8IGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgaGlnaGVyIHByaW9yaXR5IGV4Y2VwdGlvbnMgcGVuZGluZyBmb3IgdGhpcyBpbnN0cnVjdGlvbgorfCBvciB0aGV5IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KK3wKK3wgVGhlIHNhbXBsZSBjb2RlIGJlbG93IHNpbXBseSBleGVjdXRlcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfdHJhY2UKK18wNjBfcmVhbF90cmFjZToKKwlicmFsCXRyYXAKKworfAorfCBfMDYwX3JlYWxfYWNjZXNzKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgorfCBpcyBlbmNvdW50ZXJlZC4gVGhlIHJvdXRpbmUgYmVsb3cgc2hvdWxkIHBvaW50IHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtCit8IGhhbmRsZXIgZm9yIGFjY2VzcyBlcnJvciBleGNlcHRpb25zLiBUaGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGFuCit8IDgtd29yZCBhY2Nlc3MgZXJyb3IgZnJhbWUuCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBzaW1wbHkgZXhlY3V0ZXMgYW4gInJ0ZSIgaW5zdHJ1Y3Rpb24gd2hpY2gKK3wgaXMgbW9zdCBsaWtlbHkgdGhlIGluY29ycmVjdCB0aGluZyB0byBkbyBhbmQgY291bGQgcHV0IHRoZSBzeXN0ZW0KK3wgaW50byBhbiBpbmZpbml0ZSBsb29wLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9hY2Nlc3MKK18wNjBfcmVhbF9hY2Nlc3M6CisJYnJhbAlidXNlcnIKKworCisKK3wgRXhlY3B0aW9uIGhhbmRsaW5nIGZvciBtb3ZzIGFjY2VzcyB0byBpbGxlZ2FsIG1lbW9yeQorCS5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0cgorCS5ldmVuCisxOgltb3ZlcQkJIy0xLCVkMQorCXJ0cworLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2MKKwkuYWxpZ24gNAorCS5sb25nCWRtcmJ1YWUsMWIKKwkubG9uZwlkbXJ3dWFlLDFiCisJLmxvbmcJZG1ybHVhZSwxYgorCS5sb25nCWRtd2J1YWUsMWIKKwkubG9uZwlkbXd3dWFlLDFiCisJLmxvbmcJZG13bHVhZSwxYgorCS5sb25nCWNvcHlvdXRhZSwxYgorCS5sb25nCWNvcHlpbmFlLDFiCisJLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9wZnBzcC5zYSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9wZnBzcC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjc2YjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3BmcHNwLnNhCkBAIC0wLDAgKzEsMTczMCBAQAorCWRjLmwJJDYwZmYwMDAwLCQxNzQwMDAwMCwkNjBmZjAwMDAsJDE1ZjQwMDAwCisJZGMubAkkNjBmZjAwMDAsJDAyYjYwMDAwLCQ2MGZmMDAwMCwkMDQ3MDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMWIxMDAwMDAsJDYwZmYwMDAwLCQxOWFhMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxYjVhMDAwMCwkNjBmZjAwMDAsJDA2MmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDEwMmMwMDAwLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQyZjAwMjAzYSwkZmYyYzQ4N2IsJDA5MzBmZmZmLCRmZWY4MjAyZgorCWRjLmwJJDAwMDQ0ZTc0LCQwMDA0MmYwMCwkMjAzYWZlZjIsJDQ4N2IwOTMwCisJZGMubAkkZmZmZmZlZTIsJDIwMmYwMDA0LCQ0ZTc0MDAwNCwkMmYwMDIwM2EKKwlkYy5sCSRmZWUwNDg3YiwkMDkzMGZmZmYsJGZlY2MyMDJmLCQwMDA0NGU3NAorCWRjLmwJJDAwMDQyZjAwLCQyMDNhZmVkMiwkNDg3YjA5MzAsJGZmZmZmZWI2CisJZGMubAkkMjAyZjAwMDQsJDRlNzQwMDA0LCQyZjAwMjAzYSwkZmVhNDQ4N2IKKwlkYy5sCSQwOTMwZmZmZiwkZmVhMDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMAorCWRjLmwJJDIwM2FmZTk2LCQ0ODdiMDkzMCwkZmZmZmZlOGEsJDIwMmYwMDA0CisJZGMubAkkNGU3NDAwMDQsJDJmMDAyMDNhLCRmZTdjNDg3YiwkMDkzMGZmZmYKKwlkYy5sCSRmZTc0MjAyZiwkMDAwNDRlNzQsJDAwMDQyZjAwLCQyMDNhZmU3NgorCWRjLmwJJDQ4N2IwOTMwLCRmZmZmZmU1ZSwkMjAyZjAwMDQsJDRlNzQwMDA0CisJZGMubAkkMmYwMDIwM2EsJGZlNjg0ODdiLCQwOTMwZmZmZiwkZmU0ODIwMmYKKwlkYy5sCSQwMDA0NGU3NCwkMDAwNDJmMDAsJDIwM2FmZTU2LCQ0ODdiMDkzMAorCWRjLmwJJGZmZmZmZTMyLCQyMDJmMDAwNCwkNGU3NDAwMDQsJDJmMDAyMDNhCisJZGMubAkkZmU0NDQ4N2IsJDA5MzBmZmZmLCRmZTFjMjAyZiwkMDAwNDRlNzQKKwlkYy5sCSQwMDA0MmYwMCwkMjAzYWZlMzIsJDQ4N2IwOTMwLCRmZmZmZmUwNgorCWRjLmwJJDIwMmYwMDA0LCQ0ZTc0MDAwNCwkMmYwMDIwM2EsJGZlMjA0ODdiCisJZGMubAkkMDkzMGZmZmYsJGZkZjAyMDJmLCQwMDA0NGU3NCwkMDAwNDJmMDAKKwlkYy5sCSQyMDNhZmUxZSwkNDg3YjA5MzAsJGZmZmZmZGRhLCQyMDJmMDAwNAorCWRjLmwJJDRlNzQwMDA0LCQyZjAwMjAzYSwkZmUwYzQ4N2IsJDA5MzBmZmZmCisJZGMubAkkZmRjNDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMCwkMjAzYWZkZmEKKwlkYy5sCSQ0ODdiMDkzMCwkZmZmZmZkYWUsJDIwMmYwMDA0LCQ0ZTc0MDAwNAorCWRjLmwJJDJmMDAyMDNhLCRmZGU4NDg3YiwkMDkzMGZmZmYsJGZkOTgyMDJmCisJZGMubAkkMDAwNDRlNzQsJDAwMDQyZjAwLCQyMDNhZmRkNiwkNDg3YjA5MzAKKwlkYy5sCSRmZmZmZmQ4MiwkMjAyZjAwMDQsJDRlNzQwMDA0LCQyZjAwMjAzYQorCWRjLmwJJGZkYzQ0ODdiLCQwOTMwZmZmZiwkZmQ2YzIwMmYsJDAwMDQ0ZTc0CisJZGMubAkkMDAwNDJmMDAsJDIwM2FmZGIyLCQ0ODdiMDkzMCwkZmZmZmZkNTYKKwlkYy5sCSQyMDJmMDAwNCwkNGU3NDAwMDQsJDJmMDAyMDNhLCRmZGEwNDg3YgorCWRjLmwJJDA5MzBmZmZmLCRmZDQwMjAyZiwkMDAwNDRlNzQsJDAwMDQyZjAwCisJZGMubAkkMjAzYWZkOGUsJDQ4N2IwOTMwLCRmZmZmZmQyYSwkMjAyZjAwMDQKKwlkYy5sCSQ0ZTc0MDAwNCwkMmYwMDIwM2EsJGZkN2M0ODdiLCQwOTMwZmZmZgorCWRjLmwJJGZkMTQyMDJmLCQwMDA0NGU3NCwkMDAwNDJmMDAsJDIwM2FmZDZhCisJZGMubAkkNDg3YjA5MzAsJGZmZmZmY2ZlLCQyMDJmMDAwNCwkNGU3NDAwMDQKKwlkYy5sCSQ0MGM2MmQzOCwkZDNkNjQ2MzQsJDNkNmY5MGFlLCRiMWU3NWNjNworCWRjLmwJJDQwMDAwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNSwkMDAwMDAwMDAKKwlkYy5sCSQzZmU0NWYzMCwkNmRjOWM4ODMsJDRlNTZmZjQwLCRmMzJlZmY2YworCWRjLmwJJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYmMwMGZmNjAsJGYyMmVmMGMwCisJZGMubAkkZmZkYzJkNmUsJGZmNjhmZjQ0LCQyMDZlZmY0NCwkNThhZWZmNDQKKwlkYy5sCSQ2MWZmZmZmZiwkZmYwNDJkNDAsJGZmNDAwODJlLCQwMDA1ZmY0MgorCWRjLmwJJDY2MDAwMTE2LCQ0MWVlZmY2YywkNjFmZjAwMDAsJDA1MWM0MWVlCisJZGMubAkkZmY2YzYxZmYsJDAwMDAyYWVjLCQxZDQwZmY0ZSwkMDgyZTAwMDUKKwlkYy5sCSRmZjQzNjcyNiwkZTllZTAxODMsJGZmNDI2MWZmLCQwMDAwNWNhYworCWRjLmwJJDQxZWVmZjc4LCQ2MWZmMDAwMCwkMmFjYTBjMDAsJDAwMDY2NjA2CisJZGMubAkkNjFmZjAwMDAsJDJhMmUxZDQwLCRmZjRmNDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQxMjJlZmY0MywkMDI0MTAwN2YsJDAyYWUwMGZmLCQwMWZmZmY2NAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwCisJZGMubAkkNDFlZWZmNmMsJDQzZWVmZjc4LCQyMjNiMTUzMCwkMDAwMDE5NzQKKwlkYy5sCSQ0ZWJiMTkzMCwkMDAwMDE5NmMsJGU5ZWUwMTgzLCRmZjQyNjFmZgorCWRjLmwJJDAwMDA1Y2Q4LCQwODJlMDAwNCwkZmY2MjY2MjIsJDA4MmUwMDAxCisJZGMubAkkZmY2MjY2NDQsJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5YzRlNWUsJDYwZmZmZmZmLCRmY2M2ZjIyZQorCWRjLmwJJGYwNDBmZjZjLCQzZDdjZTAwNSwkZmY2ZWYyMmUsJGQwYzBmZmRjCisJZGMubAkkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YywkZjM2ZWZmNmMKKwlkYy5sCSQ0ZTVlNjBmZiwkZmZmZmZjYjIsJGYyMmVmMDQwLCRmZjZjMWQ3YworCWRjLmwJJDAwYzQwMDBiLCQzZDdjZTAwMSwkZmY2ZWYyMmUsJGQwYzBmZmRjCisJZGMubAkkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YywkZjM2ZWZmNmMKKwlkYy5sCSQ0ZTVlNjBmZiwkZmZmZmZjYWUsJDFkN2MwMDAwLCRmZjRlNDI4MAorCWRjLmwJJDEwMmVmZjYzLCQwMmFlZmZmZiwkMDBmZmZmNjQsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyM2M4ODAwLCQwMDAwMDAwMCwkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkMmUwYzA4MmUsJDAwMDRmZjYyLCQ2NjAwZmY3MAorCWRjLmwJJDA4MmUwMDAxLCRmZjYyNjYwMCwkZmY5MGYyMmUsJGQwYzBmZmRjCisJZGMubAkkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YywkNGU1ZTA4MTcKKwlkYy5sCSQwMDA3NjdmZiwkZmZmZmZjMGMsJGYyMmZhNDAwLCQwMDA4M2Y3YworCWRjLmwJJDIwMjQwMDA2LCQ2MGZmZmZmZiwkZmNlYzRlNTYsJGZmNDBmMzJlCisJZGMubAkkZmY2YzQ4ZWUsJDAzMDNmZjljLCRmMjJlYmMwMCwkZmY2MGYyMmUKKwlkYy5sCSRmMGMwZmZkYywkMmQ2ZWZmNjgsJGZmNDQyMDZlLCRmZjQ0NThhZQorCWRjLmwJJGZmNDQ2MWZmLCRmZmZmZmQ0MiwkMmQ0MGZmNDAsJDA4MmUwMDA1CisJZGMubAkkZmY0MjY2MDAsJDAxMzI0MWVlLCRmZjZjNjFmZiwkMDAwMDAzNWEKKwlkYy5sCSQ0MWVlZmY2YywkNjFmZjAwMDAsJDI5MmExZDQwLCRmZjRlMDgyZQorCWRjLmwJJDAwMDVmZjQzLCQ2NzJlMDgyZSwkMDAwNGZmNDMsJDY2MjZlOWVlCisJZGMubAkkMDE4M2ZmNDIsJDYxZmYwMDAwLCQ1YWUyNDFlZSwkZmY3ODYxZmYKKwlkYy5sCSQwMDAwMjkwMCwkMGMwMDAwMDYsJDY2MDY2MWZmLCQwMDAwMjg2NAorCWRjLmwJJDFkNDBmZjRmLCQ0MjgwMTAyZSwkZmY2MzEyMmUsJGZmNDMwMjQxCisJZGMubAkkMDA3ZjAyYWUsJDAwZmYwMWZmLCRmZjY0ZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDAwZjIzYywkODgwMDAwMDAsJDAwMDA0MWVlLCRmZjZjNDNlZQorCWRjLmwJJGZmNzgyMjNiLCQxNTMwMDAwMCwkMTdhYTRlYmIsJDE5MzAwMDAwCisJZGMubAkkMTdhMmU5ZWUsJDAxODNmZjQyLCQ2MWZmMDAwMCwkNWIwZTA4MmUKKwlkYy5sCSQwMDAzZmY2MiwkNjYyMjA4MmUsJDAwMDFmZjYyLCQ2NjRlZjIyZQorCWRjLmwJJGQwYzBmZmRjLCRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljCisJZGMubAkkNGU1ZTYwZmYsJGZmZmZmYWZjLCQwODJlMDAwMywkZmY2NjY3MDAKKwlkYy5sCSRmZmQ2ZjIyZSwkZjA0MGZmNmMsJDNkN2NlMDAzLCRmZjZlZjIyZQorCWRjLmwJJGQwYzBmZmRjLCRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljCisJZGMubAkkZjM2ZWZmNmMsJDRlNWU2MGZmLCRmZmZmZmFmNCwkMDgyZTAwMDEKKwlkYy5sCSRmZjY2NjcwMCwkZmZhYWYyMmUsJGYwNDBmZjZjLCQxZDdjMDBjNAorCWRjLmwJJDAwMGIzZDdjLCRlMDAxZmY2ZSwkZjIyZWQwYzAsJGZmZGNmMjJlCisJZGMubAkkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljZjM2ZSwkZmY2YzRlNWUKKwlkYy5sCSQ2MGZmZmZmZiwkZmFkMDFkN2MsJDAwMDBmZjRlLCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMwMmFlLCRmZmZmMDBmZiwkZmY2NGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMGYyM2MsJDg4MDAwMDAwLCQwMDAwNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwMmMyZSwkMDgyZTAwMDMsJGZmNjI2NjAwLCRmZjY2MDgyZQorCWRjLmwJJDAwMDFmZjYyLCQ2NjAwZmY5MCwkZjIyZWQwYzAsJGZmZGNmMjJlCisJZGMubAkkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljNGU1ZSwkMDgxNzAwMDcKKwlkYy5sCSQ2N2ZmZmZmZiwkZmEyZWYyMmYsJGE0MDAwMDA4LCQzZjdjMjAyNAorCWRjLmwJJDAwMDY2MGZmLCRmZmZmZmIwZSwkNGU1NmZmNDAsJGYzMmVmZjZjCisJZGMubAkkNDhlZTAzMDMsJGZmOWNmMjJlLCRiYzAwZmY2MCwkZjIyZWYwYzAKKwlkYy5sCSRmZmRjMDgyZSwkMDAwNTAwMDQsJDY2MDg0ZTY4LCQyZDQ4ZmZkOAorCWRjLmwJJDYwMDg0MWVlLCQwMDEwMmQ0OCwkZmZkODJkNmUsJGZmNjhmZjQ0CisJZGMubAkkMjA2ZWZmNDQsJDU4YWVmZjQ0LCQ2MWZmZmZmZiwkZmI0YzJkNDAKKwlkYy5sCSRmZjQwNDIyZSwkZmY0YTA4MmUsJDAwMDVmZjQyLCQ2NjAwMDIwOAorCWRjLmwJJGU5ZWUwMDA2LCRmZjQyMGMwMCwkMDAxMzY3MDAsJDA0OWUwMmFlCisJZGMubAkkMDBmZjAwZmYsJGZmNjRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMDQxZWUsJGZmNmM2MWZmLCQwMDAwMDEzYQorCWRjLmwJJDQxZWVmZjZjLCQ2MWZmMDAwMCwkMjcwYTBjMDAsJDAwMDY2NjA2CisJZGMubAkkNjFmZjAwMDAsJDI2NmUxZDQwLCRmZjRlZTllZSwkMDE4M2ZmNDIKKwlkYy5sCSQwODJlMDAwNSwkZmY0MzY3MjgsJDBjMmUwMDNhLCRmZjQzNjcyMAorCWRjLmwJJDYxZmYwMDAwLCQ1OGI2NDFlZSwkZmY3ODYxZmYsJDAwMDAyNmQ0CisJZGMubAkkMGMwMDAwMDYsJDY2MDY2MWZmLCQwMDAwMjYzOCwkMWQ0MGZmNGYKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2M2U5ZWUsJDEwNDdmZjQzLCQ0MWVlZmY2YworCWRjLmwJJDQzZWVmZjc4LCQyMjNiMWQzMCwkMDAwMDE1OTgsJDRlYmIxOTMwCisJZGMubAkkMDAwMDE1OTAsJDEwMmVmZjYyLCQ2NjM0MTAyZSwkZmY0MzAyMDAKKwlkYy5sCSQwMDM4MGMwMCwkMDAzODY3MGMsJGU5ZWUwMTgzLCRmZjQyNjFmZgorCWRjLmwJJDAwMDA1OGU4LCRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwCisJZGMubAkkNGNlZTAzMDMsJGZmOWM0ZTVlLCQ2MGZmZmZmZiwkZjhlNmMwMmUKKwlkYy5sCSRmZjY2ZWRjMCwkMDYwODY2MTQsJDA4MmUwMDA0LCRmZjY2NjdiYQorCWRjLmwJJDA4MmUwMDAxLCRmZjYyNjdiMiwkNjAwMDAwNjYsJDA0ODAwMDAwCisJZGMubAkkMDAxODBjMDAsJDAwMDY2NjE0LCQwODJlMDAwMywkZmY2NjY2MDAKKwlkYy5sCSQwMDRhMDgyZSwkMDAwNGZmNjYsJDY2MDAwMDQ2LCQyZjAwNjFmZgorCWRjLmwJJDAwMDAwN2UwLCQyMDFmM2Q3YiwkMDIyMmZmNmUsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5Y2YzNmUKKwlkYy5sCSRmZjZjNGU1ZSwkNjBmZmZmZmYsJGY4N2FlMDAwLCRlMDA2ZTAwNAorCWRjLmwJJGUwMDVlMDAzLCRlMDAyZTAwMSwkZTAwMTMwM2MsJDAwMDQ2MGJjCisJZGMubAkkMzAzYzAwMDMsJDYwYjZlOWVlLCQwMDA2ZmY0MiwkMGMwMDAwMTEKKwlkYy5sCSQ2NzA4MGMwMCwkMDAxNTY3NTAsJDRlNzUzMDI4LCQwMDAwMDI0MAorCWRjLmwJJDdmZmYwYzQwLCQzZjgwNjcwOCwkMGM0MDQwN2YsJDY3MmM0ZTc1CisJZGMubAkkMDJhODdmZmYsJGZmZmYwMDA0LCQ2NzE4NjFmZiwkMDAwMDI0Y2MKKwlkYy5sCSQ0NDQwMDY0MCwkM2Y4MTAyNjgsJDgwMDAwMDAwLCQ4MTY4MDAwMAorCWRjLmwJJDRlNzUwMjY4LCQ4MDAwMDAwMCwkNGU3NTAyMjgsJDAwN2YwMDA0CisJZGMubAkkMDA2ODdmZmYsJDAwMDA0ZTc1LCQzMDI4MDAwMCwkMDI0MDdmZmYKKwlkYy5sCSQwYzQwM2MwMCwkNjcwODBjNDAsJDQzZmY2N2RlLCQ0ZTc1MDJhOAorCWRjLmwJJDdmZmZmZmZmLCQwMDA0NjYwNiwkNGFhODAwMDgsJDY3YzQ2MWZmCisJZGMubAkkMDAwMDI0NzgsJDQ0NDAwNjQwLCQzYzAxMDI2OCwkODAwMDAwMDAKKwlkYy5sCSQ4MTY4MDAwMCwkNGU3NWU5ZWUsJDAwYzNmZjQyLCQwYzAwMDAwMworCWRjLmwJJDY3MDAwNGEyLCQwYzAwMDAwNywkNjcwMDA0OWEsJDAyYWVmZmZmCisJZGMubAkkMDBmZmZmNjQsJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkMzAyZWZmNmMsJDAyNDA3ZmZmLCQ2NzEwNDFlZQorCWRjLmwJJGZmNmM2MWZmLCQwMDAwMjQ2YywkMWQ0MGZmNGUsJDYwMDYxZDdjCisJZGMubAkkMDAwNGZmNGUsJDQyODAxMDJlLCRmZjYzNDFlZSwkZmY2YzJkNTYKKwlkYy5sCSRmZmQ0NjFmZiwkMDAwMDI5MmEsJDEwMmVmZjYyLCQ2NjAwMDA4NgorCWRjLmwJJDJjYWVmZmQ0LCQwODJlMDAwNSwkMDAwNDY2MjYsJDIwNmVmZmQ4CisJZGMubAkkNGU2MGYyMmUsJGQwYzBmZmRjLCRmMjJlOWMwMCwkZmY2MDRjZWUKKwlkYy5sCSQwMzAzZmY5YywkNGU1ZTA4MTcsJDAwMDc2NjdhLCQ2MGZmZmZmZgorCWRjLmwJJGY3MjIwYzJlLCQwMDA4ZmY0YSwkNjZkOGYyMmUsJGYwODBmZjZjCisJZGMubAkkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljMmM1NiwkMmY2ZjAwYzQsJDAwYjgyZjZmLCQwMGM4MDBiYworCWRjLmwJJDJmNmYwMDJjLCQwMGM0MmY2ZiwkMDAzMDAwYzgsJDJmNmYwMDM0CisJZGMubAkkMDBjY2RmZmMsJDAwMDAwMGI4LCQwODE3MDAwNywkNjYyODYwZmYKKwlkYy5sCSRmZmZmZjZkMCwkYzAyZWZmNjYsJGVkYzAwNjA4LCQ2NjJhMDgyZQorCWRjLmwJJDAwMDRmZjY2LCQ2NzAwZmY2YSwkMDgyZTAwMDEsJGZmNjI2NzAwCisJZGMubAkkZmY2MDYwMDAsJDAxNjYzZjdjLCQyMDI0MDAwNiwkZjIyZmE0MDAKKwlkYy5sCSQwMDA4NjBmZiwkZmZmZmY3OGUsJDA0ODAwMDAwLCQwMDE4MzAzYgorCWRjLmwJJDAyMGE0ZWZiLCQwMDA2NGFmYywkMDAwODAwMDAsJDAwMDAwMDNhCisJZGMubAkkMDA2NDAwOTQsJDAwMDAwMTQwLCQwMDAwZjIyZSwkZDBjMGZmZGMKKwlkYy5sCSRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljLCQzZDdjMzBkOAorCWRjLmwJJDAwMGEzZDdjLCRlMDA2ZmY2ZSwkZjM2ZWZmNmMsJDRlNWU2MGZmCisJZGMubAkkZmZmZmY2ZDQsJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5YzNkN2MsJDMwZDAwMDBhLCQzZDdjZTAwNAorCWRjLmwJJGZmNmVmMzZlLCRmZjZjNGU1ZSwkNjBmZmZmZmYsJGY2OTRmMjJlCisJZGMubAkkZjA0MGZmNmMsJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5YzNkN2MsJDMwZDQwMDBhLCQzZDdjZTAwNQorCWRjLmwJJGZmNmVmMzZlLCRmZjZjNGU1ZSwkNjBmZmZmZmYsJGY2MGMyY2FlCisJZGMubAkkZmZkNDA4MmUsJDAwMDUwMDA0LCQ2NjAwMDAzOCwkMjA2ZWZmZDgKKwlkYy5sCSQ0ZTYwZjIyZSwkZjA0MGZmNmMsJGYyMmVkMGMwLCRmZmRjZjIyZQorCWRjLmwJJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzNkN2MsJDMwY2MwMDBhCisJZGMubAkkM2Q3Y2UwMDMsJGZmNmVmMzZlLCRmZjZjNGU1ZSwkNjBmZmZmZmYKKwlkYy5sCSRmNWRlMGMyZSwkMDAwOGZmNGEsJDY2YzhmMjJlLCRmMDgwZmY2YworCWRjLmwJJGYyMmVmMDQwLCRmZjc4ZjIyZSwkZDBjMGZmZGMsJGYyMmU5YzAwCisJZGMubAkkZmY2MDRjZWUsJDAzMDNmZjljLCQzZDdjMzBjYywkMDAwYTNkN2MKKwlkYy5sCSRlMDAzZmY3YSwkZjM2ZWZmNzgsJDJjNTYyZjZmLCQwMGM0MDBiOAorCWRjLmwJJDJmNmYwMGM4LCQwMGJjMmY2ZiwkMDBjYzAwYzAsJDJmNmYwMDJjCisJZGMubAkkMDBjNDJmNmYsJDAwMzAwMGM4LCQyZjZmMDAzNCwkMDBjY2RmZmMKKwlkYy5sCSQwMDAwMDBiOCwkNjBmZmZmZmYsJGY1NzZmMjJlLCRmMDQwZmY2YworCWRjLmwJJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzCisJZGMubAkkZmY5YzNkN2MsJDMwYzQwMDBhLCQzZDdjZTAwMSwkZmY2ZWYzNmUKKwlkYy5sCSRmZjZjNGU1ZSwkNjBmZmZmZmYsJGY1NWMwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyM2MsJDg4MDAwMDAwCisJZGMubAkkMDAwMDYxZmYsJDAwMDA1NTQ4LCQ0MWVlZmY2YywkNjFmZjAwMDAKKwlkYy5sCSQyMjcyMWQ0MCwkZmY0ZWU5ZWUsJDAxODNmZjQyLCQwODJlMDAwNQorCWRjLmwJJGZmNDM2NzI4LCQwYzJlMDAzYSwkZmY0MzY3MjAsJDYxZmYwMDAwCisJZGMubAkkNTQyYTQxZWUsJGZmNzg2MWZmLCQwMDAwMjI0OCwkMGMwMDAwMDYKKwlkYy5sCSQ2NjA2NjFmZiwkMDAwMDIxYWMsJDFkNDBmZjRmLCQ0MjgwMTAyZQorCWRjLmwJJGZmNjNlOWVlLCQxMDQ3ZmY0MywkNDFlZWZmNmMsJDQzZWVmZjc4CisJZGMubAkkMjIzYjFkMzAsJDAwMDAxMTBjLCQ0ZWJiMTkzMCwkMDAwMDExMDQKKwlkYy5sCSQxMDJlZmY2MiwkNjYwMDAwOGEsJDEwMmVmZjQzLCQwMjAwMDAzOAorCWRjLmwJJDBjMDAwMDM4LCQ2NzBjZTllZSwkMDE4M2ZmNDIsJDYxZmYwMDAwCisJZGMubAkkNTQ1YTA4MmUsJDAwMDUwMDA0LCQ2NjAwMDAyYSwkMjA2ZWZmZDgKKwlkYy5sCSQ0ZTYwZjIyZSwkZDBjMGZmZGMsJGYyMmU5YzAwLCRmZjYwNGNlZQorCWRjLmwJJDAzMDNmZjljLCQ0ZTVlMDgxNywkMDAwNzY2MDAsJDAxMjY2MGZmCisJZGMubAkkZmZmZmY0NDAsJDA4MmUwMDAyLCRmZjRhNjdkNiwkZjIyZWQwYzAKKwlkYy5sCSRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljNGU1ZQorCWRjLmwJJDJmNmYwMDA0LCQwMDEwMmY2ZiwkMDAwMDAwMGMsJGRmZmMwMDAwCisJZGMubAkkMDAwYzA4MTcsJDAwMDc2NjAwLCQwMGVhNjBmZiwkZmZmZmY0MDQKKwlkYy5sCSRjMDJlZmY2NiwkZWRjMDA2MDgsJDY2MTgwODJlLCQwMDA0ZmY2NgorCWRjLmwJJDY3MDBmZjY2LCQwODJlMDAwMSwkZmY2MjY3MDAsJGZmNWM2MDAwCisJZGMubAkkMDA2ZTA0ODAsJDAwMDAwMDE4LCQwYzAwMDAwNiwkNmQxNDA4MmUKKwlkYy5sCSQwMDAzZmY2NiwkNjYwMDAwNjAsJDA4MmUwMDA0LCRmZjY2NjYwMAorCWRjLmwJJDAwNGUwODJlLCQwMDA1MDAwNCwkNjYwMDAwNTQsJDIwNmVmZmQ4CisJZGMubAkkNGU2MDNkN2IsJDAyMmFmZjZlLCRmMjJlZDBjMCwkZmZkY2YyMmUKKwlkYy5sCSQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWNmMzZlLCRmZjZjNGU1ZQorCWRjLmwJJDA4MTcwMDA3LCQ2NjAwMDA2YywkNjBmZmZmZmYsJGYzODZlMDAwCisJZGMubAkkZTAwNmUwMDQsJGUwMDVlMDAzLCRlMDAyZTAwMSwkZTAwMTMwM2MKKwlkYy5sCSQwMDAzNjAwMCwkZmZhZTMwM2MsJDAwMDQ2MDAwLCRmZmE2MDgyZQorCWRjLmwJJDAwMDJmZjRhLCQ2N2FjM2Q3YiwkMDJkNmZmNmUsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5Y2YzNmUKKwlkYy5sCSRmZjZjNGU1ZSwkMmY2ZjAwMDQsJDAwMTAyZjZmLCQwMDAwMDAwYworCWRjLmwJJGRmZmMwMDAwLCQwMDBjMDgxNywkMDAwNzY2MDYsJDYwZmZmZmZmCisJZGMubAkkZjMyMjNmN2MsJDIwMjQwMDA2LCRmMjJmYTQwMCwkMDAwODYwZmYKKwlkYy5sCSRmZmZmZjQwMiwkMDJhZWZmZmYsJDAwZmZmZjY0LCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjNjODgwMCwkMDAwMDAwMDAsJGU5ZWUwMTgzCisJZGMubAkkZmY0MjYxZmYsJDAwMDA1MWI0LCQ0MWVlZmY2YywkNjFmZjAwMDAKKwlkYy5sCSQyMDYyMGMwMCwkMDAwNjY2MDYsJDYxZmYwMDAwLCQxZmM2MWQ0MAorCWRjLmwJJGZmNGU0MjgwLCQxMDJlZmY2MywkNDFlZWZmNmMsJDJkNTZmZmQ0CisJZGMubAkkNjFmZjAwMDAsJDI0OGMxMDJlLCRmZjYyNjYwMCwkMDA4NDJjYWUKKwlkYy5sCSRmZmQ0MDgyZSwkMDAwNTAwMDQsJDY2MjgyMDZlLCRmZmQ4NGU2MAorCWRjLmwJJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzCisJZGMubAkkZmY5YzRlNWUsJDA4MTcwMDA3LCQ2NjAwZmY2OCwkNjBmZmZmZmYKKwlkYy5sCSRmMjgyMDgyZSwkMDAwM2ZmNGEsJDY3ZDZmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJDJjNTYyZjZmCisJZGMubAkkMDBjNDAwYjgsJDJmNmYwMGM4LCQwMGJjMmY2ZiwkMDAzODAwYzQKKwlkYy5sCSQyZjZmMDAzYywkMDBjODJmNmYsJDAwNDAwMGNjLCRkZmZjMDAwMAorCWRjLmwJJDAwYjgwODE3LCQwMDA3NjYwMCwkZmYxYTYwZmYsJGZmZmZmMjM0CisJZGMubAkkYzAyZWZmNjYsJGVkYzAwNjA4LCQ2NzAwZmY3NCwkMmNhZWZmZDQKKwlkYy5sCSQwYzAwMDAxYSwkNmUwMDAwZTgsJDY3MDAwMDcyLCQwODJlMDAwNQorCWRjLmwJJDAwMDQ2NjBhLCQyMDZlZmZkOCwkNGU2MDYwMDAsJGZiOGUwYzJlCisJZGMubAkkMDAwOGZmNGEsJDY2MDBmYjg0LCRmMjJlZDBjMCwkZmZkY2YyMmUKKwlkYy5sCSQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWMzZDdjLCQzMGQ4MDAwYQorCWRjLmwJJDNkN2NlMDA2LCRmZjZlZjM2ZSwkZmY2YzJjNTYsJDJmNmYwMGM0CisJZGMubAkkMDBiODJmNmYsJDAwYzgwMGJjLCQyZjZmMDBjYywkMDBjMDJmNmYKKwlkYy5sCSQwMDM4MDBjNCwkMmY2ZjAwM2MsJDAwYzgyZjZmLCQwMDQwMDBjYworCWRjLmwJJGRmZmMwMDAwLCQwMGI4NjBmZiwkZmZmZmYyMmMsJDA4MmUwMDA1CisJZGMubAkkMDAwNDY2MDAsJDAwMGMyMDZlLCRmZmQ4NGU2MCwkNjAwMGZiNDYKKwlkYy5sCSQwYzJlMDAwOCwkZmY0YTY2MDAsJGZiM2NmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJDNkN2MzMGQwCisJZGMubAkkMDAwYTNkN2MsJGUwMDRmZjZlLCRmMzZlZmY2YywkMmM1NjJmNmYKKwlkYy5sCSQwMGM0MDBiOCwkMmY2ZjAwYzgsJDAwYmMyZjZmLCQwMGNjMDBjMAorCWRjLmwJJDJmNmYwMDM4LCQwMGM0MmY2ZiwkMDAzYzAwYzgsJDJmNmYwMDQwCisJZGMubAkkMDBjY2RmZmMsJDAwMDAwMGI4LCQ2MGZmZmZmZiwkZjFhNDA4MmUKKwlkYy5sCSQwMDA1MDAwNCwkNjYwMDAwMGMsJDIwNmVmZmQ4LCQ0ZTYwNjAwMAorCWRjLmwJJGZiZGEwYzJlLCQwMDA4ZmY0YSwkNjYwMGZiZDAsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzNkN2MKKwlkYy5sCSQzMGM0MDAwYSwkM2Q3Y2UwMDEsJGZmNmVmMzZlLCRmZjZjMmM1NgorCWRjLmwJJDJmNmYwMGM0LCQwMGI4MmY2ZiwkMDBjODAwYmMsJDJmNmYwMGNjCisJZGMubAkkMDBjMDJmNmYsJDAwMzgwMGM0LCQyZjZmMDAzYywkMDBjODJmNmYKKwlkYy5sCSQwMDQwMDBjYywkZGZmYzAwMDAsJDAwYjg2MGZmLCRmZmZmZjEwNgorCWRjLmwJJGU5ZWUwMGMzLCRmZjQyMGMwMCwkMDAwMTY3MDgsJDBjMDAwMDA1CisJZGMubAkkNjczNDRlNzUsJDMwMmVmZjZjLCQwMjQwN2ZmZiwkNjcyNjBjNDAKKwlkYy5sCSQzZjgwNmUyMCwkNDQ0MDA2NDAsJDNmODEyMjJlLCRmZjcwZTBhOQorCWRjLmwJJDA4YzEwMDFmLCQyZDQxZmY3MCwkMDI2ZTgwMDAsJGZmNmMwMDZlCisJZGMubAkkM2Y4MGZmNmMsJDRlNzUzMDJlLCRmZjZjMDI0MCwkN2ZmZjY3M2EKKwlkYy5sCSQwYzQwM2MwMCwkNmUzNDRhMmUsJGZmNmM1YmVlLCRmZjZlM2Q0MAorCWRjLmwJJGZmNmM0MjgwLCQ0MWVlZmY2YywkMzIzYzNjMDEsJDYxZmYwMDAwCisJZGMubAkkMWE2NjMwM2MsJDNjMDA0YTJlLCRmZjZlNjcwNCwkMDhjMDAwMGYKKwlkYy5sCSQwOGVlMDAwNywkZmY3MDNkNDAsJGZmNmM0ZTc1LCQwODJlMDAwNQorCWRjLmwJJDAwMDQ2N2ZmLCRmZmZmZjE3NiwkMmQ2ODAwMDAsJGZmNzgyZDY4CisJZGMubAkkMDAwNGZmN2MsJDJkNjgwMDA4LCRmZjgwNDI4MSwkNGU3NTJmMDAKKwlkYy5sCSQ0ZTdhMDgwOCwkMDgwMDAwMDEsJDY2MDAwNDYwLCQyMDFmNGU1NgorCWRjLmwJJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWJjMDAsJGZmNjBmMjJlCisJZGMubAkkZjBjMGZmZGMsJDJkNmUwMDA2LCRmZjQ0MjA2ZSwkZmY0NDU4YWUKKwlkYy5sCSRmZjQ0NjFmZiwkZmZmZmYxNTIsJDJkNDBmZjQwLCQ0YTQwNmIwMAorCWRjLmwJJDAyMGUwMmFlLCQwMGZmMDBmZiwkZmY2NDA4MDAsJDAwMGE2NjE4CisJZGMubAkkMjA2ZWZmNDQsJDQzZWVmZjZjLCQ3MDBjNjFmZiwkZmZmZmYwZDIKKwlkYy5sCSQ0YTgxNjYwMCwkMDQ5MjYwNDgsJDIwNmVmZjQ0LCQ0M2VlZmY2YworCWRjLmwJJDcwMGM2MWZmLCRmZmZmZjBiYSwkNGE4MTY2MDAsJDA0N2FlOWVlCisJZGMubAkkMDA0ZmZmNmMsJDBjNDA3ZmZmLCQ2NzI2MTAyZSwkZmY2ZjAyMDAKKwlkYy5sCSQwMDBmNjYwYywkNGFhZWZmNzAsJDY2MDY0YWFlLCRmZjc0NjcxMAorCWRjLmwJJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNTAxYWYyMmUsJGYwODBmZjZjCisJZGMubAkkMDZhZTAwMDAsJDAwMGNmZjQ0LCQ0MWVlZmY2YywkNjFmZjAwMDAKKwlkYy5sCSQxY2QyMWQ0MCwkZmY0ZTBjMDAsJDAwMDY2NjBhLCQ2MWZmMDAwMAorCWRjLmwJJDFjMzIxZDQwLCRmZjRlNDIyZSwkZmY1MzA4MmUsJDAwMDVmZjQzCisJZGMubAkkNjc0ODA4MmUsJDAwMDRmZjQzLCQ2NjJjZTllZSwkMDE4M2ZmNDIKKwlkYy5sCSQ2MWZmMDAwMCwkNGU3NjQxZWUsJGZmNzg2MWZmLCQwMDAwMWM5NAorCWRjLmwJJDFkNDBmZjRmLCQwYzAwMDAwNiwkNjYyMDYxZmYsJDAwMDAxYmY0CisJZGMubAkkMWQ0MGZmNGYsJDYwMTQwODJlLCQwMDAzZmY0MywkNjcwYzUwZWUKKwlkYy5sCSRmZjUzMDgyZSwkMDAwMWZmNDMsJDY3YzA0MjgwLCQxMDJlZmY2MworCWRjLmwJJDEyMmVmZjQzLCQwMjQxMDA3ZiwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCQ0MWVlZmY2YywkNDNlZWZmNzgKKwlkYy5sCSQyMjNiMTUzMCwkMDAwMDBiMmMsJDRlYmIxOTMwLCQwMDAwMGIyNAorCWRjLmwJJDEwMmVmZjYyLCQ2NjQwNGEyZSwkZmY1MzY2MGMsJGU5ZWUwMTgzCisJZGMubAkkZmY0MjYxZmYsJDAwMDA0ZTg0LCQyZDZlMDAwNiwkZmY2ODJkNmUKKwlkYy5sCSRmZjQ0MDAwNiwkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MAorCWRjLmwJJDRjZWUwMzAzLCRmZjljNGU1ZSwkMDgxNzAwMDcsJDY2MDAwMDk2CisJZGMubAkkNjBmZmZmZmYsJGVlNmVjMDJlLCRmZjY2ZWRjMCwkMDYwODY2MTIKKwlkYy5sCSQwODJlMDAwNCwkZmY2NjY3YWUsJDA4MmUwMDAxLCRmZjYyNjdhYworCWRjLmwJJDYwMzQwNDgwLCQwMDAwMDAxOCwkMGMwMDAwMDYsJDY2MTAwODJlCisJZGMubAkkMDAwNGZmNjYsJDY2MjAwODJlLCQwMDAzZmY2NiwkNjYyMDNkN2IKKwlkYy5sCSQwMjA2ZmY2ZSwkNjAxZWUwMDIsJGUwMDZlMDA0LCRlMDA1ZTAwMworCWRjLmwJJGUwMDJlMDAxLCRlMDAxM2Q3YywkZTAwNWZmNmUsJDYwMDYzZDdjCisJZGMubAkkZTAwM2ZmNmUsJDJkNmUwMDA2LCRmZjY4MmQ2ZSwkZmY0NDAwMDYKKwlkYy5sCSRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMzZlLCRmZjZjNGU1ZSwkMDgxNzAwMDcsJDY2MDY2MGZmCisJZGMubAkkZmZmZmVkZTAsJDJmMTczZjZmLCQwMDA4MDAwNCwkM2Y3YzIwMjQKKwlkYy5sCSQwMDA2ZjIyZiwkYTQwMDAwMDgsJDYwZmZmZmZmLCRlZWI4MDgwMAorCWRjLmwJJDAwMGU2NzAwLCQwMWMyMDgyZSwkMDAwNTAwMDQsJDY2MTY0ZTY4CisJZGMubAkkMmQ0OGZmZDgsJDYxZmYwMDAwLCQwYmNlMjA2ZSwkZmZkODRlNjAKKwlkYy5sCSQ2MDAwMDFhYSwkNDIyZWZmNGEsJDQxZWUwMDBjLCQyZDQ4ZmZkOAorCWRjLmwJJDYxZmYwMDAwLCQwYmIyMGMyZSwkMDAwOGZmNGEsJDY3MDAwMDg2CisJZGMubAkkMGMyZTAwMDQsJGZmNGE2NjAwLCQwMTg0MDgyZSwkMDAwNzAwMDQKKwlkYy5sCSQ2NjM2M2RhZSwkMDAwNDA4MDQsJDJkYWVmZjQ0LCQwODA2M2RiYworCWRjLmwJJDAwZjAwODBhLCQ0MWY2MDgwNCwkMmQ0ODAwMDQsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzRlNWUKKwlkYy5sCSQyZTVmNjBmZiwkZmZmZmVkM2MsJDNkYWUwMDA0LCQwODAwMmRhZQorCWRjLmwJJGZmNDQwODAyLCQzZGJjMjAyNCwkMDgwNjJkYWUsJDAwMDYwODA4CisJZGMubAkkNDFmNjA4MDAsJDJkNDgwMDA0LCRmMjJlZDBjMCwkZmZkY2YyMmUKKwlkYy5sCSQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWM0ZTVlLCQyZTVmNjBmZgorCWRjLmwJJGZmZmZlZGYyLCQxZDQxMDAwYSwkMWQ0MDAwMGIsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzJmMTYKKwlkYy5sCSQyZjAwMmYwMSwkMmYyZWZmNDQsJDQyODAxMDJlLCQwMDBiNDQ4MAorCWRjLmwJJDA4MmUwMDA3LCQwMDA0NjcxYywkM2RhZTAwMDQsJDA4MDAyZGFlCisJZGMubAkkMDAwNjA4MDgsJDJkOWYwODAyLCQzZGJjMjAyNCwkMDgwNjQ4NzYKKwlkYy5sCSQwODAwNjAxNCwkM2RhZTAwMDQsJDA4MDQyZDlmLCQwODA2M2RiYworCWRjLmwJJDAwZjAwODBhLCQ0ODc2MDgwNCwkNDI4MTEyMmUsJDAwMGE0YTAxCisJZGMubAkkNmEwY2YyMzYsJGYwODAwODBjLCQwNjgwMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTBjZjIzNiwkZjA0MDA4MGMsJDA2ODAwMDAwLCQwMDBjZTMwOQorCWRjLmwJJDZhMGNmMjM2LCRmMDIwMDgwYywkMDY4MDAwMDAsJDAwMGNlMzA5CisJZGMubAkkNmEwY2YyMzYsJGYwMTAwODBjLCQwNjgwMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTBjZjIzNiwkZjAwODA4MGMsJDA2ODAwMDAwLCQwMDBjZTMwOQorCWRjLmwJJDZhMGNmMjM2LCRmMDA0MDgwYywkMDY4MDAwMDAsJDAwMGNlMzA5CisJZGMubAkkNmEwY2YyMzYsJGYwMDIwODBjLCQwNjgwMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTA2ZjIzNiwkZjAwMTA4MGMsJDIyMmYwMDA0LCQyMDJmMDAwOAorCWRjLmwJJDJjNmYwMDBjLCQyZTVmMDgxNywkMDAwNzY3ZmYsJGZmZmZlYzA0CisJZGMubAkkNjBmZmZmZmYsJGVjZjA2MWZmLCQwMDAwMTI0NCwkZjIyZWQwYzAKKwlkYy5sCSRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljMDgyZQorCWRjLmwJJDAwMDcwMDA0LCQ2NjBlMmQ2ZSwkZmY0NDAwMDYsJDRlNWU2MGZmCisJZGMubAkkZmZmZmViZDAsJDJjNTYzZjZmLCQwMGM0MDBjMCwkMmY2ZjAwYzYKKwlkYy5sCSQwMGM4MmY2ZiwkMDAwNDAwYzIsJDNmN2MyMDI0LCQwMGM2ZGZmYworCWRjLmwJJDAwMDAwMGMwLCQ2MGZmZmZmZiwkZWM5YzIwMWYsJDRlNTZmZjQwCisJZGMubAkkNDhlZTAzMDMsJGZmOWMyZDZlLCQwMDA2ZmY0NCwkMjA2ZWZmNDQKKwlkYy5sCSQ1OGFlZmY0NCwkNjFmZmZmZmYsJGVkMDAyZDQwLCRmZjQwNGE0MAorCWRjLmwJJDZiMDQ3MDEwLCQ2MDI2MDgwMCwkMDAwZTY2MTAsJGU5YzAxNGMzCisJZGMubAkkNzAwYzBjMDEsJDAwMDc2NjE0LCQ1ODgwNjAxMCwkNDI4MDYxZmYKKwlkYy5sCSQwMDAwMGNlNiwkMjAyZWZmNDQsJDkwYWUwMDA2LCQzZDQwMDAwYQorCWRjLmwJJDRjZWUwMzAzLCRmZjljNGU1ZSwkNTE4ZjJmMDAsJDNmNmYwMDBjCisJZGMubAkkMDAwNDJmNmYsJDAwMGUwMDA2LCQ0MjgwMzAyZiwkMDAxMjJmNmYKKwlkYy5sCSQwMDA2MDAxMCwkZDFhZjAwMDYsJDNmN2M0MDJjLCQwMDBhMjAxZgorCWRjLmwJJDYwZmZmZmZmLCRlYmU0NGU3YSwkMDgwODA4MDAsJDAwMDE2NjBjCisJZGMubAkkZjIyZTljMDAsJGZmNjBmMjJlLCRkMGMwZmZkYywkNGNlZTAzMDMKKwlkYy5sCSRmZjljNGU1ZSwkNTE0ZjJlYWYsJDAwMDgzZjZmLCQwMDBjMDAwNAorCWRjLmwJJDNmN2M0MDA4LCQwMDA2MmY2ZiwkMDAwMjAwMDgsJDJmN2MwOTQyCisJZGMubAkkODAwMTAwMGMsJDA4MTcwMDA1LCQ2NzA2MDhlZiwkMDAwMjAwMGQKKwlkYy5sCSQ2MGZmZmZmZiwkZWJkNjRmZWUsJGZmNDA0ZTdhLCQxODA4MDgwMQorCWRjLmwJJDAwMDE2NjBjLCRmMjJlZDBjMCwkZmZkY2YyMmYsJDljMDAwMDIwCisJZGMubAkkMmM1NjJmNmYsJDAwYzQwMGJjLCQzZjZmMDBjOCwkMDBjMDNmN2MKKwlkYy5sCSQ0MDA4MDBjMiwkMmY0ODAwYzQsJDNmNDAwMGM4LCQzZjdjMDAwMQorCWRjLmwJJDAwY2E0Y2VmLCQwMzAzMDA1YywkZGVmYzAwYmMsJDYwYTY0ZTU2CisJZGMubAkkZmY0MGYzMmUsJGZmNmM0OGVlLCQwMzAzZmY5YywkZjIyZWJjMDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJDJkNmVmZjY4LCRmZjQ0MjA2ZQorCWRjLmwJJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmViY2UsJDJkNDBmZjQwCisJZGMubAkkMDgwMDAwMGQsJDY2Mjg0MWVlLCRmZjZjNjFmZiwkZmZmZmYxZWEKKwlkYy5sCSRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMzZlLCRmZjZjNGU1ZSwkNjBmZmZmZmYsJGVhOTQzMjJlCisJZGMubAkkZmY2YzAyNDEsJDdmZmYwYzQxLCQ3ZmZmNjYxYSwkNGFhZWZmNzQKKwlkYy5sCSQ2NjBjMjIyZSwkZmY3MDAyODEsJDdmZmZmZmZmLCQ2NzA4MmQ2ZQorCWRjLmwJJGZmNzBmZjU0LCQ2MDEyMjIzYywkN2ZmZmZmZmYsJDRhMmVmZjZjCisJZGMubAkkNmEwMjUyODEsJDJkNDFmZjU0LCRlOWMwMDRjMywkMTIyZWZmNDEKKwlkYy5sCSQzMDdiMDIwNiwkNGVmYjg4MDIsJDAwNmMwMDAwLCQwMDAwZmY5OAorCWRjLmwJJDAwM2UwMDAwLCQwMDEwMDAwMCwkMTAyZWZmNTQsJDBjMDEwMDA3CisJZGMubAkkNmYxNjIwNmUsJDAwMGM2MWZmLCRmZmZmZWI4NiwkNGE4MTY2ZmYKKwlkYy5sCSQwMDAwNTQzNiwkNjAwMGZmNmEsJDAyNDEwMDA3LCQ2MWZmMDAwMAorCWRjLmwJJDQ3OGU2MDAwLCRmZjVjMzAyZSwkZmY1NDBjMDEsJDAwMDc2ZjE2CisJZGMubAkkMjA2ZTAwMGMsJDYxZmZmZmZmLCRlYjZlNGE4MSwkNjZmZjAwMDAKKwlkYy5sCSQ1NDE2NjAwMCwkZmYzYzAyNDEsJDAwMDc2MWZmLCQwMDAwNDcyNAorCWRjLmwJJDYwMDBmZjJlLCQyMDJlZmY1NCwkMGMwMTAwMDcsJDZmMTYyMDZlCisJZGMubAkkMDAwYzYxZmYsJGZmZmZlYjU2LCQ0YTgxNjZmZiwkMDAwMDUzZjYKKwlkYy5sCSQ2MDAwZmYwZSwkMDI0MTAwMDcsJDYxZmYwMDAwLCQ0NmJhNjAwMAorCWRjLmwJJGZmMDA0ZTU2LCRmZjQwZjMyZSwkZmY2YzQ4ZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZWJjMDAsJGZmNjBmMjJlLCRmMGMwZmZkYywkMmQ2ZWZmNjgKKwlkYy5sCSRmZjQ0MjA2ZSwkZmY0NDU4YWUsJGZmNDQ2MWZmLCRmZmZmZWE4YQorCWRjLmwJJDJkNDBmZjQwLCQwODAwMDAwZCwkNjYwMDAwMmEsJDQxZWVmZjZjCisJZGMubAkkNjFmZmZmZmYsJGYwYTRmMjJlLCRkMGMwZmZkYywkZjIyZTljMDAKKwlkYy5sCSRmZjYwNGNlZSwkMDMwM2ZmOWMsJGYzNmVmZjZjLCQ0ZTVlNjBmZgorCWRjLmwJJGZmZmZlOTY0LCRlOWMwMDRjMywkMTIyZWZmNDEsJDMwN2IwMjA2CisJZGMubAkkNGVmYjg4MDIsJDAwNzQwMGE2LCQwMTVhMDAwMCwkMDA0MjAxMDQKKwlkYy5sCSQwMDEwMDAwMCwkMTAyZWZmNzAsJDA4YzAwMDA2LCQwYzAxMDAwNworCWRjLmwJJDZmMTYyMDZlLCQwMDBjNjFmZiwkZmZmZmVhNzYsJDRhODE2NmZmCisJZGMubAkkMDAwMDUzMjYsJDYwMDBmZmEwLCQwMjQxMDAwNywkNjFmZjAwMDAKKwlkYy5sCSQ0NjdlNjAwMCwkZmY5MjMwMmUsJGZmNzAwOGMwLCQwMDBlMGMwMQorCWRjLmwJJDAwMDc2ZjE2LCQyMDZlMDAwYywkNjFmZmZmZmYsJGVhNWE0YTgxCisJZGMubAkkNjZmZjAwMDAsJDUzMDI2MDAwLCRmZjZlMDI0MSwkMDAwNzYxZmYKKwlkYy5sCSQwMDAwNDYxMCwkNjAwMGZmNjAsJDIwMmVmZjcwLCQwOGMwMDAxZQorCWRjLmwJJDBjMDEwMDA3LCQ2ZjE2MjA2ZSwkMDAwYzYxZmYsJGZmZmZlYTNlCisJZGMubAkkNGE4MTY2ZmYsJDAwMDA1MmRlLCQ2MDAwZmYzYywkMDI0MTAwMDcKKwlkYy5sCSQ2MWZmMDAwMCwkNDVhMjYwMDAsJGZmMmUwYzAxLCQwMDA3NmYyZQorCWRjLmwJJDIwMmVmZjZjLCQwMjgwODAwMCwkMDAwMDAwODAsJDdmYzAwMDAwCisJZGMubAkkMjIyZWZmNzAsJGUwODk4MDgxLCQyMDZlMDAwYywkNjFmZmZmZmYKKwlkYy5sCSRlOWZjNGE4MSwkNjZmZjAwMDAsJDUyOWM2MDAwLCRmZWZhMjAyZQorCWRjLmwJJGZmNmMwMjgwLCQ4MDAwMDAwMCwkMDA4MDdmYzAsJDAwMDAyZjAxCisJZGMubAkkMjIyZWZmNzAsJGUwODk4MDgxLCQyMjFmMDI0MSwkMDAwNzYxZmYKKwlkYy5sCSQwMDAwNDU0NCwkNjAwMGZlZDAsJDIwMmVmZjZjLCQwMjgwODAwMAorCWRjLmwJJDAwMDAwMDgwLCQ3ZmY4MDAwMCwkMjIyZWZmNzAsJDJkNDBmZjg0CisJZGMubAkkNzAwYmUwYTksJDgzYWVmZjg0LCQyMjJlZmY3MCwkMDI4MTAwMDAKKwlkYy5sCSQwN2ZmZTBiOSwkMmQ0MWZmODgsJDIyMmVmZjc0LCRlMGE5ODNhZQorCWRjLmwJJGZmODg0MWVlLCRmZjg0MjI2ZSwkMDAwYzcwMDgsJDYxZmZmZmZmCisJZGMubAkkZThjYzRhODEsJDY2ZmYwMDAwLCQ1MjJhNjAwMCwkZmU3YTQyMmUKKwlkYy5sCSRmZjRhM2Q2ZSwkZmY2Y2ZmODQsJDQyNmVmZjg2LCQyMDJlZmY3MAorCWRjLmwJJDA4YzAwMDFlLCQyZDQwZmY4OCwkMmQ2ZWZmNzQsJGZmOGMwODJlCisJZGMubAkkMDAwNTAwMDQsJDY2Mzg0ZTY4LCQyZDQ4ZmZkOCwkMmQ1NmZmZDQKKwlkYy5sCSQ2MWZmMDAwMCwkMDJjMjIyNDgsJDJkNDgwMDBjLCQyMDZlZmZkOAorCWRjLmwJJDRlNjAyY2FlLCRmZmQ0NDFlZSwkZmY4NDcwMGMsJDYxZmZmZmZmCisJZGMubAkkZTg2YzRhODEsJDY2ZmYwMDAwLCQ1MWQ4NjAwMCwkZmUxYTJkNTYKKwlkYy5sCSRmZmQ0NjFmZiwkMDAwMDAyOTAsJDIyNDgyZDQ4LCQwMDBjMmNhZQorCWRjLmwJJGZmZDQwYzJlLCQwMDA4ZmY0YSwkNjZjY2YyMmUsJGQwYzBmZmRjCisJZGMubAkkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YywkZjM2ZWZmNmMKKwlkYy5sCSQyYzZlZmZkNCwkMmY2ZjAwYzQsJDAwYjgyZjZmLCQwMGM4MDBiYworCWRjLmwJJDJmNmYwMGNjLCQwMGMwMmY2ZiwkMDA0NDAwYzQsJDJmNmYwMDQ4CisJZGMubAkkMDBjODJmNmYsJDAwNGMwMGNjLCRkZmZjMDAwMCwkMDBiODYwZmYKKwlkYy5sCSRmZmZmZTczNCwkNGU1NmZmNDAsJGYzMmVmZjZjLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiYzAwZmY2MCwkZjIyZWYwYzAsJGZmZGMyZDZlCisJZGMubAkkZmY2OGZmNDQsJDIwNmVmZjQ0LCQ1OGFlZmY0NCwkNjFmZmZmZmYKKwlkYy5sCSRlN2Y4MmQ0MCwkZmY0MDA4MDAsJDAwMGQ2NjAwLCQwMTA2ZTljMAorCWRjLmwJJDA0YzM2NjIyLCQwYzZlNDAxZSwkZmY2YzY2MWEsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmU0MDAwLCRmZjcwZjIyZSwkNjgwMGZmNmMKKwlkYy5sCSQzZDdjZTAwMSwkZmY2ZTQxZWUsJGZmNmM2MWZmLCRmZmZmZWRlYQorCWRjLmwJJDAyYWUwMGZmLCQwMWZmZmY2NCwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCRlOWVlMTAwNiwkZmY0MjBjMDEKKwlkYy5sCSQwMDE3NjcwMCwkMDA5NjQxZWUsJGZmNmM2MWZmLCQwMDAwMTM5NAorCWRjLmwJJDFkNDBmZjRlLCQwODJlMDAwNSwkZmY0MzY3MmUsJDA4MmUwMDA0CisJZGMubAkkZmY0MzY2MjYsJGU5ZWUwMTgzLCRmZjQyNjFmZiwkMDAwMDQ1NGMKKwlkYy5sCSQ0MWVlZmY3OCwkNjFmZjAwMDAsJDEzNmEwYzAwLCQwMDA2NjYwNgorCWRjLmwJJDYxZmYwMDAwLCQxMmNlMWQ0MCwkZmY0ZjQyODAsJDEwMmVmZjYzCisJZGMubAkkMTIyZWZmNDMsJDAyNDEwMDdmLCQ0MWVlZmY2YywkNDNlZWZmNzgKKwlkYy5sCSQyMjNiMTUzMCwkMDAwMDAyMmMsJDRlYmIxOTMwLCQwMDAwMDIyNAorCWRjLmwJJGU5ZWUwMTgzLCRmZjQyNjFmZiwkMDAwMDQ1OTAsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5Y2YzNmUKKwlkYy5sCSRmZjZjNGU1ZSwkNjBmZmZmZmYsJGU1Y2M0MjgwLCQxMDJlZmY2MworCWRjLmwJJDEyMmVmZjQzLCQwMjgxMDAwMCwkMDA3ZjYxZmYsJDAwMDAwMzk2CisJZGMubAkkNjBiZTFkN2MsJDAwMDBmZjRlLCQ0MjgwMTAyZSwkZmY2MzAyYWUKKwlkYy5sCSRmZmZmMDBmZiwkZmY2NDQxZWUsJGZmNmM2MWZmLCQwMDAwMTcyMgorCWRjLmwJJDYwYWE0ZTU2LCRmZjQwZjMyZSwkZmY2YzQ4ZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZWJjMDAsJGZmNjBmMjJlLCRmMGMwZmZkYywkMmQ2ZWZmNjgKKwlkYy5sCSRmZjQ0MjA2ZSwkZmY0NDU4YWUsJGZmNDQ2MWZmLCRmZmZmZTY5YQorCWRjLmwJJDJkNDBmZjQwLCQ0MWVlZmY2YywkNjFmZmZmZmYsJGVjYmNmMjJlCisJZGMubAkkZDBjMGZmZGMsJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMzZlZmY2YywkNGU1ZTYwZmYsJGZmZmZlNTkyLCQwYzZmNDAyYworCWRjLmwJJDAwMDY2N2ZmLCRmZmZmZTViMiwkNjBmZmZmZmYsJGU1OTYyMDQwCisJZGMubAkkMTAyZWZmNDEsJDIyMDAwMjQwLCQwMDM4MDI4MSwkMDAwMDAwMDcKKwlkYy5sCSQwYzAwMDAxOCwkNjcyNDBjMDAsJDAwMjA2NzJjLCQ4MDQxMGMwMAorCWRjLmwJJDAwM2M2NzA2LCQyMDZlMDAwYywkNGU3NTFkN2MsJDAwODBmZjRhCisJZGMubAkkNDFmNjAxNjIsJGZmNjgwMDA0LCQ0ZTc1MjAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0MmNhMjA2ZSwkMDAwYzRlNzUsJDIwMDg2MWZmLCQwMDAwNDMwYworCWRjLmwJJDIwNmUwMDBjLCQwYzAwMDAwYywkNjcwMjRlNzUsJDUxODgyZDQ4CisJZGMubAkkMDAwYzRlNzUsJDEwMmVmZjQxLCQyMjAwMDI0MCwkMDAzODAyODEKKwlkYy5sCSQwMDAwMDAwNywkMGMwMDAwMTgsJDY3MGUwYzAwLCQwMDIwNjcwMAorCWRjLmwJJDAwNzYyMDZlLCQwMDBjNGU3NSwkMzIzYjEyMGUsJDIwNmUwMDBjCisJZGMubAkkNGVmYjEwMDYsJDRhZmMwMDA4LCQwMDEwMDAxYSwkMDAyNDAwMmMKKwlkYy5sCSQwMDM0MDAzYywkMDA0NDAwNGUsJDA2YWUwMDAwLCQwMDBjZmZhNAorCWRjLmwJJDRlNzUwNmFlLCQwMDAwMDAwYywkZmZhODRlNzUsJGQ1ZmMwMDAwCisJZGMubAkkMDAwYzRlNzUsJGQ3ZmMwMDAwLCQwMDBjNGU3NSwkZDlmYzAwMDAKKwlkYy5sCSQwMDBjNGU3NSwkZGJmYzAwMDAsJDAwMGM0ZTc1LCQwNmFlMDAwMAorCWRjLmwJJDAwMGNmZmQ0LCQ0ZTc1MWQ3YywkMDAwNGZmNGEsJDA2YWUwMDAwCisJZGMubAkkMDAwY2ZmZDgsJDRlNzUzMjNiLCQxMjE0MjA2ZSwkMDAwYzUxODgKKwlkYy5sCSQ1MWFlMDAwYywkNGVmYjEwMDYsJDRhZmMwMDA4LCQwMDEwMDAxNgorCWRjLmwJJDAwMWMwMDIwLCQwMDI0MDAyOCwkMDAyYzAwMzIsJDJkNDhmZmE0CisJZGMubAkkNGU3NTJkNDgsJGZmYTg0ZTc1LCQyNDQ4NGU3NSwkMjY0ODRlNzUKKwlkYy5sCSQyODQ4NGU3NSwkMmE0ODRlNzUsJDJkNDhmZmQ0LCQ0ZTc1MmQ0OAorCWRjLmwJJGZmZDgxZDdjLCQwMDA4ZmY0YSwkNGU3NTRhZmMsJDAwNmQwMDAwCisJZGMubAkkMjA3MDAwMDAsJDJhNjYwMDAwLCQwMDAwMDAwMCwkMmIwYTAwMDAKKwlkYy5sCSQzZGIyMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMmJiMDAwMDAsJDAwMDAwMDAwLCQyNzQ2MDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDIzM2MwMDAwLCQwMDAwMDAwMCwkMzYyMjAwMDAsJDFjN2MwMDAwCisJZGMubAkkMzJmMjAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMmZiMDAwMDAKKwlkYy5sCSQzOWVhMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDJlNGUwMDAwLCQwMDAwMDAwMCwkMjlmNDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyMDVlMDAwMCwkM2RhMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDIwNjgwMDAwLCQzZGFhMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyYjllMDAwMCwkMDAwMDAwMDAsJDI3MzQwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDJiYTgwMDAwLCQwMDAwMDAwMCwkMjczZTAwMDAsJDAwMDAwMDAwCisJZGMubAkkMjMyYTAwMDAsJDAwMDAwMDAwLCQzNjEwMDAwMCwkMWM2YTAwMDAKKwlkYy5sCSQyMzM0MDAwMCwkMDAwMDAwMDAsJDM2MWEwMDAwLCQxYzc0MDAwMAorCWRjLmwJJDM5ZDgwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMzllMjYwZmUsJDEyMmVmZjQzLCQwMjQxMDA3MCwkZTgwOTYxZmYKKwlkYy5sCSQwMDAwM2VkMiwkMDI4MDAwMDAsJDAwZmYyZjAwLCQxMDNiMDkyMAorCWRjLmwJJDAxNDgyZjAwLCQ2MWZmMDAwMCwkMDM0MDIwMWYsJDIyMWY2NzAwCisJZGMubAkkMDEzNDA4MmUsJDAwMDVmZjQyLCQ2NzAwMDBiOCwkMDgyZTAwMDQKKwlkYy5sCSRmZjQyNjYwMCwkMDAxYTEyM2IsJDExMjAwMjFlLCQwODJlMDAwNQorCWRjLmwJJDAwMDQ2NzBhLCQwYzJlMDAwOCwkZmY0YTY2MDIsJDRlNzUyMjQ4CisJZGMubAkkOWZjMDQxZDcsJDRhMDE2YTBjLCQyMGVlZmZkYywkMjBlZWZmZTAKKwlkYy5sCSQyMGVlZmZlNCwkZTMwOTZhMGMsJDIwZWVmZmU4LCQyMGVlZmZlYworCWRjLmwJJDIwZWVmZmYwLCRlMzA5NmEwYSwkZjIxMGYwMjAsJGQxZmMwMDAwCisJZGMubAkkMDAwY2UzMDksJDZhMGFmMjEwLCRmMDEwZDFmYywkMDAwMDAwMGMKKwlkYy5sCSRlMzA5NmEwYSwkZjIxMGYwMDgsJGQxZmMwMDAwLCQwMDBjZTMwOQorCWRjLmwJJDZhMGFmMjEwLCRmMDA0ZDFmYywkMDAwMDAwMGMsJGUzMDk2YTBhCisJZGMubAkkZjIxMGYwMDIsJGQxZmMwMDAwLCQwMDBjZTMwOSwkNmEwYWYyMTAKKwlkYy5sCSRmMDAxZDFmYywkMDAwMDAwMGMsJDJkNDlmZjU0LCQ0MWQ3MmYwMAorCWRjLmwJJDYxZmZmZmZmLCRlMjQ4MjAxZiwkZGZjMDRhODEsJDY2MDAwNzFlCisJZGMubAkkNGU3NTJkNDgsJGZmNTQ5ZmMwLCQ0M2Q3MmYwMSwkMmYwMDYxZmYKKwlkYy5sCSRmZmZmZTIxNCwkMjAxZjRhODEsJDY2MDAwNzBlLCQyMjFmNDFkNworCWRjLmwJJDRhMDE2YTBjLCQyZDU4ZmZkYywkMmQ1OGZmZTAsJDJkNThmZmU0CisJZGMubAkkZTMwOTZhMGMsJDJkNThmZmU4LCQyZDU4ZmZlYywkMmQ1OGZmZjAKKwlkYy5sCSRlMzA5NmEwNCwkZjIxOGQwMjAsJGUzMDk2YTA0LCRmMjE4ZDAxMAorCWRjLmwJJGUzMDk2YTA0LCRmMjE4ZDAwOCwkZTMwOTZhMDQsJGYyMThkMDA0CisJZGMubAkkZTMwOTZhMDQsJGYyMThkMDAyLCRlMzA5NmEwNCwkZjIxOGQwMDEKKwlkYy5sCSRkZmMwNGU3NSwkNGU3NTAwMGMsJDBjMTgwYzE4LCQxODI0MGMxOAorCWRjLmwJJDE4MjQxODI0LCQyNDMwMGMxOCwkMTgyNDE4MjQsJDI0MzAxODI0CisJZGMubAkkMjQzMDI0MzAsJDMwM2MwYzE4LCQxODI0MTgyNCwkMjQzMDE4MjQKKwlkYy5sCSQyNDMwMjQzMCwkMzAzYzE4MjQsJDI0MzAyNDMwLCQzMDNjMjQzMAorCWRjLmwJJDMwM2MzMDNjLCQzYzQ4MGMxOCwkMTgyNDE4MjQsJDI0MzAxODI0CisJZGMubAkkMjQzMDI0MzAsJDMwM2MxODI0LCQyNDMwMjQzMCwkMzAzYzI0MzAKKwlkYy5sCSQzMDNjMzAzYywkM2M0ODE4MjQsJDI0MzAyNDMwLCQzMDNjMjQzMAorCWRjLmwJJDMwM2MzMDNjLCQzYzQ4MjQzMCwkMzAzYzMwM2MsJDNjNDgzMDNjCisJZGMubAkkM2M0ODNjNDgsJDQ4NTQwYzE4LCQxODI0MTgyNCwkMjQzMDE4MjQKKwlkYy5sCSQyNDMwMjQzMCwkMzAzYzE4MjQsJDI0MzAyNDMwLCQzMDNjMjQzMAorCWRjLmwJJDMwM2MzMDNjLCQzYzQ4MTgyNCwkMjQzMDI0MzAsJDMwM2MyNDMwCisJZGMubAkkMzAzYzMwM2MsJDNjNDgyNDMwLCQzMDNjMzAzYywkM2M0ODMwM2MKKwlkYy5sCSQzYzQ4M2M0OCwkNDg1NDE4MjQsJDI0MzAyNDMwLCQzMDNjMjQzMAorCWRjLmwJJDMwM2MzMDNjLCQzYzQ4MjQzMCwkMzAzYzMwM2MsJDNjNDgzMDNjCisJZGMubAkkM2M0ODNjNDgsJDQ4NTQyNDMwLCQzMDNjMzAzYywkM2M0ODMwM2MKKwlkYy5sCSQzYzQ4M2M0OCwkNDg1NDMwM2MsJDNjNDgzYzQ4LCQ0ODU0M2M0OAorCWRjLmwJJDQ4NTQ0ODU0LCQ1NDYwMDA4MCwkNDBjMDIwYTAsJDYwZTAxMDkwCisJZGMubAkkNTBkMDMwYjAsJDcwZjAwODg4LCQ0OGM4MjhhOCwkNjhlODE4OTgKKwlkYy5sCSQ1OGQ4MzhiOCwkNzhmODA0ODQsJDQ0YzQyNGE0LCQ2NGU0MTQ5NAorCWRjLmwJJDU0ZDQzNGI0LCQ3NGY0MGM4YywkNGNjYzJjYWMsJDZjZWMxYzljCisJZGMubAkkNWNkYzNjYmMsJDdjZmMwMjgyLCQ0MmMyMjJhMiwkNjJlMjEyOTIKKwlkYy5sCSQ1MmQyMzJiMiwkNzJmMjBhOGEsJDRhY2EyYWFhLCQ2YWVhMWE5YQorCWRjLmwJJDVhZGEzYWJhLCQ3YWZhMDY4NiwkNDZjNjI2YTYsJDY2ZTYxNjk2CisJZGMubAkkNTZkNjM2YjYsJDc2ZjYwZThlLCQ0ZWNlMmVhZSwkNmVlZTFlOWUKKwlkYy5sCSQ1ZWRlM2ViZSwkN2VmZTAxODEsJDQxYzEyMWExLCQ2MWUxMTE5MQorCWRjLmwJJDUxZDEzMWIxLCQ3MWYxMDk4OSwkNDljOTI5YTksJDY5ZTkxOTk5CisJZGMubAkkNTlkOTM5YjksJDc5ZjkwNTg1LCQ0NWM1MjVhNSwkNjVlNTE1OTUKKwlkYy5sCSQ1NWQ1MzViNSwkNzVmNTBkOGQsJDRkY2QyZGFkLCQ2ZGVkMWQ5ZAorCWRjLmwJJDVkZGQzZGJkLCQ3ZGZkMDM4MywkNDNjMzIzYTMsJDYzZTMxMzkzCisJZGMubAkkNTNkMzMzYjMsJDczZjMwYjhiLCQ0YmNiMmJhYiwkNmJlYjFiOWIKKwlkYy5sCSQ1YmRiM2JiYiwkN2JmYjA3ODcsJDQ3YzcyN2E3LCQ2N2U3MTc5NworCWRjLmwJJDU3ZDczN2I3LCQ3N2Y3MGY4ZiwkNGZjZjJmYWYsJDZmZWYxZjlmCisJZGMubAkkNWZkZjNmYmYsJDdmZmYyMDQwLCQzMDJlZmY0MCwkMzIwMDAyNDAKKwlkYy5sCSQwMDNmMDI4MSwkMDAwMDAwMDcsJDMwM2IwMjBhLCQ0ZWZiMDAwNgorCWRjLmwJJDRhZmMwMDQwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDA4MDAwODYsJDAwOGMwMDkwLCQwMDk0MDA5OAorCWRjLmwJJDAwOWMwMGEwLCQwMGE2MDBiNiwkMDBjNjAwZDIsJDAwZGUwMGVhCisJZGMubAkkMDBmNjAxMDIsJDAxMTgwMTI2LCQwMTM0MDEzZSwkMDE0ODAxNTIKKwlkYy5sCSQwMTVjMDE2NiwkMDE3YTAxOTgsJDAxYjYwMWQyLCQwMWVlMDIwYQorCWRjLmwJJDAyMjYwMjQyLCQwMjYwMDI2MCwkMDI2MDAyNjAsJDAyNjAwMjYwCisJZGMubAkkMDI2MDAyNjAsJDAyYzAwMmRhLCQwMmY0MDMxNCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMjA2ZWZmYTQsJDRlNzUyMDZlLCRmZmE4NGU3NQorCWRjLmwJJDIwNGE0ZTc1LCQyMDRiNGU3NSwkMjA0YzRlNzUsJDIwNGQ0ZTc1CisJZGMubAkkMjA1NjRlNzUsJDIwNmVmZmQ4LCQ0ZTc1MjAyZSwkZmZhNDIyMDAKKwlkYy5sCSRkMjg4MmQ0MSwkZmZhNDIwNDAsJDRlNzUyMDJlLCRmZmE4MjIwMAorCWRjLmwJJGQyODgyZDQxLCRmZmE4MjA0MCwkNGU3NTIwMGEsJDIyMDBkMjg4CisJZGMubAkkMjQ0MTIwNDAsJDRlNzUyMDBiLCQyMjAwZDI4OCwkMjY0MTIwNDAKKwlkYy5sCSQ0ZTc1MjAwYywkMjIwMGQyODgsJDI4NDEyMDQwLCQ0ZTc1MjAwZAorCWRjLmwJJDIyMDBkMjg4LCQyYTQxMjA0MCwkNGU3NTIwMTYsJDIyMDBkMjg4CisJZGMubAkkMmM4MTIwNDAsJDRlNzUxZDdjLCQwMDA0ZmY0YSwkMjAyZWZmZDgKKwlkYy5sCSQyMjAwZDI4OCwkMmQ0MWZmZDgsJDIwNDA0ZTc1LCQyMDJlZmZhNAorCWRjLmwJJDkwODgyZDQwLCRmZmE0MjA0MCwkNGU3NTIwMmUsJGZmYTg5MDg4CisJZGMubAkkMmQ0MGZmYTgsJDIwNDA0ZTc1LCQyMDBhOTA4OCwkMjQ0MDIwNDAKKwlkYy5sCSQ0ZTc1MjAwYiwkOTA4ODI2NDAsJDIwNDA0ZTc1LCQyMDBjOTA4OAorCWRjLmwJJDI4NDAyMDQwLCQ0ZTc1MjAwZCwkOTA4ODJhNDAsJDIwNDA0ZTc1CisJZGMubAkkMjAxNjkwODgsJDJjODAyMDQwLCQ0ZTc1MWQ3YywkMDAwOGZmNGEKKwlkYy5sCSQyMDJlZmZkOCwkOTA4ODJkNDAsJGZmZDgyMDQwLCQ0ZTc1MjA2ZQorCWRjLmwJJGZmNDQ1NGFlLCRmZjQ0NjFmZiwkZmZmZmRlMzgsJDRhODE2NmZmCisJZGMubAkkZmZmZmYxYjYsJDMwNDBkMWVlLCRmZmE0NGU3NSwkMjA2ZWZmNDQKKwlkYy5sCSQ1NGFlZmY0NCwkNjFmZmZmZmYsJGRlMWE0YTgxLCQ2NmZmZmZmZgorCWRjLmwJJGYxOTgzMDQwLCRkMWVlZmZhOCwkNGU3NTIwNmUsJGZmNDQ1NGFlCisJZGMubAkkZmY0NDYxZmYsJGZmZmZkZGZjLCQ0YTgxNjZmZiwkZmZmZmYxN2EKKwlkYy5sCSQzMDQwZDFjYSwkNGU3NTIwNmUsJGZmNDQ1NGFlLCRmZjQ0NjFmZgorCWRjLmwJJGZmZmZkZGUwLCQ0YTgxNjZmZiwkZmZmZmYxNWUsJDMwNDBkMWNiCisJZGMubAkkNGU3NTIwNmUsJGZmNDQ1NGFlLCRmZjQ0NjFmZiwkZmZmZmRkYzQKKwlkYy5sCSQ0YTgxNjZmZiwkZmZmZmYxNDIsJDMwNDBkMWNjLCQ0ZTc1MjA2ZQorCWRjLmwJJGZmNDQ1NGFlLCRmZjQ0NjFmZiwkZmZmZmRkYTgsJDRhODE2NmZmCisJZGMubAkkZmZmZmYxMjYsJDMwNDBkMWNkLCQ0ZTc1MjA2ZSwkZmY0NDU0YWUKKwlkYy5sCSRmZjQ0NjFmZiwkZmZmZmRkOGMsJDRhODE2NmZmLCRmZmZmZjEwYQorCWRjLmwJJDMwNDBkMWQ2LCQ0ZTc1MjA2ZSwkZmY0NDU0YWUsJGZmNDQ2MWZmCisJZGMubAkkZmZmZmRkNzAsJDRhODE2NmZmLCRmZmZmZjBlZSwkMzA0MGQxZWUKKwlkYy5sCSRmZmQ4NGU3NSwkNTA4MTYxZmYsJDAwMDAzOGZhLCQyZjAwMjA2ZQorCWRjLmwJJGZmNDQ1NGFlLCRmZjQ0NjFmZiwkZmZmZmRkNDgsJDRhODE2NmZmCisJZGMubAkkZmZmZmYwYzYsJDIwNWYwODAwLCQwMDA4NjYwMCwkMDBlNjJkNDAKKwlkYy5sCSRmZjU0MjIwMCwkZTk1OTAyNDEsJDAwMGY2MWZmLCQwMDAwMzhjNgorCWRjLmwJJDJmMDIyNDJlLCRmZjU0MDgwMiwkMDAwYjY2MDIsJDQ4YzAyMjAyCisJZGMubAkkZWY1OTAyODEsJDAwMDAwMDAzLCRlM2E4NDljMiwkZDA4MmQxYzAKKwlkYy5sCSQyNDFmNGU3NSwkMjA2ZWZmNDQsJDU0YWVmZjQ0LCQ2MWZmZmZmZgorCWRjLmwJJGRjZjI0YTgxLCQ2NmZmZmZmZiwkZjA3MDMwNDAsJDRlNzUyMDZlCisJZGMubAkkZmY0NDU4YWUsJGZmNDQ2MWZmLCRmZmZmZGNlZSwkNGE4MTY2ZmYKKwlkYy5sCSRmZmZmZjA1NiwkMjA0MDRlNzUsJDIwNmVmZjQ0LCQ1NGFlZmY0NAorCWRjLmwJJDYxZmZmZmZmLCRkY2JlNGE4MSwkNjZmZmZmZmYsJGYwM2MzMDQwCisJZGMubAkkZDFlZWZmNDQsJDU1ODg0ZTc1LCQyMDZlZmY0NCwkNTRhZWZmNDQKKwlkYy5sCSQ2MWZmZmZmZiwkZGM5ZTRhODEsJDY2ZmZmZmZmLCRmMDFjMjA2ZQorCWRjLmwJJGZmNDQ1NTg4LCQwODAwMDAwOCwkNjYwMDAwMzgsJDJkNDBmZjU0CisJZGMubAkkMjIwMGU5NTksJDAyNDEwMDBmLCQ2MWZmMDAwMCwkMzgxODJmMDIKKwlkYy5sCSQyNDJlZmY1NCwkMDgwMjAwMGIsJDY2MDI0OGMwLCQyMjAyZWY1OQorCWRjLmwJJDAyODEwMDAwLCQwMDAzZTNhOCwkNDljMmQwODIsJGQxYzAyNDFmCisJZGMubAkkNGU3NTA4MDAsJDAwMDY2NzBjLCQ0OGU3M2MwMCwkMmEwMDI2MDgKKwlkYy5sCSQ0MjgyNjAyOCwkMmQ0MGZmNTQsJGU5YzAxNDA0LCQ2MWZmMDAwMAorCWRjLmwJJDM3ZDQ0OGU3LCQzYzAwMjQwMCwkMmEyZWZmNTQsJDI2MDgwODA1CisJZGMubAkkMDAwYjY2MDIsJDQ4YzJlOWM1LCQwNTQyZTFhYSwkMDgwNTAwMDcKKwlkYy5sCSQ2NzAyNDI4MywkZTljNTA2ODIsJDBjMDAwMDAyLCQ2ZDM0NjcxOAorCWRjLmwJJDIwNmVmZjQ0LCQ1OGFlZmY0NCwkNjFmZmZmZmYsJGRjMGM0YTgxCisJZGMubAkkNjZmZjAwMDAsJDAwYjA2MDE4LCQyMDZlZmY0NCwkNTRhZWZmNDQKKwlkYy5sCSQ2MWZmZmZmZiwkZGJkZTRhODEsJDY2ZmYwMDAwLCQwMDk4NDhjMAorCWRjLmwJJGQ2ODBlOWM1LCQwNzgyNjcwMCwkMDA2ZTBjMDAsJDAwMDI2ZDM0CisJZGMubAkkNjcxODIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmRiY2EKKwlkYy5sCSQ0YTgxNjZmZiwkMDAwMDAwNmUsJDYwMWMyMDZlLCRmZjQ0NTRhZQorCWRjLmwJJGZmNDQ2MWZmLCRmZmZmZGI5YywkNGE4MTY2ZmYsJDAwMDAwMDU2CisJZGMubAkkNDhjMDYwMDIsJDQyODAyODAwLCQwODA1MDAwMiwkNjcxNDIwNDMKKwlkYy5sCSQ2MWZmZmZmZiwkZGJkNjRhODEsJDY2MDAwMDI4LCRkMDgyZDA4NAorCWRjLmwJJDYwMThkNjgyLCQyMDQzNjFmZiwkZmZmZmRiYzAsJDRhODE2NjAwCisJZGMubAkkMDAxMmQwODQsJDYwMDRkNjgyLCQyMDAzMjA0MCwkNGNkZjAwM2MKKwlkYy5sCSQ0ZTc1MjA0MywkNGNkZjAwM2MsJDMwM2MwMTAxLCQ2MGZmZmZmZgorCWRjLmwJJGVmMTg0Y2RmLCQwMDNjNjBmZiwkZmZmZmVlYmUsJDYxZmYwMDAwCisJZGMubAkkNDRlYTMwM2MsJDAwZTE2MDBhLCQ2MWZmMDAwMCwkNDRkZTMwM2MKKwlkYy5sCSQwMTYxMjA2ZSwkZmY1NDYwZmYsJGZmZmZlZWVlLCQxMDJlZmY0MgorCWRjLmwJJDBjMDAwMDljLCQ2NzAwMDBiMiwkMGMwMDAwOTgsJDY3MDAwMDc0CisJZGMubAkkMGMwMDAwOTQsJDY3MzYyMDZlLCRmZjQ0NThhZSwkZmY0NDYxZmYKKwlkYy5sCSRmZmZmZGIwNiwkNGE4MTY2ZmYsJGZmZmZlZTZlLCQyZDQwZmY2NAorCWRjLmwJJDIwNmVmZjQ0LCQ1OGFlZmY0NCwkNjFmZmZmZmYsJGRhZWM0YTgxCisJZGMubAkkNjZmZmZmZmYsJGVlNTQyZDQwLCRmZjY4NGU3NSwkMjA2ZWZmNDQKKwlkYy5sCSQ1OGFlZmY0NCwkNjFmZmZmZmYsJGRhZDA0YTgxLCQ2NmZmZmZmZgorCWRjLmwJJGVlMzgyZDQwLCRmZjYwMjA2ZSwkZmY0NDU4YWUsJGZmNDQ2MWZmCisJZGMubAkkZmZmZmRhYjYsJDRhODE2NmZmLCRmZmZmZWUxZSwkMmQ0MGZmNjgKKwlkYy5sCSQ0ZTc1MjA2ZSwkZmY0NDU4YWUsJGZmNDQ2MWZmLCRmZmZmZGE5YQorCWRjLmwJJDRhODE2NmZmLCRmZmZmZWUwMiwkMmQ0MGZmNjAsJDIwNmVmZjQ0CisJZGMubAkkNThhZWZmNDQsJDYxZmZmZmZmLCRkYTgwNGE4MSwkNjZmZmZmZmYKKwlkYy5sCSRlZGU4MmQ0MCwkZmY2NDRlNzUsJDIwNmVmZjQ0LCQ1OGFlZmY0NAorCWRjLmwJJDYxZmZmZmZmLCRkYTY0NGE4MSwkNjZmZmZmZmYsJGVkY2MyZDQwCisJZGMubAkkZmY2MDIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmRhNGEKKwlkYy5sCSQ0YTgxNjZmZiwkZmZmZmVkYjIsJDJkNDBmZjY0LCQyMDZlZmY0NAorCWRjLmwJJDU4YWVmZjQ0LCQ2MWZmZmZmZiwkZGEzMDRhODEsJDY2ZmZmZmZmCisJZGMubAkkZWQ5ODJkNDAsJGZmNjg0ZTc1LCQyZDY4MDAwNCwkZmY4ODJkNjkKKwlkYy5sCSQwMDA0ZmY5NCwkMmQ2ODAwMDgsJGZmOGMyZDY5LCQwMDA4ZmY5OAorCWRjLmwJJDMwMjgwMDAwLCQzMjI5MDAwMCwkM2Q0MGZmODQsJDNkNDFmZjkwCisJZGMubAkkMDI0MDdmZmYsJDAyNDE3ZmZmLCQzZDQwZmY1NCwkM2Q0MWZmNTYKKwlkYy5sCSRiMDQxNmNmZiwkMDAwMDAwNWMsJDYxZmYwMDAwLCQwMTVhMmYwMAorCWRjLmwJJDBjMmUwMDA0LCRmZjRlNjYxMCwkNDFlZWZmODQsJDYxZmYwMDAwCisJZGMubAkkMDRmYTQ0NDAsJDNkNDBmZjU0LCQzMDJlZmY1NiwkMDQ0MDAwNDIKKwlkYy5sCSRiMDZlZmY1NCwkNmMxYTMwMmUsJGZmNTRkMDZmLCQwMDAyMzIyZQorCWRjLmwJJGZmODQwMjQxLCQ4MDAwODA0MSwkM2Q0MGZmODQsJDIwMWY0ZTc1CisJZGMubAkkMDI2ZTgwMDAsJGZmODQwOGVlLCQwMDAwZmY4NSwkMjAxZjRlNzUKKwlkYy5sCSQ2MWZmMDAwMCwkMDA1NjJmMDAsJDBjMmUwMDA0LCRmZjRmNjYxMAorCWRjLmwJJDQxZWVmZjkwLCQ2MWZmMDAwMCwkMDRhMjQ0NDAsJDNkNDBmZjU2CisJZGMubAkkMzAyZWZmNTQsJDA0NDAwMDQyLCRiMDZlZmY1NiwkNmMxYTMwMmUKKwlkYy5sCSRmZjU2ZDA2ZiwkMDAwMjMyMmUsJGZmOTAwMjQxLCQ4MDAwODA0MQorCWRjLmwJJDNkNDBmZjkwLCQyMDFmNGU3NSwkMDI2ZTgwMDAsJGZmOTAwOGVlCisJZGMubAkkMDAwMGZmOTEsJDIwMWY0ZTc1LCQzMjJlZmY4NCwkMzAwMTAyODEKKwlkYy5sCSQwMDAwN2ZmZiwkMDI0MDgwMDAsJDAwNDAzZmZmLCQzZDQwZmY4NAorCWRjLmwJJDBjMmUwMDA0LCRmZjRlNjcwYSwkMjAzYzAwMDAsJDNmZmY5MDgxCisJZGMubAkkNGU3NTQxZWUsJGZmODQ2MWZmLCQwMDAwMDQzMCwkNDQ4MDIyMDAKKwlkYy5sCSQ2MGU2MGMyZSwkMDAwNGZmNGUsJDY3M2EzMjJlLCRmZjg0MDI4MQorCWRjLmwJJDAwMDA3ZmZmLCQwMjZlODAwMCwkZmY4NDA4MDEsJDAwMDA2NzEyCisJZGMubAkkMDA2ZTNmZmYsJGZmODQyMDNjLCQwMDAwM2ZmZiwkOTA4MWUyODAKKwlkYy5sCSQ0ZTc1MDA2ZSwkM2ZmZWZmODQsJDIwM2MwMDAwLCQzZmZlOTA4MQorCWRjLmwJJGUyODA0ZTc1LCQ0MWVlZmY4NCwkNjFmZjAwMDAsJDAzZGUwODAwCisJZGMubAkkMDAwMDY3MTAsJDAwNmUzZmZmLCRmZjg0MDY4MCwkMDAwMDNmZmYKKwlkYy5sCSRlMjgwNGU3NSwkMDA2ZTNmZmUsJGZmODQwNjgwLCQwMDAwM2ZmZQorCWRjLmwJJGUyODA0ZTc1LCQzMjJlZmY5MCwkMzAwMTAyODEsJDAwMDA3ZmZmCisJZGMubAkkMDI0MDgwMDAsJDAwNDAzZmZmLCQzZDQwZmY5MCwkMGMyZTAwMDQKKwlkYy5sCSRmZjRmNjcwYSwkMjAzYzAwMDAsJDNmZmY5MDgxLCQ0ZTc1NDFlZQorCWRjLmwJJGZmOTA2MWZmLCQwMDAwMDM4NCwkNDQ4MDIyMDAsJDYwZTYwYzJlCisJZGMubAkkMDAwNWZmNGYsJDY3MzIwYzJlLCQwMDAzZmY0ZiwkNjczZTBjMmUKKwlkYy5sCSQwMDAzZmY0ZSwkNjcxNDA4ZWUsJDAwMDZmZjcwLCQwMGFlMDEwMAorCWRjLmwJJDQwODBmZjY0LCQ0MWVlZmY2YywkNjA0MjAwYWUsJDAxMDAwMDAwCisJZGMubAkkZmY2NDQxZWUsJGZmNmM2MDM0LCQwMGFlMDEwMCwkNDA4MGZmNjQKKwlkYy5sCSQwOGVlMDAwNiwkZmY3YzQxZWUsJGZmNzg2MDIwLCQ0MWVlZmY3OAorCWRjLmwJJDBjMmUwMDA1LCRmZjRlNjZmZiwkMDAwMDAwMGMsJDAwYWUwMDAwCisJZGMubAkkNDA4MGZmNjQsJDAwYWUwMTAwLCQwMDAwZmY2NCwkMDgyODAwMDcKKwlkYy5sCSQwMDAwNjcwOCwkMDBhZTA4MDAsJDAwMDBmZjY0LCRmMjEwZDA4MAorCWRjLmwJJDRlNzUwMGFlLCQwMTAwMjA4MCwkZmY2NGYyM2IsJGQwODAwMTcwCisJZGMubAkkMDAwMDAwMDgsJDRlNzU3ZmZmLCQwMDAwZmZmZiwkZmZmZmZmZmYKKwlkYy5sCSRmZmZmMDAwMCwkM2Y4MTNjMDEsJGU0MDgzMjNiLCQwMmY2MzAwMQorCWRjLmwJJDkwNjgwMDAwLCQwYzQwMDA0MiwkNmExNjQyODAsJDA4MmUwMDAxCisJZGMubAkkZmY2NjY3MDQsJDA4YzAwMDFkLCQ2MWZmMDAwMCwkMDAxYTRlNzUKKwlkYy5sCSQyMDNjMjAwMCwkMDAwMDMxNDEsJDAwMDA0MmE4LCQwMDA0NDJhOAorCWRjLmwJJDAwMDg0ZTc1LCQyZDY4MDAwOCwkZmY1NDJkNDAsJGZmNTgyMDAxCisJZGMubAkkOTI2ODAwMDAsJDZmMTAwYzQxLCQwMDIwNmQxMCwkMGM0MTAwNDAKKwlkYy5sCSQ2ZDUwNjAwMCwkMDA5YTIwMmUsJGZmNTg0ZTc1LCQyZjAyMzE0MAorCWRjLmwJJDAwMDA3MDIwLCQ5MDQxMGM0MSwkMDAxZDZkMDgsJDE0MmVmZjU4CisJZGMubAkkODUyZWZmNTcsJGU5ZTgyMDIwLCQwMDA0ZTllOCwkMTgwMDAwMDQKKwlkYy5sCSRlOWVlMDgwMCwkZmY1NDIxNDIsJDAwMDQyMTQxLCQwMDA4ZThjMAorCWRjLmwJJDAwOWU2NzA0LCQwOGMwMDAxZCwkMDI4MGUwMDAsJDAwMDAyNDFmCisJZGMubAkkNGU3NTJmMDIsJDMxNDAwMDAwLCQwNDQxMDAyMCwkNzAyMDkwNDEKKwlkYy5sCSQxNDJlZmY1OCwkODUyZWZmNTcsJGU5ZTgyMDIwLCQwMDA0ZTllOAorCWRjLmwJJDE4MDAwMDA0LCRlOGMxMDA5ZSwkNjYwY2U4ZWUsJDA4MWZmZjU0CisJZGMubAkkNjYwNDIwMDEsJDYwMDYyMDAxLCQwOGMwMDAxZCwkNDJhODAwMDQKKwlkYy5sCSQyMTQyMDAwOCwkMDI4MGUwMDAsJDAwMDAyNDFmLCQ0ZTc1MzE0MAorCWRjLmwJJDAwMDAwYzQxLCQwMDQxNmQxMiwkNjcyNDQyYTgsJDAwMDQ0MmE4CisJZGMubAkkMDAwODIwM2MsJDIwMDAwMDAwLCQ0ZTc1MjAyOCwkMDAwNDIyMDAKKwlkYy5sCSQwMjgwYzAwMCwkMDAwMDAyODEsJDNmZmZmZmZmLCQ2MDEyMjAyOAorCWRjLmwJJDAwMDQwMjgwLCQ4MDAwMDAwMCwkZTI4ODAyODEsJDdmZmZmZmZmCisJZGMubAkkNjYxNjRhYTgsJDAwMDg2NjEwLCQ0YTJlZmY1OCwkNjYwYTQyYTgKKwlkYy5sCSQwMDA0NDJhOCwkMDAwODRlNzUsJDA4YzAwMDFkLCQ0MmE4MDAwNAorCWRjLmwJJDQyYTgwMDA4LCQ0ZTc1NjFmZiwkMDAwMDAxMTAsJDRhODA2NzAwCisJZGMubAkkMDBmYTAwNmUsJDAyMDhmZjY2LCQzMjdiMTIwNiwkNGVmYjk4MDIKKwlkYy5sCSQwMDQwMDBlYSwkMDAyNDAwMDgsJDRhMjgwMDAyLCQ2YjAwMDBkYworCWRjLmwJJDcwZmY0ODQxLCQwYzAxMDAwNCwkNjcwMDAwM2UsJDZlMDAwMDk0CisJZGMubAkkNjAwMDAwNjQsJDRhMjgwMDAyLCQ2YTAwMDBjMCwkNzBmZjQ4NDEKKwlkYy5sCSQwYzAxMDAwNCwkNjcwMDAwMjIsJDZlMDAwMDc4LCQ2MDAwMDA0OAorCWRjLmwJJGUzODA2NDAwLCQwMGE2NDg0MSwkMGMwMTAwMDQsJDY3MDAwMDBhCisJZGMubAkkNmUwMDAwNjAsJDYwMDAwMDMwLCQwNmE4MDAwMCwkMDEwMDAwMDQKKwlkYy5sCSQ2NDBjZTRlOCwkMDAwNGU0ZTgsJDAwMDY1MjY4LCQwMDAwNGE4MAorCWRjLmwJJDY2MDYwMjY4LCRmZTAwMDAwNiwkMDJhOGZmZmYsJGZmMDAwMDA0CisJZGMubAkkNDJhODAwMDgsJDRlNzU1MmE4LCQwMDA4NjQxYSwkNTJhODAwMDQKKwlkYy5sCSQ2NDE0ZTRlOCwkMDAwNGU0ZTgsJDAwMDZlNGU4LCQwMDA4ZTRlOAorCWRjLmwJJDAwMGE1MjY4LCQwMDAwNGE4MCwkNjYwNjAyMjgsJDAwZmUwMDBiCisJZGMubAkkNGU3NTA2YTgsJDAwMDAwODAwLCQwMDA4NjQxYSwkNTJhODAwMDQKKwlkYy5sCSQ2NDE0ZTRlOCwkMDAwNGU0ZTgsJDAwMDZlNGU4LCQwMDA4ZTRlOAorCWRjLmwJJDAwMGE1MjY4LCQwMDAwNGE4MCwkNjYwNjAyNjgsJGYwMDAwMDBhCisJZGMubAkkMDJhOGZmZmYsJGY4MDAwMDA4LCQ0ZTc1NDg0MSwkMGMwMTAwMDQKKwlkYy5sCSQ2NzAwZmY4NiwkNmVlYTRlNzUsJDQ4NDE0YTAxLCQ2NjA0NDg0MQorCWRjLmwJJDRlNzU0OGU3LCQzMDAwMGMwMSwkMDAwNDY2MjIsJGU5ZTgzNjAyCisJZGMubAkkMDAwNDc0MWUsJGU1YWIyNDI4LCQwMDA0MDI4MiwkMDAwMDAwM2YKKwlkYy5sCSQ2NjI4NGFhOCwkMDAwODY2MjIsJDRhODA2NjFlLCQ2MDIwZTllOAorCWRjLmwJJDM1NDIwMDA4LCQ3NDFlZTVhYiwkMjQyODAwMDgsJDAyODIwMDAwCisJZGMubAkkMDFmZjY2MDYsJDRhODA2NjAyLCQ2MDA0MDhjMywkMDAxZDIwMDMKKwlkYy5sCSQ0Y2RmMDAwYywkNDg0MTRlNzUsJDJmMDIyZjAzLCQyMDI4MDAwNAorCWRjLmwJJDIyMjgwMDA4LCRlZGMwMjAwMCwkNjcxYWU1YTgsJGU5YzEzMDIyCisJZGMubAkkODA4M2U1YTksJDIxNDAwMDA0LCQyMTQxMDAwOCwkMjAwMjI2MWYKKwlkYy5sCSQyNDFmNGU3NSwkZWRjMTIwMDAsJGU1YTkwNjgyLCQwMDAwMDAyMAorCWRjLmwJJDIxNDEwMDA0LCQ0MmE4MDAwOCwkMjAwMjI2MWYsJDI0MWY0ZTc1CisJZGMubAkkZWRlODAwMDAsJDAwMDQ2NjBlLCRlZGU4MDAwMCwkMDAwODY3MDAKKwlkYy5sCSQwMDc0MDY0MCwkMDAyMDQyODEsJDMyMjgwMDAwLCQwMjQxN2ZmZgorCWRjLmwJJGIwNDE2ZTFjLCQ5MjQwMzAyOCwkMDAwMDAyNDAsJDgwMDA4MjQwCisJZGMubAkkMzE0MTAwMDAsJDYxZmZmZmZmLCRmZjgyMTAzYywkMDAwMDRlNzUKKwlkYy5sCSQwYzAxMDAyMCwkNmUyMGU5ZTgsJDA4NDAwMDA0LCQyMTQwMDAwNAorCWRjLmwJJDIwMjgwMDA4LCRlM2E4MjE0MCwkMDAwODAyNjgsJDgwMDAwMDAwCisJZGMubAkkMTAzYzAwMDQsJDRlNzUwNDQxLCQwMDIwMjAyOCwkMDAwOGUzYTgKKwlkYy5sCSQyMTQwMDAwNCwkNDJhODAwMDgsJDAyNjg4MDAwLCQwMDAwMTAzYworCWRjLmwJJDAwMDQ0ZTc1LCQwMjY4ODAwMCwkMDAwMDEwM2MsJDAwMDE0ZTc1CisJZGMubAkkMzAyODAwMDAsJDAyNDA3ZmZmLCQwYzQwN2ZmZiwkNjc0ODA4MjgKKwlkYy5sCSQwMDA3MDAwNCwkNjcwNjEwM2MsJDAwMDA0ZTc1LCQ0YTQwNjYxOAorCWRjLmwJJDRhYTgwMDA0LCQ2NjBjNGFhOCwkMDAwODY2MDYsJDEwM2MwMDAxCisJZGMubAkkNGU3NTEwM2MsJDAwMDQ0ZTc1LCQ0YWE4MDAwNCwkNjYxMjRhYTgKKwlkYy5sCSQwMDA4NjYwYywkMDI2ODgwMDAsJDAwMDAxMDNjLCQwMDAxNGU3NQorCWRjLmwJJDEwM2MwMDA2LCQ0ZTc1NGFhOCwkMDAwODY2MTIsJDIwMjgwMDA0CisJZGMubAkkMDI4MDdmZmYsJGZmZmY2NjA2LCQxMDNjMDAwMiwkNGU3NTA4MjgKKwlkYy5sCSQwMDA2MDAwNCwkNjcwNjEwM2MsJDAwMDM0ZTc1LCQxMDNjMDAwNQorCWRjLmwJJDRlNzUyMDI4LCQwMDAwMjIwMCwkMDI4MDdmZjAsJDAwMDA2NzBlCisJZGMubAkkMGM4MDdmZjAsJDAwMDA2NzI4LCQxMDNjMDAwMCwkNGU3NTAyODEKKwlkYy5sCSQwMDBmZmZmZiwkNjZmZjAwMDAsJDAwMTQ0YWE4LCQwMDA0NjZmZgorCWRjLmwJJDAwMDAwMDBhLCQxMDNjMDAwMSwkNGU3NTEwM2MsJDAwMDQ0ZTc1CisJZGMubAkkMDI4MTAwMGYsJGZmZmY2NmZmLCQwMDAwMDAxNCwkNGFhODAwMDQKKwlkYy5sCSQ2NmZmMDAwMCwkMDAwYTEwM2MsJDAwMDI0ZTc1LCQwODAxMDAxMworCWRjLmwJJDY2ZmYwMDAwLCQwMDBhMTAzYywkMDAwNTRlNzUsJDEwM2MwMDAzCisJZGMubAkkNGU3NTIwMjgsJDAwMDAyMjAwLCQwMjgwN2Y4MCwkMDAwMDY3MGUKKwlkYy5sCSQwYzgwN2Y4MCwkMDAwMDY3MWUsJDEwM2MwMDAwLCQ0ZTc1MDI4MQorCWRjLmwJJDAwN2ZmZmZmLCQ2NmZmMDAwMCwkMDAwYTEwM2MsJDAwMDE0ZTc1CisJZGMubAkkMTAzYzAwMDQsJDRlNzUwMjgxLCQwMDdmZmZmZiwkNjZmZjAwMDAKKwlkYy5sCSQwMDBhMTAzYywkMDAwMjRlNzUsJDA4MDEwMDE2LCQ2NmZmMDAwMAorCWRjLmwJJDAwMGExMDNjLCQwMDA1NGU3NSwkMTAzYzAwMDMsJDRlNzUyZjAxCisJZGMubAkkMDgyODAwMDcsJDAwMDA1NmU4LCQwMDAyMzIyOCwkMDAwMDAyNDEKKwlkYy5sCSQ3ZmZmOTI0MCwkMzE0MTAwMDAsJDJmMDgyMDJmLCQwMDA0MDI0MAorCWRjLmwJJDAwYzBlODQ4LCQ2MWZmZmZmZiwkZmFlMjIwNTcsJDMyMmYwMDA2CisJZGMubAkkMDI0MTAwYzAsJGU4NDk0ODQxLCQzMjJmMDAwNiwkMDI0MTAwMzAKKwlkYy5sCSRlODQ5NjFmZiwkZmZmZmZjMjIsJDIwNWYwOGE4LCQwMDA3MDAwMAorCWRjLmwJJDRhMjgwMDAyLCQ2NzBhMDhlOCwkMDAwNzAwMDAsJDQyMjgwMDAyCisJZGMubAkkNDI4MDRhYTgsJDAwMDQ2NjBhLCQ0YWE4MDAwOCwkNjYwNDA4YzAKKwlkYy5sCSQwMDAyMDgyZSwkMDAwMWZmNjYsJDY3MDYwOGVlLCQwMDA1ZmY2NworCWRjLmwJJDU4OGY0ZTc1LCQyZjAxMDgyOCwkMDAwNzAwMDAsJDU2ZTgwMDAyCisJZGMubAkkMzIyODAwMDAsJDAyNDE3ZmZmLCQ5MjQwMzE0MSwkMDAwMDJmMDgKKwlkYy5sCSQ0MjgwNjFmZiwkZmZmZmZhNjQsJDIwNTczMjNjLCQwMDA0NDg0MQorCWRjLmwJJDMyMmYwMDA2LCQwMjQxMDAzMCwkZTg0OTYxZmYsJGZmZmZmYmFhCisJZGMubAkkMjA1ZjA4YTgsJDAwMDcwMDAwLCQ0YTI4MDAwMiwkNjcwYTA4ZTgKKwlkYy5sCSQwMDA3MDAwMCwkNDIyODAwMDIsJDQyODA0YWE4LCQwMDA0NjYwYQorCWRjLmwJJDRhYTgwMDA4LCQ2NjA0MDhjMCwkMDAwMjA4MmUsJDAwMDFmZjY2CisJZGMubAkkNjcwNjA4ZWUsJDAwMDVmZjY3LCQ1ODhmNGU3NSwkMDI0MTAwMTAKKwlkYy5sCSRlODA4ODIwMCwkMzAwMWUzMDksJDYwMGUwMjQxLCQwMDEwODIwMAorCWRjLmwJJDQ4NDA4MjAwLCQzMDAxZTMwOSwkMTAzYjAwMDgsJDQxZmIxNjIwCisJZGMubAkkNGU3NTAyMDAsJDAwMDIwMjAwLCQwMDAyMDIwMCwkMDAwMjAwMDAKKwlkYy5sCSQwMDAwMGEwOCwkMGEwODBhMDgsJDBhMDgwYTA4LCQwYTA4N2ZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA3ZmZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmZmZmMDAwMCwkMDAwMDdmZmUKKwlkYy5sCSQwMDAwZmZmZiwkZmZmZmZmZmYsJGZmZmYwMDAwLCQwMDAwN2ZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA3ZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDQwN2UKKwlkYy5sCSQwMDAwZmZmZiwkZmYwMDAwMDAsJDAwMDAwMDAwLCQwMDAwNDA3ZQorCWRjLmwJJDAwMDBmZmZmLCRmZjAwMDAwMCwkMDAwMDAwMDAsJDAwMDA3ZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDdmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwNDNmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZjgwMDAwMDAsJDAwMDA0M2ZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmODAwMDAwMCwkMDAwMDdmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDBmZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMGZmZmUKKwlkYy5sCSQwMDAwZmZmZiwkZmZmZmZmZmYsJGZmZmYwMDAwLCQwMDAwZmZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDBmZmZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmZmZmMDAwMCwkMDAwMGZmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwYzA3ZQorCWRjLmwJJDAwMDBmZmZmLCRmZjAwMDAwMCwkMDAwMDAwMDAsJDAwMDBmZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMGMwN2UKKwlkYy5sCSQwMDAwZmZmZiwkZmYwMDAwMDAsJDAwMDAwMDAwLCQwMDAwZmZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDBjM2ZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmODAwMDAwMCwkMDAwMGZmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwYzNmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZjgwMDAwMDAsJDAwMDBlOWVlCisJZGMubAkkMTBjM2ZmNDIsJDMyN2IxMjBhLCQ0ZWZiOTgwNiwkNGFmYzAwMDgKKwlkYy5sCSQwMGUwMDFlMCwkMDE0ODA2MjAsJDAwNzgwNDFhLCQwMDEwMDYyMAorCWRjLmwJJDRhMmVmZjRlLCQ2NjRjZjIyOCwkZDA4MDAwMDAsJGYyMDA5MDAwCisJZGMubAkkZjIwMDc4MDAsJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIwMWE4MDAKKwlkYy5sCSQ4MzZlZmY2NiwkMTIyZWZmNDEsJDAyMDEwMDM4LCQ2NzE0MjA2ZQorCWRjLmwJJDAwMGM2MWZmLCRmZmZmY2ZhYSwkNGE4MTY2ZmYsJDAwMDAzODVhCisJZGMubAkkNGU3NTEyMmUsJGZmNDEwMjQxLCQwMDA3NjFmZiwkMDAwMDJiYjAKKwlkYy5sCSQ0ZTc1MjIyOCwkMDAwMDAyODEsJDgwMDAwMDAwLCQwMDgxMDA4MAorCWRjLmwJJDAwMDBmMjAxLCQ0NDAwNjBhNCwkNGEyZWZmNGUsJDY2NGNmMjI4CisJZGMubAkkZDA4MDAwMDAsJGYyMDA5MDAwLCRmMjAwNzAwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIwMWE4MDAsJDgzNmVmZjY2LCQxMjJlZmY0MQorCWRjLmwJJDAyMDEwMDM4LCQ2NzE0MjA2ZSwkMDAwYzYxZmYsJGZmZmZjZjU4CisJZGMubAkkNGE4MTY2ZmYsJDAwMDAzODAwLCQ0ZTc1MTIyZSwkZmY0MTAyNDEKKwlkYy5sCSQwMDA3NjFmZiwkMDAwMDJiMGMsJDRlNzUyMjI4LCQwMDAwMDI4MQorCWRjLmwJJDgwMDAwMDAwLCQwMDgxMDA4MCwkMDAwMGYyMDEsJDQ0MDA2MGE0CisJZGMubAkkNGEyZWZmNGUsJDY2NGNmMjI4LCRkMDgwMDAwMCwkZjIwMDkwMDAKKwlkYy5sCSRmMjAwNjAwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjAxYTgwMAorCWRjLmwJJDgzNmVmZjY2LCQxMjJlZmY0MSwkMDIwMTAwMzgsJDY3MTQyMDZlCisJZGMubAkkMDAwYzYxZmYsJGZmZmZjZjA2LCQ0YTgxNjZmZiwkMDAwMDM3YTYKKwlkYy5sCSQ0ZTc1MTIyZSwkZmY0MTAyNDEsJDAwMDc2MWZmLCQwMDAwMmE2OAorCWRjLmwJJDRlNzUyMjI4LCQwMDAwMDI4MSwkODAwMDAwMDAsJDAwODEwMDgwCisJZGMubAkkMDAwMGYyMDEsJDQ0MDA2MGE0LCQzZDY4MDAwMCwkZmY4NDQyNmUKKwlkYy5sCSRmZjg2MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4LCRmZjhjZjIyOAorCWRjLmwJJGQwODAwMDAwLCQ2MWZmZmZmZiwkZTgzZTIyNDgsJDQxZWVmZjg0CisJZGMubAkkNzAwYzBjMmUsJDAwMDhmZjRhLCQ2NzI2NjFmZiwkZmZmZmNkZWUKKwlkYy5sCSQ0YTgxNjYwMCwkMDA1MjRhMmUsJGZmNGU2NjAyLCQ0ZTc1MDhlZQorCWRjLmwJJDAwMDNmZjY2LCQxMDJlZmY2MiwkMDIwMDAwMGEsJDY2MTY0ZTc1CisJZGMubAkkNjFmZmZmZmYsJGRjNGE0YTgxLCQ2NjAwMDAyYywkNGEyZWZmNGUKKwlkYy5sCSQ2NmRjNGU3NSwkNDFlZWZmODQsJDYxZmZmZmZmLCRmOTBlNDQ0MAorCWRjLmwJJDAyNDA3ZmZmLCQwMjZlODAwMCwkZmY4NDgxNmUsJGZmODRmMjJlCisJZGMubAkkZDA0MGZmODQsJDRlNzUyY2FlLCRmZmQ0NjBmZiwkMDAwMDM3MDIKKwlkYy5sCSQwMjAwMDAzMCwkMDAwMDAwNDAsJDJkNDBmZjVjLCQzMDI4MDAwMAorCWRjLmwJJDAyNDA3ZmZmLCQwYzQwNDA3ZSwkNmUwMDAwZTYsJDY3MDAwMTUyCisJZGMubAkkMGM0MDNmODEsJDZkMDAwMDU4LCRmMjI4ZDA4MCwkMDAwMGYyMmUKKwlkYy5sCSQ5MDAwZmY1YywkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjAwNjQwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIwMWE4MDAsJDgzNmVmZjY2CisJZGMubAkkMTIyZWZmNDEsJDAyMDEwMDM4LCQ2NzE0MjA2ZSwkMDAwYzYxZmYKKwlkYy5sCSRmZmZmY2RkYSwkNGE4MTY2ZmYsJDAwMDAzNjdhLCQ0ZTc1MTIyZQorCWRjLmwJJGZmNDEwMjQxLCQwMDA3NjFmZiwkMDAwMDI5M2MsJDRlNzUwOGVlCisJZGMubAkkMDAwM2ZmNjYsJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgKKwlkYy5sCSQyZDY4MDAwOCwkZmY4YzJmMDgsJDQyODAwYzJlLCQwMDA0ZmY0ZQorCWRjLmwJJDY2MGE0MWVlLCRmZjg0NjFmZiwkZmZmZmY4NDAsJDQxZWVmZjg0CisJZGMubAkkMjIyZWZmNWMsJDYxZmZmZmZmLCRmYTU4NDFlZSwkZmY4NDYxZmYKKwlkYy5sCSQwMDAwMDM0YywkMTIyZWZmNDEsJDAyMDEwMDM4LCQ2NzE0MjA2ZQorCWRjLmwJJDAwMGM2MWZmLCRmZmZmY2Q2NiwkNGE4MTY2ZmYsJDAwMDAzNjA2CisJZGMubAkkNjAwZTEyMmUsJGZmNDEwMjQxLCQwMDA3NjFmZiwkMDAwMDI4YzgKKwlkYy5sCSQxMjJlZmY2MiwkMDIwMTAwMGEsJDY2MDAwMGI4LCQ1ODhmNGU3NQorCWRjLmwJJDRhMjgwMDA3LCQ2NjBlNGFhOCwkMDAwODY2MDgsJDAwNmUxMDQ4CisJZGMubAkkZmY2NjYwMDYsJDAwNmUxMjQ4LCRmZjY2MmYwOCwkNGEyODAwMDAKKwlkYy5sCSQ1YmMxMjAyZSwkZmY1YzYxZmYsJGZmZmZmYWU0LCRmMjEwZDA4MAorCWRjLmwJJGYyMDA2NDAwLCQxMjJlZmY0MSwkMDIwMTAwMzgsJDY3MTQyMDZlCisJZGMubAkkMDAwYzYxZmYsJGZmZmZjY2Y2LCQ0YTgxNjZmZiwkMDAwMDM1OTYKKwlkYy5sCSQ2MDBlMTIyZSwkZmY0MTAyNDEsJDAwMDc2MWZmLCQwMDAwMjg1OAorCWRjLmwJJDEyMmVmZjYyLCQwMjAxMDAwYSwkNjYwMDAwN2MsJDU4OGY0ZTc1CisJZGMubAkkMzIyODAwMDAsJDAyNDE4MDAwLCQwMDQxM2ZmZiwkM2Q0MWZmODQKKwlkYy5sCSQyZDY4MDAwNCwkZmY4ODJkNjgsJDAwMDhmZjhjLCRmMjJlOTAwMAorCWRjLmwJJGZmNWNmMjJlLCQ0ODAwZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIwMDAwMTgsJGYyM2M1ODM4LCQwMDAyZjI5NCwkZmU3YzYwMDAKKwlkYy5sCSRmZjUwMjA1ZiwkM2Q2ODAwMDAsJGZmODQyZDY4LCQwMDA0ZmY4OAorCWRjLmwJJDJkNjgwMDA4LCRmZjhjMGMyZSwkMDAwNGZmNGUsJDY2MmM0MWVlCisJZGMubAkkZmY4NDYxZmYsJGZmZmZmNzE0LCQ0NDgwMDI0MCwkN2ZmZmVmZWUKKwlkYy5sCSQwMDRmZmY4NCwkNjAxNDIwNWYsJDNkNjgwMDAwLCRmZjg0MmQ2OAorCWRjLmwJJDAwMDRmZjg4LCQyZDY4MDAwOCwkZmY4YzA4YWUsJDAwMDdmZjg0CisJZGMubAkkNTZlZWZmODYsJDQxZWVmZjg0LCQxMjJlZmY1ZiwkZTgwOTAyNDEKKwlkYy5sCSQwMDBjNDg0MSwkMTIyZWZmNWYsJGU4MDkwMjQxLCQwMDAzNDI4MAorCWRjLmwJJDYxZmZmZmZmLCRmNTU0NGEyZSwkZmY4NjY3MDYsJDA4ZWUwMDA3CisJZGMubAkkZmY4NGYyMmUsJGQwNDBmZjg0LCQ0ZTc1MDIwMCwkMDAzMDAwMDAKKwlkYy5sCSQwMDgwMmQ0MCwkZmY1YzMwMjgsJDAwMDAwMjQwLCQ3ZmZmMGM0MAorCWRjLmwJJDQzZmU2ZTAwLCQwMGM4NjcwMCwkMDEyMDBjNDAsJDNjMDE2ZDAwCisJZGMubAkkMDA0NmYyMjgsJGQwODAwMDAwLCRmMjJlOTAwMCwkZmY1Y2YyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDc0MDBmZjU0LCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjAwYTgwMCwkODE2ZWZmNjYsJDIyNmUwMDBjCisJZGMubAkkNDFlZWZmNTQsJDcwMDg2MWZmLCRmZmZmY2FmMiwkNGE4MTY2ZmYKKwlkYy5sCSQwMDAwMzQ1MCwkNGU3NTA4ZWUsJDAwMDNmZjY2LCQzZDY4MDAwMAorCWRjLmwJJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgsJGZmOGMyZjA4CisJZGMubAkkNDI4MDBjMmUsJDAwMDRmZjRlLCQ2NjBhNDFlZSwkZmY4NDYxZmYKKwlkYy5sCSRmZmZmZjYxOCwkNDFlZWZmODQsJDIyMmVmZjVjLCQ2MWZmZmZmZgorCWRjLmwJJGY4MzA0MWVlLCRmZjg0NjFmZiwkMDAwMDAwZDIsJDJkNDBmZjU0CisJZGMubAkkMmQ0MWZmNTgsJDIyNmUwMDBjLCQ0MWVlZmY1NCwkNzAwODYxZmYKKwlkYy5sCSRmZmZmY2E4YSwkNGE4MTY2ZmYsJDAwMDAzM2U4LCQxMjJlZmY2MgorCWRjLmwJJDAyMDEwMDBhLCQ2NjAwZmU5YywkNTg4ZjRlNzUsJDMwMjgwMDBhCisJZGMubAkkMDI0MDA3ZmYsJDY2MDgwMDZlLCQxMDQ4ZmY2NiwkNjAwNjAwNmUKKwlkYy5sCSQxMjQ4ZmY2NiwkMmYwODRhMjgsJDAwMDA1YmMxLCQyMDJlZmY1YworCWRjLmwJJDYxZmZmZmZmLCRmOGNhZjIxMCwkZDA4MGYyMmUsJDc0MDBmZjU0CisJZGMubAkkMjI2ZTAwMGMsJDQxZWVmZjU0LCQ3MDA4NjFmZiwkZmZmZmNhMmUKKwlkYy5sCSQ0YTgxNjZmZiwkMDAwMDMzOGMsJDEyMmVmZjYyLCQwMjAxMDAwYQorCWRjLmwJJDY2MDBmZTc0LCQ1ODhmNGU3NSwkMzIyODAwMDAsJDAyNDE4MDAwCisJZGMubAkkMDA0MTNmZmYsJDNkNDFmZjg0LCQyZDY4MDAwNCwkZmY4ODJkNjgKKwlkYy5sCSQwMDA4ZmY4YywkZjIyZTkwMDAsJGZmNWNmMjJlLCQ0ODAwZmY4NAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIwMDAwMTgsJGYyM2M1ODM4CisJZGMubAkkMDAwMmYyOTQsJGZlYWU2MDAwLCRmZjY0NDI4MCwkMzAyODAwMDAKKwlkYy5sCSQwNDQwM2ZmZiwkMDY0MDAzZmYsJDRhMjgwMDA0LCQ2YjAyNTM0MAorCWRjLmwJJDQ4NDBlOTg4LCQ0YTI4MDAwMCwkNmEwNDA4YzAsJDAwMWYyMjI4CisJZGMubAkkMDAwNGU5YzEsJDEwNTQ4MDgxLCQyZDQwZmY1NCwkMjIyODAwMDQKKwlkYy5sCSQ3MDE1ZTFhOSwkMmQ0MWZmNTgsJDIyMjgwMDA4LCRlOWMxMDAxNQorCWRjLmwJJDIyMmVmZjU4LCQ4MjgwMjAyZSwkZmY1NDRlNzUsJDQyODAzMDI4CisJZGMubAkkMDAwMDA0NDAsJDNmZmYwNjQwLCQwMDdmNGEyOCwkMDAwNDZiMDIKKwlkYy5sCSQ1MzQwNDg0MCwkZWY4ODRhMjgsJDAwMDA2YTA0LCQwOGMwMDAxZgorCWRjLmwJJDIyMjgwMDA0LCQwMjgxN2ZmZiwkZmYwMGUwODksJDgwODE0ZTc1CisJZGMubAkkNjFmZmZmZmYsJGUzODIyZjA4LCQxMDJlZmY0ZSwkNjYwMDAwODIKKwlkYy5sCSQwODJlMDAwNCwkZmY0MjY3MTIsJDEyMmVmZjQzLCRlODA5MDI0MQorCWRjLmwJJDAwMDc2MWZmLCQwMDAwMjRkZSwkNjAwNDEwMmUsJGZmNDNlYmMwCisJZGMubAkkMDY0NzJmMDAsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkMmIyMDAyYWUKKwlkYy5sCSRjZmZmZjAwZiwkZmY4NDIwMWYsJDRhMmVmZjg3LCQ2NjE2NGFhZQorCWRjLmwJJGZmODg2NjEwLCQ0YWFlZmY4YywkNjYwYTRhODAsJDY2MDYwMjZlCisJZGMubAkkZjAwMGZmODQsJDQxZWVmZjg0LCQyMjVmNzAwYywkMGMyZTAwMDgKKwlkYy5sCSRmZjRhNjcwZSwkNjFmZmZmZmYsJGM4ZDQ0YTgxLCQ2NjAwZmIzOAorCWRjLmwJJDRlNzU2MWZmLCRmZmZmZDc0OCwkNGE4MTY2MDAsJGZiMmE0ZTc1CisJZGMubAkkMGMwMDAwMDQsJDY3MDBmZjdhLCQ0MWVlZmY2YywkNDI2ZWZmNmUKKwlkYy5sCSQwYzAwMDAwNSwkNjcwMjYwYzAsJDAwNmU0MDgwLCRmZjY2MDhlZQorCWRjLmwJJDAwMDZmZjcwLCQ2MGIyNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkZmZmZmMwMDEsJGZmZmZmZjgxLCRmZmZmZmMwMSwkMDAwMDQwMDAKKwlkYy5sCSQwMDAwMDA3ZiwkMDAwMDAzZmYsJDAyMDAwMDMwLCQwMDAwMDA0MAorCWRjLmwJJDYwMDgwMjAwLCQwMDMwMDAwMCwkMDA4MDJkNDAsJGZmNWM0MjQxCisJZGMubAkkMTIyZWZmNGYsJGU3MDk4MjJlLCRmZjRlNjYwMCwkMDJlNDNkNjkKKwlkYy5sCSQwMDAwZmY5MCwkMmQ2OTAwMDQsJGZmOTQyZDY5LCQwMDA4ZmY5OAorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzYxZmYsJGZmZmZlZjI0LCQyZjAwNjFmZiwkZmZmZmVmYzgKKwlkYy5sCSRkMTk3MzIyZSwkZmY1ZWVjMDksJDIwMWZiMGJiLCQxNDg0NjcwMAorCWRjLmwJJDAxMWU2ZDAwLCQwMDYyYjBiYiwkMTQ4NDY3MDAsJDAyMWE2ZTAwCisJZGMubAkkMDE0YWYyMmUsJGQwODBmZjkwLCRmMjJlOTAwMCwkZmY1Y2YyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MjNmZjg0LCRmMjAxYTgwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMmVmMDgwCisJZGMubAkkZmY4NDJmMDIsJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYKKwlkYy5sCSQwMjQyODAwMCwkOTI4MDgyNDIsJDNkNDFmZjg0LCQyNDFmZjIyZQorCWRjLmwJJGQwODBmZjg0LCQ0ZTc1ZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyM2ZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJDAwYWUwMDAwLCQxMDQ4ZmY2NCwkMTIyZWZmNjIsJDAyMDEwMDEzCisJZGMubAkkNjYxYzA4MmUsJDAwMDNmZjY0LCQ1NmMxMjAyZSwkZmY1YzYxZmYKKwlkYy5sCSRmZmZmZjVkYywkODEyZWZmNjQsJGYyMTBkMDgwLCQ0ZTc1MjIyZQorCWRjLmwJJGZmNWMwMjAxLCQwMGMwNjYzNCwkZjIyZWYwODAsJGZmODQyZjAyCisJZGMubAkkMzIyZWZmODQsJDM0MDEwMjgxLCQwMDAwN2ZmZiwkOTI4MDA0ODEKKwlkYy5sCSQwMDAwNjAwMCwkMDI0MTdmZmYsJDAyNDI4MDAwLCQ4MjQyM2Q0MQorCWRjLmwJJGZmODQyNDFmLCRmMjJlZDA0MCwkZmY4NDYwYTYsJGYyMmVkMDgwCisJZGMubAkkZmY5MDIyMmUsJGZmNWMwMjAxLCQwMDMwZjIwMSwkOTAwMGYyMmUKKwlkYy5sCSQ0ODIzZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ2MGFhZjIyZQorCWRjLmwJJGQwODBmZjkwLCRmMjJlOTAwMCwkZmY1Y2YyM2MsJDg4MDAwMDAwCisJZGMubAkkMDAwMGYyMmUsJDQ4MjNmZjg0LCRmMjAxYTgwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMDAwMDk4LCRmMjNjNThiOAorCWRjLmwJJDAwMDJmMjkzLCRmZjNjNjAwMCwkZmVlNDA4ZWUsJDAwMDNmZjY2CisJZGMubAkkZjIyZWQwODAsJGZmOTBmMjNjLCQ5MDAwMDAwMCwkMDAxMGYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MjNmZjg0LCRmMjAxYTgwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQsJDEyMmVmZjYyCisJZGMubAkkMDIwMTAwMGIsJDY2MjBmMjJlLCRmMDgwZmY4NCwkNDFlZWZmODQKKwlkYy5sCSQyMjJlZmY1YywkNjFmZmZmZmYsJGYzZTg4MTJlLCRmZjY0ZjIyZQorCWRjLmwJJGQwODBmZjg0LCQ0ZTc1ZjIyZSwkZDA0MGZmOTAsJDIyMmVmZjVjCisJZGMubAkkMDIwMTAwYzAsJDY2NTJmMjJlLCQ5MDAwZmY1YywkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4YTMsJGZmODRmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCRmMDQwZmY4NCwkMmYwMjMyMmUsJGZmODQyNDAxCisJZGMubAkkMDI4MTAwMDAsJDdmZmYwMjQyLCQ4MDAwOTI4MCwkMDY4MTAwMDAKKwlkYy5sCSQ2MDAwMDI0MSwkN2ZmZjgyNDIsJDNkNDFmZjg0LCQyNDFmZjIyZQorCWRjLmwJJGQwNDBmZjg0LCQ2MDAwZmY4MCwkMjIyZWZmNWMsJDAyMDEwMDMwCisJZGMubAkkZjIwMTkwMDAsJDYwYTZmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODIzZmY4NAorCWRjLmwJJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0CisJZGMubAkkZjIwMDAwOTgsJGYyM2M1OGI4LCQwMDAyZjI5MiwkZmRlMGYyOTQKKwlkYy5sCSRmZWZhZjIyZSwkZDA0MGZmOTAsJDIyMmVmZjVjLCQwMjAxMDBjMAorCWRjLmwJJDAwMDEwMDEwLCRmMjAxOTAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTQ4YTMsJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMDAKKwlkYy5sCSQwNDk4ZjIzYywkNThiODAwMDIsJGYyOTNmZGEyLCQ2MDAwZmViYworCWRjLmwJJDMyM2IxMjBhLCQ0ZWZiMTAwNiwkNGFmYzAwMzAsJGZkMTIwMDcyCisJZGMubAkkMDBjYzAwNmMsJGZkMTIwMDY2LCQwMDAwMDAwMCwkMDA3MjAwNzIKKwlkYy5sCSQwMDYwMDA2YywkMDA3MjAwNjYsJDAwMDAwMDAwLCQwMDllMDA2MAorCWRjLmwJJDAwOWUwMDZjLCQwMDllMDA2NiwkMDAwMDAwMDAsJDAwNmMwMDZjCisJZGMubAkkMDA2YzAwNmMsJDAwNmMwMDY2LCQwMDAwMDAwMCwkZmQxMjAwNzIKKwlkYy5sCSQwMGNjMDA2YywkZmQxMjAwNjYsJDAwMDAwMDAwLCQwMDY2MDA2NgorCWRjLmwJJDAwNjYwMDY2LCQwMDY2MDA2NiwkMDAwMDAwMDAsJDYwZmZmZmZmCisJZGMubAkkZWQ2NDYwZmYsJGZmZmZlY2RhLCQ2MGZmZmZmZiwkZWNkNDEwMjgKKwlkYy5sCSQwMDAwMTIyOSwkMDAwMGIxMDEsJDZhMTBmMjNjLCQ0NDAwODAwMAorCWRjLmwJJDAwMDAxZDdjLCQwMDBjZmY2NCwkNGU3NWYyM2MsJDQ0MDAwMDAwCisJZGMubAkkMDAwMDFkN2MsJDAwMDRmZjY0LCQ0ZTc1ZjIyOSwkZDA4MDAwMDAKKwlkYy5sCSQxMDI4MDAwMCwkMTIyOTAwMDAsJGIxMDE2YTEwLCRmMjAwMDAxOAorCWRjLmwJJGYyMDAwMDFhLCQxZDdjMDAwYSwkZmY2NDRlNzUsJGYyMDAwMDE4CisJZGMubAkkMWQ3YzAwMDIsJGZmNjQ0ZTc1LCRmMjI4ZDA4MCwkMDAwMDEwMjgKKwlkYy5sCSQwMDAwMTIyOSwkMDAwMGIxMDEsJDZhZTI2MGQwLCQwMjAwMDAzMAorCWRjLmwJJDAwMDAwMDQwLCQ2MDA4MDIwMCwkMDAzMDAwMDAsJDAwODAyZDQwCisJZGMubAkkZmY1YzEyMmUsJGZmNGU2NjAwLCQwMjYyMDIwMCwkMDBjMDY2MDAKKwlkYy5sCSQwMDdjNGEyOCwkMDAwMDZhMDYsJDA4ZWUwMDAzLCRmZjY0ZjIyOAorCWRjLmwJJGQwODAwMDAwLCQ0ZTc1MDIwMCwkMDBjMDY2MDAsJDAwNjAwOGVlCisJZGMubAkkMDAwM2ZmNjYsJDRhMjgwMDAwLCQ2YTA2MDhlZSwkMDAwM2ZmNjQKKwlkYy5sCSRmMjI4ZDA4MCwkMDAwMDA4MmUsJDAwMDNmZjYyLCQ2NjAyNGU3NQorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzQxZWUsJGZmODQ2MWZmLCRmZmZmZWY2MCwkNDQ0MDA2NDAKKwlkYy5sCSQ2MDAwMzIyZSwkZmY4NDAyNDEsJDgwMDAwMjQwLCQ3ZmZmODA0MQorCWRjLmwJJDNkNDBmZjg0LCRmMjJlZDA0MCwkZmY4NDRlNzUsJDBjMDAwMDQwCisJZGMubAkkNjY3ZTNkNjgsJDAwMDBmZjg0LCQyZDY4MDAwNCwkZmY4ODJkNjgKKwlkYy5sCSQwMDA4ZmY4YywkNjFmZmZmZmYsJGVhYzIwYzgwLCQwMDAwMDA3ZgorCWRjLmwJJDZjMDAwMDkyLCQwYzgwZmZmZiwkZmY4MTY3MDAsJDAxNzg2ZDAwCisJZGMubAkkMDBmNGYyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMKKwlkYy5sCSRmMjJlNDgwMCwkZmY4NGYyMDEsJGE4MDBmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDA4M2FlLCRmZjY0MmYwMiwkZjIyZWYwODAsJGZmODQzMjJlCisJZGMubAkkZmY4NDM0MDEsJDAyODEwMDAwLCQ3ZmZmOTI4MCwkMDI0MjgwMDAKKwlkYy5sCSQ4NDQxM2Q0MiwkZmY4NDI0MWYsJGYyMmVkMDgwLCRmZjg0NGU3NQorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzYxZmYsJGZmZmZlYTQ0LCQwYzgwMDAwMCwkMDNmZjZjMDAKKwlkYy5sCSQwMDE0MGM4MCwkZmZmZmZjMDEsJDY3MDAwMGZhLCQ2ZDAwMDA3NgorCWRjLmwJJDYwMDBmZjgwLCQwOGVlMDAwMywkZmY2NjRhMmUsJGZmODQ2YTA2CisJZGMubAkkMDhlZTAwMDMsJGZmNjQxMjJlLCRmZjYyMDIwMSwkMDAwYjY2MWEKKwlkYy5sCSQ0MWVlZmY4NCwkMjIyZWZmNWMsJDYxZmZmZmZmLCRmMDg0ODEyZQorCWRjLmwJJGZmNjRmMjJlLCRkMDgwZmY4NCwkNGU3NTJkNmUsJGZmODhmZjk0CisJZGMubAkkMmQ2ZWZmOGMsJGZmOTgzMjJlLCRmZjg0MmYwMiwkMzQwMTAyODEKKwlkYy5sCSQwMDAwN2ZmZiwkOTI4MDAyNDIsJDgwMDAwNjgxLCQwMDAwNjAwMAorCWRjLmwJJDAyNDE3ZmZmLCQ4NDQxM2Q0MiwkZmY5MGYyMmUsJGQwNDBmZjkwCisJZGMubAkkMjQxZjYwYWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIyZSwkNDgwMGZmODQsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMDFhODAwLCQ4M2FlZmY2NCwkMDBhZTAwMDAsJDEwNDhmZjY0CisJZGMubAkkMTIyZWZmNjIsJDAyMDEwMDEzLCQ2NjFjMDgyZSwkMDAwM2ZmNjQKKwlkYy5sCSQ1NmMxMjAyZSwkZmY1YzYxZmYsJGZmZmZmMGY0LCQ4MTJlZmY2NAorCWRjLmwJJGYyMTBkMDgwLCQ0ZTc1MmYwMiwkMzIyZWZmODQsJDI0MDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDAyNDI4MDAwLCQ5MjgwMDQ4MSwkMDAwMDYwMDAKKwlkYy5sCSQwMjQxN2ZmZiwkODI0MjNkNDEsJGZmODQyNDFmLCRmMjJlZDA0MAorCWRjLmwJJGZmODQ2MGI2LCRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyMmUsJDQ4MDBmZjg0LCRmMjAxYTgwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMDAwMDk4LCRmMjNjNThiOAorCWRjLmwJJDAwMDJmMjkzLCRmZjc0NjAwMCwkZmU3ZTBjMDEsJDAwMDQ2NzAwCisJZGMubAkkZmRiNjBjMDEsJDAwMDU2N2ZmLCRmZmZmZTllZSwkMGMwMTAwMDMKKwlkYy5sCSQ2N2ZmZmZmZiwkZTlmOGYyMjgsJDQ4MDAwMDAwLCRmMjAwYTgwMAorCWRjLmwJJGUxOTgxZDQwLCRmZjY0NGU3NSwkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkMDAwMDNmZmYsJDAwMDAwMDdlLCQwMDAwMDNmZSwkZmZmZmMwMDEKKwlkYy5sCSRmZmZmZmY4MSwkZmZmZmZjMDEsJDAyMDAwMDMwLCQwMDAwMDA0MAorCWRjLmwJJDYwMDgwMjAwLCQwMDMwMDAwMCwkMDA4MDJkNDAsJGZmNWM0MjQxCisJZGMubAkkMTIyZWZmNGYsJGU3MDk4MjJlLCRmZjRlNjYwMCwkMDJkNjNkNjkKKwlkYy5sCSQwMDAwZmY5MCwkMmQ2OTAwMDQsJGZmOTQyZDY5LCQwMDA4ZmY5OAorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzYxZmYsJGZmZmZlODY0LCQyZjAwNjFmZiwkZmZmZmU5MDgKKwlkYy5sCSQ0NDk3ZDE5NywkMzIyZWZmNWUsJGVjMDkyMDFmLCRiMGJiMTQ4ZQorCWRjLmwJJDZmMDAwMDc0LCRiMGJiMTUyMCwkZmY3YTY3MDAsJDAyMGM2ZTAwCisJZGMubAkkMDEzY2YyMmUsJGQwODBmZjkwLCRmMjJlOTAwMCwkZmY1Y2YyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MjBmZjg0LCRmMjAxYTgwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMmVmMDgwCisJZGMubAkkZmY4NDJmMDIsJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYKKwlkYy5sCSQwMjQyODAwMCwkOTI4MDgyNDIsJDNkNDFmZjg0LCQyNDFmZjIyZQorCWRjLmwJJGQwODBmZjg0LCQ0ZTc1MDAwMCwkN2ZmZjAwMDAsJDQwN2YwMDAwCisJZGMubAkkNDNmZjIwMWYsJDYwYzYyZjAwLCRmMjJlZDA4MCwkZmY5MGYyMmUKKwlkYy5sCSQ5MDAwZmY1YywkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDgyMAorCWRjLmwJJGZmODRmMjAwLCRhODAwZjIzYywkOTAwMDAwMDAsJDAwMDA4MWFlCisJZGMubAkkZmY2NGYyMjcsJGUwMDEzMDE3LCRkZmZjMDAwMCwkMDAwYzAyODAKKwlkYy5sCSQwMDAwN2ZmZiwkOTA5N2IwYmIsJDE0YWU2ZGI2LCQyMDFmMDBhZQorCWRjLmwJJDAwMDAxMDQ4LCRmZjY0MTIyZSwkZmY2MjAyMDEsJDAwMTM2NjFjCisJZGMubAkkMDgyZTAwMDMsJGZmNjQ1NmMxLCQyMDJlZmY1YywkNjFmZmZmZmYKKwlkYy5sCSRlZWVlODEyZSwkZmY2NGYyMTAsJGQwODA0ZTc1LCQyMjJlZmY1YworCWRjLmwJJDAyMDEwMGMwLCQ2NjM0ZjIyZSwkZjA4MGZmODQsJDJmMDIzMjJlCisJZGMubAkkZmY4NDM0MDEsJDAyODEwMDAwLCQ3ZmZmOTI4MCwkMDQ4MTAwMDAKKwlkYy5sCSQ2MDAwMDI0MSwkN2ZmZjAyNDIsJDgwMDA4MjQyLCQzZDQxZmY4NAorCWRjLmwJJDI0MWZmMjJlLCRkMDQwZmY4NCwkNjBhNmYyMmUsJGQwODBmZjkwCisJZGMubAkkMjIyZWZmNWMsJDAyMDEwMDMwLCRmMjAxOTAwMCwkZjIyZTQ4MjAKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDA2MGFhLCQwOGVlMDAwMworCWRjLmwJJGZmNjZmMjJlLCRkMDgwZmY5MCwkZjIzYzkwMDAsJDAwMDAwMDEwCisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDgyMCwkZmY4NGYyMDEKKwlkYy5sCSRhODAwZjIzYywkOTAwMDAwMDAsJDAwMDA4M2FlLCRmZjY0MTIyZQorCWRjLmwJJGZmNjIwMjAxLCQwMDBiNjYyMCwkZjIyZWYwODAsJGZmODQ0MWVlCisJZGMubAkkZmY4NDIyMmUsJGZmNWM2MWZmLCRmZmZmZWQzNiwkODEyZWZmNjQKKwlkYy5sCSRmMjJlZDA4MCwkZmY4NDRlNzUsJGYyMmVkMDQwLCRmZjkwMjIyZQorCWRjLmwJJGZmNWMwMjAxLCQwMGMwNjY1MiwkZjIyZTkwMDAsJGZmNWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ0OGEwZmY4NCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZWYwNDAsJGZmODQyZjAyLCQzMjJlZmY4NAorCWRjLmwJJDI0MDEwMjgxLCQwMDAwN2ZmZiwkMDI0MjgwMDAsJDkyODAwNjgxCisJZGMubAkkMDAwMDYwMDAsJDAyNDE3ZmZmLCQ4MjQyM2Q0MSwkZmY4NDI0MWYKKwlkYy5sCSRmMjJlZDA0MCwkZmY4NDYwMDAsJGZmODAyMjJlLCRmZjVjMDIwMQorCWRjLmwJJDAwMzBmMjAxLCQ5MDAwNjBhNiwkZjIyZWQwODAsJGZmOTBmMjJlCisJZGMubAkkOTAwMGZmNWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4MjAKKwlkYy5sCSRmZjg0ZjIwMSwkYTgwMGYyM2MsJDkwMDAwMDAwLCQwMDAwODNhZQorCWRjLmwJJGZmNjRmMjAwLCQwMDk4ZjIzYywkNThiODAwMDEsJGYyOTJmZGVlCisJZGMubAkkZjI5NGZlZmEsJGYyMmVkMDQwLCRmZjkwMjIyZSwkZmY1YzAyMDEKKwlkYy5sCSQwMGMwMDAwMSwkMDAxMGYyMDEsJDkwMDBmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCQ0OGEwZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIwMDA0OTgsJGYyM2M1OGI4LCQwMDAxZjI5MywkZmRiMDYwMDAKKwlkYy5sCSRmZWJjMzIzYiwkMTIwYTRlZmIsJDEwMDY0YWZjLCQwMDMwZmQyMAorCWRjLmwJJDAwOWUwMDcyLCQwMDYwZmQyMCwkMDA2NjAwMDAsJDAwMDAwMDcyCisJZGMubAkkMDA2YzAwNzIsJDAwNjAwMDcyLCQwMDY2MDAwMCwkMDAwMDAwZDAKKwlkYy5sCSQwMGQwMDA2YywkMDA2MDAwZDAsJDAwNjYwMDAwLCQwMDAwMDA2MAorCWRjLmwJJDAwNjAwMDYwLCQwMDYwMDA2MCwkMDA2NjAwMDAsJDAwMDBmZDIwCisJZGMubAkkMDA5ZTAwNzIsJDAwNjBmZDIwLCQwMDY2MDAwMCwkMDAwMDAwNjYKKwlkYy5sCSQwMDY2MDA2NiwkMDA2NjAwNjYsJDAwNjYwMDAwLCQwMDAwNjBmZgorCWRjLmwJJGZmZmZlNjJlLCQ2MGZmZmZmZiwkZTYyODYwZmYsJGZmZmZlNmE2CisJZGMubAkkMTAyODAwMDAsJDEyMjkwMDAwLCRiMTAxNmExMCwkZjIzYzQ0MDAKKwlkYy5sCSQ4MDAwMDAwMCwkMWQ3YzAwMGMsJGZmNjQ0ZTc1LCRmMjNjNDQwMAorCWRjLmwJJDAwMDAwMDAwLCQxZDdjMDAwNCwkZmY2NDRlNzUsJDAwNmUwNDEwCisJZGMubAkkZmY2NjEwMjgsJDAwMDAxMjI5LCQwMDAwYjEwMSwkNmExMGYyM2MKKwlkYy5sCSQ0NDAwZmY4MCwkMDAwMDFkN2MsJDAwMGFmZjY0LCQ0ZTc1ZjIzYworCWRjLmwJJDQ0MDA3ZjgwLCQwMDAwMWQ3YywkMDAwMmZmNjQsJDRlNzUxMDI5CisJZGMubAkkMDAwMDEyMjgsJDAwMDBiMTAxLCQ2YTE2ZjIyOSwkZDA4MDAwMDAKKwlkYy5sCSRmMjAwMDAxOCwkZjIwMDAwMWEsJDFkN2MwMDBhLCRmZjY0NGU3NQorCWRjLmwJJGYyMjlkMDgwLCQwMDAwZjIwMCwkMDAxODFkN2MsJDAwMDJmZjY0CisJZGMubAkkNGU3NTAyMDAsJDAwMzAwMDAwLCQwMDQwNjAwOCwkMDIwMDAwMzAKKwlkYy5sCSQwMDAwMDA4MCwkMmQ0MGZmNWMsJDEyMmVmZjRlLCQ2NjAwMDI3NgorCWRjLmwJJDAyMDAwMGMwLCQ2NjAwMDA5MCwkMmQ2ODAwMDQsJGZmODgyZDY4CisJZGMubAkkMDAwOGZmOGMsJDMwMjgwMDAwLCQwYTQwODAwMCwkNmEwNjFkN2MKKwlkYy5sCSQwMDA4ZmY2NCwkM2Q0MGZmODQsJGYyMmVkMDgwLCRmZjg0NGU3NQorCWRjLmwJJDAyMDAwMGMwLCQ2NjYwMDhlZSwkMDAwM2ZmNjYsJDJkNjgwMDA0CisJZGMubAkkZmY4ODJkNjgsJDAwMDhmZjhjLCQzMDI4MDAwMCwkMGE0MDgwMDAKKwlkYy5sCSQ2YTA2MWQ3YywkMDAwOGZmNjQsJDNkNDBmZjg0LCRmMjJlZDA4MAorCWRjLmwJJGZmODQwODJlLCQwMDAzZmY2MiwkNjYwMjRlNzUsJDQxZWVmZjg0CisJZGMubAkkNjFmZmZmZmYsJGU4NzY0NDQwLCQwNjQwNjAwMCwkMzIyZWZmODQKKwlkYy5sCSQwMjQxODAwMCwkMDI0MDdmZmYsJDgwNDEzZDQwLCRmZjg0ZjIyZQorCWRjLmwJJGQwNDBmZjg0LCQ0ZTc1MGMwMCwkMDA0MDY2N2UsJDNkNjgwMDAwCisJZGMubAkkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOCwkZmY4YzYxZmYKKwlkYy5sCSRmZmZmZTNkOCwkMGM4MDAwMDAsJDAwN2Y2YzAwLCQwMDkwMGM4MAorCWRjLmwJJGZmZmZmZjgxLCQ2NzAwMDE3OCwkNmQwMDAwZjQsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmU5MDAwLCRmZjVjZjIyZSwkNDgxYWZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJDJmMDJmMjJlLCRmMDgwZmY4NCwkMzIyZWZmODQsJDM0MDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDkyODAwMjQyLCQ4MDAwODQ0MSwkM2Q0MmZmODQKKwlkYy5sCSQyNDFmZjIyZSwkZDA4MGZmODQsJDRlNzUzZDY4LCQwMDAwZmY4NAorCWRjLmwJJDJkNjgwMDA0LCRmZjg4MmQ2OCwkMDAwOGZmOGMsJDYxZmZmZmZmCisJZGMubAkkZTM1YTBjODAsJDAwMDAwM2ZmLCQ2YzEyMGM4MCwkZmZmZmZjMDEKKwlkYy5sCSQ2NzAwMDBmYywkNmQwMDAwNzgsJDYwMDBmZjgyLCQwOGVlMDAwMworCWRjLmwJJGZmNjYwYTJlLCQwMDgwZmY4NCwkNmEwNjA4ZWUsJDAwMDNmZjY0CisJZGMubAkkMTIyZWZmNjIsJDAyMDEwMDBiLCQ2NjFhNDFlZSwkZmY4NDIyMmUKKwlkYy5sCSRmZjVjNjFmZiwkZmZmZmU5OWEsJDgxMmVmZjY0LCRmMjJlZDA4MAorCWRjLmwJJGZmODQ0ZTc1LCQyZDZlZmY4OCwkZmY5NDJkNmUsJGZmOGNmZjk4CisJZGMubAkkMzIyZWZmODQsJDJmMDIyNDAxLCQwMjgxMDAwMCwkN2ZmZjAyNDIKKwlkYy5sCSQ4MDAwOTI4MCwkMDY4MTAwMDAsJDYwMDAwMjQxLCQ3ZmZmODI0MgorCWRjLmwJJDNkNDFmZjkwLCRmMjJlZDA0MCwkZmY5MDI0MWYsJDYwYWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ5MDAwZmY1YywkZjIyZTQ4MWEKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAxLCRhODAwODNhZQorCWRjLmwJJGZmNjQwMGFlLCQwMDAwMTA0OCwkZmY2NDEyMmUsJGZmNjIwMjAxCisJZGMubAkkMDAxMzY2MWMsJDA4MmUwMDAzLCRmZjY0NTZjMSwkMjAyZWZmNWMKKwlkYy5sCSQ2MWZmZmZmZiwkZWEwYTgxMmUsJGZmNjRmMjEwLCRkMDgwNGU3NQorCWRjLmwJJDJmMDIzMjJlLCRmZjg0MjQwMSwkMDI4MTAwMDAsJDdmZmYwMjQyCisJZGMubAkkODAwMDkyODAsJDA0ODEwMDAwLCQ2MDAwMDI0MSwkN2ZmZjgyNDIKKwlkYy5sCSQzZDQxZmY4NCwkZjIyZWQwNDAsJGZmODQyNDFmLCQ2MGI2ZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMsJGYyMmU0ODFhCisJZGMubAkkZmY4NGYyMDEsJGE4MDBmMjNjLCQ5MDAwMDAwMCwkMDAwMDgzYWUKKwlkYy5sCSRmZjY0ZjIwMCwkMDA5OGYyM2MsJDU4YjgwMDAyLCRmMjkzZmY3NAorCWRjLmwJJDYwMDBmZTdlLCQwYzAxMDAwNCwkNjcwMGZkYjYsJDBjMDEwMDA1CisJZGMubAkkNjdmZmZmZmYsJGUzMDQwYzAxLCQwMDAzNjdmZiwkZmZmZmUzMGUKKwlkYy5sCSRmMjI4NDgxYSwkMDAwMGYyMDAsJGE4MDBlMTk4LCQxZDQwZmY2NAorCWRjLmwJJDRlNzUxMjJlLCRmZjRlNjYxMCwkNGEyODAwMDAsJDZiMDI0ZTc1CisJZGMubAkkMWQ3YzAwMDgsJGZmNjQ0ZTc1LCQwYzAxMDAwMSwkNjc0MDBjMDEKKwlkYy5sCSQwMDAyNjcyNCwkMGMwMTAwMDUsJDY3ZmZmZmZmLCRlMmJjMGMwMQorCWRjLmwJJDAwMDM2N2ZmLCRmZmZmZTJjNiwkNGEyODAwMDAsJDZiMDI0ZTc1CisJZGMubAkkMWQ3YzAwMDgsJGZmNjQ0ZTc1LCQ0YTI4MDAwMCwkNmIwODFkN2MKKwlkYy5sCSQwMDAyZmY2NCwkNGU3NTFkN2MsJDAwMGFmZjY0LCQ0ZTc1NGEyOAorCWRjLmwJJDAwMDA2YjA4LCQxZDdjMDAwNCwkZmY2NDRlNzUsJDFkN2MwMDBjCisJZGMubAkkZmY2NDRlNzUsJDEyMmVmZjRlLCQ2NjI4MDIwMCwkMDAzMGYyMDAKKwlkYy5sCSQ5MDAwZjIzYywkODgwMDAwMDAsJDAwMDBmMjI4LCQ0ODAxMDAwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIwMGE4MDAsJDgxYWVmZjY0CisJZGMubAkkNGU3NTBjMDEsJDAwMDE2NzJlLCQwYzAxMDAwMiwkNjc0ZTBjMDEKKwlkYy5sCSQwMDA0NjcxMCwkMGMwMTAwMDUsJDY3ZmZmZmZmLCRlMjJjNjBmZgorCWRjLmwJJGZmZmZlMjNhLCQzZDY4MDAwMCwkZmY4NDFkN2MsJDAwODBmZjg4CisJZGMubAkkNDFlZWZmODQsJDYwYTQ0YTI4LCQwMDAwNmIxMCwkZjIzYzQ0MDAKKwlkYy5sCSQwMDAwMDAwMCwkMWQ3YzAwMDQsJGZmNjQ0ZTc1LCRmMjNjNDQwMAorCWRjLmwJJDgwMDAwMDAwLCQxZDdjMDAwYywkZmY2NDRlNzUsJGYyMjhkMDgwCisJZGMubAkkMDAwMDRhMjgsJDAwMDA2YjA4LCQxZDdjMDAwMiwkZmY2NDRlNzUKKwlkYy5sCSQxZDdjMDAwYSwkZmY2NDRlNzUsJDEyMmVmZjRlLCQ2NjE4ZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyOCwkNDgwMzAwMDAsJGYyMDBhODAwCisJZGMubAkkODFhZWZmNjQsJDRlNzUwYzAxLCQwMDAxNjcyZSwkMGMwMTAwMDIKKwlkYy5sCSQ2NzRlMGMwMSwkMDAwNDY3MTAsJDBjMDEwMDA1LCQ2N2ZmZmZmZgorCWRjLmwJJGUxOTg2MGZmLCRmZmZmZTFhNiwkM2Q2ODAwMDAsJGZmODQxZDdjCisJZGMubAkkMDA4MGZmODgsJDQxZWVmZjg0LCQ2MGI0NGEyOCwkMDAwMDZiMTAKKwlkYy5sCSRmMjNjNDQwMCwkMDAwMDAwMDAsJDFkN2MwMDA0LCRmZjY0NGU3NQorCWRjLmwJJGYyM2M0NDAwLCQ4MDAwMDAwMCwkMWQ3YzAwMGMsJGZmNjQ0ZTc1CisJZGMubAkkZjIyOGQwODAsJDAwMDA0YTI4LCQwMDAwNmIwOCwkMWQ3YzAwMDIKKwlkYy5sCSRmZjY0NGU3NSwkMWQ3YzAwMGEsJGZmNjQ0ZTc1LCQwMjAwMDAzMAorCWRjLmwJJDAwMDAwMDQwLCQ2MDA4MDIwMCwkMDAzMDAwMDAsJDAwODAyZDQwCisJZGMubAkkZmY1YzEyMmUsJGZmNGU2NjAwLCQwMjVjMDIwMCwkMDBjMDY2N2UKKwlkYy5sCSQyZDY4MDAwNCwkZmY4ODJkNjgsJDAwMDhmZjhjLCQzMjI4MDAwMAorCWRjLmwJJDA4ODEwMDBmLCQzZDQxZmY4NCwkZjIyZWQwODAsJGZmODQ0ZTc1CisJZGMubAkkMDIwMDAwYzAsJDY2NTgwOGVlLCQwMDAzZmY2NiwkMmQ2ODAwMDQKKwlkYy5sCSRmZjg4MmQ2OCwkMDAwOGZmOGMsJDMwMjgwMDAwLCQwODgwMDAwZgorCWRjLmwJJDNkNDBmZjg0LCRmMjJlZDA4MCwkZmY4NDA4MmUsJDAwMDNmZjYyCisJZGMubAkkNjYwMjRlNzUsJDQxZWVmZjg0LCQ2MWZmZmZmZiwkZTQxZTQ0NDAKKwlkYy5sCSQwNjQwNjAwMCwkMzIyZWZmODQsJDAyNDE4MDAwLCQwMjQwN2ZmZgorCWRjLmwJJDgwNDEzZDQwLCRmZjg0ZjIyZSwkZDA0MGZmODQsJDRlNzUwYzAwCisJZGMubAkkMDA0MDY2N2UsJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgKKwlkYy5sCSQyZDY4MDAwOCwkZmY4YzYxZmYsJGZmZmZkZjgwLCQwYzgwMDAwMAorCWRjLmwJJDAwN2Y2YzAwLCQwMDkwMGM4MCwkZmZmZmZmODEsJDY3MDAwMTcwCisJZGMubAkkNmQwMDAwZWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIyZSwkNDgxOGZmODQsJGYyMDFhODAwLCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCQ4M2FlZmY2NCwkMmYwMmYyMmUsJGYwODBmZjg0CisJZGMubAkkMzIyZWZmODQsJDI0MDEwMjgxLCQwMDAwN2ZmZiwkOTI4MDAyNDIKKwlkYy5sCSQ4MDAwODQ0MSwkM2Q0MmZmODQsJDI0MWZmMjJlLCRkMDgwZmY4NAorCWRjLmwJJDRlNzUzZDY4LCQwMDAwZmY4NCwkMmQ2ODAwMDQsJGZmODgyZDY4CisJZGMubAkkMDAwOGZmOGMsJDYxZmZmZmZmLCRkZjAyMGM4MCwkMDAwMDAzZmYKKwlkYy5sCSQ2YzEyMGM4MCwkZmZmZmZjMDEsJDY3MDAwMGY0LCQ2ZDAwMDA3MAorCWRjLmwJJDYwMDBmZjgyLCQwOGVlMDAwMywkZmY2NjA4YWUsJDAwMDdmZjg0CisJZGMubAkkMTIyZWZmNjIsJDAyMDEwMDBiLCQ2NjFhNDFlZSwkZmY4NDIyMmUKKwlkYy5sCSRmZjVjNjFmZiwkZmZmZmU1NGEsJDgxMmVmZjY0LCRmMjJlZDA4MAorCWRjLmwJJGZmODQ0ZTc1LCQyZDZlZmY4OCwkZmY5NDJkNmUsJGZmOGNmZjk4CisJZGMubAkkMzIyZWZmODQsJDJmMDIyNDAxLCQwMjgxMDAwMCwkN2ZmZjAyNDIKKwlkYy5sCSQ4MDAwOTI4MCwkMDY4MTAwMDAsJDYwMDAwMjQxLCQ3ZmZmODI0MgorCWRjLmwJJDNkNDFmZjkwLCRmMjJlZDA0MCwkZmY5MDI0MWYsJDYwYWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ5MDAwZmY1YywkZjIyZTQ4MTgKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAxLCRhODAwODNhZQorCWRjLmwJJGZmNjQwMGFlLCQwMDAwMTA0OCwkZmY2NDEyMmUsJGZmNjIwMjAxCisJZGMubAkkMDAxMzY2MWMsJDA4MmUwMDAzLCRmZjY0NTZjMSwkMjAyZWZmNWMKKwlkYy5sCSQ2MWZmZmZmZiwkZTViYTgxMmUsJGZmNjRmMjEwLCRkMDgwNGU3NQorCWRjLmwJJDJmMDIzMjJlLCRmZjg0MjQwMSwkMDI4MTAwMDAsJDdmZmYwMjQyCisJZGMubAkkODAwMDkyODAsJDA0ODEwMDAwLCQ2MDAwMDI0MSwkN2ZmZjgyNDIKKwlkYy5sCSQzZDQxZmY4NCwkZjIyZWQwNDAsJGZmODQyNDFmLCQ2MGI2ZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMsJGYyMmU0ODE4CisJZGMubAkkZmY4NGYyMDEsJGE4MDBmMjNjLCQ5MDAwMDAwMCwkMDAwMDgzYWUKKwlkYy5sCSRmZjY0ZjIwMCwkMDA5OGYyM2MsJDU4YjgwMDAyLCRmMjkzZmY3NAorCWRjLmwJJDYwMDBmZTg2LCQwYzAxMDAwNCwkNjcwMGZkYzYsJDBjMDEwMDA1CisJZGMubAkkNjdmZmZmZmYsJGRlYjQwYzAxLCQwMDAzNjdmZiwkZmZmZmRlYmUKKwlkYy5sCSRmMjI4NDgxOCwkMDAwMDBjMDEsJDAwMDI2NzA4LCQxZDdjMDAwNAorCWRjLmwJJGZmNjQ0ZTc1LCQxZDdjMDAwMiwkZmY2NDRlNzUsJDQyNDExMjJlCisJZGMubAkkZmY0ZmU3MDksJDgyMmVmZjRlLCQ2NjE4ZjIyOSwkZDA4MDAwMDAKKwlkYy5sCSRmMjI4NDgzOCwkMDAwMGYyMDAsJGE4MDBlMTk4LCQxZDQwZmY2NAorCWRjLmwJJDRlNzUzMjNiLCQxMjBhNGVmYiwkMTAwNjRhZmMsJDAwMzBmZmRjCisJZGMubAkkZmZkY2ZmZGMsJDAwNjAwMGY4LCQwMDZlMDAwMCwkMDAwMGZmZGMKKwlkYy5sCSRmZmRjZmZkYywkMDA2MDAwN2MsJDAwNmUwMDAwLCQwMDAwZmZkYworCWRjLmwJJGZmZGNmZmRjLCQwMDYwMDA3YywkMDA2ZTAwMDAsJDAwMDAwMDYwCisJZGMubAkkMDA2MDAwNjAsJDAwNjAwMDYwLCQwMDZlMDAwMCwkMDAwMDAxMTQKKwlkYy5sCSQwMDljMDA5YywkMDA2MDAwYmMsJDAwNmUwMDAwLCQwMDAwMDA2ZQorCWRjLmwJJDAwNmUwMDZlLCQwMDZlMDA2ZSwkMDA2ZTAwMDAsJDAwMDA2MWZmCisJZGMubAkkZmZmZmRkZGUsJDAyMmUwMGY3LCRmZjY0NGU3NSwkNjFmZmZmZmYKKwlkYy5sCSRkZGQwMDIyZSwkMDBmN2ZmNjQsJDRlNzUzZDY4LCQwMDAwZmY4NAorCWRjLmwJJDIwMjgwMDA0LCQwOGMwMDAxZiwkMmQ0MGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzQxZWUsJGZmODQ2MDAwLCRmZjQyMmQ2OSwkMDAwMGZmODQKKwlkYy5sCSQyMDI5MDAwNCwkMDhjMDAwMWYsJDJkNDBmZjg4LCQyZDY5MDAwOAorCWRjLmwJJGZmOGM0M2VlLCRmZjg0NjAwMCwkZmYyMjNkNjksJDAwMDBmZjkwCisJZGMubAkkM2Q2ODAwMDAsJGZmODQyMDI5LCQwMDA0MDhjMCwkMDAxZjJkNDAKKwlkYy5sCSRmZjk0MjAyOCwkMDAwNDA4YzAsJDAwMWYyZDQwLCRmZjg4MmQ2OQorCWRjLmwJJDAwMDhmZjk4LCQyZDY4MDAwOCwkZmY4YzQzZWUsJGZmOTA0MWVlCisJZGMubAkkZmY4NDYwMDAsJGZlZTYxMDI4LCQwMDAwMTIyOSwkMDAwMGIxMDEKKwlkYy5sCSQ2YjAwZmY3OCwkNGEwMDZiMDIsJDRlNzUxZDdjLCQwMDA4ZmY2NAorCWRjLmwJJDRlNzUxMDI4LCQwMDAwMTIyOSwkMDAwMGIxMDEsJDZiMDBmZjdjCisJZGMubAkkNGEwMDZhMDIsJDRlNzUxZDdjLCQwMDA4ZmY2NCwkNGU3NTJkNDAKKwlkYy5sCSRmZjVjNDI0MSwkMTIyZWZmNGYsJGU3MDk4MjJlLCRmZjRlNjYwMAorCWRjLmwJJDAyYTAzZDY5LCQwMDAwZmY5MCwkMmQ2OTAwMDQsJGZmOTQyZDY5CisJZGMubAkkMDAwOGZmOTgsJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgKKwlkYy5sCSQyZDY4MDAwOCwkZmY4YzYxZmYsJGZmZmZkYmYwLCQyZjAwNjFmZgorCWRjLmwJJGZmZmZkYzk0LCRkMDlmMGM4MCwkZmZmZmMwMDEsJDY3MDAwMGY4CisJZGMubAkkNmQwMDAwNjQsJDBjODAwMDAwLCQ0MDAwNjcwMCwkMDFkYTZlMDAKKwlkYy5sCSQwMTIyZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwLCRmZjVjZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyN2ZmODQsJGYyMDFhODAwCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NCwkZjIyZWYwODAKKwlkYy5sCSRmZjg0MmYwMiwkMzIyZWZmODQsJDI0MDEwMjgxLCQwMDAwN2ZmZgorCWRjLmwJJDAyNDI4MDAwLCQ5MjgwODI0MiwkM2Q0MWZmODQsJDI0MWZmMjJlCisJZGMubAkkZDA4MGZmODQsJDRlNzVmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODI3ZmY4NAorCWRjLmwJJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0CisJZGMubAkkMDBhZTAwMDAsJDEwNDhmZjY0LCQxMjJlZmY2MiwkMDIwMTAwMTMKKwlkYy5sCSQ2NjIwMDgyZSwkMDAwM2ZmNjQsJDU2YzEyMDJlLCRmZjVjMDIwMAorCWRjLmwJJDAwMzA2MWZmLCRmZmZmZTJhOCwkODEyZWZmNjQsJGYyMTBkMDgwCisJZGMubAkkNGU3NWYyMmUsJGYwODBmZjg0LCQyZjAyMzIyZSwkZmY4NDI0MDEKKwlkYy5sCSQwMjgxMDAwMCwkN2ZmZjkyODAsJDA0ODEwMDAwLCQ2MDAwMDI0MQorCWRjLmwJJDdmZmYwMjQyLCQ4MDAwODI0MiwkM2Q0MWZmODQsJDI0MWZmMjJlCisJZGMubAkkZDA0MGZmODQsJDYwYWNmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODI3ZmY4NAorCWRjLmwJJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0CisJZGMubAkkZjIwMDAwOTgsJGYyM2M1OGI4LCQwMDAyZjI5MywkZmY2NDYwMDAKKwlkYy5sCSRmZjBjMDhlZSwkMDAwM2ZmNjYsJGYyMmVkMDgwLCRmZjkwZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDEwZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDgyN2ZmODQsJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSQ4M2FlZmY2NCwkMTIyZWZmNjIsJDAyMDEwMDBiLCQ2NjIwZjIyZQorCWRjLmwJJGYwODBmZjg0LCQ0MWVlZmY4NCwkMjIyZWZmNWMsJDYxZmZmZmZmCisJZGMubAkkZTE2NjgxMmUsJGZmNjRmMjJlLCRkMDgwZmY4NCwkNGU3NWYyMmUKKwlkYy5sCSRkMDQwZmY5MCwkZjIyZTkwMDAsJGZmNWNmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCQ0OGE3ZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZWYwNDAsJGZmODQyZjAyLCQzMjJlZmY4NCwkMjQwMTAyODEKKwlkYy5sCSQwMDAwN2ZmZiwkMDI0MjgwMDAsJDkyODAwNjgxLCQwMDAwNjAwMAorCWRjLmwJJDAyNDE3ZmZmLCQ4MjQyM2Q0MSwkZmY4NDI0MWYsJGYyMmVkMDQwCisJZGMubAkkZmY4NDYwMDAsJGZmOGFmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODI3ZmY4NAorCWRjLmwJJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0CisJZGMubAkkZjIwMDAwOTgsJGYyM2M1OGI4LCQwMDAyZjI5MiwkZmUyMGYyOTQKKwlkYy5sCSRmZjEyZjIyZSwkZDA0MGZmOTAsJDIyMmVmZjVjLCQwMjAxMDBjMAorCWRjLmwJJDAwMDEwMDEwLCRmMjAxOTAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTQ4YTcsJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMDAKKwlkYy5sCSQwNDk4ZjIzYywkNThiODAwMDIsJGYyOTNmZGUyLCQ2MDAwZmVkNAorCWRjLmwJJDMyM2IxMjBhLCQ0ZWZiMTAwNiwkNGFmYzAwMzAsJGZkNTYwMDcyCisJZGMubAkkMDA3ODAwNmMsJGZkNTYwMDY2LCQwMDAwMDAwMCwkMDA3MjAwNzIKKwlkYy5sCSQwMDYwMDA2YywkMDA3MjAwNjYsJDAwMDAwMDAwLCQwMDdlMDA2MAorCWRjLmwJJDAwN2UwMDZjLCQwMDdlMDA2NiwkMDAwMDAwMDAsJDAwNmMwMDZjCisJZGMubAkkMDA2YzAwNmMsJDAwNmMwMDY2LCQwMDAwMDAwMCwkZmQ1NjAwNzIKKwlkYy5sCSQwMDc4MDA2YywkZmQ1NjAwNjYsJDAwMDAwMDAwLCQwMDY2MDA2NgorCWRjLmwJJDAwNjYwMDY2LCQwMDY2MDA2NiwkMDAwMDAwMDAsJDYwZmZmZmZmCisJZGMubAkkZGE3NDYwZmYsJGZmZmZkOWVhLCQ2MGZmZmZmZiwkZDllNDYwZmYKKwlkYy5sCSRmZmZmZWQwZSwkNjBmZmZmZmYsJGVkNjI2MGZmLCRmZmZmZWQyZQorCWRjLmwJJDJkNDBmZjVjLCQ0MjQxMTIyZSwkZmY0ZmU3MDksJDgyMmVmZjRlCisJZGMubAkkNjYwMDAyN2MsJDNkNjkwMDAwLCRmZjkwMmQ2OSwkMDAwNGZmOTQKKwlkYy5sCSQyZDY5MDAwOCwkZmY5ODNkNjgsJDAwMDBmZjg0LCQyZDY4MDAwNAorCWRjLmwJJGZmODgyZDY4LCQwMDA4ZmY4YywkNjFmZmZmZmYsJGQ4YWUyZjAwCisJZGMubAkkNjFmZmZmZmYsJGQ5NTI0NDk3LCRkMTk3MzIyZSwkZmY1ZWVjMDkKKwlkYy5sCSQyMDFmMGM4MCwkZmZmZmMwMDEsJDZmMDAwMDY0LCQwYzgwMDAwMAorCWRjLmwJJDNmZmY2NzAwLCQwMWI2NmUwMCwkMDEwMGYyMmUsJGQwODBmZjkwCisJZGMubAkkZjIyZTkwMDAsJGZmNWNmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0ODI0ZmY4NCwkZjIwMWE4MDAsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJDgzYWVmZjY0LCRmMjJlZjA4MCwkZmY4NDJmMDIsJDMyMmVmZjg0CisJZGMubAkkMjQwMTAyODEsJDAwMDA3ZmZmLCQwMjQyODAwMCwkOTI4MDgyNDIKKwlkYy5sCSQzZDQxZmY4NCwkMjQxZmYyMmUsJGQwODBmZjg0LCQ0ZTc1ZjIyZQorCWRjLmwJJGQwODBmZjkwLCRmMjJlOTAwMCwkZmY1Y2YyM2MsJDg4MDAwMDAwCisJZGMubAkkMDAwMGYyMmUsJDQ4MjRmZjg0LCRmMjAxYTgwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMjdlMDAxLCQzMjE3ZGZmYworCWRjLmwJJDAwMDAwMDBjLCQwMjgxMDAwMCwkN2ZmZjkyODAsJDBjODEwMDAwCisJZGMubAkkN2ZmZjZkOTAsJDAwNmUxMDQ4LCRmZjY2MTIyZSwkZmY2MjAyMDEKKwlkYy5sCSQwMDEzNjYyMCwkMDgyZTAwMDMsJGZmNjQ1NmMxLCQyMDJlZmY1YworCWRjLmwJJDAyMDAwMDMwLCQ2MWZmZmZmZiwkZGY0NjgxMmUsJGZmNjRmMjEwCisJZGMubAkkZDA4MDRlNzUsJGYyMmVmMDgwLCRmZjg0MmYwMiwkMzIyZWZmODQKKwlkYy5sCSQyNDAxMDI4MSwkMDAwMDdmZmYsJDAyNDI4MDAwLCQ5MjgwMDQ4MQorCWRjLmwJJDAwMDA2MDAwLCQwMjQxN2ZmZiwkODI0MjNkNDEsJGZmODQyNDFmCisJZGMubAkkZjIyZWQwNDAsJGZmODQ2MGFjLCQwOGVlMDAwMywkZmY2NmYyMmUKKwlkYy5sCSRkMDgwZmY5MCwkZjIzYzkwMDAsJDAwMDAwMDEwLCRmMjNjODgwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjJlNDgyNCwkZmY4NGYyMDEsJGE4MDBmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA4M2FlLCRmZjY0MTIyZSwkZmY2MjAyMDEKKwlkYy5sCSQwMDBiNjYyMCwkZjIyZWYwODAsJGZmODQ0MWVlLCRmZjg0MjIyZQorCWRjLmwJJGZmNWM2MWZmLCRmZmZmZGU0MCwkODEyZWZmNjQsJGYyMmVkMDgwCisJZGMubAkkZmY4NDRlNzUsJGYyMmVkMDQwLCRmZjkwZjIyZSwkOTAwMGZmNWMKKwlkYy5sCSRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU0OGE0LCRmZjg0ZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkZjA0MGZmODQsJDJmMDIzMjJlCisJZGMubAkkZmY4NDI0MDEsJDAyODEwMDAwLCQ3ZmZmMDI0MiwkODAwMDkyODAKKwlkYy5sCSQwNjgxMDAwMCwkNjAwMDAyNDEsJDdmZmY4MjQyLCQzZDQxZmY4NAorCWRjLmwJJDI0MWZmMjJlLCRkMDQwZmY4NCwkNjA4YWYyMmUsJGQwODBmZjkwCisJZGMubAkkZjIyZTkwMDAsJGZmNWNmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0ODI0ZmY4NCwkZjIwMWE4MDAsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJDgzYWVmZjY0LCRmMjAwMDA5OCwkZjIzYzU4YjgsJDAwMDFmMjkyCisJZGMubAkkZmU0NGYyOTQsJGZmMTRmMjJlLCRkMDQwZmY5MCwkNDI4MTAwMDEKKwlkYy5sCSQwMDEwZjIwMSwkOTAwMGYyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ4YTRmZjg0LCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDAwNDk4CisJZGMubAkkZjIzYzU4YjgsJDAwMDFmMjkzLCRmZTBjNjAwMCwkZmVkYzMyM2IKKwlkYy5sCSQxMjBhNGVmYiwkMTAwNjRhZmMsJDAwMzBmZDdhLCQwMDcyMDA3OAorCWRjLmwJJDAwNjBmZDdhLCQwMDY2MDAwMCwkMDAwMDAwNzgsJDAwNmMwMDc4CisJZGMubAkkMDA2MDAwNzgsJDAwNjYwMDAwLCQwMDAwMDA3ZSwkMDA3ZTAwNmMKKwlkYy5sCSQwMDYwMDA3ZSwkMDA2NjAwMDAsJDAwMDAwMDYwLCQwMDYwMDA2MAorCWRjLmwJJDAwNjAwMDYwLCQwMDY2MDAwMCwkMDAwMGZkN2EsJDAwNzIwMDc4CisJZGMubAkkMDA2MGZkN2EsJDAwNjYwMDAwLCQwMDAwMDA2NiwkMDA2NjAwNjYKKwlkYy5sCSQwMDY2MDA2NiwkMDA2NjAwMDAsJDAwMDA2MGZmLCRmZmZmZDZkMgorCWRjLmwJJDYwZmZmZmZmLCRkNmNjNjBmZiwkZmZmZmQ3NGEsJDYwZmZmZmZmCisJZGMubAkkZjBjZTYwZmYsJGZmZmZmMDljLCQ2MGZmZmZmZiwkZjBmNDAyMDAKKwlkYy5sCSQwMDMwMDAwMCwkMDA0MDYwMDgsJDAyMDAwMDMwLCQwMDAwMDA4MAorCWRjLmwJJDJkNDBmZjVjLCQ0MjQxMTIyZSwkZmY0ZmU3MDksJDgyMmVmZjRlCisJZGMubAkkNjYwMDAyNGMsJDYxZmZmZmZmLCRkNGIyZjIyZSwkZDA4MGZmOTAKKwlkYy5sCSRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU5MDAwLCRmZjVjZjIyZQorCWRjLmwJJDQ4MjJmZjg0LCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDFhODAwCisJZGMubAkkODNhZWZmNjQsJGYyODEwMDNjLCQyZjAyZjIyNywkZTAwMTMyMmUKKwlkYy5sCSRmZjVlZWMwOSwkMzQxNzAyODIsJDAwMDA3ZmZmLCQ5NDgwYjRiYgorCWRjLmwJJDE0MjQ2YzM4LCRiNGJiMTQyYSwkNmQwMDAwYjgsJDY3MDAwMTg0CisJZGMubAkkMzIxNzAyNDEsJDgwMDA4MjQyLCQzZTgxZjIxZiwkZDA4MDI0MWYKKwlkYy5sCSQ0ZTc1NGU3NSwkMDAwMDdmZmYsJDAwMDA0MDdmLCQwMDAwNDNmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwM2Y4MSwkMDAwMDNjMDEsJDAwYWUwMDAwCisJZGMubAkkMTA0OGZmNjQsJDEyMmVmZjYyLCQwMjAxMDAxMywkNjYyNGRmZmMKKwlkYy5sCSQwMDAwMDAwYywkMDgyZTAwMDMsJGZmNjQ1NmMxLCQyMDJlZmY1YworCWRjLmwJJDYxZmZmZmZmLCRkYzdhODEyZSwkZmY2NGYyMTAsJGQwODAyNDFmCisJZGMubAkkNGU3NTEyMmUsJGZmNWMwMjAxLCQwMGMwNjYxYSwkMzIxNzAyNDEKKwlkYy5sCSQ4MDAwMDQ4MiwkMDAwMDYwMDAsJDAyNDI3ZmZmLCQ4MjQyM2U4MQorCWRjLmwJJGYyMWZkMDQwLCQ2MGJlZjIyZSwkZDA4MGZmOTAsJDIyMmVmZjVjCisJZGMubAkkMDIwMTAwMzAsJGYyMDE5MDAwLCRmMjJlNDgyMiwkZmY4NGYyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGRmZmMsJDAwMDAwMDBjLCRmMjI3ZTAwMQorCWRjLmwJJDYwYmEwOGVlLCQwMDAzZmY2NiwkZGZmYzAwMDAsJDAwMGNmMjJlCisJZGMubAkkZDA4MGZmOTAsJGYyM2M5MDAwLCQwMDAwMDAxMCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4MjIsJGZmODRmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjAxLCRhODAwODNhZSwkZmY2NDEyMmUsJGZmNjIwMjAxCisJZGMubAkkMDAwYjY2MjIsJGYyMmVmMDgwLCRmZjg0NDFlZSwkZmY4NDIyMmUKKwlkYy5sCSRmZjVjNjFmZiwkZmZmZmRhY2EsJDgxMmVmZjY0LCRmMjJlZDA4MAorCWRjLmwJJGZmODQyNDFmLCQ0ZTc1ZjIyZSwkZDA0MGZmOTAsJDIyMmVmZjVjCisJZGMubAkkMDIwMTAwYzAsJDY2NGVmMjJlLCQ5MDAwZmY1YywkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4YTIsJGZmODRmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCRmMDQwZmY4NCwkMzIyZWZmODQsJDI0MDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDAyNDI4MDAwLCQ5MjgwMDY4MSwkMDAwMDYwMDAKKwlkYy5sCSQwMjQxN2ZmZiwkODI0MjNkNDEsJGZmODRmMjJlLCRkMDQwZmY4NAorCWRjLmwJJDYwMDBmZjgyLCQyMjJlZmY1YywkMDIwMTAwMzAsJGYyMDE5MDAwCisJZGMubAkkNjBhYTIyMmUsJGZmNWMwMjAxLCQwMGMwNjcwMCwkZmU3NDIyMmYKKwlkYy5sCSQwMDA0MGM4MSwkODAwMDAwMDAsJDY2MDBmZTY2LCQ0YWFmMDAwOAorCWRjLmwJJDY2MDBmZTVlLCQwODJlMDAwMSwkZmY2NjY3MDAsJGZlNTRmMjJlCisJZGMubAkkZDA0MGZmOTAsJDIyMmVmZjVjLCQwMjAxMDBjMCwkMDAwMTAwMTAKKwlkYy5sCSRmMjAxOTAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDhhMgorCWRjLmwJJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMDAsJDAwMThmMjAwCisJZGMubAkkMDQ5OGYyMDAsJDA0MzhmMjkyLCRmZWNhNjAwMCwkZmUxNDMyM2IKKwlkYy5sCSQxMjBhNGVmYiwkMTAwNjRhZmMsJDAwMzBmZGFhLCQwMGU0MDExYworCWRjLmwJJDAwNjBmZGFhLCQwMDY2MDAwMCwkMDAwMDAwYmMsJDAwNmMwMTFjCisJZGMubAkkMDA2MDAwYmMsJDAwNjYwMDAwLCQwMDAwMDEzMCwkMDEzMDAxMGMKKwlkYy5sCSQwMDYwMDEzMCwkMDA2NjAwMDAsJDAwMDAwMDYwLCQwMDYwMDA2MAorCWRjLmwJJDAwNjAwMDYwLCQwMDY2MDAwMCwkMDAwMGZkYWEsJDAwZTQwMTFjCisJZGMubAkkMDA2MGZkYWEsJDAwNjYwMDAwLCQwMDAwMDA2NiwkMDA2NjAwNjYKKwlkYy5sCSQwMDY2MDA2NiwkMDA2NjAwMDAsJDAwMDA2MGZmLCRmZmZmZDNkMgorCWRjLmwJJDYwZmZmZmZmLCRkM2NjMTAyOCwkMDAwMDEyMjksJDAwMDBiMTAxCisJZGMubAkkNmIwMDAwMTYsJDRhMDA2YjJlLCRmMjNjNDQwMCwkMDAwMDAwMDAKKwlkYy5sCSQxZDdjMDAwNCwkZmY2NDRlNzUsJDEyMmVmZjVmLCQwMjAxMDAzMAorCWRjLmwJJDBjMDEwMDIwLCQ2NzEwZjIzYywkNDQwMDAwMDAsJDAwMDAxZDdjCisJZGMubAkkMDAwNGZmNjQsJDRlNzVmMjNjLCQ0NDAwODAwMCwkMDAwMDFkN2MKKwlkYy5sCSQwMDBjZmY2NCwkNGU3NTNkNjgsJDAwMDBmZjg0LCQyZDY4MDAwNAorCWRjLmwJJGZmODgyZDY4LCQwMDA4ZmY4YywkNjFmZmZmZmYsJGQyN2U0MjZlCisJZGMubAkkZmY5MDQyYWUsJGZmOTQ0MmFlLCRmZjk4NjAwMCwkZmNjZTNkNjkKKwlkYy5sCSQwMDAwZmY5MCwkMmQ2OTAwMDQsJGZmOTQyZDY5LCQwMDA4ZmY5OAorCWRjLmwJJDYxZmZmZmZmLCRkMzAyNDI2ZSwkZmY4NDQyYWUsJGZmODg0MmFlCisJZGMubAkkZmY4YzYwMDAsJGZjYTYxMDI4LCQwMDAwMTIyOSwkMDAwMGIzMDAKKwlkYy5sCSQ2YmZmZmZmZiwkZDNhMGYyMjgsJGQwODAwMDAwLCQ0YTI4MDAwMAorCWRjLmwJJDZhMWMxZDdjLCQwMDBhZmY2NCwkNGU3NWYyMjksJGQwODAwMDAwCisJZGMubAkkNGEyOTAwMDAsJDZhMDgxZDdjLCQwMDBhZmY2NCwkNGU3NTFkN2MKKwlkYy5sCSQwMDAyZmY2NCwkNGU3NTAyMDAsJDAwMzAwMDAwLCQwMDQwNjAwOAorCWRjLmwJJDAyMDAwMDMwLCQwMDAwMDA4MCwkMmQ0MGZmNWMsJDQyNDExMjJlCisJZGMubAkkZmY0ZmU3MDksJDgyMmVmZjRlLCQ2NjAwMDI0YywkNjFmZmZmZmYKKwlkYy5sCSRkMGVhZjIyZSwkZDA4MGZmOTAsJGYyM2M4ODAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU5MDAwLCRmZjVjZjIyZSwkNDgyOGZmODQsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyMDFhODAwLCQ4M2FlZmY2NCwkZjI4MTAwM2MKKwlkYy5sCSQyZjAyZjIyNywkZTAwMTMyMmUsJGZmNWVlYzA5LCQzNDE3MDI4MgorCWRjLmwJJDAwMDA3ZmZmLCQ5NDgwYjRiYiwkMTQyNDZjMzgsJGI0YmIxNDJhCisJZGMubAkkNmQwMDAwYjgsJDY3MDAwMTg0LCQzMjE3MDI0MSwkODAwMDgyNDIKKwlkYy5sCSQzZTgxZjIxZiwkZDA4MDI0MWYsJDRlNzU0ZTc1LCQwMDAwN2ZmZgorCWRjLmwJJDAwMDA0MDdmLCQwMDAwNDNmZiwkMDAwMDAwMDAsJDAwMDAzZjgxCisJZGMubAkkMDAwMDNjMDEsJDAwYWUwMDAwLCQxMDQ4ZmY2NCwkMTIyZWZmNjIKKwlkYy5sCSQwMjAxMDAxMywkNjYyNGRmZmMsJDAwMDAwMDBjLCQwODJlMDAwMworCWRjLmwJJGZmNjQ1NmMxLCQyMDJlZmY1YywkNjFmZmZmZmYsJGQ4YjI4MTJlCisJZGMubAkkZmY2NGYyMTAsJGQwODAyNDFmLCQ0ZTc1MTIyZSwkZmY1YzAyMDEKKwlkYy5sCSQwMGMwNjYxYSwkMzIxNzAyNDEsJDgwMDAwNDgyLCQwMDAwNjAwMAorCWRjLmwJJDAyNDI3ZmZmLCQ4MjQyM2U4MSwkZjIxZmQwNDAsJDYwYmVmMjJlCisJZGMubAkkZDA4MGZmOTAsJDIyMmVmZjVjLCQwMjAxMDAzMCwkZjIwMTkwMDAKKwlkYy5sCSRmMjJlNDgyOCwkZmY4NGYyM2MsJDkwMDAwMDAwLCQwMDAwZGZmYworCWRjLmwJJDAwMDAwMDBjLCRmMjI3ZTAwMSwkNjBiYTA4ZWUsJDAwMDNmZjY2CisJZGMubAkkZGZmYzAwMDAsJDAwMGNmMjJlLCRkMDgwZmY5MCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAxMCwkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDgyOAorCWRjLmwJJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMDEsJGE4MDA4M2FlCisJZGMubAkkZmY2NDEyMmUsJGZmNjIwMjAxLCQwMDBiNjYyMiwkZjIyZWYwODAKKwlkYy5sCSRmZjg0NDFlZSwkZmY4NDIyMmUsJGZmNWM2MWZmLCRmZmZmZDcwMgorCWRjLmwJJDgxMmVmZjY0LCRmMjJlZDA4MCwkZmY4NDI0MWYsJDRlNzVmMjJlCisJZGMubAkkZDA0MGZmOTAsJDIyMmVmZjVjLCQwMjAxMDBjMCwkNjY0ZWYyMmUKKwlkYy5sCSQ5MDAwZmY1YywkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDhhOAorCWRjLmwJJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUsJGYwNDBmZjg0CisJZGMubAkkMzIyZWZmODQsJDI0MDEwMjgxLCQwMDAwN2ZmZiwkMDI0MjgwMDAKKwlkYy5sCSQ5MjgwMDY4MSwkMDAwMDYwMDAsJDAyNDE3ZmZmLCQ4MjQyM2Q0MQorCWRjLmwJJGZmODRmMjJlLCRkMDQwZmY4NCwkNjAwMGZmODIsJDIyMmVmZjVjCisJZGMubAkkMDIwMTAwMzAsJGYyMDE5MDAwLCQ2MGFhMjIyZSwkZmY1YzAyMDEKKwlkYy5sCSQwMGMwNjcwMCwkZmU3NDIyMmYsJDAwMDQwYzgxLCQ4MDAwMDAwMAorCWRjLmwJJDY2MDBmZTY2LCQ0YWFmMDAwOCwkNjYwMGZlNWUsJDA4MmUwMDAxCisJZGMubAkkZmY2NjY3MDAsJGZlNTRmMjJlLCRkMDQwZmY5MCwkMjIyZWZmNWMKKwlkYy5sCSQwMjAxMDBjMCwkMDAwMTAwMTAsJGYyMDE5MDAwLCRmMjNjODgwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjJlNDhhOCwkZmY4NGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMGYyMDAsJDAwMThmMjAwLCQwNDk4ZjIwMCwkMDQzOGYyOTIKKwlkYy5sCSRmZWNhNjAwMCwkZmUxNDMyM2IsJDEyMGE0ZWZiLCQxMDA2NGFmYworCWRjLmwJJDAwMzBmZGFhLCQwMGUyMDExYSwkMDA2MGZkYWEsJDAwNjYwMDAwCisJZGMubAkkMDAwMDAwYmEsJDAwNmMwMTFhLCQwMDYwMDBiYSwkMDA2NjAwMDAKKwlkYy5sCSQwMDAwMDEzMCwkMDEzMDAxMGEsJDAwNjAwMTMwLCQwMDY2MDAwMAorCWRjLmwJJDAwMDAwMDYwLCQwMDYwMDA2MCwkMDA2MDAwNjAsJDAwNjYwMDAwCisJZGMubAkkMDAwMGZkYWEsJDAwZTIwMTFhLCQwMDYwZmRhYSwkMDA2NjAwMDAKKwlkYy5sCSQwMDAwMDA2NiwkMDA2NjAwNjYsJDAwNjYwMDY2LCQwMDY2MDAwMAorCWRjLmwJJDAwMDA2MGZmLCRmZmZmZDAwYSwkNjBmZmZmZmYsJGQwMDQxMDI4CisJZGMubAkkMDAwMDEyMjksJDAwMDBiMzAwLCQ2YTE0NGEwMCwkNmIyZWYyM2MKKwlkYy5sCSQ0NDAwMDAwMCwkMDAwMDFkN2MsJDAwMDRmZjY0LCQ0ZTc1MTIyZQorCWRjLmwJJGZmNWYwMjAxLCQwMDMwMGMwMSwkMDAyMDY3MTAsJGYyM2M0NDAwCisJZGMubAkkMDAwMDAwMDAsJDFkN2MwMDA0LCRmZjY0NGU3NSwkZjIzYzQ0MDAKKwlkYy5sCSQ4MDAwMDAwMCwkMWQ3YzAwMGMsJGZmNjQ0ZTc1LCQzZDY4MDAwMAorCWRjLmwJJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgsJGZmOGM2MWZmCisJZGMubAkkZmZmZmNlYjgsJDQyNmVmZjkwLCQ0MmFlZmY5NCwkNDJhZWZmOTgKKwlkYy5sCSQ2MDAwZmNkMCwkM2Q2OTAwMDAsJGZmOTAyZDY5LCQwMDA0ZmY5NAorCWRjLmwJJDJkNjkwMDA4LCRmZjk4NjFmZiwkZmZmZmNmM2MsJDQyNmVmZjg0CisJZGMubAkkNDJhZWZmODgsJDQyYWVmZjhjLCQ2MDAwZmNhOCwkMTAyODAwMDAKKwlkYy5sCSQxMjI5MDAwMCwkYjMwMDZhZmYsJGZmZmZjZmRhLCRmMjI4ZDA4MAorCWRjLmwJJDAwMDBmMjAwLCQwMDFhZjI5MywkMDAxZTFkN2MsJDAwMGFmZjY0CisJZGMubAkkNGU3NWYyMjksJGQwODAwMDAwLCQ0YTI5MDAwMCwkNmEwODFkN2MKKwlkYy5sCSQwMDBhZmY2NCwkNGU3NTFkN2MsJDAwMDJmZjY0LCQ0ZTc1MDIwMAorCWRjLmwJJDAwMzAwMDAwLCQwMDQwNjAwOCwkMDIwMDAwMzAsJDAwMDAwMDgwCisJZGMubAkkMmQ0MGZmNWMsJDQyNDExMjJlLCRmZjRlNjYwMCwkMDI3NDRhMjgKKwlkYy5sCSQwMDAwNmJmZiwkZmZmZmNmN2UsJDAyMDAwMGMwLCQ2NjQ4ZjIyZQorCWRjLmwJJDkwMDBmZjVjLCRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMTA0ODA0CisJZGMubAkkZjIwMWE4MDAsJDgzYWVmZjY0LCQ0ZTc1NGEyOCwkMDAwMDZiZmYKKwlkYy5sCSRmZmZmY2Y1MiwkMDIwMDAwYzAsJDY2MWMzZDY4LCQwMDAwZmY4NAorCWRjLmwJJDJkNjgwMDA0LCRmZjg4MmQ2OCwkMDAwOGZmOGMsJDYxZmZmZmZmCisJZGMubAkkY2UwNDYwMDAsJDAwM2UwYzAwLCQwMDQwNjYwMCwkMDA4NDNkNjgKKwlkYy5sCSQwMDAwZmY4NCwkMmQ2ODAwMDQsJGZmODgyZDY4LCQwMDA4ZmY4YworCWRjLmwJJDYxZmZmZmZmLCRjZGUwMGM4MCwkMDAwMDAwN2UsJDY3MDAwMDk4CisJZGMubAkkNmUwMDAwOWUsJDBjODBmZmZmLCRmZjgwNjcwMCwkMDFhNDZkMDAKKwlkYy5sCSQwMTIwZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlLCQ5MDAwZmY1YworCWRjLmwJJGYyMmU0ODA0LCRmZjg0ZjIwMSwkYTgwMGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMDgzYWUsJGZmNjQyZjAyLCRmMjJlZjA4MCwkZmY4NDMyMmUKKwlkYy5sCSRmZjg0MjQwMSwkMDI4MTAwMDAsJDdmZmY5MjgwLCQwMjQyODAwMAorCWRjLmwJJDg0NDEzZDQyLCRmZjg0MjQxZiwkZjIyZWQwODAsJGZmODQ0ZTc1CisJZGMubAkkM2Q2ODAwMDAsJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgKKwlkYy5sCSRmZjhjNjFmZiwkZmZmZmNkNWUsJDBjODAwMDAwLCQwM2ZlNjcwMAorCWRjLmwJJDAwMTY2ZTFjLCQwYzgwZmZmZiwkZmMwMDY3MDAsJDAxMjQ2ZDAwCisJZGMubAkkMDBhMDYwMDAsJGZmN2UwODJlLCQwMDAwZmY4NSwkNjYwMGZmNzQKKwlkYy5sCSQwOGVlMDAwMywkZmY2NmYyM2MsJDkwMDAwMDAwLCQwMDEwZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgwNGZmODQsJGYyMDFhODAwCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NCwkMTIyZWZmNjIKKwlkYy5sCSQwMjAxMDAwYiwkNjYyMGYyMmUsJGYwODBmZjg0LCQ0MWVlZmY4NAorCWRjLmwJJDIyMmVmZjVjLCQ2MWZmZmZmZiwkZDMzODgxMmUsJGZmNjRmMjJlCisJZGMubAkkZDA4MGZmODQsJDRlNzUyZDZlLCRmZjg4ZmY5NCwkMmQ2ZWZmOGMKKwlkYy5sCSRmZjk4MzIyZSwkZmY4NDJmMDIsJDI0MDEwMjgxLCQwMDAwN2ZmZgorCWRjLmwJJDAyNDI4MDAwLCQ5MjgwMDY4MSwkMDAwMDYwMDAsJDAyNDE3ZmZmCisJZGMubAkkODI0MjNkNDEsJGZmOTBmMjJlLCRkMDQwZmY5MCwkMjQxZjYwYTYKKwlkYy5sCSRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU5MDAwLCRmZjVjZjIyZQorCWRjLmwJJDQ4MDRmZjg0LCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDFhODAwCisJZGMubAkkODNhZWZmNjQsJDAwYWUwMDAwLCQxMDQ4ZmY2NCwkMTIyZWZmNjIKKwlkYy5sCSQwMjAxMDAxMywkNjYxYzA4MmUsJDAwMDNmZjY0LCQ1NmMxMjAyZQorCWRjLmwJJGZmNWM2MWZmLCRmZmZmZDNhOCwkODEyZWZmNjQsJGYyMTBkMDgwCisJZGMubAkkNGU3NTJmMDIsJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYKKwlkYy5sCSQwMjQyODAwMCwkOTI4MDA0ODEsJDAwMDA2MDAwLCQwMjQxN2ZmZgorCWRjLmwJJDgyNDIzZDQxLCRmZjg0ZjIyZSwkZDA0MGZmODQsJDI0MWY2MGI2CisJZGMubAkkMDgyZTAwMDAsJGZmODU2NjAwLCRmZjc4ZjIzYywkODgwMDAwMDAKKwlkYy5sCSQwMDAwZjIyZSwkOTAwMGZmNWMsJGYyMmU0ODA0LCRmZjg0ZjIwMQorCWRjLmwJJGE4MDBmMjNjLCQ5MDAwMDAwMCwkMDAwMDgzYWUsJGZmNjRmMjAwCisJZGMubAkkMDA4MGYyM2MsJDU4YjgwMDAxLCRmMjkzZmY2YSwkNjAwMGZlNDgKKwlkYy5sCSQwYzAxMDAwNCwkNjcwMGZkYjQsJDBjMDEwMDAxLCQ2NzE2MGMwMQorCWRjLmwJJDAwMDI2NzM2LCQwYzAxMDAwNSwkNjdmZmZmZmYsJGNjOGM2MGZmCisJZGMubAkkZmZmZmNjOWEsJDRhMjgwMDAwLCQ2YjEwZjIzYywkNDQwMDAwMDAKKwlkYy5sCSQwMDAwMWQ3YywkMDAwNGZmNjQsJDRlNzVmMjNjLCQ0NDAwODAwMAorCWRjLmwJJDAwMDAxZDdjLCQwMDBjZmY2NCwkNGU3NTRhMjgsJDAwMDA2YmZmCisJZGMubAkkZmZmZmNjYzIsJGYyMjhkMDgwLCQwMDAwMWQ3YywkMDAwMmZmNjQKKwlkYy5sCSQ0ZTc1MzAzYiwkMTIwNjRlZmIsJDAwMDIwMDIwLCQwMDI2MDAyYworCWRjLmwJJDAwMzAwMDM0LCQwMDM4MDAzYywkMDA0MDAwNDQsJDAwNGEwMDUwCisJZGMubAkkMDA1NDAwNTgsJDAwNWMwMDYwLCQwMDY0MjAyZSwkZmY5YzRlNzUKKwlkYy5sCSQyMDJlZmZhMCwkNGU3NTIwMDIsJDRlNzUyMDAzLCQ0ZTc1MjAwNAorCWRjLmwJJDRlNzUyMDA1LCQ0ZTc1MjAwNiwkNGU3NTIwMDcsJDRlNzUyMDJlCisJZGMubAkkZmZhNDRlNzUsJDIwMmVmZmE4LCQ0ZTc1MjAwYSwkNGU3NTIwMGIKKwlkYy5sCSQ0ZTc1MjAwYywkNGU3NTIwMGQsJDRlNzUyMDE2LCQ0ZTc1MjAyZQorCWRjLmwJJGZmZDg0ZTc1LCQzMjNiMTIwNiwkNGVmYjEwMDIsJDAwMTAwMDE2CisJZGMubAkkMDAxYzAwMjAsJDAwMjQwMDI4LCQwMDJjMDAzMCwkMmQ0MGZmOWMKKwlkYy5sCSQ0ZTc1MmQ0MCwkZmZhMDRlNzUsJDI0MDA0ZTc1LCQyNjAwNGU3NQorCWRjLmwJJDI4MDA0ZTc1LCQyYTAwNGU3NSwkMmMwMDRlNzUsJDJlMDA0ZTc1CisJZGMubAkkMzIzYjEyMDYsJDRlZmIxMDAyLCQwMDEwMDAxNiwkMDAxYzAwMjAKKwlkYy5sCSQwMDI0MDAyOCwkMDAyYzAwMzAsJDNkNDBmZjllLCQ0ZTc1M2Q0MAorCWRjLmwJJGZmYTI0ZTc1LCQzNDAwNGU3NSwkMzYwMDRlNzUsJDM4MDA0ZTc1CisJZGMubAkkM2EwMDRlNzUsJDNjMDA0ZTc1LCQzZTAwNGU3NSwkMzIzYjEyMDYKKwlkYy5sCSQ0ZWZiMTAwMiwkMDAxMDAwMTYsJDAwMWMwMDIwLCQwMDI0MDAyOAorCWRjLmwJJDAwMmMwMDMwLCQxZDQwZmY5ZiwkNGU3NTFkNDAsJGZmYTM0ZTc1CisJZGMubAkkMTQwMDRlNzUsJDE2MDA0ZTc1LCQxODAwNGU3NSwkMWEwMDRlNzUKKwlkYy5sCSQxYzAwNGU3NSwkMWUwMDRlNzUsJDMyM2IxMjA2LCQ0ZWZiMTAwMgorCWRjLmwJJDAwMTAwMDE2LCQwMDFjMDAyMCwkMDAyNDAwMjgsJDAwMmMwMDMwCisJZGMubAkkZDFhZWZmYTQsJDRlNzVkMWFlLCRmZmE4NGU3NSwkZDVjMDRlNzUKKwlkYy5sCSRkN2MwNGU3NSwkZDljMDRlNzUsJGRiYzA0ZTc1LCRkMTk2NGU3NQorCWRjLmwJJDFkN2MwMDA0LCRmZjRhMGMwMCwkMDAwMTY3MDYsJGQxYWVmZmQ4CisJZGMubAkkNGU3NTU0YWUsJGZmZDg0ZTc1LCQzMjNiMTIwNiwkNGVmYjEwMDIKKwlkYy5sCSQwMDEwMDAxNiwkMDAxYzAwMjAsJDAwMjQwMDI4LCQwMDJjMDAzMAorCWRjLmwJJDkxYWVmZmE0LCQ0ZTc1OTFhZSwkZmZhODRlNzUsJDk1YzA0ZTc1CisJZGMubAkkOTdjMDRlNzUsJDk5YzA0ZTc1LCQ5YmMwNGU3NSwkOTE5NjRlNzUKKwlkYy5sCSQxZDdjMDAwOCwkZmY0YTBjMDAsJDAwMDE2NzA2LCQ5MWFlZmZkOAorCWRjLmwJJDRlNzU1NWFlLCRmZmQ4NGU3NSwkMzAzYjAyMDYsJDRlZmIwMDAyCisJZGMubAkkMDAxMDAwMjgsJDAwNDAwMDRjLCQwMDU4MDA2NCwkMDA3MDAwN2MKKwlkYy5sCSQyZDZlZmZkYywkZmY2YzJkNmUsJGZmZTBmZjcwLCQyZDZlZmZlNAorCWRjLmwJJGZmNzQ0MWVlLCRmZjZjNGU3NSwkMmQ2ZWZmZTgsJGZmNmMyZDZlCisJZGMubAkkZmZlY2ZmNzAsJDJkNmVmZmYwLCRmZjc0NDFlZSwkZmY2YzRlNzUKKwlkYy5sCSRmMjJlZjAyMCwkZmY2YzQxZWUsJGZmNmM0ZTc1LCRmMjJlZjAxMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNGU3NSwkZjIyZWYwMDgsJGZmNmM0MWVlCisJZGMubAkkZmY2YzRlNzUsJGYyMmVmMDA0LCRmZjZjNDFlZSwkZmY2YzRlNzUKKwlkYy5sCSRmMjJlZjAwMiwkZmY2YzQxZWUsJGZmNmM0ZTc1LCRmMjJlZjAwMQorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNGU3NSwkMzAzYjAyMDYsJDRlZmIwMDAyCisJZGMubAkkMDAxMDAwMjgsJDAwNDAwMDRjLCQwMDU4MDA2NCwkMDA3MDAwN2MKKwlkYy5sCSQyZDZlZmZkYywkZmY3ODJkNmUsJGZmZTBmZjdjLCQyZDZlZmZlNAorCWRjLmwJJGZmODA0MWVlLCRmZjc4NGU3NSwkMmQ2ZWZmZTgsJGZmNzgyZDZlCisJZGMubAkkZmZlY2ZmN2MsJDJkNmVmZmYwLCRmZjgwNDFlZSwkZmY3ODRlNzUKKwlkYy5sCSRmMjJlZjAyMCwkZmY3ODQxZWUsJGZmNzg0ZTc1LCRmMjJlZjAxMAorCWRjLmwJJGZmNzg0MWVlLCRmZjc4NGU3NSwkZjIyZWYwMDgsJGZmNzg0MWVlCisJZGMubAkkZmY3ODRlNzUsJGYyMmVmMDA0LCRmZjc4NDFlZSwkZmY3ODRlNzUKKwlkYy5sCSRmMjJlZjAwMiwkZmY3ODQxZWUsJGZmNzg0ZTc1LCRmMjJlZjAwMQorCWRjLmwJJGZmNzg0MWVlLCRmZjc4NGU3NSwkMzAzYjAyMDYsJDRlZmIwMDAyCisJZGMubAkkMDAxMDAwMTgsJDAwMjAwMDJhLCQwMDM0MDAzZSwkMDA0ODAwNTIKKwlkYy5sCSRmMjJlZjA4MCwkZmZkYzRlNzUsJGYyMmVmMDgwLCRmZmU4NGU3NQorCWRjLmwJJGYyMjdlMDAxLCRmMjFmZDAyMCwkNGU3NWYyMjcsJGUwMDFmMjFmCisJZGMubAkkZDAxMDRlNzUsJGYyMjdlMDAxLCRmMjFmZDAwOCwkNGU3NWYyMjcKKwlkYy5sCSRlMDAxZjIxZiwkZDAwNDRlNzUsJGYyMjdlMDAxLCRmMjFmZDAwMgorCWRjLmwJJDRlNzVmMjI3LCRlMDAxZjIxZiwkZDAwMTRlNzUsJDcwMGM2MWZmCisJZGMubAkkZmZmZmJhY2UsJDQzZWVmZjZjLCQ3MDBjNjFmZiwkZmZmZmEwZDgKKwlkYy5sCSQ0YTgxNjZmZiwkMDAwMDBhMTQsJGU5ZWUwMDRmLCRmZjZjMGM0MAorCWRjLmwJJDdmZmY2NjAyLCQ0ZTc1MTAyZSwkZmY2ZjAyMDAsJDAwMGY2NjBlCisJZGMubAkkNGFhZWZmNzAsJDY2MDg0YWFlLCRmZjc0NjYwMiwkNGU3NTQxZWUKKwlkYy5sCSRmZjZjNjFmZiwkMDAwMDAwMWMsJGYyMmVmMDgwLCRmZjZjNGU3NQorCWRjLmwJJDAwMDAwMDAwLCQwMjAzMDIwMywkMDIwMzAzMDIsJDAzMDIwMjAzCisJZGMubAkkMmQ2ODAwMDAsJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgKKwlkYy5sCSRmZjhjNDFlZSwkZmY4NDQ4ZTcsJDNjMDBmMjI3LCRlMDAxNzQwMgorCWRjLmwJJDc2MDQyODEwLCQ0MjgxNGMzYywkMTAwMTAwMDAsJDAwMGFlOWM0CisJZGMubAkkMDhjNGQyODAsJDU4MDM1MWNhLCRmZmVlMDgwNCwkMDAxZTY3MDIKKwlkYy5sCSQ0NDgxMDQ4MSwkMDAwMDAwMTAsJDZjMGU0NDgxLCQwMDg0NDAwMAorCWRjLmwJJDAwMDAwMDkwLCQ0MDAwMDAwMCwkMmYwMTcyMDEsJGYyM2M0NDAwCisJZGMubAkkMDAwMDAwMDAsJGU5ZDAwNzA0LCRmMjAwNTgyMiwkMjgzMDFjMDAKKwlkYy5sCSQ3NjAwNzQwNywkZjIzYzQ0MjMsJDQxMjAwMDAwLCRlOWM0MDhjNAorCWRjLmwJJGYyMDA1ODIyLCQ1ODAzNTFjYSwkZmZlYzUyODEsJDBjODEwMDAwCisJZGMubAkkMDAwMjZmZDgsJDA4MTAwMDFmLCQ2NzA0ZjIwMCwkMDAxYTIyMTcKKwlkYy5sCSQwYzgxMDAwMCwkMDAxYjZmMDAsJDAwZTQwODEwLCQwMDFlNjY3NAorCWRjLmwJJDQyODEyODEwLCRlOWM0MDcwNCwkNjYyNDUyODEsJDdhMDEyODMwCisJZGMubAkkNWMwMDY2MDgsJDUwODE1Mjg1LCQyODMwNWMwMCwkNDI4Mzc0MDcKKwlkYy5sCSRlOWM0MDhjNCwkNjYwODU4ODMsJDUyODE1MWNhLCRmZmY0MjAwMQorCWRjLmwJJDIyMTc5MjgwLCQ2YzEwNDQ4MSwkMjgxMDAwODQsJDQwMDAwMDAwCisJZGMubAkkMDA5MDQwMDAsJDAwMDA0M2ZiLCQwMTcwMDAwMCwkMDY2NjQyODMKKwlkYy5sCSRmMjNjNDQ4MCwkM2Y4MDAwMDAsJDc0MDNlMjgwLCQ2NDA2ZjIzMQorCWRjLmwJJDQ4YTMzODAwLCQwNjgzMDAwMCwkMDAwYzRhODAsJDY2ZWNmMjAwCisJZGMubAkkMDQyMzYwNjgsJDQyODE3YTAyLCQyODMwNWMwMCwkNjYwODUzODUKKwlkYy5sCSQ1MDgxMjgzMCwkNWMwMDc2MWMsJDc0MDdlOWM0LCQwOGM0NjYwOAorCWRjLmwJJDU5ODM1MjgxLCQ1MWNhZmZmNCwkMjAwMTIyMTcsJDkyODA2ZTEwCisJZGMubAkkNDQ4MTI4MTAsJDAyODRiZmZmLCRmZmZmMDI5MCwkYmZmZmZmZmYKKwlkYy5sCSQ0M2ZiMDE3MCwkMDAwMDA1ZmMsJDQyODNmMjNjLCQ0NDgwM2Y4MAorCWRjLmwJJDAwMDA3NDAzLCRlMjgwNjQwNiwkZjIzMTQ4YTMsJDM4MDAwNjgzCisJZGMubAkkMDAwMDAwMGMsJDRhODA2NmVjLCRmMjAwMDQyMCwkMjYyZWZmNjAKKwlkYy5sCSRlOWMzMjY4MiwkMjgxMGU1ODIsJGU5YzQwMDAyLCRkNDgwNDNmYQorCWRjLmwJJGZlNTAxMDMxLCQyODAwNDI4MywkZWZjMzA2ODIsJGYyMDM5MDAwCisJZGMubAkkZTI4MDY0MGEsJDQzZmIwMTcwLCQwMDAwMDY0NCwkNjAxNmUyODAKKwlkYy5sCSQ2NDBhNDNmYiwkMDE3MDAwMDAsJDA2ZDI2MDA4LCQ0M2ZiMDE3MAorCWRjLmwJJDAwMDAwNTkwLCQyMDAxNmEwOCwkNDQ4MDAwOTAsJDQwMDAwMDAwCisJZGMubAkkNDI4M2YyM2MsJDQ0ODAzZjgwLCQwMDAwZTI4MCwkNjQwNmYyMzEKKwlkYy5sCSQ0OGEzMzgwMCwkMDY4MzAwMDAsJDAwMGM0YTgwLCQ2NmVjMDgxMAorCWRjLmwJJDAwMWU2NzA2LCRmMjAwMDQyMCwkNjAwNGYyMDAsJDA0MjNmMjAwCisJZGMubAkkYTgwMDA4ODAsJDAwMDk2NzA2LCQwMDZlMDEwOCwkZmY2NjU4OGYKKwlkYy5sCSRmMjFmZDA0MCwkNGNkZjAwM2MsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyM2M4ODAwLCQwMDAwMDAwMCwkNGU3NTNmZmQsJDAwMDA5YTIwCisJZGMubAkkOWE4NGZiY2YsJGY3OTgwMDAwLCQwMDAwM2ZmZCwkMDAwMDlhMjAKKwlkYy5sCSQ5YTg0ZmJjZiwkZjc5OTAwMDAsJDAwMDAzZjgwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDQwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwNDEyMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA0NTlhLCQyODAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMzAzCisJZGMubAkkMDIwMjAzMDIsJDAyMDMwMjAzLCQwMzAyNDhlNywkM2YyMGYyMjcKKwlkYy5sCSRlMDA3ZjIzYywkOTAwMDAwMDAsJDAwMjAyZDUwLCRmZjU4MmUwMAorCWRjLmwJJDQyMmVmZjUwLCQwYzJlMDAwNCwkZmY0ZTY2MDAsJDAwMzAzMDEwCisJZGMubAkkMDI0MDdmZmYsJDIyMjgwMDA0LCQyNDI4MDAwOCwkNTM0MGUzOGEKKwlkYy5sCSRlMzkxNGE4MSwkNmNmNjRhNDAsJDZlMDQ1MGVlLCRmZjUwMDI0MAorCWRjLmwJJDdmZmYzMDgwLCQyMTQxMDAwNCwkMjE0MjAwMDgsJDJkNTBmZjkwCisJZGMubAkkMmQ2ODAwMDQsJGZmOTQyZDY4LCQwMDA4ZmY5OCwkMDJhZTdmZmYKKwlkYy5sCSRmZmZmZmY5MCwkNGEyZWZmNTAsJDY3MDgyYzNjLCRmZmZmZWNiYgorCWRjLmwJJDYwMzgzMDJlLCRmZjkwM2Q3YywkM2ZmZmZmOTAsJGYyMmU0ODAwCisJZGMubAkkZmY5MDA0NDAsJDNmZmZmMjAwLCQ1MDIyZjIzYSwkNDQyOGZmMWMKKwlkYy5sCSRmMjkzMDAwZSwkZjIzYTQ4MjMsJGZmMDJmMjA2LCQ2MDAwNjAwYQorCWRjLmwJJGYyM2E0ODIzLCRmZWU2ZjIwNiwkNjAwMGYyM2MsJDg4MDAwMDAwCisJZGMubAkkMDAwMDQyNDUsJDRhODc2ZjA0LCQyODA3NjAwNiwkMjgwNjk4ODcKKwlkYy5sCSQ1Mjg0NGE4NCwkNmYxODBjODQsJDAwMDAwMDExLCQ2ZjEyNzgxMQorCWRjLmwJJDRhODc2ZjBjLCQwMGFlMDAwMCwkMjA4MGZmNjQsJDYwMDI3ODAxCisJZGMubAkkNGE4NzZlMDYsJGJlODY2ZDAyLCQyYzA3MjAwNiwkNTI4MDkwODQKKwlkYy5sCSQ0ODQ1NDI0NSwkNDI0MjRhODAsJDZjMTQ1MjQ1LCQwYzgwZmZmZgorCWRjLmwJJGVjZDQ2ZTA4LCQwNjgwMDAwMCwkMDAxODc0MTgsJDQ0ODBmMjNhCisJZGMubAkkNDQ4MGZlOTgsJGU5ZWUxNjgyLCRmZjYwZTM0OSwkZDI0NWUzNDkKKwlkYy5sCSQ0YWFlZmY1OCwkNmMwMjUyODEsJDQ1ZmFmZWMwLCQxNjMyMTgwMAorCWRjLmwJJGU5OGJmMjAzLCQ5MDAwZTg4YiwkNGEwMzY2MGEsJDQzZmIwMTcwCisJZGMubAkkMDAwMDAzNzAsJDYwMTZlMjBiLCQ2NDBhNDNmYiwkMDE3MDAwMDAKKwlkYy5sCSQwM2ZlNjAwOCwkNDNmYjAxNzAsJDAwMDAwNDkwLCQ0MjgzZTI4OAorCWRjLmwJJDY0MDZmMjMxLCQ0OGEzMzgwMCwkMDY4MzAwMDAsJDAwMGM0YTgwCisJZGMubAkkNjZlY2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDEwZjIxMCwkNDgwMGYyMDAsJDAwMTg0YTQ1LCQ2NjA4ZjIwMAorCWRjLmwJJDA0MjA2MDAwLCQwMDhlNGEyZSwkZmY1MDY3MDAsJDAwNzJmMjI3CisJZGMubAkkZTAwMjM2MTcsJDAyNDM3ZmZmLCQwMDUwODAwMCwkZDY1MDA0NDMKKwlkYy5sCSQzZmZmZDY2OSwkMDAyNDA0NDMsJDNmZmZkNjY5LCQwMDMwMDQ0MworCWRjLmwJJDNmZmY2YjAwLCQwMDQ4MDI1NywkODAwMDg3NTcsJDAyNTA3ZmZmCisJZGMubAkkMmYyODAwMDgsJDJmMjgwMDA0LCQyZjNjM2ZmZiwkMDAwMGYyMWYKKwlkYy5sCSRkMDgwZjIxZiwkNDgyMzJmMjksJDAwMmMyZjI5LCQwMDI4MmYzYworCWRjLmwJJDNmZmYwMDAwLCQyZjI5MDAzOCwkMmYyOTAwMzQsJDJmM2MzZmZmCisJZGMubAkkMDAwMGYyMWYsJDQ4MjNmMjFmLCQ0ODIzNjAxNiwkNjBmZTRhNDIKKwlkYy5sCSQ2NzBjZjIyOSwkNDgyMzAwMjQsJGYyMjk0ODIzLCQwMDMwZjIwMAorCWRjLmwJJDA0MjNmMjAwLCRhODAwZjIyZSwkNjgwMGZmOTAsJDQ1ZWVmZjkwCisJZGMubAkkMDgwMDAwMDksJDY3MGUwMGFhLCQwMDAwMDAwMSwkMDAwOGYyMmUKKwlkYy5sCSQ0ODAwZmY5MCwkMmQ2ZWZmNjAsJGZmNTQwMmFlLCQwMDAwMDAzMAorCWRjLmwJJGZmNjA0OGU3LCRjMGMwMmYyZSwkZmY1NDJmMmUsJGZmNTg0MWVlCisJZGMubAkkZmY5MGYyMTAsJDY4MDA0YWFlLCRmZjU4NmMwNiwkMDA5MDgwMDAKKwlkYy5sCSQwMDAwMmYyZSwkZmY2NGYyMmUsJDkwMDBmZjYwLCRmMjNjODgwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjJlNDgwMSwkZmY5MGYyMDAsJGE4MDA4MTZlCisJZGMubAkkZmY2NjFkNTcsJGZmNjQ1ODhmLCQyZDVmZmY1OCwkMmQ1ZmZmNTQKKwlkYy5sCSQ0Y2RmMDMwMywkMmQ2ZWZmNTgsJGZmOTAyZDZlLCRmZjU0ZmY2MAorCWRjLmwJJDQ4NDU0YTQ1LCQ2NmZmMDAwMCwkMDA4NmYyM2EsJDQ1MDBmY2VjCisJZGMubAkkMjAwNDUzODAsJDQyODNlMjg4LCQ2NDA2ZjIzMSwkNDkyMzM4MDAKKwlkYy5sCSQwNjgzMDAwMCwkMDAwYzRhODAsJDY2ZWM0YTJlLCRmZjUwNjcwYQorCWRjLmwJJGYyMDAwMDE4LCQ2MGZmMDAwMCwkMDAyOGYyMDAsJDAwMThmMjAwCisJZGMubAkkMDgzOGYyOTMsJDAwMWE1Mzg2LCQzYTNjMDAwMSwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAyMCwkZjIzYTQ1MjMsJGZjYzI2MDAwLCRmZGE4ZjIzYQorCWRjLmwJJDQ1MjNmY2I4LCRmMjAwMDgzOCwkZjI5NDAwNWMsJGYyOTIwMDBjCisJZGMubAkkZjIzYTQ0MjAsJGZjYTY1Mjg2LCQ2MDRjNTI4NiwkM2EzYzAwMDEKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMjAsJDYwMDBmZDdhLCRmMjNhNDUwMAorCWRjLmwJJGZjNmEyMDA0LCQ0MjgzZTI4OCwkNjQwNmYyMzEsJDQ5MjMzODAwCisJZGMubAkkMDY4MzAwMDAsJDAwMGM0YTgwLCQ2NmVjZjIwMCwkMDAxOGYyMDAKKwlkYy5sCSQwODM4ZjI4ZSwkMDAxMmYyM2EsJDQ0MjBmYzYwLCQ1Mjg2NTI4NAorCWRjLmwJJGYyM2E0NTIzLCRmYzU2ZjIzYywkOTAwMDAwMDAsJDAwMTBmMjAwCisJZGMubAkkMDgyMDQxZWUsJGZmODRmMjEwLCQ2ODAwMjQyOCwkMDAwNDI2MjgKKwlkYy5sCSQwMDA4NDJhOCwkMDAwNDQyYTgsJDAwMDgyMDEwLCQ0ODQwNjcxNAorCWRjLmwJJDA0ODAwMDAwLCQzZmZkNGE4MCwkNmUwYTQ0ODAsJGUyOGFlMjkzCisJZGMubAkkNTFjOGZmZmEsJDRhODI2NjA0LCQ0YTgzNjcxMCwkNDI4MTA2ODMKKwlkYy5sCSQwMDAwMDA4MCwkZDU4MTAyODMsJGZmZmZmZjgwLCQyMDA0NTY4OAorCWRjLmwJJDYxZmYwMDAwLCQwMmIwNGEyZSwkZmY1MDY3MjgsJGYyMDAwMDNhCisJZGMubAkkZjI4MTAwMGMsJGYyMDY0MDAwLCRmMjAwMDAxOCwkNjAyZTRhODcKKwlkYy5sCSQ2ZDA4ZjIzYSwkNDQwMGZiZTQsJDYwMjJmMjA2LCQ0MDAwZjIwMAorCWRjLmwJJDAwMTg2MDE4LCRmMjAwMDAzYSwkZjI4ZTAwMGEsJGYyM2E0NDAwCisJZGMubAkkZmI5YTYwMDgsJGYyMDY0MDAwLCRmMjAwMDAxOCwkZjIyOTQ4MjAKKwlkYy5sCSQwMDE4ZjIyZSwkNjgwMGZmOTAsJDI0MmEwMDA0LCQyNjJhMDAwOAorCWRjLmwJJDMwMTI2NzBlLCQwNDQwM2ZmZCwkNDQ0MGUyOGEsJGUyOTM1MWM4CisJZGMubAkkZmZmYTQyODEsJDA2ODMwMDAwLCQwMDgwZDU4MSwkMDI4M2ZmZmYKKwlkYy5sCSRmZjgwNzAwNCwkNDFlZWZmNTQsJDYxZmYwMDAwLCQwMjI4MjAyZQorCWRjLmwJJGZmNTQ3MjBjLCRlMmE4ZWZlZSwkMDEwY2ZmODQsJGUyYThlZmVlCisJZGMubAkkMDQwNGZmODQsJDRhMDA2NzA4LCQwMGFlMDAwMCwkMjA4MGZmNjQKKwlkYy5sCSQ0MjgwMDIyZSwkMDAwZmZmODQsJDRhYWVmZjU4LCQ2YzAyNzAwMgorCWRjLmwJJDRhODY2YzAyLCQ1MjgwZWZlZSwkMDAwMmZmODQsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJGYyMWZkMGUwLCQ0Y2RmMDRmYywkNGU3NTQwMDIKKwlkYy5sCSQwMDAwYTAwMCwkMDAwMDAwMDAsJDAwMDA0MDA1LCQwMDAwYzgwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwNDAwYywkMDAwMDljNDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDQwMTksJDAwMDBiZWJjLCQyMDAwMDAwMCwkMDAwMDQwMzQKKwlkYy5sCSQwMDAwOGUxYiwkYzliZjA0MDAsJDAwMDA0MDY5LCQwMDAwOWRjNQorCWRjLmwJJGFkYTgyYjcwLCRiNTllNDBkMywkMDAwMGMyNzgsJDFmNDlmZmNmCisJZGMubAkkYTZkNTQxYTgsJDAwMDA5M2JhLCQ0N2M5ODBlOSwkOGNlMDQzNTEKKwlkYy5sCSQwMDAwYWE3ZSwkZWJmYjlkZjksJGRlOGU0NmEzLCQwMDAwZTMxOQorCWRjLmwJJGEwYWVhNjBlLCQ5MWM3NGQ0OCwkMDAwMGM5NzYsJDc1ODY4MTc1CisJZGMubAkkMGMxNzVhOTIsJDAwMDA5ZThiLCQzYjVkYzUzZCwkNWRlNTc1MjUKKwlkYy5sCSQwMDAwYzQ2MCwkNTIwMjhhMjAsJDk3OWI0MDAyLCQwMDAwYTAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwNDAwNSwkMDAwMGM4MDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDQwMGMsJDAwMDA5YzQwLCQwMDAwMDAwMCwkMDAwMDQwMTkKKwlkYy5sCSQwMDAwYmViYywkMjAwMDAwMDAsJDAwMDA0MDM0LCQwMDAwOGUxYgorCWRjLmwJJGM5YmYwNDAwLCQwMDAwNDA2OSwkMDAwMDlkYzUsJGFkYTgyYjcwCisJZGMubAkkYjU5ZTQwZDMsJDAwMDBjMjc4LCQxZjQ5ZmZjZiwkYTZkNjQxYTgKKwlkYy5sCSQwMDAwOTNiYSwkNDdjOTgwZTksJDhjZTA0MzUxLCQwMDAwYWE3ZQorCWRjLmwJJGViZmI5ZGY5LCRkZThlNDZhMywkMDAwMGUzMTksJGEwYWVhNjBlCisJZGMubAkkOTFjNzRkNDgsJDAwMDBjOTc2LCQ3NTg2ODE3NSwkMGMxODVhOTIKKwlkYy5sCSQwMDAwOWU4YiwkM2I1ZGM1M2QsJDVkZTU3NTI1LCQwMDAwYzQ2MAorCWRjLmwJJDUyMDI4YTIwLCQ5NzliNDAwMiwkMDAwMGEwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDQwMDUsJDAwMDBjODAwLCQwMDAwMDAwMCwkMDAwMDQwMGMKKwlkYy5sCSQwMDAwOWM0MCwkMDAwMDAwMDAsJDAwMDA0MDE5LCQwMDAwYmViYworCWRjLmwJJDIwMDAwMDAwLCQwMDAwNDAzNCwkMDAwMDhlMWIsJGM5YmYwNDAwCisJZGMubAkkMDAwMDQwNjksJDAwMDA5ZGM1LCRhZGE4MmI3MCwkYjU5ZDQwZDMKKwlkYy5sCSQwMDAwYzI3OCwkMWY0OWZmY2YsJGE2ZDU0MWE4LCQwMDAwOTNiYQorCWRjLmwJJDQ3Yzk4MGU5LCQ4Y2RmNDM1MSwkMDAwMGFhN2UsJGViZmI5ZGY5CisJZGMubAkkZGU4ZDQ2YTMsJDAwMDBlMzE5LCRhMGFlYTYwZSwkOTFjNjRkNDgKKwlkYy5sCSQwMDAwYzk3NiwkNzU4NjgxNzUsJDBjMTc1YTkyLCQwMDAwOWU4YgorCWRjLmwJJDNiNWRjNTNkLCQ1ZGU0NzUyNSwkMDAwMGM0NjAsJDUyMDI4YTIwCisJZGMubAkkOTc5YTQ4ZTcsJGZmMDA3ZTAxLCQ1MzgwMjgwMiwkMmEwM2U5YzIKKwlkYy5sCSQxMDAzZTc4MiwkZTljMzYwMDMsJGU3ODM4NDg2LCRlMzg1ZTM5NAorCWRjLmwJJDQ4NDZkMzQ2LCRkNjg1NGU3MSwkZDU4NDRlNzEsJGQzNDY0ODQ2CisJZGMubAkkNGE0NzY3MTIsJDQ4NDdlOTQ3LCRkZTQxMTBjNywkNDg0NzQyNDcKKwlkYy5sCSQ1MWM4ZmZjOCwkNjAxMjQ4NDcsJDNlMDE0ODQ3LCQ1MjQ3NTFjOAorCWRjLmwJJGZmYmE0ODQ3LCRlOTRmMTBjNywkNGNkZjAwZmYsJDRlNzU3MDAxCisJZGMubAkkNjEwMDAwZDYsJDNkN2MwMTIxLCQwMDBhNjAwMCwkMDA3ZTcwMDIKKwlkYy5sCSQ2MTAwMDBjNiwkM2Q3YzAxNDEsJDAwMGE2MDZlLCQ3MDA0NjEwMAorCWRjLmwJJDAwYjgzZDdjLCQwMTAxMDAwYSwkNjA2MDcwMDgsJDYxMDAwMGFhCisJZGMubAkkM2Q3YzAxNjEsJDAwMGE2MDUyLCQ3MDBjNjEwMCwkMDA5YzNkN2MKKwlkYy5sCSQwMTYxMDAwYSwkNjA0NDcwMDEsJDYxMDAwMDhlLCQzZDdjMDBhMQorCWRjLmwJJDAwMGE2MDM2LCQ3MDAyNjEwMCwkMDA4MDNkN2MsJDAwYzEwMDBhCisJZGMubAkkNjAyODcwMDQsJDYxMDAwMDcyLCQzZDdjMDA4MSwkMDAwYTYwMWEKKwlkYy5sCSQ3MDA4NjEwMCwkMDA2NDNkN2MsJDAwZTEwMDBhLCQ2MDBjNzAwYworCWRjLmwJJDYxMDAwMDU2LCQzZDdjMDBlMSwkMDAwYTJkNmUsJGZmNjgwMDA2CisJZGMubAkkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljNGU1ZSwkMmYxNzJmNmYsJDAwMDgwMDA0LCQyZjZmMDAwYworCWRjLmwJJDAwMDgyZjdjLCQwMDAwMDAwMSwkMDAwYzNmNmYsJDAwMDYwMDBjCisJZGMubAkkM2Y3YzQwMDgsJDAwMDYwODE3LCQwMDA1NjcwNiwkMDhlZjAwMDIKKwlkYy5sCSQwMDBkNjBmZiwkZmZmZjk1ZjQsJDEyMmVmZjQxLCQwMjAxMDAzOAorCWRjLmwJJDBjMDEwMDE4LCQ2NzAwMDAwYywkMGMwMTAwMjAsJDY3MDAwMDYwCisJZGMubAkkNGU3NTEyMmUsJGZmNDEwMjQxLCQwMDA3MzIzYiwkMTIwNjRlZmIKKwlkYy5sCSQxMDAyMDAxMCwkMDAxNjAwMWMsJDAwMjAwMDI0LCQwMDI4MDAyYworCWRjLmwJJDAwMzA5MWFlLCRmZmE0NGU3NSwkOTFhZWZmYTgsJDRlNzU5NWMwCisJZGMubAkkNGU3NTk3YzAsJDRlNzU5OWMwLCQ0ZTc1OWJjMCwkNGU3NTkxOTYKKwlkYy5sCSQ0ZTc1MGMyZSwkMDAzMDAwMGEsJDY2MTIwODJlLCQwMDA1MDAwNAorCWRjLmwJJDY2MGE0ZTdhLCQ4ODAwOTFjMCwkNGU3Yjg4MDAsJDRlNzU0NDgwCisJZGMubAkkNjBhMDUxZmMsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvUkVBRE1FLVNSQyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvUkVBRE1FLVNSQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmU1Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9SRUFETUUtU1JDCkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgaXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGZyb20gTW90b3JvbGEgZm9yIHRoZSA2ODA2MCBwcm9jZXNzb3IKK3N1cHBvcnQgY29kZSwgcHJvdmlkaW5nIGVtdWxhdGlvbiBmb3IgcmFyZWx5IHVzZWQgbTY4ayBpbnN0cnVjdGlvbnMKK25vdCBpbXBsZW1lbnRlZCBpbiB0aGUgNjgwNjAgc2lsaWNvbi4KKworVGhlIGNvZGUgcHJvdmlkZWQgaGVyZSB3aWxsIG5vdCBhc3NlbWJsZSBvdXQgb2YgdGhlIGJveCB1c2luZyB0aGUgR05VCithc3NlbWJsZXIsIGhvd2V2ZXIgaXQgaXMgYmVpbmcgaW5jbHVkZWQgaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworWW91IGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYXNzZW1ibGUgdGhlc2UgZmlsZXMgaW4gb3JkZXIgdG8gY29tcGlsZSBhCit3b3JraW4gbTY4ayBrZXJuZWwsIHRoZSBwcmVjb21waWxlZCAuc2EgZmlsZXMgaW4gYXJjaC9tNjhrL2lmcHNwMDYwCithcmUgc3VmZmljaWVudCBhbmQgd2VyZSBnZW5lcmF0ZWQgZnJvbSB0aGVzZSBzb3VyY2UgZmlsZXMgYnkKK01vdG9yb2xhLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcGxzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcGxzcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjc5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2ZwbHNwLlMKQEAgLTAsMCArMSwxMDk4MCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyBsZnB0b3AuczoKKyMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MElMU1AgcGFja2FnZQorIyBhbmQgY29udGFpbnMgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWNrYWdlLiBUaGUgdXNlciwgaW4KKyMgZWZmZWN0LCBicmFuY2hlcyB0byBvbmUgb2YgdGhlIGJyYW5jaCB0YWJsZSBlbnRyaWVzIGxvY2F0ZWQgaGVyZS4KKyMKKworCWJyYS5sCV9mYWNvc3NfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhY29zZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFjb3N4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zhc2luc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFzaW5kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYXNpbnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmF0YW5zXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYXRhbmRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhdGFueF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mYXRhbmhzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYXRhbmhkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYXRhbmh4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zjb3NzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mY29zZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmNvc3hfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmNvc2hzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mY29zaGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zjb3NoeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mZXRveHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZldG94ZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmV0b3h4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZldG94bTFzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZXRveG0xZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmV0b3htMXhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmdldGV4cHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZnZXRleHBkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZ2V0ZXhweF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mZ2V0bWFuc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmdldG1hbmRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZnZXRtYW54XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zsb2cxMHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2cxMGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2cxMHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmxvZzJzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nMmRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2cyeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mbG9nbnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2duZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmxvZ254XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zsb2ducDFzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nbnAxZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmxvZ25wMXhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZm1vZHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Ztb2RkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbW9keF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mcmVtc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnJlbWRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZyZW14XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZzY2FsZXNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzY2FsZWRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzY2FsZXhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnNpbnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzaW5kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2lueF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mc2luY29zc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNpbmNvc2RfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzaW5jb3N4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZzaW5oc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNpbmhkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2luaHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnRhbnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Z0YW5kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdGFueF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mdGFuaHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Z0YW5oZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnRhbmh4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Z0ZW50b3hzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdGVudG94ZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnRlbnRveHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnR3b3RveHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Z0d290b3hkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdHdvdG94eF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mYWJzc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFic2RfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhYnN4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZhZGRzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYWRkZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFkZHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmRpdnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZkaXZkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZGl2eF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9maW50c18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmludGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZpbnR4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZpbnRyenNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZpbnRyemRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZpbnRyenhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZm11bHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZtdWxkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbXVseF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mbmVnc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZm5lZ2RfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZuZWd4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZzcXJ0c18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNxcnRkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc3FydHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnN1YnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzdWJkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc3VieF8KKwlzaG9ydAkweDAwMDAKKworIyBsZWF2ZSByb29tIGZvciBmdXR1cmUgcG9zc2libGUgYWRkaXRpb25zCisJYWxpZ24JMHg0MDAKKworIworIyBUaGlzIGZpbGUgY29udGFpbnMgYSBzZXQgb2YgZGVmaW5lIHN0YXRlbWVudHMgZm9yIGNvbnN0YW50cworIyBpbiBvcmRlciB0byBwcm9tb3RlIHJlYWRhYmlsaXR5IHdpdGhpbiB0aGUgY29yZWNvZGUgaXRzZWxmLgorIworCitzZXQgTE9DQUxfU0laRSwJCTE5MgkJCSMgc3RhY2sgZnJhbWUgc2l6ZShieXRlcykKK3NldCBMViwJCQktTE9DQUxfU0laRQkJIyBzdGFjayBvZmZzZXQKKworc2V0IEVYQ19TUiwJCTB4NAkJCSMgc3RhY2sgc3RhdHVzIHJlZ2lzdGVyCitzZXQgRVhDX1BDLAkJMHg2CQkJIyBzdGFjayBwYworc2V0IEVYQ19WT0ZGLAkJMHhhCQkJIyBzdGFja2VkIHZlY3RvciBvZmZzZXQKK3NldCBFWENfRUEsCQkweGMJCQkjIHN0YWNrZWQgPGVhPgorCitzZXQgRVhDX0ZQLAkJMHgwCQkJIyBmcmFtZSBwb2ludGVyCisKK3NldCBFWENfQVJFR1MsCQktNjgJCQkjIG9mZnNldCBvZiBhbGwgYWRkcmVzcyByZWdzCitzZXQgRVhDX0RSRUdTLAkJLTEwMAkJCSMgb2Zmc2V0IG9mIGFsbCBkYXRhIHJlZ3MKK3NldCBFWENfRlBSRUdTLAkJLTM2CQkJIyBvZmZzZXQgb2YgYWxsIGZwIHJlZ3MKKworc2V0IEVYQ19BNywJCUVYQ19BUkVHUysoNyo0KQkJIyBvZmZzZXQgb2Ygc2F2ZWQgYTcKK3NldCBPTERfQTcsCQlFWENfQVJFR1MrKDYqNCkJCSMgZXh0cmEgY29weSBvZiBzYXZlZCBhNworc2V0IEVYQ19BNiwJCUVYQ19BUkVHUysoNio0KQkJIyBvZmZzZXQgb2Ygc2F2ZWQgYTYKK3NldCBFWENfQTUsCQlFWENfQVJFR1MrKDUqNCkKK3NldCBFWENfQTQsCQlFWENfQVJFR1MrKDQqNCkKK3NldCBFWENfQTMsCQlFWENfQVJFR1MrKDMqNCkKK3NldCBFWENfQTIsCQlFWENfQVJFR1MrKDIqNCkKK3NldCBFWENfQTEsCQlFWENfQVJFR1MrKDEqNCkKK3NldCBFWENfQTAsCQlFWENfQVJFR1MrKDAqNCkKK3NldCBFWENfRDcsCQlFWENfRFJFR1MrKDcqNCkKK3NldCBFWENfRDYsCQlFWENfRFJFR1MrKDYqNCkKK3NldCBFWENfRDUsCQlFWENfRFJFR1MrKDUqNCkKK3NldCBFWENfRDQsCQlFWENfRFJFR1MrKDQqNCkKK3NldCBFWENfRDMsCQlFWENfRFJFR1MrKDMqNCkKK3NldCBFWENfRDIsCQlFWENfRFJFR1MrKDIqNCkKK3NldCBFWENfRDEsCQlFWENfRFJFR1MrKDEqNCkKK3NldCBFWENfRDAsCQlFWENfRFJFR1MrKDAqNCkKKworc2V0IEVYQ19GUDAsCQlFWENfRlBSRUdTKygwKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDAKK3NldCBFWENfRlAxLAkJRVhDX0ZQUkVHUysoMSoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAxCitzZXQgRVhDX0ZQMiwJCUVYQ19GUFJFR1MrKDIqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMiAobm90IHVzZWQpCisKK3NldCBGUF9TQ1IxLAkJTFYrODAJCQkjIGZwIHNjcmF0Y2ggMQorc2V0IEZQX1NDUjFfRVgsCQlGUF9TQ1IxKzAKK3NldCBGUF9TQ1IxX1NHTiwJRlBfU0NSMSsyCitzZXQgRlBfU0NSMV9ISSwJCUZQX1NDUjErNAorc2V0IEZQX1NDUjFfTE8sCQlGUF9TQ1IxKzgKKworc2V0IEZQX1NDUjAsCQlMVis2OAkJCSMgZnAgc2NyYXRjaCAwCitzZXQgRlBfU0NSMF9FWCwJCUZQX1NDUjArMAorc2V0IEZQX1NDUjBfU0dOLAlGUF9TQ1IwKzIKK3NldCBGUF9TQ1IwX0hJLAkJRlBfU0NSMCs0CitzZXQgRlBfU0NSMF9MTywJCUZQX1NDUjArOAorCitzZXQgRlBfRFNULAkJTFYrNTYJCQkjIGZwIGRlc3RpbmF0aW9uIG9wZXJhbmQKK3NldCBGUF9EU1RfRVgsCQlGUF9EU1QrMAorc2V0IEZQX0RTVF9TR04sCQlGUF9EU1QrMgorc2V0IEZQX0RTVF9ISSwJCUZQX0RTVCs0CitzZXQgRlBfRFNUX0xPLAkJRlBfRFNUKzgKKworc2V0IEZQX1NSQywJCUxWKzQ0CQkJIyBmcCBzb3VyY2Ugb3BlcmFuZAorc2V0IEZQX1NSQ19FWCwJCUZQX1NSQyswCitzZXQgRlBfU1JDX1NHTiwJCUZQX1NSQysyCitzZXQgRlBfU1JDX0hJLAkJRlBfU1JDKzQKK3NldCBGUF9TUkNfTE8sCQlGUF9TUkMrOAorCitzZXQgVVNFUl9GUElBUiwJCUxWKzQwCQkJIyBGUCBpbnN0ciBhZGRyZXNzIHJlZ2lzdGVyCisKK3NldCBVU0VSX0ZQU1IsCQlMViszNgkJCSMgRlAgc3RhdHVzIHJlZ2lzdGVyCitzZXQgRlBTUl9DQywJCVVTRVJfRlBTUiswCQkjIEZQU1IgY29uZGl0aW9uIGNvZGVzCitzZXQgRlBTUl9RQllURSwJCVVTRVJfRlBTUisxCQkjIEZQU1IgcW91dGllbnQgYnl0ZQorc2V0IEZQU1JfRVhDRVBULAlVU0VSX0ZQU1IrMgkJIyBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgYnl0ZQorc2V0IEZQU1JfQUVYQ0VQVCwJVVNFUl9GUFNSKzMJCSMgRlBTUiBhY2NydWVkIGV4Y2VwdGlvbiBieXRlCisKK3NldCBVU0VSX0ZQQ1IsCQlMViszMgkJCSMgRlAgY29udHJvbCByZWdpc3Rlcgorc2V0IEZQQ1JfRU5BQkxFLAlVU0VSX0ZQQ1IrMgkJIyBGUENSIGV4Y2VwdGlvbiBlbmFibGUKK3NldCBGUENSX01PREUsCQlVU0VSX0ZQQ1IrMwkJIyBGUENSIHJvdW5kaW5nIG1vZGUgY29udHJvbAorCitzZXQgTF9TQ1IzLAkJTFYrMjgJCQkjIGludGVnZXIgc2NyYXRjaCAzCitzZXQgTF9TQ1IyLAkJTFYrMjQJCQkjIGludGVnZXIgc2NyYXRjaCAyCitzZXQgTF9TQ1IxLAkJTFYrMjAJCQkjIGludGVnZXIgc2NyYXRjaCAxCisKK3NldCBTVE9SRV9GTEcsCQlMVisxOQkJCSMgZmxhZzogb3BlcmFuZCBzdG9yZSAoaWUuIG5vdCBmY21wL2Z0c3QpCisKK3NldCBFWENfVEVNUDIsCQlMVisyNAkJCSMgdGVtcG9yYXJ5IHNwYWNlCitzZXQgRVhDX1RFTVAsCQlMVisxNgkJCSMgdGVtcG9yYXJ5IHNwYWNlCisKK3NldCBEVEFHLAkJTFYrMTUJCQkjIGRlc3RpbmF0aW9uIG9wZXJhbmQgdHlwZQorc2V0IFNUQUcsCQlMVisxNAkJCSMgc291cmNlIG9wZXJhbmQgdHlwZQorCitzZXQgU1BDT05EX0ZMRywJCUxWKzEwCQkJIyBmbGFnOiBzcGVjaWFsIGNhc2UgKHNlZSBiZWxvdykKKworc2V0IEVYQ19DQywJCUxWKzgJCQkjIHNhdmVkIGNvbmRpdGlvbiBjb2Rlcworc2V0IEVYQ19FWFRXUFRSLAlMVis0CQkJIyBzYXZlZCBjdXJyZW50IFBDIChhY3RpdmUpCitzZXQgRVhDX0VYVFdPUkQsCUxWKzIJCQkjIHNhdmVkIGV4dGVuc2lvbiB3b3JkCitzZXQgRVhDX0NNRFJFRywJCUxWKzIJCQkjIHNhdmVkIGV4dGVuc2lvbiB3b3JkCitzZXQgRVhDX09QV09SRCwJCUxWKzAJCQkjIHNhdmVkIG9wZXJhdGlvbiB3b3JkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSGVscGZ1bCBtYWNyb3MKKworc2V0IEZURU1QLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBGVEVNUF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IEZURU1QX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBGVEVNUF9ISSwJCTQKK3NldCBGVEVNUF9MTywJCTgKK3NldCBGVEVNUF9HUlMsCQkxMgorCitzZXQgTE9DQUwsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IExPQ0FMX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgTE9DQUxfU0dOLAkJMgkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5Lgorc2V0IExPQ0FMX0hJLAkJNAorc2V0IExPQ0FMX0xPLAkJOAorc2V0IExPQ0FMX0dSUywJCTEyCisKK3NldCBEU1QsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IERTVF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IERTVF9ISSwJCTQJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBEU1RfTE8sCQk4CisKK3NldCBTUkMsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IFNSQ19FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IFNSQ19ISSwJCTQJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBTUkNfTE8sCQk4CisKK3NldCBTR0xfTE8sCQkweDNmODEJCQkjIG1pbiBzZ2wgcHJlYyBleHBvbmVudAorc2V0IFNHTF9ISSwJCTB4NDA3ZQkJCSMgbWF4IHNnbCBwcmVjIGV4cG9uZW50CitzZXQgREJMX0xPLAkJMHgzYzAxCQkJIyBtaW4gZGJsIHByZWMgZXhwb25lbnQKK3NldCBEQkxfSEksCQkweDQzZmUJCQkjIG1heCBkYmwgcHJlYyBleHBvbmVudAorc2V0IEVYVF9MTywJCTB4MAkJCSMgbWluIGV4dCBwcmVjIGV4cG9uZW50CitzZXQgRVhUX0hJLAkJMHg3ZmZlCQkJIyBtYXggZXh0IHByZWMgZXhwb25lbnQKKworc2V0IEVYVF9CSUFTLAkJMHgzZmZmCQkJIyBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworc2V0IFNHTF9CSUFTLAkJMHgwMDdmCQkJIyBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKK3NldCBEQkxfQklBUywJCTB4MDNmZgkJCSMgZG91YmxlIHByZWNpc2lvbiBiaWFzCisKK3NldCBOT1JNLAkJMHgwMAkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBaRVJPLAkJMHgwMQkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBJTkYsCQkweDAyCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFFOQU4sCQkweDAzCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IERFTk9STSwJCTB4MDQJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgU05BTiwJCTB4MDUJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgVU5OT1JNLAkJMHgwNgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKKworIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IvRlBDUiBiaXRzICMKKyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IG5lZ19iaXQsCQkweDMJCQkjIG5lZ2F0aXZlIHJlc3VsdAorc2V0IHpfYml0LAkJMHgyCQkJIyB6ZXJvIHJlc3VsdAorc2V0IGluZl9iaXQsCQkweDEJCQkjIGluZmluaXRlIHJlc3VsdAorc2V0IG5hbl9iaXQsCQkweDAJCQkjIE5BTiByZXN1bHQKKworc2V0IHFfc25fYml0LAkJMHg3CQkJIyBzaWduIGJpdCBvZiBxdW90aWVudCBieXRlCisKK3NldCBic3VuX2JpdCwJCTcJCQkjIGJyYW5jaCBvbiB1bm9yZGVyZWQKK3NldCBzbmFuX2JpdCwJCTYJCQkjIHNpZ25hbGxpbmcgTkFOCitzZXQgb3BlcnJfYml0LAkJNQkJCSMgb3BlcmFuZCBlcnJvcgorc2V0IG92ZmxfYml0LAkJNAkJCSMgb3ZlcmZsb3cKK3NldCB1bmZsX2JpdCwJCTMJCQkjIHVuZGVyZmxvdworc2V0IGR6X2JpdCwJCTIJCQkjIGRpdmlkZSBieSB6ZXJvCitzZXQgaW5leDJfYml0LAkJMQkJCSMgaW5leGFjdCByZXN1bHQgMgorc2V0IGluZXgxX2JpdCwJCTAJCQkjIGluZXhhY3QgcmVzdWx0IDEKKworc2V0IGFpb3BfYml0LAkJNwkJCSMgYWNjcnVlZCBpbmV4YWN0IG9wZXJhdGlvbiBiaXQKK3NldCBhb3ZmbF9iaXQsCQk2CQkJIyBhY2NydWVkIG92ZXJmbG93IGJpdAorc2V0IGF1bmZsX2JpdCwJCTUJCQkjIGFjY3J1ZWQgdW5kZXJmbG93IGJpdAorc2V0IGFkel9iaXQsCQk0CQkJIyBhY2NydWVkIGR6IGJpdAorc2V0IGFpbmV4X2JpdCwJCTMJCQkjIGFjY3J1ZWQgaW5leGFjdCBiaXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRlBTUiBpbmRpdmlkdWFsIGJpdCBtYXNrcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IG5lZ19tYXNrLAkJMHgwODAwMDAwMAkJIyBuZWdhdGl2ZSBiaXQgbWFzayAobHcpCitzZXQgaW5mX21hc2ssCQkweDAyMDAwMDAwCQkjIGluZmluaXR5IGJpdCBtYXNrIChsdykKK3NldCB6X21hc2ssCQkweDA0MDAwMDAwCQkjIHplcm8gYml0IG1hc2sgKGx3KQorc2V0IG5hbl9tYXNrLAkJMHgwMTAwMDAwMAkJIyBuYW4gYml0IG1hc2sgKGx3KQorCitzZXQgbmVnX2JtYXNrLAkJMHgwOAkJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGJ5dGUpCitzZXQgaW5mX2JtYXNrLAkJMHgwMgkJCSMgaW5maW5pdHkgYml0IG1hc2sgKGJ5dGUpCitzZXQgel9ibWFzaywJCTB4MDQJCQkjIHplcm8gYml0IG1hc2sgKGJ5dGUpCitzZXQgbmFuX2JtYXNrLAkJMHgwMQkJCSMgbmFuIGJpdCBtYXNrIChieXRlKQorCitzZXQgYnN1bl9tYXNrLAkJMHgwMDAwODAwMAkJIyBic3VuIGV4Y2VwdGlvbiBtYXNrCitzZXQgc25hbl9tYXNrLAkJMHgwMDAwNDAwMAkJIyBzbmFuIGV4Y2VwdGlvbiBtYXNrCitzZXQgb3BlcnJfbWFzaywJCTB4MDAwMDIwMDAJCSMgb3BlcnIgZXhjZXB0aW9uIG1hc2sKK3NldCBvdmZsX21hc2ssCQkweDAwMDAxMDAwCQkjIG92ZXJmbG93IGV4Y2VwdGlvbiBtYXNrCitzZXQgdW5mbF9tYXNrLAkJMHgwMDAwMDgwMAkJIyB1bmRlcmZsb3cgZXhjZXB0aW9uIG1hc2sKK3NldCBkel9tYXNrLAkJMHgwMDAwMDQwMAkJIyBkeiBleGNlcHRpb24gbWFzaworc2V0IGluZXgyX21hc2ssCQkweDAwMDAwMjAwCQkjIGluZXgyIGV4Y2VwdGlvbiBtYXNrCitzZXQgaW5leDFfbWFzaywJCTB4MDAwMDAxMDAJCSMgaW5leDEgZXhjZXB0aW9uIG1hc2sKKworc2V0IGFpb3BfbWFzaywJCTB4MDAwMDAwODAJCSMgYWNjcnVlZCBpbGxlZ2FsIG9wZXJhdGlvbgorc2V0IGFvdmZsX21hc2ssCQkweDAwMDAwMDQwCQkjIGFjY3J1ZWQgb3ZlcmZsb3cKK3NldCBhdW5mbF9tYXNrLAkJMHgwMDAwMDAyMAkJIyBhY2NydWVkIHVuZGVyZmxvdworc2V0IGFkel9tYXNrLAkJMHgwMDAwMDAxMAkJIyBhY2NydWVkIGRpdmlkZSBieSB6ZXJvCitzZXQgYWluZXhfbWFzaywJCTB4MDAwMDAwMDgJCSMgYWNjcnVlZCBpbmV4YWN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IgY29tYmluYXRpb25zIHVzZWQgaW4gdGhlIEZQU1AgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBkemluZl9tYXNrLAkJaW5mX21hc2srZHpfbWFzaythZHpfbWFzaworc2V0IG9wbmFuX21hc2ssCQluYW5fbWFzaytvcGVycl9tYXNrK2Fpb3BfbWFzaworc2V0IG56aV9tYXNrLAkJMHgwMWZmZmZmZgkJI2NsZWFycyBOLCBaLCBhbmQgSQorc2V0IHVuZmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKK3NldCB1bmYyaW54X21hc2ssCXVuZmxfbWFzaytpbmV4Ml9tYXNrK2FpbmV4X21hc2sKK3NldCBvdmZpbnhfbWFzaywJb3ZmbF9tYXNrK2luZXgyX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCitzZXQgaW54MWFfbWFzaywJCWluZXgxX21hc2srYWluZXhfbWFzaworc2V0IGlueDJhX21hc2ssCQlpbmV4Ml9tYXNrK2FpbmV4X21hc2sKK3NldCBzbmFuaW9wX21hc2ssCW5hbl9tYXNrK3NuYW5fbWFzaythaW9wX21hc2sKK3NldCBzbmFuaW9wMl9tYXNrLAlzbmFuX21hc2srYWlvcF9tYXNrCitzZXQgbmFuaW9wX21hc2ssCW5hbl9tYXNrK2Fpb3BfbWFzaworc2V0IG5lZ2luZl9tYXNrLAluZWdfbWFzaytpbmZfbWFzaworc2V0IGluZmFpb3BfbWFzaywJaW5mX21hc2srYWlvcF9tYXNrCitzZXQgbmVnel9tYXNrLAkJbmVnX21hc2srel9tYXNrCitzZXQgb3Bhb3BfbWFzaywJCW9wZXJyX21hc2srYWlvcF9tYXNrCitzZXQgdW5mbF9pbnhfbWFzaywJdW5mbF9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzaworc2V0IG92ZmxfaW54X21hc2ssCW92ZmxfbWFzaythb3ZmbF9tYXNrK2FpbmV4X21hc2sKKworIyMjIyMjIyMjCisjIG1pc2MuICMKKyMjIyMjIyMjIworc2V0IHJuZF9zdGt5X2JpdCwJMjkJCQkjIHN0a3kgYml0IHBvcyBpbiBsb25nd29yZAorCitzZXQgc2lnbl9iaXQsCQkweDcJCQkjIHNpZ24gYml0CitzZXQgc2lnbmFuX2JpdCwJCTB4NgkJCSMgc2lnbmFsbGluZyBuYW4gYml0CisKK3NldCBzZ2xfdGhyZXNoLAkJMHgzZjgxCQkJIyBtaW5pbXVtIHNnbCBleHBvbmVudAorc2V0IGRibF90aHJlc2gsCQkweDNjMDEJCQkjIG1pbmltdW0gZGJsIGV4cG9uZW50CisKK3NldCB4X21vZGUsCQkweDAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IHNfbW9kZSwJCTB4NAkJCSMgc2luZ2xlIHByZWNpc2lvbgorc2V0IGRfbW9kZSwJCTB4OAkJCSMgZG91YmxlIHByZWNpc2lvbgorCitzZXQgcm5fbW9kZSwJCTB4MAkJCSMgcm91bmQtdG8tbmVhcmVzdAorc2V0IHJ6X21vZGUsCQkweDEJCQkjIHJvdW5kLXRvLXplcm8KK3NldCBybV9tb2RlLAkJMHgyCQkJIyByb3VuZC10cC1taW51cy1pbmZpbml0eQorc2V0IHJwX21vZGUsCQkweDMJCQkjIHJvdW5kLXRvLXBsdXMtaW5maW5pdHkKKworc2V0IG1hbnRpc3NhbGVuLAk2NAkJCSMgbGVuZ3RoIG9mIG1hbnRpc3NhIGluIGJpdHMKKworc2V0IEJZVEUsCQkxCQkJIyBsZW4oYnl0ZSkgPT0gMSBieXRlCitzZXQgV09SRCwJCTIJCQkjIGxlbih3b3JkKSA9PSAyIGJ5dGVzCitzZXQgTE9ORywJCTQJCQkjIGxlbihsb25nd29yZCkgPT0gMiBieXRlcworCitzZXQgQlNVTl9WRUMsCQkweGMwCQkJIyBic3VuICAgIHZlY3RvciBvZmZzZXQKK3NldCBJTkVYX1ZFQywJCTB4YzQJCQkjIGluZXhhY3QgdmVjdG9yIG9mZnNldAorc2V0IERaX1ZFQywJCTB4YzgJCQkjIGR6ICAgICAgdmVjdG9yIG9mZnNldAorc2V0IFVORkxfVkVDLAkJMHhjYwkJCSMgdW5mbCAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgT1BFUlJfVkVDLAkJMHhkMAkJCSMgb3BlcnIgICB2ZWN0b3Igb2Zmc2V0CitzZXQgT1ZGTF9WRUMsCQkweGQ0CQkJIyBvdmZsICAgIHZlY3RvciBvZmZzZXQKK3NldCBTTkFOX1ZFQywJCTB4ZDgJCQkjIHNuYW4gICAgdmVjdG9yIG9mZnNldAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1BlY2lhbCBDT05EaXRpb24gRkxhR3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgZnRyYXBjY19mbGcsCTB4MDEJCQkjIGZsYWcgYml0OiBmdHJhcGNjIGV4Y2VwdGlvbgorc2V0IGZic3VuX2ZsZywJCTB4MDIJCQkjIGZsYWcgYml0OiBic3VuIGV4Y2VwdGlvbgorc2V0IG1pYTdfZmxnLAkJMHgwNAkJCSMgZmxhZyBiaXQ6IChhNykrIDxlYT4KK3NldCBtZGE3X2ZsZywJCTB4MDgJCQkjIGZsYWcgYml0OiAtKGE3KSA8ZWE+CitzZXQgZm1vdm1fZmxnLAkJMHg0MAkJCSMgZmxhZyBiaXQ6IGZtb3ZtIGluc3RydWN0aW9uCitzZXQgaW1tZWRfZmxnLAkJMHg4MAkJCSMgZmxhZyBiaXQ6ICY8ZGF0YT4gPGVhPgorCitzZXQgZnRyYXBjY19iaXQsCTB4MAorc2V0IGZic3VuX2JpdCwJCTB4MQorc2V0IG1pYTdfYml0LAkJMHgyCitzZXQgbWRhN19iaXQsCQkweDMKK3NldCBpbW1lZF9iaXQsCQkweDcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUUkFOU0NFTkRFTlRBTCAiTEFTVC1PUCIgRkxBR1MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IEZNVUxfT1AsCQkweDAJCQkjIGZtdWwgaW5zdHIgcGVyZm9ybWVkIGxhc3QKK3NldCBGRElWX09QLAkJMHgxCQkJIyBmZGl2IHBlcmZvcm1lZCBsYXN0CitzZXQgRkFERF9PUCwJCTB4MgkJCSMgZmFkZCBwZXJmb3JtZWQgbGFzdAorc2V0IEZNT1ZfT1AsCQkweDMJCQkjIGZtb3YgcGVyZm9ybWVkIGxhc3QKKworIyMjIyMjIyMjIyMjIworIyBDT05TVEFOVFMgIworIyMjIyMjIyMjIyMjIworVDE6CWxvbmcJCTB4NDBDNjJEMzgsMHhEM0Q2NDYzNAkjIDE2MzgxIExPRzIgTEVBRAorVDI6CWxvbmcJCTB4M0Q2RjkwQUUsMHhCMUU3NUNDNwkjIDE2MzgxIExPRzIgVFJBSUwKKworUEk6CWxvbmcJCTB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCisKK1RXT0JZUEk6CisJbG9uZwkJMHgzRkU0NUYzMCwweDZEQzlDODgzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnNpbnNfCitfZnNpbnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wwXzJzCisJYnNyLmwJCXNzaW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMF82cworX0wwXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDBfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZzCitfTDBfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wwXzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZzCitfTDBfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMF81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDBfNnMKK19MMF81czoKKwlic3IubAkJc3NpbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMF82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzaW5kXworX2ZzaW5kXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wwXzJkCisJYnNyLmwJCXNzaW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMF82ZAorX0wwXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDBfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZkCitfTDBfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wwXzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZkCitfTDBfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMF81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDBfNmQKK19MMF81ZDoKKwlic3IubAkJc3NpbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMF82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzaW54XworX2ZzaW54XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wwXzJ4CisJYnNyLmwJCXNzaW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMF82eAorX0wwXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDBfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZ4CitfTDBfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wwXzR4CQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZ4CitfTDBfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMF81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDBfNngKK19MMF81eDoKKwlic3IubAkJc3NpbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMF82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zjb3NzXworX2Zjb3NzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMV8ycworCWJzci5sCQlzY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDFfNnMKK19MMV8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxXzNzCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZzCitfTDFfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxXzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZzCitfTDFfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDFfNnMKK19MMV81czoKKwlic3IubAkJc2Nvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zjb3NkXworX2Zjb3NkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxXzJkCisJYnNyLmwJCXNjb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMV82ZAorX0wxXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDFfM2QJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDFfNmQKK19MMV8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDFfNGQJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDFfNmQKK19MMV80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxXzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMV82ZAorX0wxXzVkOgorCWJzci5sCQlzY29zZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmNvc3hfCitfZmNvc3hfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDFfMngKKwlic3IubAkJc2NvcwkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxXzZ4CitfTDFfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMV8zeAkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMV82eAorX0wxXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMV80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMV82eAorX0wxXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDFfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZ4CitfTDFfNXg6CisJYnNyLmwJCXNjb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDFfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mc2luaHNfCitfZnNpbmhzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMl8ycworCWJzci5sCQlzc2luaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyXzZzCitfTDJfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMl8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDJfNnMKK19MMl8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDJfNHMJCQkjIG5vCisJYnNyLmwJCXNyY19pbmYJCQkjIHllcworCWJyYS5iCQlfTDJfNnMKK19MMl80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyXzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMl82cworX0wyXzVzOgorCWJzci5sCQlzc2luaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMl82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzaW5oZF8KK19mc2luaGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDJfMmQKKwlic3IubAkJc3NpbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMl82ZAorX0wyXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDJfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZkCitfTDJfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyXzRkCQkJIyBubworCWJzci5sCQlzcmNfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZkCitfTDJfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMl81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDJfNmQKK19MMl81ZDoKKwlic3IubAkJc3NpbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDJfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2luaHhfCitfZnNpbmh4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyXzJ4CisJYnNyLmwJCXNzaW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDJfNngKK19MMl8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyXzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMl82eAorX0wyXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMl80eAkJCSMgbm8KKwlic3IubAkJc3JjX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMl82eAorX0wyXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDJfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZ4CitfTDJfNXg6CisJYnNyLmwJCXNzaW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmxvZ25wMXNfCitfZmxvZ25wMXNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wzXzJzCisJYnNyLmwJCXNsb2ducDEJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MM182cworX0wzXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDNfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZzCitfTDNfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wzXzRzCQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MM182cworX0wzXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDNfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZzCitfTDNfNXM6CisJYnNyLmwJCXNsb2ducDFkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDNfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nbnAxZF8KK19mbG9nbnAxZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MM18yZAorCWJzci5sCQlzbG9nbnAxCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDNfNmQKK19MM18yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wzXzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MM182ZAorX0wzXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MM180ZAkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDNfNmQKK19MM180ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wzXzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MM182ZAorX0wzXzVkOgorCWJzci5sCQlzbG9nbnAxZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wzXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmxvZ25wMXhfCitfZmxvZ25wMXhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDNfMngKKwlic3IubAkJc2xvZ25wMQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wzXzZ4CitfTDNfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MM18zeAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDNfNngKK19MM18zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDNfNHgJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZ4CitfTDNfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MM181eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDNfNngKK19MM181eDoKKwlic3IubAkJc2xvZ25wMWQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MM182eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZldG94bTFzXworX2ZldG94bTFzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNF8ycworCWJzci5sCQlzZXRveG0xCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDRfNnMKK19MNF8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w0XzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNF82cworX0w0XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNF80cwkJCSMgbm8KKwlic3IubAkJc2V0b3htMWkJCQkjIHllcworCWJyYS5iCQlfTDRfNnMKK19MNF80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w0XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNF82cworX0w0XzVzOgorCWJzci5sCQlzZXRveG0xZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w0XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmV0b3htMWRfCitfZmV0b3htMWRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDRfMmQKKwlic3IubAkJc2V0b3htMQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w0XzZkCitfTDRfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNF8zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDRfNmQKK19MNF8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDRfNGQJCQkjIG5vCisJYnNyLmwJCXNldG94bTFpCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZkCitfTDRfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNF81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDRfNmQKK19MNF81ZDoKKwlic3IubAkJc2V0b3htMWQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNF82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZldG94bTF4XworX2ZldG94bTF4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w0XzJ4CisJYnNyLmwJCXNldG94bTEJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNF82eAorX0w0XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDRfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZ4CitfTDRfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w0XzR4CQkJIyBubworCWJzci5sCQlzZXRveG0xaQkJCSMgeWVzCisJYnJhLmIJCV9MNF82eAorX0w0XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDRfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZ4CitfTDRfNXg6CisJYnNyLmwJCXNldG94bTFkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDRfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mdGFuaHNfCitfZnRhbmhzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNV8ycworCWJzci5sCQlzdGFuaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w1XzZzCitfTDVfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNV8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDVfNnMKK19MNV8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDVfNHMJCQkjIG5vCisJYnNyLmwJCXNyY19vbmUJCQkjIHllcworCWJyYS5iCQlfTDVfNnMKK19MNV80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w1XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNV82cworX0w1XzVzOgorCWJzci5sCQlzdGFuaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0YW5oZF8KK19mdGFuaGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDVfMmQKKwlic3IubAkJc3RhbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNV82ZAorX0w1XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDVfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZkCitfTDVfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w1XzRkCQkJIyBubworCWJzci5sCQlzcmNfb25lCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZkCitfTDVfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDVfNmQKK19MNV81ZDoKKwlic3IubAkJc3RhbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDVfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGFuaHhfCitfZnRhbmh4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w1XzJ4CisJYnNyLmwJCXN0YW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDVfNngKK19MNV8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w1XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNV82eAorX0w1XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNV80eAkJCSMgbm8KKwlic3IubAkJc3JjX29uZQkJCSMgeWVzCisJYnJhLmIJCV9MNV82eAorX0w1XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDVfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZ4CitfTDVfNXg6CisJYnNyLmwJCXN0YW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w1XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmF0YW5zXworX2ZhdGFuc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDZfMnMKKwlic3IubAkJc2F0YW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNl82cworX0w2XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDZfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZzCitfTDZfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w2XzRzCQkJIyBubworCWJzci5sCQlzcGlfMgkJCSMgeWVzCisJYnJhLmIJCV9MNl82cworX0w2XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDZfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZzCitfTDZfNXM6CisJYnNyLmwJCXNhdGFuZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w2XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmF0YW5kXworX2ZhdGFuZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNl8yZAorCWJzci5sCQlzYXRhbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w2XzZkCitfTDZfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNl8zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDZfNmQKK19MNl8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDZfNGQJCQkjIG5vCisJYnNyLmwJCXNwaV8yCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZkCitfTDZfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNl81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDZfNmQKK19MNl81ZDoKKwlic3IubAkJc2F0YW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDZfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYXRhbnhfCitfZmF0YW54XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w2XzJ4CisJYnNyLmwJCXNhdGFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDZfNngKK19MNl8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w2XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNl82eAorX0w2XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNl80eAkJCSMgbm8KKwlic3IubAkJc3BpXzIJCQkjIHllcworCWJyYS5iCQlfTDZfNngKK19MNl80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w2XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNl82eAorX0w2XzV4OgorCWJzci5sCQlzYXRhbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNl82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zhc2luc18KK19mYXNpbnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w3XzJzCisJYnNyLmwJCXNhc2luCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDdfNnMKK19MN18yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w3XzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MN182cworX0w3XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MN180cwkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MN182cworX0w3XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDdfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZzCitfTDdfNXM6CisJYnNyLmwJCXNhc2luZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w3XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmFzaW5kXworX2Zhc2luZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MN18yZAorCWJzci5sCQlzYXNpbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w3XzZkCitfTDdfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MN18zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDdfNmQKK19MN18zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDdfNGQJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDdfNmQKK19MN180ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w3XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MN182ZAorX0w3XzVkOgorCWJzci5sCQlzYXNpbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MN182ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zhc2lueF8KK19mYXNpbnhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDdfMngKKwlic3IubAkJc2FzaW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MN182eAorX0w3XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDdfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZ4CitfTDdfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w3XzR4CQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZ4CitfTDdfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MN181eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDdfNngKK19MN181eDoKKwlic3IubAkJc2FzaW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDdfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mYXRhbmhzXworX2ZhdGFuaHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w4XzJzCisJYnNyLmwJCXNhdGFuaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w4XzZzCitfTDhfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MOF8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDhfNnMKK19MOF8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDhfNHMJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDhfNnMKK19MOF80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w4XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MOF82cworX0w4XzVzOgorCWJzci5sCQlzYXRhbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDhfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYXRhbmhkXworX2ZhdGFuaGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDhfMmQKKwlic3IubAkJc2F0YW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDhfNmQKK19MOF8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w4XzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MOF82ZAorX0w4XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MOF80ZAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MOF82ZAorX0w4XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDhfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZkCitfTDhfNWQ6CisJYnNyLmwJCXNhdGFuaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MOF82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZhdGFuaHhfCitfZmF0YW5oeF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MOF8yeAorCWJzci5sCQlzYXRhbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MOF82eAorX0w4XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDhfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZ4CitfTDhfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w4XzR4CQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZ4CitfTDhfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MOF81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDhfNngKK19MOF81eDoKKwlic3IubAkJc2F0YW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w4XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnRhbnNfCitfZnRhbnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w5XzJzCisJYnNyLmwJCXN0YW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MOV82cworX0w5XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDlfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZzCitfTDlfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w5XzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZzCitfTDlfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MOV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDlfNnMKK19MOV81czoKKwlic3IubAkJc3RhbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MOV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0YW5kXworX2Z0YW5kXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0w5XzJkCisJYnNyLmwJCXN0YW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MOV82ZAorX0w5XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDlfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZkCitfTDlfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w5XzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZkCitfTDlfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MOV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDlfNmQKK19MOV81ZDoKKwlic3IubAkJc3RhbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MOV82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0YW54XworX2Z0YW54XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w5XzJ4CisJYnNyLmwJCXN0YW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MOV82eAorX0w5XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDlfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZ4CitfTDlfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w5XzR4CQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZ4CitfTDlfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MOV81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDlfNngKK19MOV81eDoKKwlic3IubAkJc3RhbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MOV82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZldG94c18KK19mZXRveHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMF8ycworCWJzci5sCQlzZXRveAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxMF82cworX0wxMF8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxMF8zcwkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNnMKK19MMTBfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxMF80cwkJCSMgbm8KKwlic3IubAkJc3pyX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNnMKK19MMTBfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTBfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82cworX0wxMF81czoKKwlic3IubAkJc2V0b3hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDEwXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmV0b3hkXworX2ZldG94ZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTBfMmQKKwlic3IubAkJc2V0b3gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTBfNmQKK19MMTBfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTBfM2QJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDEwXzZkCitfTDEwXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTBfNGQJCQkjIG5vCisJYnNyLmwJCXN6cl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDEwXzZkCitfTDEwXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDEwXzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNmQKK19MMTBfNWQ6CisJYnNyLmwJCXNldG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMF82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZldG94eF8KK19mZXRveHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDEwXzJ4CisJYnNyLmwJCXNldG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDEwXzZ4CitfTDEwXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDEwXzN4CQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82eAorX0wxMF8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEwXzR4CQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82eAorX0wxMF80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMF81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEwXzZ4CitfTDEwXzV4OgorCWJzci5sCQlzZXRveGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTBfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mdHdvdG94c18KK19mdHdvdG94c186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDExXzJzCisJYnNyLmwJCXN0d290b3gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTFfNnMKK19MMTFfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTFfM3MJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDExXzZzCitfTDExXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTFfNHMJCQkjIG5vCisJYnNyLmwJCXN6cl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDExXzZzCitfTDExXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDExXzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTFfNnMKK19MMTFfNXM6CisJYnNyLmwJCXN0d290b3hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDExXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnR3b3RveGRfCitfZnR3b3RveGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDExXzJkCisJYnNyLmwJCXN0d290b3gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTFfNmQKK19MMTFfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTFfM2QJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDExXzZkCitfTDExXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTFfNGQJCQkjIG5vCisJYnNyLmwJCXN6cl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDExXzZkCitfTDExXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDExXzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTFfNmQKK19MMTFfNWQ6CisJYnNyLmwJCXN0d290b3hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDExXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnR3b3RveHhfCitfZnR3b3RveHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDExXzJ4CisJYnNyLmwJCXN0d290b3gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTFfNngKK19MMTFfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTFfM3gJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDExXzZ4CitfTDExXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTFfNHgJCQkjIG5vCisJYnNyLmwJCXN6cl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDExXzZ4CitfTDExXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDExXzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTFfNngKK19MMTFfNXg6CisJYnNyLmwJCXN0d290b3hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDExXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnRlbnRveHNfCitfZnRlbnRveHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMl8ycworCWJzci5sCQlzdGVudG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDEyXzZzCitfTDEyXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDEyXzNzCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82cworX0wxMl8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEyXzRzCQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82cworX0wxMl80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMl81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEyXzZzCitfTDEyXzVzOgorCWJzci5sCQlzdGVudG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMl82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0ZW50b3hkXworX2Z0ZW50b3hkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMl8yZAorCWJzci5sCQlzdGVudG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDEyXzZkCitfTDEyXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDEyXzNkCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82ZAorX0wxMl8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEyXzRkCQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82ZAorX0wxMl80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMl81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEyXzZkCitfTDEyXzVkOgorCWJzci5sCQlzdGVudG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMl82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0ZW50b3h4XworX2Z0ZW50b3h4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMl8yeAorCWJzci5sCQlzdGVudG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDEyXzZ4CitfTDEyXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDEyXzN4CQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82eAorX0wxMl8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEyXzR4CQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82eAorX0wxMl80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMl81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEyXzZ4CitfTDEyXzV4OgorCWJzci5sCQlzdGVudG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMl82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zsb2duc18KK19mbG9nbnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxM18ycworCWJzci5sCQlzbG9nbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxM182cworX0wxM18yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxM18zcwkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDEzXzZzCitfTDEzXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTNfNHMJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182cworX0wxM180czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxM181cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEzXzZzCitfTDEzXzVzOgorCWJzci5sCQlzbG9nbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTNfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nbmRfCitfZmxvZ25kXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxM18yZAorCWJzci5sCQlzbG9nbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxM182ZAorX0wxM18yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxM18zZAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDEzXzZkCitfTDEzXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTNfNGQJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182ZAorX0wxM180ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxM181ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEzXzZkCitfTDEzXzVkOgorCWJzci5sCQlzbG9nbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTNfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nbnhfCitfZmxvZ254XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxM18yeAorCWJzci5sCQlzbG9nbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxM182eAorX0wxM18yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxM18zeAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDEzXzZ4CitfTDEzXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTNfNHgJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182eAorX0wxM180eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxM181eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEzXzZ4CitfTDEzXzV4OgorCWJzci5sCQlzbG9nbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTNfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mbG9nMTBzXworX2Zsb2cxMHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNF8ycworCWJzci5sCQlzbG9nMTAJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTRfNnMKK19MMTRfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTRfM3MJCQkjIG5vCisJYnNyLmwJCXRfZHoyCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82cworX0wxNF8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE0XzRzCQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNnMKK19MMTRfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTRfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82cworX0wxNF81czoKKwlic3IubAkJc2xvZzEwZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNF82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zsb2cxMGRfCitfZmxvZzEwZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTRfMmQKKwlic3IubAkJc2xvZzEwCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE0XzZkCitfTDE0XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE0XzNkCQkJIyBubworCWJzci5sCQl0X2R6MgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNmQKK19MMTRfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNF80ZAkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDE0XzZkCitfTDE0XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE0XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNmQKK19MMTRfNWQ6CisJYnNyLmwJCXNsb2cxMGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTRfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nMTB4XworX2Zsb2cxMHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE0XzJ4CisJYnNyLmwJCXNsb2cxMAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNF82eAorX0wxNF8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNF8zeAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDE0XzZ4CitfTDE0XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTRfNHgJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82eAorX0wxNF80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNF81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE0XzZ4CitfTDE0XzV4OgorCWJzci5sCQlzbG9nMTBkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE0XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmxvZzJzXworX2Zsb2cyc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE1XzJzCisJYnNyLmwJCXNsb2cyCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE1XzZzCitfTDE1XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE1XzNzCQkJIyBubworCWJzci5sCQl0X2R6MgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNnMKK19MMTVfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNV80cwkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDE1XzZzCitfTDE1XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE1XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNnMKK19MMTVfNXM6CisJYnNyLmwJCXNsb2cyZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zsb2cyZF8KK19mbG9nMmRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE1XzJkCisJYnNyLmwJCXNsb2cyCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE1XzZkCitfTDE1XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE1XzNkCQkJIyBubworCWJzci5sCQl0X2R6MgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNmQKK19MMTVfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNV80ZAkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDE1XzZkCitfTDE1XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE1XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNmQKK19MMTVfNWQ6CisJYnNyLmwJCXNsb2cyZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNV82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zsb2cyeF8KK19mbG9nMnhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE1XzJ4CisJYnNyLmwJCXNsb2cyCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE1XzZ4CitfTDE1XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE1XzN4CQkJIyBubworCWJzci5sCQl0X2R6MgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNngKK19MMTVfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNV80eAkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDE1XzZ4CitfTDE1XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE1XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTVfNngKK19MMTVfNXg6CisJYnNyLmwJCXNsb2cyZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNV82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zjb3Noc18KK19mY29zaHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNl8ycworCWJzci5sCQlzY29zaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNl82cworX0wxNl8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNl8zcwkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNnMKK19MMTZfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNl80cwkJCSMgbm8KKwlic3IubAkJbGRfcGluZgkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNnMKK19MMTZfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTZfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82cworX0wxNl81czoKKwlic3IubAkJc2Nvc2hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE2XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmNvc2hkXworX2Zjb3NoZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTZfMmQKKwlic3IubAkJc2Nvc2gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTZfNmQKK19MMTZfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTZfM2QJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDE2XzZkCitfTDE2XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTZfNGQJCQkjIG5vCisJYnNyLmwJCWxkX3BpbmYJCQkjIHllcworCWJyYS5iCQlfTDE2XzZkCitfTDE2XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE2XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNmQKK19MMTZfNWQ6CisJYnNyLmwJCXNjb3NoZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNl82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zjb3NoeF8KK19mY29zaHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE2XzJ4CisJYnNyLmwJCXNjb3NoCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE2XzZ4CitfTDE2XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE2XzN4CQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82eAorX0wxNl8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE2XzR4CQkJIyBubworCWJzci5sCQlsZF9waW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82eAorX0wxNl80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNl81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE2XzZ4CitfTDE2XzV4OgorCWJzci5sCQlzY29zaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTZfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mYWNvc3NfCitfZmFjb3NzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTdfMnMKKwlic3IubAkJc2Fjb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTdfNnMKK19MMTdfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTdfM3MJCQkjIG5vCisJYnNyLmwJCWxkX3BwaTIJCQkjIHllcworCWJyYS5iCQlfTDE3XzZzCitfTDE3XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTdfNHMJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE3XzZzCitfTDE3XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE3XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNnMKK19MMTdfNXM6CisJYnNyLmwJCXNhY29zZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxN182czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZhY29zZF8KK19mYWNvc2RfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE3XzJkCisJYnNyLmwJCXNhY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE3XzZkCitfTDE3XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE3XzNkCQkJIyBubworCWJzci5sCQlsZF9wcGkyCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182ZAorX0wxN18zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE3XzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182ZAorX0wxN180ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxN181ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE3XzZkCitfTDE3XzVkOgorCWJzci5sCQlzYWNvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTdfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYWNvc3hfCitfZmFjb3N4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxN18yeAorCWJzci5sCQlzYWNvcwkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxN182eAorX0wxN18yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxN18zeAkJCSMgbm8KKwlic3IubAkJbGRfcHBpMgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNngKK19MMTdfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxN180eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNngKK19MMTdfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTdfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182eAorX0wxN181eDoKKwlic3IubAkJc2Fjb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE3XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmdldGV4cHNfCitfZmdldGV4cHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxOF8ycworCWJzci5sCQlzZ2V0ZXhwCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE4XzZzCitfTDE4XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE4XzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMThfNnMKK19MMThfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxOF80cwkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMThfNnMKK19MMThfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMThfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82cworX0wxOF81czoKKwlic3IubAkJc2dldGV4cGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMThfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mZ2V0ZXhwZF8KK19mZ2V0ZXhwZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMThfMmQKKwlic3IubAkJc2dldGV4cAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxOF82ZAorX0wxOF8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxOF8zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDE4XzZkCitfTDE4XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMThfNGQJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE4XzZkCitfTDE4XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE4XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMThfNmQKK19MMThfNWQ6CisJYnNyLmwJCXNnZXRleHBkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE4XzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmdldGV4cHhfCitfZmdldGV4cHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE4XzJ4CisJYnNyLmwJCXNnZXRleHAJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMThfNngKK19MMThfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMThfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82eAorX0wxOF8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE4XzR4CQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82eAorX0wxOF80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxOF81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE4XzZ4CitfTDE4XzV4OgorCWJzci5sCQlzZ2V0ZXhwZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxOF82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZnZXRtYW5zXworX2ZnZXRtYW5zXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTlfMnMKKwlic3IubAkJc2dldG1hbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxOV82cworX0wxOV8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxOV8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDE5XzZzCitfTDE5XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTlfNHMJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE5XzZzCitfTDE5XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE5XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNnMKK19MMTlfNXM6CisJYnNyLmwJCXNnZXRtYW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE5XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmdldG1hbmRfCitfZmdldG1hbmRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE5XzJkCisJYnNyLmwJCXNnZXRtYW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTlfNmQKK19MMTlfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTlfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82ZAorX0wxOV8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE5XzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82ZAorX0wxOV80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxOV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE5XzZkCitfTDE5XzVkOgorCWJzci5sCQlzZ2V0bWFuZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxOV82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZnZXRtYW54XworX2ZnZXRtYW54XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxOV8yeAorCWJzci5sCQlzZ2V0bWFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE5XzZ4CitfTDE5XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE5XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNngKK19MMTlfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxOV80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNngKK19MMTlfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTlfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82eAorX0wxOV81eDoKKwlic3IubAkJc2dldG1hbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTlfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mc2luY29zc18KK19mc2luY29zc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIwXzJzCisJYnNyLmwJCXNzaW5jb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjBfNnMKK19MMjBfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjBfM3MJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3N6CQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82cworX0wyMF8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIwXzRzCQkJIyBubworCWJzci5sCQlzc2luY29zaQkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNnMKK19MMjBfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjBfNXMJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82cworX0wyMF81czoKKwlic3IubAkJc3NpbmNvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjBfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweDAzLC0oJXNwKQkJIyBzdG9yZSBvZmYgZnAwL2ZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyBmcDAgbm93IGluIGZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg4MAkJIyBmcDEgbm93IGluIGZwMAorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnNpbmNvc2RfCitfZnNpbmNvc2RfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIwXzJkCisJYnNyLmwJCXNzaW5jb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjBfNmQKK19MMjBfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjBfM2QJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3N6CQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82ZAorX0wyMF8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIwXzRkCQkJIyBubworCWJzci5sCQlzc2luY29zaQkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNmQKK19MMjBfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjBfNWQJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82ZAorX0wyMF81ZDoKKwlic3IubAkJc3NpbmNvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjBfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweDAzLC0oJXNwKQkJIyBzdG9yZSBvZmYgZnAwL2ZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyBmcDAgbm93IGluIGZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg4MAkJIyBmcDEgbm93IGluIGZwMAorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnNpbmNvc3hfCitfZnNpbmNvc3hfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIwXzJ4CisJYnNyLmwJCXNzaW5jb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjBfNngKK19MMjBfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjBfM3gJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3N6CQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82eAorX0wyMF8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIwXzR4CQkJIyBubworCWJzci5sCQlzc2luY29zaQkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNngKK19MMjBfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjBfNXgJCQkjIG5vCisJYnNyLmwJCXNzaW5jb3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMF82eAorX0wyMF81eDoKKwlic3IubAkJc3NpbmNvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjBfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweDAzLC0oJXNwKQkJIyBzdG9yZSBvZmYgZnAwL2ZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyBmcDAgbm93IGluIGZwMQorCWZtb3ZtLngJCSglc3ApKywmMHg4MAkJIyBmcDEgbm93IGluIGZwMAorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRFlBRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mcmVtc18KK19mcmVtc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGRzdAorCWZtb3YueAkJJWZwMCxGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWZtb3YucwkJMHhjKCVhNiksJWZwMAkJIyBsb2FkIHNnbCBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMV8ycworCWJzci5sCQlzcmVtX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIxXzZzCitfTDIxXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIxXzNzCQkJIyBubworCWJzci5sCQlzcmVtX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82cworX0wyMV8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIxXzRzCQkJIyBubworCWJzci5sCQlzcmVtX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIxXzZzCitfTDIxXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIxXzVzCQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIxXzZzCitfTDIxXzVzOgorCWJzci5sCQlzcmVtX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIxXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnJlbWRfCitfZnJlbWRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBkc3QKKwlmbW92LngJCSVmcDAsRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlmbW92LmQJCTB4MTAoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIHNyYworCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIxXzJkCisJYnNyLmwJCXNyZW1fc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjFfNmQKK19MMjFfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjFfM2QJCQkjIG5vCisJYnNyLmwJCXNyZW1fc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIxXzZkCitfTDIxXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjFfNGQJCQkjIG5vCisJYnNyLmwJCXNyZW1fc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNmQKK19MMjFfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjFfNWQJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNmQKK19MMjFfNWQ6CisJYnNyLmwJCXNyZW1fc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjFfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mcmVteF8KK19mcmVteF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgZHN0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHgxNCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IHNyYworCW1vdi5sCQkweDE0KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4MTQrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjFfMngKKwlic3IubAkJc3JlbV9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyMV82eAorX0wyMV8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyMV8zeAkJCSMgbm8KKwlic3IubAkJc3JlbV9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNngKK19MMjFfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMV80eAkJCSMgbm8KKwlic3IubAkJc3JlbV9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82eAorX0wyMV80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyMV81eAkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82eAorX0wyMV81eDoKKwlic3IubAkJc3JlbV9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyMV82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERZQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZm1vZHNfCitfZm1vZHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBkc3QKKwlmbW92LngJCSVmcDAsRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlmbW92LnMJCTB4YyglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjJfMnMKKwlic3IubAkJc21vZF9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyMl82cworX0wyMl8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyMl8zcwkJCSMgbm8KKwlic3IubAkJc21vZF9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNnMKK19MMjJfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMl80cwkJCSMgbm8KKwlic3IubAkJc21vZF9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82cworX0wyMl80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyMl81cwkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82cworX0wyMl81czoKKwlic3IubAkJc21vZF9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyMl82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Ztb2RkXworX2Ztb2RkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgZHN0CisJZm1vdi54CQklZnAwLEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJZm1vdi5kCQkweDEwKCVhNiksJWZwMAkJIyBsb2FkIGRibCBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMl8yZAorCWJzci5sCQlzbW9kX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIyXzZkCitfTDIyXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIyXzNkCQkJIyBubworCWJzci5sCQlzbW9kX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82ZAorX0wyMl8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIyXzRkCQkJIyBubworCWJzci5sCQlzbW9kX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIyXzZkCitfTDIyXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIyXzVkCQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIyXzZkCitfTDIyXzVkOgorCWJzci5sCQlzbW9kX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIyXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZm1vZHhfCitfZm1vZHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGRzdAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4MTQrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBzcmMKKwltb3YubAkJMHgxNCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDE0KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIyXzJ4CisJYnNyLmwJCXNtb2Rfc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjJfNngKK19MMjJfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjJfM3gJCQkjIG5vCisJYnNyLmwJCXNtb2Rfc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIyXzZ4CitfTDIyXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjJfNHgJCQkjIG5vCisJYnNyLmwJCXNtb2Rfc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNngKK19MMjJfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjJfNXgJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNngKK19MMjJfNXg6CisJYnNyLmwJCXNtb2Rfc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjJfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEWUFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZzY2FsZXNfCitfZnNjYWxlc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGRzdAorCWZtb3YueAkJJWZwMCxGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWZtb3YucwkJMHhjKCVhNiksJWZwMAkJIyBsb2FkIHNnbCBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyM18ycworCWJzci5sCQlzc2NhbGVfc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjNfNnMKK19MMjNfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjNfM3MJCQkjIG5vCisJYnNyLmwJCXNzY2FsZV9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNnMKK19MMjNfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyM180cwkJCSMgbm8KKwlic3IubAkJc3NjYWxlX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIzXzZzCitfTDIzXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIzXzVzCQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIzXzZzCitfTDIzXzVzOgorCWJzci5sCQlzc2NhbGVfc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjNfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2NhbGVkXworX2ZzY2FsZWRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBkc3QKKwlmbW92LngJCSVmcDAsRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlmbW92LmQJCTB4MTAoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIHNyYworCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIzXzJkCisJYnNyLmwJCXNzY2FsZV9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyM182ZAorX0wyM18yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyM18zZAkJCSMgbm8KKwlic3IubAkJc3NjYWxlX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182ZAorX0wyM18zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIzXzRkCQkJIyBubworCWJzci5sCQlzc2NhbGVfc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNmQKK19MMjNfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjNfNWQJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNmQKK19MMjNfNWQ6CisJYnNyLmwJCXNzY2FsZV9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyM182ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzY2FsZXhfCitfZnNjYWxleF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgZHN0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHgxNCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IHNyYworCW1vdi5sCQkweDE0KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4MTQrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjNfMngKKwlic3IubAkJc3NjYWxlX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIzXzZ4CitfTDIzXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIzXzN4CQkJIyBubworCWJzci5sCQlzc2NhbGVfc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIzXzZ4CitfTDIzXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjNfNHgJCQkjIG5vCisJYnNyLmwJCXNzY2FsZV9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182eAorX0wyM180eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyM181eAkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182eAorX0wyM181eDoKKwlic3IubAkJc3NjYWxlX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIzXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3NpbigpOiAgICAgY29tcHV0ZXMgdGhlIHNpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzc2luZCgpOiAgICBjb21wdXRlcyB0aGUgc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc2NvcygpOiAgICAgY29tcHV0ZXMgdGhlIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHNjb3NkKCk6ICAgIGNvbXB1dGVzIHRoZSBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc3NpbmNvcygpOiAgY29tcHV0ZXMgdGhlIHNpbmUgYW5kIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzc2luY29zZCgpOiBjb21wdXRlcyB0aGUgc2luZSBhbmQgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHNpbihYKSBvciBjb3MoWCkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICBGb3Igc3NpbmNvcyhYKToJCQkJCQkJIworIwlmcDAgPSBzaW4oWCkJCQkJCQkJIworIwlmcDEgPSBjb3MoWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMSB1bHAgaW4gNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuCSMKKyMJd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlTSU4gYW5kIENPUzoJCQkJCQkJIworIwkxLiBJZiBTSU4gaXMgaW52b2tlZCwgc2V0IEFkak4gOj0gMDsgb3RoZXJ3aXNlLCBzZXQgQWRqTiA6PSAxLgkjCisjCQkJCQkJCQkJIworIwkyLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNy4JCQkjCisjCQkJCQkJCQkJIworIwkzLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAkjCisjCQlrID0gTiBtb2QgNCwgc28gaW4gcGFydGljdWxhciwgayA9IDAsMSwyLG9yIDMuCQkjCisjCQlPdmVyd3JpdGUgayBieSBrIDo9IGsgKyBBZGpOLgkJCQkjCisjCQkJCQkJCQkJIworIwk0LiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDYuCQkJCQkjCisjCQkJCQkJCQkJIworIwk1LiAoayBpcyBvZGQpIFNldCBqIDo9IChrLTEpLzIsIHNnbiA6PSAoLTEpKipqLgkJCSMKKyMJCVJldHVybiBzZ24qY29zKHIpIHdoZXJlIGNvcyhyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYW4JIworIwkJZXZlbiBwb2x5bm9taWFsIGluIHIsIDEgKyByKnIqKEIxK3MqKEIyKyAuLi4gKyBzKkI4KSksCSMKKyMJCXMgPSByKnIuCQkJCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNi4gKGsgaXMgZXZlbikgU2V0IGogOj0gay8yLCBzZ24gOj0gKC0xKSoqai4gUmV0dXJuIHNnbipzaW4ocikJIworIwkJd2hlcmUgc2luKHIpIGlzIGFwcHJveGltYXRlZCBieSBhbiBvZGQgcG9seW5vbWlhbCBpbiByCSMKKyMJCXIgKyByKnMqKEExK3MqKEEyKyAuLi4gKyBzKkE3KSksCXMgPSByKnIuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuIElmIHxYfCA+IDEsIGdvIHRvIDkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJOC4gKHxYfDwyKiooLTQwKSkgSWYgU0lOIGlzIGludm9rZWQsIHJldHVybiBYOwkJCSMKKyMJCW90aGVyd2lzZSByZXR1cm4gMS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTkuIE92ZXJ3cml0ZSBYIGJ5IFggOj0gWCByZW0gMlBpLiBOb3cgdGhhdCB8WHwgPD0gUGksCQkjCisjCQlnbyBiYWNrIHRvIDMuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU0lOQ09TOgkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNi4JCQkjCisjCQkJCQkJCQkJIworIwkyLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAkjCisjCQlrID0gTiBtb2QgNCwgc28gaW4gcGFydGljdWxhciwgayA9IDAsMSwyLG9yIDMuCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDUuCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAoayBpcyBvZGQpIFNldCBqMSA6PSAoay0xKS8yLCBqMiA6PSBqMSAoRU9SKSAoayBtb2QgMiksIGllLgkjCisjCQlqMSBleGNsdXNpdmUgb3Igd2l0aCB0aGUgbC5zLmIuIG9mIGsuCQkJIworIwkJc2duMSA6PSAoLTEpKipqMSwgc2duMiA6PSAoLTEpKipqMi4JCQkjCisjCQlTSU4oWCkgPSBzZ24xICogY29zKHIpIGFuZCBDT1MoWCkgPSBzZ24yKnNpbihyKSB3aGVyZQkjCisjCQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuCQkjCisjCQlwb2x5bm9taWFscyBpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQJCQkjCisjCQkJCQkJCQkJIworIwk1LiAoayBpcyBldmVuKSBTZXQgajEgOj0gay8yLCBzZ24xIDo9ICgtMSkqKmoxLgkJCSMKKyMJCVNJTihYKSA9IHNnbjEgKiBzaW4ocikgYW5kIENPUyhYKSA9IHNnbjEqY29zKHIpIHdoZXJlCSMKKyMJCXNpbihyKSBhbmQgY29zKHIpIGFyZSBjb21wdXRlZCBhcyBvZGQgYW5kIGV2ZW4JCSMKKyMJCXBvbHlub21pYWxzIGluIHIsIHJlc3BlY3RpdmVseS4gRXhpdAkJCSMKKyMJCQkJCQkJCQkjCisjCTYuIElmIHxYfCA+IDEsIGdvIHRvIDguCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNy4gKHxYfDwyKiooLTQwKSkgU0lOKFgpID0gWCBhbmQgQ09TKFgpID0gMS4gRXhpdC4JCSMKKyMJCQkJCQkJCQkjCisjCTguIE92ZXJ3cml0ZSBYIGJ5IFggOj0gWCByZW0gMlBpLiBOb3cgdGhhdCB8WHwgPD0gUGksCQkjCisjCQlnbyBiYWNrIHRvIDIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0lOQTc6CWxvbmcJCTB4QkQ2QUFBNzcsMHhDQ0M5OTRGNQorU0lOQTY6CWxvbmcJCTB4M0RFNjEyMDksMHg3QUFFOERBMQorU0lOQTU6CWxvbmcJCTB4QkU1QUU2NDUsMHgyQTExOEFFNAorU0lOQTQ6CWxvbmcJCTB4M0VDNzFERTMsMHhBNTM0MTUzMQorU0lOQTM6CWxvbmcJCTB4QkYyQTAxQTAsMHgxQTAxOEI1OSwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK1NJTkEyOglsb25nCQkweDNGRjgwMDAwLDB4ODg4ODg4ODgsMHg4ODg4NTlBRiwweDAwMDAwMDAwCitTSU5BMToJbG9uZwkJMHhCRkZDMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFBOTksMHgwMDAwMDAwMAorCitDT1NCODoJbG9uZwkJMHgzRDJBQzREMCwweEQ2MDExRUUzCitDT1NCNzoJbG9uZwkJMHhCREE5Mzk2RiwweDlGNDVBQzE5CitDT1NCNjoJbG9uZwkJMHgzRTIxRUVEOSwweDA2MTJDOTcyCitDT1NCNToJbG9uZwkJMHhCRTkyN0U0RiwweEI3OUQ5RkNGCitDT1NCNDoJbG9uZwkJMHgzRUZBMDFBMCwweDFBMDFENDIzLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorQ09TQjM6CWxvbmcJCTB4QkZGNTAwMDAsMHhCNjBCNjBCNiwweDBCNjFENDM4LDB4MDAwMDAwMDAKK0NPU0IyOglsb25nCQkweDNGRkEwMDAwLDB4QUFBQUFBQUEsMHhBQUFBQUI1RQorQ09TQjE6CWxvbmcJCTB4QkYwMDAwMDAKKworCXNldAkJSU5BUkcsRlBfU0NSMAorCisJc2V0CQlYLEZQX1NDUjAKKyMJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKworCXNldAkJUlBSSU1FLEZQX1NDUjAKKwlzZXQJCVNQUklNRSxGUF9TQ1IxCisKKwlzZXQJCVBPU05FRzEsTF9TQ1IxCisJc2V0CQlUV09UTzYzLExfU0NSMQorCisJc2V0CQlFTkRGTEFHLExfU0NSMgorCXNldAkJSU5ULExfU0NSMgorCisJc2V0CQlBREpOLExfU0NSMworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3Npbgorc3NpbjoKKwltb3YubAkJJjAsQURKTiglYTYpCQkjIHllczsgU0VUIEFESk4gVE8gMAorCWJyYS5iCQlTSU5CR04KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNjb3MKK3Njb3M6CisJbW92LmwJCSYxLEFESk4oJWE2KQkJIyB5ZXM7IFNFVCBBREpOIFRPIDEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1NJTkJHTjoKKyMtLVNBVkUgRlBDUiwgRlAxLiBDSEVDSyBJRiB8WHwgSVMgVE9PIFNNQUxMIE9SIExBUkdFCisKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCWZtb3YueAkJJWZwMCxYKCVhNikJCSMgc2F2ZSBpbnB1dCBhdCBYCisKKyMgIkNPTVBBQ1RJRlkiIFgKKwltb3YubAkJKCVhMCksJWQxCQkjIHB1dCBleHAgaW4gaGkgd29yZAorCW1vdi53CQk0KCVhMCksJWQxCQkjIGZldGNoIGhpKG1hbikKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCQkjIHN0cmlwIHNpZ24KKworCWNtcGkubAkJJWQxLCYweDNGRDc4MDAwCQkjIGlzIHxYfCA+PSAyKiooLTQwKT8KKwliZ2UuYgkJU09LMQkJCSMgbm8KKwlicmEudwkJU0lOU00JCQkjIHllczsgaW5wdXQgaXMgdmVyeSBzbWFsbAorCitTT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgaXMgfFh8IDwgMTUgUEk/CisJYmx0LmIJCVNJTk1BSU4JCQkjIG5vCisJYnJhLncJCVNSRURVQ0VYCQkjIHllczsgaW5wdXQgaXMgdmVyeSBsYXJnZQorCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPD0gMTUgUEkuCisjLS1USEUgQVJHVU1FTlQgUkVEVUNUSU9OIElTIERPTkUgQlkgVEFCTEUgTE9PSyBVUC4KK1NJTk1BSU46CisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLmQJCVRXT0JZUEkoJXBjKSwlZnAxCSMgWCoyL1BJCisKKwlsZWEJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgorCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIENPTlZFUlQgVE8gSU5URUdFUgorCisJbW92LmwJCUlOVCglYTYpLCVkMQkJIyBtYWtlIGEgY29weSBvZiBOCisJYXNsLmwJCSY0LCVkMQkJCSMgTiAqPSAxNgorCWFkZC5sCQklZDEsJWExCQkJIyB0YmxfYWRkciA9IGExICsgKE4qMTYpCisKKyMgQTEgSVMgVEhFIEFERFJFU1MgT0YgTipQSUJZMgorIyAuLi5XSElDSCBJUyBJTiBUV08gUElFQ0VTIFkxICYgWTIKKwlmc3ViLngJCSglYTEpKywlZnAwCQkjIFgtWTEKKwlmc3ViLnMJCSglYTEpLCVmcDAJCSMgZnAwID0gUiA9IChYLVkxKS1ZMgorCitTSU5DT05UOgorIy0tY29udGludWF0aW9uIGZyb20gUkVEVUNFWAorCisjLS1HRVQgTitBREpOIEFORCBTRUUgSUYgU0lOKFIpIE9SIENPUyhSKSBJUyBORUVERUQKKwltb3YubAkJSU5UKCVhNiksJWQxCisJYWRkLmwJCUFESk4oJWE2KSwlZDEJCSMgU0VFIElGIEQwIElTIE9ERCBPUiBFVkVOCisJcm9yLmwJCSYxLCVkMQkJCSMgRDAgV0FTIE9ERCBJRkYgRDAgSVMgTkVHQVRJVkUKKwljbXAubAkJJWQxLCYwCisJYmx0LncJCUNPU1BPTFkKKworIy0tTEVUIEogQkUgVEhFIExFQVNUIFNJRy4gQklUIE9GIEQwLCBMRVQgU0dOIDo9ICgtMSkqKkouCisjLS1USEVOIFdFIFJFVFVSTglTR04qU0lOKFIpLiBTR04qU0lOKFIpIElTIENPTVBVVEVEIEJZCisjLS1SJyArIFInKlMqKEExICsgUyhBMiArIFMoQTMgKyBTKEE0ICsgLi4uICsgU0E3KSkpKSwgV0hFUkUKKyMtLVInID0gU0dOKlIsIFM9UipSLiBUSElTIENBTiBCRSBSRVdSSVRURU4gQVMKKyMtLVInICsgUicqUyooIFtBMStUKEEzK1QoQTUrVEE3KSldICsgW1MoQTIrVChBNCtUQTYpKV0pCisjLS1XSEVSRSBUPVMqUy4KKyMtLU5PVEUgVEhBVCBBMyBUSFJPVUdIIEE3IEFSRSBTVE9SRUQgSU4gRE9VQkxFIFBSRUNJU0lPTgorIy0tV0hJTEUgQTEgQU5EIEEyIEFSRSBJTiBET1VCTEUtRVhURU5ERUQgRk9STUFULgorU0lOUE9MWToKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbW92LngJCSVmcDAsWCglYTYpCQkjIFggSVMgUgorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTCisKKwlmbW92LmQJCVNJTkE3KCVwYyksJWZwMworCWZtb3YuZAkJU0lOQTYoJXBjKSwlZnAyCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBUCisKKwlyb3IubAkJJjEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorIyAuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCisJZW9yLmwJCSVkMSxYKCVhNikJCSMgWCBJUyBOT1cgUic9IFNHTipSCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBUQTcKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBUQTYKKworCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAzCQkjIEE1K1RBNworCWZhZGQuZAkJU0lOQTQoJXBjKSwlZnAyCQkjIEE0K1RBNgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgVChBNStUQTcpCisJZm11bC54CQklZnAxLCVmcDIJCSMgVChBNCtUQTYpCisKKwlmYWRkLmQJCVNJTkEzKCVwYyksJWZwMwkJIyBBMytUKEE1K1RBNykKKwlmYWRkLngJCVNJTkEyKCVwYyksJWZwMgkJIyBBMitUKEE0K1RBNikKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFQoQTMrVChBNStUQTcpKQorCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBMitUKEE0K1RBNikpCisJZmFkZC54CQlTSU5BMSglcGMpLCVmcDEJCSMgQTErVChBMytUKEE1K1RBNykpCisJZm11bC54CQlYKCVhNiksJWZwMAkJIyBSJypTCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBbQTErVChBMytUKEE1K1RBNykpXStbUyhBMitUKEE0K1RBNikpXQorCisJZm11bC54CQklZnAxLCVmcDAJCSMgU0lOKFInKS1SJworCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmYWRkLngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfaW54MgorCisjLS1MRVQgSiBCRSBUSEUgTEVBU1QgU0lHLiBCSVQgT0YgRDAsIExFVCBTR04gOj0gKC0xKSoqSi4KKyMtLVRIRU4gV0UgUkVUVVJOCVNHTipDT1MoUikuIFNHTipDT1MoUikgSVMgQ09NUFVURUQgQlkKKyMtLVNHTiArIFMnKihCMSArIFMoQjIgKyBTKEIzICsgUyhCNCArIC4uLiArIFNCOCkpKSksIFdIRVJFCisjLS1TPVIqUiBBTkQgUyc9U0dOKlMuIFRISVMgQ0FOIEJFIFJFV1JJVFRFTiBBUworIy0tU0dOICsgUycqKFtCMStUKEIzK1QoQjUrVEI3KSldICsgW1MoQjIrVChCNCtUKEI2K1RCOCkpKV0pCisjLS1XSEVSRSBUPVMqUy4KKyMtLU5PVEUgVEhBVCBCNCBUSFJPVUdIIEI4IEFSRSBTVE9SRUQgSU4gRE9VQkxFIFBSRUNJU0lPTgorIy0tV0hJTEUgQjIgQU5EIEIzIEFSRSBJTiBET1VCTEUtRVhURU5ERUQgRk9STUFULCBCMSBJUyAtMS8yCisjLS1BTkQgSVMgVEhFUkVGT1JFIFNUT1JFRCBBUyBTSU5HTEUgUFJFQ0lTSU9OLgorQ09TUE9MWToKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUworCisJZm1vdi5kCQlDT1NCOCglcGMpLCVmcDIKKwlmbW92LmQJCUNPU0I3KCVwYyksJWZwMworCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgVAorCisJZm1vdi54CQklZnAwLFgoJWE2KQkJIyBYIElTIFMKKwlyb3IubAkJJjEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorIyAuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBUQjgKKworCWVvci5sCQklZDEsWCglYTYpCQkjIFggSVMgTk9XIFMnPSBTR04qUworCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFRCNworCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjIEQwIElTIFNHTiBJTiBTSU5HTEUKKwltb3YubAkJJWQxLFBPU05FRzEoJWE2KQorCisJZmFkZC5kCQlDT1NCNiglcGMpLCVmcDIJCSMgQjYrVEI4CisJZmFkZC5kCQlDT1NCNSglcGMpLCVmcDMJCSMgQjUrVEI3CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBUKEI2K1RCOCkKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBUKEI1K1RCNykKKworCWZhZGQuZAkJQ09TQjQoJXBjKSwlZnAyCQkjIEI0K1QoQjYrVEI4KQorCWZhZGQueAkJQ09TQjMoJXBjKSwlZnAzCQkjIEIzK1QoQjUrVEI3KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgVChCNCtUKEI2K1RCOCkpCisJZm11bC54CQklZnAzLCVmcDEJCSMgVChCMytUKEI1K1RCNykpCisKKwlmYWRkLngJCUNPU0IyKCVwYyksJWZwMgkJIyBCMitUKEI0K1QoQjYrVEI4KSkKKwlmYWRkLnMJCUNPU0IxKCVwYyksJWZwMQkJIyBCMStUKEIzK1QoQjUrVEI3KSkKKworCWZtdWwueAkJJWZwMiwlZnAwCQkjIFMoQjIrVChCNCtUKEI2K1RCOCkpKQorCisJZmFkZC54CQklZnAxLCVmcDAKKworCWZtdWwueAkJWCglYTYpLCVmcDAKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmFkZC5zCQlQT1NORUcxKCVhNiksJWZwMAkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfaW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgU0lOZTogQmlnIE9SIFNtYWxsPworIy0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KKyMtLUlGIHxYfCA8IDIqKigtNDApLCBSRVRVUk4gWCBPUiAxLgorU0lOQk9SUzoKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LmwJCVNSRURVQ0VYCisKK1NJTlNNOgorCW1vdi5sCQlBREpOKCVhNiksJWQxCisJY21wLmwJCSVkMSwmMAorCWJndC5iCQlDT1NUSU5ZCisKKyMgaGVyZSwgdGhlIG9wZXJhdGlvbiBtYXkgdW5kZXJmbG93IGlmZiB0aGUgcHJlY2lzaW9uIGlzIHNnbCBvciBkYmwuCisjIGV4dGVuZGVkIGRlbm9ybXMgYXJlIGhhbmRsZWQgdGhyb3VnaCBhbm90aGVyIGVudHJ5IHBvaW50LgorU0lOVElOWToKKyMJbW92LncJCSYweDAwMDAsWERDQVJFKCVhNikJIyBKVVNUIElOIENBU0UKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9jYXRjaAorCitDT1NUSU5ZOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIGZwMCA9IDEuMAorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmFkZC5zCQkmMHg4MDgwMDAwMCwlZnAwCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNzaW5kCisjLS1TSU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc3NpbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNjb3NkCisjLS1DT1MoWCkgPSAxIEZPUiBERU5PUk1BTElaRUQgWAorc2Nvc2Q6CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgZnAwID0gMS4wCisJYnJhCQl0X3BpbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNzaW5jb3MKK3NzaW5jb3M6CisjLS1TRVQgQURKTiBUTyA0CisJbW92LmwJCSY0LEFESk4oJWE2KQorCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwlmbW92LngJCSVmcDAsWCglYTYpCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCQkjIENPTVBBQ1RJRlkgWAorCisJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyB8WHwgPj0gMioqKC00MCk/CisJYmdlLmIJCVNDT0sxCisJYnJhLncJCVNDU00KKworU0NPSzE6CisJY21wLmwJCSVkMSwmMHg0MDA0QkM3RQkJIyB8WHwgPCAxNSBQST8KKwlibHQuYgkJU0NNQUlOCisJYnJhLncJCVNSRURVQ0VYCisKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCitTQ01BSU46CisJZm1vdi54CQklZnAwLCVmcDEKKworCWZtdWwuZAkJVFdPQllQSSglcGMpLCVmcDEJIyBYKjIvUEkKKworCWxlYQkJUElUQkwrMHgyMDAoJXBjKSwlYTEJIyBUQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKwlmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3YubAkJSU5UKCVhNiksJWQxCisJYXNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIE9GIE4qUElCWTIsIElOIFkxLCBZMgorCisJZnN1Yi54CQkoJWExKSssJWZwMAkJIyBYLVkxCisJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIEZQMCBJUyBSID0gKFgtWTEpLVkyCisKK1NDQ09OVDoKKyMtLWNvbnRpbnVhdGlvbiBwb2ludCBmcm9tIFJFRFVDRVgKKworCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwlyb3IubAkJJjEsJWQxCisJY21wLmwJCSVkMSwmMAkJCSMgRDAgPCAwIElGRiBOIElTIE9ERAorCWJnZS53CQlORVZFTgorCitTTk9ERDoKKyMtLVJFR0lTVEVSUyBTQVZFRCBTTyBGQVI6IEQwLCBBMCwgRlAyLgorCWZtb3ZtLngJCSYweDA0LC0oJXNwKQkJIyBzYXZlIGZwMgorCisJZm1vdi54CQklZnAwLFJQUklNRSglYTYpCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFMgPSBSKlIKKwlmbW92LmQJCVNJTkE3KCVwYyksJWZwMQkJIyBBNworCWZtb3YuZAkJQ09TQjgoJXBjKSwlZnAyCQkjIEI4CisJZm11bC54CQklZnAwLCVmcDEJCSMgU0E3CisJZm11bC54CQklZnAwLCVmcDIJCSMgU0I4CisKKwltb3YubAkJJWQyLC0oJXNwKQorCW1vdi5sCQklZDEsJWQyCisJcm9yLmwJCSYxLCVkMgorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDIKKwllb3IubAkJJWQxLCVkMgorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDIKKworCWZhZGQuZAkJU0lOQTYoJXBjKSwlZnAxCQkjIEE2K1NBNworCWZhZGQuZAkJQ09TQjcoJXBjKSwlZnAyCQkjIEI3K1NCOAorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNitTQTcpCisJZW9yLmwJCSVkMixSUFJJTUUoJWE2KQorCW1vdi5sCQkoJXNwKSssJWQyCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNytTQjgpCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwltb3YubAkJJjB4M0Y4MDAwMDAsUE9TTkVHMSglYTYpCisJZW9yLmwJCSVkMSxQT1NORUcxKCVhNikKKworCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAxCQkjIEE1K1MoQTYrU0E3KQorCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAyCQkjIEI2K1MoQjcrU0I4KQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNStTKEE2K1NBNykpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNitTKEI3K1NCOCkpCisJZm1vdi54CQklZnAwLFNQUklNRSglYTYpCisKKwlmYWRkLmQJCVNJTkE0KCVwYyksJWZwMQkJIyBBNCtTKEE1K1MoQTYrU0E3KSkKKwllb3IubAkJJWQxLFNQUklNRSglYTYpCisJZmFkZC5kCQlDT1NCNSglcGMpLCVmcDIJCSMgQjUrUyhCNitTKEI3K1NCOCkpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEE0Ky4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI1Ky4uLikKKworCWZhZGQuZAkJU0lOQTMoJXBjKSwlZnAxCQkjIEEzK1MoQTQrLi4uKQorCWZhZGQuZAkJQ09TQjQoJXBjKSwlZnAyCQkjIEI0K1MoQjUrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBMysuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNCsuLi4pCisKKwlmYWRkLngJCVNJTkEyKCVwYyksJWZwMQkJIyBBMitTKEEzKy4uLikKKwlmYWRkLngJCUNPU0IzKCVwYyksJWZwMgkJIyBCMytTKEI0Ky4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTIrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjMrLi4uKQorCisJZmFkZC54CQlTSU5BMSglcGMpLCVmcDEJCSMgQTErUyhBMisuLi4pCisJZmFkZC54CQlDT1NCMiglcGMpLCVmcDIJCSMgQjIrUyhCMysuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEExKy4uLikKKwlmbXVsLngJCSVmcDIsJWZwMAkJIyBTKEIyKy4uLikKKworCWZtdWwueAkJUlBSSU1FKCVhNiksJWZwMQkjIFInUyhBMSsuLi4pCisJZmFkZC5zCQlDT1NCMSglcGMpLCVmcDAJCSMgQjErUyhCMi4uLikKKwlmbXVsLngJCVNQUklNRSglYTYpLCVmcDAJIyBTJyhCMStTKEIyKy4uLikpCisKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQlSUFJJTUUoJWE2KSwlZnAxCSMgQ09TKFgpCisJYnNyCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CisJZmFkZC5zCQlQT1NORUcxKCVhNiksJWZwMAkjIFNJTihYKQorCWJyYQkJdF9pbngyCisKK05FVkVOOgorIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUjogRlAyLgorCWZtb3ZtLngJCSYweDA0LC0oJXNwKQkJIyBzYXZlIGZwMgorCisJZm1vdi54CQklZnAwLFJQUklNRSglYTYpCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFMgPSBSKlIKKworCWZtb3YuZAkJQ09TQjgoJXBjKSwlZnAxCQkjIEI4CisJZm1vdi5kCQlTSU5BNyglcGMpLCVmcDIJCSMgQTcKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFNCOAorCWZtb3YueAkJJWZwMCxTUFJJTUUoJWE2KQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFNBNworCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKworCWZhZGQuZAkJQ09TQjcoJXBjKSwlZnAxCQkjIEI3K1NCOAorCWZhZGQuZAkJU0lOQTYoJXBjKSwlZnAyCQkjIEE2K1NBNworCisJZW9yLmwJCSVkMSxSUFJJTUUoJWE2KQorCWVvci5sCQklZDEsU1BSSU1FKCVhNikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjcrU0I4KQorCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCisJbW92LmwJCSVkMSxQT1NORUcxKCVhNikKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTYrU0E3KQorCisJZmFkZC5kCQlDT1NCNiglcGMpLCVmcDEJCSMgQjYrUyhCNytTQjgpCisJZmFkZC5kCQlTSU5BNSglcGMpLCVmcDIJCSMgQTUrUyhBNitTQTcpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI2K1MoQjcrU0I4KSkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEE1K1MoQTYrU0E3KSkKKworCWZhZGQuZAkJQ09TQjUoJXBjKSwlZnAxCQkjIEI1K1MoQjYrUyhCNytTQjgpKQorCWZhZGQuZAkJU0lOQTQoJXBjKSwlZnAyCQkjIEE0K1MoQTUrUyhBNitTQTcpKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNSsuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBNCsuLi4pCisKKwlmYWRkLmQJCUNPU0I0KCVwYyksJWZwMQkJIyBCNCtTKEI1Ky4uLikKKwlmYWRkLmQJCVNJTkEzKCVwYyksJWZwMgkJIyBBMytTKEE0Ky4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjQrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTMrLi4uKQorCisJZmFkZC54CQlDT1NCMyglcGMpLCVmcDEJCSMgQjMrUyhCNCsuLi4pCisJZmFkZC54CQlTSU5BMiglcGMpLCVmcDIJCSMgQTIrUyhBMysuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEIzKy4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEEyKy4uLikKKworCWZhZGQueAkJQ09TQjIoJXBjKSwlZnAxCQkjIEIyK1MoQjMrLi4uKQorCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAyCQkjIEExK1MoQTIrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCMisuLi4pCisJZm11bC54CQklZnAyLCVmcDAJCSMgcyhhMSsuLi4pCisKKworCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAxCQkjIEIxK1MoQjIuLi4pCisJZm11bC54CQlSUFJJTUUoJWE2KSwlZnAwCSMgUidTKEExKy4uLikKKwlmbXVsLngJCVNQUklNRSglYTYpLCVmcDEJIyBTJyhCMStTKEIyKy4uLikpCisKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQlQT1NORUcxKCVhNiksJWZwMQkjIENPUyhYKQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWZhZGQueAkJUlBSSU1FKCVhNiksJWZwMAkjIFNJTihYKQorCWJyYQkJdF9pbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTQ0JPUlM6CisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC53CQlTUkVEVUNFWAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0NTTToKKyMJbW92LncJCSYweDAwMDAsWERDQVJFKCVhNikKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDEKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZnN1Yi5zCQkmMHgwMDgwMDAwMCwlZnAxCisJYnNyCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CisJZm1vdi5sCQklZnBjciwlZDAJCSMgZDAgbXVzdCBoYXZlIGZwY3IsdG9vCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJWCglYTYpLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzc2luY29zZAorIy0tU0lOIEFORCBDT1MgT0YgWCBGT1IgREVOT1JNQUxJWkVEIFgKK3NzaW5jb3NkOgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDEKKwlic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIy0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgorIy0tVEhJUyBSRURVQ1RJT04gTUVUSE9ELCBIT1dFVkVSLCBJUyBNVUNIIEZBU1RFUiBUSEFOIFVTSU5HCisjLS1USEUgUkVNQUlOREVSIElOU1RSVUNUSU9OIFdISUNIIElTIE5PVyBJTiBTT0ZUV0FSRS4KK1NSRURVQ0VYOgorCWZtb3ZtLngJCSYweDNjLC0oJXNwKQkJIyBzYXZlIHtmcDItZnA1fQorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDEJIyBmcDEgPSAwCisKKyMtLUlmIGNvbXBhY3QgZm9ybSBvZiBhYnMoYXJnKSBpbiBkMD0kN2ZmZWZmZmYsIGFyZ3VtZW50IGlzIHNvIGxhcmdlIHRoYXQKKyMtLXRoZXJlIGlzIGEgZGFuZ2VyIG9mIHVud2FudGVkIG92ZXJmbG93IGluIGZpcnN0IExPT1AgaXRlcmF0aW9uLiAgSW4gdGhpcworIy0tY2FzZSwgcmVkdWNlIGFyZ3VtZW50IGJ5IG9uZSByZW1haW5kZXIgc3RlcCB0byBtYWtlIHN1YnNlcXVlbnQgcmVkdWN0aW9uCisjLS1zYWZlLgorCWNtcC5sCQklZDEsJjB4N2ZmZWZmZmYJCSMgaXMgYXJnIGRhbmdlcm91c2x5IGxhcmdlPworCWJuZS5iCQlTTE9PUAkJCSMgbm8KKworIyB5ZXM7IGNyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92LncJCSYweDdmZmUsRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCSYweGM5MGZkYWEyLEZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKworIyBjcmVhdGUgbG93IGhhbGYgb2YgMioqMTYzODMqUEkvMiBhdCBGUF9TQ1IxCisJbW92LncJCSYweDdmZGMsRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCSYweDg1YTMwOGQzLEZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKworCWZ0ZXN0LngJCSVmcDAJCQkjIHRlc3Qgc2lnbiBvZiBhcmd1bWVudAorCWZibHQudwkJc3JlZF9uZWcKKworCW9yLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIHBvc2l0aXZlIGFyZworCW9yLmIJCSYweDgwLEZQX1NDUjFfRVgoJWE2KQorc3JlZF9uZWc6CisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBzYXZlIGhpZ2ggcmVzdWx0IGluIGZwMQorCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBsb3cgcGFydCBvZiByZWR1Y3Rpb24KKwlmc3ViLngJCSVmcDAsJWZwMQkJIyBkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAxCSMgZnAwL2ZwMSBhcmUgcmVkdWNlZCBhcmd1bWVudC4KKworIy0tT04gRU5UUlksIEZQMCBJUyBYLCBPTiBSRVRVUk4sIEZQMCBJUyBYIFJFTSBQSS8yLCB8WHwgPD0gUEkvNC4KKyMtLWludGVnZXIgcXVvdGllbnQgd2lsbCBiZSBzdG9yZWQgaW4gTgorIy0tSW50ZXJtZWRpdGF0ZSByZW1haW5kZXIgaXMgNjYtYml0IGxvbmc7IChSLHIpIGluIChGUDAsRlAxKQorU0xPT1A6CisJZm1vdi54CQklZnAwLElOQVJHKCVhNikJCSMgKy0yKipLICogRiwgMSA8PSBGIDwgMgorCW1vdi53CQlJTkFSRyglYTYpLCVkMQorCW1vdi5sCQklZDEsJWExCQkJIyBzYXZlIGEgY29weSBvZiBEMAorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDEKKwlzdWIubAkJJjB4MDAwMDNGRkYsJWQxCQkjIGQwID0gSworCWNtcC5sCQklZDEsJjI4CisJYmxlLmIJCVNMQVNUTE9PUAorU0NPTlRMT09QOgorCXN1Yi5sCQkmMjcsJWQxCQkJIyBkMCA9IEwgOj0gSy0yNworCW1vdi5iCQkmMCxFTkRGTEFHKCVhNikKKwlicmEuYgkJU1dPUksKK1NMQVNUTE9PUDoKKwljbHIubAkJJWQxCQkJIyBkMCA9IEwgOj0gMAorCW1vdi5iCQkmMSxFTkRGTEFHKCVhNikKKworU1dPUks6CisjLS1GSU5EIFRIRSBSRU1BSU5ERVIgT0YgKFIscikgVy5SLlQuCTIqKkwgKiAoUEkvMikuIEwgSVMgU08gQ0hPU0VOCisjLS1USEFUCUlOVCggWCAqICgyL1BJKSAvIDIqKihMKSApIDwgMioqMjkuCisKKyMtLUNSRUFURSAyKiooLUwpICogKDIvUEkpLCBTSUdOKElOQVJHKSoyKiooNjMpLAorIy0tMioqTCAqIChQSWJ5Ml8xKSwgMioqTCAqIChQSWJ5Ml8yKQorCisJbW92LmwJCSYweDAwMDAzRkZFLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIvUEkKKwlzdWIubAkJJWQxLCVkMgkJCSMgQklBU0VEIEVYUCBPRiAyKiooLUwpKigyL1BJKQorCisJbW92LmwJCSYweEEyRjk4MzZFLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQkmMHg0RTQ0MTUyQSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIEZQX1NDUjAgPSAyKiooLUwpKigyL1BJKQorCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAyCSMgZnAyID0gWCAqIDIqKigtTCkqKDIvUEkpCisKKyMtLVdFIE1VU1QgTk9XIEZJTkQgSU5UKEZQMikuIFNJTkNFIFdFIE5FRUQgVEhJUyBWQUxVRSBJTgorIy0tRkxPQVRJTkcgUE9JTlQgRk9STUFULCBUSEUgVFdPIEZNT1ZFJ1MJRk1PVkUuTCBGUCA8LS0+IE4KKyMtLVdJTEwgQkUgVE9PIElORUZGSUNJRU5ULiBUSEUgV0FZIEFST1VORCBJVCBJUyBUSEFUCisjLS0oU0lHTihJTkFSRykqMioqNjMJKwlGUDIpIC0gU0lHTihJTkFSRykqMioqNjMgV0lMTCBHSVZFCisjLS1VUyBUSEUgREVTSVJFRCBWQUxVRSBJTiBGTE9BVElORyBQT0lOVC4KKwltb3YubAkJJWExLCVkMgorCXN3YXAJCSVkMgorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDIKKwlvci5sCQkmMHg1RjAwMDAwMCwlZDIJCSMgZDIgPSBTSUdOKElOQVJHKSoyKio2MyBJTiBTR0wKKwltb3YubAkJJWQyLFRXT1RPNjMoJWE2KQorCWZhZGQucwkJVFdPVE82MyglYTYpLCVmcDIJIyBUSEUgRlJBQ1RJT05BTCBQQVJUIE9GIEZQMSBJUyBST1VOREVECisJZnN1Yi5zCQlUV09UTzYzKCVhNiksJWZwMgkjIGZwMiA9IE4KKyMJZmludC54CQklZnAyCisKKyMtLUNSRUFUSU5HIDIqKihMKSpQaWJ5Ml8xIGFuZCAyKiooTCkqUGlieTJfMgorCW1vdi5sCQklZDEsJWQyCQkJIyBkMiA9IEwKKworCWFkZC5sCQkmMHgwMDAwM0ZGRiwlZDIJCSMgQklBU0VEIEVYUCBPRiAyKipMICogKFBJLzIpCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJJjB4QzkwRkRBQTIsRlBfU0NSMF9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjBfTE8oJWE2KQkJIyBGUF9TQ1IwID0gMioqKEwpICogUGlieTJfMQorCisJYWRkLmwJCSYweDAwMDAzRkRELCVkMQorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCSYweDg1QTMwOEQzLEZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikJCSMgRlBfU0NSMSA9IDIqKihMKSAqIFBpYnkyXzIKKworCW1vdi5iCQlFTkRGTEFHKCVhNiksJWQxCisKKyMtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCisjLS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92LngJCSVmcDIsJWZwNAkJIyBmcDQgPSBOCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwNAkjIGZwNCA9IFcgPSBOKlAxCisJZm1vdi54CQklZnAyLCVmcDUJCSMgZnA1ID0gTgorCWZtdWwueAkJRlBfU0NSMSglYTYpLCVmcDUJIyBmcDUgPSB3ID0gTipQMgorCWZtb3YueAkJJWZwNCwlZnAzCQkjIGZwMyA9IFcgPSBOKlAxCisKKyMtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCisjLS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGQueAkJJWZwNSwlZnAzCQkjIGZwMyA9IFAKKwlmc3ViLngJCSVmcDMsJWZwNAkJIyBmcDQgPSBXLVAKKworCWZzdWIueAkJJWZwMywlZnAwCQkjIGZwMCA9IEEgOj0gUiAtIFAKKwlmYWRkLngJCSVmcDUsJWZwNAkJIyBmcDQgPSBwID0gKFctUCkrdworCisJZm1vdi54CQklZnAwLCVmcDMJCSMgZnAzID0gQQorCWZzdWIueAkJJWZwNCwlZnAxCQkjIGZwMSA9IGEgOj0gciAtIHAKKworIy0tTm93IHdlIG5lZWQgdG8gbm9ybWFsaXplIChBLGEpIHRvICAibmV3IChSLHIpIiB3aGVyZSBSK3IgPSBBK2EgYnV0CisjLS18cnwgPD0gaGFsZiB1bHAgb2YgUi4KKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgPSBSIDo9IEErYQorIy0tTm8gbmVlZCB0byBjYWxjdWxhdGUgciBpZiB0aGlzIGlzIHRoZSBsYXN0IGxvb3AKKwljbXAuYgkJJWQxLCYwCisJYmd0LncJCVNSRVNUT1JFCisKKyMtLU5lZWQgdG8gY2FsY3VsYXRlIHIKKwlmc3ViLngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBLVIKKwlmYWRkLngJCSVmcDMsJWZwMQkJIyBmcDEgPSByIDo9IChBLVIpK2EKKwlicmEudwkJU0xPT1AKKworU1JFU1RPUkU6CisJZm1vdi5sCQklZnAyLElOVCglYTYpCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIHtmcDItZnA1fQorCisJbW92LmwJCUFESk4oJWE2KSwlZDEKKwljbXAubAkJJWQxLCY0CisKKwlibHQudwkJU0lOQ09OVAorCWJyYS53CQlTQ0NPTlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFuKCk6ICBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0YW5kKCk6IGNvbXB1dGVzIHRoZSB0YW5nZW50IG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gdGFuKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiAjCisjCXdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDYuCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIworIwkJayA9IE4gbW9kIDIsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwIG9yIDEuCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiBrIGlzIG9kZCwgZ28gdG8gNS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIChrIGlzIGV2ZW4pIFRhbihYKSA9IHRhbihyKSBhbmQgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSBhCSMKKyMJCXJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQkJCQkjCisjCQlVID0gciArIHIqcyooUDEgKyBzKihQMiArIHMqUDMpKSwgYW5kCQkJIworIwkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCAgcyA9IHIqci4JIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKGsgaXMgb2RkKSBUYW4oWCkgPSAtY290KHIpLiBTaW5jZSB0YW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5ICMKKyMJCWEgcmF0aW9uYWwgZnVuY3Rpb24gVS9WIHdoZXJlCQkJCSMKKyMJCVUgPSByICsgcipzKihQMSArIHMqKFAyICsgcypQMykpLCBhbmQJCQkjCisjCQlWID0gMSArIHMqKFExICsgcyooUTIgKyBzKihRMyArIHMqUTQpKSksIHMgPSByKnIsCSMKKyMJCS1Db3QocikgPSAtVi9VLiBFeGl0LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNi4gSWYgfFh8ID4gMSwgZ28gdG8gOC4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk3LiAofFh8PDIqKigtNDApKSBUYW4oWCkgPSBYLiBFeGl0LgkJCQkjCisjCQkJCQkJCQkJIworIwk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLCBnbyBiYWNrCSMKKyMJCXRvIDIuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RBTlE0OgorCWxvbmcJCTB4M0VBMEI3NTksMHhGNTBGODY4OAorVEFOUDM6CisJbG9uZwkJMHhCRUYyQkFBNSwweEE4OTI0RjA0CisKK1RBTlEzOgorCWxvbmcJCTB4QkYzNDZGNTksMHhCMzlCQTY1RiwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworVEFOUDI6CisJbG9uZwkJMHgzRkY2MDAwMCwweEUwNzNEM0ZDLDB4MTk5QzRBMDAsMHgwMDAwMDAwMAorCitUQU5RMjoKKwlsb25nCQkweDNGRjkwMDAwLDB4RDIzQ0Q2ODQsMHgxNUQ5NUZBMSwweDAwMDAwMDAwCisKK1RBTlAxOgorCWxvbmcJCTB4QkZGQzAwMDAsMHg4ODk1QTZDNSwweEZCNDIzQkNBLDB4MDAwMDAwMDAKKworVEFOUTE6CisJbG9uZwkJMHhCRkZEMDAwMCwweEVFRjU3RTBELDB4QTg0QkM4Q0UsMHgwMDAwMDAwMAorCitJTlZUV09QSToKKwlsb25nCQkweDNGRkMwMDAwLDB4QTJGOTgzNkUsMHg0RTQ0MTUyQSwweDAwMDAwMDAwCisKK1RXT1BJMToKKwlsb25nCQkweDQwMDEwMDAwLDB4QzkwRkRBQTIsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitUV09QSTI6CisJbG9uZwkJMHgzRkRGMDAwMCwweDg1QTMwOEQ0LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisjLS1OKlBJLzIsIC0zMiA8PSBOIDw9IDMyLCBJTiBBIExFQURJTkcgVEVSTSBJTiBFWFQuIEFORCBUUkFJTElORworIy0tVEVSTSBJTiBTR0wuIE5PVEUgVEhBVCBQSSBJUyA2NC1CSVQgTE9ORywgVEhVUyBOKlBJLzIgSVMgQVQKKyMtLU1PU1QgNjkgQklUUyBMT05HLgorIwlnbG9iYWwJCVBJVEJMCitQSVRCTDoKKwlsb25nCQkweEMwMDQwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDIxODAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHhBMEQwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhCQzdFRENGNywweEZGNTIzNjExLDB4QTFFODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QjYzNjVFMjIsMHhFRTQ2RjAwMCwweDIxNDgwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMTIwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhBOUE1NjA3OCwweENDMzA2M0RELDB4MjFGQzAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QTM1Q0UxQTMsMHhCQjI1MURDQiwweDIxMTAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHhBMTU4MDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4MjFFMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4OTA4MzY1MjQsMHg4ODAzNEI5NiwweDIwQjAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTg4MDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg4M0YyNjc3QSwweDY1RUNCRjczLDB4MjFDNDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweDIwMDAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHgyMTM4MDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhFMjMxRDVGNiwweDY1OTVEQTdCLDB4QTEzMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4RDVBMEQ4NEMsMHg0MzdGNEU1OCwweDlGQzAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTAwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhCQzdFRENGNywweEZGNTIzNjExLDB4QTE2ODAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweEEwQTAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMDkwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4MjE2MDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4OEEzQUU2NEYsMHg3NkY4MDU4NCwweEExMDgwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjgwMDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhFMjMxRDVGNiwweDY1OTVEQTdCLDB4QTBCMDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDIwODAwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMDIwMDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4MjBFMDAwMDAKKwlsb25nCQkweEMwMDEwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweDFGMDAwMDAwCisJbG9uZwkJMHhDMDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDAwMDAwMAorCWxvbmcJCTB4QzAwMTAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4MjA2MDAwMDAKKwlsb25nCQkweEMwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDFGODAwMDAwCisJbG9uZwkJMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjAwMDAwMAorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDlGMDAwMDAwCisJbG9uZwkJMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjgwMDAwMAorCWxvbmcJCTB4NDAwMTAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4QTA2MDAwMDAKKwlsb25nCQkweDQwMDEwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweEEwMDAwMDAwCisJbG9uZwkJMHg0MDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjAwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4QTBFMDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweDIwMjAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDgwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhFMjMxRDVGNiwweDY1OTVEQTdCLDB4MjBCMDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweDlGODAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTA4MDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4QTE2MDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4QTM1Q0UxQTMsMHhCQjI1MURDQiwweEEwOTAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMEEwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhCQzdFRENGNywweEZGNTIzNjExLDB4MjE2ODAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweEExMDAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHgxRkMwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhFMjMxRDVGNiwweDY1OTVEQTdCLDB4MjEzMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4RUVDMkQzQTAsMHg4N0FDNjY5RiwweEExMzgwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHhBMDAwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg4M0YyNjc3QSwweDY1RUNCRjczLDB4QTFDNDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4OEEzQUU2NEYsMHg3NkY4MDU4NCwweDIxODgwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHhBMEIwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg5NkNCRTNGOSwweDk5MEU5MUE4LDB4QTFFMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4OUQxNDYyQ0UsMHhBQTE5RDdCOSwweDIxNTgwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMTEwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhBOUE1NjA3OCwweENDMzA2M0RELDB4QTFGQzAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweDIxMjAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHhBMTQ4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhCQzdFRENGNywweEZGNTIzNjExLDB4MjFFODAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QzJDNzVCQ0QsMHgxMDVEN0MyMywweDIwRDAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTgwMDAwMAorCisJc2V0CQlJTkFSRyxGUF9TQ1IwCisKKwlzZXQJCVRXT1RPNjMsTF9TQ1IxCisJc2V0CQlJTlQsTF9TQ1IxCisJc2V0CQlFTkRGTEFHLExfU0NSMgorCisJZ2xvYmFsCQlzdGFuCitzdGFuOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisKKwljbXAubAkJJWQxLCYweDNGRDc4MDAwCQkjIHxYfCA+PSAyKiooLTQwKT8KKwliZ2UuYgkJVEFOT0sxCisJYnJhLncJCVRBTlNNCitUQU5PSzE6CisJY21wLmwJCSVkMSwmMHg0MDA0QkM3RQkJIyB8WHwgPCAxNSBQST8KKwlibHQuYgkJVEFOTUFJTgorCWJyYS53CQlSRURVQ0VYCisKK1RBTk1BSU46CisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPD0gMTUgUEkuCisjLS1USEUgQVJHVU1FTlQgUkVEVUNUSU9OIElTIERPTkUgQlkgVEFCTEUgTE9PSyBVUC4KKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwuZAkJVFdPQllQSSglcGMpLCVmcDEJIyBYKjIvUEkKKworCWxlYS5sCQlQSVRCTCsweDIwMCglcGMpLCVhMQkjIFRBQkxFIE9GIE4qUEkvMiwgTiA9IC0zMiwuLi4sMzIKKworCWZtb3YubAkJJWZwMSwlZDEJCSMgQ09OVkVSVCBUTyBJTlRFR0VSCisKKwlhc2wubAkJJjQsJWQxCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgTipQSUJZMiBJTiBZMSwgWTIKKworCWZzdWIueAkJKCVhMSkrLCVmcDAJCSMgWC1ZMQorCisJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIEZQMCBJUyBSID0gKFgtWTEpLVkyCisKKwlyb3IubAkJJjUsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBEMCBXQVMgT0REIElGRiBEMCA8IDAKKworVEFOQ09OVDoKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIsZnAzCisKKwljbXAubAkJJWQxLCYwCisJYmx0LncJCU5PREQKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgUyA9IFIqUgorCisJZm1vdi5kCQlUQU5RNCglcGMpLCVmcDMKKwlmbW92LmQJCVRBTlAzKCVwYyksJWZwMgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgU1E0CisJZm11bC54CQklZnAxLCVmcDIJCSMgU1AzCisKKwlmYWRkLmQJCVRBTlEzKCVwYyksJWZwMwkJIyBRMytTUTQKKwlmYWRkLngJCVRBTlAyKCVwYyksJWZwMgkJIyBQMitTUDMKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFMoUTMrU1E0KQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFMoUDIrU1AzKQorCisJZmFkZC54CQlUQU5RMiglcGMpLCVmcDMJCSMgUTIrUyhRMytTUTQpCisJZmFkZC54CQlUQU5QMSglcGMpLCVmcDIJCSMgUDErUyhQMitTUDMpCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBTKFEyK1MoUTMrU1E0KSkKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBTKFAxK1MoUDIrU1AzKSkKKworCWZhZGQueAkJVEFOUTEoJXBjKSwlZnAzCQkjIFExK1MoUTIrUyhRMytTUTQpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFJTKFAxK1MoUDIrU1AzKSkKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFMoUTErUyhRMitTKFEzK1NRNCkpKQorCisJZmFkZC54CQklZnAyLCVmcDAJCSMgUitSUyhQMStTKFAyK1NQMykpCisKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyAxK1MoUTErLi4uKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyLGZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworTk9ERDoKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMCwlZnAwCQkjIFMgPSBSKlIKKworCWZtb3YuZAkJVEFOUTQoJXBjKSwlZnAzCisJZm1vdi5kCQlUQU5QMyglcGMpLCVmcDIKKworCWZtdWwueAkJJWZwMCwlZnAzCQkjIFNRNAorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFNQMworCisJZmFkZC5kCQlUQU5RMyglcGMpLCVmcDMJCSMgUTMrU1E0CisJZmFkZC54CQlUQU5QMiglcGMpLCVmcDIJCSMgUDIrU1AzCisKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBTKFEzK1NRNCkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKFAyK1NQMykKKworCWZhZGQueAkJVEFOUTIoJXBjKSwlZnAzCQkjIFEyK1MoUTMrU1E0KQorCWZhZGQueAkJVEFOUDEoJXBjKSwlZnAyCQkjIFAxK1MoUDIrU1AzKQorCisJZm11bC54CQklZnAwLCVmcDMJCSMgUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhQMStTKFAyK1NQMykpCisKKwlmYWRkLngJCVRBTlExKCVwYyksJWZwMwkJIyBRMStTKFEyK1MoUTMrU1E0KSkKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBSUyhQMStTKFAyK1NQMykpCisKKwlmbXVsLngJCSVmcDMsJWZwMAkJIyBTKFExK1MoUTIrUyhRMytTUTQpKSkKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIFIrUlMoUDErUyhQMitTUDMpKQorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDErUyhRMSsuLi4pCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIsZnAzCisKKwlmbW92LngJCSVmcDEsLSglc3ApCisJZW9yLmwJCSYweDgwMDAwMDAwLCglc3ApCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZkaXYueAkJKCVzcCkrLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9pbngyCisKK1RBTkJPUlM6CisjLS1JRiB8WHwgPiAxNVBJLCBXRSBVU0UgVEhFIEdFTkVSQUwgQVJHVU1FTlQgUkVEVUNUSU9OLgorIy0tSUYgfFh8IDwgMioqKC00MCksIFJFVFVSTiBYIE9SIDEuCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC5iCQlSRURVQ0VYCisKK1RBTlNNOgorCWZtb3YueAkJJWZwMCwtKCVzcCkKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSglc3ApKywlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc2liYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfY2F0Y2gKKworCWdsb2JhbAkJc3RhbmQKKyMtLVRBTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzdGFuZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjLS1XSEVOIFJFRFVDRVggSVMgVVNFRCwgVEhFIENPREUgV0lMTCBJTkVWSVRBQkxZIEJFIFNMT1cuCisjLS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKKyMtLVRIRSBSRU1BSU5ERVIgSU5TVFJVQ1RJT04gV0hJQ0ggSVMgTk9XIElOIFNPRlRXQVJFLgorUkVEVUNFWDoKKwlmbW92bS54CQkmMHgzYywtKCVzcCkJCSMgc2F2ZSB7ZnAyLWZwNX0KKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgZnAxID0gMAorCisjLS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0CisjLS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKKyMtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorIy0tc2FmZS4KKwljbXAubAkJJWQxLCYweDdmZmVmZmZmCQkjIGlzIGFyZyBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmUuYgkJTE9PUAkJCSMgbm8KKworIyB5ZXM7IGNyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92LncJCSYweDdmZmUsRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCSYweGM5MGZkYWEyLEZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKworIyBjcmVhdGUgbG93IGhhbGYgb2YgMioqMTYzODMqUEkvMiBhdCBGUF9TQ1IxCisJbW92LncJCSYweDdmZGMsRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCSYweDg1YTMwOGQzLEZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKworCWZ0ZXN0LngJCSVmcDAJCQkjIHRlc3Qgc2lnbiBvZiBhcmd1bWVudAorCWZibHQudwkJcmVkX25lZworCisJb3IuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgcG9zaXRpdmUgYXJnCisJb3IuYgkJJjB4ODAsRlBfU0NSMV9FWCglYTYpCityZWRfbmVnOgorCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBoaWdoIHBhcnQgb2YgcmVkdWN0aW9uIGlzIGV4YWN0CisJZm1vdi54CQklZnAwLCVmcDEJCSMgc2F2ZSBoaWdoIHJlc3VsdCBpbiBmcDEKKwlmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgbG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1Yi54CQklZnAwLCVmcDEJCSMgZGV0ZXJtaW5lIGxvdyBjb21wb25lbnQgb2YgcmVzdWx0CisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMQkjIGZwMC9mcDEgYXJlIHJlZHVjZWQgYXJndW1lbnQuCisKKyMtLU9OIEVOVFJZLCBGUDAgSVMgWCwgT04gUkVUVVJOLCBGUDAgSVMgWCBSRU0gUEkvMiwgfFh8IDw9IFBJLzQuCisjLS1pbnRlZ2VyIHF1b3RpZW50IHdpbGwgYmUgc3RvcmVkIGluIE4KKyMtLUludGVybWVkaXRhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKK0xPT1A6CisJZm1vdi54CQklZnAwLElOQVJHKCVhNikJCSMgKy0yKipLICogRiwgMSA8PSBGIDwgMgorCW1vdi53CQlJTkFSRyglYTYpLCVkMQorCW1vdi5sCQklZDEsJWExCQkJIyBzYXZlIGEgY29weSBvZiBEMAorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDEKKwlzdWIubAkJJjB4MDAwMDNGRkYsJWQxCQkjIGQwID0gSworCWNtcC5sCQklZDEsJjI4CisJYmxlLmIJCUxBU1RMT09QCitDT05UTE9PUDoKKwlzdWIubAkJJjI3LCVkMQkJCSMgZDAgPSBMIDo9IEstMjcKKwltb3YuYgkJJjAsRU5ERkxBRyglYTYpCisJYnJhLmIJCVdPUksKK0xBU1RMT09QOgorCWNsci5sCQklZDEJCQkjIGQwID0gTCA6PSAwCisJbW92LmIJCSYxLEVOREZMQUcoJWE2KQorCitXT1JLOgorIy0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorIy0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCisjLS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKKyMtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDIJCSMgQklBU0VEIEVYUCBPRiAyL1BJCisJc3ViLmwJCSVkMSwlZDIJCQkjIEJJQVNFRCBFWFAgT0YgMioqKC1MKSooMi9QSSkKKworCW1vdi5sCQkmMHhBMkY5ODM2RSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJJjB4NEU0NDE1MkEsRlBfU0NSMF9MTyglYTYpCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBGUF9TQ1IwID0gMioqKC1MKSooMi9QSSkKKworCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMgkjIGZwMiA9IFggKiAyKiooLUwpKigyL1BJKQorCisjLS1XRSBNVVNUIE5PVyBGSU5EIElOVChGUDIpLiBTSU5DRSBXRSBORUVEIFRISVMgVkFMVUUgSU4KKyMtLUZMT0FUSU5HIFBPSU5UIEZPUk1BVCwgVEhFIFRXTyBGTU9WRSdTCUZNT1ZFLkwgRlAgPC0tPiBOCisjLS1XSUxMIEJFIFRPTyBJTkVGRklDSUVOVC4gVEhFIFdBWSBBUk9VTkQgSVQgSVMgVEhBVAorIy0tKFNJR04oSU5BUkcpKjIqKjYzCSsJRlAyKSAtIFNJR04oSU5BUkcpKjIqKjYzIFdJTEwgR0lWRQorIy0tVVMgVEhFIERFU0lSRUQgVkFMVUUgSU4gRkxPQVRJTkcgUE9JTlQuCisJbW92LmwJCSVhMSwlZDIKKwlzd2FwCQklZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisJb3IubAkJJjB4NUYwMDAwMDAsJWQyCQkjIGQyID0gU0lHTihJTkFSRykqMioqNjMgSU4gU0dMCisJbW92LmwJCSVkMixUV09UTzYzKCVhNikKKwlmYWRkLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgVEhFIEZSQUNUSU9OQUwgUEFSVCBPRiBGUDEgSVMgUk9VTkRFRAorCWZzdWIucwkJVFdPVE82MyglYTYpLCVmcDIJIyBmcDIgPSBOCisjCWZpbnRyei54CSVmcDIsJWZwMgorCisjLS1DUkVBVElORyAyKiooTCkqUGlieTJfMSBhbmQgMioqKEwpKlBpYnkyXzIKKwltb3YubAkJJWQxLCVkMgkJCSMgZDIgPSBMCisKKwlhZGQubAkJJjB4MDAwMDNGRkYsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMioqTCAqIChQSS8yKQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCSYweEM5MEZEQUEyLEZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikJCSMgRlBfU0NSMCA9IDIqKihMKSAqIFBpYnkyXzEKKworCWFkZC5sCQkmMHgwMDAwM0ZERCwlZDEKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NUEzMDhEMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCQkjIEZQX1NDUjEgPSAyKiooTCkgKiBQaWJ5Ml8yCisKKwltb3YuYgkJRU5ERkxBRyglYTYpLCVkMQorCisjLS1XZSBhcmUgbm93IHJlYWR5IHRvIHBlcmZvcm0gKFIrcikgLSBOKlAxIC0gTipQMiwgUDEgPSAyKiooTCkgKiBQaWJ5Ml8xIGFuZAorIy0tUDIgPSAyKiooTCkgKiBQaWJ5Ml8yCisJZm1vdi54CQklZnAyLCVmcDQJCSMgZnA0ID0gTgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDQJIyBmcDQgPSBXID0gTipQMQorCWZtb3YueAkJJWZwMiwlZnA1CQkjIGZwNSA9IE4KKwlmbXVsLngJCUZQX1NDUjEoJWE2KSwlZnA1CSMgZnA1ID0gdyA9IE4qUDIKKwlmbW92LngJCSVmcDQsJWZwMwkJIyBmcDMgPSBXID0gTipQMQorCisjLS13ZSB3YW50IFArcCA9IFcrdyAgYnV0ICB8cHwgPD0gaGFsZiB1bHAgb2YgUAorIy0tVGhlbiwgd2UgbmVlZCB0byBjb21wdXRlICBBIDo9IFItUCAgIGFuZCAgYSA6PSByLXAKKwlmYWRkLngJCSVmcDUsJWZwMwkJIyBmcDMgPSBQCisJZnN1Yi54CQklZnAzLCVmcDQJCSMgZnA0ID0gVy1QCisKKwlmc3ViLngJCSVmcDMsJWZwMAkJIyBmcDAgPSBBIDo9IFIgLSBQCisJZmFkZC54CQklZnA1LCVmcDQJCSMgZnA0ID0gcCA9IChXLVApK3cKKworCWZtb3YueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEKKwlmc3ViLngJCSVmcDQsJWZwMQkJIyBmcDEgPSBhIDo9IHIgLSBwCisKKyMtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorIy0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwID0gUiA6PSBBK2EKKyMtLU5vIG5lZWQgdG8gY2FsY3VsYXRlIHIgaWYgdGhpcyBpcyB0aGUgbGFzdCBsb29wCisJY21wLmIJCSVkMSwmMAorCWJndC53CQlSRVNUT1JFCisKKyMtLU5lZWQgdG8gY2FsY3VsYXRlIHIKKwlmc3ViLngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBLVIKKwlmYWRkLngJCSVmcDMsJWZwMQkJIyBmcDEgPSByIDo9IChBLVIpK2EKKwlicmEudwkJTE9PUAorCitSRVNUT1JFOgorCWZtb3YubAkJJWZwMixJTlQoJWE2KQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSB7ZnAyLWZwNX0KKworCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwlyb3IubAkJJjEsJWQxCisKKwlicmEudwkJVEFOQ09OVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNhdGFuKCk6ICBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBhIG5vcm1hbGl6ZWQgbnVtYmVyCQkjCisjIHNhdGFuZCgpOiBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IGFyY3RhbihYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVN0ZXAgMS4gSWYgfFh8ID49IDE2IG9yIHxYfCA8IDEvMTYsIGdvIHRvIFN0ZXAgNS4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4gTGV0IFggPSBzZ24gKiAyKiprICogMS54eHh4eHh4eC4uLnguCQkJIworIwkJTm90ZSB0aGF0IGsgPSAtNCwgLTMsLi4uLCBvciAzLgkJCQkjCisjCQlEZWZpbmUgRiA9IHNnbiAqIDIqKmsgKiAxLnh4eHgxLCBpLmUuIHRoZSBmaXJzdCA1CSMKKyMJCXNpZ25pZmljYW50IGJpdHMgb2YgWCB3aXRoIGEgYml0LTEgYXR0YWNoZWQgYXQgdGhlIDYtdGgJIworIwkJYml0IHBvc2l0aW9uLiBEZWZpbmUgdSB0byBiZSB1ID0gKFgtRikgLyAoMSArIFgqRikuCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMy4gQXBwcm94aW1hdGUgYXJjdGFuKHUpIGJ5IGEgcG9seW5vbWlhbCBwb2x5LgkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA0LiBSZXR1cm4gYXJjdGFuKEYpICsgcG9seSwgYXJjdGFuKEYpIGlzIGZldGNoZWQgZnJvbSBhCSMKKyMJCXRhYmxlIG9mIHZhbHVlcyBjYWxjdWxhdGVkIGJlZm9yZWhhbmQuIEV4aXQuCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDUuIElmIHxYfCA+PSAxNiwgZ28gdG8gU3RlcCA3LgkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDYuIEFwcHJveGltYXRlIGFyY3RhbihYKSBieSBhbiBvZGQgcG9seW5vbWlhbCBpbiBYLiBFeGl0LgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDcuIERlZmluZSBYJyA9IC0xL1guIEFwcHJveGltYXRlIGFyY3RhbihYJykgYnkgYW4gb2RkCSMKKyMJCXBvbHlub21pYWwgaW4gWCcuCQkJCQkjCisjCQlBcmN0YW4oWCkgPSBzaWduKFgpKlBpLzIgKyBhcmN0YW4oWCcpLiBFeGl0LgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVRBTkEzOglsb25nCQkweEJGRjY2ODdFLDB4MzE0OTg3RDgKK0FUQU5BMjoJbG9uZwkJMHg0MDAyQUM2OSwweDM0QTI2REIzCitBVEFOQTE6CWxvbmcJCTB4QkZDMjQ3NkYsMHg0RTFEQTI4RQorCitBVEFOQjY6CWxvbmcJCTB4M0ZCMzQ0NDQsMHg3Rjg3Njk4OQorQVRBTkI1Oglsb25nCQkweEJGQjc0NEVFLDB4N0ZBRjQ1REIKK0FUQU5CNDoJbG9uZwkJMHgzRkJDNzFDNiwweDQ2OTQwMjIwCitBVEFOQjM6CWxvbmcJCTB4QkZDMjQ5MjQsMHg5MjE4NzJGOQorQVRBTkIyOglsb25nCQkweDNGQzk5OTk5LDB4OTk5OThGQTkKK0FUQU5CMToJbG9uZwkJMHhCRkQ1NTU1NSwweDU1NTU1NTU1CisKK0FUQU5DNToJbG9uZwkJMHhCRkI3MEJGMywweDk4NTM5RTZBCitBVEFOQzQ6CWxvbmcJCTB4M0ZCQzcxODcsMHg5NjJEMUQ3RAorQVRBTkMzOglsb25nCQkweEJGQzI0OTI0LDB4ODI3MTA3QjgKK0FUQU5DMjoJbG9uZwkJMHgzRkM5OTk5OSwweDk5OTYyNjNFCitBVEFOQzE6CWxvbmcJCTB4QkZENTU1NTUsMHg1NTU1NTUzNgorCitQUElCWTI6CWxvbmcJCTB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK05QSUJZMjoJbG9uZwkJMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorCitQVElOWToJbG9uZwkJMHgwMDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorTlRJTlk6CWxvbmcJCTB4ODAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworQVRBTlRCTDoKKwlsb25nCQkweDNGRkIwMDAwLDB4ODNEMTUyQzUsMHgwNjBCN0E1MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweDhCQzg1NDQ1LDB4NjU0OThCOEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg5M0JFNDA2MCwweDE3NjI2QjBELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4OUJCMzA3OEQsMHgzNUFFQzIwMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEEzQTY5QTUyLDB4NUREQ0U3REUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhBQjk4RTk0MywweDYyNzY1NjE5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QjM4OUU1MDIsMHhGOUM1OTg2MiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEJCNzk3RTQzLDB4NkIwOUU2RkIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhDMzY3QTVDNywweDM5RTVGNDQ2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4Q0I1NDRDNjEsMHhDRkY3RDVDNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEQzM0Y2MkY4LDB4MjQ4ODUzM0UsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhEQjI4REE4MSwweDYyNDA0Qzc3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RTMxMEE0MDcsMHg4QUQzNEYxOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEVBRjZCMEE4LDB4MTg4RUUxRUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhGMkRBRjE5NCwweDlEQkU3OUQ1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RkFCRDU4MTMsMHg2MUQ0N0UzRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDgzNDZBQzIxLDB4MDk1OUVDQzQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg4QjIzMkEwOCwweDMwNDI4MkQ4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OTJGQjcwQjgsMHhEMjlBRTJGOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDlBQ0Y0NzZGLDB4NUNDRDFDQjQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhBMjlFNzYzMCwweDQ5NTRGMjNGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QUE2OEM1RDAsMHg4QUI4NTIzMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEIyMkRGRkZELDB4OUQ1MzlGODMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhCOUVERUY0NSwweDNFOTAwRUE1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QzFBODVGMUMsMHhDNzVFM0VBNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEM5NUQxQkU4LDB4MjgxMzhERTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhEMTBCRjMwMCwweDg0MEQyREU0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RDhCNEIyQkEsMHg2QkMwNUU3QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEUwNTcyQTZCLDB4QjQyMzM1RjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFN0YzMkE3MCwweEVBOUNBQThGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RUY4ODg0MzIsMHg2NEVDRUZBQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEY3MTcwQTI4LDB4RUNDMDY2NjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4MTJGRDI4OCwweDMzMkRBRDMyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODhBOEQxQjEsMHgyMThFNEQ2NCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDkwMTJBQjNGLDB4MjNFNEFFRTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5NzZDQzNENCwweDExRTdGMUI5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OUVCNjg5NDksMHgzODg5QTIyNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEE1RUY3MkMzLDB4NDQ4NzM2MUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBRDE3MDBCQSwweEYwN0E3MjI3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QjQyQ0JDRkEsMHhGRDM3RUZCNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEJCMzAzQTk0LDB4MEJBODBGODksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDMjIxMTVDNiwweEZDQUVCQkFGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QzhGRUYzRTYsMHg4NjMzMTIyMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweENGQzk4MzMwLDB4QjQwMDBDNzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhENjgwN0FBMSwweDEwMkM1QkY5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4REQyMzk5QkMsMHgzMTI1MkFBMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEUzQjJBODU1LDB4NkI4RkM1MTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFQTJENzY0RiwweDY0MzE1OTg5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RjNCRjVCRjgsMHhCQUQxQTIxRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgwMUNFMzlFLDB4MEQyMDVDOUEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NjMwQTJEQSwweERBMUVEMDY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEMxQUQ0NDUsMHhGM0UwOUI4QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkxREI4RjE2LDB4NjRGMzUwRTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NzczMTQyMCwweDM2NUU1MzhDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUNFMUM4RTYsMHhBMEI4Q0RCQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEEyMjgzMkRCLDB4Q0FEQUFFMDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNzQ2RjJERCwweEI3NjAyMjk0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUMzRUMwRkIsMHg5OTdERDZBMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEIxMTA2ODhBLDB4RUJEQzZGNkEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCNUJDQzQ5MCwweDU5RUNDNEIwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkE0NEJDN0QsMHhENDcwNzgyRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJFQTk0MTQ0LDB4RkQwNDlBQUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDMkVCNEFCQiwweDY2MTYyOEI2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzcwQkQ1NEMsMHhFNjAyRUUxNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweENEMDAwNTQ5LDB4QURFQzcxNTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhENDg0NTdEMiwweEQ4RUE0RUEzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4REI5NDhEQTcsMHgxMkRFQ0UzQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEUyMzg1NUY5LDB4NjlFODA5NkEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFODc3MTEyOSwweEM0MzUzMjU5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RUU1N0MxNkUsMHgwRDM3OUMwRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEYzRTEwMjExLDB4QTg3QzM3NzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGOTE5MDM5RCwweDc1OEI4RDQxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RkUwNThCOEYsMHg2NDkzNUZCMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgxNTVGQjQ5LDB4N0I2ODVEMDQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Mzg4OUUzNSwweDQ5RDEwOEUxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODU5Q0ZBNzYsMHg1MTFENzI0QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDg3OTUyRUNGLDB4RkY4MTMxRTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4OTczMkZEMSwweDk1NTc2NDFCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OEIzOENBRDEsMHgwMTkzMkEzNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhDRTdBOEQ4LDB4MzAxRUU2QjUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4RjQ2QTM5RSwweDJFQUU1MjgxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTIyREE3RDcsMHg5MTg4ODQ4NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDk0RDE5RkNCLDB4REVERjUyNDEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NzNBQjk0NCwweDE5RDJBMDhCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTk2RkYwMEUsMHgwOEUxMEI5NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDlCNzczRjk1LDB4MTIzMjFEQTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RDU1Q0MzMiwweDBGOTM1NjI0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OUYxMDA1NzUsMHgwMDZDQzU3MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEEwQTlDMjkwLDB4RDk3Q0MwNkMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMjI2NTlFQiwweEVCQzA2MzBBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTM4OEI0QUYsMHhGNkVGMEVDOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE0RDM1RjEwLDB4NjFEMjkyQzQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNjA4OTVEQywweEZCRTMxODdFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTcyQTUxREMsMHg3MzY3QkVBQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE4M0E1MTUzLDB4MDk1NjE2OEYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBOTNBMjAwNywweDc1Mzk1NDZFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QUE5RTcyNDUsMHgwMjNCMjYwNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFDNEM4NEJBLDB4NkZFNEQ1OEYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRENFNEE0QSwweDYwNkI5NzEyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QUYyQTJEQ0QsMHg4RDI2M0M5QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIwNjU2RjgxLDB4RjIyMjY1QzcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMTg0NjUxNSwweDBGNzE0OTZBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjI4QUFBMTUsMHg2RjlBREEzNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIzN0I0NEZGLDB4Mzc2NkI4OTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNDU4QzNEQywweEU5NjMwNDMzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjUyNTUyOUQsMHg1NjIyNDZCRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI1RTJDQ0E5LDB4NUY5RDg4Q0MsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNjkyQ0FEQSwweDdBQ0ExQURBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjczNkFFQTcsMHhBNjkyNTgzOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI3Q0ZBQjI4LDB4N0U5RjdCMzYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCODVFQ0M2NiwweENCMjE5ODM1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjhFNEZENUEsMHgyMEE1OTNEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI5OUY0MUY2LDB4NEFGRjlCQjUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQTdGMUUxNywweDg0MkJCRTdCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkI0NzEyODUsMHg3NjM3RTE3RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJCRkFCRThBLDB4NDc4OERGNkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQzlEMEZBRCwweDJCNjg5RDc5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkQzMDZBMzksMHg0NzFFQ0Q4NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJEQjZDNzMxLDB4ODU2QUYxOEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRTMxQ0FDNSwweDAyRTgwRDcwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkVBMkQ1NUMsMHhFMzMxOTRFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGMEIxMEI3LDB4QzAzMTI4RjAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRjZCN0ExOCwweERBQ0I3NzhELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkZDNEVBNDYsMHg2M0ZBMThGNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEMwMTgxQkRFLDB4OEI4OUE0NTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMDY1QjA2NiwweENGQkY2NDM5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzBBRTM0NUYsMHg1NjM0MEFFNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEMwRjIyMjkxLDB4OUNCOUU2QTcsMHgwMDAwMDAwMAorCisJc2V0CQlYLEZQX1NDUjAKKwlzZXQJCVhEQ0FSRSxYKzIKKwlzZXQJCVhGUkFDLFgrNAorCXNldAkJWEZSQUNMTyxYKzgKKworCXNldAkJQVRBTkYsRlBfU0NSMQorCXNldAkJQVRBTkZISSxBVEFORis0CisJc2V0CQlBVEFORkxPLEFUQU5GKzgKKworCWdsb2JhbAkJc2F0YW4KKyMtLUVOVFJZIFBPSU5UIEZPUiBBVEFOKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworc2F0YW46CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWZtb3YueAkJJWZwMCxYKCVhNikKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisKKwljbXAubAkJJWQxLCYweDNGRkI4MDAwCQkjIHxYfCA+PSAxLzE2PworCWJnZS5iCQlBVEFOT0sxCisJYnJhLncJCUFUQU5TTQorCitBVEFOT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwMkZGRkYJCSMgfFh8IDwgMTYgPworCWJsZS5iCQlBVEFOTUFJTgorCWJyYS53CQlBVEFOQklHCisKKyMtLVRIRSBNT1NUIExJS0VMWSBDQVNFLCB8WHwgSU4gWzEvMTYsIDE2KS4gV0UgVVNFIFRBQkxFIFRFQ0hOSVFVRQorIy0tVEhFIElERUEgSVMgQVRBTihYKSA9IEFUQU4oRikgKyBBVEFOKCBbWC1GXSAvIFsxK1hGXSApLgorIy0tU08gSUYgRiBJUyBDSE9TRU4gVE8gQkUgQ0xPU0UgVE8gWCBBTkQgQVRBTihGKSBJUyBTVE9SRUQgSU4KKyMtLUEgVEFCTEUsIEFMTCBXRSBORUVEIElTIFRPIEFQUFJPWElNQVRFIEFUQU4oVSkgV0hFUkUKKyMtLVUgPSAoWC1GKS8oMStYRikgSVMgU01BTEwgKFJFTUVNQkVSIEYgSVMgQ0xPU0UgVE8gWCkuIElUIElTCisjLS1UUlVFIFRIQVQgQSBESVZJREUgSVMgTk9XIE5FRURFRCwgQlVUIFRIRSBBUFBST1hJTUFUSU9OIEZPUgorIy0tQVRBTihVKSBJUyBBIFZFUlkgU0hPUlQgUE9MWU5PTUlBTCBBTkQgVEhFIElOREVYSU5HIFRPCisjLS1GRVRDSCBGIEFORCBTQVZJTkcgT0YgUkVHSVNURVJTIENBTiBCRSBBTEwgSElERUQgVU5ERVIgVEhFCisjLS1ESVZJREUuIElOIFRIRSBFTkQgVEhJUyBNRVRIT0QgSVMgTVVDSCBGQVNURVIgVEhBTiBBIFRSQURJVElPTkFMCisjLS1PTkUuIE5PVEUgQUxTTyBUSEFUIFRIRSBUUkFESVRJT05BTCBTQ0hFTUUgVEhBVCBBUFBST1hJTUFURQorIy0tQVRBTihYKSBESVJFQ1RMWSBXSUxMIE5FRUQgVE8gVVNFIEEgUkFUSU9OQUwgQVBQUk9YSU1BVElPTgorIy0tKERJVklTSU9OIE5FRURFRCkgQU5ZV0FZIEJFQ0FVU0UgQSBQT0xZTk9NSUFMIEFQUFJPWElNQVRJT04KKyMtLVdJTEwgSU5WT0xWRSBBIFZFUlkgTE9ORyBQT0xZTk9NSUFMLgorCisjLS1OT1cgV0UgU0VFIFggQVMgKy0yXksgKiAxLkJCQkJCQkIuLi4uQiA8LSAxLiArIDYzIEJJVFMKKyMtLVdFIENIT1NFIEYgVE8gQkUgKy0yXksgKiAxLkJCQkIxCisjLS1USEFUIElTIElUIE1BVENIRVMgVEhFIEVYUE9ORU5UIEFORCBGSVJTVCA1IEJJVFMgT0YgWCwgVEhFCisjLS1TSVhUSCBCSVRTIElTIFNFVCBUTyBCRSAxLiBTSU5DRSBLID0gLTQsIC0zLCAuLi4sIDMsIFRIRVJFCisjLS1BUkUgT05MWSA4IFRJTUVTIDE2ID0gMl43ID0gMTI4IHxGfCdTLiBTSU5DRSBBVEFOKC18RnwpIElTCisjLS0gLUFUQU4ofEZ8KSwgV0UgTkVFRCBUTyBTVE9SRSBPTkxZIEFUQU4ofEZ8KS4KKworQVRBTk1BSU46CisKKwlhbmQubAkJJjB4RjgwMDAwMDAsWEZSQUMoJWE2KQkjIEZJUlNUIDUgQklUUworCW9yLmwJCSYweDA0MDAwMDAwLFhGUkFDKCVhNikJIyBTRVQgNi1USCBCSVQgVE8gMQorCW1vdi5sCQkmMHgwMDAwMDAwMCxYRlJBQ0xPKCVhNikgIyBMT0NBVElPTiBPRiBYIElTIE5PVyBGCisKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBGUDEgSVMgWAorCWZtdWwueAkJWCglYTYpLCVmcDEJCSMgRlAxIElTIFgqRiwgTk9URSBUSEFUIFgqRiA+IDAKKwlmc3ViLngJCVgoJWE2KSwlZnAwCQkjIEZQMCBJUyBYLUYKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyBGUDEgSVMgMSArIFgqRgorCWZkaXYueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBVID0gKFgtRikvKDErWCpGKQorCisjLS1XSElMRSBUSEUgRElWSVNJT04gSVMgVEFLSU5HIElUUyBUSU1FLCBXRSBGRVRDSCBBVEFOKHxGfCkKKyMtLUNSRUFURSBBVEFOKEYpIEFORCBTVE9SRSBJVCBJTiBBVEFORiwgQU5ECisjLS1TQVZFIFJFR0lTVEVSUyBGUDIuCisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBTQVZFIGQyIFRFTVBPUkFSSUxZCisJbW92LmwJCSVkMSwlZDIJCQkjIFRIRSBFWFAgQU5EIDE2IEJJVFMgT0YgWAorCWFuZC5sCQkmMHgwMDAwNzgwMCwlZDEJCSMgNCBWQVJZSU5HIEJJVFMgT0YgRidTIEZSQUNUSU9OCisJYW5kLmwJCSYweDdGRkYwMDAwLCVkMgkJIyBFWFBPTkVOVCBPRiBGCisJc3ViLmwJCSYweDNGRkIwMDAwLCVkMgkJIyBLKzQKKwlhc3IubAkJJjEsJWQyCisJYWRkLmwJCSVkMiwlZDEJCQkjIFRIRSA3IEJJVFMgSURFTlRJRllJTkcgRgorCWFzci5sCQkmNywlZDEJCQkjIElOREVYIElOVE8gVEJMIE9GIEFUQU4ofEZ8KQorCWxlYQkJQVRBTlRCTCglcGMpLCVhMQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIE9GIEFUQU4ofEZ8KQorCW1vdi5sCQkoJWExKSssQVRBTkYoJWE2KQorCW1vdi5sCQkoJWExKSssQVRBTkZISSglYTYpCisJbW92LmwJCSglYTEpKyxBVEFORkxPKCVhNikJIyBBVEFORiBJUyBOT1cgQVRBTih8RnwpCisJbW92LmwJCVgoJWE2KSwlZDEJCSMgTE9BRCBTSUdOIEFORCBFWFBPLiBBR0FJTgorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgU0lHTihGKQorCW9yLmwJCSVkMSxBVEFORiglYTYpCQkjIEFUQU5GIElTIE5PVyBTSUdOKEYpKkFUQU4ofEZ8KQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIFJFU1RPUkUgZDIKKworIy0tVEhBVCdTIEFMTCBJIEhBVkUgVE8gRE8gRk9SIE5PVywKKyMtLUJVVCBBTEFTLCBUSEUgRElWSURFIElTIFNUSUxMIENSQU5LSU5HIQorCisjLS1VIElOIEZQMCwgV0UgQVJFIE5PVyBSRUFEWSBUTyBDT01QVVRFIEFUQU4oVSkgQVMKKyMtLVUgKyBBMSpVKlYqKEEyICsgViooQTMgKyBWKSksIFYgPSBVKlUKKyMtLVRIRSBQT0xZTk9NSUFMIE1BWSBMT09LIFNUUkFOR0UsIEJVVCBJUyBORVZFUlRIRUxFU1MgQ09SUkVDVC4KKyMtLVRIRSBOQVRVUkFMIEZPUk0gSVMgVSArIFUqViooQTEgKyBWKihBMiArIFYqQTMpKQorIy0tV0hBVCBXRSBIQVZFIEhFUkUgSVMgTUVSRUxZCUExID0gQTMsIEEyID0gQTEvQTMsIEEzID0gQTIvQTMuCisjLS1USEUgUkVBU09OIEZPUiBUSElTIFJFQVJSQU5HRU1FTlQgSVMgVE8gTUFLRSBUSEUgSU5ERVBFTkRFTlQKKyMtLVBBUlRTIEExKlUqViBBTkQgKEEyICsgLi4uIFNUVUZGKSBNT1JFIExPQUQtQkFMQU5DRUQKKworCWZtb3ZtLngJCSYweDA0LC0oJXNwKQkJIyBzYXZlIGZwMgorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQorCWZtb3YuZAkJQVRBTkEzKCVwYyksJWZwMgorCWZhZGQueAkJJWZwMSwlZnAyCQkjIEEzK1YKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBWKihBMytWKQorCWZtdWwueAkJJWZwMCwlZnAxCQkjIFUqVgorCWZhZGQuZAkJQVRBTkEyKCVwYyksJWZwMgkjIEEyK1YqKEEzK1YpCisJZm11bC5kCQlBVEFOQTEoJXBjKSwlZnAxCSMgQTEqVSpWCisJZm11bC54CQklZnAyLCVmcDEJCSMgQTEqVSpWKihBMitWKihBMytWKSkKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBBVEFOKFUpLCBGUDEgUkVMRUFTRUQKKworCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyByZXN0b3JlIGZwMgorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJZmFkZC54CQlBVEFORiglYTYpLCVmcDAJCSMgQVRBTihYKQorCWJyYQkJdF9pbngyCisKK0FUQU5CT1JTOgorIy0tfFh8IElTIElOIGQwIElOIENPTVBBQ1QgRk9STS4gRlAxLCBkMCBTQVZFRC4KKyMtLUZQMCBJUyBYIEFORCB8WHwgPD0gMS8xNiBPUiB8WHwgPj0gMTYuCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC53CQlBVEFOQklHCQkJIyBJLkUuIHxYfCA+PSAxNgorCitBVEFOU006CisjLS18WHwgPD0gMS8xNgorIy0tSUYgfFh8IDwgMl4oLTQwKSwgUkVUVVJOIFggQVMgQU5TV0VSLiBPVEhFUldJU0UsIEFQUFJPWElNQVRFCisjLS1BVEFOKFgpIEJZIFggKyBYKlkqKEIxK1kqKEIyK1kqKEIzK1kqKEI0K1kqKEI1K1kqQjYpKSkpKQorIy0tV0hJQ0ggSVMgWCArIFgqWSooIFtCMStaKihCMytaKkI1KV0gKyBbWSooQjIrWiooQjQrWipCNildICkKKyMtLVdIRVJFIFkgPSBYKlgsIEFORCBaID0gWSpZLgorCisJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAorCWJsdC53CQlBVEFOVElOWQorCisjLS1DT01QVVRFIFBPTFlOT01JQUwKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUE8gSVMgWSA9IFgqWAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgWiA9IFkqWQorCisJZm1vdi5kCQlBVEFOQjYoJXBjKSwlZnAyCisJZm1vdi5kCQlBVEFOQjUoJXBjKSwlZnAzCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBaKkI2CisJZm11bC54CQklZnAxLCVmcDMJCSMgWipCNQorCisJZmFkZC5kCQlBVEFOQjQoJXBjKSwlZnAyCSMgQjQrWipCNgorCWZhZGQuZAkJQVRBTkIzKCVwYyksJWZwMwkjIEIzK1oqQjUKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFoqKEI0K1oqQjYpCisJZm11bC54CQklZnAzLCVmcDEJCSMgWiooQjMrWipCNSkKKworCWZhZGQuZAkJQVRBTkIyKCVwYyksJWZwMgkjIEIyK1oqKEI0K1oqQjYpCisJZmFkZC5kCQlBVEFOQjEoJXBjKSwlZnAxCSMgQjErWiooQjMrWipCNSkKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFkqKEIyK1oqKEI0K1oqQjYpKQorCWZtdWwueAkJWCglYTYpLCVmcDAJCSMgWCpZCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBbQjErWiooQjMrWipCNSldK1tZKihCMitaKihCNCtaKkI2KSldCisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBYKlkqKFtCMStaKihCMytaKkI1KV0rW1kqKEIyK1oqKEI0K1oqQjYpKV0pCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKKwlmYWRkLngJCVgoJWE2KSwlZnAwCisJYnJhCQl0X2lueDIKKworQVRBTlRJTlk6CisjLS18WHwgPCAyXigtNDApLCBBVEFOKFgpID0gWAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCisJYnJhCQl0X2NhdGNoCisKK0FUQU5CSUc6CisjLS1JRiB8WHwgPiAyXigxMDApLCBSRVRVUk4JU0lHTihYKSooUEkvMiAtIFRJTlkpLiBPVEhFUldJU0UsCisjLS1SRVRVUk4gU0lHTihYKSpQSS8yICsgQVRBTigtMS9YKS4KKwljbXAubAkJJWQxLCYweDQwNjM4MDAwCisJYmd0LncJCUFUQU5IVUdFCisKKyMtLUFQUFJPWElNQVRFIEFUQU4oLTEvWCkgQlkKKyMtLVgnK1gnKlkqKEMxK1kqKEMyK1kqKEMzK1kqKEM0K1kqQzUpKSkpLCBYJyA9IC0xL1gsIFkgPSBYJypYJworIy0tVEhJUyBDQU4gQkUgUkUtV1JJVFRFTiBBUworIy0tWCcrWCcqWSooIFtDMStaKihDMytaKkM1KV0gKyBbWSooQzIrWipDNCldICksIFogPSBZKlkuCisKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbW92LnMJCSYweEJGODAwMDAwLCVmcDEJIyBMT0FEIC0xCisJZmRpdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIC0xL1gKKworIy0tRElWSURFIElTIFNUSUxMIENSQU5LSU5HCisKKwlmbW92LngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgWCcKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgWSA9IFgnKlgnCisJZm1vdi54CQklZnAxLFgoJWE2KQkJIyBYIElTIFJFQUxMWSBYJworCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgWiA9IFkqWQorCisJZm1vdi5kCQlBVEFOQzUoJXBjKSwlZnAzCisJZm1vdi5kCQlBVEFOQzQoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBaKkM1CisJZm11bC54CQklZnAxLCVmcDIJCSMgWipCNAorCisJZmFkZC5kCQlBVEFOQzMoJXBjKSwlZnAzCSMgQzMrWipDNQorCWZhZGQuZAkJQVRBTkMyKCVwYyksJWZwMgkjIEMyK1oqQzQKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFoqKEMzK1oqQzUpLCBGUDMgUkVMRUFTRUQKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBZKihDMitaKkM0KQorCisJZmFkZC5kCQlBVEFOQzEoJXBjKSwlZnAxCSMgQzErWiooQzMrWipDNSkKKwlmbXVsLngJCVgoJWE2KSwlZnAwCQkjIFgnKlkKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIFtZKihDMitaKkM0KV0rW0MxK1oqKEMzK1oqQzUpXQorCisJZm11bC54CQklZnAxLCVmcDAJCSMgWCcqWSooW0IxK1oqKEIzK1oqQjUpXQorIwkJCQkJLi4uCStbWSooQjIrWiooQjQrWipCNikpXSkKKwlmYWRkLngJCVgoJWE2KSwlZnAwCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKKwl0c3QuYgkJKCVhMCkKKwlicGwuYgkJcG9zX2JpZworCituZWdfYmlnOgorCWZhZGQueAkJTlBJQlkyKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCitwb3NfYmlnOgorCWZhZGQueAkJUFBJQlkyKCVwYyksJWZwMAorCWJyYQkJdF9waW54MgorCitBVEFOSFVHRToKKyMtLVJFVFVSTiBTSUdOKFgpKihQSUJZMiAtIFRJTlkpID0gU0lHTihYKSpQSUJZMiAtIFNJR04oWCkqVElOWQorCXRzdC5iCQkoJWEwKQorCWJwbC5iCQlwb3NfaHVnZQorCituZWdfaHVnZToKKwlmbW92LngJCU5QSUJZMiglcGMpLCVmcDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJUFRJTlkoJXBjKSwlZnAwCisJYnJhCQl0X21pbngyCisKK3Bvc19odWdlOgorCWZtb3YueAkJUFBJQlkyKCVwYyksJWZwMAorCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQlOVElOWSglcGMpLCVmcDAKKwlicmEJCXRfcGlueDIKKworCWdsb2JhbAkJc2F0YW5kCisjLS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCitzYXRhbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYXNpbigpOiAgY29tcHV0ZXMgdGhlIGludmVyc2Ugc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2FzaW5kKCk6IGNvbXB1dGVzIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGFyY3NpbihYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlBU0lOCQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxLCBnbyB0byAzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gKHxYfCA8IDEpIENhbGN1bGF0ZSBhc2luKFgpIGJ5CQkJCSMKKyMJCXogOj0gc3FydCggWzEtWF1bMStYXSApCQkJCQkjCisjCQlhc2luKFgpID0gYXRhbiggeCAvIHogKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAofFh8ID0gMSkgc2duIDo9IHNpZ24oWCksIHJldHVybiBhc2luKFgpIDo9IHNnbiAqIFBpLzIuIEV4aXQuIworIwkJCQkJCQkJCSMKKyMJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4JIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2FzaW4KK3Nhc2luOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJnZS5iCQlBU0lOQklHCisKKyMgVGhpcyBjYXRjaCBpcyBhZGRlZCBoZXJlIGZvciB0aGUgJzA2MCBRU1AuIE9yaWdpbmFsbHksIHRoZSBjYWxsIHRvCisjIHNhdGFuKCkgd291bGQgaGFuZGxlIHRoaXMgY2FzZSBieSBjYXVzaW5nIHRoZSBleGNlcHRpb24gd2hpY2ggd291bGQKKyMgbm90IGJlIGNhdWdodCB1bnRpbCBnZW5fZXhjZXB0KCkuIE5vdywgd2l0aCB0aGUgZXhjZXB0aW9ucyBiZWluZworIyBkZXRlY3RlZCBpbnNpZGUgb2Ygc2F0YW4oKSwgdGhlIGV4Y2VwdGlvbiB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCB0aGVyZQorIyBpbnN0ZWFkIG9mIGluc2lkZSBzYXNpbigpIGFzIGV4cGVjdGVkLgorCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAKKwlibHQudwkJQVNJTlRJTlkKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorIy0tQVNJTihYKSA9IEFUQU4oIFggLyBTUVJUKCAoMS1YKSgxK1gpICkgKQorCitBU0lOTUFJTjoKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDEKKwlmc3ViLngJCSVmcDAsJWZwMQkJIyAxLVgKKwlmbW92bS54CQkmMHg0LC0oJXNwKQkJIyAge2ZwMn0KKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDIKKwlmYWRkLngJCSVmcDAsJWZwMgkJIyAxK1gKKwlmbXVsLngJCSVmcDIsJWZwMQkJIyAoMStYKSgxLVgpCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjICB7ZnAyfQorCWZzcXJ0LngJCSVmcDEJCQkjIFNRUlQoWzEtWF1bMStYXSkKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBYL1NRUlQoWzEtWF1bMStYXSkKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBYL1NRUlQoLi4uKQorCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFgvU1FSVCguLi4pCisJYnNyCQlzYXRhbgorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBYL1NRUlQoLi4uKSBmcm9tIHN0YWNrCisJYnJhCQl0X2lueDIKKworQVNJTkJJRzoKKwlmYWJzLngJCSVmcDAJCQkjIHxYfAorCWZjbXAucwkJJWZwMCwmMHgzRjgwMDAwMAorCWZiZ3QJCXRfb3BlcnIJCQkjIGNhdXNlIGFuIG9wZXJyIGV4Y2VwdGlvbgorCisjLS18WHwgPSAxLCBBU0lOKFgpID0gKy0gUEkvMi4KK0FTSU5PTkU6CisJZm1vdi54CQlQSUJZMiglcGMpLCVmcDAKKwltb3YubAkJKCVhMCksJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBTSUdOIEJJVCBPRiBYCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjICstMSBJTiBTR0wgRk9STUFUCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgcHVzaCBTSUdOKFgpIElOIFNHTC1GTVQKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtdWwucwkJKCVzcCkrLCVmcDAKKwlicmEJCXRfaW54MgorCisjLS18WHwgPCAyXigtNDApLCBBVEFOKFgpID0gWAorQVNJTlRJTlk6CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24KKwlicmEJCXRfY2F0Y2gKKworCWdsb2JhbAkJc2FzaW5kCisjLS1BU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3Nhc2luZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNhY29zKCk6ICBjb21wdXRlcyB0aGUgaW52ZXJzZSBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNhY29zZCgpOiBjb21wdXRlcyB0aGUgaW52ZXJzZSBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IGFyY2NvcyhYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIwlBQ09TCQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxLCBnbyB0byAzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gKHxYfCA8IDEpIENhbGN1bGF0ZSBhY29zKFgpIGJ5CQkJCSMKKyMJCXogOj0gKDEtWCkgLyAoMStYKQkJCQkJIworIwkJYWNvcyhYKSA9IDIgKiBhdGFuKCBzcXJ0KHopICkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKHxYfCA9IDEpIElmIFggPiAwLCByZXR1cm4gMC4gT3RoZXJ3aXNlLCByZXR1cm4gUGkuIEV4aXQuCSMKKyMJCQkJCQkJCQkjCisjCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNhY29zCitzYWNvczoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQkJIyBwYWNrIGV4cCB3LyB1cHBlciAxNiBmcmFjdGlvbgorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ2UuYgkJQUNPU0JJRworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCisjLS1BQ09TKFgpID0gMiAqIEFUQU4oCVNRUlQoICgxLVgpLygxK1gpICkgKQorCitBQ09TTUFJTjoKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDEKKwlmYWRkLngJCSVmcDAsJWZwMQkJIyAxK1gKKwlmbmVnLngJCSVmcDAJCQkjIC1YCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgMS1YCisJZmRpdi54CQklZnAxLCVmcDAJCSMgKDEtWCkvKDErWCkKKwlmc3FydC54CQklZnAwCQkJIyBTUVJUKCgxLVgpLygxK1gpKQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgb3JpZ2luYWwgdXNlcnMgZnBjcgorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBTUVJUKC4uLikgdG8gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBzcXJ0CisJYnNyCQlzYXRhbgkJCSMgQVRBTihTUVJUKFsxLVhdL1sxK1hdKSkKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgU1FSVCguLi4pIGZyb20gc3RhY2sKKworCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmFkZC54CQklZnAwLCVmcDAJCSMgMiAqIEFUQU4oIFNUVUZGICkKKwlicmEJCXRfcGlueDIKKworQUNPU0JJRzoKKwlmYWJzLngJCSVmcDAKKwlmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKKwlmYmd0CQl0X29wZXJyCQkJIyBjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KKworIy0tfFh8ID0gMSwgQUNPUyhYKSA9IDAgT1IgUEkKKwl0c3QuYgkJKCVhMCkJCQkjIGlzIFggcG9zaXRpdmUgb3IgbmVnYXRpdmU/CisJYnBsLmIJCUFDT1NQMQorCisjLS1YID0gLTEKKyNSZXR1cm5zIFBJIGFuZCBpbmV4YWN0IGV4Y2VwdGlvbgorQUNPU00xOgorCWZtb3YueAkJUEkoJXBjKSwlZnAwCQkjIGxvYWQgUEkKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBsb2FkIHJvdW5kIG1vZGUscHJlYworCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAkjIGFkZCBhIHNtYWxsIHZhbHVlCisJYnJhCQl0X3BpbngyCisKK0FDT1NQMToKKwlicmEJCWxkX3B6ZXJvCQkjIGFuc3dlciBpcyBwb3NpdGl2ZSB6ZXJvCisKKwlnbG9iYWwJCXNhY29zZAorIy0tQUNPUyhYKSA9IFBJLzIgRk9SIERFTk9STUFMSVpFRCBYCitzYWNvc2Q6CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCB1c2VyJ3Mgcm5kIG1vZGUvcHJlYworCWZtb3YueAkJUElCWTIoJXBjKSwlZnAwCisJYnJhCQl0X3BpbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2V0b3goKTogICAgY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2V0b3hkKCk6ICAgY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIyBzZXRveG0xKCk6ICBjb21wdXRlcyB0aGUgZXhwb25lbnRpYWwgbWludXMgMSBmb3IgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2V0b3htMWQoKTogY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIG1pbnVzIDEgZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IGV4cChYKSBvciBleHAoWCktMQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMC44NSB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gYW5kIElNUExFTUVOVEFUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMJc2V0b3hkCQkJCQkJCQkjCisjCS0tLS0tLQkJCQkJCQkJIworIwlTdGVwIDEuCVNldCBhbnMgOj0gMS4wCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLglSZXR1cm4JYW5zIDo9IGFucyArIHNpZ24oWCkqMl4oLTEyNikuIEV4aXQuCQkjCisjCU5vdGVzOglUaGlzIHdpbGwgYWx3YXlzIGdlbmVyYXRlIG9uZSBleGNlcHRpb24gLS0gaW5leGFjdC4JIworIwkJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCXNldG94CQkJCQkJCQkjCisjCS0tLS0tCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDEuCUZpbHRlciBvdXQgZXh0cmVtZSBjYXNlcyBvZiBpbnB1dCBhcmd1bWVudC4JCSMKKyMJCTEuMQlJZiB8WHwgPj0gMl4oLTY1KSwgZ28gdG8gU3RlcCAxLjMuCQkjCisjCQkxLjIJR28gdG8gU3RlcCA3LgkJCQkJIworIwkJMS4zCUlmIHxYfCA8IDE2MzgwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgkJIworIwkJMS40CUdvIHRvIFN0ZXAgOC4JCQkJCSMKKyMJTm90ZXM6CVRoZSB1c3VhbCBjYXNlIHNob3VsZCB0YWtlIHRoZSBicmFuY2hlcyAxLjEgLT4gMS4zIC0+IDIuIworIwkJVG8gYXZvaWQgdGhlIHVzZSBvZiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgYQkjCisjCQljb21wYWN0IHJlcHJlc2VudGF0aW9uIG9mIHxYfCBpcyB1c2VkLiBUaGlzIGZvcm1hdCBpcyBhCSMKKyMJCTMyLWJpdCBpbnRlZ2VyLCB0aGUgdXBwZXIgKG1vcmUgc2lnbmlmaWNhbnQpIDE2IGJpdHMJIworIwkJYXJlIHRoZSBzaWduIGFuZCBiaWFzZWQgZXhwb25lbnQgZmllbGQgb2YgfFh8OyB0aGUJIworIwkJbG93ZXIgMTYgYml0cyBhcmUgdGhlIDE2IG1vc3Qgc2lnbmlmaWNhbnQgZnJhY3Rpb24JIworIwkJKGluY2x1ZGluZyB0aGUgZXhwbGljaXQgYml0KSBiaXRzIG9mIHxYfC4gQ29uc2VxdWVudGx5LAkjCisjCQl0aGUgY29tcGFyaXNvbnMgaW4gU3RlcHMgMS4xIGFuZCAxLjMgY2FuIGJlIHBlcmZvcm1lZAkjCisjCQlieSBpbnRlZ2VyIGNvbXBhcmlzb24uIE5vdGUgYWxzbyB0aGF0IHRoZSBjb25zdGFudAkjCisjCQkxNjM4MCBsb2coMikgdXNlZCBpbiBTdGVwIDEuMyBpcyBhbHNvIGluIHRoZSBjb21wYWN0CSMKKyMJCWZvcm0uIFRodXMgdGFraW5nIHRoZSBicmFuY2ggdG8gU3RlcCAyIGd1YXJhbnRlZXMJIworIwkJfFh8IDwgMTYzODAgbG9nKDIpLiBUaGVyZSBpcyBubyBoYXJtIHRvIGhhdmUgYSBzbWFsbAkjCisjCQludW1iZXIgb2YgY2FzZXMgd2hlcmUgfFh8IGlzIGxlc3MgdGhhbiwJYnV0IGNsb3NlIHRvLAkjCisjCQkxNjM4MCBsb2coMikgYW5kIHRoZSBicmFuY2ggdG8gU3RlcCA5IGlzIHRha2VuLgkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLglDYWxjdWxhdGUgTiA9IHJvdW5kLXRvLW5lYXJlc3QtaW50KCBYICogNjQvbG9nMiApLgkjCisjCQkyLjEJU2V0IEFkakZsYWcgOj0gMCAoaW5kaWNhdGVzIHRoZSBicmFuY2ggMS4zIC0+IDIgIworIwkJCXdhcyB0YWtlbikJCQkJCSMKKyMJCTIuMglOIDo9IHJvdW5kLXRvLW5lYXJlc3QtaW50ZWdlciggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4zCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sICMKKyMJCQlvciA2My4JCQkJCQkjCisjCQkyLjQJQ2FsY3VsYXRlCU0gPSAoTiAtIEopLzY0OyBzbyBOID0gNjRNICsgSi4JIworIwkJMi41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIG9mCSMKKyMJCQkyXihKLzY0KS4JCQkJCSMKKyMJCTIuNglDcmVhdGUgdGhlIHZhbHVlIFNjYWxlID0gMl5NLgkJCSMKKyMJTm90ZXM6CVRoZSBjYWxjdWxhdGlvbiBpbiAyLjIgaXMgcmVhbGx5IHBlcmZvcm1lZCBieQkJIworIwkJCVogOj0gWCAqIGNvbnN0YW50CQkJCSMKKyMJCQlOIDo9IHJvdW5kLXRvLW5lYXJlc3QtaW50ZWdlcihaKQkJIworIwkJd2hlcmUJCQkJCQkJIworIwkJCWNvbnN0YW50IDo9IHNpbmdsZS1wcmVjaXNpb24oIDY0L2xvZyAyICkuCSMKKyMJCQkJCQkJCQkjCisjCQlVc2luZyBhIHNpbmdsZS1wcmVjaXNpb24gY29uc3RhbnQgYXZvaWRzIG1lbW9yeQkJIworIwkJYWNjZXNzLiBBbm90aGVyIGVmZmVjdCBvZiB1c2luZyBhIHNpbmdsZS1wcmVjaXNpb24JIworIwkJImNvbnN0YW50IiBpcyB0aGF0IHRoZSBjYWxjdWxhdGVkIHZhbHVlIFogaXMJCSMKKyMJCQkJCQkJCQkjCisjCQkJWiA9IFgqKDY0L2xvZzIpKigxK2VwcyksIHxlcHN8IDw9IDJeKC0yNCkuCSMKKyMJCQkJCQkJCQkjCisjCQlUaGlzIGVycm9yIGhhcyB0byBiZSBjb25zaWRlcmVkIGxhdGVyIGluIFN0ZXBzIDMgYW5kIDQuCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMy4JQ2FsY3VsYXRlIFggLSBOKmxvZzIvNjQuCQkJCSMKKyMJCTMuMQlSIDo9IFggKyBOKkwxLAkJCQkJIworIwkJCQl3aGVyZSBMMSA6PSBzaW5nbGUtcHJlY2lzaW9uKC1sb2cyLzY0KS4JIworIwkJMy4yCVIgOj0gUiArIE4qTDIsCQkJCQkjCisjCQkJCUwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4jCisjCU5vdGVzOglhKSBUaGUgd2F5IEwxIGFuZCBMMiBhcmUgY2hvc2VuIGVuc3VyZXMgTDErTDIJCSMKKyMJCWFwcHJveGltYXRlIHRoZSB2YWx1ZSAtbG9nMi82NCB0byA4OCBiaXRzIG9mIGFjY3VyYWN5LgkjCisjCQliKSBOKkwxIGlzIGV4YWN0IGJlY2F1c2UgTiBpcyBubyBsb25nZXIgdGhhbiAyMiBiaXRzCSMKKyMJCWFuZCBMMSBpcyBubyBsb25nZXIgdGhhbiAyNCBiaXRzLgkJCSMKKyMJCWMpIFRoZSBjYWxjdWxhdGlvbiBYK04qTDEgaXMgYWxzbyBleGFjdCBkdWUgdG8JCSMKKyMJCWNhbmNlbGxhdGlvbi4gVGh1cywgUiBpcyBwcmFjdGljYWxseSBYK04oTDErTDIpIHRvIGZ1bGwJIworIwkJNjQgYml0cy4JCQkJCQkjCisjCQlkKSBJdCBpcyBpbXBvcnRhbnQgdG8gZXN0aW1hdGUgaG93IGxhcmdlIGNhbiB8UnwgYmUJIworIwkJYWZ0ZXIgU3RlcCAzLjIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJCU4gPSBybmQtdG8taW50KCBYKjY0L2xvZzIgKDErZXBzKSApLCB8ZXBzfDw9Ml4oLTI0KQkjCisjCQlYKjY0L2xvZzIgKDErZXBzKQk9CU4gKyBmLAl8ZnwgPD0gMC41CSMKKyMJCVgqNjQvbG9nMiAtIE4JPQlmIC0gZXBzKlggNjQvbG9nMgkJIworIwkJWCAtIE4qbG9nMi82NAk9CWYqbG9nMi82NCAtIGVwcypYCQkjCisjCQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJCU5vdyB8WHwgPD0gMTY0NDYgbG9nMiwgdGh1cwkJCQkjCisjCQkJCQkJCQkJIworIwkJCXxYIC0gTipsb2cyLzY0fCA8PSAoMC41ICsgMTY0NDYvMl4oMTgpKSpsb2cyLzY0CSMKKyMJCQkJCTw9IDAuNTcgbG9nMi82NC4JCSMKKyMJCSBUaGlzIGJvdW5kIHdpbGwgYmUgdXNlZCBpbiBTdGVwIDQuCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA0LglBcHByb3hpbWF0ZSBleHAoUiktMSBieSBhIHBvbHlub21pYWwJCQkjCisjCQlwID0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQkjCisjCU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cwkjCisjCQlhcmUgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBBMSAod2hpY2ggaXMgMS8yKSwgQTQJIworIwkJYW5kIEE1IGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBBMiBhbmQgQTMgYXJlIGRvdWJsZQkjCisjCQlwcmVjaXNpb24uCQkJCQkJIworIwkJYikgRXZlbiB3aXRoIHRoZSByZXN0cmljdGlvbnMgYWJvdmUsCQkJIworIwkJICAgfHAgLSAoZXhwKFIpLTEpfCA8IDJeKC02OC44KSBmb3IgYWxsIHxSfCA8PSAwLjAwNjIuCSMKKyMJCU5vdGUgdGhhdCAwLjAwNjIgaXMgc2xpZ2h0bHkgYmlnZ2VyIHRoYW4gMC41NyBsb2cyLzY0LgkjCisjCQljKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgcCBpcyBzZXBhcmF0ZWQgaW50bwkjCisjCQl0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0aWVzCSMKKyMJCQlwID0gWyBSICsgUipTKihBMiArIFMqQTQpIF0JKwkJIworIwkJCQlbIFMqKEExICsgUyooQTMgKyBTKkE1KSkgXQkJIworIwkJd2hlcmUgUyA9IFIqUi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDUuCUNvbXB1dGUgMl4oSi82NCkqZXhwKFIpID0gMl4oSi82NCkqKDErcCkgYnkJCSMKKyMJCQkJYW5zIDo9IFQgKyAoIFQqcCArIHQpCQkJIworIwkJd2hlcmUgVCBhbmQgdCBhcmUgdGhlIHN0b3JlZCB2YWx1ZXMgZm9yIDJeKEovNjQpLgkjCisjCU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCSMKKyMJCTJeKEovNjQpIHRvIHJvdWdobHkgODUgYml0czsgVCBpcyBpbiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJYW5kIHQgaXMgaW4gc2luZ2xlIHByZWNpc2lvbi4gTm90ZSBhbHNvIHRoYXQgVCBpcwkjCisjCQlyb3VuZGVkIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZQkjCisjCQl6ZXJvLiBUaGUgcmVhc29uIGZvciBzdWNoIGEgc3BlY2lhbCBmb3JtIGlzIHRoYXQgVC0xLAkjCisjCQlULTIsIGFuZCBULTggd2lsbCBhbGwgYmUgZXhhY3QgLS0tIGEgcHJvcGVydHkgdGhhdCB3aWxsCSMKKyMJCWdpdmUgbXVjaCBtb3JlIGFjY3VyYXRlIGNvbXB1dGF0aW9uIG9mIHRoZSBmdW5jdGlvbgkjCisjCQlFWFBNMS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCkJCQkJIworIwkJCWV4cChYKSA9IDJeTSAqIDJeKEovNjQpICogZXhwKFIpLgkJIworIwkJNi4xCUlmIEFkakZsYWcgPSAwLCBnbyB0byA2LjMJCQkjCisjCQk2LjIJYW5zIDo9IGFucyAqIEFkalNjYWxlCQkJCSMKKyMJCTYuMwlSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJIworIwkJNi40CVJldHVybiBhbnMgOj0gYW5zICogU2NhbGUuIEV4aXQuCQkjCisjCU5vdGVzOglJZiBBZGpGbGFnID0gMCwgd2UgaGF2ZSBYID0gTWxvZzIgKyBKbG9nMi82NCArIFIsCSMKKyMJCXxNfCA8PSAxNjM4MCwgYW5kIFNjYWxlID0gMl5NLiBNb3Jlb3ZlciwgZXhwKFgpIHdpbGwJIworIwkJbmVpdGhlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LiBJZiBBZGpGbGFnID0gMSwgdGhhdAkjCisjCQltZWFucyB0aGF0CQkJCQkJIworIwkJCVggPSAoTTErTSlsb2cyICsgSmxvZzIvNjQgKyBSLCB8TTErTXwgPj0gMTYzODAuCSMKKyMJCUhlbmNlLCBleHAoWCkgbWF5IG92ZXJmbG93IG9yIHVuZGVyZmxvdyBvciBuZWl0aGVyLgkjCisjCQlXaGVuIHRoYXQgaXMgdGhlIGNhc2UsIEFkalNjYWxlID0gMl4oTTEpIHdoZXJlIE0xIGlzCSMKKyMJCWFwcHJveGltYXRlbHkgTS4gVGh1cyA2LjIgd2lsbCBuZXZlciBjYXVzZQkJIworIwkJb3Zlci91bmRlcmZsb3cuIFBvc3NpYmxlIGV4Y2VwdGlvbiBpbiA2LjQgaXMgb3ZlcmZsb3cJIworIwkJb3IgdW5kZXJmbG93LiBUaGUgaW5leGFjdCBleGNlcHRpb24gaXMgbm90IGdlbmVyYXRlZCBpbgkjCisjCQk2LjQuIEFsdGhvdWdoIG9uZSBjYW4gYXJndWUgdGhhdCB0aGUgaW5leGFjdCBmbGFnCSMKKyMJCXNob3VsZCBhbHdheXMgYmUgcmFpc2VkLCB0byBzaW11bGF0ZSB0aGF0IGV4Y2VwdGlvbgkjCisjCQljb3N0IHRvIG11Y2ggdGhhbiB0aGUgZmxhZyBpcyB3b3J0aCBpbiBwcmFjdGljYWwgdXNlcy4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCA3LglSZXR1cm4gMSArIFguCQkJCQkJIworIwkJNy4xCWFucyA6PSBYCQkJCQkjCisjCQk3LjIJUmVzdG9yZSB1c2VyIEZQQ1IuCQkJCSMKKyMJCTcuMwlSZXR1cm4gYW5zIDo9IDEgKyBhbnMuIEV4aXQJCQkjCisjCU5vdGVzOglGb3Igbm9uLXplcm8gWCwgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdpbGwgYWx3YXlzIGJlCSMKKyMJCXJhaXNlZCBieSA3LjMuIFRoYXQgaXMgdGhlIG9ubHkgZXhjZXB0aW9uIHJhaXNlZCBieSA3LjMuIworIwkJTm90ZSBhbHNvIHRoYXQgd2UgdXNlIHRoZSBGTU9WRU0gaW5zdHJ1Y3Rpb24gdG8gbW92ZSBYCSMKKyMJCWluIFN0ZXAgNy4xIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHRyYXBwaW5nLiAoQWx0aG91Z2gJIworIwkJdGhlIEZNT1ZFTSBtYXkgbm90IHNlZW0gcmVsZXZhbnQgc2luY2UgWCBpcyBub3JtYWxpemVkLAkjCisjCQl0aGUgcHJlY2F1dGlvbiB3aWxsIGJlIHVzZWZ1bCBpbiB0aGUgbGlicmFyeSB2ZXJzaW9uIG9mCSMKKyMJCXRoaXMgY29kZSB3aGVyZSB0aGUgc2VwYXJhdGUgZW50cnkgZm9yIGRlbm9ybWFsaXplZAkjCisjCQlpbnB1dHMgd2lsbCBiZSBkb25lIGF3YXkgd2l0aC4pCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgOC4JSGFuZGxlIGV4cChYKSB3aGVyZSB8WHwgPj0gMTYzODBsb2cyLgkJCSMKKyMJCTguMQlJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byBTdGVwIDkuCQkjCisjCQkobWltaWMgMi4yIC0gMi42KQkJCQkJIworIwkJOC4yCU4gOj0gcm91bmQtdG8taW50ZWdlciggWCAqIDY0L2xvZzIgKQkJIworIwkJOC4zCUNhbGN1bGF0ZSBKID0gTiBtb2QgNjQsIEogPSAwLDEsLi4uLDYzCQkjCisjCQk4LjQJSyA6PSAoTi1KKS82NCwgTTEgOj0gdHJ1bmNhdGUoSy8yKSwgTSA9IEstTTEsCSMKKyMJCQlBZGpGbGFnIDo9IDEuCQkJCQkjCisjCQk4LjUJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUJIworIwkJCTJeKEovNjQpLgkJCQkJIworIwkJOC42CUNyZWF0ZSB0aGUgdmFsdWVzIFNjYWxlID0gMl5NLCBBZGpTY2FsZSA9IDJeTTEuCSMKKyMJCTguNwlHbyB0byBTdGVwIDMuCQkJCQkjCisjCU5vdGVzOglSZWZlciB0byBub3RlcyBmb3IgMi4yIC0gMi42LgkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDkuCUhhbmRsZSBleHAoWCksIHxYfCA+IDE2NDgwIGxvZzIuCQkJIworIwkJOS4xCUlmIFggPCAwLCBnbyB0byA5LjMJCQkJIworIwkJOS4yCWFucyA6PSBIdWdlLCBnbyB0byA5LjQJCQkJIworIwkJOS4zCWFucyA6PSBUaW55LgkJCQkJIworIwkJOS40CVJlc3RvcmUgdXNlciBGUENSLgkJCQkjCisjCQk5LjUJUmV0dXJuIGFucyA6PSBhbnMgKiBhbnMuIEV4aXQuCQkJIworIwlOb3RlczoJRXhwKFgpIHdpbGwgc3VyZWx5IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgZGVwZW5kaW5nIG9uCSMKKyMJCVgncyBzaWduLiAiSHVnZSIgYW5kICJUaW55IiBhcmUgcmVzcGVjdGl2ZWx5IGxhcmdlL3RpbnkJIworIwkJZXh0ZW5kZWQtcHJlY2lzaW9uIG51bWJlcnMgd2hvc2Ugc3F1YXJlIG92ZXIvdW5kZXJmbG93CSMKKyMJCXdpdGggYW4gaW5leGFjdCByZXN1bHQuIFRodXMsIDkuNSBhbHdheXMgcmFpc2VzIHRoZQkjCisjCQlpbmV4YWN0IHRvZ2V0aGVyIHdpdGggZWl0aGVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdy4JIworIwkJCQkJCQkJCSMKKyMJc2V0b3htMWQJCQkJCQkJIworIwktLS0tLS0tLQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDEuCVNldCBhbnMgOj0gMAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBYICsgYW5zLiBFeGl0LgkJCQkjCisjCU5vdGVzOglUaGlzIHdpbGwgcmV0dXJuIFggd2l0aCB0aGUgYXBwcm9wcmlhdGUgcm91bmRpbmcJIworIwkJIHByZWNpc2lvbiBwcmVzY3JpYmVkIGJ5IHRoZSB1c2VyIEZQQ1IuCQkJIworIwkJCQkJCQkJCSMKKyMJc2V0b3htMQkJCQkJCQkJIworIwktLS0tLS0tCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDEuCUNoZWNrIHxYfAkJCQkJCSMKKyMJCTEuMQlJZiB8WHwgPj0gMS80LCBnbyB0byBTdGVwIDEuMy4JCQkjCisjCQkxLjIJR28gdG8gU3RlcCA3LgkJCQkJIworIwkJMS4zCUlmIHxYfCA8IDcwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgkJIworIwkJMS40CUdvIHRvIFN0ZXAgMTAuCQkJCQkjCisjCU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLiMKKyMJCUhvd2V2ZXIsIGl0IGlzIGNvbmNlaXZhYmxlIHxYfCBjYW4gYmUgc21hbGwgdmVyeSBvZnRlbgkjCisjCQliZWNhdXNlIEVYUE0xIGlzIGludGVuZGVkIHRvIGV2YWx1YXRlIGV4cChYKS0xCQkjCisjCQlhY2N1cmF0ZWx5IHdoZW4gfFh8IGlzIHNtYWxsLiBGb3IgZnVydGhlciBkZXRhaWxzIG9uCSMKKyMJCXRoZSBjb21wYXJpc29ucywgc2VlIHRoZSBub3RlcyBvbiBTdGVwIDEgb2Ygc2V0b3guCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JQ2FsY3VsYXRlIE4gPSByb3VuZC10by1uZWFyZXN0LWludCggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4xCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgkjCisjCQkyLjIJQ2FsY3VsYXRlCUogPSBOIG1vZCA2NDsgc28gSiA9IDAsMSwyLC4uLiwgIworIwkJCW9yIDYzLgkJCQkJCSMKKyMJCTIuMwlDYWxjdWxhdGUJTSA9IChOIC0gSikvNjQ7IHNvIE4gPSA2NE0gKyBKLgkjCisjCQkyLjQJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YJIworIwkJCTJeKEovNjQpLgkJCQkJIworIwkJMi41CUNyZWF0ZSB0aGUgdmFsdWVzIFNjID0gMl5NIGFuZAkJCSMKKyMJCQlPbmVieVNjIDo9IC0yXigtTSkuCQkJCSMKKyMJTm90ZXM6CVNlZSB0aGUgbm90ZXMgb24gU3RlcCAyIG9mIHNldG94LgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMy4JQ2FsY3VsYXRlIFggLSBOKmxvZzIvNjQuCQkJCSMKKyMJCTMuMQlSIDo9IFggKyBOKkwxLAkJCQkJIworIwkJCQl3aGVyZSBMMSA6PSBzaW5nbGUtcHJlY2lzaW9uKC1sb2cyLzY0KS4JIworIwkJMy4yCVIgOj0gUiArIE4qTDIsCQkJCQkjCisjCQkJCUwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4jCisjCU5vdGVzOglBcHBseWluZyB0aGUgYW5hbHlzaXMgb2YgU3RlcCAzIG9mIHNldG94IGluIHRoaXMgY2FzZQkjCisjCQlzaG93cyB0aGF0IHxSfCA8PSAwLjAwNTUgKG5vdGUgdGhhdCB8WHwgPD0gNzAgbG9nMiBpbgkjCisjCQl0aGlzIGNhc2UpLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4JQXBwcm94aW1hdGUgZXhwKFIpLTEgYnkgYSBwb2x5bm9taWFsCQkJIworIwkJCXAgPSBSK1IqUiooQTErUiooQTIrUiooQTMrUiooQTQrUiooQTUrUipBNikpKSkpCSMKKyMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKKyMJCWFyZSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEExICh3aGljaCBpcyAxLzIpLCBBNQkjCisjCQlhbmQgQTYgYXJlIHNpbmdsZSBwcmVjaXNpb247IEEyLCBBMyBhbmQgQTQgYXJlIGRvdWJsZQkjCisjCQlwcmVjaXNpb24uCQkJCQkJIworIwkJYikgRXZlbiB3aXRoIHRoZSByZXN0cmljdGlvbiBhYm92ZSwJCQkjCisjCQkJfHAgLSAoZXhwKFIpLTEpfCA8CXxSfCAqIDJeKC03Mi43KQkJIworIwkJZm9yIGFsbCB8UnwgPD0gMC4wMDU1LgkJCQkJIworIwkJYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8JIworIwkJdHdvIGluZGVwZW5kZW50IHBpZWNlcyBvZiByb3VnaGx5IGVxdWFsIGNvbXBsZXhpdHkJIworIwkJCXAgPSBbIFIqUyooQTIgKyBTKihBNCArIFMqQTYpKSBdCSsJIworIwkJCQlbIFIgKyBTKihBMSArIFMqKEEzICsgUypBNSkpIF0JCSMKKyMJCXdoZXJlIFMgPSBSKlIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKnAgYnkJCQkJCSMKKyMJCQkJcCA6PSBUKnAJCQkJIworIwkJd2hlcmUgVCBhbmQgdCBhcmUgdGhlIHN0b3JlZCB2YWx1ZXMgZm9yIDJeKEovNjQpLgkjCisjCU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCSMKKyMJCTJeKEovNjQpIHRvIHJvdWdobHkgODUgYml0czsgVCBpcyBpbiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJYW5kIHQgaXMgaW4gc2luZ2xlIHByZWNpc2lvbi4gTm90ZSBhbHNvIHRoYXQgVCBpcwkjCisjCQlyb3VuZGVkIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZQkjCisjCQl6ZXJvLiBUaGUgcmVhc29uIGZvciBzdWNoIGEgc3BlY2lhbCBmb3JtIGlzIHRoYXQgVC0xLAkjCisjCQlULTIsIGFuZCBULTggd2lsbCBhbGwgYmUgZXhhY3QgLS0tIGEgcHJvcGVydHkgdGhhdCB3aWxsCSMKKyMJCWJlIGV4cGxvaXRlZCBpbiBTdGVwIDYgYmVsb3cuIFRoZSB0b3RhbCByZWxhdGl2ZSBlcnJvcgkjCisjCQlpbiBwIGlzIG5vIGJpZ2dlciB0aGFuIDJeKC02Ny43KSBjb21wYXJlZCB0byB0aGUgZmluYWwJIworIwkJcmVzdWx0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDYuCVJlY29uc3RydWN0aW9uIG9mIGV4cChYKS0xCQkJCSMKKyMJCQlleHAoWCktMSA9IDJeTSAqICggMl4oSi82NCkgKyBwIC0gMl4oLU0pICkuCSMKKyMJCTYuMQlJZiBNIDw9IDYzLCBnbyB0byBTdGVwIDYuMy4JCQkjCisjCQk2LjIJYW5zIDo9IFQgKyAocCArICh0ICsgT25lYnlTYykpLiBHbyB0byA2LjYJIworIwkJNi4zCUlmIE0gPj0gLTMsIGdvIHRvIDYuNS4JCQkJIworIwkJNi40CWFucyA6PSAoVCArIChwICsgdCkpICsgT25lYnlTYy4gR28gdG8gNi42CSMKKyMJCTYuNQlhbnMgOj0gKFQgKyBPbmVieVNjKSArIChwICsgdCkuCQkJIworIwkJNi42CVJlc3RvcmUgdXNlciBGUENSLgkJCQkjCisjCQk2LjcJUmV0dXJuIGFucyA6PSBTYyAqIGFucy4gRXhpdC4JCQkjCisjCU5vdGVzOglUaGUgdmFyaW91cyBhcnJhbmdlbWVudHMgb2YgdGhlIGV4cHJlc3Npb25zIGdpdmUJIworIwkJYWNjdXJhdGUgZXZhbHVhdGlvbnMuCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDcuCWV4cChYKS0xIGZvciB8WHwgPCAxLzQuCQkJCQkjCisjCQk3LjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgOS4JCSMKKyMJCTcuMglHbyB0byBTdGVwIDguCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDguCUNhbGN1bGF0ZSBleHAoWCktMSwgfFh8IDwgMl4oLTY1KS4JCQkjCisjCQk4LjEJSWYgfFh8IDwgMl4oLTE2MzEyKSwgZ290byA4LjMJCQkjCisjCQk4LjIJUmVzdG9yZSBGUENSOyByZXR1cm4gYW5zIDo9IFggLSAyXigtMTYzODIpLgkjCisjCQkJRXhpdC4JCQkJCQkjCisjCQk4LjMJWCA6PSBYICogMl4oMTQwKS4JCQkJIworIwkJOC40CVJlc3RvcmUgRlBDUjsgYW5zIDo9IGFucyAtIDJeKC0xNjM4MikuCQkjCisjCQkgUmV0dXJuIGFucyA6PSBhbnMqMl4oMTQwKS4gRXhpdAkJCSMKKyMJTm90ZXM6CVRoZSBpZGVhIGlzIHRvIHJldHVybiAiWCAtIHRpbnkiIHVuZGVyIHRoZSB1c2VyCQkjCisjCQlwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGVzLiBUbyBhdm9pZCB1bm5lY2Vzc2FyeQkjCisjCQlpbmVmZmljaWVuY3ksIHdlIHN0YXkgYXdheSBmcm9tIGRlbm9ybWFsaXplZCBudW1iZXJzCSMKKyMJCXRoZSBiZXN0IHdlIGNhbi4gRm9yIHxYfCA+PSAyXigtMTYzMTIpLCB0aGUJCSMKKyMJCXN0cmFpZ2h0Zm9yd2FyZCA4LjIgZ2VuZXJhdGVzIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiBhcwkjCisjCQl0aGUgY2FzZSB3YXJyYW50cy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgOS4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAxLzQsIGJ5IGEgcG9seW5vbWlhbAkJIworIwkJCXAgPSBYICsgWCpYKihCMSArIFgqKEIyICsgLi4uICsgWCpCMTIpKQkJIworIwlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMJIworIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQjEgKHdoaWNoIGlzIDEvMiksIEI5CSMKKyMJCXRvIEIxMiBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQjMgdG8gQjggYXJlIGRvdWJsZQkjCisjCQlwcmVjaXNpb247IGFuZCBCMiBpcyBkb3VibGUgZXh0ZW5kZWQuCQkJIworIwkJYikgRXZlbiB3aXRoIHRoZSByZXN0cmljdGlvbiBhYm92ZSwJCQkjCisjCQkJfHAgLSAoZXhwKFgpLTEpfCA8IHxYfCAyXigtNzAuNikJCSMKKyMJCWZvciBhbGwgfFh8IDw9IDAuMjUxLgkJCQkJIworIwkJTm90ZSB0aGF0IDAuMjUxIGlzIHNsaWdodGx5IGJpZ2dlciB0aGFuIDEvNC4JCSMKKyMJCWMpIFRvIGZ1bGx5IHByZXNlcnZlIGFjY3VyYWN5LCB0aGUgcG9seW5vbWlhbCBpcwkjCisjCQljb21wdXRlZCBhcwkJCQkJCSMKKyMJCQlYICsgKCBTKkIxICsJUSApIHdoZXJlIFMgPSBYKlggYW5kCQkjCisjCQkJUQk9CVgqUyooQjIgKyBYKihCMyArIC4uLiArIFgqQjEyKSkJIworIwkJZCkgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIFEgaXMgc2VwYXJhdGVkIGludG8JIworIwkJdHdvIGluZGVwZW5kZW50IHBpZWNlcyBvZiByb3VnaGx5IGVxdWFsIGNvbXBsZXhpdHkJIworIwkJCVEgPSBbIFgqUyooQjIgKyBTKihCNCArIC4uLiArIFMqQjEyKSkgXSArCSMKKyMJCQkJWyBTKlMqKEIzICsgUyooQjUgKyAuLi4gKyBTKkIxMSkpIF0JIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxMC4gQ2FsY3VsYXRlIGV4cChYKS0xIGZvciB8WHwgPj0gNzAgbG9nIDIuCQkjCisjCQkxMC4xIElmIFggPj0gNzBsb2cyICwgZXhwKFgpIC0gMSA9IGV4cChYKSBmb3IgYWxsCSMKKyMJCXByYWN0aWNhbCBwdXJwb3Nlcy4gVGhlcmVmb3JlLCBnbyB0byBTdGVwIDEgb2Ygc2V0b3guCSMKKyMJCTEwLjIgSWYgWCA8PSAtNzBsb2cyLCBleHAoWCkgLSAxID0gLTEgZm9yIGFsbCBwcmFjdGljYWwJIworIwkJcHVycG9zZXMuCQkJCQkJIworIwkJYW5zIDo9IC0xCQkJCQkJIworIwkJUmVzdG9yZSB1c2VyIEZQQ1IJCQkJCSMKKyMJCVJldHVybiBhbnMgOj0gYW5zICsgMl4oLTEyNikuIEV4aXQuCQkJIworIwlOb3RlczoJMTAuMiB3aWxsIGFsd2F5cyBjcmVhdGUgYW4gaW5leGFjdCBhbmQgcmV0dXJuIC0xICsgdGlueQkjCisjCQlpbiB0aGUgdXNlciByb3VuZGluZyBwcmVjaXNpb24gYW5kIG1vZGUuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMMjoJbG9uZwkJMHgzRkRDMDAwMCwweDgyRTMwODY1LDB4NDM2MUM0QzYsMHgwMDAwMDAwMAorCitFRVhQQTM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NENDMQorRUVYUEEyOglsb25nCQkweDNGQzU1NTU1LDB4NTU1NTRBNTQKKworRU0xQTQ6CWxvbmcJCTB4M0Y4MTExMTEsMHgxMTE3NDM4NQorRU0xQTM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NEY1QQorCitFTTFBMjoJbG9uZwkJMHgzRkM1NTU1NSwweDU1NTU1NTU1LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitFTTFCODoJbG9uZwkJMHgzRUM3MURFMywweEE1Nzc0NjgyCitFTTFCNzoJbG9uZwkJMHgzRUZBMDFBMCwweDE5RDdDQjY4CisKK0VNMUI2Oglsb25nCQkweDNGMkEwMUEwLDB4MUEwMTlERjMKK0VNMUI1Oglsb25nCQkweDNGNTZDMTZDLDB4MTZDMTcwRTIKKworRU0xQjQ6CWxvbmcJCTB4M0Y4MTExMTEsMHgxMTExMTExMQorRU0xQjM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NTU1NQorCitFTTFCMjoJbG9uZwkJMHgzRkZDMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFBQUIKKwlsb25nCQkweDAwMDAwMDAwCisKK1RXTzE0MDoJbG9uZwkJMHg0OEIwMDAwMCwweDAwMDAwMDAwCitUV09OMTQwOgorCWxvbmcJCTB4MzczMDAwMDAsMHgwMDAwMDAwMAorCitFRVhQVEJMOgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODE2NEQxRjMsMHhCQzAzMDc3NCwweDlGODQxQTlCCisJbG9uZwkJMHgzRkZGMDAwMCwweDgyQ0Q4Njk4LDB4QUMyQkExRDgsMHg5RkMxRDVCOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NDNBMjhDMywweEFDREU0MDQ4LDB4QTA3MjgzNjkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODVBQUMzNjcsMHhDQzQ4N0IxNCwweDFGQzVDOTVDCisJbG9uZwkJMHgzRkZGMDAwMCwweDg3MUY2MTk2LDB4OUU4RDEwMTAsMHgxRUU4NUM5RgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4ODk4MEU4MCwweDkyREE4NTI4LDB4OUZBMjA3MjkKKwlsb25nCQkweDNGRkYwMDAwLDB4OEExNEQ1NzUsMHg0OTZFRkQ5QywweEEwN0JGOUFGCisJbG9uZwkJMHgzRkZGMDAwMCwweDhCOTVDMUUzLDB4RUE4QkQ2RTgsMHhBMDAyMERDRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4RDFBREY1QiwweDdFNUJBOUU0LDB4MjA1QTYzREEKKwlsb25nCQkweDNGRkYwMDAwLDB4OEVBNDM5OEIsMHg0NUNENTNDMCwweDFFQjcwMDUxCisJbG9uZwkJMHgzRkZGMDAwMCwweDkwMzFEQzQzLDB4MTQ2NkIxREMsMHgxRjZFQjAyOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MUMzRDM3MywweEFCMTFDMzM4LDB4QTA3ODE0OTQKKwlsb25nCQkweDNGRkYwMDAwLDB4OTM1QTJCMkYsMHgxM0U2RTkyQywweDlFQjMxOUIwCisJbG9uZwkJMHgzRkZGMDAwMCwweDk0RjRFRkE4LDB4RkVGNzA5NjAsMHgyMDE3NDU3RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5Njk0MkQzNywweDIwMTg1QTAwLDB4MUYxMUQ1MzcKKwlsb25nCQkweDNGRkYwMDAwLDB4OTgzN0YwNTEsMHg4REI4QTk3MCwweDlGQjk1MkRECisJbG9uZwkJMHgzRkZGMDAwMCwweDk5RTA0NTkzLDB4MjBCN0ZBNjQsMHgxRkU0MzA4NworCWxvbmcJCTB4M0ZGRjAwMDAsMHg5QjhEMzlCOSwweEQ1NEU1NTM4LDB4MUZBMkE4MTgKKwlsb25nCQkweDNGRkYwMDAwLDB4OUQzRUQ5QTcsMHgyQ0ZGQjc1MCwweDFGREU0OTRECisJbG9uZwkJMHgzRkZGMDAwMCwweDlFRjUzMjYwLDB4OTFBMTExQUMsMHgyMDUwNDg5MAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMEIwNTEwRiwweEI5NzE0RkM0LDB4QTA3MzY5MUMKKwlsb25nCQkweDNGRkYwMDAwLDB4QTI3MDQzMDMsMHgwQzQ5NjgxOCwweDFGOUI3QTA1CisJbG9uZwkJMHgzRkZGMDAwMCwweEE0MzUxNUFFLDB4MDlFNjgwQTAsMHhBMDc5NzEyNgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNUZFRDZBOSwweEIxNTEzOEVDLDB4QTA3MUExNDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTdDRDkzQjQsMHhFOTY1MzU2OCwweDIwNEY2MkRBCisJbG9uZwkJMHgzRkZGMDAwMCwweEE5QTE1QUI0LDB4RUE3QzBFRjgsMHgxRjI4M0M0QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBQjdBMzlCNSwweEE5M0VEMzM4LDB4OUY5QTdGREMKKwlsb25nCQkweDNGRkYwMDAwLDB4QUQ1ODNFRUEsMHg0MkExNEFDOCwweEEwNUIzRkFDCisJbG9uZwkJMHgzRkZGMDAwMCwweEFGM0I3OEFELDB4NjkwQTQzNzQsMHgxRkRGMjYxMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMTIzRjU4MSwweEQyQUMyNTkwLDB4OUY3MDVGOTAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjMxMUM0MTIsMHhBOTExMjQ4OCwweDIwMUY2NzhBCisJbG9uZwkJMHgzRkZGMDAwMCwweEI1MDRGMzMzLDB4RjlERTY0ODQsMHgxRjMyRkIxMworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNkZEOTFFMywweDI4RDE3NzkwLDB4MjAwMzhCMzAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjhGQkFGNDcsMHg2MkZCOUVFOCwweDIwMERDM0NDCisJbG9uZwkJMHgzRkZGMDAwMCwweEJBRkY1QUIyLDB4MTMzRTQ1RkMsMHg5RjhCMkFFNgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRDA4QTM5RiwweDU4MEMzNkMwLDB4QTAyQkJGNzAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkYxNzk5QjYsMHg3QTczMTA4NCwweEEwMEJGNTE4CisJbG9uZwkJMHgzRkZGMDAwMCwweEMxMkM0Q0NBLDB4NjY3MDk0NTgsMHhBMDQxREQ0MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMzQ2Q0NEQSwweDI0OTc2NDA4LDB4OUZERjEzN0IKKwlsb25nCQkweDNGRkYwMDAwLDB4QzU2NzJBMTEsMHg1NTA2REFEQywweDIwMUYxNTY4CisJbG9uZwkJMHgzRkZGMDAwMCwweEM3OEQ3NEM4LDB4QUJCOUIxNUMsMHgxRkMxM0EyRQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDOUI5QkQ4NiwweDZFMkYyN0E0LDB4QTAzRjhGMDMKKwlsb25nCQkweDNGRkYwMDAwLDB4Q0JFQzE0RkUsMHhGMjcyN0M1QywweDFGRjQ5MDdECisJbG9uZwkJMHgzRkZGMDAwMCwweENFMjQ4QzE1LDB4MUY4NDgwRTQsMHg5RTZFNTNFNAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEMDYzMzNEQSwweEVGMkIyNTk0LDB4MUZENkQ0NUMKKwlsb25nCQkweDNGRkYwMDAwLDB4RDJBODFEOTEsMHhGMTJBRTQ1QywweEEwNzZFREI5CisJbG9uZwkJMHgzRkZGMDAwMCwweEQ0RjM1QUFCLDB4Q0ZFREZBMjAsMHg5RkE2REUyMQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhENzQ0RkNDQSwweEQ2OUQ2QUY0LDB4MUVFNjlBMkYKKwlsb25nCQkweDNGRkYwMDAwLDB4RDk5RDE1QzIsMHg3OEFGRDdCNCwweDIwN0Y0MzlGCisJbG9uZwkJMHgzRkZGMDAwMCwweERCRkJCNzk3LDB4REFGMjM3NTQsMHgyMDFFQzIwNworCWxvbmcJCTB4M0ZGRjAwMDAsMHhERTYwRjQ4MiwweDVFMEU5MTI0LDB4OUU4QkUxNzUKKwlsb25nCQkweDNGRkYwMDAwLDB4RTBDQ0RFRUMsMHgyQTk0RTExMCwweDIwMDMyQzRCCisJbG9uZwkJMHgzRkZGMDAwMCwweEUzM0Y4OTcyLDB4QkU4QTVBNTAsMHgyMDA0REZGNQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFNUI5MDZFNywweDdDODM0OEE4LDB4MUU3MkY0N0EKKwlsb25nCQkweDNGRkYwMDAwLDB4RTgzOTZBNTAsMHgzQzRCREM2OCwweDFGNzIyRjIyCisJbG9uZwkJMHgzRkZGMDAwMCwweEVBQzBDNkU3LDB4REQyNDM5MzAsMHhBMDE3RTk0NQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFRDRGMzAxRSwweEQ5OTQyQjg0LDB4MUY0MDFBNUIKKwlsb25nCQkweDNGRkYwMDAwLDB4RUZFNEI5OUIsMHhEQ0RBRjVDQywweDlGQjlBOUUzCisJbG9uZwkJMHgzRkZGMDAwMCwweEYyODE3NzNDLDB4NTlGRkIxMzgsMHgyMDc0NEMwNQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGNTI1N0QxNSwweDI0ODZDQzJDLDB4MUY3NzNBMTkKKwlsb25nCQkweDNGRkYwMDAwLDB4RjdEMERGNzMsMHgwQUQxM0JCOCwweDFGRkU5MEQ1CisJbG9uZwkJMHgzRkZGMDAwMCwweEZBODNCMkRCLDB4NzIyQTAzM0MsMHhBMDQxRUQyMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGRDNFMEMwQywweEY0ODZDMTc0LDB4MUY4NTNGM0EKKworCXNldAkJQURKRkxBRyxMX1NDUjIKKwlzZXQJCVNDQUxFLEZQX1NDUjAKKwlzZXQJCUFESlNDQUxFLEZQX1NDUjEKKwlzZXQJCVNDLEZQX1NDUjAKKwlzZXQJCU9ORUJZU0MsRlBfU0NSMQorCisJZ2xvYmFsCQlzZXRveAorc2V0b3g6CisjLS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgYW5kIG5vdCBOYU4ncworCisjLS1TdGVwIDEuCisJbW92LmwJCSglYTApLCVkMQkJIyBsb2FkIHBhcnQgb2YgaW5wdXQgWAorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIFgKKwljbXAubAkJJWQxLCYweDNGQkUwMDAwCQkjIDJeKC02NSkKKwliZ2UuYgkJRVhQQzEJCQkjIG5vcm1hbCBjYXNlCisJYnJhCQlFWFBTTQorCitFWFBDMToKKyMtLVRoZSBjYXNlIHxYfCA+PSAyXigtNjUpCisJbW92LncJCTQoJWEwKSwlZDEJCSMgZXhwby4gYW5kIHBhcnRpYWwgc2lnLiBvZiB8WHwKKwljbXAubAkJJWQxLCYweDQwMENCMTY3CQkjIDE2MzgwIGxvZzIgdHJ1bmMuIDE2IGJpdHMKKwlibHQuYgkJRVhQTUFJTgkJCSMgbm9ybWFsIGNhc2UKKwlicmEJCUVFWFBCSUcKKworRVhQTUFJTjoKKyMtLVN0ZXAgMi4KKyMtLVRoaXMgaXMgdGhlIG5vcm1hbCBicmFuY2g6CTJeKC02NSkgPD0gfFh8IDwgMTYzODAgbG9nMi4KKwlmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQorCW1vdi5sCQkmMCxBREpGTEFHKCVhNikKKwlmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVFWFBUQkwoJXBjKSwlYTEKKwlmbW92LmwJCSVkMSwlZnAwCQkjIGNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBhZGRyZXNzIG9mIDJeKEovNjQpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQorCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIE0KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJbW92LncJCUwyKCVwYyksTF9TQ1IxKCVhNikJIyBwcmVmZXRjaCBMMiwgbm8gbmVlZCBpbiBDQgorCitFWFBDT05UMToKKyMtLVN0ZXAgMy4KKyMtLWZwMSxmcDIgc2F2ZWQgb24gdGhlIHN0YWNrLiBmcDAgaXMgTiwgZnAxIGlzIFgsCisjLS1hMCBwb2ludHMgdG8gMl4oSi82NCksIEQwIGlzIGJpYXNlZCBleHBvLiBvZiAyXihNKQorCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC5zCQkmMHhCQzMxNzIxOCwlZnAwCSMgTiAqIEwxLCBMMSA9IGxlYWQoLWxvZzIvNjQpCisJZm11bC54CQlMMiglcGMpLCVmcDIJCSMgTiAqIEwyLCBMMStMMiA9IC1sb2cyLzY0CisJZmFkZC54CQklZnAxLCVmcDAJCSMgWCArIE4qTDEKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBmcDAgaXMgUiwgcmVkdWNlZCBhcmcuCisKKyMtLVN0ZXAgNC4KKyMtLVdFIE5PVyBDT01QVVRFIEVYUChSKS0xIEJZIEEgUE9MWU5PTUlBTAorIy0tIFIgKyBSKlIqKEExICsgUiooQTIgKyBSKihBMyArIFIqKEE0ICsgUipBNSkpKSkKKyMtLVRPIEZVTExZIFVUSUxJWkUgVEhFIFBJUEVMSU5FLCBXRSBDT01QVVRFIFMgPSBSKlIKKyMtLVtSK1IqUyooQTIrUypBNCldICsgW1MqKEExK1MqKEEzK1MqQTUpKV0KKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgZnAxIElTIFMgPSBSKlIKKworCWZtb3YucwkJJjB4M0FCNjBCNzAsJWZwMgkjIGZwMiBJUyBBNQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqQTUKKwlmbW92LngJCSVmcDEsJWZwMworCWZtdWwucwkJJjB4M0MwODg4OTUsJWZwMwkjIGZwMyBJUyBTKkE0CisKKwlmYWRkLmQJCUVFWFBBMyglcGMpLCVmcDIJIyBmcDIgSVMgQTMrUypBNQorCWZhZGQuZAkJRUVYUEEyKCVwYyksJWZwMwkjIGZwMyBJUyBBMitTKkE0CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUyooQTMrUypBNSkKKwltb3YudwkJJWQxLFNDQUxFKCVhNikJCSMgU0NBTEUgaXMgMl4oTSkgaW4gZXh0ZW5kZWQKKwltb3YubAkJJjB4ODAwMDAwMDAsU0NBTEUrNCglYTYpCisJY2xyLmwJCVNDQUxFKzgoJWE2KQorCisJZm11bC54CQklZnAxLCVmcDMJCSMgZnAzIElTIFMqKEEyK1MqQTQpCisKKwlmYWRkLnMJCSYweDNGMDAwMDAwLCVmcDIJIyBmcDIgSVMgQTErUyooQTMrUypBNSkKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBmcDMgSVMgUipTKihBMitTKkE0KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQorCWZhZGQueAkJJWZwMywlZnAwCQkjIGZwMCBJUyBSK1IqUyooQTIrUypBNCksCisKKwlmbW92LngJCSglYTEpKywlZnAxCQkjIGZwMSBpcyBsZWFkLiBwdC4gb2YgMl4oSi82NCkKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBmcDAgaXMgRVhQKFIpIC0gMQorCisjLS1TdGVwIDUKKyMtLWZpbmFsIHJlY29uc3RydWN0aW9uIHByb2Nlc3MKKyMtLUVYUChYKSA9IDJeTSAqICggMl4oSi82NCkgKyAyXihKLzY0KSooRVhQKFIpLTEpICkKKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIDJeKEovNjQpKihFeHAoUiktMSkKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgZnAyIHJlc3RvcmVkIHslZnAyLyVmcDN9CisJZmFkZC5zCQkoJWExKSwlZnAwCQkjIGFjY3VyYXRlIDJeKEovNjQpCisKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyAyXihKLzY0KSArIDJeKEovNjQpKi4uLgorCW1vdi5sCQlBREpGTEFHKCVhNiksJWQxCisKKyMtLVN0ZXAgNgorCXRzdC5sCQklZDEKKwliZXEuYgkJTk9STUFMCitBREpVU1Q6CisJZm11bC54CQlBREpTQ0FMRSglYTYpLCVmcDAKK05PUk1BTDoKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXIgRlBDUgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJU0NBTEUoJWE2KSwlZnAwCQkjIG11bHRpcGx5IDJeKE0pCisJYnJhCQl0X2NhdGNoCisKK0VYUFNNOgorIy0tU3RlcCA3CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBYCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyAxK1ggaW4gdXNlciBtb2RlCisJYnJhCQl0X3BpbngyCisKK0VFWFBCSUc6CisjLS1TdGVwIDgKKwljbXAubAkJJWQxLCYweDQwMENCMjdDCQkjIDE2NDgwIGxvZzIKKwliZ3QuYgkJRVhQMkJJRworIy0tU3RlcHMgOC4yIC0tIDguNgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBsb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLnMJCSYweDQyQjhBQTNCLCVmcDAJIyA2NC9sb2cyICogWAorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CisJbW92LmwJCSYxLEFESkZMQUcoJWE2KQorCWZtb3YubAkJJWZwMCwlZDEJCSMgTiA9IGludCggWCAqIDY0L2xvZzIgKQorCWxlYQkJRUVYUFRCTCglcGMpLCVhMQorCWZtb3YubAkJJWQxLCVmcDAJCSMgY29udmVydCB0byBmbG9hdGluZy1mb3JtYXQKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBhZGRyZXNzIG9mIDJeKEovNjQpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQorCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIEsKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgSyB0ZW1wb3JhcmlseQorCWFzci5sCQkmMSwlZDEJCQkjIEQwIGlzIE0xCisJc3ViLmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBhMSBpcyBNCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXihNMSkKKwltb3YudwkJJWQxLEFESlNDQUxFKCVhNikJIyBBREpTQ0FMRSA6PSAyXihNMSkKKwltb3YubAkJJjB4ODAwMDAwMDAsQURKU0NBTEUrNCglYTYpCisJY2xyLmwJCUFESlNDQUxFKzgoJWE2KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgRDAgaXMgTQorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKKwlicmEudwkJRVhQQ09OVDEJCSMgZ28gYmFjayB0byBTdGVwIDMKKworRVhQMkJJRzoKKyMtLVN0ZXAgOQorCXRzdC5iCQkoJWEwKQkJCSMgaXMgWCBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkJCXRfdW5mbDIKKwlicmEJCXRfb3ZmbDIKKworCWdsb2JhbAkJc2V0b3hkCitzZXRveGQ6CisjLS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBYIGlzIGRlbm9ybWFsaXplZAorCW1vdi5sCQkoJWEwKSwtKCVzcCkKKwlhbmRpLmwJCSYweDgwMDAwMDAwLCglc3ApCisJb3JpLmwJCSYweDAwODAwMDAwLCglc3ApCSMgc2lnbihYKSoyXigtMTI2KQorCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJKCVzcCkrLCVmcDAKKwlicmEJCXRfcGlueDIKKworCWdsb2JhbAkJc2V0b3htMQorc2V0b3htMToKKyMtLWVudHJ5IHBvaW50IGZvciBFWFBNMShYKSwgaGVyZSBYIGlzIGZpbml0ZSwgbm9uLXplcm8sIG5vbi1OYU4KKworIy0tU3RlcCAxLgorIy0tU3RlcCAxLjEKKwltb3YubAkJKCVhMCksJWQxCQkjIGxvYWQgcGFydCBvZiBpbnB1dCBYCisJYW5kLmwJCSYweDdGRkYwMDAwLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgWAorCWNtcC5sCQklZDEsJjB4M0ZGRDAwMDAJCSMgMS80CisJYmdlLmIJCUVNMUNPTjEJCQkjIHxYfCA+PSAxLzQKKwlicmEJCUVNMVNNCisKK0VNMUNPTjE6CisjLS1TdGVwIDEuMworIy0tVGhlIGNhc2UgfFh8ID49IDEvNAorCW1vdi53CQk0KCVhMCksJWQxCQkjIGV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21wLmwJCSVkMSwmMHg0MDA0QzIxNQkJIyA3MGxvZzIgcm91bmRlZCB1cCB0byAxNiBiaXRzCisJYmxlLmIJCUVNMU1BSU4JCQkjIDEvNCA8PSB8WHwgPD0gNzBsb2cyCisJYnJhCQlFTTFCSUcKKworRU0xTUFJTjoKKyMtLVN0ZXAgMi4KKyMtLVRoaXMgaXMgdGhlIGNhc2U6CTEvNCA8PSB8WHwgPD0gNzAgbG9nMi4KKwlmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQorCWZtb3YubAkJJWZwMCwlZDEJCSMgTiA9IGludCggWCAqIDY0L2xvZzIgKQorCWxlYQkJRUVYUFRCTCglcGMpLCVhMQorCWZtb3YubAkJJWQxLCVmcDAJCSMgY29udmVydCB0byBmbG9hdGluZy1mb3JtYXQKKworCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CisJYW5kLmwJCSYweDNGLCVkMQkJIyBEMCBpcyBKID0gTiBtb2QgNjQKKwlsc2wubAkJJjQsJWQxCisJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCisJYXNyLmwJCSY2LCVkMQkJCSMgRDAgaXMgTQorCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBhIGNvcHkgb2YgTQorCisjLS1TdGVwIDMuCisjLS1mcDEsZnAyIHNhdmVkIG9uIHRoZSBzdGFjay4gZnAwIGlzIE4sIGZwMSBpcyBYLAorIy0tYTAgcG9pbnRzIHRvIDJeKEovNjQpLCBEMCBhbmQgYTEgYm90aCBjb250YWluIE0KKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwucwkJJjB4QkMzMTcyMTgsJWZwMAkjIE4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQorCWZtdWwueAkJTDIoJXBjKSwlZnAyCQkjIE4gKiBMMiwgTDErTDIgPSAtbG9nMi82NAorCWZhZGQueAkJJWZwMSwlZnAwCQkjIFggKyBOKkwxCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIFIsIHJlZHVjZWQgYXJnLgorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBEMCBpcyBiaWFzZWQgZXhwby4gb2YgMl5NCisKKyMtLVN0ZXAgNC4KKyMtLVdFIE5PVyBDT01QVVRFIEVYUChSKS0xIEJZIEEgUE9MWU5PTUlBTAorIy0tIFIgKyBSKlIqKEExICsgUiooQTIgKyBSKihBMyArIFIqKEE0ICsgUiooQTUgKyBSKkE2KSkpKSkKKyMtLVRPIEZVTExZIFVUSUxJWkUgVEhFIFBJUEVMSU5FLCBXRSBDT01QVVRFIFMgPSBSKlIKKyMtLVtSKlMqKEEyK1MqKEE0K1MqQTYpKV0gKyBbUitTKihBMStTKihBMytTKkE1KSldCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIGZwMSBJUyBTID0gUipSCisKKwlmbW92LnMJCSYweDM5NTAwOTdCLCVmcDIJIyBmcDIgSVMgYTYKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKkE2CisJZm1vdi54CQklZnAxLCVmcDMKKwlmbXVsLnMJCSYweDNBQjYwQjZBLCVmcDMJIyBmcDMgSVMgUypBNQorCisJZmFkZC5kCQlFTTFBNCglcGMpLCVmcDIJCSMgZnAyIElTIEE0K1MqQTYKKwlmYWRkLmQJCUVNMUEzKCVwYyksJWZwMwkJIyBmcDMgSVMgQTMrUypBNQorCW1vdi53CQklZDEsU0MoJWE2KQkJIyBTQyBpcyAyXihNKSBpbiBleHRlbmRlZAorCW1vdi5sCQkmMHg4MDAwMDAwMCxTQys0KCVhNikKKwljbHIubAkJU0MrOCglYTYpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUyooQTQrUypBNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCQkjIEQwIGlzCU0KKwluZWcudwkJJWQxCQkJIyBEMCBpcyAtTQorCWZtdWwueAkJJWZwMSwlZnAzCQkjIGZwMyBJUyBTKihBMytTKkE1KQorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oLU0pCisJZmFkZC5kCQlFTTFBMiglcGMpLCVmcDIJCSMgZnAyIElTIEEyK1MqKEE0K1MqQTYpCisJZmFkZC5zCQkmMHgzRjAwMDAwMCwlZnAzCSMgZnAzIElTIEExK1MqKEEzK1MqQTUpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUyooQTIrUyooQTQrUypBNikpCisJb3IudwkJJjB4ODAwMCwlZDEJCSMgc2lnbmVkL2V4cG8uIG9mIC0yXigtTSkKKwltb3YudwkJJWQxLE9ORUJZU0MoJWE2KQkjIE9uZWJ5U2MgaXMgLTJeKC1NKQorCW1vdi5sCQkmMHg4MDAwMDAwMCxPTkVCWVNDKzQoJWE2KQorCWNsci5sCQlPTkVCWVNDKzgoJWE2KQorCWZtdWwueAkJJWZwMywlZnAxCQkjIGZwMSBJUyBTKihBMStTKihBMytTKkE1KSkKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBJUyBSKlMqKEEyK1MqKEE0K1MqQTYpKQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCBJUyBSK1MqKEExK1MqKEEzK1MqQTUpKQorCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIElTIEVYUChSKS0xCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgZnAyIHJlc3RvcmVkIHslZnAyLyVmcDN9CisKKyMtLVN0ZXAgNQorIy0tQ29tcHV0ZSAyXihKLzY0KSpwCisKKwlmbXVsLngJCSglYTEpLCVmcDAJCSMgMl4oSi82NCkqKEV4cChSKS0xKQorCisjLS1TdGVwIDYKKyMtLVN0ZXAgNi4xCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQkJIyByZXRyaWV2ZSBNCisJY21wLmwJCSVkMSwmNjMKKwlibGUuYgkJTUxFNjMKKyMtLVN0ZXAgNi4yCU0gPj0gNjQKKwlmbW92LnMJCTEyKCVhMSksJWZwMQkJIyBmcDEgaXMgdAorCWZhZGQueAkJT05FQllTQyglYTYpLCVmcDEJIyBmcDEgaXMgdCtPbmVieVNjCisJZmFkZC54CQklZnAxLCVmcDAJCSMgcCsodCtPbmVieVNjKSwgZnAxIHJlbGVhc2VkCisJZmFkZC54CQkoJWExKSwlZnAwCQkjIFQrKHArKHQrT25lYnlTYykpCisJYnJhCQlFTTFTQ0FMRQorTUxFNjM6CisjLS1TdGVwIDYuMwlNIDw9IDYzCisJY21wLmwJCSVkMSwmLTMKKwliZ2UuYgkJTUdFTjMKK01MVE4zOgorIy0tU3RlcCA2LjQJTSA8PSAtNAorCWZhZGQucwkJMTIoJWExKSwlZnAwCQkjIHArdAorCWZhZGQueAkJKCVhMSksJWZwMAkJIyBUKyhwK3QpCisJZmFkZC54CQlPTkVCWVNDKCVhNiksJWZwMAkjIE9uZWJ5U2MgKyAoVCsocCt0KSkKKwlicmEJCUVNMVNDQUxFCitNR0VOMzoKKyMtLVN0ZXAgNi41CS0zIDw9IE0gPD0gNjMKKwlmbW92LngJCSglYTEpKywlZnAxCQkjIGZwMSBpcyBUCisJZmFkZC5zCQkoJWExKSwlZnAwCQkjIGZwMCBpcyBwK3QKKwlmYWRkLngJCU9ORUJZU0MoJWE2KSwlZnAxCSMgZnAxIGlzIFQrT25lYnlTYworCWZhZGQueAkJJWZwMSwlZnAwCQkjIChUK09uZWJ5U2MpKyhwK3QpCisKK0VNMVNDQUxFOgorIy0tU3RlcCA2LjYKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtdWwueAkJU0MoJWE2KSwlZnAwCisJYnJhCQl0X2lueDIKKworRU0xU006CisjLS1TdGVwIDcJfFh8IDwgMS80LgorCWNtcC5sCQklZDEsJjB4M0ZCRTAwMDAJCSMgMl4oLTY1KQorCWJnZS5iCQlFTTFQT0xZCisKK0VNMVRJTlk6CisjLS1TdGVwIDgJfFh8IDwgMl4oLTY1KQorCWNtcC5sCQklZDEsJjB4MDAzMzAwMDAJCSMgMl4oLTE2MzEyKQorCWJsdC5iCQlFTTEyVElOWQorIy0tU3RlcCA4LjIKKwltb3YubAkJJjB4ODAwMTAwMDAsU0MoJWE2KQkjIFNDIGlzIC0yXigtMTYzODIpCisJbW92LmwJCSYweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNsci5sCQlTQys4KCVhNikKKwlmbW92LngJCSglYTApLCVmcDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRkFERF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIEFERAorCWZhZGQueAkJU0MoJWE2KSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0VNMTJUSU5ZOgorIy0tU3RlcCA4LjMKKwlmbW92LngJCSglYTApLCVmcDAKKwlmbXVsLmQJCVRXTzE0MCglcGMpLCVmcDAKKwltb3YubAkJJjB4ODAwMTAwMDAsU0MoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxTQys0KCVhNikKKwljbHIubAkJU0MrOCglYTYpCisJZmFkZC54CQlTQyglYTYpLCVmcDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwuZAkJVFdPTjE0MCglcGMpLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworRU0xUE9MWToKKyMtLVN0ZXAgOQlleHAoWCktMSBieSBhIHNpbXBsZSBwb2x5bm9taWFsCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGZwMCBpcyBYCisJZm11bC54CQklZnAwLCVmcDAJCSMgZnAwIGlzIFMgOj0gWCpYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwlmbW92LnMJCSYweDJGMzBDQUE4LCVmcDEJIyBmcDEgaXMgQjEyCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqQjEyCisJZm1vdi5zCQkmMHgzMTBGODI5MCwlZnAyCSMgZnAyIGlzIEIxMQorCWZhZGQucwkJJjB4MzJENzMyMjAsJWZwMQkjIGZwMSBpcyBCMTArUypCMTIKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKkIxMQorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKihCMTAgKyAuLi4KKworCWZhZGQucwkJJjB4MzQ5M0YyODEsJWZwMgkjIGZwMiBpcyBCOStTKi4uLgorCWZhZGQuZAkJRU0xQjgoJXBjKSwlZnAxCQkjIGZwMSBpcyBCOCtTKi4uLgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqKEI5Ky4uLgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKihCOCsuLi4KKworCWZhZGQuZAkJRU0xQjcoJXBjKSwlZnAyCQkjIGZwMiBpcyBCNytTKi4uLgorCWZhZGQuZAkJRU0xQjYoJXBjKSwlZnAxCQkjIGZwMSBpcyBCNitTKi4uLgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqKEI3Ky4uLgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKihCNisuLi4KKworCWZhZGQuZAkJRU0xQjUoJXBjKSwlZnAyCQkjIGZwMiBpcyBCNStTKi4uLgorCWZhZGQuZAkJRU0xQjQoJXBjKSwlZnAxCQkjIGZwMSBpcyBCNCtTKi4uLgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqKEI1Ky4uLgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKihCNCsuLi4KKworCWZhZGQuZAkJRU0xQjMoJXBjKSwlZnAyCQkjIGZwMiBpcyBCMytTKi4uLgorCWZhZGQueAkJRU0xQjIoJXBjKSwlZnAxCQkjIGZwMSBpcyBCMitTKi4uLgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqKEIzKy4uLgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKihCMisuLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKlMqKEIzKy4uLikKKwlmbXVsLngJCSglYTApLCVmcDEJCSMgZnAxIGlzIFgqUyooQjIuLi4KKworCWZtdWwucwkJJjB4M0YwMDAwMDAsJWZwMAkjIGZwMCBpcyBTKkIxCisJZmFkZC54CQklZnAyLCVmcDEJCSMgZnAxIGlzIFEKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBmcDIgcmVzdG9yZWQgeyVmcDIvJWZwM30KKworCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCBpcyBTKkIxK1EKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQkoJWEwKSwlZnAwCisJYnJhCQl0X2lueDIKKworRU0xQklHOgorIy0tU3RlcCAxMAl8WHwgPiA3MCBsb2cyCisJbW92LmwJCSglYTApLCVkMQorCWNtcC5sCQklZDEsJjAKKwliZ3QudwkJRVhQQzEKKyMtLVN0ZXAgMTAuMgorCWZtb3YucwkJJjB4QkY4MDAwMDAsJWZwMAkjIGZwMCBpcyAtMQorCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQkmMHgwMDgwMDAwMCwlZnAwCSMgLTEgKyAyXigtMTI2KQorCWJyYQkJdF9taW54MgorCisJZ2xvYmFsCQlzZXRveG0xZAorc2V0b3htMWQ6CisjLS1lbnRyeSBwb2ludCBmb3IgRVhQTTEoWCksIGhlcmUgWCBpcyBkZW5vcm1hbGl6ZWQKKyMtLVN0ZXAgMC4KKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNnZXRleHAoKTogIHJldHVybnMgdGhlIGV4cG9uZW50IHBvcnRpb24gb2YgdGhlIGlucHV0IGFyZ3VtZW50LgkjCisjCSAgICAgIFRoZSBleHBvbmVudCBiaWFzIGlzIHJlbW92ZWQgYW5kIHRoZSBleHBvbmVudCB2YWx1ZSBpcwkjCisjCSAgICAgIHJldHVybmVkIGFzIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIgaW4gZnAwLgkJIworIyBzZ2V0ZXhwZCgpOiBoYW5kbGVzIGRlbm9ybWFsaXplZCBudW1iZXJzLgkJCQkjCisjCQkJCQkJCQkJIworIyBzZ2V0bWFuKCk6ICBleHRyYWN0cyB0aGUgbWFudGlzc2Egb2YgdGhlIGlucHV0IGFyZ3VtZW50LiBUaGUJCSMKKyMJICAgICAgbWFudGlzc2EgaXMgY29udmVydGVkIHRvIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIgdy8JIworIwkgICAgICBhbiBleHBvbmVudCBvZiAkM2ZmZiBhbmQgaXMgcmV0dXJuZWQgaW4gZnAwLiBUaGUgcmFuZ2Ugb2YgIworIwkgICAgICB0aGUgcmVzdWx0IGlzIFsxLjAgLSAyLjApLgkJCQkjCisjIHNnZXRtYW5kKCk6IGhhbmRsZXMgZGVub3JtYWxpemVkIG51bWJlcnMuCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwICA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gZXhwb25lbnQoWCkgb3IgbWFudGlzc2EoWCkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2dldGV4cAorc2dldGV4cDoKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGdldCB0aGUgZXhwb25lbnQKKwliY2xyCQkmMHhmLCVkMAkJIyBjbGVhciB0aGUgc2lnbiBiaXQKKwlzdWJpLncJCSYweDNmZmYsJWQwCQkjIHN1YnRyYWN0IG9mZiB0aGUgYmlhcworCWZtb3YudwkJJWQwLCVmcDAJCSMgcmV0dXJuIGV4cCBpbiBmcDAKKwlibHQuYgkJc2dldGV4cG4JCSMgaXQncyBuZWdhdGl2ZQorCXJ0cworCitzZ2V0ZXhwbjoKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisJZ2xvYmFsCQlzZ2V0ZXhwZAorc2dldGV4cGQ6CisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZQorCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgYW10KQorCXN1YmkudwkJJjB4M2ZmZiwlZDAJCSMgc3VidHJhY3Qgb2ZmIHRoZSBiaWFzCisJZm1vdi53CQklZDAsJWZwMAkJIyByZXR1cm4gZXhwIGluIGZwMAorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCisKKwlnbG9iYWwJCXNnZXRtYW4KK3NnZXRtYW46CisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBnZXQgdGhlIGV4cAorCW9yaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBvbGQgZXhwCisJYmNscgkJJjB4ZSwlZDAJCSMgbWFrZSBpdCB0aGUgbmV3IGV4cCArLTNmZmYKKworIyBoZXJlLCB3ZSBidWlsZCB0aGUgcmVzdWx0IGluIGEgdG1wIGxvY2F0aW9uIHNvIGFzIG5vdCB0byBkaXN0dXJiIHRoZSBpbnB1dAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBjb3B5IHRvIHRtcCBsb2MKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSB0byB0bXAgbG9jCisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHB1dCBuZXcgdmFsdWUgYmFjayBpbiBmcDAKKwlibWkuYgkJc2dldG1hbm4JCSMgaXQncyBuZWdhdGl2ZQorCXJ0cworCitzZ2V0bWFubjoKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisjCisjIEZvciBkZW5vcm1hbGl6ZWQgbnVtYmVycywgc2hpZnQgdGhlIG1hbnRpc3NhIHVudGlsIHRoZSBqLWJpdCA9IDEsCisjIHRoZW4gbG9hZCB0aGUgZXhwb25lbnQgd2l0aCArLzEgJDNmZmYuCisjCisJZ2xvYmFsCQlzZ2V0bWFuZAorc2dldG1hbmQ6CisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBleHBvbmVudAorCWJyYS5iCQlzZ2V0bWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2Nvc2goKTogIGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzY29zaGQoKTogY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGNvc2goWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQ09TSAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPiAxNjM4MCBsb2cyLCBnbyB0byAzLgkJCQkjCisjCQkJCQkJCQkJIworIwkyLiAofFh8IDw9IDE2MzgwIGxvZzIpIENvc2goWCkgaXMgb2J0YWluZWQgYnkgdGhlIGZvcm11bGFlCSMKKyMJCXkgPSB8WHwsIHogPSBleHAoWSksIGFuZAkJCQkjCisjCQljb3NoKFgpID0gKDEvMikqKCB6ICsgMS96ICkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuICh8WHwgPiAxNjM4MCBsb2cyKS4gSWYgfFh8ID4gMTY0ODAgbG9nMiwgZ28gdG8gNS4JCSMKKyMJCQkJCQkJCQkjCisjCTQuICgxNjM4MCBsb2cyIDwgfFh8IDw9IDE2NDgwIGxvZzIpCQkJCSMKKyMJCWNvc2goWCkgPSBzaWduKFgpICogZXhwKHxYfCkvMi4JCQkJIworIwkJSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZQkJIworIwkJb3ZlcmZsb3cuIFRodXMsIHdlIGNhbGN1bGF0ZSBzaW5oKFgpIGFzIGZvbGxvd3M6CSMKKyMJCVkJOj0gfFh8CQkJCQkJIworIwkJRmFjdAk6PQkyKiooMTYzODApCQkJCSMKKyMJCVknCTo9IFkgLSAxNjM4MSBsb2cyCQkJCSMKKyMJCWNvc2goWCkgOj0gRmFjdCAqIGV4cChZJykuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgkJIworIwkJSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCSMKKyMJCXRoZSBhcHByb3ByaWF0ZSBzaWduLiBIdWdlIGlzIHRoZSBsYXJnZXN0IGZpbml0ZSBudW1iZXIJIworIwkJaW4gZXh0ZW5kZWQgZm9ybWF0LiBFeGl0LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUV08xNjM4MDoKKwlsb25nCQkweDdGRkIwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKwlnbG9iYWwJCXNjb3NoCitzY29zaDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4NDAwQ0IxNjcKKwliZ3QuYgkJQ09TSEJJRworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxNjM4MCBMT0cyCisjLS1DT1NIKFgpID0gKDEvMikgKiAoIEVYUChYKSArIDEvRVhQKFgpICkKKworCWZhYnMueAkJJWZwMAkJCSMgfFh8CisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSB8WHwgdG8gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byB8WHwKKwlic3IJCXNldG94CQkJIyBGUDAgSVMgRVhQKHxYfCkKKwlhZGQubAkJJjB4Yywlc3AJCSMgZXJhc2UgfFh8IGZyb20gc3RhY2sKKwlmbXVsLnMJCSYweDNGMDAwMDAwLCVmcDAJIyAoMS8yKUVYUCh8WHwpCisJbW92LmwJCSglc3ApKywlZDAKKworCWZtb3YucwkJJjB4M0U4MDAwMDAsJWZwMQkjICgxLzQpCisJZmRpdi54CQklZnAwLCVmcDEJCSMgMS8oMiBFWFAofFh8KSkKKworCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGQUREX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgQURECisJZmFkZC54CQklZnAxLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworQ09TSEJJRzoKKwljbXAubAkJJWQxLCYweDQwMENCMkIzCisJYmd0LmIJCUNPU0hIVUdFCisKKwlmYWJzLngJCSVmcDAKKwlmc3ViLmQJCVQxKCVwYyksJWZwMAkJIyAofFh8LTE2MzgxTE9HMl9MRUFEKQorCWZzdWIuZAkJVDIoJXBjKSwlZnAwCQkjIHxYfCAtIDE2MzgxIExPRzIsIEFDQ1VSQVRFCisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBmcDAgdG8gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBmcDAKKwlic3IJCXNldG94CisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIGZwMCBmcm9tIHN0YWNrCisJbW92LmwJCSglc3ApKywlZDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQlUV08xNjM4MCglcGMpLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworQ09TSEhVR0U6CisJYnJhCQl0X292ZmwyCisKKwlnbG9iYWwJCXNjb3NoZAorIy0tQ09TSChYKSA9IDEgRk9SIERFTk9STUFMSVpFRCBYCitzY29zaGQ6CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNzaW5oKCk6ICBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzc2luaGQoKTogY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBzaW5oKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjICAgICAgIFNJTkgJCQkJCQkJCSMKKyMgICAgICAgMS4gSWYgfFh8ID4gMTYzODAgbG9nMiwgZ28gdG8gMy4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgMi4gKHxYfCA8PSAxNjM4MCBsb2cyKSBTaW5oKFgpIGlzIG9idGFpbmVkIGJ5IHRoZSBmb3JtdWxhCSMKKyMgICAgICAgICAgICAgICB5ID0gfFh8LCBzZ24gPSBzaWduKFgpLCBhbmQgeiA9IGV4cG0xKFkpLAkJIworIyAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzZ24qKDEvMikqKCB6ICsgei8oMSt6KSApLgkJCSMKKyMgICAgICAgICAgRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgMy4gSWYgfFh8ID4gMTY0ODAgbG9nMiwgZ28gdG8gNS4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgNC4gKDE2MzgwIGxvZzIgPCB8WHwgPD0gMTY0ODAgbG9nMikJCQkJIworIyAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzaWduKFgpICogZXhwKHxYfCkvMi4JCQkJIworIyAgICAgICAgICBIb3dldmVyLCBpbnZva2luZyBleHAofFh8KSBtYXkgY2F1c2UgcHJlbWF0dXJlIG92ZXJmbG93LgkjCisjICAgICAgICAgIFRodXMsIHdlIGNhbGN1bGF0ZSBzaW5oKFgpIGFzIGZvbGxvd3M6CQkJIworIyAgICAgICAgICAgICBZICAgICAgIDo9IHxYfAkJCQkJCSMKKyMgICAgICAgICAgICAgc2duICAgICA6PSBzaWduKFgpCQkJCQkjCisjICAgICAgICAgICAgIHNnbkZhY3QgOj0gc2duICogMioqKDE2MzgwKQkJCQkjCisjICAgICAgICAgICAgIFknICAgICAgOj0gWSAtIDE2MzgxIGxvZzIJCQkJCSMKKyMgICAgICAgICAgICAgc2luaChYKSA6PSBzZ25GYWN0ICogZXhwKFknKS4JCQkJIworIyAgICAgICAgICBFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICA1LiAofFh8ID4gMTY0ODAgbG9nMikgc2luaChYKSBtdXN0IG92ZXJmbG93LiBSZXR1cm4JCSMKKyMgICAgICAgICAgc2lnbihYKSpIdWdlKkh1Z2UgdG8gZ2VuZXJhdGUgb3ZlcmZsb3cgYW5kIGFuIGluZmluaXR5IHdpdGgJIworIyAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyIGluCSMKKyMgICAgICAgICAgZXh0ZW5kZWQgZm9ybWF0LiBFeGl0LgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3NpbmgKK3NzaW5oOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwltb3YubAkJJWQxLCVhMQkJCSMgc2F2ZSAoY29tcGFjdGVkKSBvcGVyYW5kCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4NDAwQ0IxNjcKKwliZ3QuYgkJU0lOSEJJRworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxNjM4MCBMT0cyCisjLS1ZID0gfFh8LCBaID0gRVhQTTEoWSksIFNJTkgoWCkgPSBTSUdOKFgpKigxLzIpKiggWiArIFovKDErWikgKQorCisJZmFicy54CQklZnAwCQkJIyBZID0gfFh8CisKKwltb3ZtLmwJCSYweDgwNDAsLSglc3ApCQkjIHthMS9kMH0KKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBZIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWQorCWNsci5sCQklZDAKKwlic3IJCXNldG94bTEJCQkjIEZQMCBJUyBaID0gRVhQTTEoWSkKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWSBmcm9tIHN0YWNrCisJZm1vdi5sCQkmMCwlZnBjcgorCW1vdm0ubAkJKCVzcCkrLCYweDAyMDEJCSMge2ExL2QwfQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyAxK1oKKwlmbW92LngJCSVmcDAsLSglc3ApCisJZmRpdi54CQklZnAxLCVmcDAJCSMgWi8oMStaKQorCW1vdi5sCQklYTEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW9yLmwJCSYweDNGMDAwMDAwLCVkMQorCWZhZGQueAkJKCVzcCkrLCVmcDAKKwltb3YubAkJJWQxLC0oJXNwKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLnMJCSglc3ApKywlZnAwCQkjIGxhc3QgZnAgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbnMgc2V0CisJYnJhCQl0X2NhdGNoCisKK1NJTkhCSUc6CisJY21wLmwJCSVkMSwmMHg0MDBDQjJCMworCWJndAkJdF9vdmZsCisJZmFicy54CQklZnAwCisJZnN1Yi5kCQlUMSglcGMpLCVmcDAJCSMgKHxYfC0xNjM4MUxPRzJfTEVBRCkKKwltb3YubAkJJjAsLSglc3ApCisJbW92LmwJCSYweDgwMDAwMDAwLC0oJXNwKQorCW1vdi5sCQklYTEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW9yLmwJCSYweDdGRkIwMDAwLCVkMQorCW1vdi5sCQklZDEsLSglc3ApCQkjIEVYVEVOREVEIEZNVAorCWZzdWIuZAkJVDIoJXBjKSwlZnAwCQkjIHxYfCAtIDE2MzgxIExPRzIsIEFDQ1VSQVRFCisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBmcDAgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBmcDAKKwlic3IJCXNldG94CisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIGZwMCBmcm9tIHN0YWNrCisKKwltb3YubAkJKCVzcCkrLCVkMAorCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQkoJXNwKSssJWZwMAkJIyBwb3NzaWJsZSBleGNlcHRpb24KKwlicmEJCXRfY2F0Y2gKKworCWdsb2JhbAkJc3NpbmhkCisjLS1TSU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3NzaW5oZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0YW5oKCk6ICBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHN0YW5oZCgpOiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHRhbmgoWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJVEFOSAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gKDUvMikgbG9nMiBvciB8WHwgPD0gMioqKC00MCksIGdvIHRvIDMuCQkjCisjCQkJCQkJCQkJIworIwkyLiAoMioqKC00MCkgPCB8WHwgPCAoNS8yKSBsb2cyKSBDYWxjdWxhdGUgdGFuaChYKSBieQkJIworIwkJc2duIDo9IHNpZ24oWCksIHkgOj0gMnxYfCwgeiA6PSBleHBtMShZKSwgYW5kCQkjCisjCQl0YW5oKFgpID0gc2duKiggei8oMit6KSApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiAofFh8IDw9IDIqKigtNDApIG9yIHxYfCA+PSAoNS8yKSBsb2cyKS4gSWYgfFh8IDwgMSwJCSMKKyMJCWdvIHRvIDcuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKHxYfCA+PSAoNS8yKSBsb2cyKSBJZiB8WHwgPj0gNTAgbG9nMiwgZ28gdG8gNi4JCSMKKyMJCQkJCQkJCQkjCisjCTUuICgoNS8yKSBsb2cyIDw9IHxYfCA8IDUwIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5CQkjCisjCQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cChZKSwJCQkjCisjCQl0YW5oKFgpID0gc2duIC0gWyBzZ24qMi8oMSt6KSBdLgkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTYuICh8WHwgPj0gNTAgbG9nMikgVGFuaChYKSA9ICstMSAocm91bmQgdG8gbmVhcmVzdCkuIFRodXMsIHdlCSMKKyMJCWNhbGN1bGF0ZSBUYW5oKFgpIGJ5CQkJCQkjCisjCQlzZ24gOj0gc2lnbihYKSwgVGlueSA6PSAyKiooLTEyNiksCQkJIworIwkJdGFuaChYKSA6PSBzZ24gLSBzZ24qVGlueS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNy4gKHxYfCA8IDIqKigtNDApKS4gVGFuaChYKSA9IFguCUV4aXQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRlJBQyxYKzQKKworCXNldAkJU0dOLExfU0NSMworCisJc2V0CQlWLEZQX1NDUjAKKworCWdsb2JhbAkJc3RhbmgKK3N0YW5oOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwlmbW92LngJCSVmcDAsWCglYTYpCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJbW92LmwJCSVkMSxYKCVhNikKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwgJjB4M2ZkNzgwMDAJIyBpcyB8WHwgPCAyXigtNDApPworCWJsdC53CQlUQU5IQk9SUwkJIyB5ZXMKKwljbXAubAkJJWQxLCAmMHgzZmZmZGRjZQkjIGlzIHxYfCA+ICg1LzIpTE9HMj8KKwliZ3QudwkJVEFOSEJPUlMJCSMgeWVzCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UKKyMtLVkgPSAyfFh8LCBaID0gRVhQTTEoWSksIFRBTkgoWCkgPSBTSUdOKFgpICogWiAvIChaKzIpLgorCisJbW92LmwJCVgoJWE2KSwlZDEKKwltb3YubAkJJWQxLFNHTiglYTYpCisJYW5kLmwJCSYweDdGRkYwMDAwLCVkMQorCWFkZC5sCQkmMHgwMDAxMDAwMCwlZDEJCSMgRVhQT05FTlQgT0YgMnxYfAorCW1vdi5sCQklZDEsWCglYTYpCisJYW5kLmwJCSYweDgwMDAwMDAwLFNHTiglYTYpCisJZm1vdi54CQlYKCVhNiksJWZwMAkJIyBGUDAgSVMgWSA9IDJ8WHwKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDEsLSglc3ApCQkjIHNhdmUgWSBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFkKKwlic3IJCXNldG94bTEJCQkjIEZQMCBJUyBaID0gRVhQTTEoWSkKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWSBmcm9tIHN0YWNrCisJbW92LmwJCSglc3ApKywlZDAKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZmFkZC5zCQkmMHg0MDAwMDAwMCwlZnAxCSMgWisyCisJbW92LmwJCVNHTiglYTYpLCVkMQorCWZtb3YueAkJJWZwMSxWKCVhNikKKwllb3IubAkJJWQxLFYoJWE2KQorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwlmZGl2LngJCVYoJWE2KSwlZnAwCisJYnJhCQl0X2lueDIKKworVEFOSEJPUlM6CisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJsdC53CQlUQU5IU00KKworCWNtcC5sCQklZDEsJjB4NDAwNDhBQTEKKwliZ3QudwkJVEFOSEhVR0UKKworIy0tICg1LzIpIExPRzIgPCB8WHwgPCA1MCBMT0cyLAorIy0tVEFOSChYKSA9IDEgLSAoMi9bRVhQKDJYKSsxXSkuIExFVCBZID0gMnxYfCwgU0dOID0gU0lHTihYKSwKKyMtLVRBTkgoWCkgPSBTR04gLQlTR04qMi9bRVhQKFkpKzFdLgorCisJbW92LmwJCVgoJWE2KSwlZDEKKwltb3YubAkJJWQxLFNHTiglYTYpCisJYW5kLmwJCSYweDdGRkYwMDAwLCVkMQorCWFkZC5sCQkmMHgwMDAxMDAwMCwlZDEJCSMgRVhQTyBPRiAyfFh8CisJbW92LmwJCSVkMSxYKCVhNikJCSMgWSA9IDJ8WHwKKwlhbmQubAkJJjB4ODAwMDAwMDAsU0dOKCVhNikKKwltb3YubAkJU0dOKCVhNiksJWQxCisJZm1vdi54CQlYKCVhNiksJWZwMAkJIyBZID0gMnxYfAorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWSBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFkKKwlic3IJCXNldG94CQkJIyBGUDAgSVMgRVhQKFkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFkgZnJvbSBzdGFjaworCW1vdi5sCQkoJXNwKSssJWQwCisJbW92LmwJCVNHTiglYTYpLCVkMQorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIEVYUChZKSsxCisKKwllb3IubAkJJjB4QzAwMDAwMDAsJWQxCQkjIC1TSUdOKFgpKjIKKwlmbW92LnMJCSVkMSwlZnAxCQkjIC1TSUdOKFgpKjIgSU4gU0dMIEZNVAorCWZkaXYueAkJJWZwMCwlZnAxCQkjIC1TSUdOKFgpMiAvIFtFWFAoWSkrMSBdCisKKwltb3YubAkJU0dOKCVhNiksJWQxCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjIFNHTgorCWZtb3YucwkJJWQxLCVmcDAJCSMgU0dOIElOIFNHTCBGTVQKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJbW92LmIJCSZGQUREX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgQURECisJZmFkZC54CQklZnAxLCVmcDAKKwlicmEJCXRfaW54MgorCitUQU5IU006CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQlYKCVhNiksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2NhdGNoCisKKyMtLS1SRVRVUk4gU0dOKFgpIC0gU0dOKFgpRVBTCitUQU5ISFVHRToKKwltb3YubAkJWCglYTYpLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHgzRjgwMDAwMCwlZDEKKwlmbW92LnMJCSVkMSwlZnAwCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCWVvci5sCQkmMHg4MDgwMDAwMCwlZDEJCSMgLVNJR04oWCkqRVBTCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCWZhZGQucwkJJWQxLCVmcDAKKwlicmEJCXRfaW54MgorCisJZ2xvYmFsCQlzdGFuaGQKKyMtLVRBTkgoWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc3RhbmhkOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2xvZ24oKTogICAgY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2duZCgpOiAgIGNvbXB1dGVzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2ducDEoKTogIGNvbXB1dGVzIHRoZSBsb2coMStYKSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2xvZ25wMWQoKTogY29tcHV0ZXMgdGhlIGxvZygxK1gpIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBsb2coWCkgb3IgbG9nKDErWCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDIgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTE9HTjoJCQkJCQkJCSMKKyMJU3RlcCAxLiBJZiB8WC0xfCA8IDEvMTYsIGFwcHJveGltYXRlIGxvZyhYKSBieSBhbiBvZGQJCSMKKyMJCXBvbHlub21pYWwgaW4gdSwgd2hlcmUgdSA9IDIoWC0xKS8oWCsxKS4gT3RoZXJ3aXNlLAkjCisjCQltb3ZlIG9uIHRvIFN0ZXAgMi4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4gWCA9IDIqKmsgKiBZIHdoZXJlIDEgPD0gWSA8IDIuIERlZmluZSBGIHRvIGJlIHRoZSBmaXJzdAkjCisjCQlzZXZlbiBzaWduaWZpY2FudCBiaXRzIG9mIFkgcGx1cyAyKiooLTcpLCBpLmUuCQkjCisjCQlGID0gMS54eHh4eHgxIGluIGJhc2UgMiB3aGVyZSB0aGUgc2l4ICJ4IiBtYXRjaCB0aG9zZQkjCisjCQlvZiBZLiBOb3RlIHRoYXQgfFktRnwgPD0gMioqKC03KS4JCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuIERlZmluZSB1ID0gKFktRikvRi4gQXBwcm94aW1hdGUgbG9nKDErdSkgYnkgYQkJIworIwkJcG9seW5vbWlhbCBpbiB1LCBsb2coMSt1KSA9IHBvbHkuCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA0LiBSZWNvbnN0cnVjdAkJCQkJCSMKKyMJCWxvZyhYKSA9IGxvZyggMioqayAqIFkgKSA9IGsqbG9nKDIpICsgbG9nKEYpICsgbG9nKDErdSkJIworIwkJYnkgaypsb2coMikgKyAobG9nKEYpICsgcG9seSkuIFRoZSB2YWx1ZXMgb2YgbG9nKEYpIGFyZQkjCisjCQljYWxjdWxhdGVkIGJlZm9yZWhhbmQgYW5kIHN0b3JlZCBpbiB0aGUgcHJvZ3JhbS4JIworIwkJCQkJCQkJCSMKKyMJbG9nbnAxOgkJCQkJCQkJIworIwlTdGVwIDE6IElmIHxYfCA8IDEvMTYsIGFwcHJveGltYXRlIGxvZygxK1gpIGJ5IGFuIG9kZAkJIworIwkJcG9seW5vbWlhbCBpbiB1IHdoZXJlIHUgPSAyWC8oMitYKS4gT3RoZXJ3aXNlLCBtb3ZlIG9uCSMKKyMJCXRvIFN0ZXAgMi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDI6IExldCAxK1ggPSAyKiprICogWSwgd2hlcmUgMSA8PSBZIDwgMi4gRGVmaW5lIEYgYXMgZG9uZQkjCisjCQlpbiBTdGVwIDIgb2YgdGhlIGFsZ29yaXRobSBmb3IgTE9HTiBhbmQgY29tcHV0ZQkJIworIwkJbG9nKDErWCkgYXMgaypsb2coMikgKyBsb2coRikgKyBwb2x5IHdoZXJlIHBvbHkJCSMKKyMJCWFwcHJveGltYXRlcyBsb2coMSt1KSwgdSA9IChZLUYpL0YuCQkJIworIwkJCQkJCQkJCSMKKyMJSW1wbGVtZW50YXRpb24gTm90ZXM6CQkJCQkJIworIwlOb3RlIDEuIFRoZXJlIGFyZSA2NCBkaWZmZXJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBGLCB0aHVzIDY0CSMKKyMJCWxvZyhGKSdzIG5lZWQgdG8gYmUgdGFidWxhdGVkLiBNb3Jlb3ZlciwgdGhlIHZhbHVlcyBvZgkjCisjCQkxL0YgYXJlIGFsc28gdGFidWxhdGVkIHNvIHRoYXQgdGhlIGRpdmlzaW9uIGluIChZLUYpL0YJIworIwkJY2FuIGJlIHBlcmZvcm1lZCBieSBhIG11bHRpcGxpY2F0aW9uLgkJCSMKKyMJCQkJCQkJCQkjCisjCU5vdGUgMi4gSW4gU3RlcCAyIG9mIGxvZ25wMSwgaW4gb3JkZXIgdG8gcHJlc2VydmVkIGFjY3VyYWN5LAkjCisjCQl0aGUgdmFsdWUgWS1GIGhhcyB0byBiZSBjYWxjdWxhdGVkIGNhcmVmdWxseSB3aGVuCSMKKyMJCTEvMiA8PSBYIDwgMy8yLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCU5vdGUgMy4gVG8gZnVsbHkgZXhwbG9pdCB0aGUgcGlwZWxpbmUsIHBvbHlub21pYWxzIGFyZSB1c3VhbGx5CSMKKyMJCXNlcGFyYXRlZCBpbnRvIHR3byBwYXJ0cyBldmFsdWF0ZWQgaW5kZXBlbmRlbnRseSBiZWZvcmUJIworIwkJYmVpbmcgYWRkZWQgdXAuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xPR09GMjoKKwlsb25nCQkweDNGRkUwMDAwLDB4QjE3MjE3RjcsMHhEMUNGNzlBQywweDAwMDAwMDAwCisKK29uZToKKwlsb25nCQkweDNGODAwMDAwCit6ZXJvOgorCWxvbmcJCTB4MDAwMDAwMDAKK2luZnR5OgorCWxvbmcJCTB4N0Y4MDAwMDAKK25lZ29uZToKKwlsb25nCQkweEJGODAwMDAwCisKK0xPR0E2OgorCWxvbmcJCTB4M0ZDMjQ5OUEsMHhCNUU0MDQwQgorTE9HQTU6CisJbG9uZwkJMHhCRkM1NTVCNSwweDg0OENCN0RCCisKK0xPR0E0OgorCWxvbmcJCTB4M0ZDOTk5OTksMHg5ODdEODczMAorTE9HQTM6CisJbG9uZwkJMHhCRkNGRkZGRiwweEZGNkY3RTk3CisKK0xPR0EyOgorCWxvbmcJCTB4M0ZENTU1NTUsMHg1NTU1NTVBNAorTE9HQTE6CisJbG9uZwkJMHhCRkUwMDAwMCwweDAwMDAwMDA4CisKK0xPR0I1OgorCWxvbmcJCTB4M0YxNzU0OTYsMHhBREQ3REFENgorTE9HQjQ6CisJbG9uZwkJMHgzRjNDNzFDMiwweEZFODBDN0UwCisKK0xPR0IzOgorCWxvbmcJCTB4M0Y2MjQ5MjQsMHg5MjhCQ0NGRgorTE9HQjI6CisJbG9uZwkJMHgzRjg5OTk5OSwweDk5OTk5NUVDCisKK0xPR0IxOgorCWxvbmcJCTB4M0ZCNTU1NTUsMHg1NTU1NTU1NQorVFdPOgorCWxvbmcJCTB4NDAwMDAwMDAsMHgwMDAwMDAwMAorCitMVEhPTEQ6CisJbG9uZwkJMHgzZjk5MDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitMT0dUQkw6CisJbG9uZwkJMHgzRkZFMDAwMCwweEZFMDNGODBGLDB4RTAzRjgwRkUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGNzAwMDAsMHhGRjAxNTM1OCwweDgzM0M0N0UyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RkEyMzJDRjIsMHg1MjEzOEFDMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkY5MDAwMCwweEJEQzhEODNFLDB4QUQ4OEQ1NDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGNjYwM0Q5OCwweDBGNjYwM0RBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkEwMDAwLDB4OUNGNDNEQ0YsMHhGNUVBRkQ0OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEYyQjlENjQ4LDB4MEYyQjlENjUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQTAwMDAsMHhEQTE2RUI4OCwweENCOERGNjE0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RUYyRUI3MUYsMHhDNDM0NTIzOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweDhCMjlCNzc1LDB4MUJENzA3NDMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFQkJEQjJBNSwweEMxNjE5QzhDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QThEODM5RjgsMHgzMEMxRkI0OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEU4NjVBQzdCLDB4NzYwM0ExOTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhDNjFBMkVCMSwweDhDRDkwN0FELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTUyNTk4MkEsMHhGNzBDODgwRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEUyRjJBNDdBLDB4REUzQTE4QUYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFMUZDNzgwRSwweDFGQzc4MEUyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RkY2NDg5OEUsMHhERjU1RDU1MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweERFRTk1QzRDLDB4QTAzN0JBNTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg4REI5NTZBOSwweDdCM0QwMTQ4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4REJFQjYxRUUsMHhEMTlDNTk1OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDlCOEZFMTAwLDB4RjQ3QkExREUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhEOTAxQjIwMywweDY0MDZDODBFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QTkzNzJGMUQsMHgwREExQkQxNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQ2MkI4MEQ2LDB4MkI4MEQ2MkMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhCNkIwN0YzOCwweENFOTBFNDZCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDM2ODBEMzYsMHg4MEQzNjgwRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEMzRkQwMzI5LDB4MDY0ODg0ODEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhEMEI2OUZDQiwweEQyNTgwRDBCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RDExREUwRkYsMHgxNUFCMThDQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweENFMTY4QTc3LDB4MjUwODBDRTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhERTE0MzNBMSwweDZDNjZCMTUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4Q0I4NzI3QzAsMHg2NUMzOTNFMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEVBRTEwQjVBLDB4N0REQzhBREQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDOTA3REE0RSwweDg3MTE0NkFELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4Rjc4NTZFNUUsMHhFMkM5QjI5MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM2OTgwQzY5LDB4ODBDNjk4MEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4MjAxMkNBNSwweEE2ODIwNkQ3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzQzNzJGODUsMHg1RDgyNENBNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDg4MkM1RkNELDB4NzI1NkE4QzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDMUU0QkJENSwweDk1RjZFOTQ3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OEU0NEM2MEIsMHg0Q0NGRDdERSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJGQTAyRkU4LDB4MEJGQTAyRkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5NDRBRDA5RSwweEY0MzUxQUY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkQ2OTEwNDcsMHgwNzY2MUFBMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDlBM0VFQ0Q0LDB4QzNFQUE2QjIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCQjNFRTcyMSwweEE1NEQ4ODBDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QTAyMTg0MzQsMHgzNTNGMURFOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEI5MjE0M0ZBLDB4MzZGNUUwMkUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBNUYyRkNBQiwweEJCQzUwNkRBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjcwRkJCNUEsMHgxOUJFMzY1OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEFCQjNCOEJBLDB4MkFEMzYyQTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCNTA5RTY4QSwweDlCOTQ4MjFGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QjE2NDE3OTUsMHhDRTNDQTk3QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEIzMEY2MzUyLDB4ODkxN0M4MEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCNzA0NzU1MSwweDVEMEYxQzYxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjExRkQzQjgsMHgwQjExRkQzQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEJDOTUyQUZFLDB4RUEzRDEzRTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBRjNBRERDNiwweDgwQUYzQURFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QzIxNjhFRDAsMHhGNDU4QkE0QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFENjAyQjU4LDB4MEFENjAyQjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDNzg4RjQzOSwweEIzMTYzQkYxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUI4RjY5RTIsMHg4MzU5Q0QxMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweENDRUNBQzA4LDB4QkYwNDU2NUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBOUM4NEE0NywweEEwN0Y1NjM4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RDI0MjA0ODcsMHgyREQ4NTE2MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE4MEE4MEE4LDB4MEE4MEE4MEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhENzg5NDk5MiwweDNCQzM1ODhBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTY1NUM0MzksMHgyRDdCNzNBOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweERDQzJDNEI0LDB4OTg4N0RBQ0MsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNEE5Q0YxRCwweDk2ODMzNzUxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RTFFRUJEM0UsMHg2RDZBNkI5RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEEzMDY1RTNGLDB4QUU3Q0QwRTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFNzBENzg1QywweDJGOUY1QkRDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTE2QjMxMkUsMHhBOEZDMzc3RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEVDMUYzOTJDLDB4NTE3OUYyODMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5RkQ4MDlGRCwweDgwOUZEODBBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RjEyNDQwRDMsMHhFMzYxMzBFNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlFNENBRDIzLDB4REQ1RjNBMjAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGNjFDQ0U5MiwweDM0NjYwMEJCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUNDOEUxNjAsMHhDM0ZCMTlCOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEZCMDkxRkQzLDB4ODE0NTYzMEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5QjRDNkY5RSwweEYwM0EzQ0FBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RkZFOTcwNDIsMHhCRkE0QzJBRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk5RDcyMkRBLDB4QkRFNThGMDYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MjVFRkNFRCwweDQ5MzY5MzMwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTg2OEM4MDksMHg4NjhDODA5OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg0QzM3QTdBLDB4QjlBOTA1QzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NzAxMkUwMiwweDVDMDRCODA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODcyMjRDMkUsMHg4RTY0NUZCNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk1QTAyNTY4LDB4MDk1QTAyNTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4OTdCOENBQywweDlGN0RFMjk4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTQ0NTgwOTQsMHg0NTgwOTQ0NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhCQ0Y1NURFLDB4QzRDRDA1RkUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MkYxMTM4NCwweDA0OTc4ODlDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEUxREMwRkIsMHg4OUUxMjVFNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkxQTJCM0M0LDB4RDVFNkY4MDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MDY2RTY4QywweDk1NUI2QzlCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTA1QTM4NjMsMHgzRTA2QzQzQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkyQUFERTc0LDB4QzdCRTU5RTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4RjE3NzlEOSwweEZEQzNBMjE5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTRFOUJGRjYsMHgxNTg0NTY0MywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhEREE1MjAyLDB4Mzc2OTQ4MDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NzIzQTFCNywweDIwMTM0MjAzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OENBMjlDMDQsMHg2NTE0RTAyMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk5NTg5OUM4LDB4OTBFQjg5OTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QjcwMzQ0QSwweDEzOUJDNzVBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUI4OEJEQUEsMHgzQTNEQUUyRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhBNDJGODcwLDB4NTY2OURCNDYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5REI0MjI0RiwweEZGRTExNTdDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODkxQUM3M0EsMHhFOTgxOUI1MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlGREFEQzI2LDB4OEI3QTEyREEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4N0Y3ODA4NywweEY3ODA4N0Y4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTFGQ0ZGMTcsMHhDRTczM0JENCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg2RDkwNTQ0LDB4N0EzNEFDQzYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNDFBOUU4RiwweDU0NDZGQjlGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODVCRjM3NjEsMHgyQ0VFM0M5QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE2MzNDRDdFLDB4Njc3MUNEOEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NEE5RjlDOCwweDA4NEE5RjlELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTg0ODlFNjAsMHgwQjQzNUE1RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgzOTkzMDUyLDB4M0ZCRTMzNjgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBQTU5MjMzQywweENDQTRCRDQ5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODI4Q0JGQkUsMHhCOUEwMjBBMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFDNjU2REFFLDB4NkJDQzQ5ODUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MTg0OERBOCwweEZBRjBEMjc3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUU2RDhFRTMsMHg2MEJCMjQ2OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgwODA4MDgwLDB4ODA4MDgwODEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMDcxOTdBMiwweDNDNDZDNjU0LDB4MDAwMDAwMDAKKworCXNldAkJQURKSyxMX1NDUjEKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKworCXNldAkJRixGUF9TQ1IxCisJc2V0CQlGRlJBQyxGKzQKKworCXNldAkJS0xPRzIsRlBfU0NSMAorCisJc2V0CQlTQVZFVSxGUF9TQ1IwCisKKwlnbG9iYWwJCXNsb2duCisjLS1FTlRSWSBQT0lOVCBGT1IgTE9HKFgpIEZPUiBYIEZJTklURSwgTk9OLVpFUk8sIE5PVCBOQU4nUworc2xvZ246CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwltb3YubAkJJjB4MDAwMDAwMDAsQURKSyglYTYpCisKK0xPR0JHTjoKKyMtLUZQQ1IgU0FWRUQgQU5EIENMRUFSRUQsIElOUFVUIElTIDJeKEFESkspKkZQMCwgRlAwIENPTlRBSU5TCisjLS1BIEZJTklURSwgTk9OLVpFUk8sIE5PUk1BTElaRUQgTlVNQkVSLgorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisKKwltb3YubAkJKCVhMCksWCglYTYpCisJbW92LmwJCTQoJWEwKSxYKzQoJWE2KQorCW1vdi5sCQk4KCVhMCksWCs4KCVhNikKKworCWNtcC5sCQklZDEsJjAJCQkjIENIRUNLIElGIFggSVMgTkVHQVRJVkUKKwlibHQudwkJTE9HTkVHCQkJIyBMT0cgT0YgTkVHQVRJVkUgQVJHVU1FTlQgSVMgSU5WQUxJRAorIyBYIElTIFBPU0lUSVZFLCBDSEVDSyBJRiBYIElTIE5FQVIgMQorCWNtcC5sCQklZDEsJjB4M2ZmZWYwN2QJCSMgSVMgWCA8IDE1LzE2PworCWJsdC5iCQlMT0dNQUlOCQkJIyBZRVMKKwljbXAubAkJJWQxLCYweDNmZmY4ODQxCQkjIElTIFggPiAxNy8xNj8KKwlibGUudwkJTE9HTkVBUjEJCSMgTk8KKworTE9HTUFJTjoKKyMtLVRISVMgU0hPVUxEIEJFIFRIRSBVU1VBTCBDQVNFLCBYIE5PVCBWRVJZIENMT1NFIFRPIDEKKworIy0tWCA9IDJeKEspICogWSwgMSA8PSBZIDwgMi4gVEhVUywgWSA9IDEuWFhYWFhYWFguLi4uWFggSU4gQklOQVJZLgorIy0tV0UgREVGSU5FIEYgPSAxLlhYWFhYWDEsIEkuRS4gRklSU1QgNyBCSVRTIE9GIFkgQU5EIEFUVEFDSCBBIDEuCisjLS1USEUgSURFQSBJUyBUSEFUIExPRyhYKSA9IEsqTE9HMiArIExPRyhZKQorIy0tCQkJID0gSypMT0cyICsgTE9HKEYpICsgTE9HKDEgKyAoWS1GKS9GKS4KKyMtLU5PVEUgVEhBVCBVID0gKFktRikvRiBJUyBWRVJZIFNNQUxMIEFORCBUSFVTIEFQUFJPWElNQVRJTkcKKyMtLUxPRygxK1UpIENBTiBCRSBWRVJZIEVGRklDSUVOVC4KKyMtLUFMU08gTk9URSBUSEFUIFRIRSBWQUxVRSAxL0YgSVMgU1RPUkVEIElOIEEgVEFCTEUgU08gVEhBVCBOTworIy0tRElWSVNJT04gSVMgTkVFREVEIFRPIENBTENVTEFURSAoWS1GKS9GLgorCisjLS1HRVQgSywgWSwgRiwgQU5EIEFERFJFU1MgT0YgMS9GLgorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCQkJIyBTSElGVEVEIDE2IEJJVFMsIEJJQVNFRCBFWFBPLiBPRiBYCisJc3ViLmwJCSYweDNGRkYsJWQxCQkjIFRISVMgSVMgSworCWFkZC5sCQlBREpLKCVhNiksJWQxCQkjIEFESlVTVCBLLCBPUklHSU5BTCBJTlBVVCBNQVkgQkUgIERFTk9STS4KKwlsZWEJCUxPR1RCTCglcGMpLCVhMAkJIyBCQVNFIEFERFJFU1MgT0YgMS9GIEFORCBMT0coRikKKwlmbW92LmwJCSVkMSwlZnAxCQkjIENPTlZFUlQgSyBUTyBGTE9BVElORy1QT0lOVCBGT1JNQVQKKworIy0tV0hJTEUgVEhFIENPTlZFUlNJT04gSVMgR09JTkcgT04sIFdFIEdFVCBGIEFORCBBRERSRVNTIE9GIDEvRgorCW1vdi5sCQkmMHgzRkZGMDAwMCxYKCVhNikJIyBYIElTIE5PVyBZLCBJLkUuIDJeKC1LKSpYCisJbW92LmwJCVhGUkFDKCVhNiksRkZSQUMoJWE2KQorCWFuZC5sCQkmMHhGRTAwMDAwMCxGRlJBQyglYTYpCSMgRklSU1QgNyBCSVRTIE9GIFkKKwlvci5sCQkmMHgwMTAwMDAwMCxGRlJBQyglYTYpCSMgR0VUIEY6IEFUVEFDSCBBIDEgQVQgVEhFIEVJR0hUSCBCSVQKKwltb3YubAkJRkZSQUMoJWE2KSwlZDEJIyBSRUFEWSBUTyBHRVQgQUREUkVTUyBPRiAxL0YKKwlhbmQubAkJJjB4N0UwMDAwMDAsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjQsJWQxCQkJIyBTSElGVEVEIDIwLCBEMCBJUyBUSEUgRElTUExBQ0VNRU5UCisJYWRkLmwJCSVkMSwlYTAJCQkjIEEwIElTIFRIRSBBRERSRVNTIEZPUiAxL0YKKworCWZtb3YueAkJWCglYTYpLCVmcDAKKwltb3YubAkJJjB4M2ZmZjAwMDAsRiglYTYpCisJY2xyLmwJCUYrOCglYTYpCisJZnN1Yi54CQlGKCVhNiksJWZwMAkJIyBZLUYKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMi0zIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKKyMtLVNVTU1BUlk6IEZQMCBJUyBZLUYsIEEwIElTIEFERFJFU1MgT0YgMS9GLCBGUDEgSVMgSworIy0tUkVHSVNURVJTIFNBVkVEOiBGUENSLCBGUDEsIEZQMgorCitMUDFDT05UMToKKyMtLUFOIFJFLUVOVFJZIFBPSU5UIEZPUiBMT0dOUDEKKwlmbXVsLngJCSglYTApLCVmcDAJCSMgRlAwIElTIFUgPSAoWS1GKS9GCisJZm11bC54CQlMT0dPRjIoJXBjKSwlZnAxCSMgR0VUIEsqTE9HMiBXSElMRSBGUDAgSVMgTk9UIFJFQURZCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLngJCSVmcDIsJWZwMgkJIyBGUDIgSVMgVj1VKlUKKwlmbW92LngJCSVmcDEsS0xPRzIoJWE2KQkJIyBQVVQgSypMT0cyIElOIE1FTUVPUlksIEZSRUUgRlAxCisKKyMtLUxPRygxK1UpIElTIEFQUFJPWElNQVRFRCBCWQorIy0tVSArIFYqKEExK1UqKEEyK1UqKEEzK1UqKEE0K1UqKEE1K1UqQTYpKSkpKSBXSElDSCBJUworIy0tW1UgKyBWKihBMStWKihBMytWKkE1KSldICArICBbVSpWKihBMitWKihBNCtWKkE2KSldCisKKwlmbW92LngJCSVmcDIsJWZwMworCWZtb3YueAkJJWZwMiwlZnAxCisKKwlmbXVsLmQJCUxPR0E2KCVwYyksJWZwMQkJIyBWKkE2CisJZm11bC5kCQlMT0dBNSglcGMpLCVmcDIJCSMgVipBNQorCisJZmFkZC5kCQlMT0dBNCglcGMpLCVmcDEJCSMgQTQrVipBNgorCWZhZGQuZAkJTE9HQTMoJXBjKSwlZnAyCQkjIEEzK1YqQTUKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFYqKEE0K1YqQTYpCisJZm11bC54CQklZnAzLCVmcDIJCSMgViooQTMrVipBNSkKKworCWZhZGQuZAkJTE9HQTIoJXBjKSwlZnAxCQkjIEEyK1YqKEE0K1YqQTYpCisJZmFkZC5kCQlMT0dBMSglcGMpLCVmcDIJCSMgQTErViooQTMrVipBNSkKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFYqKEEyK1YqKEE0K1YqQTYpKQorCWFkZC5sCQkmMTYsJWEwCQkJIyBBRERSRVNTIE9GIExPRyhGKQorCWZtdWwueAkJJWZwMywlZnAyCQkjIFYqKEExK1YqKEEzK1YqQTUpKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgVSpWKihBMitWKihBNCtWKkE2KSkKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBVK1YqKEExK1YqKEEzK1YqQTUpKQorCisJZmFkZC54CQkoJWEwKSwlZnAxCQkjIExPRyhGKStVKlYqKEEyK1YqKEE0K1YqQTYpKQorCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBSRVNUT1JFIEZQMi0zCisJZmFkZC54CQklZnAxLCVmcDAJCSMgRlAwIElTIExPRyhGKSArIExPRygxK1UpCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJS0xPRzIoJWE2KSwlZnAwCQkjIEZJTkFMIEFERAorCWJyYQkJdF9pbngyCisKKworTE9HTkVBUjE6CisKKyMgaWYgdGhlIGlucHV0IGlzIGV4YWN0bHkgZXF1YWwgdG8gb25lLCB0aGVuIGV4aXQgdGhyb3VnaCBsZF9wemVyby4KKyMgaWYgdGhlc2UgMiBsaW5lcyB3ZXJlbid0IGhlcmUsIHRoZSBjb3JyZWN0IGFuc3dlciB3b3VsZCBiZSByZXR1cm5lZAorIyBidXQgdGhlIElORVgyIGJpdCB3b3VsZCBiZSBzZXQuCisJZmNtcC5iCQklZnAwLCYweDEJCSMgaXMgaXQgZXF1YWwgdG8gb25lPworCWZiZXEubAkJbGRfcHplcm8JCSMgeWVzCisKKyMtLVJFR0lTVEVSUyBTQVZFRDogRlBDUiwgRlAxLiBGUDAgQ09OVEFJTlMgVEhFIElOUFVULgorCWZtb3YueAkJJWZwMCwlZnAxCisJZnN1Yi5zCQlvbmUoJXBjKSwlZnAxCQkjIEZQMSBJUyBYLTEKKwlmYWRkLnMJCW9uZSglcGMpLCVmcDAJCSMgRlAwIElTIFgrMQorCWZhZGQueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyAyKFgtMSkKKyMtLUxPRyhYKSA9IExPRygxK1UvMiktTE9HKDEtVS8yKSBXSElDSCBJUyBBTiBPREQgUE9MWU5PTUlBTAorIy0tSU4gVSwgVSA9IDIoWC0xKS8oWCsxKSA9IEZQMS9GUDAKKworTFAxQ09OVDI6CisjLS1USElTIElTIEFOIFJFLUVOVFJZIFBPSU5UIEZPUiBMT0dOUDEKKwlmZGl2LngJCSVmcDAsJWZwMQkJIyBGUDEgSVMgVQorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIFNBVkUgRlAyLTMKKyMtLVJFR0lTVEVSUyBTQVZFRCBBUkUgTk9XIEZQQ1IsRlAxLEZQMixGUDMKKyMtLUxFVCBWPVUqVSwgVz1WKlYsIENBTENVTEFURQorIy0tVSArIFUqViooQjEgKyBWKihCMiArIFYqKEIzICsgViooQjQgKyBWKkI1KSkpKSBCWQorIy0tVSArIFUqViooICBbQjEgKyBXKihCMyArIFcqQjUpXSAgKyAgW1YqKEIyICsgVypCNCldICApCisJZm1vdi54CQklZnAxLCVmcDAKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgVgorCWZtb3YueAkJJWZwMSxTQVZFVSglYTYpCQkjIFNUT1JFIFUgSU4gTUVNT1JZLCBGUkVFIEZQMQorCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFcKKworCWZtb3YuZAkJTE9HQjUoJXBjKSwlZnAzCisJZm1vdi5kCQlMT0dCNCglcGMpLCVmcDIKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFcqQjUKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBXKkI0CisKKwlmYWRkLmQJCUxPR0IzKCVwYyksJWZwMwkJIyBCMytXKkI1CisJZmFkZC5kCQlMT0dCMiglcGMpLCVmcDIJCSMgQjIrVypCNAorCisJZm11bC54CQklZnAzLCVmcDEJCSMgVyooQjMrVypCNSksIEZQMyBSRUxFQVNFRAorCisJZm11bC54CQklZnAwLCVmcDIJCSMgViooQjIrVypCNCkKKworCWZhZGQuZAkJTE9HQjEoJXBjKSwlZnAxCQkjIEIxK1cqKEIzK1cqQjUpCisJZm11bC54CQlTQVZFVSglYTYpLCVmcDAJCSMgRlAwIElTIFUqVgorCisJZmFkZC54CQklZnAyLCVmcDEJCSMgQjErVyooQjMrVypCNSkgKyBWKihCMitXKkI0KSwgRlAyIFJFTEVBU0VECisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIEZQMi0zIFJFU1RPUkVECisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBVKlYqKCBbQjErVyooQjMrVypCNSldICsgW1YqKEIyK1cqQjQpXSApCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJU0FWRVUoJWE2KSwlZnAwCisJYnJhCQl0X2lueDIKKworIy0tUkVHSVNURVJTIFNBVkVEIEZQQ1IuIExPRygtVkUpIElTIElOVkFMSUQKK0xPR05FRzoKKwlicmEJCXRfb3BlcnIKKworCWdsb2JhbAkJc2xvZ25kCitzbG9nbmQ6CisjLS1FTlRSWSBQT0lOVCBGT1IgTE9HKFgpIEZPUiBERU5PUk1BTElaRUQgSU5QVVQKKworCW1vdi5sCQkmLTEwMCxBREpLKCVhNikJCSMgSU5QVVQgPSAyXihBREpLKSAqIEZQMAorCisjLS0tLW5vcm1hbGl6ZSB0aGUgaW5wdXQgdmFsdWUgYnkgbGVmdCBzaGlmdGluZyBrIGJpdHMgKGsgdG8gYmUgZGV0ZXJtaW5lZAorIy0tLS1iZWxvdyksIGFkanVzdGluZyBleHBvbmVudCBhbmQgc3RvcmluZyAtayB0byAgQURKSworIy0tLS10aGUgdmFsdWUgVFdPVE8xMDAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyMtLS0tTm90ZSB0aGF0IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBkZW5vcm1hbGl6ZWQgaW5wdXQgaXMgTk9OLVpFUk8uCisKKwltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgc29tZSByZWdpc3RlcnMgIHtkMi1kN30KKwltb3YubAkJKCVhMCksJWQzCQkjIEQzIGlzIGV4cG9uZW50IG9mIHNtYWxsZXN0IG5vcm0uICMKKwltb3YubAkJNCglYTApLCVkNAorCW1vdi5sCQk4KCVhMCksJWQ1CQkjIChENCxENSkgaXMgKEhpX1gsTG9fWCkKKwljbHIubAkJJWQyCQkJIyBEMiB1c2VkIGZvciBob2xkaW5nIEsKKworCXRzdC5sCQklZDQKKwlibmUuYgkJSGlfbm90MAorCitIaV8wOgorCW1vdi5sCQklZDUsJWQ0CisJY2xyLmwJCSVkNQorCW1vdi5sCQkmMzIsJWQyCisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYKKwlsc2wubAkJJWQ2LCVkNAorCWFkZC5sCQklZDYsJWQyCQkJIyAoRDMsRDQsRDUpIGlzIG5vcm1hbGl6ZWQKKworCW1vdi5sCQklZDMsWCglYTYpCisJbW92LmwJCSVkNCxYRlJBQyglYTYpCisJbW92LmwJCSVkNSxYRlJBQys0KCVhNikKKwluZWcubAkJJWQyCisJbW92LmwJCSVkMixBREpLKCVhNikKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJbW92bS5sCQkoJXNwKSssJjB4ZmMJCSMgcmVzdG9yZSByZWdpc3RlcnMge2QyLWQ3fQorCWxlYQkJWCglYTYpLCVhMAorCWJyYS53CQlMT0dCR04JCQkjIGJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKK0hpX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYJCSMgZmluZCBmaXJzdCAxCisJbW92LmwJCSVkNiwlZDIJCQkjIGdldCBrCisJbHNsLmwJCSVkNiwlZDQKKwltb3YubAkJJWQ1LCVkNwkJCSMgYSBjb3B5IG9mIEQ1CisJbHNsLmwJCSVkNiwlZDUKKwluZWcubAkJJWQ2CisJYWRkLmwJCSYzMiwlZDYKKwlsc3IubAkJJWQ2LCVkNworCW9yLmwJCSVkNywlZDQJCQkjIChEMyxENCxENSkgbm9ybWFsaXplZAorCisJbW92LmwJCSVkMyxYKCVhNikKKwltb3YubAkJJWQ0LFhGUkFDKCVhNikKKwltb3YubAkJJWQ1LFhGUkFDKzQoJWE2KQorCW5lZy5sCQklZDIKKwltb3YubAkJJWQyLEFESksoJWE2KQorCWZtb3YueAkJWCglYTYpLCVmcDAKKwltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyByZXN0b3JlIHJlZ2lzdGVycyB7ZDItZDd9CisJbGVhCQlYKCVhNiksJWEwCisJYnJhLncJCUxPR0JHTgkJCSMgYmVnaW4gcmVndWxhciBsb2coWCkKKworCWdsb2JhbAkJc2xvZ25wMQorIy0tRU5UUlkgUE9JTlQgRk9SIExPRygxK1gpIEZPUiBYIEZJTklURSwgTk9OLVpFUk8sIE5PVCBOQU4nUworc2xvZ25wMToKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCWZhYnMueAkJJWZwMAkJCSMgdGVzdCBtYWduaXR1ZGUKKwlmY21wLngJCSVmcDAsTFRIT0xEKCVwYykJIyBjb21wYXJlIHdpdGggbWluIHRocmVzaG9sZAorCWZiZ3QudwkJTFAxUkVBTAkJCSMgaWYgZ3JlYXRlciwgY29udGludWUKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSglYTApLCVmcDAJCSMgcmV0dXJuIHNpZ25lZCBhcmd1bWVudAorCWJyYQkJdF9jYXRjaAorCitMUDFSRUFMOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJbW92LmwJCSYweDAwMDAwMDAwLEFESksoJWE2KQorCWZtb3YueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyBJTlBVVCBaCisJZmFkZC5zCQlvbmUoJXBjKSwlZnAwCQkjIFggOj0gUk9VTkQoMStaKQorCWZtb3YueAkJJWZwMCxYKCVhNikKKwltb3YudwkJWEZSQUMoJWE2KSxYRENBUkUoJWE2KQorCW1vdi5sCQlYKCVhNiksJWQxCisJY21wLmwJCSVkMSwmMAorCWJsZS53CQlMUDFORUcwCQkJIyBMT0cgT0YgWkVSTyBPUiAtVkUKKwljbXAubAkJJWQxLCYweDNmZmU4MDAwCQkjIElTIEJPVU5EUyBbMS8yLDMvMl0/CisJYmx0LncJCUxPR01BSU4KKwljbXAubAkJJWQxLCYweDNmZmZjMDAwCisJYmd0LncJCUxPR01BSU4KKyMtLUlGIDErWiA+IDMvMiBPUiAxK1ogPCAxLzIsIFRIRU4gWCwgV0hJQ0ggSVMgUk9VTkRJTkcgMStaLAorIy0tQ09OVEFJTlMgQVQgTEVBU1QgNjMgQklUUyBPRiBJTkZPUk1BVElPTiBPRiBaLiBJTiBUSEFUIENBU0UsCisjLS1TSU1QTFkgSU5WT0tFIExPRyhYKSBGT1IgTE9HKDErWikuCisKK0xQMU5FQVIxOgorIy0tTkVYVCBTRUUgSUYgRVhQKC0xLzE2KSA8IFggPCBFWFAoMS8xNikKKwljbXAubAkJJWQxLCYweDNmZmVmMDdkCisJYmx0LncJCUxQMUNBUkUKKwljbXAubAkJJWQxLCYweDNmZmY4ODQxCisJYmd0LncJCUxQMUNBUkUKKworTFAxT05FMTY6CisjLS1FWFAoLTEvMTYpIDwgWCA8IEVYUCgxLzE2KS4gTE9HKDErWikgPSBMT0coMStVLzIpIC0gTE9HKDEtVS8yKQorIy0tV0hFUkUgVSA9IDJaLygyK1opID0gMlovKDErWCkuCisJZmFkZC54CQklZnAxLCVmcDEJCSMgRlAxIElTIDJaCisJZmFkZC5zCQlvbmUoJXBjKSwlZnAwCQkjIEZQMCBJUyAxK1gKKyMtLVUgPSBGUDEvRlAwCisJYnJhLncJCUxQMUNPTlQyCisKK0xQMUNBUkU6CisjLS1IRVJFIFdFIFVTRSBUSEUgVVNVQUwgVEFCTEUgRFJJVkVOIEFQUFJPQUNILiBDQVJFIEhBUyBUTyBCRQorIy0tVEFLRU4gQkVDQVVTRSAxK1ogQ0FOIEhBVkUgNjcgQklUUyBPRiBJTkZPUk1BVElPTiBBTkQgV0UgTVVTVAorIy0tUFJFU0VSVkUgQUxMIFRIRSBJTkZPUk1BVElPTi4gQkVDQVVTRSAxK1ogSVMgSU4gWzEvMiwzLzJdLAorIy0tVEhFUkUgQVJFIE9OTFkgVFdPIENBU0VTLgorIy0tQ0FTRSAxOiAxK1ogPCAxLCBUSEVOIEsgPSAtMSBBTkQgWS1GID0gKDItRikgKyAyWgorIy0tQ0FTRSAyOiAxK1ogPiAxLCBUSEVOIEsgPSAwICBBTkQgWS1GID0gKDEtRikgKyBaCisjLS1PTiBSRVRVUk5JTkcgVE8gTFAxQ09OVDEsIFdFIE1VU1QgSEFWRSBLIElOIEZQMSwgQUREUkVTUyBPRgorIy0tKDEvRikgSU4gQTAsIFktRiBJTiBGUDAsIEFORCBGUDIgU0FWRUQuCisKKwltb3YubAkJWEZSQUMoJWE2KSxGRlJBQyglYTYpCisJYW5kLmwJCSYweEZFMDAwMDAwLEZGUkFDKCVhNikKKwlvci5sCQkmMHgwMTAwMDAwMCxGRlJBQyglYTYpCSMgRiBPQlRBSU5FRAorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAJCSMgU0VFIElGIDErWiA+IDEKKwliZ2UuYgkJS0lTWkVSTworCitLSVNORUcxOgorCWZtb3YucwkJVFdPKCVwYyksJWZwMAorCW1vdi5sCQkmMHgzZmZmMDAwMCxGKCVhNikKKwljbHIubAkJRis4KCVhNikKKwlmc3ViLngJCUYoJWE2KSwlZnAwCQkjIDItRgorCW1vdi5sCQlGRlJBQyglYTYpLCVkMQorCWFuZC5sCQkmMHg3RTAwMDAwMCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmNCwlZDEJCQkjIEQwIENPTlRBSU5TIERJU1BMQUNFTUVOVCBGT1IgMS9GCisJZmFkZC54CQklZnAxLCVmcDEJCSMgR0VUIDJaCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgU0FWRSBGUDIgIHslZnAyLyVmcDN9CisJZmFkZC54CQklZnAxLCVmcDAJCSMgRlAwIElTIFktRiA9ICgyLUYpKzJaCisJbGVhCQlMT0dUQkwoJXBjKSwlYTAJCSMgQTAgSVMgQUREUkVTUyBPRiAxL0YKKwlhZGQubAkJJWQxLCVhMAorCWZtb3YucwkJbmVnb25lKCVwYyksJWZwMQkjIEZQMSBJUyBLID0gLTEKKwlicmEudwkJTFAxQ09OVDEKKworS0lTWkVSTzoKKwlmbW92LnMJCW9uZSglcGMpLCVmcDAKKwltb3YubAkJJjB4M2ZmZjAwMDAsRiglYTYpCisJY2xyLmwJCUYrOCglYTYpCisJZnN1Yi54CQlGKCVhNiksJWZwMAkJIyAxLUYKKwltb3YubAkJRkZSQUMoJWE2KSwlZDEKKwlhbmQubAkJJjB4N0UwMDAwMDAsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjQsJWQxCisJZmFkZC54CQklZnAxLCVmcDAJCSMgRlAwIElTIFktRgorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIEZQMiBTQVZFRCB7JWZwMi8lZnAzfQorCWxlYQkJTE9HVEJMKCVwYyksJWEwCisJYWRkLmwJCSVkMSwlYTAJCQkjIEEwIElTIEFERFJFU1MgT0YgMS9GCisJZm1vdi5zCQl6ZXJvKCVwYyksJWZwMQkJIyBGUDEgSVMgSyA9IDAKKwlicmEudwkJTFAxQ09OVDEKKworTFAxTkVHMDoKKyMtLUZQQ1IgU0FWRUQuIEQwIElTIFggSU4gQ09NUEFDVCBGT1JNLgorCWNtcC5sCQklZDEsJjAKKwlibHQuYgkJTFAxTkVHCitMUDFaRVJPOgorCWZtb3YucwkJbmVnb25lKCVwYyksJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlicmEJCXRfZHoKKworTFAxTkVHOgorCWZtb3YucwkJemVybyglcGMpLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJYnJhCQl0X29wZXJyCisKKwlnbG9iYWwJCXNsb2ducDFkCisjLS1FTlRSWSBQT0lOVCBGT1IgTE9HKDErWikgRk9SIERFTk9STUFMSVpFRCBJTlBVVAorIyBTaW1wbHkgcmV0dXJuIHRoZSBkZW5vcm0KK3Nsb2ducDFkOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2F0YW5oKCk6ICBjb21wdXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBub3JtIGlucHV0CSMKKyMgc2F0YW5oZCgpOiBjb21wdXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBkZW5vcm0gaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gYXJjdGFuaChYKQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCUFUQU5ICQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxLCBnbyB0byAzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gKHxYfCA8IDEpIENhbGN1bGF0ZSBhdGFuaChYKSBieQkJCQkjCisjCQlzZ24gOj0gc2lnbihYKQkJCQkJCSMKKyMJCXkgOj0gfFh8CQkJCQkJIworIwkJeiA6PSAyeS8oMS15KQkJCQkJCSMKKyMJCWF0YW5oKFgpIDo9IHNnbiAqICgxLzIpICogbG9ncDEoeikJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiB8WHwgPiAxLCBnbyB0byA1LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPSAxKSBHZW5lcmF0ZSBpbmZpbml0eSB3aXRoIGFuIGFwcHJvcHJpYXRlIHNpZ24gYW5kCSMKKyMJCWRpdmlkZS1ieS16ZXJvIGJ5CQkJCQkjCisjCQlzZ24gOj0gc2lnbihYKQkJCQkJCSMKKyMJCWF0YW4oWCkgOj0gc2duIC8gKCswKS4JCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNhdGFuaAorc2F0YW5oOgorCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmdlLmIJCUFUQU5IQklHCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKKyMtLVkgPSB8WHwsIFogPSAyWS8oMS1ZKSwgQVRBTkgoWCkgPSBTSUdOKFgpICogKDEvMikgKiBMT0cxUChaKS4KKworCWZhYnMueAkJKCVhMCksJWZwMAkJIyBZID0gfFh8CisJZm1vdi54CQklZnAwLCVmcDEKKwlmbmVnLngJCSVmcDEJCQkjIC1ZCisJZmFkZC54CQklZnAwLCVmcDAJCSMgMlkKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyAxLVkKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyAyWS8oMS1ZKQorCW1vdi5sCQkoJWEwKSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJb3IubAkJJjB4M0YwMDAwMDAsJWQxCQkjIFNJR04oWCkqSEFMRgorCW1vdi5sCQklZDEsLSglc3ApCisKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUKKwljbHIubAkJJWQwCQkJIyBwYXNzIGV4dCBwcmVjLFJOCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWiBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFoKKwlic3IJCXNsb2ducDEJCQkjIExPRzFQKFopCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFogZnJvbSBzdGFjaworCisJbW92LmwJCSglc3ApKywlZDAJCSMgZmV0Y2ggb2xkIHByZWMsbW9kZQorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGxvYWQgaXQKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLnMJCSglc3ApKywlZnAwCisJYnJhCQl0X2NhdGNoCisKK0FUQU5IQklHOgorCWZhYnMueAkJKCVhMCksJWZwMAkJIyB8WHwKKwlmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKKwlmYmd0CQl0X29wZXJyCisJYnJhCQl0X2R6CisKKwlnbG9iYWwJCXNhdGFuaGQKKyMtLUFUQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3NhdGFuaGQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzbG9nMTAoKTogIGNvbXB1dGVzIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nMTBkKCk6IGNvbXB1dGVzIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2cyKCk6ICAgY29tcHV0ZXMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZzJkKCk6ICBjb21wdXRlcyB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBsb2dfMTAoWCkgb3IgbG9nXzIoWCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDEuNyB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDMgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMgICAgICAgc2xvZzEwZDoJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLglJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBDYWxsIHNsb2duZCB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKKyMgICAgICAgTm90ZXM6ICBFdmVuIGlmIFggaXMgZGVub3JtYWxpemVkLCBsb2coWCkgaXMgYWx3YXlzIG5vcm1hbGl6ZWQuCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMi4gIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDEwKSkuCQkjCisjICAgICAgICAgICAgMi4xIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIworIyAgICAgICAgICAgIDIuMiBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDEwLgkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBzbG9nMTA6CQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDAuIElmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgkjCisjICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCSMKKyMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIworIyAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuIENhbGwgc0xvZ04gdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4JCSMKKyMgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIworIyAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgc0xvZzJkOgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLiBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBDYWxsIHNsb2duZCB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKKyMgICAgICAgTm90ZXM6ICBFdmVuIGlmIFggaXMgZGVub3JtYWxpemVkLCBsb2coWCkgaXMgYWx3YXlzIG5vcm1hbGl6ZWQuCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMi4gICBDb21wdXRlIGxvZ18xMChYKSA9IGxvZyhYKSAqICgxL2xvZygyKSkuCQkjCisjICAgICAgICAgICAgMi4xICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICAyLjIgIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMi4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgc0xvZzI6CQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDAuIElmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgkjCisjICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCSMKKyMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIworIyAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuIElmIFggaXMgbm90IGFuIGludGVnZXIgcG93ZXIgb2YgdHdvLCBpLmUuLCBYICE9IDJeaywJIworIyAgICAgICAgICAgICAgIGdvIHRvIFN0ZXAgMy4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICAgUmV0dXJuIGsuCQkJCQkJIworIyAgICAgICAgICAgIDIuMSAgR2V0IGludGVnZXIgaywgWCA9IDJeay4JCQkJIworIyAgICAgICAgICAgIDIuMiAgUmVzdG9yZSB0aGUgdXNlciBGUENSLgkJCQkjCisjICAgICAgICAgICAgMi4zICBSZXR1cm4gYW5zIDo9IGNvbnZlcnQtdG8tZG91YmxlLWV4dGVuZGVkKGspLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAzLiBDYWxsIHNMb2dOIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA0LiAgIENvbXB1dGUgbG9nXzIoWCkgPSBsb2coWCkgKiAoMS9sb2coMikpLgkJIworIyAgICAgICAgICAgIDQuMSAgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCisjICAgICAgICAgICAgNC4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDIuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lOVl9MMTA6CisJbG9uZwkJMHgzRkZEMDAwMCwweERFNUJEOEE5LDB4MzcyODcxOTUsMHgwMDAwMDAwMAorCitJTlZfTDI6CisJbG9uZwkJMHgzRkZGMDAwMCwweEI4QUEzQjI5LDB4NUMxN0YwQkMsMHgwMDAwMDAwMAorCisJZ2xvYmFsCQlzbG9nMTAKKyMtLWVudHJ5IHBvaW50IGZvciBMb2cxMChYKSwgWCBpcyBub3JtYWxpemVkCitzbG9nMTA6CisJZm1vdi5iCQkmMHgxLCVmcDAKKwlmY21wLngJCSVmcDAsKCVhMCkJCSMgaWYgb3BlcmFuZCA9PSAxLAorCWZiZXEubAkJbGRfcHplcm8JCSMgcmV0dXJuIGFuIEVYQUNUIHplcm8KKworCW1vdi5sCQkoJWEwKSwlZDEKKwlibHQudwkJaW52YWxpZAorCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWJzcgkJc2xvZ24JCQkjIGxvZyhYKSwgWCBub3JtYWwuCisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbXVsLngJCUlOVl9MMTAoJXBjKSwlZnAwCisJYnJhCQl0X2lueDIKKworCWdsb2JhbAkJc2xvZzEwZAorIy0tZW50cnkgcG9pbnQgZm9yIExvZzEwKFgpLCBYIGlzIGRlbm9ybWFsaXplZAorc2xvZzEwZDoKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duZAkJCSMgbG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtdWwueAkJSU5WX0wxMCglcGMpLCVmcDAKKwlicmEJCXRfbWlueDIKKworCWdsb2JhbAkJc2xvZzIKKyMtLWVudHJ5IHBvaW50IGZvciBMb2cyKFgpLCBYIGlzIG5vcm1hbGl6ZWQKK3Nsb2cyOgorCW1vdi5sCQkoJWEwKSwlZDEKKwlibHQudwkJaW52YWxpZAorCisJbW92LmwJCTgoJWEwKSwlZDEKKwlibmUuYgkJY29udGludWUJCSMgWCBpcyBub3QgMl5rCisKKwltb3YubAkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwlibmUuYgkJY29udGludWUKKworIy0tWCA9IDJeay4KKwltb3YudwkJKCVhMCksJWQxCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMQorCXN1Yi5sCQkmMHgzRkZGLCVkMQorCWJlcS5sCQlsZF9wemVybworCWZtb3YubAkJJWQwLCVmcGNyCisJZm1vdi5sCQklZDEsJWZwMAorCWJyYQkJdF9pbngyCisKK2NvbnRpbnVlOgorCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWJzcgkJc2xvZ24JCQkjIGxvZyhYKSwgWCBub3JtYWwuCisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbXVsLngJCUlOVl9MMiglcGMpLCVmcDAKKwlicmEJCXRfaW54MgorCitpbnZhbGlkOgorCWJyYQkJdF9vcGVycgorCisJZ2xvYmFsCQlzbG9nMmQKKyMtLWVudHJ5IHBvaW50IGZvciBMb2cyKFgpLCBYIGlzIGRlbm9ybWFsaXplZAorc2xvZzJkOgorCW1vdi5sCQkoJWEwKSwlZDEKKwlibHQudwkJaW52YWxpZAorCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWJzcgkJc2xvZ25kCQkJIyBsb2coWCksIFggZGVub3JtLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDIoJXBjKSwlZnAwCisJYnJhCQl0X21pbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3R3b3RveCgpOiAgY29tcHV0ZXMgMioqWCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzdHdvdG94ZCgpOiBjb21wdXRlcyAyKipYIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3RlbnRveCgpOiAgY29tcHV0ZXMgMTAqKlggZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3RlbnRveGQoKTogY29tcHV0ZXMgMTAqKlggZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gMioqWCBvciAxMCoqWAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDIgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCXR3b3RveAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPiAxNjQ4MCwgZ28gdG8gRXhwQmlnLgkJCQkjCisjCQkJCQkJCQkJIworIwkyLiBJZiB8WHwgPCAyKiooLTcwKSwgZ28gdG8gRXhwU20uCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIERlY29tcG9zZSBYIGFzIFggPSBOLzY0ICsgciB3aGVyZSB8cnwgPD0gMS8xMjguIEZ1cnRoZXJtb3JlCSMKKyMJCWRlY29tcG9zZSBOIGFzCQkJCQkJIworIwkJIE4gPSA2NChNICsgTScpICsgaiwgIGogPSAwLDEsMiwuLi4sNjMuCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gT3ZlcndyaXRlIHIgOj0gciAqIGxvZzIuIFRoZW4JCQkJIworIwkJMioqWCA9IDIqKihNJykgKiAyKiooTSkgKiAyKiooai82NCkgKiBleHAocikuCQkjCisjCQlHbyB0byBleHByIHRvIGNvbXB1dGUgdGhhdCBleHByZXNzaW9uLgkJCSMKKyMJCQkJCQkJCQkjCisjCXRlbnRveAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPiAxNjQ4MCpsb2dfMTAoMikgKGJhc2UgMTAgbG9nIG9mIDIpLCBnbyB0byBFeHBCaWcuCSMKKyMJCQkJCQkJCQkjCisjCTIuIElmIHxYfCA8IDIqKigtNzApLCBnbyB0byBFeHBTbS4JCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gU2V0IHkgOj0gWCpsb2dfMigxMCkqNjQgKGJhc2UgMiBsb2cgb2YgMTApLiBTZXQJCSMKKyMJCU4gOj0gcm91bmQtdG8taW50KHkpLiBEZWNvbXBvc2UgTiBhcwkJCSMKKyMJCSBOID0gNjQoTSArIE0nKSArIGosICBqID0gMCwxLDIsLi4uLDYzLgkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIERlZmluZSByIGFzCQkJCQkJCSMKKyMJCXIgOj0gKChYIC0gTipMMSktTipMMikgKiBMMTAJCQkJIworIwkJd2hlcmUgTDEsIEwyIGFyZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGFydHMgb2YJIworIwkJbG9nXzEwKDIpLzY0IGFuZCBMMTAgaXMgdGhlIG5hdHVyYWwgbG9nIG9mIDEwLiBUaGVuCSMKKyMJCTEwKipYID0gMioqKE0nKSAqIDIqKihNKSAqIDIqKihqLzY0KSAqIGV4cChyKS4JCSMKKyMJCUdvIHRvIGV4cHIgdG8gY29tcHV0ZSB0aGF0IGV4cHJlc3Npb24uCQkJIworIwkJCQkJCQkJCSMKKyMJZXhwcgkJCQkJCQkJIworIwkxLiBGZXRjaCAyKiooai82NCkgZnJvbSB0YWJsZSBhcyBGYWN0MSBhbmQgRmFjdDIuCQkjCisjCQkJCQkJCQkJIworIwkyLiBPdmVyd3JpdGUgRmFjdDEgYW5kIEZhY3QyIGJ5CQkJCQkjCisjCQlGYWN0MSA6PSAyKiooTSkgKiBGYWN0MQkJCQkJIworIwkJRmFjdDIgOj0gMioqKE0pICogRmFjdDIJCQkJCSMKKyMJCVRodXMgRmFjdDEgKyBGYWN0MiA9IDIqKihNKSAqIDIqKihqLzY0KS4JCSMKKyMJCQkJCQkJCQkjCisjCTMuIENhbGN1bGF0ZSBQIHdoZXJlIDEgKyBQIGFwcHJveGltYXRlcyBleHAocik6CQkJIworIwkJUCA9IHIgKyByKnIqKEExK3IqKEEyKy4uLityKkE1KSkuCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gTGV0IEFkakZhY3QgOj0gMioqKE0nKS4gUmV0dXJuCQkJCSMKKyMJCUFkakZhY3QgKiAoIEZhY3QxICsgKChGYWN0MSpQKSArIEZhY3QyKSApLgkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJRXhwQmlnCQkJCQkJCQkjCisjCTEuIEdlbmVyYXRlIG92ZXJmbG93IGJ5IEh1Z2UgKiBIdWdlIGlmIFggPiAwOyBvdGhlcndpc2UsCSMKKyMJICAgICAgICBnZW5lcmF0ZSB1bmRlcmZsb3cgYnkgVGlueSAqIFRpbnkuCQkJIworIwkJCQkJCQkJCSMKKyMJRXhwU20JCQkJCQkJCSMKKyMJMS4gUmV0dXJuIDEgKyBYLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0wyVEVONjQ6CisJbG9uZwkJMHg0MDZBOTM0RiwweDA5NzlBMzcxCSMgNjRMT0cxMC9MT0cyCitMMTBUV08xOgorCWxvbmcJCTB4M0Y3MzQ0MTMsMHg1MDlGODAwMAkjIExPRzIvNjRMT0cxMAorCitMMTBUV08yOgorCWxvbmcJCTB4QkZDRDAwMDAsMHhDMDIxOURDMSwweERBOTk0RkQyLDB4MDAwMDAwMDAKKworTE9HMTA6CWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVEOERERCwweEFBQThBQzE3LDB4MDAwMDAwMDAKKworTE9HMjoJbG9uZwkJMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitFWFBBNToJbG9uZwkJMHgzRjU2QzE2RCwweDZGN0JEMEIyCitFWFBBNDoJbG9uZwkJMHgzRjgxMTExMiwweDMwMkM3MTJDCitFWFBBMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU0Q0MxCitFWFBBMjoJbG9uZwkJMHgzRkM1NTU1NSwweDU1NTU0QTU0CitFWFBBMToJbG9uZwkJMHgzRkUwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitURVhQVEJMOgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4M0Y3MzgwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODE2NEQxRjMsMHhCQzAzMDc3MywweDNGQkVGN0NBCisJbG9uZwkJMHgzRkZGMDAwMCwweDgyQ0Q4Njk4LDB4QUMyQkExRDcsMHgzRkJERjhBOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NDNBMjhDMywweEFDREU0MDQ2LDB4M0ZCQ0Q3QzkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODVBQUMzNjcsMHhDQzQ4N0IxNSwweEJGQkRFOERBCisJbG9uZwkJMHgzRkZGMDAwMCwweDg3MUY2MTk2LDB4OUU4RDEwMTAsMHgzRkJERTg1QworCWxvbmcJCTB4M0ZGRjAwMDAsMHg4ODk4MEU4MCwweDkyREE4NTI3LDB4M0ZCRUJCRjEKKwlsb25nCQkweDNGRkYwMDAwLDB4OEExNEQ1NzUsMHg0OTZFRkQ5QSwweDNGQkI4MENBCisJbG9uZwkJMHgzRkZGMDAwMCwweDhCOTVDMUUzLDB4RUE4QkQ2RTcsMHhCRkJBODM3MworCWxvbmcJCTB4M0ZGRjAwMDAsMHg4RDFBREY1QiwweDdFNUJBOUU2LDB4QkZCRTk2NzAKKwlsb25nCQkweDNGRkYwMDAwLDB4OEVBNDM5OEIsMHg0NUNENTNDMCwweDNGQkRCNzAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDkwMzFEQzQzLDB4MTQ2NkIxREMsMHgzRkJFRUVCMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MUMzRDM3MywweEFCMTFDMzM2LDB4M0ZCQkZENkQKKwlsb25nCQkweDNGRkYwMDAwLDB4OTM1QTJCMkYsMHgxM0U2RTkyQywweEJGQkRCMzE5CisJbG9uZwkJMHgzRkZGMDAwMCwweDk0RjRFRkE4LDB4RkVGNzA5NjEsMHgzRkJEQkEyQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5Njk0MkQzNywweDIwMTg1QTAwLDB4M0ZCRTkxRDUKKwlsb25nCQkweDNGRkYwMDAwLDB4OTgzN0YwNTEsMHg4REI4QTk2RiwweDNGQkU4RDVBCisJbG9uZwkJMHgzRkZGMDAwMCwweDk5RTA0NTkzLDB4MjBCN0ZBNjUsMHhCRkJDREU3QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5QjhEMzlCOSwweEQ1NEU1NTM5LDB4QkZCRUJBQUYKKwlsb25nCQkweDNGRkYwMDAwLDB4OUQzRUQ5QTcsMHgyQ0ZGQjc1MSwweEJGQkQ4NkRBCisJbG9uZwkJMHgzRkZGMDAwMCwweDlFRjUzMjYwLDB4OTFBMTExQUUsMHhCRkJFQkVERAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMEIwNTEwRiwweEI5NzE0RkMyLDB4M0ZCQ0M5NkUKKwlsb25nCQkweDNGRkYwMDAwLDB4QTI3MDQzMDMsMHgwQzQ5NjgxOSwweEJGQkVDOTBCCisJbG9uZwkJMHgzRkZGMDAwMCwweEE0MzUxNUFFLDB4MDlFNjgwOUUsMHgzRkJCRDFEQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNUZFRDZBOSwweEIxNTEzOEVBLDB4M0ZCQ0U1RUIKKwlsb25nCQkweDNGRkYwMDAwLDB4QTdDRDkzQjQsMHhFOTY1MzU2QSwweEJGQkVDMjc0CisJbG9uZwkJMHgzRkZGMDAwMCwweEE5QTE1QUI0LDB4RUE3QzBFRjgsMHgzRkJFQTgzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhBQjdBMzlCNSwweEE5M0VEMzM3LDB4M0ZCRUNCMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QUQ1ODNFRUEsMHg0MkExNEFDNiwweDNGQkU5MzAxCisJbG9uZwkJMHgzRkZGMDAwMCwweEFGM0I3OEFELDB4NjkwQTQzNzUsMHhCRkJEODM2NworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMTIzRjU4MSwweEQyQUMyNTkwLDB4QkZCRUYwNUYKKwlsb25nCQkweDNGRkYwMDAwLDB4QjMxMUM0MTIsMHhBOTExMjQ4OSwweDNGQkRGQjNDCisJbG9uZwkJMHgzRkZGMDAwMCwweEI1MDRGMzMzLDB4RjlERTY0ODQsMHgzRkJFQjJGQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNkZEOTFFMywweDI4RDE3NzkxLDB4M0ZCQUUyQ0IKKwlsb25nCQkweDNGRkYwMDAwLDB4QjhGQkFGNDcsMHg2MkZCOUVFOSwweDNGQkNEQzNDCisJbG9uZwkJMHgzRkZGMDAwMCwweEJBRkY1QUIyLDB4MTMzRTQ1RkIsMHgzRkJFRTlBQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRDA4QTM5RiwweDU4MEMzNkJGLDB4QkZCRUFFRkQKKwlsb25nCQkweDNGRkYwMDAwLDB4QkYxNzk5QjYsMHg3QTczMTA4MywweEJGQkNCRjUxCisJbG9uZwkJMHgzRkZGMDAwMCwweEMxMkM0Q0NBLDB4NjY3MDk0NTYsMHgzRkJFRjg4QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMzQ2Q0NEQSwweDI0OTc2NDA3LDB4M0ZCRDgzQjIKKwlsb25nCQkweDNGRkYwMDAwLDB4QzU2NzJBMTEsMHg1NTA2REFERCwweDNGQkRGOEFCCisJbG9uZwkJMHgzRkZGMDAwMCwweEM3OEQ3NEM4LDB4QUJCOUIxNUQsMHhCRkJERkIxNworCWxvbmcJCTB4M0ZGRjAwMDAsMHhDOUI5QkQ4NiwweDZFMkYyN0EzLDB4QkZCRUZFM0MKKwlsb25nCQkweDNGRkYwMDAwLDB4Q0JFQzE0RkUsMHhGMjcyN0M1RCwweEJGQkJCNkY4CisJbG9uZwkJMHgzRkZGMDAwMCwweENFMjQ4QzE1LDB4MUY4NDgwRTQsMHhCRkJDRUU1MworCWxvbmcJCTB4M0ZGRjAwMDAsMHhEMDYzMzNEQSwweEVGMkIyNTk1LDB4QkZCREE0QUUKKwlsb25nCQkweDNGRkYwMDAwLDB4RDJBODFEOTEsMHhGMTJBRTQ1QSwweDNGQkM5MTI0CisJbG9uZwkJMHgzRkZGMDAwMCwweEQ0RjM1QUFCLDB4Q0ZFREZBMUYsMHgzRkJFQjI0MworCWxvbmcJCTB4M0ZGRjAwMDAsMHhENzQ0RkNDQSwweEQ2OUQ2QUY0LDB4M0ZCREU2OUEKKwlsb25nCQkweDNGRkYwMDAwLDB4RDk5RDE1QzIsMHg3OEFGRDdCNiwweEJGQjhCQzYxCisJbG9uZwkJMHgzRkZGMDAwMCwweERCRkJCNzk3LDB4REFGMjM3NTUsMHgzRkJERjYxMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhERTYwRjQ4MiwweDVFMEU5MTI0LDB4QkZCRDhCRTEKKwlsb25nCQkweDNGRkYwMDAwLDB4RTBDQ0RFRUMsMHgyQTk0RTExMSwweDNGQkFDQjEyCisJbG9uZwkJMHgzRkZGMDAwMCwweEUzM0Y4OTcyLDB4QkU4QTVBNTEsMHgzRkJCOUJGRQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFNUI5MDZFNywweDdDODM0OEE4LDB4M0ZCQ0YyRjQKKwlsb25nCQkweDNGRkYwMDAwLDB4RTgzOTZBNTAsMHgzQzRCREM2OCwweDNGQkVGMjJGCisJbG9uZwkJMHgzRkZGMDAwMCwweEVBQzBDNkU3LDB4REQyNDM5MkYsMHhCRkJEQkY0QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFRDRGMzAxRSwweEQ5OTQyQjg0LDB4M0ZCRUMwMUEKKwlsb25nCQkweDNGRkYwMDAwLDB4RUZFNEI5OUIsMHhEQ0RBRjVDQiwweDNGQkU4Q0FDCisJbG9uZwkJMHgzRkZGMDAwMCwweEYyODE3NzNDLDB4NTlGRkIxM0EsMHhCRkJDQkIzRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGNTI1N0QxNSwweDI0ODZDQzJDLDB4M0ZCRUY3M0EKKwlsb25nCQkweDNGRkYwMDAwLDB4RjdEMERGNzMsMHgwQUQxM0JCOSwweEJGQjhCNzk1CisJbG9uZwkJMHgzRkZGMDAwMCwweEZBODNCMkRCLDB4NzIyQTAzM0EsMHgzRkJFRjg0QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGRDNFMEMwQywweEY0ODZDMTc1LDB4QkZCRUY1ODEKKworCXNldAkJSU5ULExfU0NSMQorCisJc2V0CQlYLEZQX1NDUjAKKwlzZXQJCVhEQ0FSRSxYKzIKKwlzZXQJCVhGUkFDLFgrNAorCisJc2V0CQlBREpGQUNULEZQX1NDUjAKKworCXNldAkJRkFDVDEsRlBfU0NSMAorCXNldAkJRkFDVDFISSxGQUNUMSs0CisJc2V0CQlGQUNUMUxPVyxGQUNUMSs4CisKKwlzZXQJCUZBQ1QyLEZQX1NDUjEKKwlzZXQJCUZBQ1QySEksRkFDVDIrNAorCXNldAkJRkFDVDJMT1csRkFDVDIrOAorCisJZ2xvYmFsCQlzdHdvdG94CisjLS1FTlRSWSBQT0lOVCBGT1IgMioqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworc3R3b3RveDoKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlmbW92LngJCSVmcDAsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkI5ODAwMAkJIyB8WHwgPj0gMioqKC03MCk/CisJYmdlLmIJCVRXT09LMQorCWJyYS53CQlFWFBCT1JTCisKK1RXT09LMToKKwljbXAubAkJJWQxLCYweDQwMEQ4MEMwCQkjIHxYfCA+IDE2NDgwPworCWJsZS5iCQlUV09NQUlOCisJYnJhLncJCUVYUEJPUlMKKworVFdPTUFJTjoKKyMtLVVTVUFMIENBU0UsIDJeKC03MCkgPD0gfFh8IDw9IDE2NDgwCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDI4MDAwMDAsJWZwMQkjIDY0ICogWAorCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBOID0gUk9VTkQtVE8tSU5UKDY0IFgpCisJbW92LmwJCSVkMiwtKCVzcCkKKwlsZWEJCVRFWFBUQkwoJXBjKSwlYTEJIyBMT0FEIEFERFJFU1MgT0YgVEFCTEUgT0YgMl4oSi82NCkKKwlmbW92LmwJCUlOVCglYTYpLCVmcDEJCSMgTiAtLT4gRkxPQVRJTkcgRk1UCisJbW92LmwJCUlOVCglYTYpLCVkMQorCW1vdi5sCQklZDEsJWQyCisJYW5kLmwJCSYweDNGLCVkMQkJIyBEMCBJUyBKCisJYXNsLmwJCSY0LCVkMQkJCSMgRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIEZPUiAyXihKLzY0KQorCWFzci5sCQkmNiwlZDIJCQkjIGQyIElTIEwsIE4gPSA2NEwgKyBKCisJbW92LmwJCSVkMiwlZDEKKwlhc3IubAkJJjEsJWQxCQkJIyBEMCBJUyBNCisJc3ViLmwJCSVkMSwlZDIJCQkjIGQyIElTIE0nLCBOID0gNjQoTStNJykgKyBKCisJYWRkLmwJCSYweDNGRkYsJWQyCisKKyMtLVNVTU1BUlk6IGExIElTIEFERFJFU1MgRk9SIFRIRSBMRUFESU5HIFBPUlRJT04gT0YgMl4oSi82NCksCisjLS1EMCBJUyBNIFdIRVJFIE4gPSA2NChNK00nKSArIEouIE5PVEUgVEhBVCB8TXwgPD0gMTYxNDAgQlkgREVTSUdOLgorIy0tQURKRkFDVCA9IDJeKE0nKS4KKyMtLVJFR0lTVEVSUyBTQVZFRCBTTyBGQVIgQVJFIChJTiBPUkRFUikgRlBDUiwgRDAsIEZQMSwgYTEsIEFORCBGUDIuCisKKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbXVsLnMJCSYweDNDODAwMDAwLCVmcDEJIyAoMS82NCkqTgorCW1vdi5sCQkoJWExKSssRkFDVDEoJWE2KQorCW1vdi5sCQkoJWExKSssRkFDVDFISSglYTYpCisJbW92LmwJCSglYTEpKyxGQUNUMUxPVyglYTYpCisJbW92LncJCSglYTEpKyxGQUNUMiglYTYpCisKKwlmc3ViLngJCSVmcDEsJWZwMAkJIyBYIC0gKDEvNjQpKklOVCg2NCBYKQorCisJbW92LncJCSglYTEpKyxGQUNUMkhJKCVhNikKKwljbHIudwkJRkFDVDJISSsyKCVhNikKKwljbHIubAkJRkFDVDJMT1coJWE2KQorCWFkZC53CQklZDEsRkFDVDEoJWE2KQorCWZtdWwueAkJTE9HMiglcGMpLCVmcDAJCSMgRlAwIElTIFIKKwlhZGQudwkJJWQxLEZBQ1QyKCVhNikKKworCWJyYS53CQlleHByCisKK0VYUEJPUlM6CisjLS1GUENSLCBEMCBTQVZFRAorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QuYgkJVEVYUEJJRworCisjLS18WHwgSVMgU01BTEwsIFJFVFVSTiAxICsgWAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyBSRVRVUk4gMSArIFgKKwlicmEJCXRfcGlueDIKKworVEVYUEJJRzoKKyMtLXxYfCBJUyBMQVJHRSwgR0VORVJBVEUgT1ZFUkZMT1cgSUYgWCA+IDA7IEVMU0UgR0VORVJBVEUgVU5ERVJGTE9XCisjLS1SRUdJU1RFUlMgU0FWRSBTTyBGQVIgQVJFIEZQQ1IgQU5EICBEMAorCW1vdi5sCQlYKCVhNiksJWQxCisJY21wLmwJCSVkMSwmMAorCWJsdC5iCQlFWFBORUcKKworCWJyYQkJdF9vdmZsMgkJCSMgdF9vdmZsIGV4cGVjdHMgcG9zaXRpdmUgdmFsdWUKKworRVhQTkVHOgorCWJyYQkJdF91bmZsMgkJCSMgdF91bmZsIGV4cGVjdHMgcG9zaXRpdmUgdmFsdWUKKworCWdsb2JhbAkJc3R3b3RveGQKK3N0d290b3hkOgorIy0tRU5UUlkgUE9JTlQgRk9SIDIqKihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBzZXQgdXNlcidzIHJvdW5kaW5nIG1vZGUvcHJlY2lzaW9uCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCisJbW92LmwJCSglYTApLCVkMQorCW9yLmwJCSYweDAwODAwMDAxLCVkMQorCWZhZGQucwkJJWQxLCVmcDAKKwlicmEJCXRfcGlueDIKKworCWdsb2JhbAkJc3RlbnRveAorIy0tRU5UUlkgUE9JTlQgRk9SIDEwKiooWCksIEhFUkUgWCBJUyBGSU5JVEUsIE5PTi1aRVJPLCBBTkQgTk9UIE5BTidTCitzdGVudG94OgorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWZtb3YueAkJJWZwMCxYKCVhNikKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisKKwljbXAubAkJJWQxLCYweDNGQjk4MDAwCQkjIHxYfCA+PSAyKiooLTcwKT8KKwliZ2UuYgkJVEVOT0sxCisJYnJhLncJCUVYUEJPUlMKKworVEVOT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwQjlCMDcJCSMgfFh8IDw9IDE2NDgwKmxvZzIvbG9nMTAgPworCWJsZS5iCQlURU5NQUlOCisJYnJhLncJCUVYUEJPUlMKKworVEVOTUFJTjoKKyMtLVVTVUFMIENBU0UsIDJeKC03MCkgPD0gfFh8IDw9IDE2NDgwIExPRyAyIC8gTE9HIDEwCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwuZAkJTDJURU42NCglcGMpLCVmcDEJIyBYKjY0KkxPRzEwL0xPRzIKKwlmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgTj1JTlQoWCo2NCpMT0cxMC9MT0cyKQorCW1vdi5sCQklZDIsLSglc3ApCisJbGVhCQlURVhQVEJMKCVwYyksJWExCSMgTE9BRCBBRERSRVNTIE9GIFRBQkxFIE9GIDJeKEovNjQpCisJZm1vdi5sCQlJTlQoJWE2KSwlZnAxCQkjIE4gLS0+IEZMT0FUSU5HIEZNVAorCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVkMgorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgSVMgSgorCWFzbC5sCQkmNCwlZDEJCQkjIERJU1BMQUNFTUVOVCBGT1IgMl4oSi82NCkKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBGT1IgMl4oSi82NCkKKwlhc3IubAkJJjYsJWQyCQkJIyBkMiBJUyBMLCBOID0gNjRMICsgSgorCW1vdi5sCQklZDIsJWQxCisJYXNyLmwJCSYxLCVkMQkJCSMgRDAgSVMgTQorCXN1Yi5sCQklZDEsJWQyCQkJIyBkMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgorCWFkZC5sCQkmMHgzRkZGLCVkMgorCisjLS1TVU1NQVJZOiBhMSBJUyBBRERSRVNTIEZPUiBUSEUgTEVBRElORyBQT1JUSU9OIE9GIDJeKEovNjQpLAorIy0tRDAgSVMgTSBXSEVSRSBOID0gNjQoTStNJykgKyBKLiBOT1RFIFRIQVQgfE18IDw9IDE2MTQwIEJZIERFU0lHTi4KKyMtLUFESkZBQ1QgPSAyXihNJykuCisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSIEFSRSAoSU4gT1JERVIpIEZQQ1IsIEQwLCBGUDEsIGExLCBBTkQgRlAyLgorCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtb3YueAkJJWZwMSwlZnAyCisKKwlmbXVsLmQJCUwxMFRXTzEoJXBjKSwlZnAxCSMgTiooTE9HMi82NExPRzEwKV9MRUFECisJbW92LmwJCSglYTEpKyxGQUNUMSglYTYpCisKKwlmbXVsLngJCUwxMFRXTzIoJXBjKSwlZnAyCSMgTiooTE9HMi82NExPRzEwKV9UUkFJTAorCisJbW92LmwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3YubAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwlmc3ViLngJCSVmcDEsJWZwMAkJIyBYIC0gTiBMX0xFQUQKKwltb3YudwkJKCVhMSkrLEZBQ1QyKCVhNikKKworCWZzdWIueAkJJWZwMiwlZnAwCQkjIFggLSBOIExfVFJBSUwKKworCW1vdi53CQkoJWExKSssRkFDVDJISSglYTYpCisJY2xyLncJCUZBQ1QySEkrMiglYTYpCisJY2xyLmwJCUZBQ1QyTE9XKCVhNikKKworCWZtdWwueAkJTE9HMTAoJXBjKSwlZnAwCQkjIEZQMCBJUyBSCisJYWRkLncJCSVkMSxGQUNUMSglYTYpCisJYWRkLncJCSVkMSxGQUNUMiglYTYpCisKK2V4cHI6CisjLS1GUENSLCBGUDIsIEZQMyBBUkUgU0FWRUQgSU4gT1JERVIgQVMgU0hPV04uCisjLS1BREpGQUNUIENPTlRBSU5TIDIqKihNJyksIEZBQ1QxICsgRkFDVDIgPSAyKiooTSkgKiAyKiooSi82NCkuCisjLS1GUDAgSVMgUi4gVEhFIEZPTExPV0lORyBDT0RFIENPTVBVVEVTCisjLS0JMioqKE0nK00pICogMioqKEovNjQpICogRVhQKFIpCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBTID0gUipSCisKKwlmbW92LmQJCUVYUEE1KCVwYyksJWZwMgkJIyBGUDIgSVMgQTUKKwlmbW92LmQJCUVYUEE0KCVwYyksJWZwMwkJIyBGUDMgSVMgQTQKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIEZQMiBJUyBTKkE1CisJZm11bC54CQklZnAxLCVmcDMJCSMgRlAzIElTIFMqQTQKKworCWZhZGQuZAkJRVhQQTMoJXBjKSwlZnAyCQkjIEZQMiBJUyBBMytTKkE1CisJZmFkZC5kCQlFWFBBMiglcGMpLCVmcDMJCSMgRlAzIElTIEEyK1MqQTQKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIEZQMiBJUyBTKihBMytTKkE1KQorCWZtdWwueAkJJWZwMSwlZnAzCQkjIEZQMyBJUyBTKihBMitTKkE0KQorCisJZmFkZC5kCQlFWFBBMSglcGMpLCVmcDIJCSMgRlAyIElTIEExK1MqKEEzK1MqQTUpCisJZm11bC54CQklZnAwLCVmcDMJCSMgRlAzIElTIFIqUyooQTIrUypBNCkKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIEZQMiBJUyBTKihBMStTKihBMytTKkE1KSkKKwlmYWRkLngJCSVmcDMsJWZwMAkJIyBGUDAgSVMgUitSKlMqKEEyK1MqQTQpCisJZmFkZC54CQklZnAyLCVmcDAJCSMgRlAwIElTIEVYUChSKSAtIDEKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworIy0tRklOQUwgUkVDT05TVFJVQ1RJT04gUFJPQ0VTUworIy0tRVhQKFgpID0gMl5NKjJeKEovNjQpICsgMl5NKjJeKEovNjQpKihFWFAoUiktMSkgIC0gICgxIE9SIDApCisKKwlmbXVsLngJCUZBQ1QxKCVhNiksJWZwMAorCWZhZGQueAkJRkFDVDIoJWE2KSwlZnAwCisJZmFkZC54CQlGQUNUMSglYTYpLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJbW92LncJCSVkMixBREpGQUNUKCVhNikJIyBJTlNFUlQgRVhQT05FTlQKKwltb3YubAkJKCVzcCkrLCVkMgorCW1vdi5sCQkmMHg4MDAwMDAwMCxBREpGQUNUKzQoJWE2KQorCWNsci5sCQlBREpGQUNUKzgoJWE2KQorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJQURKRkFDVCglYTYpLCVmcDAJIyBGSU5BTCBBREpVU1RNRU5UCisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXN0ZW50b3hkCitzdGVudG94ZDoKKyMtLUVOVFJZIFBPSU5UIEZPUiAxMCoqKFgpIEZPUiBERU5PUk1BTElaRUQgQVJHVU1FTlQKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCB1c2VyJ3Mgcm91bmRpbmcgbW9kZS9wcmVjaXNpb24KKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBSRVRVUk4gMSArIFgKKwltb3YubAkJKCVhMCksJWQxCisJb3IubAkJJjB4MDA4MDAwMDEsJWQxCisJZmFkZC5zCQklZDEsJWZwMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNzY2FsZSgpOiBjb21wdXRlcyB0aGUgZGVzdGluYXRpb24gb3BlcmFuZCBzY2FsZWQgYnkgdGhlIHNvdXJjZQkjCisjCSAgICBvcGVyYW5kLiBJZiB0aGUgYWJzb3VsdXRlIHZhbHVlIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZCBpcwkjCisjCSAgICA+PSAyXjE0LCBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaXMgcmV0dXJuZWQuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCAgPSBwb2ludGVyIHRvIGRvdWJsZS1leHRlbmRlZCBzb3VyY2Ugb3BlcmFuZCBYCQkjCisjCWExICA9IHBvaW50ZXIgdG8gZG91YmxlLWV4dGVuZGVkIGRlc3RpbmF0aW9uIG9wZXJhbmQgWQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gIHNjYWxlKFgsWSkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQJU0lHTiwJCUxfU0NSMQorCisJZ2xvYmFsCQlzc2NhbGUKK3NzY2FsZToKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzdG9yZSBvZmYgY3RybCBiaXRzIGZvciBub3cKKworCW1vdi53CQlEU1RfRVgoJWExKSwlZDEJCSMgZ2V0IGRzdCBleHBvbmVudAorCXNtaS5iCQlTSUdOKCVhNikJCSMgdXNlIFNJR04gdG8gaG9sZCBkc3Qgc2lnbgorCWFuZGkubAkJJjB4MDAwMDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24gZnJvbSBkc3QgZXhwCisKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGNoZWNrIHNyYyBib3VuZHMKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsciBzcmMgc2lnbiBiaXQKKwljbXBpLncJCSVkMCwmMHgzZmZmCQkjIGlzIHNyYyB+IFpFUk8/CisJYmx0LncJCXNyY19zbWFsbAkJIyB5ZXMKKwljbXBpLncJCSVkMCwmMHg0MDBjCQkjIG5vOyBpcyBzcmMgdG9vIGJpZz8KKwliZ3QudwkJc3JjX291dAkJCSMgeWVzCisKKyMKKyMgU291cmNlIGlzIHdpdGhpbiAyXjE0IHJhbmdlLgorIworc3JjX29rOgorCWZpbnRyei54CVNSQyglYTApLCVmcDAJCSMgY2FsYyBpbnQgb2Ygc3JjCisJZm1vdi5sCQklZnAwLCVkMAkJIyBpbnQgc3JjIHRvIGQwCisjIGRvbid0IHdhbnQgYW55IGFjY3J1ZWQgYml0cyBmcm9tIHRoZSBmaW50cnogc2hvd2luZyB1cCBsYXRlciBzaW5jZQorIyB3ZSBtYXkgbmVlZCB0byByZWFkIHRoZSBmcHNyIGZvciB0aGUgbGFzdCBmcCBvcCBpbiB0X2NhdGNoMigpLgorCWZtb3YubAkJJjB4MCwlZnBzcgorCisJdHN0LmIJCURTVF9ISSglYTEpCQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CisJYm1pLmIJCXNva19ub3JtCisKKyMgdGhlIGRzdCBpcyBhIERFTk9STS4gbm9ybWFsaXplIHRoZSBERU5PUk0gYW5kIGFkZCB0aGUgYWRqdXN0bWVudCB0bworIyB0aGUgc3JjIHZhbHVlLiB0aGVuLCBqdW1wIHRvIHRoZSBub3JtIHBhcnQgb2YgdGhlIHJvdXRpbmUuCitzb2tfZG5ybToKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNyYyBmb3Igbm93CisKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpICMgbWFrZSBhIGNvcHkKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gREVOT1JNCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisJbmVnLmwJCSVkMAorCWFkZC5sCQkoJXNwKSssJWQwCQkjIGFkZCBhZGp1c3RtZW50IHRvIHNyYworCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgbG9hZCBub3JtYWxpemVkIERFTk9STQorCisJY21waS53CQklZDAsJi0weDNmZmYJCSMgaXMgdGhlIHNoZnQgYW10IHJlYWxseSBsb3c/CisJYmdlLmIJCXNva19ub3JtMgkJIyB0aGFuayBnb29kbmVzcyBubworCisjIHRoZSBtdWx0aXBseSBmYWN0b3IgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gY3JlYXRlIHNob3VsZCBiZSBhIGRlbm9ybQorIyBmb3IgdGhlIG11bHRpcGx5IHRvIHdvcmsuIHRoZXJlZm9yZSwgd2UncmUgZ29pbmcgdG8gYWN0dWFsbHkgZG8gYQorIyBtdWx0aXBseSB3aXRoIGEgZGVub3JtIHdoaWNoIHdpbGwgY2F1c2UgYW4gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUKKyMgZXhjZXB0aW9uIHRvIGJlIHB1dCBpbnRvIHRoZSBtYWNoaW5lIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGFuZCBjb3JyZWN0ZWQKKyMgbGF0ZXIuIHdlIGRvbid0IGRvIHRoaXMgd2l0aCB0aGUgREVOT1JNcyBhYm92ZSBiZWNhdXNlIHRoaXMgbWV0aG9kCisjIGlzIHNsb3dlci4gYnV0LCBkb24ndCBmcmV0LCBJIGRvbid0IHNlZSBpdCBiZWluZyB1c2VkIG11Y2ggZWl0aGVyLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMQkJIyBsb2FkIG5vcm1hbGl6ZWQgbWFudGlzc2EKKwlzdWJpLmwJCSYtMHgzZmZmLCVkMAkJIyBob3cgbWFueSBzaG91bGQgd2Ugc2hpZnQ/CisJbmVnLmwJCSVkMAkJCSMgbWFrZSBpdCBwb3NpdGl2ZQorCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIGl0ID4gMzI/CisJYmdlLmIJCXNva19kbnJtXzMyCQkjIHllcworCWxzci5sCQklZDAsJWQxCQkJIyBubzsgYml0IHN0YXlzIGluIHVwcGVyIGx3CisJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IHplcm8gbG93IG1hbnRpc3NhCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgaW5zZXJ0IG5ldyBoaWdoIG1hbnRpc3NhCisJY2xyLmwJCS0oJXNwKQkJCSMgbWFrZSB6ZXJvIGV4cG9uZW50CisJYnJhLmIJCXNva19ub3JtX2NvbnQKK3Nva19kbnJtXzMyOgorCXN1YmkuYgkJJjB4MjAsJWQwCQkjIGdldCBzaGlmdCBjb3VudAorCWxzci5sCQklZDAsJWQxCQkJIyBtYWtlIGxvdyBtYW50aXNzYSBsb25nd29yZAorCW1vdi5sCQklZDEsLSglc3ApCQkjIGluc2VydCBuZXcgbG93IG1hbnRpc3NhCisJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IHplcm8gaGlnaCBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIG1ha2UgemVybyBleHBvbmVudAorCWJyYS5iCQlzb2tfbm9ybV9jb250CisKKyMgdGhlIHNyYyB3aWxsIGZvcmNlIHRoZSBkc3QgdG8gYSBERU5PUk0gdmFsdWUgb3Igd29yc2UuIHNvLCBsZXQncworIyBjcmVhdGUgYW4gZnAgbXVsdGlwbHkgdGhhdCB3aWxsIGNyZWF0ZSB0aGUgcmVzdWx0Lgorc29rX25vcm06CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBmcDAgd2l0aCBub3JtYWxpemVkIHNyYworc29rX25vcm0yOgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCisKKwlhZGRpLncJCSYweDNmZmYsJWQwCQkjIHR1cm4gc3JjIGFtdCBpbnRvIGV4cCB2YWx1ZQorCXN3YXAJCSVkMAkJCSMgcHV0IGV4cG9uZW50IGluIGhpZ2ggd29yZAorCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJJjB4ODAwMDAwMDAsLSglc3ApCSMgaW5zZXJ0IG5ldyBoaWdoIG1hbnRpc3NhCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgaW5zZXJ0IG5ldyBsbyBtYW50aXNzYQorCitzb2tfbm9ybV9jb250OgorCWZtb3YubAkJJWZwY3IsJWQwCQkjIGQwIG5lZWRzIGZwY3IgZm9yIHRfY2F0Y2gyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQkoJXNwKSssJWZwMAkJIyBkbyB0aGUgbXVsdGlwbHkKKwlicmEJCXRfY2F0Y2gyCQkjIGNhdGNoIGFueSBleGNlcHRpb25zCisKKyMKKyMgU291cmNlIGlzIG91dHNpZGUgb2YgMl4xNCByYW5nZS4gIFRlc3QgdGhlIHNpZ24gYW5kIGJyYW5jaAorIyB0byB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGhhbmRsZXIuCisjCitzcmNfb3V0OgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgY3RybCBiaXRzCisJZXhnCQklYTAsJWExCQkJIyBzd2FwIHNyYyxkc3QgcHRycworCXRzdC5iCQlTUkNfRVgoJWExKQkJIyBpcyBzcmMgbmVnYXRpdmU/CisJYm1pCQl0X3VuZmwJCQkjIHllczsgdW5kZXJmbG93CisJYnJhCQl0X292Zmxfc2MJCSMgbm87IG92ZXJmbG93CisKKyMKKyMgVGhlIHNvdXJjZSBpbnB1dCBpcyBiZWxvdyAxLCBzbyB3ZSBjaGVjayBmb3IgZGVub3JtYWxpemVkIG51bWJlcnMKKyMgYW5kIHNldCB1bmZsLgorIworc3JjX3NtYWxsOgorCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJwbC5iCQlzc21hbGxfZG9uZQkJIyB5ZXMKKworCW1vdi5sCQkoJXNwKSssJWQwCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbm87IGxvYWQgY29udHJvbCBiaXRzCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJRFNUKCVhMSksJWZwMAkJIyBzaW1wbHkgcmV0dXJuIGRlc3QKKwlicmEJCXRfY2F0Y2gyCitzc21hbGxfZG9uZToKKwltb3YubAkJKCVzcCkrLCVkMAkJIyBsb2FkIGNvbnRyb2wgYml0cyBpbnRvIGQxCisJbW92LmwJCSVhMSwlYTAJCQkjIHBhc3MgcHRyIHRvIGRzdAorCWJyYQkJdF9yZXNkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc21vZCgpOiBjb21wdXRlcyB0aGUgZnAgTU9EIG9mIHRoZSBpbnB1dCB2YWx1ZXMgWCxZLgkJCSMKKyMgc3JlbSgpOiBjb21wdXRlcyB0aGUgZnAgKElFRUUpIFJFTSBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgWAkJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dCBZCQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIwlUaGUgaW5wdXQgb3BlcmFuZHMgWCBhbmQgWSBjYW4gYmUgZWl0aGVyIG5vcm1hbGl6ZWQgb3IJCSMKKyMJZGVub3JtYWxpemVkLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIyAgICAgIGZwMCA9IEZSRU0oWCxZKSBvciBGTU9EKFgsWSkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuICBTYXZlIGFuZCBzdHJpcCBzaWducyBvZiBYIGFuZCBZOiBzaWduWCA6PSBzaWduKFgpLAkjCisjICAgICAgICAgICAgICAgIHNpZ25ZIDo9IHNpZ24oWSksIFggOj0gfFh8LCBZIDo9IHxZfCwJCQkjCisjICAgICAgICAgICAgICAgIHNpZ25RIDo9IHNpZ25YIEVPUiBzaWduWS4gUmVjb3JkIHdoZXRoZXIgTU9EIG9yIFJFTQkjCisjICAgICAgICAgICAgICAgIGlzIHJlcXVlc3RlZC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICBTZXQgTCA6PSBleHBvKFgpLWV4cG8oWSksIGsgOj0gMCwgUSA6PSAwLgkJIworIyAgICAgICAgICAgICAgICBJZiAoTCA8IDApIHRoZW4JCQkJCSMKKyMgICAgICAgICAgICAgICAgICAgUiA6PSBYLCBnbyB0byBTdGVwIDQuCQkJCSMKKyMgICAgICAgICAgICAgICAgZWxzZQkJCQkJCQkjCisjICAgICAgICAgICAgICAgICAgIFIgOj0gMl4oLUwpWCwgaiA6PSBMLgkJCQkjCisjICAgICAgICAgICAgICAgIGVuZGlmCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMy4gIFBlcmZvcm0gTU9EKFgsWSkJCQkJCSMKKyMgICAgICAgICAgICAzLjEgSWYgUiA9IFksIGdvIHRvIFN0ZXAgOS4JCQkJIworIyAgICAgICAgICAgIDMuMiBJZiBSID4gWSwgdGhlbiB7IFIgOj0gUiAtIFksIFEgOj0gUSArIDF9CQkjCisjICAgICAgICAgICAgMy4zIElmIGogPSAwLCBnbyB0byBTdGVwIDQuCQkJCSMKKyMgICAgICAgICAgICAzLjQgayA6PSBrICsgMSwgaiA6PSBqIC0gMSwgUSA6PSAyUSwgUiA6PSAyUi4gR28gdG8JIworIyAgICAgICAgICAgICAgICBTdGVwIDMuMS4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDQuICBBdCB0aGlzIHBvaW50LCBSID0gWCAtIFFZID0gTU9EKFgsWSkuIFNldAkJIworIyAgICAgICAgICAgICAgICBMYXN0X1N1YnRyYWN0IDo9IGZhbHNlICh1c2VkIGluIFN0ZXAgNyBiZWxvdykuIElmCSMKKyMgICAgICAgICAgICAgICAgTU9EIGlzIHJlcXVlc3RlZCwgZ28gdG8gU3RlcCA2LgkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNS4gIFIgPSBNT0QoWCxZKSwgYnV0IFJFTShYLFkpIGlzIHJlcXVlc3RlZC4JCSMKKyMgICAgICAgICAgICA1LjEgSWYgUiA8IFkvMiwgdGhlbiBSID0gTU9EKFgsWSkgPSBSRU0oWCxZKS4gR28gdG8JIworIyAgICAgICAgICAgICAgICBTdGVwIDYuCQkJCQkJIworIyAgICAgICAgICAgIDUuMiBJZiBSID4gWS8yLCB0aGVuIHsgc2V0IExhc3RfU3VidHJhY3QgOj0gdHJ1ZSwJCSMKKyMgICAgICAgICAgICAgICAgUSA6PSBRICsgMSwgWSA6PSBzaWduWSpZIH0uIEdvIHRvIFN0ZXAgNi4JCSMKKyMgICAgICAgICAgICA1LjMgVGhpcyBpcyB0aGUgdHJpY2t5IGNhc2Ugb2YgUiA9IFkvMi4gSWYgUSBpcyBvZGQsCSMKKyMgICAgICAgICAgICAgICAgdGhlbiB7IFEgOj0gUSArIDEsIHNpZ25YIDo9IC1zaWduWCB9LgkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNi4gIFIgOj0gc2lnblgqUi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDcuICBJZiBMYXN0X1N1YnRyYWN0ID0gdHJ1ZSwgUiA6PSBSIC0gWS4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDguICBSZXR1cm4gc2lnblEsIGxhc3QgNyBiaXRzIG9mIFEsIGFuZCBSIGFzIHJlcXVpcmVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDkuICBBdCB0aGlzIHBvaW50LCBSID0gMl4oLWopKlggLSBRIFkgPSBZLiBUaHVzLAkJIworIyAgICAgICAgICAgICAgICBYID0gMl4oaikqKFErMSlZLiBzZXQgUSA6PSAyXihqKSooUSsxKSwJCSMKKyMgICAgICAgICAgICAgICAgUiA6PSAwLiBSZXR1cm4gc2lnblEsIGxhc3QgNyBiaXRzIG9mIFEsIGFuZCBSLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXNldAkJTW9kX0ZsYWcsTF9TQ1IzCisJc2V0CQlTY19GbGFnLExfU0NSMysxCisKKwlzZXQJCVNpZ25ZLExfU0NSMgorCXNldAkJU2lnblgsTF9TQ1IyKzIKKwlzZXQJCVNpZ25RLExfU0NSMysyCisKKwlzZXQJCVksRlBfU0NSMAorCXNldAkJWV9IaSxZKzQKKwlzZXQJCVlfTG8sWSs4CisKKwlzZXQJCVIsRlBfU0NSMQorCXNldAkJUl9IaSxSKzQKKwlzZXQJCVJfTG8sUis4CisKK1NjYWxlOgorCWxvbmcJCTB4MDAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCWdsb2JhbAkJc21vZAorc21vZDoKKwljbHIuYgkJRlBTUl9RQllURSglYTYpCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBjdHJsIGJpdHMKKwljbHIuYgkJTW9kX0ZsYWcoJWE2KQorCWJyYS5iCQlNb2RfUmVtCisKKwlnbG9iYWwJCXNyZW0KK3NyZW06CisJY2xyLmIJCUZQU1JfUUJZVEUoJWE2KQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgY3RybCBiaXRzCisJbW92LmIJCSYweDEsTW9kX0ZsYWcoJWE2KQorCitNb2RfUmVtOgorIy4uU2F2ZSBzaWduIG9mIFggYW5kIFkKKwltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgZGF0YSByZWdpc3RlcnMKKwltb3YudwkJU1JDX0VYKCVhMCksJWQzCisJbW92LncJCSVkMyxTaWduWSglYTYpCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMwkJIyBZIDo9IHxZfAorCisjCisJbW92LmwJCVNSQ19ISSglYTApLCVkNAorCW1vdi5sCQlTUkNfTE8oJWEwKSwlZDUJCSMgKEQzLEQ0LEQ1KSBpcyB8WXwKKworCXRzdC5sCQklZDMKKwlibmUuYgkJWV9Ob3JtYWwKKworCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDMJCSMgJDNGRkQgKyAxCisJdHN0LmwJCSVkNAorCWJuZS5iCQlIaVlfbm90MAorCitIaVlfMDoKKwltb3YubAkJJWQ1LCVkNAorCWNsci5sCQklZDUKKwlzdWIubAkJJjMyLCVkMworCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDQKKwlzdWIubAkJJWQ2LCVkMwkJCSMgKEQzLEQ0LEQ1KSBpcyBub3JtYWxpemVkCisjCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJQ2hrX1gKKworSGlZX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYKKwlzdWIubAkJJWQ2LCVkMworCWxzbC5sCQklZDYsJWQ0CisJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQorCWxzbC5sCQklZDYsJWQ1CisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQ0CQkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJQ2hrX1gKKworWV9Ob3JtYWw6CisJYWRkLmwJCSYweDAwMDAzRkZFLCVkMwkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKworQ2hrX1g6CisJbW92LncJCURTVF9FWCglYTEpLCVkMAorCW1vdi53CQklZDAsU2lnblgoJWE2KQorCW1vdi53CQlTaWduWSglYTYpLCVkMQorCWVvci5sCQklZDAsJWQxCisJYW5kLmwJCSYweDAwMDA4MDAwLCVkMQorCW1vdi53CQklZDEsU2lnblEoJWE2KQkJIyBzaWduKFEpIG9idGFpbmVkCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMAorCW1vdi5sCQlEU1RfSEkoJWExKSwlZDEKKwltb3YubAkJRFNUX0xPKCVhMSksJWQyCQkjIChEMCxEMSxEMikgaXMgfFh8CisJdHN0LmwJCSVkMAorCWJuZS5iCQlYX05vcm1hbAorCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDAKKwl0c3QubAkJJWQxCisJYm5lLmIJCUhpWF9ub3QwCisKK0hpWF8wOgorCW1vdi5sCQklZDIsJWQxCisJY2xyLmwJCSVkMgorCXN1Yi5sCQkmMzIsJWQwCisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlsc2wubAkJJWQ2LCVkMQorCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJSW5pdAorCitIaVhfbm90MDoKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgorCXN1Yi5sCQklZDYsJWQwCisJbHNsLmwJCSVkNiwlZDEKKwltb3YubAkJJWQyLCVkNwkJCSMgYSBjb3B5IG9mIEQyCisJbHNsLmwJCSVkNiwlZDIKKwluZWcubAkJJWQ2CisJYWRkLmwJCSYzMiwlZDYKKwlsc3IubAkJJWQ2LCVkNworCW9yLmwJCSVkNywlZDEJCQkjIChEMCxEMSxEMikgbm9ybWFsaXplZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorCWJyYS5iCQlJbml0CisKK1hfTm9ybWFsOgorCWFkZC5sCQkmMHgwMDAwM0ZGRSwlZDAJCSMgKEQwLEQxLEQyKSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0luaXQ6CisjCisJbW92LmwJCSVkMyxMX1NDUjEoJWE2KQkJIyBzYXZlIGJpYXNlZCBleHAoWSkKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGJpYXNlZCBleHAoWCkKKwlzdWIubAkJJWQzLCVkMAkJCSMgTCA6PSBleHBvKFgpLWV4cG8oWSkKKworCWNsci5sCQklZDYJCQkjIEQ2IDo9IGNhcnJ5IDwtIDAKKwljbHIubAkJJWQzCQkJIyBEMyBpcyBRCisJbW92LmwJCSYwLCVhMQkJCSMgQTEgaXMgazsgaitrPUwsIFE9MAorCisjLi4oQ2FycnksRDEsRDIpIGlzIFIKKwl0c3QubAkJJWQwCisJYmdlLmIJCU1vZF9Mb29wX3ByZQorCisjLi5leHBvKFgpIDwgZXhwbyhZKS4gVGh1cyBYID0gbW9kKFgsWSkKKyMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisJYnJhLncJCUdldF9Nb2QKKworTW9kX0xvb3BfcHJlOgorCWFkZHEubAkJJjB4NCwlc3AJCSMgZXJhc2UgZXhwKFgpCisjLi5BdCB0aGlzIHBvaW50ICBSID0gMl4oLUwpWDsgUSA9IDA7IGsgPSAwOyBhbmQgIGsraiA9IEwKK01vZF9Mb29wOgorCXRzdC5sCQklZDYJCQkjIHRlc3QgY2FycnkgYml0CisJYmd0LmIJCVJfR1RfWQorCisjLi5BdCB0aGlzIHBvaW50IGNhcnJ5ID0gMCwgUiA9IChEMSxEMiksIFkgPSAoRDQsRDUpCisJY21wLmwJCSVkMSwlZDQJCQkjIGNvbXBhcmUgaGkoUikgYW5kIGhpKFkpCisJYm5lLmIJCVJfTkVfWQorCWNtcC5sCQklZDIsJWQ1CQkJIyBjb21wYXJlIGxvKFIpIGFuZCBsbyhZKQorCWJuZS5iCQlSX05FX1kKKworIy4uQXQgdGhpcyBwb2ludCwgUiA9IFkKKwlicmEudwkJUmVtX2lzXzAKKworUl9ORV9ZOgorIy4udXNlIHRoZSBib3Jyb3cgb2YgdGhlIHByZXZpb3VzIGNvbXBhcmUKKwliY3MuYgkJUl9MVF9ZCQkJIyBib3Jyb3cgaXMgc2V0IGlmZiBSIDwgWQorCitSX0dUX1k6CisjLi5JZiBDYXJyeSBpcyBzZXQsIHRoZW4gWSA8IChDYXJyeSxEMSxEMikgPCAyWS4gT3RoZXJ3aXNlLCBDYXJyeSA9IDAKKyMuLmFuZCBZIDwgKEQxLEQyKSA8IDJZLiBFaXRoZXIgd2F5LCBwZXJmb3JtIFIgLSBZCisJc3ViLmwJCSVkNSwlZDIJCQkjIGxvKFIpIC0gbG8oWSkKKwlzdWJ4LmwJCSVkNCwlZDEJCQkjIGhpKFIpIC0gaGkoWSkKKwljbHIubAkJJWQ2CQkJIyBjbGVhciBjYXJyeQorCWFkZHEubAkJJjEsJWQzCQkJIyBRIDo9IFEgKyAxCisKK1JfTFRfWToKKyMuLkF0IHRoaXMgcG9pbnQsIENhcnJ5PTAsIFIgPCBZLiBSID0gMl4oay1MKVggLSBRWTsgaytqID0gTDsgaiA+PSAwLgorCXRzdC5sCQklZDAJCQkjIHNlZSBpZiBqID0gMC4KKwliZXEuYgkJUG9zdExvb3AKKworCWFkZC5sCQklZDMsJWQzCQkJIyBRIDo9IDJRCisJYWRkLmwJCSVkMiwlZDIJCQkjIGxvKFIpID0gMmxvKFIpCisJcm94bC5sCQkmMSwlZDEJCQkjIGhpKFIpID0gMmhpKFIpICsgY2FycnkKKwlzY3MJCSVkNgkJCSMgc2V0IENhcnJ5IGlmIDIoUikgb3ZlcmZsb3dzCisJYWRkcS5sCQkmMSwlYTEJCQkjIGsgOj0gaysxCisJc3VicS5sCQkmMSwlZDAJCQkjIGogOj0gaiAtIDEKKyMuLkF0IHRoaXMgcG9pbnQsIFI9KENhcnJ5LEQxLEQyKSA9IDJeKGstTClYIC0gUVksIGoraz1MLCBqID49IDAsIFIgPCAyWS4KKworCWJyYS5iCQlNb2RfTG9vcAorCitQb3N0TG9vcDoKKyMuLmsgPSBMLCBqID0gMCwgQ2FycnkgPSAwLCBSID0gKEQxLEQyKSA9IFggLSBRWSwgUiA8IFkuCisKKyMuLm5vcm1hbGl6ZSBSLgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJCSMgbmV3IGJpYXNlZCBleHBvIG9mIFIKKwl0c3QubAkJJWQxCisJYm5lLmIJCUhpUl9ub3QwCisKK0hpUl8wOgorCW1vdi5sCQklZDIsJWQxCisJY2xyLmwJCSVkMgorCXN1Yi5sCQkmMzIsJWQwCisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlsc2wubAkJJWQ2LCVkMQorCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJR2V0X01vZAorCitIaVJfbm90MDoKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgorCWJtaS5iCQlHZXRfTW9kCQkJIyBhbHJlYWR5IG5vcm1hbGl6ZWQKKwlzdWIubAkJJWQ2LCVkMAorCWxzbC5sCQklZDYsJWQxCisJbW92LmwJCSVkMiwlZDcJCQkjIGEgY29weSBvZiBEMgorCWxzbC5sCQklZDYsJWQyCisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKKworIworR2V0X01vZDoKKwljbXAubAkJJWQwLCYweDAwMDA0MUZFCisJYmdlLmIJCU5vX1NjYWxlCitEb19TY2FsZToKKwltb3YudwkJJWQwLFIoJWE2KQorCW1vdi5sCQklZDEsUl9IaSglYTYpCisJbW92LmwJCSVkMixSX0xvKCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CisJbW92LncJCSVkNixZKCVhNikKKwltb3YubAkJJWQ0LFlfSGkoJWE2KQorCW1vdi5sCQklZDUsWV9MbyglYTYpCisJZm1vdi54CQlSKCVhNiksJWZwMAkJIyBubyBleGNlcHRpb24KKwltb3YuYgkJJjEsU2NfRmxhZyglYTYpCisJYnJhLmIJCU1vZE9yUmVtCitOb19TY2FsZToKKwltb3YubAkJJWQxLFJfSGkoJWE2KQorCW1vdi5sCQklZDIsUl9MbyglYTYpCisJc3ViLmwJCSYweDNGRkUsJWQwCisJbW92LncJCSVkMCxSKCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CisJc3ViLmwJCSYweDNGRkUsJWQ2CisJbW92LmwJCSVkNixMX1NDUjEoJWE2KQorCWZtb3YueAkJUiglYTYpLCVmcDAKKwltb3YudwkJJWQ2LFkoJWE2KQorCW1vdi5sCQklZDQsWV9IaSglYTYpCisJbW92LmwJCSVkNSxZX0xvKCVhNikKKwljbHIuYgkJU2NfRmxhZyglYTYpCisKKyMKK01vZE9yUmVtOgorCXRzdC5iCQlNb2RfRmxhZyglYTYpCisJYmVxLmIJCUZpeF9TaWduCisKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CQkjIG5ldyBiaWFzZWQgZXhwbyhZKQorCXN1YnEubAkJJjEsJWQ2CQkJIyBiaWFzZWQgZXhwbyhZLzIpCisJY21wLmwJCSVkMCwlZDYKKwlibHQuYgkJRml4X1NpZ24KKwliZ3QuYgkJTGFzdF9TdWIKKworCWNtcC5sCQklZDEsJWQ0CisJYm5lLmIJCU5vdF9FUQorCWNtcC5sCQklZDIsJWQ1CisJYm5lLmIJCU5vdF9FUQorCWJyYS53CQlUaWVfQ2FzZQorCitOb3RfRVE6CisJYmNzLmIJCUZpeF9TaWduCisKK0xhc3RfU3ViOgorIworCWZzdWIueAkJWSglYTYpLCVmcDAJCSMgbm8gZXhjZXB0aW9ucworCWFkZHEubAkJJjEsJWQzCQkJIyBRIDo9IFEgKyAxCisKKyMKK0ZpeF9TaWduOgorIy4uR2V0IHNpZ24gb2YgWAorCW1vdi53CQlTaWduWCglYTYpLCVkNgorCWJnZS5iCQlHZXRfUQorCWZuZWcueAkJJWZwMAorCisjLi5HZXQgUQorIworR2V0X1E6CisJY2xyLmwJCSVkNgorCW1vdi53CQlTaWduUSglYTYpLCVkNgkJIyBENiBpcyBzaWduKFEpCisJbW92LmwJCSY4LCVkNworCWxzci5sCQklZDcsJWQ2CisJYW5kLmwJCSYweDAwMDAwMDdGLCVkMwkJIyA3IGJpdHMgb2YgUQorCW9yLmwJCSVkNiwlZDMJCQkjIHNpZ24gYW5kIGJpdHMgb2YgUQorIwlzd2FwCQklZDMKKyMJZm1vdi5sCQklZnBzciwlZDYKKyMJYW5kLmwJCSYweEZGMDBGRkZGLCVkNgorIwlvci5sCQklZDMsJWQ2CisjCWZtb3YubAkJJWQ2LCVmcHNyCQkjIHB1dCBRIGluIGZwc3IKKwltb3YuYgkJJWQzLEZQU1JfUUJZVEUoJWE2KQkjIHB1dCBRIGluIGZwc3IKKworIworUmVzdG9yZToKKwltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyAgeyVkMi0lZDd9CisJbW92LmwJCSglc3ApKywlZDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCXRzdC5iCQlTY19GbGFnKCVhNikKKwliZXEuYgkJRmluaXNoCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQlTY2FsZSglcGMpLCVmcDAJCSMgbWF5IGNhdXNlIHVuZGVyZmxvdworCWJyYQkJdF9jYXRjaDIKKyMgdGhlICcwNDAgcGFja2FnZSBkaWQgdGhpcyBhcHBhcmVudGx5IHRvIHNlZSBpZiB0aGUgZHN0IG9wZXJhbmQgZm9yIHRoZQorIyBwcmVjZWRpbmcgZm11bCB3YXMgYSBkZW5vcm0uIGJ1dCwgaXQgYmV0dGVyIG5vdCBoYXZlIGJlZW4gc2luY2UgdGhlCisjIGFsZ29yaXRobSBqdXN0IGdvdCBkb25lIHBsYXlpbmcgd2l0aCBmcDAgYW5kIGV4cGVjdGVkIG5vIGV4Y2VwdGlvbnMKKyMgYXMgYSByZXN1bHQuIHRydXN0IG1lLi4uCisjCWJyYQkJdF9hdm9pZF91bnN1cHAJCSMgY2hlY2sgZm9yIGRlbm9ybSBhcyBhCisjCQkJCQkJO3Jlc3VsdCBvZiB0aGUgc2NhbGluZworCitGaW5pc2g6CisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJJWZwMCwlZnAwCQkjIGNhcHR1cmUgZXhjZXB0aW9ucyAmIHJvdW5kCisJYnJhCQl0X2NhdGNoMgorCitSZW1faXNfMDoKKyMuLlIgPSAyXigtailYIC0gUSBZID0gWSwgdGh1cyBSID0gMCBhbmQgcXVvdGllbnQgPSAyXmogKFErMSkKKwlhZGRxLmwJCSYxLCVkMworCWNtcC5sCQklZDAsJjgJCQkjIEQwIGlzIGoKKwliZ2UuYgkJUV9CaWcKKworCWxzbC5sCQklZDAsJWQzCisJYnJhLmIJCVNldF9SXzAKKworUV9CaWc6CisJY2xyLmwJCSVkMworCitTZXRfUl8wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAorCWNsci5iCQlTY19GbGFnKCVhNikKKwlicmEudwkJRml4X1NpZ24KKworVGllX0Nhc2U6CisjLi5DaGVjayBwYXJpdHkgb2YgUQorCW1vdi5sCQklZDMsJWQ2CisJYW5kLmwJCSYweDAwMDAwMDAxLCVkNgorCXRzdC5sCQklZDYKKwliZXEudwkJRml4X1NpZ24JCSMgUSBpcyBldmVuCisKKyMuLlEgaXMgb2RkLCBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblgKKwlhZGRxLmwJCSYxLCVkMworCW1vdi53CQlTaWduWCglYTYpLCVkNgorCWVvci5sCQkmMHgwMDAwODAwMCwlZDYKKwltb3YudwkJJWQ2LFNpZ25YKCVhNikKKwlicmEudwkJRml4X1NpZ24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0YWcoKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGV4dCBmcCBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSAwNjBGUExTUC4JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKKyMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFpFUk8JCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKKyMgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG9wZXJhbmQuCQkJCQkjCisjCUlmIGl0J3MgYW4gdW5ub3JtYWxpemVkIHplcm8sIGFsdGVyIHRoZSBvcGVyYW5kIGFuZCBmb3JjZSBpdAkjCisjIHRvIGJlIGEgbm9ybWFsIHplcm8uCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRhZwordGFnOgorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCAlZDAJCSMgc3RyaXAgb2ZmIHNpZ24KKwljbXBpLncJCSVkMCwgJjB4N2ZmZgkJIyBpcyAoRVhQID09IE1BWCk/CisJYmVxLmIJCWluZl9vcl9uYW5feAorbm90X2luZl9vcl9uYW5feDoKKwlidHN0CQkmMHg3LEZURU1QX0hJKCVhMCkKKwliZXEuYgkJbm90X25vcm1feAoraXNfbm9ybV94OgorCW1vdi5iCQkmTk9STSwgJWQwCisJcnRzCitub3Rfbm9ybV94OgorCXRzdC53CQklZDAJCQkjIGlzIGV4cG9uZW50ID0gMD8KKwlibmUuYgkJaXNfdW5ub3JtX3gKK25vdF91bm5vcm1feDoKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQorCWJuZS5iCQlpc19kZW5vcm1feAorCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCWlzX2Rlbm9ybV94Citpc196ZXJvX3g6CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX2Rlbm9ybV94OgorCW1vdi5iCQkmREVOT1JNLCAlZDAKKwlydHMKK2lzX3Vubm9ybV94OgorCWJzci5sCQl1bm5vcm1fZml4CQkjIGNvbnZlcnQgdG8gbm9ybSxkZW5vcm0sb3IgemVybworCXJ0cworaXNfdW5ub3JtX3JlZ194OgorCW1vdi5iCQkmVU5OT1JNLCAlZDAKKwlydHMKK2luZl9vcl9uYW5feDoKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc19uYW5feAorCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAKKwlhbmQubAkJJjB4N2ZmZmZmZmYsICVkMAkjIG1zYiBpcyBhIGRvbid0IGNhcmUhCisJYm5lLmIJCWlzX25hbl94Citpc19pbmZfeDoKKwltb3YuYgkJJklORiwgJWQwCisJcnRzCitpc19uYW5feDoKKwltb3YuYgkJJlFOQU4sICVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3FuYW46CWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X2R6KCk6IEhhbmRsZSAwNjBGUExTUCBkeiBleGNlcHRpb24gZm9yICJmbG9nbiIgZW11bGF0aW9uLgkjCisjCXRfZHoyKCk6IEhhbmRsZSAwNjBGUExTUCBkeiBleGNlcHRpb24gZm9yICJmYXRhbmgiIGVtdWxhdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhlc2Ugcm91aXRuZXMgYXJlIHVzZWQgYnkgdGhlIDA2MEZQTFNQIHBhY2thZ2UuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kLgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCBEWiByZXN1bHQuCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUcmFuc2NlbmRlbnRhbCBlbXVsYXRpb24gZm9yIHRoZSAwNjBGUExTUCBoYXMgZGV0ZWN0ZWQgdGhhdAkjCisjIGEgRFogZXhjZXB0aW9uIHNob3VsZCBvY2N1ciBmb3IgdGhlIGluc3RydWN0aW9uLiBJZiBEWiBpcyBkaXNhYmxlZCwJIworIyByZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0LgkJCQkJCSMKKyMJSWYgRFogaXMgZW5hYmxlZCwgdGhlIGRzdCBvcGVyYW5kIHNob3VsZCBiZSByZXR1cm5lZCB1bnNjYXRoZWQJIworIyBpbiBmcDAgd2hpbGUgZnAxIGlzIHVzZWQgdG8gY3JlYXRlIGEgRFogZXhjZXB0aW9uIHNvIHRoYXQgdGhlCQkjCisjIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGxvZyB0aGF0IHN1Y2ggYW4gZXZlbnQgb2NjdXJyZWQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdF9kegordF9kejoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBmb3IgbmVnIG9yIHBvcworCWJwbC5iCQlkel9waW5mCQkJIyBicmFuY2ggaWYgcG9zIHNpZ24KKworCWdsb2JhbAkJdF9kejIKK3RfZHoyOgorCW9yaS5sCQkmZHppbmZfbWFzaytuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOL0kvRFovQURaCisKKwlidHN0CQkmZHpfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZHpfbWluZl9lbmEKKworIyBkeiBpcyBkaXNhYmxlZC4gcmV0dXJuIGEgLUlORi4KKwlmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyByZXR1cm4gLUlORgorCXJ0cworCisjIGR6IGlzIGVuYWJsZWQuIGNyZWF0ZSBhIGR6IGV4Y2VwdGlvbiBzbyB0aGUgdXNlciBjYW4gcmVjb3JkIGl0CisjIGJ1dCB1c2UgZnAxIGluc3RlYWQuIHJldHVybiB0aGUgZHN0IG9wZXJhbmQgdW5zY2F0aGVkIGluIGZwMC4KK2R6X21pbmZfZW5hOgorCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHg4MAkjIHJldHVybiBmcDAgdW5zY2F0aGVkCisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3YucwkJJjB4YmY4MDAwMDAsJWZwMQkjIGxvYWQgLTEKKwlmZGl2LnMJCSYweDAwMDAwMDAwLCVmcDEJIyAtMSAvIDAKKwlydHMKKworZHpfcGluZjoKKwlvcmkubAkJJmR6aW5mX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgSS9EWi9BRFoKKworCWJ0c3QJCSZkel9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlkel9waW5mX2VuYQorCisjIGR6IGlzIGRpc2FibGVkLiByZXR1cm4gYSArSU5GLgorCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwMAkjIHJldHVybiArSU5GCisJcnRzCisKKyMgZHogaXMgZW5hYmxlZC4gY3JlYXRlIGEgZHogZXhjZXB0aW9uIHNvIHRoZSB1c2VyIGNhbiByZWNvcmQgaXQKKyMgYnV0IHVzZSBmcDEgaW5zdGVhZC4gcmV0dXJuIHRoZSBkc3Qgb3BlcmFuZCB1bnNjYXRoZWQgaW4gZnAwLgorZHpfcGluZl9lbmE6CisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweDgwCSMgcmV0dXJuIGZwMCB1bnNjYXRoZWQKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgbG9hZCArMQorCWZkaXYucwkJJjB4MDAwMDAwMDAsJWZwMQkjICsxIC8gMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXRfb3BlcnIoKTogSGFuZGxlIDA2MEZQTFNQIE9QRVJSIGV4Y2VwdGlvbiBkdXJpbmcgZW11bGF0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgMDYwRlBMU1AgcGFja2FnZS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAxID0gc291cmNlIG9wZXJhbmQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IHJlc3VsdAkJCQkJCSMKKyMJZnAxID0gdW5jaGFuZ2VkCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFuIG9wZXJhbmQgZXJyb3Igc2hvdWxkIG9jY3VyIGFzIHRoZSByZXN1bHQgb2YgdHJhbnNjZW5kZW50YWwJIworIyBlbXVsYXRpb24gaW4gdGhlIDA2MEZQTFNQLiBJZiBPUEVSUiBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gYSBOQU4JIworIyBpbiBmcDAuIElmIE9QRVJSIGlzIGVuYWJsZWQsIHJldHVybiB0aGUgZHN0IG9wZXJhbmQgdW5zY2F0aGVkIGluIGZwMAkjCisjIGFuZCB0aGUgc291cmNlIG9wZXJhbmQgaW4gZnAxLiBVc2UgZnAyIHRvIGNyZWF0ZSBhbiBPUEVSUiBleGNlcHRpb24JIworIyBzbyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBsb2cgdGhlIGV2ZW50LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfb3BlcnIKK3Rfb3BlcnI6CisJb3JpLmwJCSZvcG5hbl9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE5BTi9PUEVSUi9BSU9QCisKKwlidHN0CQkmb3BlcnJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJb3BlcnJfZW5hCisKKyMgb3BlcnIgaXMgZGlzYWJsZWQuIHJldHVybiBhIFFOQU4gaW4gZnAwCisJZm1vdm0ueAkJcW5hbiglcGMpLCYweDgwCQkjIHJldHVybiBRTkFOCisJcnRzCisKKyMgb3BlcnIgaXMgZW5hYmxlZC4gY3JlYXRlIGFuIG9wZXJyIGV4Y2VwdGlvbiBzbyB0aGUgdXNlciBjYW4gcmVjb3JkIGl0CisjIGJ1dCB1c2UgZnAyIGluc3RlYWQuIHJldHVybiB0aGUgZHN0IG9wZXJhbmQgdW5zY2F0aGVkIGluIGZwMC4KK29wZXJyX2VuYToKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4ODAJIyByZXR1cm4gZnAwIHVuc2NhdGhlZAorCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDIJIyBsb2FkICtJTkYKKwlmbXVsLnMJCSYweDAwMDAwMDAwLCVmcDIJIyArSU5GIHggMAorCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyByZXN0b3JlIGZwMgorCXJ0cworCitwbHNfaHVnZToKKwlsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZgorbW5zX2h1Z2U6CisJbG9uZwkJMHhmZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYKK3Bsc190aW55OgorCWxvbmcJCTB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwCittbnNfdGlueToKKwlsb25nCQkweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXRfdW5mbCgpOiBIYW5kbGUgMDYwRlBMU1AgdW5kZXJmbG93IGV4Y2VwdGlvbiBkdXJpbmcgZW11bGF0aW9uLgkjCisjCXRfdW5mbDIoKTogSGFuZGxlIDA2MEZQTFNQIHVuZGVyZmxvdyBleGNlcHRpb24gZHVyaW5nCQkjCisjCSAgICAgICAgICAgZW11bGF0aW9uLiByZXN1bHQgYWx3YXlzIHBvc2l0aXZlLgkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSAwNjBGUExTUCBwYWNrYWdlLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFuIHVuZGVyZmxvdyBzaG91bGQgb2NjdXIgYXMgdGhlIHJlc3VsdCBvZiB0cmFuc2NlbmRlbnRhbAkjCisjIGVtdWxhdGlvbiBpbiB0aGUgMDYwRlBMU1AuIENyZWF0ZSBhbiB1bmRlcmZsb3cgYnkgdXNpbmcgImZtdWwiCSMKKyMgYW5kIHR3byB2ZXJ5IHNtYWxsIG51bWJlcnMgb2YgYXBwcm9wcmlhdGUgc2lnbiBzbyB0aGUgb3BlcmF0aW5nCSMKKyMgc3lzdGVtIGNhbiBsb2cgdGhlIGV2ZW50LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfdW5mbAordF91bmZsOgorCXRzdC5iCQlTUkNfRVgoJWEwKQorCWJwbC5iCQl1bmZfcG9zCisKKwlnbG9iYWwJCXRfdW5mbDIKK3RfdW5mbDI6CisJb3JpLmwJCSZ1bmZpbnhfbWFzaytuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOL1VORkwvSU5FWDIvQVVORkwvQUlORVgKKworCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92bS54CQltbnNfdGlueSglcGMpLCYweDgwCisJZm11bC54CQlwbHNfdGlueSglcGMpLCVmcDAKKworCWZtb3YubAkJJWZwc3IsJWQwCisJcm9sLmwJCSYweDgsJWQwCisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikKKwlydHMKK3VuZl9wb3M6CisJb3JpLncJCSZ1bmZpbnhfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFVORkwvSU5FWDIvQVVORkwvQUlORVgKKworCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92bS54CQlwbHNfdGlueSglcGMpLCYweDgwCisJZm11bC54CQklZnAwLCVmcDAKKworCWZtb3YubAkJJWZwc3IsJWQwCisJcm9sLmwJCSYweDgsJWQwCisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X292ZmwoKTogSGFuZGxlIDA2MEZQTFNQIG92ZXJmbG93IGV4Y2VwdGlvbiBkdXJpbmcgZW11bGF0aW9uLgkjCisjCQkgIChtb25hZGljKQkJCQkJCSMKKyMJdF9vdmZsMigpOiBIYW5kbGUgMDYwRlBMU1Agb3ZlcmZsb3cgZXhjZXB0aW9uIGR1cmluZwkJIworIwkgICAgICAgICAgIGVtdWxhdGlvbi4gcmVzdWx0IGFsd2F5cyBwb3NpdGl2ZS4gKGR5YWRpYykJCSMKKyMJdF9vdmZsX3NjKCk6IEhhbmRsZSAwNjBGUExTUCBvdmVyZmxvdyBleGNlcHRpb24gZHVyaW5nCQkjCisjCSAgICAgICAgICAgICBlbXVsYXRpb24gZm9yICJmc2NhbGUiLgkJCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgMDYwRlBMU1AgcGFja2FnZS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBbiBvdmVyZmxvdyBzaG91bGQgb2NjdXIgYXMgdGhlIHJlc3VsdCBvZiB0cmFuc2NlbmRlbnRhbAkjCisjIGVtdWxhdGlvbiBpbiB0aGUgMDYwRlBMU1AuIENyZWF0ZSBhbiBvdmVyZmxvdyBieSB1c2luZyAiZm11bCIJCSMKKyMgYW5kIHR3byB2ZXJ5IGxhcmVnIG51bWJlcnMgb2YgYXBwcm9wcmlhdGUgc2lnbiBzbyB0aGUgb3BlcmF0aW5nCSMKKyMgc3lzdGVtIGNhbiBsb2cgdGhlIGV2ZW50LgkJCQkJCSMKKyMJRm9yIHRfb3ZmbF9zYygpIHdlIHRha2Ugc3BlY2lhbCBjYXJlIG5vdCB0byBsb3NlIHRoZSBJTkVYMiBiaXQuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfb3ZmbF9zYwordF9vdmZsX3NjOgorCW9yaS5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBPVkZML0FPVkZML0FJTkVYCisKKwltb3YuYgkJJWQwLCVkMQkJCSMgZmV0Y2ggcm5kIHByZWMsbW9kZQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGV4dHJhY3QgcHJlYworCWJlcS53CQlvdmZsX3dvcmsKKworIyBkc3Qgb3AgaXMgYSBERU5PUk0uIHdlIGhhdmUgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYSB0byBzZWUgaWYgdGhlCisjIHJlc3VsdCB3b3VsZCBiZSBpbmV4YWN0IGZvciB0aGUgZ2l2ZW4gcHJlY2lzaW9uLiBtYWtlIGEgY29weSBvZiB0aGUKKyMgZHN0IHNvIHdlIGRvbid0IHNjcmV3IHVwIHRoZSB2ZXJzaW9uIHBhc3NlZCB0byB1cy4KKwltb3YudwkJTE9DQUxfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJTE9DQUxfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJTE9DQUxfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBGUF9TQ1IwCisJbW92bS5sCQkmMHhjMDgwLC0oJXNwKQkJIyBzYXZlIGQwLWQxL2EwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCW1vdm0ubAkJKCVzcCkrLCYweDAxMDMJCSMgcmVzdG9yZSBkMC1kMS9hMAorCisJY21waS5iCQklZDEsJjB4NDAJCSMgaXMgcHJlY2lzaW9uIHNnbD8KKwlibmUuYgkJb3ZmbF9zY19kYmwJCSMgbm87IGRibAorb3ZmbF9zY19zZ2w6CisJdHN0LmwJCUxPQ0FMX0xPKCVhMCkJCSMgaXMgbG8gbHcgb2Ygc2dsIHNldD8KKwlibmUuYgkJb3ZmbF9zY19pbngJCSMgeWVzCisJdHN0LmIJCTMrTE9DQUxfSEkoJWEwKQkJIyBpcyBsbyBieXRlIG9mIGhpIGx3IHNldD8KKwlibmUuYgkJb3ZmbF9zY19pbngJCSMgeWVzCisJYnJhLncJCW92Zmxfd29yawkJIyBkb24ndCBzZXQgSU5FWDIKK292Zmxfc2NfZGJsOgorCW1vdi5sCQlMT0NBTF9MTyglYTApLCVkMQkjIGFyZSBhbnkgb2YgbG8gMTEgYml0cyBvZgorCWFuZGkubAkJJjB4N2ZmLCVkMQkJIyBkYmwgbWFudGlzc2Egc2V0PworCWJlcS53CQlvdmZsX3dvcmsJCSMgbm87IGRvbid0IHNldCBJTkVYMgorb3ZmbF9zY19pbng6CisJb3JpLmwJCSZpbmV4Ml9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IElORVgyCisJYnJhLmIJCW92Zmxfd29yawkJIyBjb250aW51ZQorCisJZ2xvYmFsCQl0X292ZmwKK3Rfb3ZmbDoKKwlvcmkudwkJJm92ZmlueF9tYXNrLEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgT1ZGTC9JTkVYMi9BT1ZGTC9BSU5FWAorb3ZmbF93b3JrOgorCXRzdC5iCQlTUkNfRVgoJWEwKQorCWJwbC5iCQlvdmZsX3AKK292ZmxfbToKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJbW5zX2h1Z2UoJXBjKSwmMHg4MAorCWZtdWwueAkJcGxzX2h1Z2UoJXBjKSwlZnAwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAorCW9yaS5iCQkmbmVnX21hc2ssJWQwCisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikKKwlydHMKK292ZmxfcDoKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJcGxzX2h1Z2UoJXBjKSwmMHg4MAorCWZtdWwueAkJcGxzX2h1Z2UoJXBjKSwlZnAwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCisJcnRzCisKKwlnbG9iYWwJCXRfb3ZmbDIKK3Rfb3ZmbDI6CisJb3JpLncJCSZvdmZpbnhfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IE9WRkwvSU5FWDIvQU9WRkwvQUlORVgKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJcGxzX2h1Z2UoJXBjKSwmMHg4MAorCWZtdWwueAkJcGxzX2h1Z2UoJXBjKSwlZnAwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdF9jYXRjaCgpOiBIYW5kbGUgMDYwRlBMU1AgT1ZGTCxVTkZMLG9yIElORVgyIGV4Y2VwdGlvbiBkdXJpbmcJIworIwkJICAgZW11bGF0aW9uLgkJCQkJCSMKKyMJdF9jYXRjaDIoKTogSGFuZGxlIDA2MEZQTFNQIE9WRkwsVU5GTCxvciBJTkVYMiBleGNlcHRpb24gZHVyaW5nCSMKKyMJCSAgICBlbXVsYXRpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgYnkgdGhlIDA2MEZQTFNQIHBhY2thZ2UuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgcmVzdWx0CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0CQkjCisjIGluc3RydWN0aW9uIG9mIHRyYW5zY2VuZGVudGFsIDA2MEZQTFNQIGVtdWxhdGlvbiwgdGhlbiBpdCBoYXMgYWxyZWFkeQkjCisjIG9jY3VycmVkIGFuZCBoYXMgYmVlbiBsb2dnZWQuIE5vdyB3ZSBuZWVkIHRvIHNlZSBpZiBhbiBpbmV4YWN0CSMKKyMgZXhjZXB0aW9uIHNob3VsZCBvY2N1ci4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X2NhdGNoMgordF9jYXRjaDI6CisJZm1vdi5sCQklZnBzciwlZDAKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikKKwlicmEuYgkJaW54Ml93b3JrCisKKwlnbG9iYWwJCXRfY2F0Y2gKK3RfY2F0Y2g6CisJZm1vdi5sCQklZnBzciwlZDAKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X2lueDIoKTogSGFuZGxlIGluZXhhY3QgMDYwRlBMU1AgZXhjZXB0aW9uIGR1cmluZyBlbXVsYXRpb24uCSMKKyMJdF9waW54MigpOiBIYW5kbGUgaW5leGFjdCAwNjBGUExTUCBleGNlcHRpb24gZm9yICIrIiByZXN1bHRzLgkjCisjCXRfbWlueDIoKTogSGFuZGxlIGluZXhhY3QgMDYwRlBMU1AgZXhjZXB0aW9uIGZvciAiLSIgcmVzdWx0cy4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0cmFuc2NlbmRlbnRhbCBlbXVsYXRpb24gZm9yIHRoZQkjCisjIDA2MEZQTFNQIHNob3VsZCBiZSBpbmV4YWN0LiBTbywgaWYgaW5leGFjdCBpcyBlbmFibGVkLCB0aGVuIHdlIGNyZWF0ZQkjCisjIHRoZSBldmVudCBoZXJlIGJ5IGFkZGluZyBhIGxhcmdlIGFuZCB2ZXJ5IHNtYWxsIG51bWJlciB0b2dldGhlcgkjCisjIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGxvZyB0aGUgZXZlbnQuCQkJIworIwlNdXN0IGNoZWNrLCB0b28sIGlmIHRoZSByZXN1bHQgd2FzIHplcm8sIGluIHdoaWNoIGNhc2Ugd2UganVzdAkjCisjIHNldCB0aGUgRlBTUiBiaXRzIGFuZCByZXR1cm4uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdF9pbngyCit0X2lueDI6CisJZmJsdC53CQl0X21pbngyCisJZmJlcS53CQlpbngyX3plcm8KKworCWdsb2JhbAkJdF9waW54MgordF9waW54MjoKKwlvcmkudwkJJmlueDJhX21hc2ssRlBTUl9FWENFUFQoJWE2KSAjIHNldCBJTkVYMi9BSU5FWAorCWJyYS5iCQlpbngyX3dvcmsKKworCWdsb2JhbAkJdF9taW54MgordF9taW54MjoKKwlvcmkubAkJJmlueDJhX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKworaW54Ml93b3JrOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIGluZXhhY3QgZW5hYmxlZD8KKwlibmUuYgkJaW54Ml93b3JrX2VuYQkJIyB5ZXMKKwlydHMKK2lueDJfd29ya19lbmE6CisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgkjIGluc2VydCB1c2VyJ3MgZXhjZXB0aW9ucworCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGxvYWQgKzEKKwlmYWRkLngJCXBsc190aW55KCVwYyksJWZwMQkjIGNhdXNlIGV4Y2VwdGlvbgorCXJ0cworCitpbngyX3plcm86CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQorCW9yaS53CQkmaW54MmFfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IElORVgvQUlORVgKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X2V4dGRucm0oKTogSGFuZGxlIERFTk9STSBpbnB1dHMgaW4gMDYwRlBMU1AuCQkJIworIwl0X3Jlc2Rucm0oKTogSGFuZGxlIERFTk9STSBpbnB1dHMgaW4gMDYwRlBMU1AgZm9yICJmc2NhbGUiLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgMDYwRlBMU1AgcGFja2FnZS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dCBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IHJlc3VsdAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZvciBhbGwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIGRlbm9ybWFsaXplZCBpbnB1dCBhbmQgdGhhdAkjCisjIGYoeCk9eCwgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQuCQkJCQkjCisjCURFTk9STSB2YWx1ZSBpcyBtb3ZlZCB1c2luZyAiZm1vdmUiIHdoaWNoIHRyaWdnZXJzIGFuIGV4Y2VwdGlvbgkjCisjIGlmIGVuYWJsZWQgc28gdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGxvZyB0aGUgZXZlbnQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdF9leHRkbnJtCit0X2V4dGRucm06CisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3YueAkJU1JDX0VYKCVhMCksJWZwMAorCWZtb3YubAkJJWZwc3IsJWQwCisJb3JpLmwJCSZ1bmZpbnhfbWFzaywlZDAKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikKKwlydHMKKworCWdsb2JhbAkJdF9yZXNkbnJtCit0X3Jlc2Rucm06CisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3YueAkJU1JDX0VYKCVhMCksJWZwMAorCWZtb3YubAkJJWZwc3IsJWQwCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHN0b19jb3M6CisjCVRoaXMgaXMgdXNlZCBieSBmc2luY29zIGxpYnJhcnkgZW11bGF0aW9uLiBUaGUgY29ycmVjdAorIyB2YWx1ZXMgYXJlIGFscmVhZHkgaW4gZnAwIGFuZCBmcDEgc28gd2UgZG8gbm90aGluZyBoZXJlLgorIworCWdsb2JhbAkJc3RvX2Nvcworc3RvX2NvczoKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMJZHN0X3FuYW4gLS0tIGZvcmNlIHJlc3VsdCB3aGVuIGRlc3RpbmF0aW9uIGlzIGEgTmFOCisjCisJZ2xvYmFsCQlkc3RfcW5hbgorZHN0X3FuYW46CisJZm1vdi54CQlEU1QoJWExKSwlZnAwCisJdHN0LmIJCURTVF9FWCglYTEpCisJYm1pLmIJCWRzdF9xbmFuX20KK2RzdF9xbmFuX3A6CisJbW92LmIJCSZuYW5fYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCitkc3RfcW5hbl9tOgorCW1vdi5iCQkmbmFuX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKKworIworIwlzcmNfcW5hbiAtLS0gZm9yY2UgcmVzdWx0IHdoZW4gc291cmNlIGlzIGEgTmFOCisjCisJZ2xvYmFsCQlzcmNfcW5hbgorc3JjX3FuYW46CisJZm1vdi54CQlTUkMoJWEwKSwlZnAwCisJdHN0LmIJCVNSQ19FWCglYTApCisJYm1pLmIJCXNyY19xbmFuX20KK3NyY19xbmFuX3A6CisJbW92LmIJCSZuYW5fYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCitzcmNfcW5hbl9tOgorCW1vdi5iCQkmbmFuX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMJTmF0aXZlIGluc3RydWN0aW9uIHN1cHBvcnQKKyMKKyMJU29tZSBzeXN0ZW1zIG1heSBuZWVkIGVudHJ5IHBvaW50cyBldmVuIGZvciA2ODA2MCBuYXRpdmUKKyMJaW5zdHJ1Y3Rpb25zLiAgVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGVkIGZvcgorIwljb252ZW5pZW5jZS4KKyMKKwlnbG9iYWwJCV9mYWRkc18KK19mYWRkc186CisJZm1vdi5sCQklZnBjciwtKCVzcCkJCSMgc2F2ZSBmcGNyCisJZm1vdi5sCQkmMHgwMDAwMDAwMCwlZnBjcgkjIGNsZWFyIGZwY3IgZm9yIGxvYWQKKwlmbW92LnMJCTB4OCglc3ApLCVmcDAJCSMgbG9hZCBzZ2wgZHN0CisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSBmcGNyCisJZmFkZC5zCQkweDgoJXNwKSwlZnAwCQkjIGZhZGQgdy8gc2dsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmFkZGRfCitfZmFkZGRfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5kCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgZGJsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZhZGQuZAkJMHhjKCVzcCksJWZwMAkJIyBmYWRkIHcvIGRibCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZhZGR4XworX2ZhZGR4XzoKKwlmbW92bS54CQkweDQoJXNwKSwmMHg4MAkJIyBsb2FkIGV4dCBkc3QKKwlmYWRkLngJCTB4MTAoJXNwKSwlZnAwCQkjIGZhZGQgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZnN1YnNfCitfZnN1YnNfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5zCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgc2dsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZzdWIucwkJMHg4KCVzcCksJWZwMAkJIyBmc3ViIHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZzdWJkXworX2ZzdWJkXzoKKwlmbW92LmwJCSVmcGNyLC0oJXNwKQkJIyBzYXZlIGZwY3IKKwlmbW92LmwJCSYweDAwMDAwMDAwLCVmcGNyCSMgY2xlYXIgZnBjciBmb3IgbG9hZAorCWZtb3YuZAkJMHg4KCVzcCksJWZwMAkJIyBsb2FkIGRibCBkc3QKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIGZwY3IKKwlmc3ViLmQJCTB4Yyglc3ApLCVmcDAJCSMgZnN1YiB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mc3VieF8KK19mc3VieF86CisJZm1vdm0ueAkJMHg0KCVzcCksJjB4ODAJCSMgbG9hZCBleHQgZHN0CisJZnN1Yi54CQkweDEwKCVzcCksJWZwMAkJIyBmc3ViIHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZtdWxzXworX2ZtdWxzXzoKKwlmbW92LmwJCSVmcGNyLC0oJXNwKQkJIyBzYXZlIGZwY3IKKwlmbW92LmwJCSYweDAwMDAwMDAwLCVmcGNyCSMgY2xlYXIgZnBjciBmb3IgbG9hZAorCWZtb3YucwkJMHg4KCVzcCksJWZwMAkJIyBsb2FkIHNnbCBkc3QKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIGZwY3IKKwlmbXVsLnMJCTB4OCglc3ApLCVmcDAJCSMgZm11bCB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mbXVsZF8KK19mbXVsZF86CisJZm1vdi5sCQklZnBjciwtKCVzcCkJCSMgc2F2ZSBmcGNyCisJZm1vdi5sCQkmMHgwMDAwMDAwMCwlZnBjcgkjIGNsZWFyIGZwY3IgZm9yIGxvYWQKKwlmbW92LmQJCTB4OCglc3ApLCVmcDAJCSMgbG9hZCBkYmwgZHN0CisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSBmcGNyCisJZm11bC5kCQkweGMoJXNwKSwlZnAwCQkjIGZtdWwgdy8gZGJsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZm11bHhfCitfZm11bHhfOgorCWZtb3ZtLngJCTB4NCglc3ApLCYweDgwCQkjIGxvYWQgZXh0IGRzdAorCWZtdWwueAkJMHgxMCglc3ApLCVmcDAJCSMgZm11bCB3LyBleHQgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mZGl2c18KK19mZGl2c186CisJZm1vdi5sCQklZnBjciwtKCVzcCkJCSMgc2F2ZSBmcGNyCisJZm1vdi5sCQkmMHgwMDAwMDAwMCwlZnBjcgkjIGNsZWFyIGZwY3IgZm9yIGxvYWQKKwlmbW92LnMJCTB4OCglc3ApLCVmcDAJCSMgbG9hZCBzZ2wgZHN0CisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSBmcGNyCisJZmRpdi5zCQkweDgoJXNwKSwlZnAwCQkjIGZkaXYgdy8gc2dsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmRpdmRfCitfZmRpdmRfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5kCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgZGJsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZkaXYuZAkJMHhjKCVzcCksJWZwMAkJIyBmZGl2IHcvIGRibCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZkaXZ4XworX2ZkaXZ4XzoKKwlmbW92bS54CQkweDQoJXNwKSwmMHg4MAkJIyBsb2FkIGV4dCBkc3QKKwlmZGl2LngJCTB4MTAoJXNwKSwlZnAwCQkjIGZkaXYgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmFic3NfCitfZmFic3NfOgorCWZhYnMucwkJMHg0KCVzcCksJWZwMAkJIyBmYWJzIHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZhYnNkXworX2ZhYnNkXzoKKwlmYWJzLmQJCTB4NCglc3ApLCVmcDAJCSMgZmFicyB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mYWJzeF8KK19mYWJzeF86CisJZmFicy54CQkweDQoJXNwKSwlZnAwCQkjIGZhYnMgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZm5lZ3NfCitfZm5lZ3NfOgorCWZuZWcucwkJMHg0KCVzcCksJWZwMAkJIyBmbmVnIHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZuZWdkXworX2ZuZWdkXzoKKwlmbmVnLmQJCTB4NCglc3ApLCVmcDAJCSMgZm5lZyB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mbmVneF8KK19mbmVneF86CisJZm5lZy54CQkweDQoJXNwKSwlZnAwCQkjIGZuZWcgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZnNxcnRzXworX2ZzcXJ0c186CisJZnNxcnQucwkJMHg0KCVzcCksJWZwMAkJIyBmc3FydCB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mc3FydGRfCitfZnNxcnRkXzoKKwlmc3FydC5kCQkweDQoJXNwKSwlZnAwCQkjIGZzcXJ0IHcvIGRibCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZzcXJ0eF8KK19mc3FydHhfOgorCWZzcXJ0LngJCTB4NCglc3ApLCVmcDAJCSMgZnNxcnQgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmludHNfCitfZmludHNfOgorCWZpbnQucwkJMHg0KCVzcCksJWZwMAkJIyBmaW50IHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZpbnRkXworX2ZpbnRkXzoKKwlmaW50LmQJCTB4NCglc3ApLCVmcDAJCSMgZmludCB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9maW50eF8KK19maW50eF86CisJZmludC54CQkweDQoJXNwKSwlZnAwCQkjIGZpbnQgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmludHJ6c18KK19maW50cnpzXzoKKwlmaW50cnoucwkweDQoJXNwKSwlZnAwCQkjIGZpbnRyeiB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9maW50cnpkXworX2ZpbnRyemRfOgorCWZpbnRyei5kCTB4NCglc3ApLCVmcDAJCSMgZmludHJ4IHcvIGRibCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZpbnRyenhfCitfZmludHJ6eF86CisJZmludHJ6LngJMHg0KCVzcCksJWZwMAkJIyBmaW50cnogdy8gZXh0IHNyYworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzcmNfemVybygpOiBSZXR1cm4gc2lnbmVkIHplcm8gYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNyY196ZXJvCitzcmNfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgZ2V0IHNpZ24gb2Ygc3JjIG9wZXJhbmQKKwlibWkuYgkJbGRfbXplcm8JCSMgaWYgbmVnLCBsb2FkIG5lZyB6ZXJvCisKKyMKKyMgbGRfcHplcm8oKTogcmV0dXJuIGEgcG9zaXRpdmUgemVyby4KKyMKKwlnbG9iYWwJCWxkX3B6ZXJvCitsZF9wemVybzoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBsb2FkICswCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCisKKyMgbGRfbXplcm8oKTogcmV0dXJuIGEgbmVnYXRpdmUgemVyby4KKwlnbG9iYWwJCWxkX216ZXJvCitsZF9temVybzoKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyBsb2FkIC0wCisJbW92LmIJCSZuZWdfYm1hc2srel9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdaJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZHN0X3plcm8oKTogUmV0dXJuIHNpZ25lZCB6ZXJvIGFjY29yZGluZyB0byBzaWduIG9mIGRzdCBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlkc3RfemVybworZHN0X3plcm86CisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGdldCBzaWduIG9mIGRzdCBvcGVyYW5kCisJYm1pLmIJCWxkX216ZXJvCQkjIGlmIG5lZywgbG9hZCBuZWcgemVybworCWJyYS5iCQlsZF9wemVybwkJIyBsb2FkIHBvc2l0aXZlIHplcm8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzcmNfaW5mKCk6IFJldHVybiBzaWduZWQgaW5mIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcmNfaW5mCitzcmNfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBnZXQgc2lnbiBvZiBzcmMgb3BlcmFuZAorCWJtaS5iCQlsZF9taW5mCQkJIyBpZiBuZWdhdGl2ZSBicmFuY2gKKworIworIyBsZF9waW5mKCk6IHJldHVybiBhIHBvc2l0aXZlIGluZmluaXR5LgorIworCWdsb2JhbAkJbGRfcGluZgorbGRfcGluZjoKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyBsb2FkICtJTkYKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0lORicgY2NvZGUgYml0CisJcnRzCisKKyMKKyMgbGRfbWluZigpOnJldHVybiBhIG5lZ2F0aXZlIGluZmluaXR5LgorIworCWdsb2JhbAkJbGRfbWluZgorbGRfbWluZjoKKwlmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyBsb2FkIC1JTkYKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRzdF9pbmYoKTogUmV0dXJuIHNpZ25lZCBpbmYgYWNjb3JkaW5nIHRvIHNpZ24gb2YgZHN0IG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCWRzdF9pbmYKK2RzdF9pbmY6CisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGdldCBzaWduIG9mIGRzdCBvcGVyYW5kCisJYm1pLmIJCWxkX21pbmYJCQkjIGlmIG5lZ2F0aXZlIGJyYW5jaAorCWJyYS5iCQlsZF9waW5mCisKKwlnbG9iYWwJCXN6cl9pbmYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN6cl9pbmYoKTogUmV0dXJuICtaRVJPIGZvciBhIG5lZ2F0aXZlIHNyYyBvcGVyYW5kIG9yCQkjCisjCSAgICAgICAgICAgICtJTkYgZm9yIGEgcG9zaXRpdmUgc3JjIG9wZXJhbmQuCQkjCisjCSAgICAgUm91dGluZSB1c2VkIGZvciBmZXRveCwgZnR3b3RveCwgYW5kIGZ0ZW50b3guCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzenJfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS5iCQlsZF9wemVybworCWJyYS5iCQlsZF9waW5mCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc29wcl9pbmYoKTogUmV0dXJuICtJTkYgZm9yIGEgcG9zaXRpdmUgc3JjIG9wZXJhbmQgb3IJCQkjCisjCSAgICAgIGp1bXAgdG8gb3BlcmFuZCBlcnJvciByb3V0aW5lIGZvciBhIG5lZ2F0aXZlIHNyYyBvcGVyYW5kLgkjCisjCSAgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmxvZ24sIGZsb2ducDEsIGZsb2cxMCwgYW5kIGZsb2cyLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzb3ByX2luZgorc29wcl9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLncJCXRfb3BlcnIKKwlicmEuYgkJbGRfcGluZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzZXRveG0xaSgpOiBSZXR1cm4gbWludXMgb25lIGZvciBhIG5lZ2F0aXZlIHNyYyBvcGVyYW5kIG9yCSMKKyMJICAgICAgcG9zaXRpdmUgaW5maW5pdHkgZm9yIGEgcG9zaXRpdmUgc3JjIG9wZXJhbmQuCSMKKyMJICAgICAgUm91dGluZSB1c2VkIGZvciBmZXRveG0xLgkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc2V0b3htMWkKK3NldG94bTFpOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS5iCQlsZF9tb25lCisJYnJhLmIJCWxkX3BpbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzcmNfb25lKCk6IFJldHVybiBzaWduZWQgb25lIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcmNfb25lCitzcmNfb25lOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS5iCQlsZF9tb25lCisKKyMKKyMgbGRfcG9uZSgpOiByZXR1cm4gcG9zaXRpdmUgb25lLgorIworCWdsb2JhbAkJbGRfcG9uZQorbGRfcG9uZToKKwlmbW92LnMJCSYweDNmODAwMDAwLCVmcDAJIyBsb2FkICsxCisJY2xyLmIJCUZQU1JfQ0MoJWE2KQorCXJ0cworCisjCisjIGxkX21vbmUoKTogcmV0dXJuIG5lZ2F0aXZlIG9uZS4KKyMKKwlnbG9iYWwJCWxkX21vbmUKK2xkX21vbmU6CisJZm1vdi5zCQkmMHhiZjgwMDAwMCwlZnAwCSMgbG9hZCAtMQorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCisKK3BwaWJ5MjoJbG9uZwkJMHgzZmZmMDAwMCwgMHhjOTBmZGFhMiwgMHgyMTY4YzIzNQorbXBpYnkyOglsb25nCQkweGJmZmYwMDAwLCAweGM5MGZkYWEyLCAweDIxNjhjMjM1CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNwaV8yKCk6IFJldHVybiBzaWduZWQgUEkvMiBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNwaV8yCitzcGlfMjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfbXBpMgorCisjCisjIGxkX3BwaTIoKTogcmV0dXJuIHBvc2l0aXZlIFBJLzIuCisjCisJZ2xvYmFsCQlsZF9wcGkyCitsZF9wcGkyOgorCWZtb3YubAkJJWQwLCVmcGNyCisJZm1vdi54CQlwcGlieTIoJXBjKSwlZnAwCSMgbG9hZCArcGkvMgorCWJyYS53CQl0X3BpbngyCQkJIyBzZXQgSU5FWDIKKworIworIyBsZF9tcGkyKCk6IHJldHVybiBuZWdhdGl2ZSBQSS8yLgorIworCWdsb2JhbAkJbGRfbXBpMgorbGRfbXBpMjoKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtb3YueAkJbXBpYnkyKCVwYyksJWZwMAkjIGxvYWQgLXBpLzIKKwlicmEudwkJdF9taW54MgkJCSMgc2V0IElORVgyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIGZvbGxvd2luZyByb3V0aW5lcyBnaXZlIHN1cHBvcnQgZm9yIGZzaW5jb3MuICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBzc2luY29zeigpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBaRVJPLCBzdG9yZSBhIG9uZSBpbiB0aGUKKyMJICAgICAgY29zaW5lIHJlZ2lzdGVyIGFuZCByZXR1cm4gYSBaRVJPIGluIGZwMCB3LyB0aGUgc2FtZSBzaWduCisjCSAgICAgIGFzIHRoZSBzcmMgb3BlcmFuZC4KKyMKKwlnbG9iYWwJCXNzaW5jb3N6Citzc2luY29zejoKKwlmbW92LnMJCSYweDNmODAwMDAwLCVmcDEKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgdGVzdCBzaWduCisJYnBsLmIJCXNpbmNvc3pwCisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIHNpbiByZXN1bHQgaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKK3NpbmNvc3pwOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiBzaW4gcmVzdWx0IGluIGZwMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBzc2luY29zaSgpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBJTkYsIHN0b3JlIGEgUU5BTiBpbiB0aGUgY29zaW5lCisjCSAgICAgIHJlZ2lzdGVyIGFuZCBqdW1wIHRvIHRoZSBvcGVyYW5kIGVycm9yIHJvdXRpbmUgZm9yIG5lZ2F0aXZlCisjCSAgICAgIHNyYyBvcGVyYW5kcy4KKyMKKwlnbG9iYWwJCXNzaW5jb3NpCitzc2luY29zaToKKwlmbW92LngJCXFuYW4oJXBjKSwlZnAxCQkjIGxvYWQgTkFOCisJYnJhLncJCXRfb3BlcnIKKworIworIyBzc2luY29zcW5hbigpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBhIFFOQU4sIHN0b3JlIHRoZSBRTkFOIGluIHRoZSBjb3NpbmUKKyMJCSByZWdpc3RlciBhbmQgYnJhbmNoIHRvIHRoZSBzcmMgUU5BTiByb3V0aW5lLgorIworCWdsb2JhbAkJc3NpbmNvc3FuYW4KK3NzaW5jb3NxbmFuOgorCWZtb3YueAkJTE9DQUxfRVgoJWEwKSwlZnAxCisJYnJhLncJCXNyY19xbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzbW9kX3NkbnJtCisJZ2xvYmFsCQlzbW9kX3Nub3JtCitzbW9kX3NkbnJtOgorc21vZF9zbm9ybToKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzbW9kCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEudwkJc21vZF96cm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNtb2QKKwlicmEubAkJZHN0X3FuYW4KKworCWdsb2JhbAkJc21vZF9zemVybworc21vZF9zemVybzoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJdF9vcGVycgorCWJyYS5sCQlkc3RfcW5hbgorCisJZ2xvYmFsCQlzbW9kX3NpbmYKK3Ntb2Rfc2luZjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzbW9kX2ZwbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNtb2RfenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbW9kX2ZwbgorCWJyYS5sCQlkc3RfcW5hbgorCitzbW9kX3pybzoKK3NyZW1fenJvOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEJCSMgZ2V0IHNyYyBzaWduCisJbW92LmIJCURTVF9FWCglYTEpLCVkMAkJIyBnZXQgZHN0IHNpZ24KKwllb3IuYgkJJWQwLCVkMQkJCSMgZ2V0IHFieXRlIHNpZ24KKwlhbmRpLmIJCSYweDgwLCVkMQorCW1vdi5iCQklZDEsRlBTUl9RQllURSglYTYpCisJdHN0LmIJCSVkMAorCWJwbC53CQlsZF9wemVybworCWJyYS53CQlsZF9temVybworCitzbW9kX2ZwbjoKK3NyZW1fZnBuOgorCWNsci5iCQlGUFNSX1FCWVRFKCVhNikKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEJCSMgZ2V0IHNyYyBzaWduCisJbW92LmIJCURTVF9FWCglYTEpLCVkMAkJIyBnZXQgZHN0IHNpZ24KKwllb3IuYgkJJWQwLCVkMQkJCSMgZ2V0IHFieXRlIHNpZ24KKwlhbmRpLmIJCSYweDgwLCVkMQorCW1vdi5iCQklZDEsRlBTUl9RQllURSglYTYpCisJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQorCWJuZS5iCQlzbW9kX25ybQorCWxlYQkJRFNUKCVhMSksJWEwCisJbW92LmwJCSglc3ApKywlZDAKKwlicmEJCXRfcmVzZG5ybQorc21vZF9ucm06CisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbW92LngJCURTVCglYTEpLCVmcDAKKwl0c3QuYgkJRFNUX0VYKCVhMSkKKwlibWkuYgkJc21vZF9ucm1fbmVnCisJcnRzCisKK3Ntb2RfbnJtX25lZzoKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNvZGUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JlbV9zbm9ybQorCWdsb2JhbAkJc3JlbV9zZG5ybQorc3JlbV9zZG5ybToKK3NyZW1fc25vcm06CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc3JlbQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLncJCXNyZW1fenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzcmVtCisJYnJhLmwJCWRzdF9xbmFuCisKKwlnbG9iYWwJCXNyZW1fc3plcm8KK3NyZW1fc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXRfb3BlcnIKKwlicmEubAkJZHN0X3FuYW4KKworCWdsb2JhbAkJc3JlbV9zaW5mCitzcmVtX3NpbmY6CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEudwkJc3JlbV9mcG4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS53CQlzcmVtX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3JlbV9mcG4KKwlicmEubAkJZHN0X3FuYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzc2NhbGVfc25vcm0KKwlnbG9iYWwJCXNzY2FsZV9zZG5ybQorc3NjYWxlX3Nub3JtOgorc3NjYWxlX3NkbnJtOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNzY2FsZQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWRzdF96ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlkc3RfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2NhbGUKKwlicmEubAkJZHN0X3FuYW4KKworCWdsb2JhbAkJc3NjYWxlX3N6ZXJvCitzc2NhbGVfc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc3NjYWxlCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJZHN0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCWRzdF9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNzY2FsZQorCWJyYS5sCQlkc3RfcW5hbgorCisJZ2xvYmFsCQlzc2NhbGVfc2luZgorc3NjYWxlX3NpbmY6CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCXRfb3BlcnIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNvcF9zcW5hbgorc29wX3NxbmFuOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwlicmEubAkJc3JjX3FuYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBub3JtKCk6IG5vcm1hbGl6ZSB0aGUgbWFudGlzc2Egb2YgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0LiB0aGUJIworIwkgIGlucHV0IG9wZXJhbmQgc2hvdWxkIG5vdCBiZSBub3JtYWxpemVkIGFscmVhZHkuCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciBmcCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBub3JtYWxpemUJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQwID0gbnVtYmVyIG9mIGJpdCBwb3NpdGlvbnMgdGhlIG1hbnRpc3NhIHdhcyBzaGlmdGVkCQkjCisjCWEwID0gdGhlIGlucHV0IG9wZXJhbmQncyBtYW50aXNzYSBpcyBub3JtYWxpemVkOyB0aGUgZXhwb25lbnQJIworIwkgICAgIGlzIHVuY2hhbmdlZC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJbm9ybQorbm9ybToKKwltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHNvbWUgdGVtcCByZWdzCisJbW92LmwJCSVkMywgLSglc3ApCisKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgbG9hZCBoaShtYW50aXNzYSkKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQxCSMgbG9hZCBsbyhtYW50aXNzYSkKKworCWJmZmZvCQklZDB7JjA6JjMyfSwgJWQyCSMgaG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0PworCWJlcS5iCQlub3JtX2xvCQkJIyBoaShtYW4pIGlzIGFsbCB6ZXJvZXMhCisKK25vcm1faGk6CisJbHNsLmwJCSVkMiwgJWQwCQkjIGxlZnQgc2hpZnQgaGkobWFuKQorCWJmZXh0dQkJJWQxeyYwOiVkMn0sICVkMwkjIGV4dHJhY3QgbG8gYml0cworCisJb3IubAkJJWQzLCAlZDAJCSMgY3JlYXRlIGhpKG1hbikKKwlsc2wubAkJJWQyLCAlZDEJCSMgY3JlYXRlIGxvKG1hbikKKworCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgaGkobWFuKQorCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgbG8obWFuKQorCisJbW92LmwJCSVkMiwgJWQwCQkjIHJldHVybiBzaGlmdCBhbW91bnQKKworCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncworCW1vdi5sCQkoJXNwKSssICVkMgorCisJcnRzCisKK25vcm1fbG86CisJYmZmZm8JCSVkMXsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/CisJbHNsLmwJCSVkMiwgJWQxCQkjIHNoaWZ0IGxvKG1hbikKKwlhZGQubAkJJjMyLCAlZDIJCSMgYWRkIDMyIHRvIHNoZnQgYW1vdW50CisKKwltb3YubAkJJWQxLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgaGkobWFuKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgaXMgbm93IHplcm8KKworCW1vdi5sCQklZDIsICVkMAkJIyByZXR1cm4gc2hpZnQgYW1vdW50CisKKwltb3YubAkJKCVzcCkrLCAlZDMJCSMgcmVzdG9yZSB0ZW1wIHJlZ3MKKwltb3YubAkJKCVzcCkrLCAlZDIKKworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHVubm9ybV9maXgoKTogLSBjaGFuZ2VzIGFuIFVOTk9STSB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKKyMJCS0gcmV0dXJucyBjb3JyZXNwb25kaW5nIG9wdHlwZSB0YWcJCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl1bm5vcm1fZml4KCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIHVubm9ybWFsaXplZCBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlkMCA9IG9wdHlwZSB0YWcgLSBpcyBjb3JyZWN0ZWQgdG8gb25lIG9mIE5PUk0sIERFTk9STSwgb3IgWkVSTwkjCisjCWEwID0gaW5wdXQgb3BlcmFuZCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gYSBub3JtLCBkZW5vcm0sIG9yCSMKKyMJICAgICB6ZXJvOyBib3RoIHRoZSBleHBvbmVudCBhbmQgbWFudGlzc2EgYXJlIGNoYW5nZWQuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl1bm5vcm1fZml4Cit1bm5vcm1fZml4OgorCWJmZmZvCQlGVEVNUF9ISSglYTApeyYwOiYzMn0sICVkMCAjIGhvdyBtYW55IHNoaWZ0cyBhcmUgbmVlZGVkPworCWJuZS5iCQl1bm5vcm1fc2hpZnQJCSMgaGkobWFuKSBpcyBub3QgYWxsIHplcm9lcworCisjCisjIGhpKG1hbikgaXMgYWxsIHplcm9lcyBzbyBzZWUgaWYgYW55IGJpdHMgaW4gbG8obWFuKSBhcmUgc2V0CisjCit1bm5vcm1fY2hrX2xvOgorCWJmZmZvCQlGVEVNUF9MTyglYTApeyYwOiYzMn0sICVkMCAjIGlzIG9wZXJhbmQgcmVhbGx5IGEgemVybz8KKwliZXEudwkJdW5ub3JtX3plcm8JCSMgeWVzCisKKwlhZGQudwkJJjMyLCAlZDAJCSMgbm87IGZpeCBzaGlmdCBkaXN0YW5jZQorCisjCisjIGQwID0gIyBzaGlmdHMgbmVlZGVkIGZvciBjb21wbGV0ZSBub3JtYWxpemF0aW9uCisjCit1bm5vcm1fc2hpZnQ6CisJY2xyLmwJCSVkMQkJCSMgY2xlYXIgdG9wIHdvcmQKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZC53CQkmMHg3ZmZmLCAlZDEJCSMgc3RyaXAgb2ZmIHNnbgorCisJY21wLncJCSVkMCwgJWQxCQkjIHdpbGwgZGVub3JtIHB1c2ggZXhwIDwgMD8KKwliZ3QuYgkJdW5ub3JtX25ybV96ZXJvCQkjIHllczsgZGVub3JtIG9ubHkgdW50aWwgZXhwID0gMAorCisjCisjIGV4cG9uZW50IHdvdWxkIG5vdCBnbyA8IDAuIHRoZXJlZm9yZSwgbnVtYmVyIHN0YXlzIG5vcm1hbGl6ZWQKKyMKKwlzdWIudwkJJWQwLCAlZDEJCSMgc2hpZnQgZXhwb25lbnQgdmFsdWUKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgbG9hZCBvbGQgZXhwb25lbnQKKwlhbmQudwkJJjB4ODAwMCwgJWQwCQkjIHNhdmUgb2xkIHNpZ24KKwlvci53CQklZDAsICVkMQkJIyB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgVU5OT1JNCisKKwltb3YuYgkJJk5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyBleHBvbmVudCB3b3VsZCBnbyA8IDAsIHNvIG9ubHkgZGVub3JtYWxpemUgdW50aWwgZXhwID0gMAorIwordW5ub3JtX25ybV96ZXJvOgorCWNtcC5iCQklZDEsICYzMgkJIyBpcyBleHAgPD0gMzI/CisJYmd0LmIJCXVubm9ybV9ucm1femVyb19scmcJIyBubzsgZ28gaGFuZGxlIGxhcmdlIGV4cG9uZW50CisKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQxOiYzMn0sICVkMCAjIGV4dHJhY3QgbmV3IGhpKG1hbikKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc2F2ZSBuZXcgaGkobWFuKQorCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMAkjIGZldGNoIG9sZCBsbyhtYW4pCisJbHNsLmwJCSVkMSwgJWQwCQkjIGV4dHJhY3QgbmV3IGxvKG1hbikKKwltb3YubAkJJWQwLCBGVEVNUF9MTyglYTApCSMgc2F2ZSBuZXcgbG8obWFuKQorCisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAorCisJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyBvbmx5IG1hbnRpc3NhIGJpdHMgc2V0IGFyZSBpbiBsbyhtYW4pCisjCit1bm5vcm1fbnJtX3plcm9fbHJnOgorCXN1Yi53CQkmMzIsICVkMQkJIyBhZGp1c3Qgc2hmdCBhbXQgYnkgMzIKKworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQorCWxzbC5sCQklZDEsICVkMAkJIyBsZWZ0IHNoaWZ0IGxvKG1hbikKKworCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgaGkobWFuKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgPSAwCisKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCisKKwltb3YuYgkJJkRFTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIHdob2xlIG1hbnRpc3NhIGlzIHplcm8gc28gdGhpcyBVTk5PUk0gaXMgYWN0dWFsbHkgYSB6ZXJvCisjCit1bm5vcm1femVybzoKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIGZvcmNlIGV4cG9uZW50IHRvIHplcm8KKworCW1vdi5iCQkmWkVSTywgJWQwCQkjIGZpeCBvcHR5cGUgdGFnCisJcnRzCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Zwc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTk3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Zwc3AuUwpAQCAtMCwwICsxLDI0Nzg1IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjCisjIGZyZWFsLnM6CisjCVRoaXMgZmlsZSBpcyBhcHBlbmRlZCB0byB0aGUgdG9wIG9mIHRoZSAwNjBGUFNQIHBhY2thZ2UKKyMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCisjIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkCisjIGFmdGVyIF8wNjBGUFNQX1RBQkxFLgorIwlBbHNvLCBzdWJyb3V0aW5lIHN0dWJzIGV4aXN0IGluIHRoaXMgZmlsZSAoX2Zwc3BfZG9uZSBmb3IKKyMgZXhhbXBsZSkgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgRlBTUCBwYWNrYWdlIGl0c2VsZiBpbiBvcmRlcgorIyB0byBjYWxsIGEgZ2l2ZW4gcm91dGluZS4gVGhlIHN0dWIgcm91dGluZSBhY3R1YWxseSBwZXJmb3JtcyB0aGUKKyMgY2FsbG91dC4gVGhlIEZQU1AgY29kZSBkb2VzIGEgImJzciIgdG8gdGhlIHN0dWIgcm91dGluZS4gVGhpcworIyBleHRyYSBsYXllciBvZiBoaWVyYXJjaHkgYWRkcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBwZW5hbHR5IGJ1dAorIyBpdCBtYWtlcyB0aGUgRlBTUCBjb2RlIGVhc2llciB0byByZWFkIGFuZCBtb3JlIG1haW5hdGluYWJsZS4KKyMKKworc2V0CV9vZmZfYnN1biwJMHgwMAorc2V0CV9vZmZfc25hbiwJMHgwNAorc2V0CV9vZmZfb3BlcnIsCTB4MDgKK3NldAlfb2ZmX292ZmwsCTB4MGMKK3NldAlfb2ZmX3VuZmwsCTB4MTAKK3NldAlfb2ZmX2R6LAkweDE0CitzZXQJX29mZl9pbmV4LAkweDE4CitzZXQJX29mZl9mbGluZSwJMHgxYworc2V0CV9vZmZfZnB1X2RpcywJMHgyMAorc2V0CV9vZmZfdHJhcCwJMHgyNAorc2V0CV9vZmZfdHJhY2UsCTB4MjgKK3NldAlfb2ZmX2FjY2VzcywJMHgyYworc2V0CV9vZmZfZG9uZSwJMHgzMAorCitzZXQJX29mZl9pbXIsCTB4NDAKK3NldAlfb2ZmX2RtciwJMHg0NAorc2V0CV9vZmZfZG13LAkweDQ4CitzZXQJX29mZl9pcncsCTB4NGMKK3NldAlfb2ZmX2lybCwJMHg1MAorc2V0CV9vZmZfZHJiLAkweDU0CitzZXQJX29mZl9kcncsCTB4NTgKK3NldAlfb2ZmX2RybCwJMHg1Yworc2V0CV9vZmZfZHdiLAkweDYwCitzZXQJX29mZl9kd3csCTB4NjQKK3NldAlfb2ZmX2R3bCwJMHg2OAorCitfMDYwRlBTUF9UQUJMRToKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSGVyZSdzIHRoZSB0YWJsZSBvZiBFTlRSWSBQT0lOVFMgZm9yIHRob3NlIGxpbmtpbmcgdGhlIHBhY2thZ2UuCisJYnJhLmwJCV9mcHNwX3NuYW4KKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX29wZXJyCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9vdmZsCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF91bmZsCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9kegorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfaW5leAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfZmxpbmUKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX3Vuc3VwcAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfZWZmYWRkCisJc2hvcnQJCTB4MDAwMAorCisJc3BhY2UJCTU2CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zwc3BfZG9uZQorX2Zwc3BfZG9uZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RvbmUsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX292ZmwKK19yZWFsX292Zmw6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9vdmZsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF91bmZsCitfcmVhbF91bmZsOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdW5mbCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfaW5leAorX3JlYWxfaW5leDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2luZXgsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2JzdW4KK19yZWFsX2JzdW46CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9ic3VuLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9vcGVycgorX3JlYWxfb3BlcnI6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9vcGVyciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfc25hbgorX3JlYWxfc25hbjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3NuYW4sJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2R6CitfcmVhbF9kejoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R6LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9mbGluZQorX3JlYWxfZmxpbmU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9mbGluZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfZnB1X2Rpc2FibGVkCitfcmVhbF9mcHVfZGlzYWJsZWQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9mcHVfZGlzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF90cmFwCitfcmVhbF90cmFwOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdHJhcCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdHJhY2UKK19yZWFsX3RyYWNlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdHJhY2UsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2FjY2VzcworX3JlYWxfYWNjZXNzOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfYWNjZXNzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2ltZW1fcmVhZAorX2ltZW1fcmVhZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ltciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZAorX2RtZW1fcmVhZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RtciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGUKK19kbWVtX3dyaXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG13LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfaW1lbV9yZWFkX3dvcmQKK19pbWVtX3JlYWRfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2lydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2ltZW1fcmVhZF9sb25nCitfaW1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pcmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfYnl0ZQorX2RtZW1fcmVhZF9ieXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJiLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX3dvcmQKK19kbWVtX3JlYWRfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF9sb25nCitfZG1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2J5dGUKK19kbWVtX3dyaXRlX2J5dGU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2IsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX3dvcmQKK19kbWVtX3dyaXRlX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd3csJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2xvbmcKK19kbWVtX3dyaXRlX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2wsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2V0IG9mIGRlZmluZSBzdGF0ZW1lbnRzIGZvciBjb25zdGFudHMKKyMgaW4gb3JkZXIgdG8gcHJvbW90ZSByZWFkYWJpbGl0eSB3aXRoaW4gdGhlIGNvcmVjb2RlIGl0c2VsZi4KKyMKKworc2V0IExPQ0FMX1NJWkUsCQkxOTIJCQkjIHN0YWNrIGZyYW1lIHNpemUoYnl0ZXMpCitzZXQgTFYsCQkJLUxPQ0FMX1NJWkUJCSMgc3RhY2sgb2Zmc2V0CisKK3NldCBFWENfU1IsCQkweDQJCQkjIHN0YWNrIHN0YXR1cyByZWdpc3Rlcgorc2V0IEVYQ19QQywJCTB4NgkJCSMgc3RhY2sgcGMKK3NldCBFWENfVk9GRiwJCTB4YQkJCSMgc3RhY2tlZCB2ZWN0b3Igb2Zmc2V0CitzZXQgRVhDX0VBLAkJMHhjCQkJIyBzdGFja2VkIDxlYT4KKworc2V0IEVYQ19GUCwJCTB4MAkJCSMgZnJhbWUgcG9pbnRlcgorCitzZXQgRVhDX0FSRUdTLAkJLTY4CQkJIyBvZmZzZXQgb2YgYWxsIGFkZHJlc3MgcmVncworc2V0IEVYQ19EUkVHUywJCS0xMDAJCQkjIG9mZnNldCBvZiBhbGwgZGF0YSByZWdzCitzZXQgRVhDX0ZQUkVHUywJCS0zNgkJCSMgb2Zmc2V0IG9mIGFsbCBmcCByZWdzCisKK3NldCBFWENfQTcsCQlFWENfQVJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE3CitzZXQgT0xEX0E3LAkJRVhDX0FSRUdTKyg2KjQpCQkjIGV4dHJhIGNvcHkgb2Ygc2F2ZWQgYTcKK3NldCBFWENfQTYsCQlFWENfQVJFR1MrKDYqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE2CitzZXQgRVhDX0E1LAkJRVhDX0FSRUdTKyg1KjQpCitzZXQgRVhDX0E0LAkJRVhDX0FSRUdTKyg0KjQpCitzZXQgRVhDX0EzLAkJRVhDX0FSRUdTKygzKjQpCitzZXQgRVhDX0EyLAkJRVhDX0FSRUdTKygyKjQpCitzZXQgRVhDX0ExLAkJRVhDX0FSRUdTKygxKjQpCitzZXQgRVhDX0EwLAkJRVhDX0FSRUdTKygwKjQpCitzZXQgRVhDX0Q3LAkJRVhDX0RSRUdTKyg3KjQpCitzZXQgRVhDX0Q2LAkJRVhDX0RSRUdTKyg2KjQpCitzZXQgRVhDX0Q1LAkJRVhDX0RSRUdTKyg1KjQpCitzZXQgRVhDX0Q0LAkJRVhDX0RSRUdTKyg0KjQpCitzZXQgRVhDX0QzLAkJRVhDX0RSRUdTKygzKjQpCitzZXQgRVhDX0QyLAkJRVhDX0RSRUdTKygyKjQpCitzZXQgRVhDX0QxLAkJRVhDX0RSRUdTKygxKjQpCitzZXQgRVhDX0QwLAkJRVhDX0RSRUdTKygwKjQpCisKK3NldCBFWENfRlAwLAkJRVhDX0ZQUkVHUysoMCoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAwCitzZXQgRVhDX0ZQMSwJCUVYQ19GUFJFR1MrKDEqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMQorc2V0IEVYQ19GUDIsCQlFWENfRlBSRUdTKygyKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDIgKG5vdCB1c2VkKQorCitzZXQgRlBfU0NSMSwJCUxWKzgwCQkJIyBmcCBzY3JhdGNoIDEKK3NldCBGUF9TQ1IxX0VYLAkJRlBfU0NSMSswCitzZXQgRlBfU0NSMV9TR04sCUZQX1NDUjErMgorc2V0IEZQX1NDUjFfSEksCQlGUF9TQ1IxKzQKK3NldCBGUF9TQ1IxX0xPLAkJRlBfU0NSMSs4CisKK3NldCBGUF9TQ1IwLAkJTFYrNjgJCQkjIGZwIHNjcmF0Y2ggMAorc2V0IEZQX1NDUjBfRVgsCQlGUF9TQ1IwKzAKK3NldCBGUF9TQ1IwX1NHTiwJRlBfU0NSMCsyCitzZXQgRlBfU0NSMF9ISSwJCUZQX1NDUjArNAorc2V0IEZQX1NDUjBfTE8sCQlGUF9TQ1IwKzgKKworc2V0IEZQX0RTVCwJCUxWKzU2CQkJIyBmcCBkZXN0aW5hdGlvbiBvcGVyYW5kCitzZXQgRlBfRFNUX0VYLAkJRlBfRFNUKzAKK3NldCBGUF9EU1RfU0dOLAkJRlBfRFNUKzIKK3NldCBGUF9EU1RfSEksCQlGUF9EU1QrNAorc2V0IEZQX0RTVF9MTywJCUZQX0RTVCs4CisKK3NldCBGUF9TUkMsCQlMVis0NAkJCSMgZnAgc291cmNlIG9wZXJhbmQKK3NldCBGUF9TUkNfRVgsCQlGUF9TUkMrMAorc2V0IEZQX1NSQ19TR04sCQlGUF9TUkMrMgorc2V0IEZQX1NSQ19ISSwJCUZQX1NSQys0CitzZXQgRlBfU1JDX0xPLAkJRlBfU1JDKzgKKworc2V0IFVTRVJfRlBJQVIsCQlMVis0MAkJCSMgRlAgaW5zdHIgYWRkcmVzcyByZWdpc3RlcgorCitzZXQgVVNFUl9GUFNSLAkJTFYrMzYJCQkjIEZQIHN0YXR1cyByZWdpc3Rlcgorc2V0IEZQU1JfQ0MsCQlVU0VSX0ZQU1IrMAkJIyBGUFNSIGNvbmRpdGlvbiBjb2Rlcworc2V0IEZQU1JfUUJZVEUsCQlVU0VSX0ZQU1IrMQkJIyBGUFNSIHFvdXRpZW50IGJ5dGUKK3NldCBGUFNSX0VYQ0VQVCwJVVNFUl9GUFNSKzIJCSMgRlBTUiBleGNlcHRpb24gc3RhdHVzIGJ5dGUKK3NldCBGUFNSX0FFWENFUFQsCVVTRVJfRlBTUiszCQkjIEZQU1IgYWNjcnVlZCBleGNlcHRpb24gYnl0ZQorCitzZXQgVVNFUl9GUENSLAkJTFYrMzIJCQkjIEZQIGNvbnRyb2wgcmVnaXN0ZXIKK3NldCBGUENSX0VOQUJMRSwJVVNFUl9GUENSKzIJCSMgRlBDUiBleGNlcHRpb24gZW5hYmxlCitzZXQgRlBDUl9NT0RFLAkJVVNFUl9GUENSKzMJCSMgRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKKworc2V0IExfU0NSMywJCUxWKzI4CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMworc2V0IExfU0NSMiwJCUxWKzI0CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMgorc2V0IExfU0NSMSwJCUxWKzIwCQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMQorCitzZXQgU1RPUkVfRkxHLAkJTFYrMTkJCQkjIGZsYWc6IG9wZXJhbmQgc3RvcmUgKGllLiBub3QgZmNtcC9mdHN0KQorCitzZXQgRVhDX1RFTVAyLAkJTFYrMjQJCQkjIHRlbXBvcmFyeSBzcGFjZQorc2V0IEVYQ19URU1QLAkJTFYrMTYJCQkjIHRlbXBvcmFyeSBzcGFjZQorCitzZXQgRFRBRywJCUxWKzE1CQkJIyBkZXN0aW5hdGlvbiBvcGVyYW5kIHR5cGUKK3NldCBTVEFHLAkJTFYrMTQJCQkjIHNvdXJjZSBvcGVyYW5kIHR5cGUKKworc2V0IFNQQ09ORF9GTEcsCQlMVisxMAkJCSMgZmxhZzogc3BlY2lhbCBjYXNlIChzZWUgYmVsb3cpCisKK3NldCBFWENfQ0MsCQlMVis4CQkJIyBzYXZlZCBjb25kaXRpb24gY29kZXMKK3NldCBFWENfRVhUV1BUUiwJTFYrNAkJCSMgc2F2ZWQgY3VycmVudCBQQyAoYWN0aXZlKQorc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19DTURSRUcsCQlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19PUFdPUkQsCQlMViswCQkJIyBzYXZlZCBvcGVyYXRpb24gd29yZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEhlbHBmdWwgbWFjcm9zCisKK3NldCBGVEVNUCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgRlRFTVBfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBGVEVNUF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRlRFTVBfSEksCQk0CitzZXQgRlRFTVBfTE8sCQk4CitzZXQgRlRFTVBfR1JTLAkJMTIKKworc2V0IExPQ0FMLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBMT0NBTF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IExPQ0FMX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBMT0NBTF9ISSwJCTQKK3NldCBMT0NBTF9MTywJCTgKK3NldCBMT0NBTF9HUlMsCQkxMgorCitzZXQgRFNULAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBEU1RfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBEU1RfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRFNUX0xPLAkJOAorCitzZXQgU1JDLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBTUkNfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBTUkNfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgU1JDX0xPLAkJOAorCitzZXQgU0dMX0xPLAkJMHgzZjgxCQkJIyBtaW4gc2dsIHByZWMgZXhwb25lbnQKK3NldCBTR0xfSEksCQkweDQwN2UJCQkjIG1heCBzZ2wgcHJlYyBleHBvbmVudAorc2V0IERCTF9MTywJCTB4M2MwMQkJCSMgbWluIGRibCBwcmVjIGV4cG9uZW50CitzZXQgREJMX0hJLAkJMHg0M2ZlCQkJIyBtYXggZGJsIHByZWMgZXhwb25lbnQKK3NldCBFWFRfTE8sCQkweDAJCQkjIG1pbiBleHQgcHJlYyBleHBvbmVudAorc2V0IEVYVF9ISSwJCTB4N2ZmZQkJCSMgbWF4IGV4dCBwcmVjIGV4cG9uZW50CisKK3NldCBFWFRfQklBUywJCTB4M2ZmZgkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKK3NldCBTR0xfQklBUywJCTB4MDA3ZgkJCSMgc2luZ2xlIHByZWNpc2lvbiBiaWFzCitzZXQgREJMX0JJQVMsCQkweDAzZmYJCQkjIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCitzZXQgTk9STSwJCTB4MDAJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgWkVSTywJCTB4MDEJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgSU5GLAkJMHgwMgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBRTkFOLAkJMHgwMwkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBERU5PUk0sCQkweDA0CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFNOQU4sCQkweDA1CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFVOTk9STSwJCTB4MDYJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCisKKyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSL0ZQQ1IgYml0cyAjCisjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfYml0LAkJMHgzCQkJIyBuZWdhdGl2ZSByZXN1bHQKK3NldCB6X2JpdCwJCTB4MgkJCSMgemVybyByZXN1bHQKK3NldCBpbmZfYml0LAkJMHgxCQkJIyBpbmZpbml0ZSByZXN1bHQKK3NldCBuYW5fYml0LAkJMHgwCQkJIyBOQU4gcmVzdWx0CisKK3NldCBxX3NuX2JpdCwJCTB4NwkJCSMgc2lnbiBiaXQgb2YgcXVvdGllbnQgYnl0ZQorCitzZXQgYnN1bl9iaXQsCQk3CQkJIyBicmFuY2ggb24gdW5vcmRlcmVkCitzZXQgc25hbl9iaXQsCQk2CQkJIyBzaWduYWxsaW5nIE5BTgorc2V0IG9wZXJyX2JpdCwJCTUJCQkjIG9wZXJhbmQgZXJyb3IKK3NldCBvdmZsX2JpdCwJCTQJCQkjIG92ZXJmbG93CitzZXQgdW5mbF9iaXQsCQkzCQkJIyB1bmRlcmZsb3cKK3NldCBkel9iaXQsCQkyCQkJIyBkaXZpZGUgYnkgemVybworc2V0IGluZXgyX2JpdCwJCTEJCQkjIGluZXhhY3QgcmVzdWx0IDIKK3NldCBpbmV4MV9iaXQsCQkwCQkJIyBpbmV4YWN0IHJlc3VsdCAxCisKK3NldCBhaW9wX2JpdCwJCTcJCQkjIGFjY3J1ZWQgaW5leGFjdCBvcGVyYXRpb24gYml0CitzZXQgYW92ZmxfYml0LAkJNgkJCSMgYWNjcnVlZCBvdmVyZmxvdyBiaXQKK3NldCBhdW5mbF9iaXQsCQk1CQkJIyBhY2NydWVkIHVuZGVyZmxvdyBiaXQKK3NldCBhZHpfYml0LAkJNAkJCSMgYWNjcnVlZCBkeiBiaXQKK3NldCBhaW5leF9iaXQsCQkzCQkJIyBhY2NydWVkIGluZXhhY3QgYml0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IgaW5kaXZpZHVhbCBiaXQgbWFza3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfbWFzaywJCTB4MDgwMDAwMDAJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGx3KQorc2V0IGluZl9tYXNrLAkJMHgwMjAwMDAwMAkJIyBpbmZpbml0eSBiaXQgbWFzayAobHcpCitzZXQgel9tYXNrLAkJMHgwNDAwMDAwMAkJIyB6ZXJvIGJpdCBtYXNrIChsdykKK3NldCBuYW5fbWFzaywJCTB4MDEwMDAwMDAJCSMgbmFuIGJpdCBtYXNrIChsdykKKworc2V0IG5lZ19ibWFzaywJCTB4MDgJCQkjIG5lZ2F0aXZlIGJpdCBtYXNrIChieXRlKQorc2V0IGluZl9ibWFzaywJCTB4MDIJCQkjIGluZmluaXR5IGJpdCBtYXNrIChieXRlKQorc2V0IHpfYm1hc2ssCQkweDA0CQkJIyB6ZXJvIGJpdCBtYXNrIChieXRlKQorc2V0IG5hbl9ibWFzaywJCTB4MDEJCQkjIG5hbiBiaXQgbWFzayAoYnl0ZSkKKworc2V0IGJzdW5fbWFzaywJCTB4MDAwMDgwMDAJCSMgYnN1biBleGNlcHRpb24gbWFzaworc2V0IHNuYW5fbWFzaywJCTB4MDAwMDQwMDAJCSMgc25hbiBleGNlcHRpb24gbWFzaworc2V0IG9wZXJyX21hc2ssCQkweDAwMDAyMDAwCQkjIG9wZXJyIGV4Y2VwdGlvbiBtYXNrCitzZXQgb3ZmbF9tYXNrLAkJMHgwMDAwMTAwMAkJIyBvdmVyZmxvdyBleGNlcHRpb24gbWFzaworc2V0IHVuZmxfbWFzaywJCTB4MDAwMDA4MDAJCSMgdW5kZXJmbG93IGV4Y2VwdGlvbiBtYXNrCitzZXQgZHpfbWFzaywJCTB4MDAwMDA0MDAJCSMgZHogZXhjZXB0aW9uIG1hc2sKK3NldCBpbmV4Ml9tYXNrLAkJMHgwMDAwMDIwMAkJIyBpbmV4MiBleGNlcHRpb24gbWFzaworc2V0IGluZXgxX21hc2ssCQkweDAwMDAwMTAwCQkjIGluZXgxIGV4Y2VwdGlvbiBtYXNrCisKK3NldCBhaW9wX21hc2ssCQkweDAwMDAwMDgwCQkjIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KK3NldCBhb3ZmbF9tYXNrLAkJMHgwMDAwMDA0MAkJIyBhY2NydWVkIG92ZXJmbG93CitzZXQgYXVuZmxfbWFzaywJCTB4MDAwMDAwMjAJCSMgYWNjcnVlZCB1bmRlcmZsb3cKK3NldCBhZHpfbWFzaywJCTB4MDAwMDAwMTAJCSMgYWNjcnVlZCBkaXZpZGUgYnkgemVybworc2V0IGFpbmV4X21hc2ssCQkweDAwMDAwMDA4CQkjIGFjY3J1ZWQgaW5leGFjdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgZHppbmZfbWFzaywJCWluZl9tYXNrK2R6X21hc2srYWR6X21hc2sKK3NldCBvcG5hbl9tYXNrLAkJbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKK3NldCBuemlfbWFzaywJCTB4MDFmZmZmZmYJCSNjbGVhcnMgTiwgWiwgYW5kIEkKK3NldCB1bmZpbnhfbWFzaywJdW5mbF9tYXNrK2luZXgyX21hc2srYXVuZmxfbWFzaythaW5leF9tYXNrCitzZXQgdW5mMmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgb3ZmaW54X21hc2ssCW92ZmxfbWFzaytpbmV4Ml9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzaworc2V0IGlueDFhX21hc2ssCQlpbmV4MV9tYXNrK2FpbmV4X21hc2sKK3NldCBpbngyYV9tYXNrLAkJaW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgc25hbmlvcF9tYXNrLAluYW5fbWFzaytzbmFuX21hc2srYWlvcF9tYXNrCitzZXQgc25hbmlvcDJfbWFzaywJc25hbl9tYXNrK2Fpb3BfbWFzaworc2V0IG5hbmlvcF9tYXNrLAluYW5fbWFzaythaW9wX21hc2sKK3NldCBuZWdpbmZfbWFzaywJbmVnX21hc2sraW5mX21hc2sKK3NldCBpbmZhaW9wX21hc2ssCWluZl9tYXNrK2Fpb3BfbWFzaworc2V0IG5lZ3pfbWFzaywJCW5lZ19tYXNrK3pfbWFzaworc2V0IG9wYW9wX21hc2ssCQlvcGVycl9tYXNrK2Fpb3BfbWFzaworc2V0IHVuZmxfaW54X21hc2ssCXVuZmxfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKK3NldCBvdmZsX2lueF9tYXNrLAlvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCisKKyMjIyMjIyMjIworIyBtaXNjLiAjCisjIyMjIyMjIyMKK3NldCBybmRfc3RreV9iaXQsCTI5CQkJIyBzdGt5IGJpdCBwb3MgaW4gbG9uZ3dvcmQKKworc2V0IHNpZ25fYml0LAkJMHg3CQkJIyBzaWduIGJpdAorc2V0IHNpZ25hbl9iaXQsCQkweDYJCQkjIHNpZ25hbGxpbmcgbmFuIGJpdAorCitzZXQgc2dsX3RocmVzaCwJCTB4M2Y4MQkJCSMgbWluaW11bSBzZ2wgZXhwb25lbnQKK3NldCBkYmxfdGhyZXNoLAkJMHgzYzAxCQkJIyBtaW5pbXVtIGRibCBleHBvbmVudAorCitzZXQgeF9tb2RlLAkJMHgwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBzX21vZGUsCQkweDQJCQkjIHNpbmdsZSBwcmVjaXNpb24KK3NldCBkX21vZGUsCQkweDgJCQkjIGRvdWJsZSBwcmVjaXNpb24KKworc2V0IHJuX21vZGUsCQkweDAJCQkjIHJvdW5kLXRvLW5lYXJlc3QKK3NldCByel9tb2RlLAkJMHgxCQkJIyByb3VuZC10by16ZXJvCitzZXQgcm1fbW9kZSwJCTB4MgkJCSMgcm91bmQtdHAtbWludXMtaW5maW5pdHkKK3NldCBycF9tb2RlLAkJMHgzCQkJIyByb3VuZC10by1wbHVzLWluZmluaXR5CisKK3NldCBtYW50aXNzYWxlbiwJNjQJCQkjIGxlbmd0aCBvZiBtYW50aXNzYSBpbiBiaXRzCisKK3NldCBCWVRFLAkJMQkJCSMgbGVuKGJ5dGUpID09IDEgYnl0ZQorc2V0IFdPUkQsCQkyCQkJIyBsZW4od29yZCkgPT0gMiBieXRlcworc2V0IExPTkcsCQk0CQkJIyBsZW4obG9uZ3dvcmQpID09IDIgYnl0ZXMKKworc2V0IEJTVU5fVkVDLAkJMHhjMAkJCSMgYnN1biAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgSU5FWF9WRUMsCQkweGM0CQkJIyBpbmV4YWN0IHZlY3RvciBvZmZzZXQKK3NldCBEWl9WRUMsCQkweGM4CQkJIyBkeiAgICAgIHZlY3RvciBvZmZzZXQKK3NldCBVTkZMX1ZFQywJCTB4Y2MJCQkjIHVuZmwgICAgdmVjdG9yIG9mZnNldAorc2V0IE9QRVJSX1ZFQywJCTB4ZDAJCQkjIG9wZXJyICAgdmVjdG9yIG9mZnNldAorc2V0IE9WRkxfVkVDLAkJMHhkNAkJCSMgb3ZmbCAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgU05BTl9WRUMsCQkweGQ4CQkJIyBzbmFuICAgIHZlY3RvciBvZmZzZXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNQZWNpYWwgQ09ORGl0aW9uIEZMYUdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IGZ0cmFwY2NfZmxnLAkweDAxCQkJIyBmbGFnIGJpdDogZnRyYXBjYyBleGNlcHRpb24KK3NldCBmYnN1bl9mbGcsCQkweDAyCQkJIyBmbGFnIGJpdDogYnN1biBleGNlcHRpb24KK3NldCBtaWE3X2ZsZywJCTB4MDQJCQkjIGZsYWcgYml0OiAoYTcpKyA8ZWE+CitzZXQgbWRhN19mbGcsCQkweDA4CQkJIyBmbGFnIGJpdDogLShhNykgPGVhPgorc2V0IGZtb3ZtX2ZsZywJCTB4NDAJCQkjIGZsYWcgYml0OiBmbW92bSBpbnN0cnVjdGlvbgorc2V0IGltbWVkX2ZsZywJCTB4ODAJCQkjIGZsYWcgYml0OiAmPGRhdGE+IDxlYT4KKworc2V0IGZ0cmFwY2NfYml0LAkweDAKK3NldCBmYnN1bl9iaXQsCQkweDEKK3NldCBtaWE3X2JpdCwJCTB4Mgorc2V0IG1kYTdfYml0LAkJMHgzCitzZXQgaW1tZWRfYml0LAkJMHg3CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVFJBTlNDRU5ERU5UQUwgIkxBU1QtT1AiIEZMQUdTICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBGTVVMX09QLAkJMHgwCQkJIyBmbXVsIGluc3RyIHBlcmZvcm1lZCBsYXN0CitzZXQgRkRJVl9PUCwJCTB4MQkJCSMgZmRpdiBwZXJmb3JtZWQgbGFzdAorc2V0IEZBRERfT1AsCQkweDIJCQkjIGZhZGQgcGVyZm9ybWVkIGxhc3QKK3NldCBGTU9WX09QLAkJMHgzCQkJIyBmbW92IHBlcmZvcm1lZCBsYXN0CisKKyMjIyMjIyMjIyMjIyMKKyMgQ09OU1RBTlRTICMKKyMjIyMjIyMjIyMjIyMKK1QxOglsb25nCQkweDQwQzYyRDM4LDB4RDNENjQ2MzQJIyAxNjM4MSBMT0cyIExFQUQKK1QyOglsb25nCQkweDNENkY5MEFFLDB4QjFFNzVDQzcJIyAxNjM4MSBMT0cyIFRSQUlMCisKK1BJOglsb25nCQkweDQwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitQSUJZMjoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorCitUV09CWVBJOgorCWxvbmcJCTB4M0ZFNDVGMzAsMHg2REM5Qzg4MworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX292ZmwoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgT3ZlcmZsb3cgZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIE92ZXJmbG93IGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciAwNjBGUFNQIGV4aXQgKGFsbCB3b3JrIGRvbmUhKQkjCisjCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCisjCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiBmb3IgSW5leGFjdCBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZXhjZXB0aW9uIGNvZGUJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgT3ZmbCBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPdmVyZmxvdyBFeGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCU92ZXJmbG93IEV4Y2VwdGlvbiBkaXNhYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSAiZXhjZXB0aW9uIHByZXNlbnQiIGZsYWcgaW4gdGhlIGZzYXZlIGZyYW1lIGlzIGNsZWFyZWQJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJT24gdGhlIDA2MCwgaWYgYW4gRlAgb3ZlcmZsb3cgaXMgcHJlc2VudCBhcyB0aGUgcmVzdWx0IG9mIGFueQkjCisjIGluc3RydWN0aW9uLCB0aGUgMDYwIHdpbGwgdGFrZSBhbiBvdmVyZmxvdyBleGNlcHRpb24gd2hldGhlciB0aGUJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCisjIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIworIyBkZWZhdWx0IHJlc3VsdCBzaG91bGQgYmUgZm9yIHRoZSBvcGVyYXRpb24uIFRoaXMgZGVmYXVsdCByZXN1bHQgaXMJIworIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCisjIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKKyMgZGVub3RpbmcgdGhhdCBubyBleGNlcHRpb25hbCBjb25kaXRpb25zIGV4aXN0IHdpdGhpbiB0aGUgbWFjaGluZS4JIworIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKKyMgdGhlIGRlZmF1bHQgcmVzdWx0IChvbmx5IGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBvcGNsYXNzIDMpLiBGb3IJIworIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKKyMgX3JlYWxfb3ZmbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKKyMgY2FuIGhhbmRsZSB0aGlzIGNhc2UuCQkJCQkJCSMKKyMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiBvdmVyZmxvdyB3YXMgZGlzYWJsZWQJIworIyBidXQgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0CQkjCisjIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF9pbmV4KCkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSByZXN1bHQJIworIyB3YXMgaW5leGFjdC4JCQkJCQkJCSMKKyMJQWxzbywgaW4gdGhlIGNhc2Ugb2YgYW4gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbiB3aGVyZQkJIworIyBvdmVyZmxvdyB3YXMgZGlzYWJsZWQgYW5kIHRoZSB0cmFjZSBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMJIworIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX292ZmwKK19mcHNwX292Zmw6CisKKyMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMHg1LEVYQ19DTURSRUcoJWE2KQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZm92Zmxfb3V0CisKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCisjIHNpbmNlLCBJIGJlbGlldmUsIG9ubHkgTk9STXMgYW5kIERFTk9STXMgY2FuIGNvbWUgdGhyb3VnaCBoZXJlLAorIyBtYXliZSB3ZSBjYW4gYXZvaWQgdGhlIHN1YnJvdXRpbmUgY2FsbC4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3Bfb3ZmbCgpLiByZW1lbWJlciB0aGF0IGZjbXAsIGZ0c3QsIGFuZCBmc2luY29zCisjIHdpbGwgbmV2ZXIgdGFrZSB0aGlzIGV4Y2VwdGlvbi4KKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmb3ZmbF9leHRyYWN0CQkjIG1vbmFkaWMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZm92Zmxfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZm92Zmxfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmb3ZmbF9leHRyYWN0OgorCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9FWCglYTYpLFRSQVBfRFNUT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfSEkoJWE2KSxUUkFQX0RTVE9QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0xPKCVhNiksVFJBUF9EU1RPUF9MTyglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KKworCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworIyBtYXliZSB3ZSBjYW4gbWFrZSB0aGVzZSBlbnRyeSBwb2ludHMgT05MWSB0aGUgT1ZGTCBlbnRyeSBwb2ludHMgb2YgZWFjaCByb3V0aW5lLgorCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBlbXVsYXRlZC4gdGhlIHJlc3VsdCBpcyBpbiBmcDAuCisjIHRoZSBFWE9QLCBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQsIGlzIGluIGZwMS4KKyMgd2UgbXVzdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyMgdHJhcHMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlzdG9yZV9mcHJlZworCisjIHRoZSBleGNlcHRpb25hbCBwb3NzaWJpbGl0aWVzIHdlIGhhdmUgbGVmdCBvdXJzZWx2ZXMgd2l0aCBhcmUgT05MWSBvdmVyZmxvdworIyBhbmQgaW5leGFjdC4gYW5kLCB0aGUgaW5leGFjdCBpcyBzdWNoIHRoYXQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIHdhcyBkaXNhYmxlZAorIyBidXQgaW5leGFjdCB3YXMgZW5hYmxlZC4KKwlidHN0CQkmb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlmb3ZmbF9vdmZsX29uCisKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZm92ZmxfaW5leF9vbgorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKyMkIwlhZGQubAkJJjI0LCVzcAorCWJyYS5sCQlfZnBzcF9kb25lCisKKyMgb3ZlcmZsb3cgaXMgZW5hYmxlZCBBTkQgb3ZlcmZsb3csIG9mIGNvdXJzZSwgb2NjdXJyZWQuIHNvLCB3ZSBoYXZlIHRoZSBFWE9QCisjIGluIGZwMS4gbm93LCBzaW1wbHkganVtcCB0byBfcmVhbF9vdmZsKCkhCitmb3ZmbF9vdmZsX29uOgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfb3ZmbAorCisjIG92ZXJmbG93IG9jY3VycmVkIGJ1dCBpcyBkaXNhYmxlZC4gbWVhbndoaWxlLCBpbmV4YWN0IGlzIGVuYWJsZWQuIHRoZXJlZm9yZSwKKyMgd2UgbXVzdCBqdW1wIHRvIHJlYWxfaW5leCgpLgorZm92ZmxfaW5leF9vbjoKKworCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YuYgkJJjB4YzQsMStFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdmZsX291dDoKKworCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisKKyMgdGhlIHNyYyBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYSBOT1JNKCEpLCBzbyB0YWcgaXQgYXMgc3VjaAorCW1vdi5iCQkmTk9STSxTVEFHKCVhNikJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJYnNyLmwJCWZvdXQKKworCWJ0c3QJCSZvdmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZvdmZsX292Zmxfb24KKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmb3ZmbF9pbmV4X29uCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCisKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3VuZmwoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgVW5kZXJmbG93IGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBVbmRlcmZsb3cgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIDA2MEZQU1AgZXhpdCAoYWxsIHdvcmsgZG9uZSEpCSMKKyMJX3JlYWxfb3ZmbCgpIC0gImNhbGxvdXQiIGZvciBPdmVyZmxvdyBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIGZvciBJbmV4YWN0IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBleGNlcHRpb24gY29kZQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBVbmZsIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVuZGVyZmxvdyBFeGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCVVuZGVyZmxvdyBFeGNlcHRpb24gZGlzYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgImV4Y2VwdGlvbiBwcmVzZW50IiBmbGFnIGluIHRoZSBmc2F2ZSBmcmFtZSBpcyBjbGVhcmVkCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU9uIHRoZSAwNjAsIGlmIGFuIEZQIHVuZGVyZmxvdyBpcyBwcmVzZW50IGFzIHRoZSByZXN1bHQgb2YgYW55CSMKKyMgaW5zdHJ1Y3Rpb24sIHRoZSAwNjAgd2lsbCB0YWtlIGFuIHVuZGVyZmxvdyBleGNlcHRpb24gd2hldGhlciB0aGUJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCisjIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIworIyBkZWZhdWx0IHJlc3VsdCBzaG91bGQgYmUgZm9yIHRoZSBvcGVyYXRpb24uIFRoaXMgZGVmYXVsdCByZXN1bHQgaXMJIworIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCisjIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKKyMgZGVub3RpbmcgdGhhdCBubyBleGNlcHRpb25hbCBjb25kaXRpb25zIGV4aXN0IHdpdGhpbiB0aGUgbWFjaGluZS4JIworIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKKyMgdGhlIGRlZmF1bHQgcmVzdWx0IChvbmx5IGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBvcGNsYXNzIDMpLiBGb3IJIworIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKKyMgX3JlYWxfdW5mbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKKyMgY2FuIGhhbmRsZSB0aGlzIGNhc2UuCQkJCQkJCSMKKyMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiB1bmRlcmZsb3cgd2FzIGRpc2FibGVkCSMKKyMgYnV0IHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCBhbmQgdGhlIHJlc3VsdCB3YXMgaW5leGFjdCwJIworIyB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF9pbmV4KCkuCQkjCisjIHdhcyBpbmV4YWN0LgkJCQkJCQkJIworIwlBbHNvLCBpbiB0aGUgY2FzZSBvZiBhbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9uIHdoZXJlCQkjCisjIHVuZGVyZmxvdyB3YXMgZGlzYWJsZWQgYW5kIHRoZSB0cmFjZSBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMJIworIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX3VuZmwKK19mcHNwX3VuZmw6CisKKyMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMHg1LEVYQ19DTURSRUcoJWE2KQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZnVuZmxfb3V0CisKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQorCisjIGJpdCBmaXZlIG9mIHRoZSBmcCBleHQgd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCisjIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX3VuZmwoKS4gcmVtZW1iZXIgdGhhdCBmY21wLCBhbmQgZnRzdAorIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24uCisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmdW5mbF9leHRyYWN0CQkjIG1vbmFkaWMKKworIyBub3csIHdoYXQncyBsZWZ0IHRoYXQncyBub3QgZHlhZGljIGlzIGZzaW5jb3MuIHdlIGNhbiBkaXN0aW5ndWlzaCBpdAorIyBmcm9tIGFsbCBkeWFkaWNzIGJ5IHRoZSAnMDExMHh4eCBwYXR0ZXJuCisJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIGFuIGZzaW5jb3M/CisJYm5lLmIJCWZ1bmZsX2V4dHJhY3QJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1bmZsX29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1bmZsX29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZnVuZmxfZXh0cmFjdDoKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfRVgoJWE2KSxUUkFQX0RTVE9QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0hJKCVhNiksVFJBUF9EU1RPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9MTyglYTYpLFRSQVBfRFNUT1BfTE8oJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisjIG1heWJlIHdlIGNhbiBtYWtlIHRoZXNlIGVudHJ5IHBvaW50cyBPTkxZIHRoZSBPVkZMIGVudHJ5IHBvaW50cyBvZiBlYWNoIHJvdXRpbmUuCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKKwlic3IubAkJc3RvcmVfZnByZWcKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLiBTaW5jZSB0aGlzIGlzIGluY29ycmVjdCwgd2UgbmVlZCB0byBjaGVjaworIyBpZiBvdXIgZW11bGF0aW9uLCBhZnRlciByZS1kb2luZyB0aGUgb3BlcmF0aW9uLCBkZWNpZGVkIHRoYXQKKyMgbm8gdW5kZXJmbG93IHdhcyBjYWxsZWQgZm9yLiBXZSBkbyB0aGVzZSBjaGVja3Mgb25seSBpbgorIyBmdW5mbF97dW5mbCxpbmV4fV9vbigpIGJlY2F1c2Ugdy8gYm90aCBleGNlcHRpb25zIGRpc2FibGVkLCB0aGlzCisjIHNwZWNpYWwgY2FzZSB3aWxsIHNpbXBseSBleGl0IGdyYWNlZnVsbHkgd2l0aCB0aGUgY29ycmVjdCByZXN1bHQuCisKKyMgdGhlIGV4Y2VwdGlvbmFsIHBvc3NpYmlsaXRpZXMgd2UgaGF2ZSBsZWZ0IG91cnNlbHZlcyB3aXRoIGFyZSBPTkxZIG92ZXJmbG93CisjIGFuZCBpbmV4YWN0LiBhbmQsIHRoZSBpbmV4YWN0IGlzIHN1Y2ggdGhhdCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgd2FzIGRpc2FibGVkCisjIGJ1dCBpbmV4YWN0IHdhcyBlbmFibGVkLgorCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWZ1bmZsX3VuZmxfb24KKworZnVuZmxfY2hraW5leDoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZnVuZmxfaW5leF9vbgorCitmdW5mbF9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisjJCMJYWRkLmwJCSYyNCwlc3AKKwlicmEubAkJX2Zwc3BfZG9uZQorCisjIG92ZXJmbG93IGlzIGVuYWJsZWQgQU5EIG92ZXJmbG93LCBvZiBjb3Vyc2UsIG9jY3VycmVkLiBzbywgd2UgaGF2ZSB0aGUgRVhPUAorIyBpbiBmcDEgKGRvbid0IGZvcmdldCB0byBzYXZlIGZwMCkuIHdoYXQgdG8gZG8gbm93PworIyB3ZWxsLCB3ZSBzaW1wbHkgaGF2ZSB0byBnZXQgdG8gZ28gdG8gX3JlYWxfdW5mbCgpIQorZnVuZmxfdW5mbF9vbjoKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLiBTaW5jZSB0aGlzIGlzIGluY29ycmVjdCwgd2UgY2hlY2sgaGVyZSB0byBzZWUKKyMgaWYgb3VyIGVtdWxhdGlvbiwgYWZ0ZXIgcmUtZG9pbmcgdGhlIG9wZXJhdGlvbiwgZGVjaWRlZCB0aGF0CisjIG5vIHVuZGVyZmxvdyB3YXMgY2FsbGVkIGZvci4KKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcS53CQlmdW5mbF9jaGtpbmV4CisKK2Z1bmZsX3VuZmxfb24yOgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YudwkJJjB4ZTAwMywyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfdW5mbAorCisjIHVuZGVmbG93IG9jY3VycmVkIGJ1dCBpcyBkaXNhYmxlZC4gbWVhbndoaWxlLCBpbmV4YWN0IGlzIGVuYWJsZWQuIHRoZXJlZm9yZSwKKyMgd2UgbXVzdCBqdW1wIHRvIHJlYWxfaW5leCgpLgorZnVuZmxfaW5leF9vbjoKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLgorIyBCdXQsIHdoZXRoZXIgYm9ndXMgb3Igbm90LCBpZiBpbmV4YWN0IGlzIGVuYWJsZWQgQU5EIGl0IG9jY3VycmVkLAorIyB0aGVuIHdlIGhhdmUgdG8gYnJhbmNoIHRvIHJlYWxfaW5leC4KKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcS53CQlmdW5mbF9leGl0CisKK2Z1bmZsX2luZXhfb24yOgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gc3RhY2sKKworCW1vdi5iCQkmMHhjNCwxK0VYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9pbmV4CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5mbF9vdXQ6CisKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorCisjIHRoZSBzcmMgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGEgTk9STSghKSwgc28gdGFnIGl0IGFzIHN1Y2gKKwltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZworCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCWJzci5sCQlmb3V0CisKKwlidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmdW5mbF91bmZsX29uMgorCisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZ1bmZsX2luZXhfb24yCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCisKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3Vuc3VwcCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCisjCQkgICAgICAgIERhdGEgVHlwZSIgZXhjZXB0aW9uLgkJCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQvbG9uZ3dvcmQJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWxvYWRfZnBuMSgpIC0gbG9hZCBzcmMgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBpbmV4YWN0IGhhbmRsZXIJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIGV4aXQ7IHdvcmsgYWxsIGRvbmUJCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKKyMJZnVuaW1wX3NrZXcoKSAtIGFkanVzdCBmc2F2ZSBzcmMgb3BzIHRvICJpbmNvcnJlY3QiIHZhbHVlCSMKKyMJX3JlYWxfc25hbigpIC0gImNhbGxvdXQiIGZvciBTTkFOIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfb3BlcnIoKSAtICJjYWxsb3V0IiBmb3IgT1BFUlIgZXhjZXB0aW9uCQkJIworIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE9WRkwgZXhjZXB0aW9uCQkJIworIwlfcmVhbF91bmZsKCkgLSAiY2FsbG91dCIgZm9yIFVORkwgZXhjZXB0aW9uCQkJIworIwlnZXRfcGFja2VkKCkgLSBmZXRjaCBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wIERhdGEgVHlwZSIgc3RrIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNzcmMgb3AgKGZvciBVTk5PUk0vREVOT1JNKQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBJbmV4YWN0IGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBJbmV4YWN0IGV4Y2VwdGlvbiBzdGsgZnJhbWUJIworIwlJZiBTTkFOIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gU05BTiBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgT1BFUlIgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBPUEVSUiBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgT1ZGTCBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIE9WRkwgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCisjCUlmIFVORkwgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBVTkZMIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUlmIFRyYWNlIGV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCisjCS0gQ29ycmVjdCByZXN1bHQgaGFzIGJlZW4gc3RvcmVkIGFzIGFwcHJvcHJpYXRlCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVHdvIG1haW4gaW5zdHJ1Y3Rpb24gdHlwZXMgY2FuIGVudGVyIGhlcmU6ICgxKSBERU5PUk0gb3IgVU5OT1JNCSMKKyMgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGVzLiBUaGVzZSBjYW4gYmUgZWl0aGVyIG9wY2xhc3MgMCwyIG9yIDMJIworIyBpbnN0cnVjdGlvbnMsIGFuZCAoMikgUEFDS0VEIHVuaW1wbGVtZW50ZWQgZGF0YSBmb3JtYXQgaW5zdHJ1Y3Rpb25zCSMKKyMgYWxzbyBvZiBvcGNsYXNzZXMgMCwyLCBvciAzLgkJCQkJCSMKKyMJRm9yIFVOTk9STS9ERU5PUk0gb3BjbGFzcyAwIGFuZCAyLCB0aGUgaGFuZGxlciBmZXRjaGVzIHRoZSBzcmMJIworIyBvcGVyYW5kIGZyb20gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIGFuZCB0aGUgZHN0IG9wZXJhbmQgKGlmIGR5YWRpYykJIworIyBmcm9tIHRoZSBGUCByZWdpc3RlciBmaWxlLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdGhlbiBlbXVsYXRlZCBieQkjCisjIGNob29zaW5nIGFuIGVtdWxhdGlvbiByb3V0aW5lIGZyb20gYSB0YWJsZSBvZiByb3V0aW5lcyBpbmRleGVkIGJ5CSMKKyMgaW5zdHJ1Y3Rpb24gdHlwZS4gT25jZSB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZW11bGF0ZWQgYW5kIHJlc3VsdAkjCisjIHNhdmVkLCB0aGVuIHdlIGNoZWNrIHRvIHNlZSBpZiBhbnkgZW5hYmxlZCBleGNlcHRpb25zIHJlc3VsdGVkIGZyb20JIworIyBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIElmIG5vbmUsIHRoZW4gd2UgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIJIworIyBfZnBzcF9kb25lKCkuIElmIHRoZXJlIGlzIGFuIGVuYWJsZWQgRlAgZXhjZXB0aW9uLCB0aGVuIHdlIGluc2VydAkjCisjIHRoaXMgZXhjZXB0aW9uIGludG8gdGhlIEZQVSBpbiB0aGUgZnNhdmUgc3RhdGUgZnJhbWUgYW5kIHRoZW4gZXhpdAkjCisjIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkJCQkJCQkjCisjCVBBQ0tFRCBvcGNsYXNzIDAgYW5kIDIgaXMgc2ltaWxhciBpbiBob3cgdGhlIGluc3RydWN0aW9uIGlzCSMKKyMgZW11bGF0ZWQgYW5kIGV4Y2VwdGlvbnMgaGFuZGxlZC4gVGhlIGRpZmZlcmVuY2VzIG9jY3VyIGluIGhvdyB0aGUJIworIyBoYW5kbGVyIGxvYWRzIHRoZSBwYWNrZWQgb3AgKGJ5IGNhbGxpbmcgZ2V0X3BhY2tlZCgpIHJvdXRpbmUpIGFuZAkjCisjIGJ5IHRoZSBmYWN0IHRoYXQgYSBUcmFjZSBleGNlcHRpb24gY291bGQgYmUgcGVuZGluZyBmb3IgUEFDS0VEIG9wcy4JIworIyBJZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCB0aGVuIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBzdGFjawkjCisjIGZyYW1lIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgaXMJIworIyBtYWRlIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JCQkJCQkjCisjCUZvciBVTk5PUk0vREVOT1JNIG9wY2xhc3MgMywgdGhlIGFjdHVhbCBtb3ZlIG91dCB0byBtZW1vcnkgaXMJIworIyBwZXJmb3JtZWQgYnkgY2FsbGluZyB0aGUgcm91dGluZSBmb3V0KCkuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIJIworIyBhcyB0aGUgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBleGl0IGVpdGhlciBvY2N1cnMgdGhyb3VnaAkjCisjIF9mcHNwX2RvbmUoKSBvciB0aHJvdWdoIF9yZWFsX3RyYWNlKCkgaWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZwkjCisjIChhIFRyYWNlIHN0YWNrIGZyYW1lIG11c3QgYmUgY3JlYXRlZCBoZXJlLCB0b28pLiBJZiBhbiBGUCBleGNlcHRpb24JIworIyBzaG91bGQgb2NjdXIsIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gZXhjZXB0aW9uIHN0YWNrIGZyYW1lIG9mIHRoYXQJIworIyB0eXBlIGFuZCBqdW1wIHRvIGVpdGhlciBfcmVhbF9zbmFuKCksIF9yZWFsX29wZXJyKCksIF9yZWFsX2luZXgoKSwJIworIyBfcmVhbF91bmZsKCksIG9yIF9yZWFsX292ZmwoKSBhcyBhcHByb3ByaWF0ZS4gUEFDS0VEIG9wY2xhc3MgMwkjCisjIGVtdWxhdGlvbiBpcyBwZXJmb3JtZWQgaW4gYSBzaW1pbGFyIG1hbm5lci4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyAoMSkgREVOT1JNIGFuZCBVTk5PUk0gKHVuaW1wbGVtZW50ZWQpIGRhdGEgdHlwZXM6CisjCisjCQkJCXBvc3QtaW5zdHJ1Y3Rpb24KKyMJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJKiAgICAgIEVBCSoKKyMJIHByZS1pbnN0cnVjdGlvbgkqCQkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgwICogIDB4MGRjICAqCSogMHgzICogIDB4MGRjICAqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKKyMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMKKyMgKDIpIFBBQ0tFRCBmb3JtYXQgKHVuc3VwcG9ydGVkKSBvcGNsYXNzZXMgdHdvIGFuZCB0aHJlZToKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIEVBCSoKKyMJKgkJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqIDB4MiAqICAweDBkYwkqCisjCSoqKioqKioqKioqKioqKioqCisjCSogICAgIE5leHQJKgorIwkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgorIworCWdsb2JhbAkJX2Zwc3BfdW5zdXBwCitfZnBzcF91bnN1cHA6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgc2F2ZSBmcCBzdGF0ZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYm5lLmIJCWZ1X3MKK2Z1X3U6CisJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjaworCWJyYS5iCQlmdV9jb250CisjIGlmIHRoZSBleGNlcHRpb24gaXMgYW4gb3BjbGFzcyB6ZXJvIG9yIHR3byB1bmltcGxlbWVudGVkIGRhdGEgdHlwZQorIyBleGNlcHRpb24sIHRoZW4gdGhlIGE3JyBjYWxjdWxhdGVkIGhlcmUgaXMgd3Jvbmcgc2luY2UgaXQgZG9lc24ndAorIyBzdGFjayBhbiBlYS4gaG93ZXZlciwgd2UgZG9uJ3QgbmVlZCBhbiBhNycgZm9yIHRoaXMgY2FzZSBhbnl3YXlzLgorZnVfczoKKwlsZWEJCTB4NCtFWENfRUEoJWE2KSwlYTAJIyBsb2FkIG9sZCBhNycKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHNhdmUgb24gc3RhY2sKKworZnVfY29udDoKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKyMgdGhlIEZQSUFSIHNob3VsZCBiZSBzZXQgY29ycmVjdGx5IGZvciBBTEwgZXhjZXB0aW9ucyBwYXNzaW5nIHRocm91Z2gKKyMgdGhpcyBwb2ludC4KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciBzcGVjaWFsIGNvbmRpdGlvbiBmbGFnCisKKyMgU2VwYXJhdGUgb3BjbGFzcyB0aHJlZSAoZnBuLXRvLW1lbSkgb3BzIHNpbmNlIHRoZXkgaGF2ZSBhIGRpZmZlcmVudAorIyBzdGFjayBmcmFtZSBhbmQgcHJvdG9jb2wuCisJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpdCBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZ1X291dAkJCSMgeWVzCisKKyMgU2VwYXJhdGUgcGFja2VkIG9wY2xhc3MgdHdvIGluc3RydWN0aW9ucy4KKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomNn0sJWQwCisJY21waS5iCQklZDAsJjB4MTMKKwliZXEudwkJZnVfaW5fcGFjaworCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworIyBPcGNsYXNzIHR3byB3LyBtZW1vcnktdG8tZnBuIG9wZXJhdGlvbiB3aWxsIGhhdmUgYW4gaW5jb3JyZWN0IGV4dGVuZGVkCisjIHByZWNpc2lvbiBmb3JtYXQgaWYgdGhlIHNyYyBmb3JtYXQgd2FzIHNpbmdsZSBvciBkb3VibGUgYW5kIHRoZQorIyBzb3VyY2UgZGF0YSB0eXBlIHdhcyBhbiBJTkYsIE5BTiwgREVOT1JNLCBvciBVTk5PUk0KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBpbnB1dAorCWJzci5sCQlmaXhfc2tld2VkX29wcworCisjIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgc3JjIG9wZXJhbmQgb3IgdGhlIGRzdCBvcGVyYW5kIChvciBib3RoKSBpcyB0aGUKKyMgVU5OT1JNIG9yIERFTk9STS4gY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCB0YWdzIHRoZSBvcGVyYW5kIHR5cGUuIGlmIHRoZQorIyBpbnB1dCBpcyBhbiBVTk5PUk0sIHRoZW4gY29udmVydCBpdCB0byBhIE5PUk0sIERFTk9STSwgb3IgWkVSTy4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMgkJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworCitmdV9vcDI6CisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgYXQgdGhpcyBwb2ludAorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZ1X2V4dHJhY3QJCSMgbW9uYWRpYworCWNtcGkuYgkJMStFWENfQ01EUkVHKCVhNiksJjB4M2EJIyBpcyBvcGVyYXRpb24gYW4gZnRzdD8KKwliZXEuYgkJZnVfZXh0cmFjdAkJIyB5ZXMsIHNvIGl0J3MgbW9uYWRpYywgdG9vCisKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1X29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZnVfZXh0cmFjdDoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKworCWJmZXh0dQkJMStFWENfQ01EUkVHKCVhNil7JjE6Jjd9LCVkMSAjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IGFsbCBkeWFkaWMgb3BzCisjCU9QRVJSCTogZnNxcnQoLU5PUk0pCisjCU9WRkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlVTkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJRFoJOiBmZGl2CisjCUlORVgyCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJSU5FWDEJOiBub25lIChwYWNrZWQgZG9lc24ndCBnbyB0aHJvdWdoIGhlcmUpCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBzZXQKKwlibmUuYgkJZnVfaW5fZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfaW5fY29udDoKKyMgZmNtcCBhbmQgZnRzdCBkbyBub3Qgc3RvcmUgYW55IHJlc3VsdC4KKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uCisJYW5kaS5iCQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBiaXRzIDMtNQorCWNtcGkuYgkJJWQwLCYweDM4CQkjIGlzIGluc3RyIGZjbXAgb3IgZnRzdD8KKwliZXEuYgkJZnVfaW5fZXhpdAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CisKK2Z1X2luX2V4aXQ6CisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9mcHNwX2RvbmUKKworZnVfaW5fZW5hOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVfaW5fZXhjCQkjIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzZXQKKworIworIyBObyBleGNlcHRpb25zIG9jY3VycmVkIHRoYXQgd2VyZSBhbHNvIGVuYWJsZWQuIE5vdzoKKyMKKyMJaWYgKE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCAmJiBpbmV4YWN0X2VuYWJsZWQpIHsKKyMJICAgIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgKGV2ZW4gaWYgdGhlIHJlc3VsdCB3YXMgZXhhY3QhKTsKKyMJfSBlbHNlIHsKKyMJICAgIHNhdmUgdGhlIHJlc3VsdCBpbiB0aGUgcHJvcGVyIGZwIHJlZyAodW5sZXNzIHRoZSBvcCBpcyBmY21wIG9yIGZ0c3QpOworIwkgICAgcmV0dXJuOworIwl9CisjCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PworCWJlcS5iCQlmdV9pbl9jb250CQkjIG5vCisKK2Z1X2luX292ZmxjaGs6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEuYgkJZnVfaW5fY29udAkJIyBubworCWJyYS53CQlmdV9pbl9leGNfb3ZmbAkJIyBnbyBpbnNlcnQgb3ZlcmZsb3cgZnJhbWUKKworIworIyBBbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkOgorIworIwlzaGlmdCBlbmFibGVkIGV4Y2VwdGlvbiBmaWVsZCBpbnRvIGxvIGJ5dGUgb2YgZDA7CisjCWlmICgoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgT1ZGTCAmJiBvdmZsX2Rpc2FibGVkKSB8fAorIwkgICAgKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIFVORkwgJiYgdW5mbF9kaXNhYmxlZCkpIHsKKyMJCS8qCisjCQkgKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIG11c3QgY2FsbCBfcmVhbF9pbmV4KCkgbm93IG9yIGVsc2UKKyMJCSAqIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgaXQgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKyMJCSAqLworIwkJY2FsbCBfcmVhbF9pbmV4KCk7CisjCX0gZWxzZSB7CisjCQlyZXN0b3JlIGV4YyBzdGF0ZSAoU05BTnx8T1BFUlJ8fE9WRkx8fFVORkx8fERafHxJTkVYKSBpbnRvIHRoZSBGUFU7CisjCX0KKyMKK2Z1X2luX2V4YzoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8gKDYpCisJYm5lLmIJCWZ1X2luX2V4Y19leGl0CQkjIG5vCisKKyMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0CisJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgdW5kZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfdW5mbAkJIyB5ZXMKKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX292ZmwJCSMgeWVzCisKKyMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCisjIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uLiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbAorIyBzcmMgb3BlcmFuZC4KK2Z1X2luX2V4Y19leGl0OgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwlic3IubAkJZnVuaW1wX3NrZXcJCSMgc2tldyBzZ2wgb3IgZGJsIGlucHV0cworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCW1vdi53CQkodGJsX2V4Y2VwdC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpICMgY3JlYXRlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9mcHNwX2RvbmUKKwordGJsX2V4Y2VwdDoKKwlzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywweGUwMDIsMHhlMDAxLDB4ZTAwMQorCitmdV9pbl9leGNfdW5mbDoKKwltb3YudwkJJjB4NCwlZDAKKwlicmEuYgkJZnVfaW5fZXhjX2V4aXQKK2Z1X2luX2V4Y19vdmZsOgorCW1vdi53CQkmMHgwMywlZDAKKwlicmEuYgkJZnVfaW5fZXhjX2V4aXQKKworIyBJZiB0aGUgaW5wdXQgb3BlcmFuZCB0byB0aGlzIG9wZXJhdGlvbiB3YXMgb3BjbGFzcyB0d28gYW5kIGEgc2luZ2xlCisjIG9yIGRvdWJsZSBwcmVjaXNpb24gZGVub3JtLCBpbmYsIG9yIG5hbiwgdGhlIG9wZXJhbmQgbmVlZHMgdG8gYmUKKyMgImNvcnJlY3RlZCIgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgcHJvcGVyIGVxdWl2YWxlbnQgZXh0ZW5kZWQgcHJlY2lzaW9uCisjIG51bWJlci4KKwlnbG9iYWwJCWZpeF9za2V3ZWRfb3BzCitmaXhfc2tld2VkX29wczoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomNn0sJWQwICMgZXh0cmFjdCBvcGNsYXNzLHNyYyBmbXQKKwljbXBpLmIJCSVkMCwmMHgxMQkJIyBpcyBjbGFzcyA9IDIgJiBmbXQgPSBzZ2w/CisJYmVxLmIJCWZzb19zZ2wJCQkjIHllcworCWNtcGkuYgkJJWQwLCYweDE1CQkjIGlzIGNsYXNzID0gMiAmIGZtdCA9IGRibD8KKwliZXEuYgkJZnNvX2RibAkJCSMgeWVzCisJcnRzCQkJCQkjIG5vCisKK2Zzb19zZ2w6CisJbW92LncJCUxPQ0FMX0VYKCVhMCksJWQwCSMgZmV0Y2ggc3JjIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJY21waS53CQklZDAsJjB4M2Y4MAkJIyBpcyB8ZXhwfCA9PSAkM2Y4MD8KKwliZXEuYgkJZnNvX3NnbF9kbnJtX3plcm8JIyB5ZXMKKwljbXBpLncJCSVkMCwmMHg0MDdmCQkjIG5vOyBpcyB8ZXhwfCA9PSAkNDA3Zj8KKwliZXEuYgkJZnNvX2luZm5hbgkJIyB5ZXMKKwlydHMJCQkJCSMgbm8KKworZnNvX3NnbF9kbnJtX3plcm86CisJYW5kaS5sCQkmMHg3ZmZmZmZmZixMT0NBTF9ISSglYTApICMgY2xlYXIgai1iaXQKKwliZXEuYgkJZnNvX3plcm8JCSMgaXQncyBhIHNrZXdlZCB6ZXJvCitmc29fc2dsX2Rucm06CisjIGhlcmUsIHdlIGNvdW50IG9uIG5vcm0gbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCW5lZy53CQklZDAJCQkjIC1zaGZ0IGFtdAorCWFkZGkudwkJJjB4M2Y4MSwlZDAJCSMgYWRqdXN0IG5ldyBleHBvbmVudAorCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgb2xkIGV4cG9uZW50CisJb3IudwkJJWQwLExPQ0FMX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJcnRzCisKK2Zzb196ZXJvOgorCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgYm9ndXMgZXhwb25lbnQKKwlydHMKKworZnNvX2luZm5hbjoKKwlhbmRpLmIJCSYweDdmLExPQ0FMX0hJKCVhMCkJIyBjbGVhciBqLWJpdAorCW9yaS53CQkmMHg3ZmZmLExPQ0FMX0VYKCVhMCkJIyBtYWtlIGV4cG9uZW50ID0gJDdmZmYKKwlydHMKKworZnNvX2RibDoKKwltb3YudwkJTE9DQUxfRVgoJWEwKSwlZDAJIyBmZXRjaCBzcmMgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwljbXBpLncJCSVkMCwmMHgzYzAwCQkjIGlzIHxleHB8ID09ICQzYzAwPworCWJlcS5iCQlmc29fZGJsX2Rucm1femVybwkjIHllcworCWNtcGkudwkJJWQwLCYweDQzZmYJCSMgbm87IGlzIHxleHB8ID09ICQ0M2ZmPworCWJlcS5iCQlmc29faW5mbmFuCQkjIHllcworCXJ0cwkJCQkJIyBubworCitmc29fZGJsX2Rucm1femVybzoKKwlhbmRpLmwJCSYweDdmZmZmZmZmLExPQ0FMX0hJKCVhMCkgIyBjbGVhciBqLWJpdAorCWJuZS5iCQlmc29fZGJsX2Rucm0JCSMgaXQncyBhIHNrZXdlZCBkZW5vcm0KKwl0c3QubAkJTE9DQUxfTE8oJWEwKQkJIyBpcyBpdCBhIHplcm8/CisJYmVxLmIJCWZzb196ZXJvCQkjIHllcworZnNvX2RibF9kbnJtOgorIyBoZXJlLCB3ZSBjb3VudCBvbiBub3JtIG5vdCB0byBhbHRlciBhMC4uLgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKKwluZWcudwkJJWQwCQkJIyAtc2hmdCBhbXQKKwlhZGRpLncJCSYweDNjMDEsJWQwCQkjIGFkanVzdCBuZXcgZXhwb25lbnQKKwlhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIG9sZCBleHBvbmVudAorCW9yLncJCSVkMCxMT0NBTF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGZtb3ZlIG91dCB0b29rIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbi4KKyMgdGhlIHNyYyBvcGVyYW5kIGlzIGluIEZQX1NSQy4gQ2FsbCBfZm91dCgpIHRvIHdyaXRlIG91dCB0aGUgcmVzdWx0IGFuZAorIyB0byBkZXRlcm1pbmUgd2hpY2ggZXhjZXB0aW9ucywgaWYgYW55LCB0byB0YWtlLgorZnVfb3V0OgorCisjIFNlcGFyYXRlIHBhY2tlZCBtb3ZlIG91dHMgZnJvbSB0aGUgVU5OT1JNIGFuZCBERU5PUk0gbW92ZSBvdXRzLgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDAKKwljbXBpLmIJCSVkMCwmMHgzCisJYmVxLncJCWZ1X291dF9wYWNrCisJY21waS5iCQklZDAsJjB4NworCWJlcS53CQlmdV9vdXRfcGFjaworCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZC4KKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWZmZWN0IGNjb2Rlcy4KKwlhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworIyB0aGUgc3JjIGNhbiBPTkxZIGJlIGEgREVOT1JNIG9yIGFuIFVOTk9STSEgc28sIGRvbid0IG1ha2UgYW55IGJpZyBzdWJyb3V0aW5lCisjIGNhbGwgaGVyZS4ganVzdCBmaWd1cmUgb3V0IHdoYXQgaXQgaXMuLi4KKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZ2V0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJYmVxLmIJCWZ1X291dF9kZW5vcm0JCSMgaXQncyBhIERFTk9STQorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGZpeCBpdAorCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKworCWJyYS5iCQlmdV9vdXRfY29udAorZnVfb3V0X2Rlbm9ybToKKwltb3YuYgkJJkRFTk9STSxTVEFHKCVhNikKK2Z1X291dF9jb250OgorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCisJYnNyLmwJCWZvdXQJCQkjIGNhbGwgZm1vdmUgb3V0IHJvdXRpbmUKKworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBub25lCisjCU9QRVJSCTogZm1vdmUue2IsdyxsfSBvdXQgb2YgbGFyZ2UgVU5OT1JNCisjCU9WRkwJOiBmbW92ZS57cyxkfQorIwlVTkZMCTogZm1vdmUue3MsZCx4fQorIwlEWgk6IG5vbmUKKyMJSU5FWDIJOiBhbGwKKyMJSU5FWDEJOiBub25lIChwYWNrZWQgZG9lc24ndCB0cmF2ZWwgdGhyb3VnaCBoZXJlKQorCisjIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdV9vdXRfZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfb3V0X2RvbmU6CisKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZWQKKworIyBvbiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbnMgdXNpbmcgcHJlLWRlY3JlbWVudCBvcgorIyBwb3N0LWluY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUsIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLiBpcyB0aGUKKyMgYWRkcmVzcyByZWdpc3RlciB3YXMgdGhlIHN0YWNrIHBvaW50ZXIgdXNlZCBmcm9tIHVzZXIgbW9kZSwgdGhlbiBsZXQncyB1cGRhdGUKKyMgaXQgaGVyZS4gaWYgaXQgd2FzIHVzZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoZW4gd2UgaGF2ZSB0byBoYW5kbGUgdGhpcworIyBhcyBhIHNwZWNpYWwgY2FzZS4KKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLmIJCWZ1X291dF9kb25lX3MKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgcmVzdG9yZSBhNworCW1vdi5sCQklYTAsJXVzcAorCitmdV9vdXRfZG9uZV9jb250OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlmdV9vdXRfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQorCisjIGlzIHRoZSBlYSBtb2RlIHByZS1kZWNyZW1lbnQgb2YgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSBzdXBlcnZpc29yIG1vZGU/CisjICgiZm1vdi54IGZwbSwtKGE3KSIpIGlmIHNvLAorZnVfb3V0X2RvbmVfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUuYgkJZnVfb3V0X2RvbmVfY29udAorCisjIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKKyMgc29tZXdoZXJlIG9uIHRoZSBzdGFjayB1bnRpbCB3ZSBjYW4gY29weSBpdCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZS4KKyMgaGVyZSwgd2UncmUgY291bnRpbmcgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdG8gYmUgdGhlIG9sZCBwbGFjZS1ob2xkZXJzCisjIGZvciBmcDAvZnAxIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHJlc3RvcmVkLiB0aGF0IHdheSwgd2UgY2FuIHdyaXRlCisjIG92ZXIgdGhvc2UgZGVzdGluYXRpb25zIHdpdGggdGhlIHNoaWZ0ZWQgc3RhY2sgZnJhbWUuCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBwdXQgYW5zd2VyIG9uIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCisjIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQorCWJuZS5iCQlmdV9vdXRfdHJhY2UKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK2Z1X291dF9lbmE6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlmdV9vdXRfZXhjCQkjIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzZXQKKworIyBubyBleGNlcHRpb25zIHdlcmUgc2V0LgorIyBpZiBhIGRpc2FibGVkIG92ZXJmbG93IG9jY3VycmVkIGFuZCBpbmV4YWN0IHdhcyBlbmFibGVkIGJ1dCB0aGUgcmVzdWx0CisjIHdhcyBleGFjdCwgdGhlbiBhIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgaXMgbWFkZS4KKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CisJYmVxLncJCWZ1X291dF9kb25lCQkjIG5vCisKK2Z1X291dF9vdmZsY2hrOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLncJCWZ1X291dF9kb25lCQkjIG5vCisJYnJhLncJCWZ1X2luZXgJCQkjIHllcworCisjCisjIFRoZSBmcCBtb3ZlIG91dCB0aGF0IHRvb2sgdGhlICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9uIHdhcworIyBiZWluZyB0cmFjZWQuIFNpbmNlIHRoZSBzdGFjayBmcmFtZXMgYXJlIHNpbWlsYXIsIGdldCB0aGUgImN1cnJlbnQiIFBDCisjIGZyb20gRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgIFVOU1VQUCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgorIwkJKgkJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgzICogIDB4MGRjCSoJKiAweDIgKiAgMHgwMjQJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKKyMJCSogICAgICBQQwkqCSogICAgICBQQwkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCitmdV9vdXRfdHJhY2U6CisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQuCitmdV9vdXRfZXhjOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKworIyB3ZSBkb24ndCBtZXNzIHdpdGggdGhlIGV4aXN0aW5nIGZzYXZlIGZyYW1lLiBqdXN0IHJlLWluc2VydCBpdCBhbmQKKyMganVtcCB0byB0aGUgIl9yZWFsX3t9KCkiIGhhbmRsZXIuLi4KKwltb3YudwkJKHRibF9mdV9vdXQuYiwlcGMsJWQwLncqMiksJWQwCisJam1wCQkodGJsX2Z1X291dC5iLCVwYywlZDAudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9mdV9vdXQ6CisJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgQlNVTiBjYW4ndCBoYXBwZW4KKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBTTkFOIGNhbid0IGhhcHBlbgorCXNob3J0CQlmdV9vcGVycgktIHRibF9mdV9vdXQJIyBPUEVSUgorCXNob3J0CQlmdV9vdmZsCQktIHRibF9mdV9vdXQJIyBPVkZMCisJc2hvcnQJCWZ1X3VuZmwJCS0gdGJsX2Z1X291dAkjIFVORkwKKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBEWiBjYW4ndCBoYXBwZW4KKwlzaG9ydAkJZnVfaW5leAkJLSB0YmxfZnVfb3V0CSMgSU5FWDIKKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBJTkVYMSB3b24ndCBtYWtlIGl0IGhlcmUKKworIyBmb3Igc25hbixvcGVycixvdmZsLHVuZmwsIHNyYyBvcCBpcyBzdGlsbCBpbiBGUF9TUkMgc28ganVzdAorIyBmcmVzdG9yZSBpdC4KK2Z1X3NuYW46CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkOCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDgKKwltb3YudwkJJjB4ZTAwNiwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisKKworCWJyYS5sCQlfcmVhbF9zbmFuCisKK2Z1X29wZXJyOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDAsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQwCisJbW92LncJCSYweGUwMDQsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCisKKwlicmEubAkJX3JlYWxfb3BlcnIKKworZnVfb3ZmbDoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byB0aGUgc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDQsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQ0CisJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9vdmZsCisKKyMgdW5kZXJmbG93IGNhbiBoYXBwZW4gZm9yIGV4dGVuZGVkIHByZWNpc2lvbi4gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MKKyMgdGhyZWUgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucyBkb24ndCB1cGRhdGUgdGhlIHN0YWNrIHBvaW50ZXIuIHNvLCBpZiB0aGUKKyMgZXhjZXB0aW9uIG9jY3VycmVkIGZyb20gdXNlciBtb2RlLCB0aGVuIHNpbXBseSB1cGRhdGUgYTcgYW5kIGV4aXQgbm9ybWFsbHkuCisjIGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIGNoZWNrIGlmCitmdV91bmZsOgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUudwkJZnVfdW5mbF9zCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHJlc3RvcmUgYTcgd2hldGhlciB3ZSBuZWVkCisJbW92LmwJCSVhMCwldXNwCQkjIHRvIG9yIG5vdC4uLgorCitmdV91bmZsX2NvbnQ6CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGNjLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjYworCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfdW5mbAorCitmdV91bmZsX3M6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgd2FzIHRoZSA8ZWE+IG1vZGUgLShzcCk/CisJYm5lLmIJCWZ1X3VuZmxfY29udAorCisjIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKKyMgc29tZXdoZXJlIG9uIHRoZSBzdGFjayB1bnRpbCB3ZSBjYW4gY29weSBpdCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZQorIyAod2hlcmUgdGhlIGV4YyBmcmFtZSBpcyBjdXJyZW50bHkpLiBtYWtlIHN1cmUgaXQncyBub3QgYXQgdGhlIHRvcCBvZiB0aGUKKyMgZnJhbWUgb3IgaXQgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgZXhjIHN0YWNrIGZyYW1lIGlzIHNoaWZ0ZWQgImRvd24iLgorCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgcHV0IGFuc3dlciBvbiBzdGFjaworCWZtb3ZtLngJCSYweDQwLEZQX0RTVCglYTYpCSMgcHV0IEVYT1Agb24gc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwY2MsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGNjCisJbW92LncJCSYweGUwMDMsMitGUF9EU1QoJWE2KQorCisJZnJlc3RvcmUJRlBfRFNUKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnJhLmwJCV9yZWFsX3VuZmwKKworIyBmbW92ZSBpbiBhbmQgb3V0IGVudGVyIGhlcmUuCitmdV9pbmV4OgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBjNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKKworCXVubGsJCSVhNgorCisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdV9pbl9wYWNrOgorCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCWFuZGkubAkJJjB4MGZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJYnNyLmwJCWdldF9wYWNrZWQJCSMgZmV0Y2ggcGFja2VkIHNyYyBvcGVyYW5kCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlic3IubAkJc2V0X3RhZ194CQkjIHNldCBzcmMgb3B0eXBlIHRhZworCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgYXQgdGhpcyBwb2ludAorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZ1X2V4dHJhY3RfcAkJIyBtb25hZGljCisJY21waS5iCQkxK0VYQ19DTURSRUcoJWE2KSwmMHgzYQkjIGlzIG9wZXJhdGlvbiBhbiBmdHN0PworCWJlcS5iCQlmdV9leHRyYWN0X3AJCSMgeWVzLCBzbyBpdCdzIG1vbmFkaWMsIHRvbworCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdV9vcDJfZG9uZV9wCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1X29wMl9kb25lX3A6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmdV9leHRyYWN0X3A6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwliZmV4dHUJCTErRVhDX0NNRFJFRyglYTYpeyYxOiY3fSwlZDEgIyBleHRyYWN0IGV4dGVuc2lvbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBhbGwgZHlhZGljIG9wcworIwlPUEVSUgk6IGZzcXJ0KC1OT1JNKQorIwlPVkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJVU5GTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCURaCTogZmRpdgorIwlJTkVYMgk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCUlORVgxCTogYWxsCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLncJCWZ1X2luX2VuYV9wCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfaW5fY29udF9wOgorIyBmY21wIGFuZCBmdHN0IGRvIG5vdCBzdG9yZSBhbnkgcmVzdWx0LgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBleHRlbnNpb24KKwlhbmRpLmIJCSYweDM4LCVkMAkJIyBleHRyYWN0IGJpdHMgMy01CisJY21waS5iCQklZDAsJjB4MzgJCSMgaXMgaW5zdHIgZmNtcCBvciBmdHN0PworCWJlcS5iCQlmdV9pbl9leGl0X3AJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAorCitmdV9pbl9leGl0X3A6CisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS53CQlmdV9pbl9leGl0X3NfcAkJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X2luX2V4aXRfY29udF9wOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlLiBjaGVjayB0byBzZWUgaWYgdGhlCisjIGFkZHJlc3NpbmcgbW9kZSB3YXMgKGE3KSsuIGlmIHNvLCB3ZSdsbCBuZWVkIHRvIHNoaWZ0IHRoZQorIyBzdGFjayBmcmFtZSAidXAiLgorZnVfaW5fZXhpdF9zX3A6CisJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBlYSBtb2RlIChhNykrCisJYmVxLmIJCWZ1X2luX2V4aXRfY29udF9wCSMgbm8KKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKyMgc2hpZnQgdGhlIHN0YWNrIGZyYW1lICJ1cCIuIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSA8ZWE+IGZpZWxkLgorCW1vdi5sCQkweDQoJXNwKSwweDEwKCVzcCkKKwltb3YubAkJMHgwKCVzcCksMHhjKCVzcCkKKwlhZGQubAkJJjB4Yywlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKK2Z1X2luX2VuYV9wOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQgJiBzZXQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVfaW5fZXhjX3AJCSMgYXQgbGVhc3Qgb25lIHdhcyBzZXQKKworIworIyBObyBleGNlcHRpb25zIG9jY3VycmVkIHRoYXQgd2VyZSBhbHNvIGVuYWJsZWQuIE5vdzoKKyMKKyMJaWYgKE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCAmJiBpbmV4YWN0X2VuYWJsZWQpIHsKKyMJICAgIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgKGV2ZW4gaWYgdGhlIHJlc3VsdCB3YXMgZXhhY3QhKTsKKyMJfSBlbHNlIHsKKyMJICAgIHNhdmUgdGhlIHJlc3VsdCBpbiB0aGUgcHJvcGVyIGZwIHJlZyAodW5sZXNzIHRoZSBvcCBpcyBmY21wIG9yIGZ0c3QpOworIwkgICAgcmV0dXJuOworIwl9CisjCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PworCWJlcS53CQlmdV9pbl9jb250X3AJCSMgbm8KKworZnVfaW5fb3ZmbGNoa19wOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLncJCWZ1X2luX2NvbnRfcAkJIyBubworCWJyYS53CQlmdV9pbl9leGNfb3ZmbF9wCSMgZG8gX3JlYWxfaW5leCgpIG5vdworCisjCisjIEFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQ6CisjCisjCXNoaWZ0IGVuYWJsZWQgZXhjZXB0aW9uIGZpZWxkIGludG8gbG8gYnl0ZSBvZiBkMDsKKyMJaWYgKCgoSU5FWDIgfHwgSU5FWDEpICYmIGluZXhfZW5hYmxlZCAmJiBPVkZMICYmIG92ZmxfZGlzYWJsZWQpIHx8CisjCSAgICAoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgVU5GTCAmJiB1bmZsX2Rpc2FibGVkKSkgeworIwkJLyoKKyMJCSAqIHRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgd2UgbXVzdCBjYWxsIF9yZWFsX2luZXgoKSBub3cgb3IgZWxzZQorIwkJICogdGhlcmUgd2lsbCBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBpdCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZAorIwkJICovCisjCQljYWxsIF9yZWFsX2luZXgoKTsKKyMJfSBlbHNlIHsKKyMJCXJlc3RvcmUgZXhjIHN0YXRlIChTTkFOfHxPUEVSUnx8T1ZGTHx8VU5GTHx8RFp8fElORVgpIGludG8gdGhlIEZQVTsKKyMJfQorIworZnVfaW5fZXhjX3A6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/ICg2IG9yIDcpCisJYmx0LmIJCWZ1X2luX2V4Y19leGl0X3AJIyBubworCisjIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdAorCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIHVuZGVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX3VuZmxfcAkjIHllcworCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIG92ZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfb3ZmbF9wCSMgeWVzCisKKyMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCisjIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uLiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbAorIyBzcmMgb3BlcmFuZC4KKyMgYXMgYSByZW1pbmRlciBmb3IgZnV0dXJlIHByZWRpY3RlZCBwYWluIGFuZCBhZ29ueSwgd2UgYXJlIHBhc3NpbmcgaW4gZnNhdmUgdGhlCisjICJub24tc2tld2VkIiBvcGVyYW5kIGZvciBjYXNlcyBvZiBzZ2wgYW5kIGRibCBzcmMgSU5GcyxOQU5zLCBhbmQgREVOT1JNcy4KKyMgdGhpcyBpcyBJTkNPUlJFQ1QgZm9yIGVuYWJsZWQgU05BTiB3aGljaCB3b3VsZCBnaXZlIHRvIHRoZSB1c2VyIHRoZSBza2V3ZWQgU05BTiEhIQorZnVfaW5fZXhjX2V4aXRfcDoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS53CQlmdV9pbl9leGNfZXhpdF9zX3AJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X2luX2V4Y19leGl0X2NvbnRfcDoKKwltb3YudwkJKHRibF9leGNlcHRfcC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCisKKwl1bmxrCQklYTYKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK3RibF9leGNlcHRfcDoKKwlzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywweGUwMDIsMHhlMDAxLDB4ZTAwMQorCitmdV9pbl9leGNfb3ZmbF9wOgorCW1vdi53CQkmMHgzLCVkMAorCWJyYS53CQlmdV9pbl9leGNfZXhpdF9wCisKK2Z1X2luX2V4Y191bmZsX3A6CisJbW92LncJCSYweDQsJWQwCisJYnJhLncJCWZ1X2luX2V4Y19leGl0X3AKKworZnVfaW5fZXhjX2V4aXRfc19wOgorCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikKKwliZXEuYgkJZnVfaW5fZXhjX2V4aXRfY29udF9wCisKKwltb3YudwkJKHRibF9leGNlcHRfcC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKKworIyBzaGlmdCBzdGFjayBmcmFtZSAidXAiLiB3aG8gY2FyZXMgYWJvdXQgPGVhPiBmaWVsZC4KKwltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCisJbW92LmwJCTB4MCglc3ApLDB4Yyglc3ApCisJYWRkLmwJCSYweGMsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjCisjIFRoZSBvcGNsYXNzIHR3byBQQUNLRUQgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIGFuICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUKKyMgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgIFVOU1VQUCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgorIwkJKgkJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgyICoJMHgwZGMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgTmV4dAkqCSogICAgIE5leHQJKgorIwkJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK2Z1X3RyYWNlX3A6CisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdV9vdXRfcGFjazoKKworCisjIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KKyMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQuCisjIGZtb3ZlIG91dCBkb2Vzbid0IGFmZmVjdCBjY29kZXMuCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCisJYnNyLmwJCWxvYWRfZnBuMQorCisjIHVubGlrZSBvdGhlciBvcGNsYXNzIDMsIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbnMsIHBhY2tlZCBtdXN0IGJlCisjIGFibGUgdG8gZGV0ZWN0IGFsbCBvcGVyYW5kIHR5cGVzLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMl9wCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KKworZnVfb3AyX3A6CisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCisJYnNyLmwJCWZvdXQJCQkjIGNhbGwgZm1vdmUgb3V0IHJvdXRpbmUKKworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBubworIwlTTkFOCTogeWVzCisjCU9QRVJSCTogaWYgKChrX2ZhY3RvciA+ICsxNykgfHwgKGRlYy4gZXhwIGV4Y2VlZHMgMyBkaWdpdHMpKQorIwlPVkZMCTogbm8KKyMJVU5GTAk6IG5vCisjCURaCTogbm8KKyMJSU5FWDIJOiB5ZXMKKyMJSU5FWDEJOiBubworCisjIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdV9vdXRfZW5hX3AJCSMgc29tZSBhcmUgZW5hYmxlZAorCitmdV9vdXRfZXhpdF9wOgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLmIJCWZ1X291dF9leGl0X3NfcAkJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X291dF9leGl0X2NvbnRfcDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIyB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZS4gY2hlY2sgdG8gc2VlIGlmIHRoZQorIyBhZGRyZXNzaW5nIG1vZGUgd2FzIC0oYTcpLiBpZiBzbywgd2UnbGwgbmVlZCB0byBzaGlmdCB0aGUKKyMgc3RhY2sgZnJhbWUgImRvd24iLgorZnVfb3V0X2V4aXRfc19wOgorCWJ0c3QJCSZtZGE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgZWEgbW9kZSAtKGE3KQorCWJlcS5iCQlmdV9vdXRfZXhpdF9jb250X3AJIyBubworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKworIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjaworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkKKwlibmUudwkJZnVfdHJhY2VfcAorCisJYnJhLmwJCV9mcHNwX2RvbmUKKworZnVfb3V0X2VuYV9wOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwliZXEudwkJZnVfb3V0X2V4aXRfcAorCisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgorCisjIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQuCisjIHRoZSBvbmx5IGV4Y2VwdGlvbiBwb3NzaWJsZSBvbiBwYWNrZWQgbW92ZSBvdXQgYXJlIElORVgsIE9QRVJSLCBhbmQgU05BTi4KK2Z1X291dF9leGNfcDoKKwljbXBpLmIJCSVkMCwmMHgxYQorCWJndC53CQlmdV9pbmV4X3AyCisJYmVxLncJCWZ1X29wZXJyX3AKKworZnVfc25hbl9wOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUuYgkJZnVfc25hbl9zX3AKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVfc25hbgorCitmdV9zbmFuX3NfcDoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUudwkJZnVfc25hbgorCisjIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCisjIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkOCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKKwltb3YudwkJJjB4ZTAwNiwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cworCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKworCWJyYS5sCQlfcmVhbF9zbmFuCisKK2Z1X29wZXJyX3A6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS53CQlmdV9vcGVycl9wX3MKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVfb3BlcnIKKworZnVfb3BlcnJfcF9zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS53CQlmdV9vcGVycgorCisjIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCisjIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkMCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKKwltb3YudwkJJjB4ZTAwNCwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cworCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKworCWJyYS5sCQlfcmVhbF9vcGVycgorCitmdV9pbmV4X3AyOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUudwkJZnVfaW5leF9zX3AyCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCisJYnJhLncJCWZ1X2luZXgKKworZnVfaW5leF9zX3AyOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS53CQlmdV9pbmV4CisKKyMgdGhlIGluc3RydWN0aW9uIHdhcyAiZm1vdmUucCBmcG4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgorIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKKyMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGM0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgd2UgY29weSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gaXRzIHByb3BlciBsb2NhdGlvbgorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRSsweGMoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCisJYnJhLmwJCV9yZWFsX2luZXgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlmIHdlJ3JlIHN0dWZmaW5nIGEgc291cmNlIG9wZXJhbmQgYmFjayBpbnRvIGFuIGZzYXZlIGZyYW1lIHRoZW4gd2UKKyMgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmb3Igc2luZ2xlIG9yIGRvdWJsZSBzb3VyY2Ugb3BlcmFuZHMgdGhhdCB0aGUKKyMgZm9ybWF0IHN0dWZmZWQgaXMgYXMgd2VpcmQgYXMgdGhlIGhhcmR3YXJlIHVzdWFsbHkgbWFrZXMgaXQuCisjCisJZ2xvYmFsCQlmdW5pbXBfc2tldworZnVuaW1wX3NrZXc6CisJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYzOiYzfSwlZDAgIyBleHRyYWN0IHNyYyBzcGVjaWZpZXIKKwljbXBpLmIJCSVkMCwmMHgxCQkjIHdhcyBzcmMgc2dsPworCWJlcS5iCQlmdW5pbXBfc2tld19zZ2wJCSMgeWVzCisJY21waS5iCQklZDAsJjB4NQkJIyB3YXMgc3JjIGRibD8KKwliZXEuYgkJZnVuaW1wX3NrZXdfZGJsCQkjIHllcworCXJ0cworCitmdW5pbXBfc2tld19zZ2w6CisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIERFTk9STSBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWJlcS5iCQlmdW5pbXBfc2tld19zZ2xfbm90CisJY21waS53CQklZDAsJjB4M2Y4MAorCWJndC5iCQlmdW5pbXBfc2tld19zZ2xfbm90CisJbmVnLncJCSVkMAkJCSMgbWFrZSBleHBvbmVudCBuZWdhdGl2ZQorCWFkZGkudwkJJjB4M2Y4MSwlZDAJCSMgZmluZCBhbXQgdG8gc2hpZnQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgZmV0Y2ggREVOT1JNIGhpKG1hbikKKwlsc3IubAkJJWQwLCVkMQkJCSMgc2hpZnQgaXQKKwlic2V0CQkmMzEsJWQxCQkJIyBzZXQgai1iaXQKKwltb3YubAkJJWQxLEZQX1NSQ19ISSglYTYpCSMgaW5zZXJ0IG5ldyBoaShtYW4pCisJYW5kaS53CQkmMHg4MDAwLEZQX1NSQ19FWCglYTYpCSMgY2xlYXIgb2xkIGV4cG9uZW50CisJb3JpLncJCSYweDNmODAsRlBfU1JDX0VYKCVhNikJIyBpbnNlcnQgbmV3ICJza2V3ZWQiIGV4cG9uZW50CitmdW5pbXBfc2tld19zZ2xfbm90OgorCXJ0cworCitmdW5pbXBfc2tld19kYmw6CisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIERFTk9STSBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWJlcS5iCQlmdW5pbXBfc2tld19kYmxfbm90CisJY21waS53CQklZDAsJjB4M2MwMAorCWJndC5iCQlmdW5pbXBfc2tld19kYmxfbm90CisKKwl0c3QuYgkJRlBfU1JDX0VYKCVhNikJCSMgbWFrZSAiaW50ZXJuYWwgZm9ybWF0IgorCXNtaS5iCQkweDIrRlBfU1JDKCVhNikKKwltb3YudwkJJWQwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IGV4cG9uZW50IHdpdGggY2xlYXJlZCBzaWduCisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwltb3YudwkJJjB4M2MwMSwlZDEJCSMgcGFzcyBkZW5vcm0gdGhyZXNob2xkCisJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybSBpdAorCW1vdi53CQkmMHgzYzAwLCVkMAkJIyBuZXcgZXhwb25lbnQKKwl0c3QuYgkJMHgyK0ZQX1NSQyglYTYpCQkjIGlzIHNpZ24gc2V0PworCWJlcS5iCQlmc3NfZGJsX2Rlbm9ybV9kb25lCSMgbm8KKwlic2V0CQkmMTUsJWQwCQkJIyBzZXQgc2lnbgorZnNzX2RibF9kZW5vcm1fZG9uZToKKwlic2V0CQkmMHg3LEZQX1NSQ19ISSglYTYpCSMgc2V0IGotYml0CisJbW92LncJCSVkMCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKK2Z1bmltcF9za2V3X2RibF9ub3Q6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9tZW1fd3JpdGUyCitfbWVtX3dyaXRlMjoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYmVxLmwJCV9kbWVtX3dyaXRlCisJbW92LmwJCTB4MCglYTApLEZQX0RTVF9FWCglYTYpCisJbW92LmwJCTB4NCglYTApLEZQX0RTVF9ISSglYTYpCisJbW92LmwJCTB4OCglYTApLEZQX0RTVF9MTyglYTYpCisJY2xyLmwJCSVkMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2VmZmFkZCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCisjCQkJZWZmZWN0aXZlIGFkZHJlc3MiIGV4Y2VwdGlvbi4JCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZwkjCisjCXN5c3RlbS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlkZWNiaW4oKSAtIGNvbnZlcnQgcGFja2VkIGRhdGEgdG8gRlAgYmluYXJ5IGRhdGEJCSMKKyMJX3JlYWxfZnB1X2Rpc2FibGVkKCkgLSAiY2FsbG91dCIgZm9yICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbgkjCisjCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCV9tZW1fcmVhZCgpIC0gcmVhZCBleHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZCBmcm9tIG1lbW9yeQkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgZXhpdDsgd29yayBhbGwgZG9uZQkJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBlbmFibGVkIGV4Y2VwdGlvbgkJIworIwlmbW92bV9keW5hbWljKCkgLSBlbXVsYXRlIGR5bmFtaWMgZm1vdm0gaW5zdHJ1Y3Rpb24JCSMKKyMJZm1vdm1fY3RybCgpIC0gZW11bGF0ZSBmbW92bSBjb250cm9sIGluc3RydWN0aW9uCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlICJVbmltcGxlbWVudGVkIDxlYT4iIHN0ayBmcmFtZQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUJIworIwlJZiBGUFUgZGlzYWJsZWQ6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBGUFUgZGlzYWJsZWQgc3RhY2sgZnJhbWUJIworIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwlFbHNlOiAobm9ybWFsIGNhc2UpCQkJCQkJIworIwktIE5vbmUgKGNvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZSkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgZXhjZXB0aW9uIGhhbmRsZXMgMyB0eXBlcyBvZiBvcGVyYXRpb25zOgkJCSMKKyMgKDEpIEZQIEluc3RydWN0aW9ucyB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gb3IgcGFja2VkIGltbWVkaWF0ZQkjCisjICAgICBhZGRyZXNzaW5nIG1vZGUuCQkJCQkJCSMKKyMgKDIpIFRoZSAiZm1vdm0ueCIgaW5zdHJ1Y3Rpb24gdy8gZHluYW1pYyByZWdpc3RlciBzcGVjaWZpY2F0aW9uLgkjCisjICgzKSBUaGUgImZtb3ZtLmwiIGluc3RydWN0aW9uIHcvIDIgb3IgMyBjb250cm9sIHJlZ2lzdGVycy4JCSMKKyMJCQkJCQkJCQkjCisjCUZvciBpbW1lZGlhdGUgZGF0YSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyByZWFkIGluIHcvIGEJCSMKKyMgX21lbV9yZWFkKCkgImNhbGxvdXQiLCBjb252ZXJ0ZWQgdG8gRlAgYmluYXJ5IChpZiBwYWNrZWQpLCBhbmQgdXNlZAkjCisjIGFzIHRoZSBzb3VyY2Ugb3BlcmFuZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc3BlY2lmaWVkIGJ5IHRoZSBpbnN0cnVjdGlvbgkjCisjIHdvcmQuIElmIG5vIEZQIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQgYWRzIGEgcmVzdWx0IG9mIHRoZQkjCisjIGVtdWxhdGlvbiwgdGhlbiB0aGUgcmVzdWx0IGlzIHN0b3JlZCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgYW5kCSMKKyMgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCBfZnBzcF9kb25lKCkuIElmIGFuIGVuYWJsZWQgZXhjIGhhcyBiZWVuCSMKKyMgc2lnbmFsbGVkIGFzIGEgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBmc2F2ZSBzdGF0ZSBmcmFtZQkJIworIyBjb3JyZXNwb25kaW5nIHRvIHRoZSBGUCBleGNlcHRpb24gdHlwZSBtdXN0IGJlIGVudGVyZWQgaW50byB0aGUgMDYwCSMKKyMgRlBVIGJlZm9yZSBleGl0aW5nLiBJbiBlaXRoZXIgdGhlIGVuYWJsZWQgb3IgZGlzYWJsZWQgY2FzZXMsIHdlCSMKKyMgbXVzdCBhbHNvIGNoZWNrIGlmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcsIGluIHdoaWNoIGNhc2UsIHdlCSMKKyMgbXVzdCBjcmVhdGUgYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24JIworIyBzdGFjayBmcmFtZS4gSWYgbm8gVHJhY2UgaXMgcGVuZGluZywgd2Ugc2ltcGx5IGV4aXQgdGhyb3VnaAkJIworIyBfZnBzcF9kb25lKCkuCQkJCQkJCQkjCisjCUZvciAiZm1vdm0ueCIsIGNhbGwgdGhlIHJvdXRpbmUgZm1vdm1fZHluYW1pYygpIHdoaWNoIHdpbGwJIworIyBkZWNvZGUgYW5kIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLiBObyBGUCBleGNlcHRpb25zIGNhbiBiZSBwZW5kaW5nCSMKKyMgYXMgYSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gZW11bGF0aW9uLiBBIFRyYWNlIGV4Y2VwdGlvbiBjYW4gYmUJIworIyBwZW5kaW5nLCB0aG91Z2gsIHdoaWNoIG1lYW5zIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lIG11c3QgYmUgY2hhbmdlZAkjCisjIHRvIGEgVHJhY2Ugc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgbWFkZSB0aHJvdWdoIF9yZWFsX3RyYWNlKCkuCSMKKyMgRm9yIHRoZSBjYXNlIG9mICJmbW92bS54IERuLC0oYTcpIiwgd2hlcmUgdGhlIG9mZmVuZGluZyBpbnN0cnVjdGlvbgkjCisjIHdhcyBleGVjdXRlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhpcyBoYW5kbGVyIG11c3Qgc3RvcmUgdGhlIEZQCSMKKyMgcmVnaXN0ZXIgZmlsZSB2YWx1ZXMgdG8gdGhlIHN5c3RlbSBzdGFjayBieSBpdHNlbGYgc2luY2UJCSMKKyMgZm1vdm1fZHluYW1pYygpIGNhbid0IGhhbmRsZSB0aGlzLiBBIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCisjIGZwc3BfZG9uZSgpLgkJCQkJCQkJIworIwlGb3IgImZtb3ZtLmwiLCBmbW92bV9jdHJsKCkgaXMgdXNlZCB0byBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbi4JIworIyBBZ2FpbiwgYSBUcmFjZSBleGNlcHRpb24gbWF5IGJlIHBlbmRpbmcgYW5kIGFuIGV4aXQgbWFkZSB0aHJvdWdoCSMKKyMgX3JlYWxfdHJhY2UoKS4gRWxzZSwgYSBub3JtYWwgZXhpdCBpcyBtYWRlIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkjCisjCQkJCQkJCQkJIworIwlCZWZvcmUgYW55IG9mIHRoZSBhYm92ZSBpcyBhdHRlbXB0ZWQsIGl0IG11c3QgYmUgY2hlY2tlZCB0bwkjCisjIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBTaW5jZSB0aGUgIlVuaW1wIDxlYT4iIGV4Y2VwdGlvbiBpcyB0YWtlbgkjCisjIGJlZm9yZSB0aGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uLCBidXQgdGhlICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbgkjCisjIGhhcyBoaWdoZXIgcHJpb3JpdHksIHdlIGNoZWNrIHRoZSBkaXNhYmxlZCBiaXQgaW4gdGhlIFBDUi4gSWYgc2V0LAkjCisjIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gOCB3b3JkICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjIGZyb20gdGhlIGN1cnJlbnQgNCB3b3JkIGV4Y2VwdGlvbiBzdGFjayBmcmFtZS4gVGhpcyBpbmNsdWRlcwkJIworIyByZXByb2R1Y2luZyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRvIHB1dCBvbiB0aGUJIworIyBuZXcgc3RhY2sgZnJhbWUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUluIHRoZSBwcm9jZXNzIG9mIGFsbCBlbXVsYXRpb24gd29yaywgaWYgYSBfbWVtX3JlYWQoKQkJIworIyAiY2FsbG91dCIgcmV0dXJucyBhIGZhaWxpbmcgcmVzdWx0IGluZGljYXRpbmcgYW4gYWNjZXNzIGVycm9yLCB0aGVuCSMKKyMgd2UgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgc3RhY2sJIworIyBmcmFtZS4gVGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhIGZhdWx0aW5nIGFkZHJlc3MgYW5kIGEgZmF1bHQtCSMKKyMgc3RhdHVzLWxvbmd3b3JkLiBUaGVzZSBhcmUgY3JlYXRlZCB3aXRoaW4gdGhpcyBoYW5kbGVyLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfZWZmYWRkCitfZnBzcF9lZmZhZGQ6CisKKyMgVGhpcyBleGNlcHRpb24gdHlwZSB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZSAiTGluZSBGIEVtdWxhdG9yIgorIyBleGNlcHRpb24uIFRoZXJlZm9yZSwgdGhlIEZQVSBjb3VsZCBiZSBkaXNhYmxlZCB3aGVuIGVudGVyaW5nIGhlcmUuCisjIFNvLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGRpc2FibGVkIGFuZCBoYW5kbGUgdGhhdCBjYXNlIHNlcGFyYXRlbHkuCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdmMJCSVwY3IsJWQwCQkjIGxvYWQgcHJvYyBjcgorCWJ0c3QJCSYweDEsJWQwCQkjIGlzIEZQVSBkaXNhYmxlZD8KKwlibmUudwkJaWVhX2Rpc2FibGVkCQkjIHllcworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyBQQyBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgUEMgaW4gdGhlIGZyYW1lCisJbW92LmwJCUVYQ19QQyglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwl0c3QudwkJJWQwCQkJIyBpcyBvcGVyYXRpb24gZm1vdmVtPworCWJtaS53CQlpZWFfZm1vdm0JCSMgeWVzCisKKyMKKyMgaGVyZSwgd2Ugd2lsbCBoYXZlOgorIwlmYWJzCWZkYWJzCWZzYWJzCQlmYWNvcwkJZm1vZAorIwlmYWRkCWZkYWRkCWZzYWRkCQlmYXNpbgkJZnJlbQorIwlmY21wCQkJCWZhdGFuCQlmc2NhbGUKKyMJZmRpdglmZGRpdglmc2RpdgkJZmF0YW5oCQlmc2luCisjCWZpbnQJCQkJZmNvcwkJZnNpbmNvcworIwlmaW50cnoJCQkJZmNvc2gJCWZzaW5oCisjCWZtb3ZlCWZkbW92ZQlmc21vdmUJCWZldG94CQlmdGFuCisjCWZtdWwJZmRtdWwJZnNtdWwJCWZldG94bTEJCWZ0YW5oCisjCWZuZWcJZmRuZWcJZnNuZWcJCWZnZXRleHAJCWZ0ZW50b3gKKyMJZnNnbGRpdgkJCQlmZ2V0bWFuCQlmdHdvdG94CisjCWZzZ2xtdWwJCQkJZmxvZzEwCisjCWZzcXJ0CQkJCWZsb2cyCisjCWZzdWIJZmRzdWIJZnNzdWIJCWZsb2duCisjCWZ0c3QJCQkJZmxvZ25wMQorIyB3aGljaCBjYW4gYWxsIHVzZSBmPG9wPi57eCxwfQorIyBzbywgbm93IGl0J3MgaW1tZWRpYXRlIGRhdGEgZXh0ZW5kZWQgcHJlY2lzaW9uIEFORCBQQUNLRUQgRk9STUFUIQorIworaWVhX29wOgorCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWJ0c3QJCSYweGEsJWQwCQkjIGlzIHNyYyBmbXQgeCBvciBwPworCWJuZS5iCQlpZWFfb3BfcGFjawkJIyBwYWNrZWQKKworCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGFzczogcHRyIHRvICM8ZGF0YT4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gc3VwZXIgYWRkcgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcworCWJzci5sCQlfaW1lbV9yZWFkCQkjIHJlYWQgZXh0ZW5kZWQgaW1tZWRpYXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLncJCWllYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWllYV9vcF9zZXRzcmMKKworaWVhX29wX3BhY2s6CisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gIzxkYXRhPgorCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKKwlic3IubAkJX2ltZW1fcmVhZAkJIyByZWFkIHBhY2tlZCBvcGVyYW5kCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLncJCWllYV9pYWNjCQkjIHllcworCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgorCWJmZXh0dQkJRlBfU1JDKCVhNil7JjE6JjE1fSwlZDAJIyBnZXQgZXhwCisJY21waS53CQklZDAsJjB4N2ZmZgkJIyBJTkYgb3IgTkFOPworCWJlcS5iCQlpZWFfb3Bfc2V0c3JjCQkjIG9wZXJhbmQgaXMgYW4gSU5GIG9yIE5BTgorCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhIHplcm8gaWYgdGhlIG1hbnRpc3NhIGlzIGFsbCB6ZXJvLCBlbHNlIGl0J3MKKyMgYSBub3JtYWwgcGFja2VkIG9wLgorCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKKwlhbmRpLmIJCSYweDBmLCVkMAkJIyBjbGVhciBhbGwgYnV0IGxhc3QgbnliYmxlCisJYm5lLmIJCWllYV9vcF9ncF9ub3Rfc3BlYwkjIG5vdCBhIHplcm8KKwl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPworCWJuZS5iCQlpZWFfb3BfZ3Bfbm90X3NwZWMJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCQkjIGlzIGx3IDMgemVybz8KKwliZXEuYgkJaWVhX29wX3NldHNyYwkJIyBvcGVyYW5kIGlzIGEgWkVSTworaWVhX29wX2dwX25vdF9zcGVjOgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBwYWNrZWQgb3AKKwlic3IubAkJZGVjYmluCQkJIyBjb252ZXJ0IHRvIGV4dGVuZGVkCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCisKK2llYV9vcF9zZXRzcmM6CisJYWRkaS5sCQkmMHhjLEVYQ19FWFRXUFRSKCVhNikJIyB1cGRhdGUgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlcgorCisjIEZQX1NSQyBub3cgaG9sZHMgdGhlIHNyYyBvcGVyYW5kLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgY291bGQgYmUgQU5ZVEhJTkchISEKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlpZWFfb3BfZ2V0ZHN0CQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0vREVOT1JNL1pFUk8KKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKK2llYV9vcF9nZXRkc3Q6CisJY2xyLmIJCVNUT1JFX0ZMRyglYTYpCQkjIGNsZWFyICJzdG9yZSByZXN1bHQiIGJvb2xlYW4KKworCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWllYV9vcF9leHRyYWN0CQkjIG1vbmFkaWMKKwlidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZzaW5jb3MsZnRzdCxmY21wPworCWJuZS5iCQlpZWFfb3Bfc3BlYwkJIyB5ZXMKKworaWVhX29wX2xvYWRkc3Q6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIGRzdCByZWdubworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBjb3VsZCBiZSBBTllUSElORyEhIQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWllYV9vcF9leHRyYWN0CQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0vREVOT1JNL1pFUk8KKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKKwlicmEuYgkJaWVhX29wX2V4dHJhY3QKKworIyB0aGUgb3BlcmF0aW9uIGlzIGZzaW5jb3MsIGZ0c3QsIG9yIGZjbXAuIG9ubHkgZmNtcCBpcyBkeWFkaWMKK2llYV9vcF9zcGVjOgorCWJ0c3QJCSYweDMsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZnNpbmNvcz8KKwliZXEuYgkJaWVhX29wX2V4dHJhY3QJCSMgeWVzCisjIG5vdywgd2UncmUgbGVmdCB3aXRoIGZ0c3QgYW5kIGZjbXAuIHNvLCBmaXJzdCBsZXQncyB0YWcgdGhlbSBzbyB0aGF0IHRoZXkgZG9uJ3QKKyMgc3RvcmUgYSByZXN1bHQuIHRoZW4sIG9ubHkgZmNtcCB3aWxsIGJyYW5jaCBiYWNrIGFuZCBwaWNrIHVwIGEgZHN0IG9wZXJhbmQuCisJc3QJCVNUT1JFX0ZMRyglYTYpCQkjIGRvbid0IHN0b3JlIGEgZmluYWwgcmVzdWx0CisJYnRzdAkJJjB4MSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBmY21wPworCWJlcS5iCQlpZWFfb3BfbG9hZGRzdAkJIyB5ZXMKKworaWVhX29wX2V4dHJhY3Q6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzOiBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJZm1vdi5sCQkmMHgwLCVmcGNyCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IGFsbCBvcGVyYXRpb25zCisjCU9QRVJSCTogYWxsIHJlZy1yZWcgb3IgbWVtLXJlZyBvcGVyYXRpb25zIHRoYXQgY2FuIG5vcm1hbGx5IG9wZXJyCisjCU9WRkwJOiBzYW1lIGFzIE9QRVJSCisjCVVORkwJOiBzYW1lIGFzIE9QRVJSCisjCURaCTogc2FtZSBhcyBPUEVSUgorIwlJTkVYMgk6IHNhbWUgYXMgT1BFUlIKKyMJSU5FWDEJOiBhbGwgcGFja2VkIGltbWVkaWF0ZSBvcGVyYXRpb25zCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLmIJCWllYV9vcF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAorCisjIG5vdywgd2Ugc2F2ZSB0aGUgcmVzdWx0LCB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlIG9wZXJhdGlvbiB3YXMgZnRzdCBvciBmY21wLgorIyB0aGVzZSBkb24ndCBzYXZlIHJlc3VsdHMuCitpZWFfb3Bfc2F2ZToKKwl0c3QuYgkJU1RPUkVfRkxHKCVhNikJCSMgZG9lcyB0aGlzIG9wIHN0b3JlIGEgcmVzdWx0PworCWJuZS5iCQlpZWFfb3BfZXhpdDEJCSMgZXhpdCB3aXRoIG5vIGZyZXN0b3JlCisKK2llYV9vcF9zdG9yZToKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggZHN0IHJlZ25vCisJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKKworaWVhX29wX2V4aXQxOgorCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgIk5leHQgUEMiIGluIGV4YyBmcmFtZQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlpZWFfb3BfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKK2llYV9vcF9lbmE6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlIGFuZCBzZXQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJaWVhX29wX2V4YwkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAorCisjIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZC4gbm93LCBkaWQgYSBkaXNhYmxlZCwgZXhhY3Qgb3ZlcmZsb3cgb2NjdXIgd2l0aCBpbmV4YWN0CisjIGVuYWJsZWQ/IGlmIHNvLCB0aGVuIHdlIGhhdmUgdG8gc3R1ZmYgYW4gb3ZlcmZsb3cgZnJhbWUgaW50byB0aGUgRlBVLgorCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIG92ZXJmbG93IG9jY3VyPworCWJlcS5iCQlpZWFfb3Bfc2F2ZQorCitpZWFfb3Bfb3ZmbDoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLmIJCWllYV9vcF9zdG9yZQkJIyBubworCWJyYS5iCQlpZWFfb3BfZXhjX292ZmwJCSMgeWVzCisKKyMgYW4gZW5hYmxlZCBleGNlcHRpb24gb2NjdXJyZWQuIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBleGNlcHRpb24gdHlwZSBiYWNrIGludG8KKyMgdGhlIG1hY2hpbmUuCitpZWFfb3BfZXhjOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKwljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPworCWJuZS5iCQlpZWFfb3BfZXhjX2ZvcmNlCSMgbm8KKworIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QuIHNvLCBpZiBpdCBvY2N1cnMgd2l0aCBhbiBvdmVyZmxvdworIyBvciB1bmRlcmZsb3cgdGhhdCB3YXMgZGlzYWJsZWQsIHRoZW4gd2UgaGF2ZSB0byBmb3JjZSBhbiBvdmVyZmxvdyBvcgorIyB1bmRlcmZsb3cgZnJhbWUuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWllYV9vcF9leGNfb3ZmbAkJIyB5ZXMKKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCB1bmRlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWllYV9vcF9leGNfdW5mbAkJIyB5ZXMKKworaWVhX29wX2V4Y19mb3JjZToKKwltb3YudwkJKHRibF9pZWFfZXhjZXB0LmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKKwlicmEuYgkJaWVhX29wX2V4aXQyCQkjIGV4aXQgd2l0aCBmcmVzdG9yZQorCit0YmxfaWVhX2V4Y2VwdDoKKwlzaG9ydAkJMHhlMDAyLCAweGUwMDYsIDB4ZTAwNCwgMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywgMHhlMDAyLCAweGUwMDEsIDB4ZTAwMQorCitpZWFfb3BfZXhjX292Zmw6CisJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQorCWJyYS5iCQlpZWFfb3BfZXhpdDIKKworaWVhX29wX2V4Y191bmZsOgorCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKKworaWVhX29wX2V4aXQyOgorCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgIk5leHQgUEMiIGluIGV4YyBmcmFtZQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIGV4Y2VwdGlvbmFsIHN0YXRlCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlpZWFfb3BfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMKKyMgVGhlIG9wY2xhc3MgdHdvIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbgorIyB0aGUgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgVU5JTVAgRUEgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDAgKiAgMHgwZjAJKgkqICAgIEN1cnJlbnQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgUEMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJCSogICAgICBTUgkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgoraWVhX29wX3RyYWNlOgorCW1vdi5sCQkoJXNwKSwtKCVzcCkJCSMgc2hpZnQgc3RhY2sgZnJhbWUgImRvd24iCisJbW92LncJCTB4OCglc3ApLDB4NCglc3ApCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZWFfZm1vdm06CisJYnRzdAkJJjE0LCVkMAkJCSMgY3RybCBvciBkYXRhIHJlZworCWJlcS53CQlpZWFfZm1vdm1fY3RybAorCitpZWFfZm1vdm1fZGF0YToKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZQorCWJuZS5iCQlpZWFfZm1vdm1fZGF0YV9zCisKK2llYV9mbW92bV9kYXRhX3U6CisJbW92LmwJCSV1c3AsJWEwCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBjdXJyZW50IGE3CisJYnNyLmwJCWZtb3ZtX2R5bmFtaWMJCSMgZG8gZHluYW1pYyBmbW92bQorCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgbG9hZCBwb3NzaWJseSBuZXcgYTcKKwltb3YubAkJJWEwLCV1c3AJCSMgdXBkYXRlIHVzcAorCWJyYS53CQlpZWFfZm1vdm1fZXhpdAorCitpZWFfZm1vdm1fZGF0YV9zOgorCWNsci5iCQlTUENPTkRfRkxHKCVhNikKKwlsZWEJCTB4MitFWENfVk9GRiglYTYpLCVhMAorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKKwlic3IubAkJZm1vdm1fZHluYW1pYwkJIyBkbyBkeW5hbWljIGZtb3ZtCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwliZXEudwkJaWVhX2Ztb3ZtX2RhdGFfcHJlZGVjCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1pYTdfZmxnCisJYm5lLncJCWllYV9mbW92bV9leGl0CisKKyMgcmlnaHQgbm93LCBkMCA9IHRoZSBzaXplLgorIyB0aGUgZGF0YSBoYXMgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHN1cGVydmlzb3Igc3RhY2ssIGJ1dCB3ZSBoYXZlIG5vdAorIyBpbmNyZW1lbnRlZCB0aGUgc3RhY2sgcG9pbnRlciBieSB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGJ5dGVzLgorIyBkbyBpdCBoZXJlLgoraWVhX2Ztb3ZtX2RhdGFfcG9zdGluYzoKKwlidHN0CQkmMHg3LEVYQ19TUiglYTYpCisJYm5lLmIJCWllYV9mbW92bV9kYXRhX3BpX3RyYWNlCisKKwltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLChFWENfUEMsJWE2LCVkMCkKKwltb3YudwkJJjB4MDBmMCwoRVhDX1ZPRkYsJWE2LCVkMCkKKworCWxlYQkJKEVYQ19TUiwlYTYsJWQwKSwlYTAKKwltb3YubAkJJWEwLEVYQ19TUiglYTYpCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCW1vdi5sCQkoJXNwKSssJXNwCisJYnJhLmwJCV9mcHNwX2RvbmUKKworaWVhX2Ztb3ZtX2RhdGFfcGlfdHJhY2U6CisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1ItMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksKEVYQ19QQy0weDQsJWE2LCVkMCkKKwltb3YudwkJJjB4MjAyNCwoRVhDX1ZPRkYtMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19QQyglYTYpLChFWENfVk9GRisweDItMHg0LCVhNiwlZDApCisKKwlsZWEJCShFWENfU1ItMHg0LCVhNiwlZDApLCVhMAorCW1vdi5sCQklYTAsRVhDX1NSKCVhNikKKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisJbW92LmwJCSglc3ApKywlc3AKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyByaWdodCBub3csIGQxID0gc2l6ZSBhbmQgZDAgPSB0aGUgc3RyZy4KK2llYV9mbW92bV9kYXRhX3ByZWRlYzoKKwltb3YuYgkJJWQxLEVYQ19WT0ZGKCVhNikJIyBzdG9yZSBzdHJnCisJbW92LmIJCSVkMCwweDErRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHNpemUKKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LmwJCSglYTYpLC0oJXNwKQkJIyBtYWtlIGEgY29weSBvZiBhNgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGQxCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksLSglc3ApCSMgbWFrZSBhIGNvcHkgb2YgTmV4dCBQQworCisJY2xyLmwJCSVkMAorCW1vdi5iCQkweDErRVhDX1ZPRkYoJWE2KSwlZDAJIyBmZXRjaCBzaXplCisJbmVnLmwJCSVkMAkJCSMgZ2V0IG5lZ2F0aXZlIG9mIHNpemUKKworCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikJIyBpcyB0cmFjZSBlbmFibGVkPworCWJlcS5iCQlpZWFfZm1vdm1fZGF0YV9wMgorCisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1ItMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19QQyglYTYpLChFWENfVk9GRi0weDIsJWE2LCVkMCkKKwltb3YubAkJKCVzcCkrLChFWENfUEMtMHg0LCVhNiwlZDApCisJbW92LncJCSYweDIwMjQsKEVYQ19WT0ZGLTB4NCwlYTYsJWQwKQorCisJcGVhCQkoJWE2LCVkMCkJCSMgY3JlYXRlIGZpbmFsIHNwCisJYnJhLmIJCWllYV9mbW92bV9kYXRhX3AzCisKK2llYV9mbW92bV9kYXRhX3AyOgorCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApCisJbW92LmwJCSglc3ApKywoRVhDX1BDLCVhNiwlZDApCisJbW92LncJCSYweDAwZjAsKEVYQ19WT0ZGLCVhNiwlZDApCisKKwlwZWEJCSgweDQsJWE2LCVkMCkJCSMgY3JlYXRlIGZpbmFsIHNwCisKK2llYV9mbW92bV9kYXRhX3AzOgorCWNsci5sCQklZDEKKwltb3YuYgkJRVhDX1ZPRkYoJWE2KSwlZDEJIyBmZXRjaCBzdHJnCisKKwl0c3QuYgkJJWQxCisJYnBsLmIJCWZtXzEKKwlmbW92bS54CQkmMHg4MCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzE6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzIKKwlmbW92bS54CQkmMHg0MCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzI6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzMKKwlmbW92bS54CQkmMHgyMCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzM6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzQKKwlmbW92bS54CQkmMHgxMCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzQ6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzUKKwlmbW92bS54CQkmMHgwOCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzU6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzYKKwlmbW92bS54CQkmMHgwNCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzY6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzcKKwlmbW92bS54CQkmMHgwMiwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzc6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtX2VuZAorCWZtb3ZtLngJCSYweDAxLCgweDQrMHg4LCVhNiwlZDApCitmbV9lbmQ6CisJbW92LmwJCTB4NCglc3ApLCVkMQorCW1vdi5sCQkweDgoJXNwKSwlZDAKKwltb3YubAkJMHhjKCVzcCksJWE2CisJbW92LmwJCSglc3ApKywlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwliZXEubAkJX2Zwc3BfZG9uZQorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZWFfZm1vdm1fY3RybDoKKworCWJzci5sCQlmbW92bV9jdHJsCQkjIGxvYWQgY3RybCByZWdzCisKK2llYV9mbW92bV9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJYnRzdAkJJjB4NyxFWENfU1IoJWE2KQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlpZWFfZm1vdm1fdHJhY2UJCSMgeWVzCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCBOZXh0IFBDCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMKKyMgVGhlIGNvbnRyb2wgcmVnIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIFRoZSAiQ3VycmVudCBQQyIgZm9yIHRoZSB0cmFjZSBmcmFtZSBpcyB0aGUKKyMgUEMgc3RhY2tlZCBmb3IgVW5pbXAgRUEuIFRoZSAiTmV4dCBQQyIgaXMgaW4gRVhDX0VYVFdQVFIuCisjIEFmdGVyIGZpeGluZyB0aGUgc3RhY2sgZnJhbWUsIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KKyMKKyMJCSBVTklNUCBFQSBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MCAqICAweDBmMAkqCSogICAgQ3VycmVudAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkJKiAgICAgIFNSCSoKKyMJCQkJCSoqKioqKioqKioqKioqKioqCisjIHRoaXMgYWluJ3QgYSBwcmV0dHkgc29sdXRpb24sIGJ1dCBpdCB3b3JrczoKKyMgLXJlc3RvcmUgYTYgKG5vdCB3aXRoIHVubGspCisjIC1zaGlmdCBzdGFjayBmcmFtZSBkb3duIG92ZXIgd2hlcmUgb2xkIGE2IHVzZWQgdG8gYmUKKyMgLWFkZCBMT0NBTF9TSVpFIHRvIHN0YWNrIHBvaW50ZXIKK2llYV9mbW92bV90cmFjZToKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCW1vdi53CQlFWENfU1IrTE9DQUxfU0laRSglc3ApLDB4MCtMT0NBTF9TSVpFKCVzcCkKKwltb3YubAkJRVhDX1BDK0xPQ0FMX1NJWkUoJXNwKSwweDgrTE9DQUxfU0laRSglc3ApCisJbW92LmwJCUVYQ19FWFRXUFRSK0xPQ0FMX1NJWkUoJXNwKSwweDIrTE9DQUxfU0laRSglc3ApCisJbW92LncJCSYweDIwMjQsMHg2K0xPQ0FMX1NJWkUoJXNwKSAjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWFkZC5sCQkmTE9DQUxfU0laRSwlc3AJCSMgY2xlYXIgc3RhY2sgZnJhbWUKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBGUFUgaXMgZGlzYWJsZWQgYW5kIHNvIHdlIHNob3VsZCByZWFsbHkgaGF2ZSB0YWtlbiB0aGUgIkxpbmUKKyMgRiBFbXVsYXRvciIgZXhjZXB0aW9uLiBTbywgaGVyZSB3ZSBjcmVhdGUgYW4gOC13b3JkIHN0YWNrIGZyYW1lCisjIGZyb20gb3VyIDQtd29yZCBzdGFjayBmcmFtZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGNhbGN1bGF0ZSB0aGUgbGVuZ3RoCisjIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB0byBnZXQgdGhlICJuZXh0IFBDIi4gVGhpcyBpcyB0cml2aWFsIGZvcgorIyBpbW1lZGlhdGUgb3BlcmFuZHMgYnV0IHJlcXVpcmVzIHNvbWUgZXh0cmEgd29yayBmb3IgZm1vdm0gZHluYW1pYworIyB3aGljaCBjYW4gdXNlIG1vc3QgYWRkcmVzc2luZyBtb2Rlcy4KK2llYV9kaXNhYmxlZDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCisjIFBDIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayB0aGUgZXhjZXB0aW9uIGlzIHRoZSBQQyBpbiB0aGUgZnJhbWUKKwltb3YubAkJRVhDX1BDKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAorCisJdHN0LncJCSVkMAkJCSMgaXMgaW5zdHIgZm1vdm0/CisJYm1pLmIJCWllYV9kaXNfZm1vdm0JCSMgeWVzCisjIGluc3RydWN0aW9uIGlzIHVzaW5nIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbW1lZGlhdGUgb3BlcmFuZC4gdGhlcmVmb3JlLAorIyB0aGUgdG90YWwgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGlzIDE2IGJ5dGVzLgoraWVhX2Rpc19pbW1lZDoKKwltb3YubAkJJjB4MTAsJWQwCQkjIDE2IGJ5dGVzIG9mIGluc3RydWN0aW9uCisJYnJhLmIJCWllYV9kaXNfY29udAoraWVhX2Rpc19mbW92bToKKwlidHN0CQkmMHhlLCVkMAkJIyBpcyBpbnN0ciBmbW92bSBjdHJsCisJYm5lLmIJCWllYV9kaXNfZm1vdm1fZGF0YQkjIG5vCisjIHRoZSBpbnN0cnVjdGlvbiBpcyBhIGZtb3ZtLmwgd2l0aCAyIG9yIDMgcmVnaXN0ZXJzLgorCWJmZXh0dQkJJWQweyYxOTomM30sJWQxCisJbW92LmwJCSYweGMsJWQwCisJY21waS5iCQklZDEsJjB4NwkJIyBtb3ZlIGFsbCByZWdzPworCWJuZS5iCQlpZWFfZGlzX2NvbnQKKwlhZGRxLmwJCSYweDQsJWQwCisJYnJhLmIJCWllYV9kaXNfY29udAorIyB0aGUgaW5zdHJ1Y3Rpb24gaXMgYW4gZm1vdm0ueCBkeW5hbWljIHdoaWNoIGNhbiB1c2UgbWFueSBhZGRyZXNzaW5nCisjIG1vZGVzIGFuZCB0aHVzIGNhbiBoYXZlIHNldmVyYWwgZGlmZmVyZW50IHRvdGFsIGluc3RydWN0aW9uIGxlbmd0aHMuCisjIGNhbGwgZm1vdm1fY2FsY19lYSB3aGljaCB3aWxsIGdvIHRocm91Z2ggdGhlIGVhIGNhbGMgcHJvY2VzcyBhbmQsCisjIGFzIGEgYnktcHJvZHVjdCwgd2lsbCB0ZWxsIHVzIGhvdyBsb25nIHRoZSBpbnN0cnVjdGlvbiBpcy4KK2llYV9kaXNfZm1vdm1fZGF0YToKKwljbHIubAkJJWQwCisJYnNyLmwJCWZtb3ZtX2NhbGNfZWEKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlZDAKKwlzdWIubAkJRVhDX1BDKCVhNiksJWQwCitpZWFfZGlzX2NvbnQ6CisJbW92LncJCSVkMCxFWENfVk9GRiglYTYpCSMgc3RvcmUgc3RhY2sgc2hpZnQgdmFsdWUKKworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisjIGhlcmUsIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUgOC13b3JkIGZyYW1lIGZyb20gdGhlIDQtd29yZCBmcmFtZSwKKyMgd2l0aCB0aGUgIm5leHQgUEMiIGFzIGFkZGl0aW9uYWwgaW5mby4KKyMgdGhlIDxlYT4gZmllbGQgaXMgbGV0IGFzIHVuZGVmaW5lZC4KKwlzdWJxLmwJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgbmV3IHN0YWNrCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIG1vdmUgU1IKKwltb3YubAkJMHhlKCVzcCksMHg2KCVzcCkJIyBtb3ZlIEN1cnJlbnQgUEMKKwljbHIubAkJJWQwCisJbW92LncJCTB4MTIoJXNwKSwlZDAKKwltb3YubAkJMHg2KCVzcCksMHgxMCglc3ApCSMgbW92ZSBDdXJyZW50IFBDCisJYWRkLmwJCSVkMCwweDYoJXNwKQkJIyBtYWtlIE5leHQgUEMKKwltb3YudwkJJjB4NDAyYywweGEoJXNwKQkjIGluc2VydCBvZmZzZXQsZnJhbWUgZm9ybWF0CisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCisJYnJhLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorCisjIyMjIyMjIyMjCisKK2llYV9pYWNjOgorCW1vdmMJCSVwY3IsJWQwCisJYnRzdAkJJjB4MSwlZDAKKwlibmUuYgkJaWVhX2lhY2NfY29udAorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxIG9uIHN0YWNrCitpZWFfaWFjY19jb250OgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJc3VicS53CQkmMHg4LCVzcAkJIyBtYWtlIHN0YWNrIGZyYW1lIGJpZ2dlcgorCW1vdi5sCQkweDgoJXNwKSwoJXNwKQkJIyBzdG9yZSBTUixoaShQQykKKwltb3YudwkJMHhjKCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKKwltb3YubAkJMHgyKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBlYQorCW1vdi5sCQkmMHgwOTQyODAwMSwweGMoJXNwKQkjIHN0b3JlIGZzbHcKKworaWVhX2FjY19kb25lOgorCWJ0c3QJCSYweDUsKCVzcCkJCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCWllYV9hY2NfZG9uZTIJCSMgdXNlcgorCWJzZXQJCSYweDIsMHhkKCVzcCkJCSMgc2V0IHN1cGVydmlzb3IgVE0gYml0CisKK2llYV9hY2NfZG9uZTI6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCitpZWFfZGFjYzoKKwlsZWEJCS1MT0NBTF9TSVpFKCVhNiksJXNwCisKKwltb3ZjCQklcGNyLCVkMQorCWJ0c3QJCSYweDEsJWQxCisJYm5lLmIJCWllYV9kYWNjX2NvbnQKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEgb24gc3RhY2sKKwlmbW92bS5sCQlMT0NBTF9TSVpFK1VTRVJfRlBDUiglc3ApLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCitpZWFfZGFjY19jb250OgorCW1vdi5sCQkoJWE2KSwlYTYKKworCW1vdi5sCQkweDQrTE9DQUxfU0laRSglc3ApLC0weDgrMHg0K0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkweDgrTE9DQUxfU0laRSglc3ApLC0weDgrMHg4K0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkmMHg0MDA4LC0weDgrMHhhK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi5sCQklYTAsLTB4OCsweGMrTE9DQUxfU0laRSglc3ApCisJbW92LncJCSVkMCwtMHg4KzB4MTArTE9DQUxfU0laRSglc3ApCisJbW92LncJCSYweDAwMDEsLTB4OCsweDEyK0xPQ0FMX1NJWkUoJXNwKQorCisJbW92bS5sCQlMT0NBTF9TSVpFK0VYQ19EUkVHUyglc3ApLCYweDAzMDMgIyByZXN0b3JlIGQwLWQxL2EwLWExCisJYWRkLncJCSZMT0NBTF9TSVpFLTB4NCwlc3AKKworCWJyYS5iCQlpZWFfYWNjX2RvbmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9vcGVycigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBPcGVyciBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgT3BlcmFuZCBFcnJvciBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlfcmVhbF9vcGVycigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gb3BlcnIgaGFuZGxlcgkjCisjCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHN0b3JlIGRhdGEgdG8gbWVtIChvcGNsYXNzIDMpCSMKKyMJc3RvcmVfZHJlZ197Yix3LGx9KCkgLSBzdG9yZSBkYXRhIHRvIGRhdGEgcmVnZmlsZSAob3BjbGFzcyAzKQkjCisjCWZhY2Nfb3V0X3tiLHcsbH0oKSAtIHN0b3JlIHRvIG1lbW9yeSB0b29rIGFjY2VzcyBlcnJvciAob3BjbCAzKQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vIGFjY2VzcyBlcnJvcjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfb3BlcnIoKS4gQnV0LCBvbiB0aGUgMDYwLAkjCisjIGZvciBvcGNsYXNzIHplcm8gYW5kIHR3byBpbnN0cnVjdGlvbiB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCisjIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIworIyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdGVkLiBUaGlzIGhhbmRsZXIgY2FsbHMgZml4X3NrZXdlZF9vcHMoKSB0bwkjCisjIGRvIGp1c3QgdGhpcyBhbmQgdGhlbiBleGl0cyB0aHJvdWdoIF9yZWFsX29wZXJyKCkuCQkJIworIwlGb3Igb3BjbGFzcyAzIGluc3RydWN0aW9ucywgdGhlIDA2MCBkb2Vzbid0IHN0b3JlIHRoZSBkZWZhdWx0CSMKKyMgb3BlcnIgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIworIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBiZWZvcmUgZmluYWxseSBleGl0aW5nIHRocm91Z2gJIworIyBfcmVhbF9pbmV4KCkuIFRoZSBtb3ZlIG91dCwgaWYgdG8gbWVtb3J5LCBpcyBwZXJmb3JtZWQgdXNpbmcJCSMKKyMgX21lbV93cml0ZSgpICJjYWxsb3V0IiByb3V0aW5lcyB0aGF0IG1heSByZXR1cm4gYSBmYWlsaW5nIHJlc3VsdC4JIworIyBJbiB0aGlzIHNwZWNpYWwgY2FzZSwgdGhlIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggZmFjY19vdXQoKQkjCisjIHdoaWNoIGNyZWF0ZXMgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgb3BlcnIJIworIyBzdGFjayBmcmFtZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX29wZXJyCitfZnBzcF9vcGVycjoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS5iCQlmb3BlcnJfb3V0CQkjIGZtb3ZlIG91dAorCisKKyMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KKyMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIGluZmluaXR5IG9yCisjIGRlbm9ybSBvcGVyYW5kIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4gTkFOcyBhbHNvIGJlY29tZSBza2V3ZWQsIGJ1dCBjYW4ndAorIyBjYXVzZSBhbiBvcGVyciBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVtIGhlcmUuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKK2ZvcGVycl9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9vcGVycgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKKyMgb3BlcmFuZCBlcnJvciBleGNlcHRpb25zLiB3ZSBkbyB0aGlzIGhlcmUgYmVmb3JlIHBhc3NpbmcgY29udHJvbCB0bworIyB0aGUgdXNlciBvcGVyYW5kIGVycm9yIGhhbmRsZXIuCisjCisjIGJ5dGUsIHdvcmQsIGFuZCBsb25nIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCisjIHRocm91Z2ggaGVyZS4gd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCisjIG9wZXJhbmQgYW5kIHNhdmUgdGhlIGFwcHJvcHJpYXRlIG1pbmltdW0gb3IgbWF4aW11bSBpbnRlZ2VyIHZhbHVlCisjIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgorIworIyBhbHRob3VnaCBwYWNrZWQgb3BjbGFzcyB0aHJlZSBvcGVyYXRpb25zIGNhbiB0YWtlIG9wZXJhbmQgZXJyb3IKKyMgZXhjZXB0aW9ucywgdGhleSB3b24ndCBwYXNzIHRocm91Z2ggaGVyZSBzaW5jZSB0aGV5IGFyZSBjYXVnaHQKKyMgZmlyc3QgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgZm9ybWF0IGV4Y2VwdGlvbiBoYW5kbGVyLiB0aGF0IGhhbmRsZXIKKyMgc2VuZHMgdGhlbSBkaXJlY3RseSB0byBfcmVhbF9vcGVycigpIGlmIG5lY2Vzc2FyeS4KKyMKK2ZvcGVycl9vdXQ6CisKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQxCSMgZmV0Y2ggZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJY21waS53CQklZDEsJjB4N2ZmZgorCWJuZS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCisjIHRoZSBvcGVyYW5kIGlzIGVpdGhlciBhbiBpbmZpbml0eSBvciBhIFFOQU4uCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCisJYm5lLmIJCWZvcGVycl9vdXRfcW5hbgorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEKKwlhbmRpLmwJCSYweDdmZmZmZmZmLCVkMQorCWJlcS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCitmb3BlcnJfb3V0X3FuYW46CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLExfU0NSMSglYTYpCisJYnJhLmIJCWZvcGVycl9vdXRfam1wCisKK2ZvcGVycl9vdXRfbm90X3FuYW46CisJbW92LmwJCSYweDdmZmZmZmZmLCVkMQorCXRzdC5iCQlGUF9TUkNfRVgoJWE2KQorCWJwbC5iCQlmb3BlcnJfb3V0X25vdF9xbmFuMgorCWFkZHEubAkJJjB4MSwlZDEKK2ZvcGVycl9vdXRfbm90X3FuYW4yOgorCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikKKworZm9wZXJyX291dF9qbXA6CisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZXh0cmFjdCBkc3QgZm9ybWF0IGZpZWxkCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgPGVhPiBtb2RlLHJlZworCW1vdi53CQkodGJsX29wZXJyLmIsJXBjLCVkMC53KjIpLCVhMAorCWptcAkJKHRibF9vcGVyci5iLCVwYywlYTApCisKK3RibF9vcGVycjoKKwlzaG9ydAkJZm9wZXJyX291dF9sIC0gdGJsX29wZXJyICMgbG9uZyB3b3JkIGludGVnZXIKKwlzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgc2dsIHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZvcGVycl9leGl0ICAtIHRibF9vcGVyciAjIHBhY2tlZCB3b24ndCBlbnRlciBoZXJlCisJc2hvcnQJCWZvcGVycl9vdXRfdyAtIHRibF9vcGVyciAjIHdvcmQgaW50ZWdlcgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZvcGVycl9vdXRfYiAtIHRibF9vcGVyciAjIGJ5dGUgaW50ZWdlcgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBwYWNrZWQgd29uJ3QgZW50ZXIgaGVyZQorCitmb3BlcnJfb3V0X2I6CisJbW92LmIJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF9iX3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X2Jfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCitmb3BlcnJfb3V0X3c6CisJbW92LncJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF93X3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF93CQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X3dfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfdwkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCitmb3BlcnJfb3V0X2w6CisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF9sX3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X2xfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3NuYW4oKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgU05BTiBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgU2lnbmFsbGluZyBOQU4gZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJX3JlYWxfc25hbigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gU05BTiBoYW5kbGVyCSMKKyMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gc3RvcmUgZGF0YSB0byBtZW0gKG9wY2xhc3MgMykJIworIwlzdG9yZV9kcmVnX3tiLHcsbH0oKSAtIHN0b3JlIGRhdGEgdG8gZGF0YSByZWdmaWxlIChvcGNsYXNzIDMpCSMKKyMJZmFjY19vdXRfe2IsdyxsLGQseH0oKSAtIHN0b3JlIHRvIG1lbSB0b29rIGFjYyBlcnJvciAob3BjbCAzKQkjCisjCV9jYWxjX2VhX2ZvdXQoKSAtIGZpeCBBbiBpZiA8ZWE+IGlzIC0oKSBvciAoKSs7IGFsc28gZ2V0IDxlYT4JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBmcmFtZQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlObyBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfc25hbigpLiBCdXQsIG9uIHRoZSAwNjAsCSMKKyMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9ucyB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCisjIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIworIyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdGVkLiBUaGlzIGhhbmRsZXIgY2FsbHMgZml4X3NrZXdlZF9vcHMoKSB0bwkjCisjIGRvIGp1c3QgdGhpcyBhbmQgdGhlbiBleGl0cyB0aHJvdWdoIF9yZWFsX3NuYW4oKS4JCQkjCisjCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIworIyBTTkFOIHJlc3VsdCBvdXQgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgZmlsZSBhcyBpdCBzaG91bGQuCQkjCisjIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJlZm9yZSBmaW5hbGx5IGV4aXRpbmcgdGhyb3VnaAkjCisjIF9yZWFsX3NuYW4oKS4gVGhlIG1vdmUgb3V0LCBpZiB0byBtZW1vcnksIGlzIHBlcmZvcm1lZCB1c2luZwkJIworIyBfbWVtX3dyaXRlKCkgImNhbGxvdXQiIHJvdXRpbmVzIHRoYXQgbWF5IHJldHVybiBhIGZhaWxpbmcgcmVzdWx0LgkjCisjIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGUgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCBmYWNjX291dCgpCSMKKyMgd2hpY2ggY3JlYXRlcyBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBTTkFOCSMKKyMgc3RhY2sgZnJhbWUuCQkJCQkJCQkjCisjCUZvciB0aGUgY2FzZSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcyAzIGluc3RydWN0aW9uLAkjCisjIGlmIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZyBtb2RlIHdhcyAtKCkgb3IgKCkrLCB0aGVuIHRoZSBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgbXVzdCBnZXQgdXBkYXRlZCBieSBjYWxsaW5nIF9jYWxjX2VhX2ZvdXQoKS4gSWYgdGhlIDxlYT4JIworIyB3YXMgLShhNykgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoZW4gdGhlIGV4Y2VwdGlvbiBmcmFtZSBjdXJyZW50bHkJIworIyBvbiB0aGUgc3lzdGVtIHN0YWNrIG11c3QgYmUgY2FyZWZ1bGx5IG1vdmVkICJkb3duIiB0byBtYWtlIHJvb20JIworIyBmb3IgdGhlIG9wZXJhbmQgYmVpbmcgbW92ZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3Bfc25hbgorX2Zwc3Bfc25hbjoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmc25hbl9vdXQJCSMgZm1vdmUgb3V0CisKKworIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgorIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgaW5maW5pdHkgb3IKKyMgZGVub3JtIG9wZXJhbmQgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LiBOQU5zIGFsc28gYmVjb21lIHNrZXdlZCBhbmQgbXVzdCBiZQorIyBmaXhlZCBoZXJlLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCitmc25hbl9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9zbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAorIyBzbmFuIGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCisjIHRoZSB1c2VyIHNuYW4gaGFuZGxlci4KKyMKKyMgYnl0ZSwgd29yZCwgbG9uZywgYW5kIHBhY2tlZCBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcworIyB0aHJvdWdoIGhlcmUuIHNpbmNlIHBhY2tlZCBmb3JtYXQgb3BlcmF0aW9ucyBhbHJlYWR5IHdlcmUgaGFuZGxlZCBieQorIyBmcHNwX3Vuc3VwcCgpLCB0aGVuIHdlIG5lZWQgdG8gZG8gbm90aGluZyBlbHNlIGZvciB0aGVtIGhlcmUuCisjIGZvciBieXRlLCB3b3JkLCBhbmQgbG9uZywgd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCisjIG9wZXJhbmQgYW5kIHNhdmUgdGhlIGFwcHJvcHJpYXRlIG1pbmltdW0gb3IgbWF4aW11bSBpbnRlZ2VyIHZhbHVlCisjIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgorIworZnNuYW5fb3V0OgorCisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZXh0cmFjdCBkc3QgZm9ybWF0IGZpZWxkCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgPGVhPiBtb2RlLHJlZworCW1vdi53CQkodGJsX3NuYW4uYiwlcGMsJWQwLncqMiksJWEwCisJam1wCQkodGJsX3NuYW4uYiwlcGMsJWEwKQorCit0Ymxfc25hbjoKKwlzaG9ydAkJZnNuYW5fb3V0X2wgLSB0Ymxfc25hbiAjIGxvbmcgd29yZCBpbnRlZ2VyCisJc2hvcnQJCWZzbmFuX291dF9zIC0gdGJsX3NuYW4gIyBzZ2wgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZzbmFuX291dF94IC0gdGJsX3NuYW4gIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCXRibF9zbmFuICAgIC0gdGJsX3NuYW4gIyBwYWNrZWQgbmVlZHMgbm8gaGVscAorCXNob3J0CQlmc25hbl9vdXRfdyAtIHRibF9zbmFuICMgd29yZCBpbnRlZ2VyCisJc2hvcnQJCWZzbmFuX291dF9kIC0gdGJsX3NuYW4gIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZzbmFuX291dF9iIC0gdGJsX3NuYW4gIyBieXRlIGludGVnZXIKKwlzaG9ydAkJdGJsX3NuYW4gICAgLSB0Ymxfc25hbiAjIHBhY2tlZCBuZWVkcyBubyBoZWxwCisKK2ZzbmFuX291dF9iOgorCW1vdi5iCQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIGJ5dGUgb2YgU05BTgorCWJzZXQJCSY2LCVkMAkJCSMgc2V0IFNOQU4gYml0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X2JfZG4JCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfYgkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfYl9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF93OgorCW1vdi53CQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIHdvcmQgb2YgU05BTgorCWJzZXQJCSYxNCwlZDAJCQkjIHNldCBTTkFOIGJpdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF93X2RuCQkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorZnNuYW5fb3V0X3dfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX3cJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfbDoKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciBsb25nd29yZCBvZiBTTkFOCisJYnNldAkJJjMwLCVkMAkJCSMgc2V0IFNOQU4gYml0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X2xfZG4JCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfbF9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF9zOgorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF9kX2RuCQkjIHllcworCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KKwlvcmkubAkJJjB4N2ZjMDAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQorCWxzci5sCQkmMHg4LCVkMQkJIyBzaGlmdCBtYW50aXNzYSBmb3Igc2dsCisJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfZF9kbjoKKwltb3YubAkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggU05BTiBzaWduCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCisJb3JpLmwJCSYweDdmYzAwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0CisJbW92LmwJCSVkMSwtKCVzcCkKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQorCWxzci5sCQkmMHg4LCVkMQkJIyBzaGlmdCBtYW50aXNzYSBmb3Igc2dsCisJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCisJbW92LmwJCSglc3ApKywlZDEKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF9kOgorCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KKwlvcmkubAkJJjB4N2ZmODAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQorCW1vdi5sCQklZDAsRlBfU0NSMF9FWCglYTYpCSMgc3RvcmUgdG8gdGVtcCBzcGFjZQorCW1vdi5sCQkmMTEsJWQwCQkJIyBsb2FkIHNoaWZ0IGFtdAorCWxzci5sCQklZDAsJWQxCisJb3IubAkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGNyZWF0ZSBkYmwgaGkKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQorCWFuZGkubAkJJjB4MDAwMDA3ZmYsJWQxCisJcm9yLmwJCSVkMCwlZDEKKwltb3YubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIHN0b3JlIHRvIHRlbXAgc3BhY2UKKwltb3YubAkJRlBfU1JDX0xPKCVhNiksJWQxCSMgbG9hZCBsbyBtYW50aXNzYQorCWxzci5sCQklZDAsJWQxCisJb3IubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIGNyZWF0ZSBkYmwgbG8KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IHNpemUgb2YgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0CisKKyMgZm9yIGV4dGVuZGVkIHByZWNpc2lvbiwgaWYgdGhlIGFkZHJlc3NpbmcgbW9kZSBpcyBwcmUtZGVjcmVtZW50IG9yCisjIHBvc3QtaW5jcmVtZW50LCB0aGVuIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGRpZCBub3QgZ2V0IHVwZGF0ZWQuCisjIGluIGFkZGl0aW9uLCBmb3IgcHJlLWRlY3JlbWVudCwgdGhlIHN0YWNrZWQgPGVhPiBpcyBpbmNvcnJlY3QuCitmc25hbl9vdXRfeDoKKwljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyIHNwZWNpYWwgY2FzZSBmbGFnCisKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksRlBfU0NSMF9FWCglYTYpCisJY2xyLncJCTIrRlBfU0NSMCglYTYpCisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMAorCWJzZXQJCSYzMCwlZDAKKwltb3YubAkJJWQwLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxGUF9TQ1IwX0xPKCVhNikKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyBzdXBlcnZpc29yIG1vZGUgZXhjZXB0aW9uPworCWJuZS5iCQlmc25hbl9vdXRfeF9zCQkjIHllcworCisJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjayBmb3IgY2FsY19lYSgpCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgorCW1vdi5sCQklYTAsJWExCisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AJCSMgcmVzdG9yZSB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikKKworZnNuYW5fb3V0X3hfc2F2ZToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdnEubAkJJjB4YywlZDAJCSMgcGFzczogc2l6ZSBvZiBleHRlbmRlZAorCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfeAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF94X3M6CisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgorCW1vdi5sCQklYTAsJWExCisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KKworCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgaXMgPGVhPiBtb2RlIC0oYTcpPworCWJuZS5iCQlmc25hbl9vdXRfeF9zYXZlCSMgbm8KKworIyB0aGUgb3BlcmF0aW9uIHdhcyAiZm1vdmUueCBTTkFOLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfUEMrMHgyKCVzcCksTE9DQUxfU0laRStFWENfUEMrMHgyLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NDUjBfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUiglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1BDKzB4Miglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9MTyglc3ApLExPQ0FMX1NJWkUrRVhDX0VBKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKwlicmEubAkJX3JlYWxfc25hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2luZXgoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgSW5leGFjdCBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgSW5leGFjdCBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJc21vdmNyKCkgLSBlbXVsYXRlIGFuICJmbW92Y3IiIGluc3RydWN0aW9uCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gaW5leGFjdCBoYW5kbGVyCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgSW5leGFjdCBleGNlcHRpb24gZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBJbmV4YWN0IGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfaW5leCgpLiBCdXQsIG9uIHRoZSAwNjAsCSMKKyMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9uIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKKyMgaGFyZHdhcmUgZG9lc24ndCBzdG9yZSB0aGUgY29ycmVjdCByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uIEZQCSMKKyMgcmVnaXN0ZXIgYXMgZGlkIHRoZSAnMDQwIGFuZCAnODgxLzIuIFRoaXMgaGFuZGxlciBtdXN0IGVtdWxhdGUgdGhlCSMKKyMgaW5zdHJ1Y3Rpb24gaW4gb3JkZXIgdG8gZ2V0IHRoaXMgdmFsdWUgYW5kIHRoZW4gc3RvcmUgaXQgdG8gdGhlCSMKKyMgY29ycmVjdCByZWdpc3RlciBiZWZvcmUgY2FsbGluZyBfcmVhbF9pbmV4KCkuCQkJCSMKKyMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCisjIGluZXhhY3QgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIworIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBieSBjYWxsaW5nIGZvdXQoKSBiZWZvcmUgZmluYWxseQkjCisjIGV4aXRpbmcgdGhyb3VnaCBfcmVhbF9pbmV4KCkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfaW5leAorX2Zwc3BfaW5leDoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmaW5leF9vdXQJCSMgZm1vdmUgb3V0CisKKworIyB0aGUgaGFyZHdhcmUsIGZvciAiZmFicyIgYW5kICJmbmVnIiB3LyBhIGxvbmcgc291cmNlIGZvcm1hdCwgcHV0cyB0aGUKKyMgbG9uZ3dvcmQgaW50ZWdlciBkaXJlY3RseSBpbnRvIHRoZSB1cHBlciBsb25nd29yZCBvZiB0aGUgbWFudGlzc2EgYWxvbmcKKyMgdy8gYW4gZXhwb25lbnQgdmFsdWUgb2YgMHg0MDFlLiB3ZSBjb252ZXJ0IHRoaXMgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGhlcmUuCisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZmV0Y2ggaW5zdHIgc2l6ZQorCWJuZS5iCQlmaW5leF9jb250CQkjIGluc3RyIHNpemUgaXMgbm90IGxvbmcKKwljbXBpLncJCUZQX1NSQ19FWCglYTYpLCYweDQwMWUJIyBpcyBleHBvbmVudCAweDQwMWU/CisJYm5lLmIJCWZpbmV4X2NvbnQJCSMgbm8KKwlmbW92LmwJCSYweDAsJWZwY3IKKwlmbW92LmwJCUZQX1NSQ19ISSglYTYpLCVmcDAJIyBsb2FkIGludGVnZXIgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCSMgc3RvcmUgaW50ZWdlciBhcyBleHRlbmRlZCBwcmVjaXNpb24KKwltb3YudwkJJjB4ZTAwMSwweDIrRlBfU1JDKCVhNikKKworZmluZXhfY29udDoKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworIyBIZXJlLCB3ZSB6ZXJvIHRoZSBjY29kZSBhbmQgZXhjZXB0aW9uIGJ5dGUgZmllbGQgc2luY2Ugd2UncmUgZ29pbmcgdG8KKyMgZW11bGF0ZSB0aGUgd2hvbGUgaW5zdHJ1Y3Rpb24uIE5vdGljZSwgdGhvdWdoLCB0aGF0IHdlIGRvbid0IGtpbGwgdGhlCisjIElORVgxIGJpdC4gVGhpcyBpcyBiZWNhdXNlIGEgcGFja2VkIG9wIGhhcyBsb25nIHNpbmNlIGJlZW4gY29udmVydGVkCisjIHRvIGV4dGVuZGVkIGJlZm9yZSBhcnJpdmluZyBoZXJlLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gcmV0YWluIHRoZQorIyBJTkVYMSBiaXQgZnJvbSB3aGVuIHRoZSBvcGVyYW5kIHdhcyBmaXJzdCBjb252ZXJ0ZWQuCisJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYwOiY2fSwlZDEgIyBleHRyYWN0IHVwcGVyIDYgb2YgY21kcmVnCisJY21waS5iCQklZDEsJjB4MTcJCSMgaXMgb3AgYW4gZm1vdmVjcj8KKwliZXEudwkJZmluZXhfZm1vdmNyCQkjIHllcworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQorCisjIGJpdHMgZm91ciBhbmQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGUgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYworIyBvcGVyYXRpb25zIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX2luZXgoKS4gcmVtZW1iZXIgdGhhdCBmY21wIGFuZCBmdHN0CisjIHdpbGwgbmV2ZXIgdGFrZSB0aGlzIGV4Y2VwdGlvbiwgYnV0IGZzaW5jb3Mgd2lsbC4KKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmaW5leF9leHRyYWN0CQkjIG1vbmFkaWMKKworCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gYW4gZnNpbmNvcz8KKwlibmUuYgkJZmluZXhfZXh0cmFjdAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZmluZXhfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZmluZXhfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmaW5leF9leHRyYWN0OgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIyB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIGVtdWxhdGVkLiB0aGUgcmVzdWx0IGlzIGluIGZwMC4KK2ZpbmV4X3NhdmU6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlzdG9yZV9mcHJlZworCitmaW5leF9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9pbmV4CisKK2ZpbmV4X2Ztb3ZjcjoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMsbW9kZQorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLmwJCSYweDAwMDAwMDdmLCVkMQkJIyBwYXNzIHJvbSBvZmZzZXQKKwlic3IubAkJc21vdmNyCisJYnJhLmIJCWZpbmV4X3NhdmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIG1lbW9yeSBvbiBlbmFibGVkCisjIGluZXhhY3QgZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KKyMgdGhlIHVzZXIgaW5leGFjdCBoYW5kbGVyLgorIworIyBieXRlLCB3b3JkLCBhbmQgbG9uZyBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcworIyB0aHJvdWdoIGhlcmUuIHNvIGNhbiBkb3VibGUgYW5kIHNpbmdsZSBwcmVjaXNpb24uCisjIGFsdGhvdWdoIHBhY2tlZCBvcGNsYXNzIHRocmVlIG9wZXJhdGlvbnMgY2FuIHRha2UgaW5leGFjdAorIyBleGNlcHRpb25zLCB0aGV5IHdvbid0IHBhc3MgdGhyb3VnaCBoZXJlIHNpbmNlIHRoZXkgYXJlIGNhdWdodAorIyBmaXJzdCBieSB0aGUgdW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgZXhjZXB0aW9uIGhhbmRsZXIuIHRoYXQgaGFuZGxlcgorIyBzZW5kcyB0aGVtIGRpcmVjdGx5IHRvIF9yZWFsX2luZXgoKSBpZiBuZWNlc3NhcnkuCisjCitmaW5leF9vdXQ6CisKKwltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNyYyBpcyBhIE5PUk0KKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYyxtb2RlCisKKwlhbmRpLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwlic3IubAkJZm91dAkJCSMgc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwlicmEuYgkJZmluZXhfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2R6KCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIERaIGV4Y2VwdGlvbi4JCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcJIworIwl0aGUgRlAgRFogZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkIGZyb20gbWVtb3J5CSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBmc2F2ZSBvcGVyYW5kCQkJCSMKKyMJX3JlYWxfZHooKSAtICJjYWxsb3V0IiBleGl0IHBvaW50IGZyb20gRlAgRFogaGFuZGxlcgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBEWiBleGNlcHRpb24gc3RhY2suCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZC4JCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIERaIGV4Y2VwdGlvbiBzdGFjay4JCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNvdXJjZSBvcGVyYW5kLgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIERaIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbCBpcyB0bwkjCisjIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfZHooKS4gQnV0LCBvbiB0aGUgMDYwLCB3aGVuIHRoZQkjCisjIGV4Y2VwdGlvbiBpcyB0YWtlbiwgdGhlIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIG1heQkjCisjIGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcyBhbmQgbmVlZCB0byBiZSBhZGp1c3RlZC4gU28sIHRoaXMgcGFja2FnZQkjCisjIGFkanVzdHMgdGhlIG9wZXJhbmQgdXNpbmcgZml4X3NrZXdlZF9vcHMoKSBhbmQgdGhlbiBicmFuY2hlcyB0bwkjCisjIF9yZWFsX2R6KCkuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9kegorX2Zwc3BfZHo6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCisjIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSB6ZXJvCisjIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworZmR6X2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisJYnJhLmwJCV9yZWFsX2R6CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfZmxpbmUoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgIkxpbmUgRiBlbXVsYXRvciIgZXhjLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCSJMaW5lIEYgRW11bGF0b3IiIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfdW5pbXAoKSAtIGhhbmRsZSAiRlAgVW5pbXBsZW1lbnRlZCIgZXhjZXB0aW9ucwkJIworIwlfcmVhbF9mcHVfZGlzYWJsZWQoKSAtIGhhbmRsZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb25zCQkjCisjCV9yZWFsX2ZsaW5lKCkgLSBoYW5kbGUgIkZMSU5FIiBleGNlcHRpb25zCQkJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgYSAiTGluZSBGIEVtdWxhdG9yIiBleGNlcHRpb24JIworIwkgIHN0YWNrIGZyYW1lLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlXaGVuIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uIG9jY3VycywgdGhlcmUgYXJlIDMgcG9zc2libGUJIworIyBleGNlcHRpb24gdHlwZXMsIGRlbm90ZWQgYnkgdGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmb3JtYXQgbnVtYmVyOgkjCisjCSgxKSBGUFUgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiAoNiB3b3JkIHN0YWNrIGZyYW1lKQkJIworIwkoMikgRlBVIGRpc2FibGVkICg4IHdvcmQgc3RhY2sgZnJhbWUpCQkJCSMKKyMJKDMpIExpbmUgRiAoNCB3b3JkIHN0YWNrIGZyYW1lKQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyBtb2R1bGUgZGV0ZXJtaW5lcyB3aGljaCBhbmQgZm9ya3MgdGhlIGZsb3cgb2ZmIHRvIHRoZQkjCisjIGFwcHJvcHJpYXRlICJjYWxsb3V0IiAoZm9yICJkaXNhYmxlZCIgYW5kICJMaW5lIEYiKSBvciB0byB0aGUJCSMKKyMgY29ycmVjdCBlbXVsYXRpb24gY29kZSAoZm9yICJGUFUgdW5pbXBsZW1lbnRlZCIpLgkJCSMKKyMJVGhpcyBjb2RlIGFsc28gbXVzdCBjaGVjayBmb3IgImZtb3ZlY3IiIGluc3RydWN0aW9ucyB3LyBhCSMKKyMgbm9uLXplcm8gPGVhPiBmaWVsZC4gVGhlc2UgbWF5IGdldCBmbGFnZ2VkIGFzICJMaW5lIEYiIGJ1dCBzaG91bGQJIworIyByZWFsbHkgYmUgZmxhZ2dlZCBhcyAiRlBVIFVuaW1wbGVtZW50ZWQiLiAoVGhpcyBpcyBhICJmZWF0dXJlIiBvbgkjCisjIHRoZSAnMDYwLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfZmxpbmUKK19mcHNwX2ZsaW5lOgorCisjIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGV4Y2VwdGlvbiBpcyBhICJGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIgorIyBleGNlcHRpb24uIGlmIHNvLCBicmFuY2ggZGlyZWN0bHkgdG8gdGhhdCBoYW5kbGVyJ3MgZW50cnkgcG9pbnQuCisJY21waS53CQkweDYoJXNwKSwmMHgyMDJjCisJYmVxLmwJCV9mcHNwX3VuaW1wCisKKyMgY2hlY2sgdG8gc2VlIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQuIGlmIHNvLCBqdW1wIHRvIHRoZSBPUyBlbnRyeQorIyBwb2ludCBmb3IgdGhhdCBjb25kaXRpb24uCisJY21waS53CQkweDYoJXNwKSwmMHg0MDJjCisJYmVxLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorCisjIHRoZSBleGNlcHRpb24gd2FzIGFuICJGLUxpbmUgSWxsZWdhbCIgZXhjZXB0aW9uLiB3ZSBjaGVjayB0byBzZWUKKyMgaWYgdGhlIEYtTGluZSBpbnN0cnVjdGlvbiBpcyBhbiAiZm1vdmVjciIgdy8gYSBub24temVybyA8ZWE+LiBpZgorIyBzbywgY29udmVydCB0aGUgRi1MaW5lIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSB0byBhbiBGUCBVbmltcGxlbWVudGVkCisjIEluc3RydWN0aW9uIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBlbHNlIGJyYW5jaCB0byB0aGUgT1MgZW50cnkKKyMgcG9pbnQgZm9yIHRoZSBGLUxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCisJbW92LmwJCUVYQ19QQyglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gd29yZHMKKworCWJmZXh0dQkJJWQweyYwOiYxMH0sJWQxCQkjIGlzIGl0IGFuIGZtb3ZlY3I/CisJY21waS53CQklZDEsJjB4MDNjOAorCWJuZS5iCQlmbGluZV9mbGluZQkJIyBubworCisJYmZleHR1CQklZDB7JjE2OiY2fSwlZDEJCSMgaXMgaXQgYW4gZm1vdmVjcj8KKwljbXBpLmIJCSVkMSwmMHgxNworCWJuZS5iCQlmbGluZV9mbGluZQkJIyBubworCisjIGl0J3MgYW4gZm1vdmVjciB3LyBhIG5vbi16ZXJvIDxlYT4gdGhhdCBoYXMgZW50ZXJlZCB0aHJvdWdoCisjIHRoZSBGLUxpbmUgSWxsZWdhbCBleGNlcHRpb24uCisjIHNvLCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIEYtTGluZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaW50byBhbgorIyBGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIHN0YWNrIGZyYW1lIGFuZCBqdW1wIHRvIHRoYXQgZW50cnkKKyMgcG9pbnQuCisjCisjIGJ1dCwgaWYgdGhlIEZQVSBpcyBkaXNhYmxlZCwgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIEZQVSBkaWFibGVkCisjIGVudHJ5IHBvaW50LgorCW1vdmMJCSVwY3IsJWQwCisJYnRzdAkJJjB4MSwlZDAKKwliZXEuYgkJZmxpbmVfZm1vdmNyCisKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCXN1Yi5sCQkmMHg4LCVzcAkJIyBtYWtlIHJvb20gZm9yICJOZXh0IFBDIiwgPGVhPgorCW1vdi53CQkweDgoJXNwKSwoJXNwKQorCW1vdi5sCQkweGEoJXNwKSwweDIoJXNwKQkjIG1vdmUgIkN1cnJlbnQgUEMiCisJbW92LncJCSYweDQwMmMsMHg2KCVzcCkKKwltb3YubAkJMHgyKCVzcCksMHhjKCVzcCkKKwlhZGRxLmwJCSYweDQsMHgyKCVzcCkJCSMgc2V0ICJOZXh0IFBDIgorCisJYnJhLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorCitmbGluZV9mbW92Y3I6CisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlmbW92LmwJCTB4Miglc3ApLCVmcGlhcgkJIyBzZXQgY3VycmVudCBQQworCWFkZHEubAkJJjB4NCwweDIoJXNwKQkJIyBzZXQgTmV4dCBQQworCisJbW92LmwJCSglc3ApLC0oJXNwKQorCW1vdi5sCQkweDgoJXNwKSwweDQoJXNwKQorCW1vdi5iCQkmMHgyMCwweDYoJXNwKQorCisJYnJhLmwJCV9mcHNwX3VuaW1wCisKK2ZsaW5lX2ZsaW5lOgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX2ZsaW5lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfdW5pbXAoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgIlVuaW1wbGVtZW50ZWQJIworIwkJICAgICAgIEluc3RydWN0aW9uIiBleGNlcHRpb24uCQkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIC0gcmVhZCBpbnN0cnVjdGlvbiB3b3JkL2xvbmd3b3JkCSMKKyMJbG9hZF9mb3AoKSAtIGxvYWQgc3JjL2RzdCBvcHMgZnJvbSBtZW1vcnkgYW5kL29yIEZQIHJlZ2ZpbGUJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl0YmxfdHJhbnMgLSBhZGRyIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3IgdHJuc2NuZGxzCSMKKyMJX3JlYWxfYWNjZXNzKCkgLSAiY2FsbG91dCIgZm9yIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGVuYWJsZWQgZXhjZXB0aW9uCQkjCisjCXNtb3ZjcigpIC0gZW11bGF0ZSAiZm1vdmVjciIgaW5zdHJ1Y3Rpb24JCQkjCisjCWZ1bmltcF9za2V3KCkgLSBhZGp1c3QgZnNhdmUgc3JjIG9wcyB0byAiaW5jb3JyZWN0IiB2YWx1ZQkjCisjCV9mdHJhcGNjKCkgLSBlbXVsYXRlIGFuICJmdHJhcGNjIiBpbnN0cnVjdGlvbgkJCSMKKyMJX2ZkYmNjKCkgLSBlbXVsYXRlIGFuICJmZGJjYyIgaW5zdHJ1Y3Rpb24JCQkjCisjCV9mc2NjKCkgLSBlbXVsYXRlIGFuICJmc2NjIiBpbnN0cnVjdGlvbgkJCQkjCisjCV9yZWFsX3RyYXAoKSAtICJjYWxsb3V0IiBmb3IgVHJhcCBleGNlcHRpb24JCQkjCisjCV9yZWFsX2JzdW4oKSAtICJjYWxsb3V0IiBmb3IgZW5hYmxlZCBCc3VuIGV4Y2VwdGlvbgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSAiVW5pbXBsZW1lbnRlZCBJbnN0ciIgc3RrIGZyYW1lCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIGFjY2VzcyBlcnJvcjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZQkjCisjCUlmIFRyYWNlIGV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCisjCS0gQ29ycmVjdCByZXN1bHQgaGFzIGJlZW4gc3RvcmVkIGFzIGFwcHJvcHJpYXRlCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlcmUgYXJlIHR3byBtYWluIGNhc2VzIG9mIGluc3RydWN0aW9ucyB0aGF0IG1heSBlbnRlciBoZXJlIHRvCSMKKyMgYmUgZW11bGF0ZWQ6ICgxKSB0aGUgRlBnZW4gaW5zdHJ1Y3Rpb25zLCBtb3N0IG9mIHdoaWNoIHdlcmUgYWxzbwkjCisjIHVuaW1wbGVtZW50ZWQgb24gdGhlIDA0MCwgYW5kICgyKSAiZnRyYXBjYyIsICJmc2NjIiwgYW5kICJmZGJjYyIuCSMKKyMJRm9yIHRoZSBmaXJzdCBzZXQsIHRoaXMgaGFuZGxlciBjYWxscyB0aGUgcm91dGluZSBsb2FkX2ZvcCgpCSMKKyMgdG8gbG9hZCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAoZm9yIGR5YWRpYykgb3BlcmFuZHMgdG8gYmUgdXNlZAkjCisjIGZvciBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIFRoZSBjb3JyZWN0IGVtdWxhdGlvbiByb3V0aW5lIGlzIHRoZW4JIworIyBjaG9zZW4gYnkgZGVjb2RpbmcgdGhlIGluc3RydWN0aW9uIHR5cGUgYW5kIGluZGV4aW5nIGludG8gYW4JCSMKKyMgZW11bGF0aW9uIHN1YnJvdXRpbmUgaW5kZXggdGFibGUuIEFmdGVyIGVtdWxhdGlvbiByZXR1cm5zLCB0aGlzCSMKKyMgaGFuZGxlciBjaGVja3MgdG8gc2VlIGlmIGFuIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIgYXMgYSByZXN1bHQgb2YgdGhlICMKKyMgRlAgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiBJZiBzbywgdGhlbiBhbiBGUCBleGNlcHRpb24gb2YgdGhlIGNvcnJlY3QJIworIyB0eXBlIGlzIGluc2VydGVkIGludG8gdGhlIEZQVSBzdGF0ZSBmcmFtZSB1c2luZyB0aGUgImZyZXN0b3JlIgkjCisjIGluc3RydWN0aW9uIGJlZm9yZSBleGl0aW5nIHRocm91Z2ggX2Zwc3BfZG9uZSgpLiBJbiBlaXRoZXIgdGhlCSMKKyMgZXhjZXB0aW9uYWwgb3Igbm9uLWV4Y2VwdGlvbmFsIGNhc2VzLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB0aGUJIworIyBUcmFjZSBleGNlcHRpb24gaXMgZW5hYmxlZC4gSWYgc28sIHRoZW4gd2UgbXVzdCBjcmVhdGUgYSBUcmFjZQkjCisjIGV4Y2VwdGlvbiBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBmcmFtZSBhbmQgZXhpdCB0aHJvdWdoCSMKKyMgX3JlYWxfdHJhY2UoKS4JCQkJCQkJIworIwlGb3IgImZkYmNjIiwgImZ0cmFwY2MiLCBhbmQgImZzY2MiLCB0aGUgZW11bGF0aW9uIHN1YnJvdXRpbmVzCSMKKyMgX2ZkYmNjKCksIF9mdHJhcGNjKCksIGFuZCBfZnNjYygpIHJlc3BlY3RpdmVseSBhcmUgdXNlZC4gQWxsIHRocmVlCSMKKyMgbWF5IGZsYWcgdGhhdCBhIEJTVU4gZXhjZXB0aW9uIHNob3VsZCBiZSB0YWtlbi4gSWYgc28sIHRoZW4gdGhlCSMKKyMgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgY29udmVydGVkIGludG8gYSBCU1VOIGV4Y2VwdGlvbgkjCisjIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IGlzIG1hZGUgdGhyb3VnaCBfcmVhbF9ic3VuKCkuIElmIHRoZQkJIworIyBpbnN0cnVjdGlvbiB3YXMgImZ0cmFwY2MiIGFuZCBhIFRyYXAgZXhjZXB0aW9uIHNob3VsZCByZXN1bHQsIGEgVHJhcAkjCisjIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBjcmVhdGVkIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGFuIGV4aXQJIworIyBpcyBtYWRlIHRocm91Z2ggX3JlYWxfdHJhcCgpLiBJZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCB0aGVuCSMKKyMgYSBUcmFjZSBleGNlcHRpb24gZnJhbWUgaXMgY3JlYXRlZCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhIGp1bXAJIworIyBpcyBtYWRlIHRvIF9yZWFsX3RyYWNlKCkuIEZpbmFsbHksIGlmIG5vbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBleGlzdCwJIworIyB0aGVuIHRoZSBoYW5kbGVyIGV4aXRzIHRob3VnaCB0aGUgY2FsbG91dCBfZnBzcF9kb25lKCkuCQkjCisjCQkJCQkJCQkJIworIwlJbiBhbnkgb2YgdGhlIGFib3ZlIHNjZW5hcmlvcywgaWYgYSBfbWVtX3JlYWQoKSBvciBfbWVtX3dyaXRlKCkJIworIyAiY2FsbG91dCIgcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHRoZW4gYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lCSMKKyMgaXMgY3JlYXRlZCBmcm9tIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCisjIF9yZWFsX2FjY2VzcygpLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIEZQIFVOSU1QTEVNRU5URUQgSU5TVFJVQ1RJT04gU1RBQ0sgRlJBTUU6CisjCisjCSoqKioqKioqKioqKioqKioqCisjCSoJCSogPT4gPGVhPiBvZiBmcCB1bmltcCBpbnN0ci4KKyMJLSAgICAgIEVBCS0KKyMJKgkJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqIDB4MiAqICAweDAyYwkqID0+IGZyYW1lIGZvcm1hdCBhbmQgdmVjdG9yIG9mZnNldCh2ZWN0b3IgIzExKQorIwkqKioqKioqKioqKioqKioqKgorIwkqCQkqCisjCS0gICAgTmV4dCBQQwktID0+IFBDIG9mIGluc3RyIHRvIGV4ZWN1dGUgYWZ0ZXIgZXhjIGhhbmRsaW5nCisjCSoJCSoKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSogPT4gU1IgYXQgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbiB3YXMgdGFrZW4KKyMJKioqKioqKioqKioqKioqKioKKyMKKyMgTm90ZTogdGhlICFOVUxMIGJpdCBkb2VzIG5vdCBnZXQgc2V0IGluIHRoZSBmc2F2ZSBmcmFtZSB3aGVuIHRoZQorIyBtYWNoaW5lIGVuY291bnRlcnMgYW4gZnAgdW5pbXAgZXhjZXB0aW9uLiBUaGVyZWZvcmUsIGl0IG11c3QgYmUgc2V0CisjIGJlZm9yZSBsZWF2aW5nIHRoaXMgaGFuZGxlci4KKyMKKwlnbG9iYWwJCV9mcHNwX3VuaW1wCitfZnBzcF91bmltcDoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMQorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgbW9kZSBleGNlcHRpb24/CisJYm5lLmIJCWZ1bmltcF9zCQkjIG5vOyBzdXBlcnZpc29yIG1vZGUKKworIyBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUgdXNlciBzdGFjayBwb2ludGVyIG9udG8gdGhlIHN0YWNrIGZyYW1lCitmdW5pbXBfdToKKwltb3YubAkJJXVzcCwlYTAJCSMgZmV0Y2ggdXNlciBzdGFjayBwb2ludGVyCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBpbiBzdGFjayBmcmFtZQorCWJyYS5iCQlmdW5pbXBfY29udAorCisjIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgc3VwZXJ2aXNvciBzdGFjayBwb2ludGVyIEJFRk9SRSB0aGUgZXhjIG9jY3VycmVkLgorIyBvbGRfc3AgaXMgYWRkcmVzcyBqdXN0IGFib3ZlIHN0YWNrZWQgZWZmZWN0aXZlIGFkZHJlc3MuCitmdW5pbXBfczoKKwlsZWEJCTQrRVhDX0VBKCVhNiksJWEwCSMgbG9hZCBvbGQgYTcnCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBhNycKKwltb3YubAkJJWEwLE9MRF9BNyglYTYpCQkjIG1ha2UgYSBjb3B5CisKK2Z1bmltcF9jb250OgorCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyICJzcGVjaWFsIGNhc2UiIGZsYWcKKworIyBEaXZpZGUgdGhlIGZwIGluc3RydWN0aW9ucyBpbnRvIDggdHlwZXMgYmFzZWQgb24gdGhlIFRZUEUgZmllbGQgaW4KKyMgYml0cyA2LTggb2YgdGhlIG9wd29yZChjbGFzc2VzIDYsNyBhcmUgdW5kZWZpbmVkKS4KKyMgKGZvciB0aGUgJzA2MCwgb25seSB0d28gdHlwZXMgIGNhbiB0YWtlIHRoaXMgZXhjZXB0aW9uKQorIwliZnRzdAkJJWQweyY3OiYzfQkJIyB0ZXN0IFRZUEUKKwlidHN0CQkmMjIsJWQwCQkJIyB0eXBlIDAgb3IgMSA/CisJYm5lLncJCWZ1bmltcF9taXNjCQkjIHR5cGUgMQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUWVBFID09IDA6IEdlbmVyYWwgaW5zdHJ1Y3Rpb25zCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5pbXBfZ2VuOgorCisJY2xyLmIJCVNUT1JFX0ZMRyglYTYpCQkjIGNsZWFyICJzdG9yZSByZXN1bHQiIGZsYWcKKworIyBjbGVhciB0aGUgY2NvZGUgYnl0ZSBhbmQgZXhjZXB0aW9uIHN0YXR1cyBieXRlCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJYmZleHR1CQklZDB7JjE2OiY2fSwlZDEJCSMgZXh0cmFjdCB1cHBlciA2IG9mIGNtZHJlZworCWNtcGkuYgkJJWQxLCYweDE3CQkjIGlzIG9wIGFuIGZtb3ZlY3I/CisJYmVxLncJCWZ1bmltcF9mbW92Y3IJCSMgeWVzCisKK2Z1bmltcF9nZW5fb3A6CisJYnNyLmwJCV9sb2FkX2ZvcAkJIyBsb2FkCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDNmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbiBiaXRzCisJbHNsLncJCSYweDMsJWQxCQkjIHNoaWZ0IHJpZ2h0IDMgYml0cworCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgaW5zZXJ0IHNyYyBvcHRhZyBiaXRzCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIGRzdCBwdHIgaW4gYTEKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHNyYyBwdHIgaW4gYTAKKworCW1vdi53CQkodGJsX3RyYW5zLncsJXBjLCVkMS53KjIpLCVkMQorCWpzcgkJKHRibF90cmFucy53LCVwYywlZDEudyoxKSAjIGVtdWxhdGUKKworZnVuaW1wX2ZzYXZlOgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdW5pbXBfZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVuaW1wX3N0b3JlOgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBmZXRjaCBEbgorCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSByZXN1bHQgdG8gZnAgcmVnZmlsZQorCitmdW5pbXBfZ2VuX2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKK2Z1bmltcF9nZW5fZXhpdF9jbXA6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1pYTdfZmxnICMgd2FzIHRoZSBlYSBtb2RlIChzcCkrID8KKwliZXEuYgkJZnVuaW1wX2dlbl9leGl0X2E3CSMgeWVzCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyB3YXMgdGhlIGVhIG1vZGUgLShzcCkgPworCWJlcS5iCQlmdW5pbXBfZ2VuX2V4aXRfYTcJIyB5ZXMKKworZnVuaW1wX2dlbl9leGl0X2NvbnQ6CisJdW5sawkJJWE2CisKK2Z1bmltcF9nZW5fZXhpdF9jb250MjoKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCisKKyMgdGhpcyBjYXRjaGVzIGEgcHJvYmxlbSB3aXRoIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJlLWluc2VydGVkCisjIGludG8gdGhlIG1hY2hpbmUuIHRoZSBmcmVzdG9yZSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkLi4uc28sIHRoZSBmbW92LmwKKyMgYWxvbmUgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgd291bGQgdHJpZ2dlciBhbiB1bndhbnRlZCBleGNlcHRpb24uCisjIHVudGlsIEkgZmVlbCBsaWtlIGZpeGluZyB0aGlzLCB3ZSdsbCBzaWRlc3RlcCB0aGUgZXhjZXB0aW9uLgorCWZzYXZlCQktKCVzcCkKKwlmbW92LmwJCSVmcGlhciwweDE0KCVzcCkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKwlmcmVzdG9yZQkoJXNwKSsKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDI0CisJYnJhLmwJCV9yZWFsX3RyYWNlCisKK2Z1bmltcF9nZW5fZXhpdF9hNzoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgc3VwZXJ2aXNvciBvciB1c2VyIG1vZGU/CisJYm5lLmIJCWZ1bmltcF9nZW5fZXhpdF9hN19zCSMgc3VwZXJ2aXNvcgorCisJbW92LmwJCSVhMCwtKCVzcCkKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCisJbW92LmwJCSglc3ApKywlYTAKKwlicmEuYgkJZnVuaW1wX2dlbl9leGl0X2NvbnQKKworIyBpZiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIGV4ZWN1dGVkIGZyb20gc3VwZXJ2aXNvciBtb2RlIGFuZCB0aGUgYWRkcmVzc2luZworIyBtb2RlIHdhcyAoYTcpKywgdGhlbiB0aGUgc3RhY2sgZnJhbWUgZm9yIHRoZSBydGUgbXVzdCBiZSBzaGlmdGVkICJ1cCIKKyMgIm4iIGJ5dGVzIHdoZXJlICJuIiBpcyB0aGUgc2l6ZSBvZiB0aGUgc3JjIG9wZXJhbmQgdHlwZS4KKyMgZjxvcD4ue2IsdyxsLHMsZCx4LHB9CitmdW5pbXBfZ2VuX2V4aXRfYTdfczoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBsb2FkIG5ldyBhNycKKwlzdWIubAkJT0xEX0E3KCVhNiksJWQwCQkjIHN1YnRyYWN0IG9sZCBhNycKKwltb3YubAkJMHgyK0VYQ19QQyglYTYpLCgweDIrRVhDX1BDLCVhNiwlZDApICMgc2hpZnQgc3RhY2sgZnJhbWUKKwltb3YubAkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKSAjIHNoaWZ0IHN0YWNrIGZyYW1lCisJbW92LncJCSVkMCxFWENfU1IoJWE2KQkJIyBzdG9yZSBpbmNyIG51bWJlcgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCXVubGsJCSVhNgorCisJYWRkLncJCSglc3ApLCVzcAkJIyBzdGFjayBmcmFtZSBzaGlmdGVkCisJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdF9jb250MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlY3IueCAjY2NjLGZwbiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5pbXBfZm1vdmNyOgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkubAkJJjB4MDAwMDAwN2YsJWQxCQkjIHBhc3Mgcm9tIG9mZnNldCBpbiBkMQorCWJzci5sCQlzbW92Y3IKKwlicmEudwkJZnVuaW1wX2ZzYXZlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgdXNlciBoYXMgZW5hYmxlZCBzb21lIGV4Y2VwdGlvbnMuIHdlIGZpZ3VyZSBub3QgdG8gc2VlIHRoaXMgdG9vCisjIG9mdGVuIHNvIHRoYXQncyB3aHkgaXQgZ2V0cyBsb3dlciBwcmlvcml0eS4KKyMKK2Z1bmltcF9lbmE6CisKKyMgd2FzIGFuIGV4Y2VwdGlvbiBzZXQgdGhhdCB3YXMgYWxzbyBlbmFibGVkPworCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQgYW5kIHNldAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlmdW5pbXBfZXhjCQkjIGF0IGxlYXN0IG9uZSB3YXMgc2V0CisKKyMgbm8gZXhjZXB0aW9uIHRoYXQgd2FzIGVuYWJsZWQgd2FzIHNldCBCVVQgaWYgd2UgZ290IGFuIGV4YWN0IG92ZXJmbG93CisjIGFuZCBvdmVyZmxvdyB3YXNuJ3QgZW5hYmxlZCBidXQgaW5leGFjdCB3YXMgKHllY2ghKSB0aGVuIHRoaXMgaXMKKyMgYW4gaW5leGFjdCBleGNlcHRpb247IG90aGVyd2lzZSwgcmV0dXJuIHRvIG5vcm1hbCBub24tZXhjZXB0aW9uIGZsb3cuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CisJYmVxLncJCWZ1bmltcF9zdG9yZQkJIyBubzsgcmV0dXJuIHRvIG5vcm1hbCBmbG93CisKKyMgdGhlIG92ZXJmbG93IHcvIGV4YWN0IHJlc3VsdCBoYXBwZW5lZCBidXQgd2FzIGluZXhhY3Qgc2V0IGluIHRoZSBGUENSPworZnVuaW1wX292Zmw6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgaW5leGFjdCBlbmFibGVkPworCWJlcS53CQlmdW5pbXBfc3RvcmUJCSMgbm87IHJldHVybiB0byBub3JtYWwgZmxvdworCWJyYS5iCQlmdW5pbXBfZXhjX292ZmwJCSMgeWVzCisKKyMgc29tZSBleGNlcHRpb24gaGFwcGVuZWQgdGhhdCB3YXMgYWN0dWFsbHkgZW5hYmxlZC4KKyMgd2UnbGwgaW5zZXJ0IHRoaXMgbmV3IGV4Y2VwdGlvbiBpbnRvIHRoZSBGUFUgYW5kIHRoZW4gcmV0dXJuLgorZnVuaW1wX2V4YzoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8KKwlibmUuYgkJZnVuaW1wX2V4Y19mb3JjZQkjIG5vCisKKyMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0LiBzbywgaWYgaXQgb2NjdXJzIHdpdGggYW4gb3ZlcmZsb3cKKyMgb3IgdW5kZXJmbG93IHRoYXQgd2FzIGRpc2FibGVkLCB0aGVuIHdlIGhhdmUgdG8gZm9yY2UgYW4gb3ZlcmZsb3cgb3IKKyMgdW5kZXJmbG93IGZyYW1lLiB0aGUgZXZlbnR1YWwgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGhhbmRsZXIgd2lsbCBzZWUgdGhhdAorIyBpdCdzIGFjdHVhbGx5IGFuIGluZXhhY3QgYW5kIGFjdCBhcHByb3ByaWF0ZWx5LiB0aGlzIGlzIHRoZSBvbmx5IGVhc3kKKyMgd2F5IHRvIGhhdmUgdGhlIEVYT1AgYXZhaWxhYmxlIGZvciB0aGUgZW5hYmxlZCBpbmV4YWN0IGhhbmRsZXIgd2hlbgorIyBhIGRpc2FibGVkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBoYXMgYWxzbyBoYXBwZW5lZC4KKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBvdmVyZmxvdyBvY2N1cj8KKwlibmUuYgkJZnVuaW1wX2V4Y19vdmZsCQkjIHllcworCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIHVuZGVyZmxvdyBvY2N1cj8KKwlibmUuYgkJZnVuaW1wX2V4Y191bmZsCQkjIHllcworCisjIGZvcmNlIHRoZSBmc2F2ZSBleGNlcHRpb24gc3RhdHVzIGJpdHMgdG8gc2lnbmFsIGFuIGV4Y2VwdGlvbiBvZiB0aGUKKyMgYXBwcm9wcmlhdGUgdHlwZS4gZG9uJ3QgZm9yZ2V0IHRvICJza2V3IiB0aGUgc291cmNlIG9wZXJhbmQgaW4gY2FzZSB3ZQorIyAidW5za2V3ZWQiIHRoZSBvbmUgdGhlIGhhcmR3YXJlIGluaXRpYWxseSBnYXZlIHVzLgorZnVuaW1wX2V4Y19mb3JjZToKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisJbW92LncJCSh0YmxfZnVuaW1wX2V4Y2VwdC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdDIJIyBleGl0IHdpdGggZnJlc3RvcmUKKwordGJsX2Z1bmltcF9leGNlcHQ6CisJc2hvcnQJCTB4ZTAwMiwgMHhlMDA2LCAweGUwMDQsIDB4ZTAwNQorCXNob3J0CQkweGUwMDMsIDB4ZTAwMiwgMHhlMDAxLCAweGUwMDEKKworIyBpbnNlcnQgYW4gb3ZlcmZsb3cgZnJhbWUKK2Z1bmltcF9leGNfb3ZmbDoKKwlic3IubAkJZnVuaW1wX3NrZXcJCSMgY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKKwlicmEuYgkJZnVuaW1wX2dlbl9leGl0MgorCisjIGluc2VydCBhbiB1bmRlcmZsb3cgZnJhbWUKK2Z1bmltcF9leGNfdW5mbDoKKwlic3IubAkJZnVuaW1wX3NrZXcJCSMgY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKKworIyB0aGlzIGlzIHRoZSBnZW5lcmFsIGV4aXQgcG9pbnQgZm9yIGFuIGVuYWJsZWQgZXhjZXB0aW9uIHRoYXQgd2lsbCBiZQorIyByZXN0b3JlZCBpbnRvIHRoZSBtYWNoaW5lIGZvciB0aGUgaW5zdHJ1Y3Rpb24ganVzdCBlbXVsYXRlZC4KK2Z1bmltcF9nZW5fZXhpdDI6CisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBpbnNlcnQgZXhjZXB0aW9uYWwgc3RhdHVzCisKKwlicmEudwkJZnVuaW1wX2dlbl9leGl0X2NtcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgVFlQRSA9PSAxOiBGREI8Y2M+LCBGUzxjYz4sIEZUUkFQPGNjPgorIworIyBUaGVzZSBpbnN0cnVjdGlvbnMgd2VyZSBpbXBsZW1lbnRlZCBvbiB0aGUgJzg4MS8yIGFuZCAnMDQwIGluIGhhcmR3YXJlIGJ1dAorIyBhcmUgZW11bGF0ZWQgaW4gc29mdHdhcmUgb24gdGhlICcwNjAuCisjCitmdW5pbXBfbWlzYzoKKwliZmV4dHUJCSVkMHsmMTA6JjN9LCVkMQkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwljbXBpLmIJCSVkMSwmMHgxCQkjIGlzIGl0IGFuIGZkYjxjYz4/CisJYmVxLncJCWZ1bmltcF9mZGJjYwkJIyB5ZXMKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIGl0IGFuIGZzPGNjPj8KKwlibmUudwkJZnVuaW1wX2ZzY2MJCSMgeWVzCisJYmZleHR1CQklZDB7JjEzOiYzfSwlZDEKKwljbXBpLmIJCSVkMSwmMHgyCQkjIGlzIGl0IGFuIGZzPGNjPj8KKwlibHQudwkJZnVuaW1wX2ZzY2MJCSMgeWVzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZnRyYXA8Y2M+CQkjCisjIGZ0cmFwPGNjPi53ICM8ZGF0YT4JIworIyBmdHJhcDxjYz4ubCAjPGRhdGE+CSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Z1bmltcF9mdHJhcGNjOgorCisJYnNyLmwJCV9mdHJhcGNjCQkjIEZUUkFQPGNjPigpCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmZmJzdW5fZmxnICMgaXMgZW5hYmxlZCBic3VuIG9jY3VycmluZz8KKwliZXEudwkJZnVuaW1wX2JzdW4JCSMgeWVzCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmZnRyYXBjY19mbGcgIyBzaG91bGQgYSB0cmFwIG9jY3VyPworCWJuZS53CQlmdW5pbXBfZG9uZQkJIyBubworCisjCSBGUCBVTklNUCBGUkFNRQkJICAgVFJBUCAgRlJBTUUKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiogICAgPEVBPiAgICAgKioJKiogIEN1cnJlbnQgUEMgKioKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAweDIgKiAgMHgwMmMJKgkqIDB4MiAqICAweDAxYyAgKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqKiAgIE5leHQgUEMgICAqKgkqKiAgIE5leHQgUEMgICAqKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkgICAgKDYgd29yZHMpCQkgICAgKDYgd29yZHMpCisjCisjIHRoZSBmdHJhcGNjIGluc3RydWN0aW9uIHNob3VsZCB0YWtlIGEgdHJhcC4gc28sIGhlcmUgd2UgbXVzdCBjcmVhdGUgYQorIyB0cmFwIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBmcCBpbnN0cnVjdGlvbiBzdGFjayBmcmFtZSBhbmQKKyMganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludCBmb3IgdGhlIHRyYXAgZXhjZXB0aW9uCitmdW5pbXBfZnRyYXBjY190cDoKKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FQSglYTYpICMgQWRkcmVzcyA9IEN1cnJlbnQgUEMKKwltb3YudwkJJjB4MjAxYyxFWENfVk9GRiglYTYpCSMgVmVjdG9yIE9mZnNldCA9IDB4MDFjCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF90cmFwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmRiPGNjPiBEbiw8bGFiZWw+CSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Z1bmltcF9mZGJjYzoKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyByZWFkIGRpc3BsYWNlbWVudAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS53CQlmdW5pbXBfaWFjYwkJIyB5ZXMKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYnNyLmwJCV9mZGJjYwkJCSMgRkRCPGNjPigpCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmZmJzdW5fZmxnICMgaXMgZW5hYmxlZCBic3VuIG9jY3VycmluZz8KKwliZXEudwkJZnVuaW1wX2JzdW4KKworCWJyYS53CQlmdW5pbXBfZG9uZQkJIyBicmFuY2ggdG8gZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjCisjIGZzPGNjPi5iIDxlYT4JIworIyMjIyMjIyMjIyMjIyMjIyMKK2Z1bmltcF9mc2NjOgorCisJYnNyLmwJCV9mc2NjCQkJIyBGUzxjYz4oKQorCisjIEkgYW0gYXNzdW1pbmcgaGVyZSB0aGF0IGFuICJmczxjYz4uYiAtKEFuKSIgb3IgImZzPGNjPi5iIChBbikrIiBpbnN0cnVjdGlvbgorIyBkb2VzIG5vdCBuZWVkIHRvIHVwZGF0ZSAiQW4iIGJlZm9yZSB0YWtpbmcgYSBic3VuIGV4Y2VwdGlvbi4KKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmZmJzdW5fZmxnICMgaXMgZW5hYmxlZCBic3VuIG9jY3VycmluZz8KKwliZXEudwkJZnVuaW1wX2JzdW4KKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB5ZXM7IGlzIGl0IGEgdXNlciBtb2RlIGV4Y2VwdGlvbj8KKwlibmUuYgkJZnVuaW1wX2ZzY2NfcwkJIyBubworCitmdW5pbXBfZnNjY191OgorCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgeWVzOyBzZXQgbmV3IFVTUAorCW1vdi5sCQklYTAsJXVzcAorCWJyYS53CQlmdW5pbXBfZG9uZQkJIyBicmFuY2ggdG8gZmluaXNoCisKKyMgcmVtZW1iZXIsIEknbSBhc3N1bWluZyB0aGF0IHBvc3QtaW5jcmVtZW50IGlzIGJvZ3VzLi4uKGl0IElTISEhKQorIyBzbywgdGhlIGxlYXN0IHNpZ25pZmljYW50IFdPUkQgb2YgdGhlIHN0YWNrZWQgZWZmZWN0aXZlIGFkZHJlc3MgZ290CisjIG92ZXJ3cml0dGVuIGJ5IHRoZSAiZnM8Y2M+IC0oQW4pIi4gV2UgbXVzdCBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgImRvd24iCisjIHNvIHRoYXQgdGhlIHJ0ZSB3aWxsIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgZGVzdHJveWluZyB0aGUgcmVzdWx0LgorIyBldmVuIHRob3VnaCB0aGUgb3BlcmF0aW9uIHNpemUgaXMgYnl0ZSwgdGhlIHN0YWNrIHB0ciBpcyBkZWNyIGJ5IDIuCisjCisjIHJlbWVtYmVyLCBhbHNvLCB0aGlzIGluc3RydWN0aW9uIG1heSBiZSB0cmFjZWQuCitmdW5pbXBfZnNjY19zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIHdhcyBhNyBtb2RpZmllZD8KKwlibmUudwkJZnVuaW1wX2RvbmUJCSMgbm8KKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYm5lLmIJCWZ1bmltcF9mc2NjX3NfdHJhY2UJIyB5ZXMKKworCXN1YnEubAkJJjB4Miwlc3AKKwltb3YubAkJMHgyKCVzcCksKCVzcCkJCSMgc2hpZnQgU1IsaGkoUEMpICJkb3duIgorCW1vdi5sCQkweDYoJXNwKSwweDQoJXNwKQkjIHNoaWZ0IGxvKFBDKSx2b2ZmICJkb3duIgorCWJyYS5sCQlfZnBzcF9kb25lCisKK2Z1bmltcF9mc2NjX3NfdHJhY2U6CisJc3VicS5sCQkmMHgyLCVzcAorCW1vdi5sCQkweDIoJXNwKSwoJXNwKQkJIyBzaGlmdCBTUixoaShQQykgImRvd24iCisJbW92LncJCTB4Niglc3ApLDB4NCglc3ApCSMgc2hpZnQgbG8oUEMpCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBmbXQvdm9mZiA9ICQyMDI0CisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgaW5zZXJ0ICJjdXJyZW50IFBDIgorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMKKyMgVGhlIGZ0cmFwPGNjPiwgZnM8Y2M+LCBvciBmZGI8Y2M+IGlzIHRvIHRha2UgYW4gZW5hYmxlZCBic3VuLiB3ZSBtdXN0IGNvbnZlcnQKKyMgdGhlIGZwIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGludG8gYSBic3VuIHN0YWNrIGZyYW1lLAorIyByZXN0b3JlIGEgYnN1biBleGNlcHRpb24gaW50byB0aGUgbWFjaGluZSwgYW5kIGJyYW5jaCB0byB0aGUgdXNlcgorIyBzdXBwbGllZCBic3VuIGhvb2suCisjCisjCSBGUCBVTklNUCBGUkFNRQkJICAgQlNVTiBGUkFNRQorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqKiAgICA8RUE+ICAgICAqKgkqIDB4MCAqIDB4MGMwCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAweDIgKiAgMHgwMmMgICoJKiogQ3VycmVudCBQQyAgKioKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiogICBOZXh0IFBDICAgKioJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJICAgICg0IHdvcmRzKQorIwkqKioqKioqKioqKioqKioqKgorIwkgICAgKDYgd29yZHMpCisjCitmdW5pbXBfYnN1bjoKKwltb3YudwkJJjB4MDBjMCwyK0VYQ19FQSglYTYpCSMgRm10ID0gMHgwOyBWZWN0b3IgT2Zmc2V0ID0gMHgwYzAKKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19WT0ZGKCVhNikgIyBQQyA9IEN1cnJlbnQgUEMKKwltb3YudwkJRVhDX1NSKCVhNiksMitFWENfUEMoJWE2KSAjIHNoaWZ0IFNSICJ1cCIKKworCW1vdi53CQkmMHhlMDAwLDIrRlBfU1JDKCVhNikJIyBic3VuIGV4Y2VwdGlvbiBlbmFibGVkCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgYnN1biBleGNlcHRpb24KKworCXVubGsJCSVhNgorCisJYWRkcS5sCQkmMHg0LCVzcAkJIyBlcmFzZSBzbHVkZ2UKKworCWJyYS5sCQlfcmVhbF9ic3VuCQkjIGJyYW5jaCB0byB1c2VyIGJzdW4gaG9vaworCisjCisjIGFsbCBmdHJhcGNjL2ZzY2MvZmRiY2MgcHJvY2Vzc2luZyBoYXMgYmVlbiBjb21wbGV0ZWQuIHVud2luZCB0aGUgc3RhY2sgZnJhbWUKKyMgYW5kIHJldHVybi4KKyMKKyMgYXMgdXN1YWwsIHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRyYWNlIG1vZGUgYmVpbmcgb24gaGVyZS4gc2luY2UgaW5zdHJ1Y3Rpb25zCisjIG1vZGlmeWluZyB0aGUgc3VwZXJ2aXNvciBzdGFjayBmcmFtZSBkb24ndCBwYXNzIHRocm91Z2ggaGVyZSwgdGhpcyBpcyBhCisjIHJlbGF0aXZlbHkgZWFzeSB0YXNrLgorIworZnVuaW1wX2RvbmU6CisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwlibmUuYgkJZnVuaW1wX3RyYWNlCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUKKworIwkgRlAgVU5JTVAgRlJBTUUJCSAgVFJBQ0UgIEZSQU1FCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSoqICAgIDxFQT4gICAgICoqCSoqICBDdXJyZW50IFBDICoqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgyICogIDB4MDJjCSoJKiAweDIgKiAgMHgwMjQgICoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiogICBOZXh0IFBDICAgKioJKiogICBOZXh0IFBDICAgKioKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJICAgICg2IHdvcmRzKQkJICAgICg2IHdvcmRzKQorIworIyB0aGUgZnNjYyBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhIHRyYWNlIHRyYXAuIHNvLCBoZXJlIHdlIG11c3QgY3JlYXRlIGEKKyMgdHJhY2Ugc3RhY2sgZnJhbWUgZnJvbSBhbiB1bmltcGxlbWVudGVkIGZwIGluc3RydWN0aW9uIHN0YWNrIGZyYW1lIGFuZAorIyBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGVudHJ5IHBvaW50IGZvciB0aGUgdHJhY2UgZXhjZXB0aW9uCitmdW5pbXBfdHJhY2U6CisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgY3VycmVudCBQQyBpcyBpbiBmcGlhcgorCW1vdi5iCQkmMHgyNCwweDcoJXNwKQkJIyB2ZWN0b3Igb2Zmc2V0ID0gMHgwMjQKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRibF90cmFucworCXN3YmVnCQkmMHgxYzAKK3RibF90cmFuczoKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTAgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTEgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTIgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTMgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTQgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTUgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTYgZm1vdmVjciBhbGwKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTcgZm1vdmVjciBhbGwKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtMCBmaW50IG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTEgZmludCB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS0yIGZpbnQgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS0zIGZpbnQgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtNSBmaW50IGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtNCBmaW50IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTYgZmludCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTcgRVJST1IKKworCXNob3J0CQlzc2luaAkgLSB0YmxfdHJhbnMJIyAkMDItMCBmc2luaCBub3JtCisJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDAyLTEgZnNpbmggemVybworCXNob3J0CQlzcmNfaW5mCSAtIHRibF90cmFucwkjICQwMi0yIGZzaW5oIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwMi0zIGZzaW5oIHFuYW4KKwlzaG9ydAkJc3NpbmhkCSAtIHRibF90cmFucwkjICQwMi01IGZzaW5oIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwMi00IGZzaW5oIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAyLTYgZnNpbmggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTAgZmludHJ6IG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTEgZmludHJ6IHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTIgZmludHJ6IGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtMyBmaW50cnogcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtNSBmaW50cnogZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy00IGZpbnRyeiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy02IGZpbnRyeiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtMCBmc3FydCBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC0xIGZzcXJ0IHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTIgZnNxcnQgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC0zIGZzcXJ0IHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTUgZnNxcnQgZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC00IGZzcXJ0IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTYgZnNxcnQgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTcgRVJST1IKKworCXNob3J0CQlzbG9nbnAxCSAtIHRibF90cmFucwkjICQwNi0wIGZsb2ducDEgbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwNi0xIGZsb2ducDEgemVybworCXNob3J0CQlzb3ByX2luZiAtIHRibF90cmFucwkjICQwNi0yIGZsb2ducDEgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDA2LTMgZmxvZ25wMSBxbmFuCisJc2hvcnQJCXNsb2ducDFkIC0gdGJsX3RyYW5zCSMgJDA2LTUgZmxvZ25wMSBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMDYtNCBmbG9nbnAxIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA2LTYgZmxvZ25wMSB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA2LTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNyBFUlJPUgorCisJc2hvcnQJCXNldG94bTEJIC0gdGJsX3RyYW5zCSMgJDA4LTAgZmV0b3htMSBub3JtCisJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDA4LTEgZmV0b3htMSB6ZXJvCisJc2hvcnQJCXNldG94bTFpIC0gdGJsX3RyYW5zCSMgJDA4LTIgZmV0b3htMSBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMDgtMyBmZXRveG0xIHFuYW4KKwlzaG9ydAkJc2V0b3htMWQgLSB0YmxfdHJhbnMJIyAkMDgtNSBmZXRveG0xIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwOC00IGZldG94bTEgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDgtNiBmZXRveG0xIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDgtNyBFUlJPUgorCisJc2hvcnQJCXN0YW5oCSAtIHRibF90cmFucwkjICQwOS0wIGZ0YW5oIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMDktMSBmdGFuaCB6ZXJvCisJc2hvcnQJCXNyY19vbmUJIC0gdGJsX3RyYW5zCSMgJDA5LTIgZnRhbmggaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDA5LTMgZnRhbmggcW5hbgorCXNob3J0CQlzdGFuaGQJIC0gdGJsX3RyYW5zCSMgJDA5LTUgZnRhbmggZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDA5LTQgZnRhbmggc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDktNiBmdGFuaCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA5LTcgRVJST1IKKworCXNob3J0CQlzYXRhbgkgLSB0YmxfdHJhbnMJIyAkMGEtMCBmYXRhbiBub3JtCisJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDBhLTEgZmF0YW4gemVybworCXNob3J0CQlzcGlfMgkgLSB0YmxfdHJhbnMJIyAkMGEtMiBmYXRhbiBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGEtMyBmYXRhbiBxbmFuCisJc2hvcnQJCXNhdGFuZAkgLSB0YmxfdHJhbnMJIyAkMGEtNSBmYXRhbiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMGEtNCBmYXRhbiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYS02IGZhdGFuIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGEtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi03IEVSUk9SCisKKwlzaG9ydAkJc2FzaW4JIC0gdGJsX3RyYW5zCSMgJDBjLTAgZmFzaW4gbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwYy0xIGZhc2luIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMGMtMiBmYXNpbiBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGMtMyBmYXNpbiBxbmFuCisJc2hvcnQJCXNhc2luZAkgLSB0YmxfdHJhbnMJIyAkMGMtNSBmYXNpbiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMGMtNCBmYXNpbiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYy02IGZhc2luIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGMtNyBFUlJPUgorCisJc2hvcnQJCXNhdGFuaAkgLSB0YmxfdHJhbnMJIyAkMGQtMCBmYXRhbmggbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwZC0xIGZhdGFuaCB6ZXJvCisJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDBkLTIgZmF0YW5oIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwZC0zIGZhdGFuaCBxbmFuCisJc2hvcnQJCXNhdGFuaGQJIC0gdGJsX3RyYW5zCSMgJDBkLTUgZmF0YW5oIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwZC00IGZhdGFuaCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwZC02IGZhdGFuaCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBkLTcgRVJST1IKKworCXNob3J0CQlzc2luCSAtIHRibF90cmFucwkjICQwZS0wIGZzaW4gbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwZS0xIGZzaW4gemVybworCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQwZS0yIGZzaW4gaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDBlLTMgZnNpbiBxbmFuCisJc2hvcnQJCXNzaW5kCSAtIHRibF90cmFucwkjICQwZS01IGZzaW4gZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDBlLTQgZnNpbiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwZS02IGZzaW4gdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwZS03IEVSUk9SCisKKwlzaG9ydAkJc3RhbgkgLSB0YmxfdHJhbnMJIyAkMGYtMCBmdGFuIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMGYtMSBmdGFuIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMGYtMiBmdGFuIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwZi0zIGZ0YW4gcW5hbgorCXNob3J0CQlzdGFuZAkgLSB0YmxfdHJhbnMJIyAkMGYtNSBmdGFuIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwZi00IGZ0YW4gc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGYtNiBmdGFuIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGYtNyBFUlJPUgorCisJc2hvcnQJCXNldG94CSAtIHRibF90cmFucwkjICQxMC0wIGZldG94IG5vcm0KKwlzaG9ydAkJbGRfcG9uZQkgLSB0YmxfdHJhbnMJIyAkMTAtMSBmZXRveCB6ZXJvCisJc2hvcnQJCXN6cl9pbmYJIC0gdGJsX3RyYW5zCSMgJDEwLTIgZmV0b3ggaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDEwLTMgZmV0b3ggcW5hbgorCXNob3J0CQlzZXRveGQJIC0gdGJsX3RyYW5zCSMgJDEwLTUgZmV0b3ggZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDEwLTQgZmV0b3ggc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTAtNiBmZXRveCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEwLTcgRVJST1IKKworCXNob3J0CQlzdHdvdG94CSAtIHRibF90cmFucwkjICQxMS0wIGZ0d290b3ggbm9ybQorCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxMS0xIGZ0d290b3ggemVybworCXNob3J0CQlzenJfaW5mCSAtIHRibF90cmFucwkjICQxMS0yIGZ0d290b3ggaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDExLTMgZnR3b3RveCBxbmFuCisJc2hvcnQJCXN0d290b3hkIC0gdGJsX3RyYW5zCSMgJDExLTUgZnR3b3RveCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTEtNCBmdHdvdG94IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDExLTYgZnR3b3RveCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDExLTcgRVJST1IKKworCXNob3J0CQlzdGVudG94CSAtIHRibF90cmFucwkjICQxMi0wIGZ0ZW50b3ggbm9ybQorCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxMi0xIGZ0ZW50b3ggemVybworCXNob3J0CQlzenJfaW5mCSAtIHRibF90cmFucwkjICQxMi0yIGZ0ZW50b3ggaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDEyLTMgZnRlbnRveCBxbmFuCisJc2hvcnQJCXN0ZW50b3hkIC0gdGJsX3RyYW5zCSMgJDEyLTUgZnRlbnRveCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTItNCBmdGVudG94IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEyLTYgZnRlbnRveCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEyLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNyBFUlJPUgorCisJc2hvcnQJCXNsb2duCSAtIHRibF90cmFucwkjICQxNC0wIGZsb2duIG5vcm0KKwlzaG9ydAkJdF9kejIJIC0gdGJsX3RyYW5zCSMgJDE0LTEgZmxvZ24gemVybworCXNob3J0CQlzb3ByX2luZiAtIHRibF90cmFucwkjICQxNC0yIGZsb2duIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxNC0zIGZsb2duIHFuYW4KKwlzaG9ydAkJc2xvZ25kCSAtIHRibF90cmFucwkjICQxNC01IGZsb2duIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxNC00IGZsb2duIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE0LTYgZmxvZ24gdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNC03IEVSUk9SCisKKwlzaG9ydAkJc2xvZzEwCSAtIHRibF90cmFucwkjICQxNS0wIGZsb2cxMCBub3JtCisJc2hvcnQJCXRfZHoyCSAtIHRibF90cmFucwkjICQxNS0xIGZsb2cxMCB6ZXJvCisJc2hvcnQJCXNvcHJfaW5mIC0gdGJsX3RyYW5zCSMgJDE1LTIgZmxvZzEwIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxNS0zIGZsb2cxMCBxbmFuCisJc2hvcnQJCXNsb2cxMGQJIC0gdGJsX3RyYW5zCSMgJDE1LTUgZmxvZzEwIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxNS00IGZsb2cxMCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNS02IGZsb2cxMCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE1LTcgRVJST1IKKworCXNob3J0CQlzbG9nMgkgLSB0YmxfdHJhbnMJIyAkMTYtMCBmbG9nMiBub3JtCisJc2hvcnQJCXRfZHoyCSAtIHRibF90cmFucwkjICQxNi0xIGZsb2cyIHplcm8KKwlzaG9ydAkJc29wcl9pbmYgLSB0YmxfdHJhbnMJIyAkMTYtMiBmbG9nMiBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTYtMyBmbG9nMiBxbmFuCisJc2hvcnQJCXNsb2cyZAkgLSB0YmxfdHJhbnMJIyAkMTYtNSBmbG9nMiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTYtNCBmbG9nMiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNi02IGZsb2cyIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTYtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTAgZmFicyBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC0xIGZhYnMgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtMiBmYWJzIGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtMyBmYWJzIHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTUgZmFicyBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTQgZmFicyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC02IGZhYnMgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC03IEVSUk9SCisKKwlzaG9ydAkJc2Nvc2gJIC0gdGJsX3RyYW5zCSMgJDE5LTAgZmNvc2ggbm9ybQorCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxOS0xIGZjb3NoIHplcm8KKwlzaG9ydAkJbGRfcGluZgkgLSB0YmxfdHJhbnMJIyAkMTktMiBmY29zaCBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTktMyBmY29zaCBxbmFuCisJc2hvcnQJCXNjb3NoZAkgLSB0YmxfdHJhbnMJIyAkMTktNSBmY29zaCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTktNCBmY29zaCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOS02IGZjb3NoIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTktNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS0wIGZuZWcgbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtMSBmbmVnIHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTIgZm5lZyBpbmYKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTMgZm5lZyBxbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS01IGZuZWcgZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS00IGZuZWcgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtNiBmbmVnIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi03IEVSUk9SCisKKwlzaG9ydAkJc2Fjb3MJIC0gdGJsX3RyYW5zCSMgJDFjLTAgZmFjb3Mgbm9ybQorCXNob3J0CQlsZF9wcGkyCSAtIHRibF90cmFucwkjICQxYy0xIGZhY29zIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMWMtMiBmYWNvcyBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMWMtMyBmYWNvcyBxbmFuCisJc2hvcnQJCXNhY29zZAkgLSB0YmxfdHJhbnMJIyAkMWMtNSBmYWNvcyBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMWMtNCBmYWNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYy02IGZhY29zIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWMtNyBFUlJPUgorCisJc2hvcnQJCXNjb3MJIC0gdGJsX3RyYW5zCSMgJDFkLTAgZmNvcyBub3JtCisJc2hvcnQJCWxkX3BvbmUJIC0gdGJsX3RyYW5zCSMgJDFkLTEgZmNvcyB6ZXJvCisJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDFkLTIgZmNvcyBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMWQtMyBmY29zIHFuYW4KKwlzaG9ydAkJc2Nvc2QJIC0gdGJsX3RyYW5zCSMgJDFkLTUgZmNvcyBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMWQtNCBmY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFkLTYgZmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFkLTcgRVJST1IKKworCXNob3J0CQlzZ2V0ZXhwCSAtIHRibF90cmFucwkjICQxZS0wIGZnZXRleHAgbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQxZS0xIGZnZXRleHAgemVybworCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQxZS0yIGZnZXRleHAgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFlLTMgZmdldGV4cCBxbmFuCisJc2hvcnQJCXNnZXRleHBkIC0gdGJsX3RyYW5zCSMgJDFlLTUgZmdldGV4cCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMWUtNCBmZ2V0ZXhwIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFlLTYgZmdldGV4cCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFlLTcgRVJST1IKKworCXNob3J0CQlzZ2V0bWFuCSAtIHRibF90cmFucwkjICQxZi0wIGZnZXRtYW4gbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQxZi0xIGZnZXRtYW4gemVybworCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQxZi0yIGZnZXRtYW4gaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFmLTMgZmdldG1hbiBxbmFuCisJc2hvcnQJCXNnZXRtYW5kIC0gdGJsX3RyYW5zCSMgJDFmLTUgZmdldG1hbiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMWYtNCBmZ2V0bWFuIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFmLTYgZmdldG1hbiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFmLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtMCBmZGl2IG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTEgZmRpdiB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC0yIGZkaXYgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC0zIGZkaXYgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtNSBmZGl2IGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtNCBmZGl2IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTYgZmRpdiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTcgRVJST1IKKworCXNob3J0CQlzbW9kX3Nub3JtIC0gdGJsX3RyYW5zCSMgJDIxLTAgZm1vZCBub3JtCisJc2hvcnQJCXNtb2Rfc3plcm8gLSB0YmxfdHJhbnMJIyAkMjEtMSBmbW9kIHplcm8KKwlzaG9ydAkJc21vZF9zaW5mIC0gdGJsX3RyYW5zCSMgJDIxLTIgZm1vZCBpbmYKKwlzaG9ydAkJc29wX3NxbmFuIC0gdGJsX3RyYW5zCSMgJDIxLTMgZm1vZCBxbmFuCisJc2hvcnQJCXNtb2Rfc2Rucm0gLSB0YmxfdHJhbnMJIyAkMjEtNSBmbW9kIGRlbm9ybQorCXNob3J0CQlzb3Bfc3NuYW4gLSB0YmxfdHJhbnMJIyAkMjEtNCBmbW9kIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIxLTYgZm1vZCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIxLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItMCBmYWRkIG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTEgZmFkZCB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi0yIGZhZGQgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi0zIGZhZGQgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItNSBmYWRkIGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItNCBmYWRkIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTYgZmFkZCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtMCBmbXVsIG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTEgZm11bCB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy0yIGZtdWwgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy0zIGZtdWwgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtNSBmbXVsIGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtNCBmbXVsIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTYgZm11bCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtMCBmc2dsZGl2IG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTEgZnNnbGRpdiB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC0yIGZzZ2xkaXYgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC0zIGZzZ2xkaXYgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtNSBmc2dsZGl2IGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtNCBmc2dsZGl2IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTYgZnNnbGRpdiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTcgRVJST1IKKworCXNob3J0CQlzcmVtX3Nub3JtIC0gdGJsX3RyYW5zCSMgJDI1LTAgZnJlbSBub3JtCisJc2hvcnQJCXNyZW1fc3plcm8gLSB0YmxfdHJhbnMJIyAkMjUtMSBmcmVtIHplcm8KKwlzaG9ydAkJc3JlbV9zaW5mIC0gdGJsX3RyYW5zCSMgJDI1LTIgZnJlbSBpbmYKKwlzaG9ydAkJc29wX3NxbmFuIC0gdGJsX3RyYW5zCSMgJDI1LTMgZnJlbSBxbmFuCisJc2hvcnQJCXNyZW1fc2Rucm0gLSB0YmxfdHJhbnMJIyAkMjUtNSBmcmVtIGRlbm9ybQorCXNob3J0CQlzb3Bfc3NuYW4gLSB0YmxfdHJhbnMJIyAkMjUtNCBmcmVtIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI1LTYgZnJlbSB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI1LTcgRVJST1IKKworCXNob3J0CQlzc2NhbGVfc25vcm0gLSB0YmxfdHJhbnMgIyAkMjYtMCBmc2NhbGUgbm9ybQorCXNob3J0CQlzc2NhbGVfc3plcm8gLSB0YmxfdHJhbnMgIyAkMjYtMSBmc2NhbGUgemVybworCXNob3J0CQlzc2NhbGVfc2luZiAtIHRibF90cmFucwkjICQyNi0yIGZzY2FsZSBpbmYKKwlzaG9ydAkJc29wX3NxbmFuIC0gdGJsX3RyYW5zCSMgJDI2LTMgZnNjYWxlIHFuYW4KKwlzaG9ydAkJc3NjYWxlX3NkbnJtIC0gdGJsX3RyYW5zICMgJDI2LTUgZnNjYWxlIGRlbm9ybQorCXNob3J0CQlzb3Bfc3NuYW4gLSB0YmxfdHJhbnMJIyAkMjYtNCBmc2NhbGUgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjYtNiBmc2NhbGUgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTAgZnNnbG11bCBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy0xIGZzZ2xtdWwgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctMiBmc2dsbXVsIGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctMyBmc2dsbXVsIHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTUgZnNnbG11bCBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTQgZnNnbG11bCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy02IGZzZ2xtdWwgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTAgZnN1YiBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC0xIGZzdWIgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtMiBmc3ViIGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtMyBmc3ViIHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTUgZnN1YiBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTQgZnN1YiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC02IGZzdWIgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzMC0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMC0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzMC0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDMwLTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMwLTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzAtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMwLTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMwLTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzMS0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMS0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzMS0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDMxLTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMxLTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzEtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMxLTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMxLTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzMi0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMi0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzMi0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDMyLTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMyLTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzItNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMyLTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMyLTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzMy0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMy0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzMy0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDMzLTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMzLTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzMtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMzLTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMzLTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzNC0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNC0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzNC0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDM0LTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM0LTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzQtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM0LTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM0LTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzNS0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNS0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzNS0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDM1LTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM1LTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzUtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM1LTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM1LTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzNi0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNi0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzNi0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDM2LTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM2LTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzYtNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM2LTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM2LTcgRVJST1IKKworCXNob3J0CQlzc2luY29zCSAtIHRibF90cmFucwkjICQzNy0wIGZzaW5jb3Mgbm9ybQorCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNy0xIGZzaW5jb3MgemVybworCXNob3J0CQlzc2luY29zaSAtIHRibF90cmFucwkjICQzNy0yIGZzaW5jb3MgaW5mCisJc2hvcnQJCXNzaW5jb3NxbmFuIC0gdGJsX3RyYW5zCSMgJDM3LTMgZnNpbmNvcyBxbmFuCisJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM3LTUgZnNpbmNvcyBkZW5vcm0KKwlzaG9ydAkJc3NpbmNvc3NuYW4gLSB0YmxfdHJhbnMJIyAkMzctNCBmc2luY29zIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM3LTYgZnNpbmNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM3LTcgRVJST1IKKworIyMjIyMjIyMjIworCisjIHRoZSBpbnN0cnVjdGlvbiBmZXRjaCBhY2Nlc3MgZm9yIHRoZSBkaXNwbGFjZW1lbnQgd29yZCBmb3IgdGhlCisjIGZkYmNjIGVtdWxhdGlvbiBmYWlsZWQuIGhlcmUsIHdlIGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUKKyMgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBhbmQgYnJhbmNoIHRvIF9yZWFsX2FjY2VzcygpLgorZnVuaW1wX2lhY2M6CisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisKKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQworCisJdW5sawkJJWE2CisKKwltb3YubAkJKCVzcCksLSglc3ApCQkjIHN0b3JlIFNSLGhpKFBDKQorCW1vdi53CQkweDgoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQorCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgdm9mZgorCW1vdi5sCQkweDIoJXNwKSwweDgoJXNwKQkjIHN0b3JlIEVBCisJbW92LmwJCSYweDA5NDI4MDAxLDB4Yyglc3ApCSMgc3RvcmUgRlNMVworCisJYnRzdAkJJjB4NSwoJXNwKQkJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KKwliZXEuYgkJZnVuaW1wX2lhY2NfZW5kCQkjIHVzZXIKKwlic2V0CQkmMHgyLDB4ZCglc3ApCQkjIHNldCBzdXBlcnZpc29yIFRNIGJpdAorCitmdW5pbXBfaWFjY19lbmQ6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNzaW4oKTogICAgIGNvbXB1dGVzIHRoZSBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3NpbmQoKTogICAgY29tcHV0ZXMgdGhlIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHNjb3MoKTogICAgIGNvbXB1dGVzIHRoZSBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzY29zZCgpOiAgICBjb21wdXRlcyB0aGUgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjIHNzaW5jb3MoKTogIGNvbXB1dGVzIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc3NpbmNvc2QoKTogY29tcHV0ZXMgdGhlIHNpbmUgYW5kIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBzaW4oWCkgb3IgY29zKFgpCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgRm9yIHNzaW5jb3MoWCk6CQkJCQkJCSMKKyMJZnAwID0gc2luKFgpCQkJCQkJCSMKKyMJZnAxID0gY29zKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDEgdWxwIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLgkjCisjCXdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJU0lOIGFuZCBDT1M6CQkJCQkJCSMKKyMJMS4gSWYgU0lOIGlzIGludm9rZWQsIHNldCBBZGpOIDo9IDA7IG90aGVyd2lzZSwgc2V0IEFkak4gOj0gMS4JIworIwkJCQkJCQkJCSMKKyMJMi4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDcuCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIworIwkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgkJIworIwkJT3ZlcndyaXRlIGsgYnkgayA6PSBrICsgQWRqTi4JCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gSWYgayBpcyBldmVuLCBnbyB0byA2LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKGsgaXMgb2RkKSBTZXQgaiA6PSAoay0xKS8yLCBzZ24gOj0gKC0xKSoqai4JCQkjCisjCQlSZXR1cm4gc2duKmNvcyhyKSB3aGVyZSBjb3MocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuCSMKKyMJCWV2ZW4gcG9seW5vbWlhbCBpbiByLCAxICsgcipyKihCMStzKihCMisgLi4uICsgcypCOCkpLAkjCisjCQlzID0gcipyLgkJCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTYuIChrIGlzIGV2ZW4pIFNldCBqIDo9IGsvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qc2luKHIpCSMKKyMJCXdoZXJlIHNpbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gcgkjCisjCQlyICsgcipzKihBMStzKihBMisgLi4uICsgcypBNykpLAlzID0gcipyLgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk3LiBJZiB8WHwgPiAxLCBnbyB0byA5LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTguICh8WHw8MioqKC00MCkpIElmIFNJTiBpcyBpbnZva2VkLCByZXR1cm4gWDsJCQkjCisjCQlvdGhlcndpc2UgcmV0dXJuIDEuCQkJCQkjCisjCQkJCQkJCQkJIworIwk5LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLAkJIworIwkJZ28gYmFjayB0byAzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVNJTkNPUzoJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDYuCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIworIwkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgayBpcyBldmVuLCBnbyB0byA1LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKGsgaXMgb2RkKSBTZXQgajEgOj0gKGstMSkvMiwgajIgOj0gajEgKEVPUikgKGsgbW9kIDIpLCBpZS4JIworIwkJajEgZXhjbHVzaXZlIG9yIHdpdGggdGhlIGwucy5iLiBvZiBrLgkJCSMKKyMJCXNnbjEgOj0gKC0xKSoqajEsIHNnbjIgOj0gKC0xKSoqajIuCQkJIworIwkJU0lOKFgpID0gc2duMSAqIGNvcyhyKSBhbmQgQ09TKFgpID0gc2duMipzaW4ocikgd2hlcmUJIworIwkJc2luKHIpIGFuZCBjb3MocikgYXJlIGNvbXB1dGVkIGFzIG9kZCBhbmQgZXZlbgkJIworIwkJcG9seW5vbWlhbHMgaW4gciwgcmVzcGVjdGl2ZWx5LiBFeGl0CQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKGsgaXMgZXZlbikgU2V0IGoxIDo9IGsvMiwgc2duMSA6PSAoLTEpKipqMS4JCQkjCisjCQlTSU4oWCkgPSBzZ24xICogc2luKHIpIGFuZCBDT1MoWCkgPSBzZ24xKmNvcyhyKSB3aGVyZQkjCisjCQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuCQkjCisjCQlwb2x5bm9taWFscyBpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQJCQkjCisjCQkJCQkJCQkJIworIwk2LiBJZiB8WHwgPiAxLCBnbyB0byA4LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuICh8WHw8MioqKC00MCkpIFNJTihYKSA9IFggYW5kIENPUyhYKSA9IDEuIEV4aXQuCQkjCisjCQkJCQkJCQkJIworIwk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLAkJIworIwkJZ28gYmFjayB0byAyLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NJTkE3Oglsb25nCQkweEJENkFBQTc3LDB4Q0NDOTk0RjUKK1NJTkE2Oglsb25nCQkweDNERTYxMjA5LDB4N0FBRThEQTEKK1NJTkE1Oglsb25nCQkweEJFNUFFNjQ1LDB4MkExMThBRTQKK1NJTkE0Oglsb25nCQkweDNFQzcxREUzLDB4QTUzNDE1MzEKK1NJTkEzOglsb25nCQkweEJGMkEwMUEwLDB4MUEwMThCNTksMHgwMDAwMDAwMCwweDAwMDAwMDAwCitTSU5BMjoJbG9uZwkJMHgzRkY4MDAwMCwweDg4ODg4ODg4LDB4ODg4ODU5QUYsMHgwMDAwMDAwMAorU0lOQTE6CWxvbmcJCTB4QkZGQzAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQTk5LDB4MDAwMDAwMDAKKworQ09TQjg6CWxvbmcJCTB4M0QyQUM0RDAsMHhENjAxMUVFMworQ09TQjc6CWxvbmcJCTB4QkRBOTM5NkYsMHg5RjQ1QUMxOQorQ09TQjY6CWxvbmcJCTB4M0UyMUVFRDksMHgwNjEyQzk3MgorQ09TQjU6CWxvbmcJCTB4QkU5MjdFNEYsMHhCNzlEOUZDRgorQ09TQjQ6CWxvbmcJCTB4M0VGQTAxQTAsMHgxQTAxRDQyMywweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0NPU0IzOglsb25nCQkweEJGRjUwMDAwLDB4QjYwQjYwQjYsMHgwQjYxRDQzOCwweDAwMDAwMDAwCitDT1NCMjoJbG9uZwkJMHgzRkZBMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFCNUUKK0NPU0IxOglsb25nCQkweEJGMDAwMDAwCisKKwlzZXQJCUlOQVJHLEZQX1NDUjAKKworCXNldAkJWCxGUF9TQ1IwCisjCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCVJQUklNRSxGUF9TQ1IwCisJc2V0CQlTUFJJTUUsRlBfU0NSMQorCisJc2V0CQlQT1NORUcxLExfU0NSMQorCXNldAkJVFdPVE82MyxMX1NDUjEKKworCXNldAkJRU5ERkxBRyxMX1NDUjIKKwlzZXQJCUlOVCxMX1NDUjIKKworCXNldAkJQURKTixMX1NDUjMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNzaW4KK3NzaW46CisJbW92LmwJCSYwLEFESk4oJWE2KQkJIyB5ZXM7IFNFVCBBREpOIFRPIDAKKwlicmEuYgkJU0lOQkdOCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzY29zCitzY29zOgorCW1vdi5sCQkmMSxBREpOKCVhNikJCSMgeWVzOyBTRVQgQURKTiBUTyAxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTSU5CR046CisjLS1TQVZFIEZQQ1IsIEZQMS4gQ0hFQ0sgSUYgfFh8IElTIFRPTyBTTUFMTCBPUiBMQVJHRQorCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwlmbW92LngJCSVmcDAsWCglYTYpCQkjIHNhdmUgaW5wdXQgYXQgWAorCisjICJDT01QQUNUSUZZIiBYCisJbW92LmwJCSglYTApLCVkMQkJIyBwdXQgZXhwIGluIGhpIHdvcmQKKwltb3YudwkJNCglYTApLCVkMQkJIyBmZXRjaCBoaShtYW4pCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQkJIyBzdHJpcCBzaWduCisKKwljbXBpLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyBpcyB8WHwgPj0gMioqKC00MCk/CisJYmdlLmIJCVNPSzEJCQkjIG5vCisJYnJhLncJCVNJTlNNCQkJIyB5ZXM7IGlucHV0IGlzIHZlcnkgc21hbGwKKworU09LMToKKwljbXAubAkJJWQxLCYweDQwMDRCQzdFCQkjIGlzIHxYfCA8IDE1IFBJPworCWJsdC5iCQlTSU5NQUlOCQkJIyBubworCWJyYS53CQlTUkVEVUNFWAkJIyB5ZXM7IGlucHV0IGlzIHZlcnkgbGFyZ2UKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCitTSU5NQUlOOgorCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5kCQlUV09CWVBJKCVwYyksJWZwMQkjIFgqMi9QSQorCisJbGVhCQlQSVRCTCsweDIwMCglcGMpLCVhMQkjIFRBQkxFIE9GIE4qUEkvMiwgTiA9IC0zMiwuLi4sMzIKKworCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBDT05WRVJUIFRPIElOVEVHRVIKKworCW1vdi5sCQlJTlQoJWE2KSwlZDEJCSMgbWFrZSBhIGNvcHkgb2YgTgorCWFzbC5sCQkmNCwlZDEJCQkjIE4gKj0gMTYKKwlhZGQubAkJJWQxLCVhMQkJCSMgdGJsX2FkZHIgPSBhMSArIChOKjE2KQorCisjIEExIElTIFRIRSBBRERSRVNTIE9GIE4qUElCWTIKKyMgLi4uV0hJQ0ggSVMgSU4gVFdPIFBJRUNFUyBZMSAmIFkyCisJZnN1Yi54CQkoJWExKSssJWZwMAkJIyBYLVkxCisJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIGZwMCA9IFIgPSAoWC1ZMSktWTIKKworU0lOQ09OVDoKKyMtLWNvbnRpbnVhdGlvbiBmcm9tIFJFRFVDRVgKKworIy0tR0VUIE4rQURKTiBBTkQgU0VFIElGIFNJTihSKSBPUiBDT1MoUikgSVMgTkVFREVECisJbW92LmwJCUlOVCglYTYpLCVkMQorCWFkZC5sCQlBREpOKCVhNiksJWQxCQkjIFNFRSBJRiBEMCBJUyBPREQgT1IgRVZFTgorCXJvci5sCQkmMSwlZDEJCQkjIEQwIFdBUyBPREQgSUZGIEQwIElTIE5FR0FUSVZFCisJY21wLmwJCSVkMSwmMAorCWJsdC53CQlDT1NQT0xZCisKKyMtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgorIy0tVEhFTiBXRSBSRVRVUk4JU0dOKlNJTihSKS4gU0dOKlNJTihSKSBJUyBDT01QVVRFRCBCWQorIy0tUicgKyBSJypTKihBMSArIFMoQTIgKyBTKEEzICsgUyhBNCArIC4uLiArIFNBNykpKSksIFdIRVJFCisjLS1SJyA9IFNHTipSLCBTPVIqUi4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCisjLS1SJyArIFInKlMqKCBbQTErVChBMytUKEE1K1RBNykpXSArIFtTKEEyK1QoQTQrVEE2KSldKQorIy0tV0hFUkUgVD1TKlMuCisjLS1OT1RFIFRIQVQgQTMgVEhST1VHSCBBNyBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KKyMtLVdISUxFIEExIEFORCBBMiBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVC4KK1NJTlBPTFk6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm1vdi54CQklZnAwLFgoJWE2KQkJIyBYIElTIFIKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUworCisJZm1vdi5kCQlTSU5BNyglcGMpLCVmcDMKKwlmbW92LmQJCVNJTkE2KCVwYyksJWZwMgorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgVAorCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKyMgLi4uTEVBU1QgU0lHLiBCSVQgT0YgRDAgSU4gU0lHTiBQT1NJVElPTgorCWVvci5sCQklZDEsWCglYTYpCQkjIFggSVMgTk9XIFInPSBTR04qUgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgVEE3CisJZm11bC54CQklZnAxLCVmcDIJCSMgVEE2CisKKwlmYWRkLmQJCVNJTkE1KCVwYyksJWZwMwkJIyBBNStUQTcKKwlmYWRkLmQJCVNJTkE0KCVwYyksJWZwMgkJIyBBNCtUQTYKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFQoQTUrVEE3KQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFQoQTQrVEE2KQorCisJZmFkZC5kCQlTSU5BMyglcGMpLCVmcDMJCSMgQTMrVChBNStUQTcpCisJZmFkZC54CQlTSU5BMiglcGMpLCVmcDIJCSMgQTIrVChBNCtUQTYpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBUKEEzK1QoQTUrVEE3KSkKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTIrVChBNCtUQTYpKQorCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAxCQkjIEExK1QoQTMrVChBNStUQTcpKQorCWZtdWwueAkJWCglYTYpLCVmcDAJCSMgUicqUworCisJZmFkZC54CQklZnAyLCVmcDEJCSMgW0ExK1QoQTMrVChBNStUQTcpKV0rW1MoQTIrVChBNCtUQTYpKV0KKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFNJTihSJyktUicKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmFkZC54CQlYKCVhNiksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworIy0tTEVUIEogQkUgVEhFIExFQVNUIFNJRy4gQklUIE9GIEQwLCBMRVQgU0dOIDo9ICgtMSkqKkouCisjLS1USEVOIFdFIFJFVFVSTglTR04qQ09TKFIpLiBTR04qQ09TKFIpIElTIENPTVBVVEVEIEJZCisjLS1TR04gKyBTJyooQjEgKyBTKEIyICsgUyhCMyArIFMoQjQgKyAuLi4gKyBTQjgpKSkpLCBXSEVSRQorIy0tUz1SKlIgQU5EIFMnPVNHTipTLiBUSElTIENBTiBCRSBSRVdSSVRURU4gQVMKKyMtLVNHTiArIFMnKihbQjErVChCMytUKEI1K1RCNykpXSArIFtTKEIyK1QoQjQrVChCNitUQjgpKSldKQorIy0tV0hFUkUgVD1TKlMuCisjLS1OT1RFIFRIQVQgQjQgVEhST1VHSCBCOCBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KKyMtLVdISUxFIEIyIEFORCBCMyBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVCwgQjEgSVMgLTEvMgorIy0tQU5EIElTIFRIRVJFRk9SRSBTVE9SRUQgQVMgU0lOR0xFIFBSRUNJU0lPTi4KK0NPU1BPTFk6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFMKKworCWZtb3YuZAkJQ09TQjgoJXBjKSwlZnAyCisJZm1vdi5kCQlDT1NCNyglcGMpLCVmcDMKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFQKKworCWZtb3YueAkJJWZwMCxYKCVhNikJCSMgWCBJUyBTCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKyMgLi4uTEVBU1QgU0lHLiBCSVQgT0YgRDAgSU4gU0lHTiBQT1NJVElPTgorCisJZm11bC54CQklZnAxLCVmcDIJCSMgVEI4CisKKwllb3IubAkJJWQxLFgoJWE2KQkJIyBYIElTIE5PVyBTJz0gU0dOKlMKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBUQjcKKworCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyBEMCBJUyBTR04gSU4gU0lOR0xFCisJbW92LmwJCSVkMSxQT1NORUcxKCVhNikKKworCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAyCQkjIEI2K1RCOAorCWZhZGQuZAkJQ09TQjUoJXBjKSwlZnAzCQkjIEI1K1RCNworCisJZm11bC54CQklZnAxLCVmcDIJCSMgVChCNitUQjgpCisJZm11bC54CQklZnAxLCVmcDMJCSMgVChCNStUQjcpCisKKwlmYWRkLmQJCUNPU0I0KCVwYyksJWZwMgkJIyBCNCtUKEI2K1RCOCkKKwlmYWRkLngJCUNPU0IzKCVwYyksJWZwMwkJIyBCMytUKEI1K1RCNykKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFQoQjQrVChCNitUQjgpKQorCWZtdWwueAkJJWZwMywlZnAxCQkjIFQoQjMrVChCNStUQjcpKQorCisJZmFkZC54CQlDT1NCMiglcGMpLCVmcDIJCSMgQjIrVChCNCtUKEI2K1RCOCkpCisJZmFkZC5zCQlDT1NCMSglcGMpLCVmcDEJCSMgQjErVChCMytUKEI1K1RCNykpCisKKwlmbXVsLngJCSVmcDIsJWZwMAkJIyBTKEIyK1QoQjQrVChCNitUQjgpKSkKKworCWZhZGQueAkJJWZwMSwlZnAwCisKKwlmbXVsLngJCVgoJWE2KSwlZnAwCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDAJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFNJTmU6IEJpZyBPUiBTbWFsbD8KKyMtLUlGIHxYfCA+IDE1UEksIFdFIFVTRSBUSEUgR0VORVJBTCBBUkdVTUVOVCBSRURVQ1RJT04uCisjLS1JRiB8WHwgPCAyKiooLTQwKSwgUkVUVVJOIFggT1IgMS4KK1NJTkJPUlM6CisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC5sCQlTUkVEVUNFWAorCitTSU5TTToKKwltb3YubAkJQURKTiglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwliZ3QuYgkJQ09TVElOWQorCisjIGhlcmUsIHRoZSBvcGVyYXRpb24gbWF5IHVuZGVyZmxvdyBpZmYgdGhlIHByZWNpc2lvbiBpcyBzZ2wgb3IgZGJsLgorIyBleHRlbmRlZCBkZW5vcm1zIGFyZSBoYW5kbGVkIHRocm91Z2ggYW5vdGhlciBlbnRyeSBwb2ludC4KK1NJTlRJTlk6CisjCW1vdi53CQkmMHgwMDAwLFhEQ0FSRSglYTYpCSMgSlVTVCBJTiBDQVNFCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfY2F0Y2gKKworQ09TVElOWToKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBmcDAgPSAxLjAKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZhZGQucwkJJjB4ODA4MDAwMDAsJWZwMAkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzc2luZAorIy0tU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3NzaW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzY29zZAorIy0tQ09TKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKK3Njb3NkOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIGZwMCA9IDEuMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzc2luY29zCitzc2luY29zOgorIy0tU0VUIEFESk4gVE8gNAorCW1vdi5sCQkmNCxBREpOKCVhNikKKworCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJZm1vdi54CQklZnAwLFgoJWE2KQorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQkJIyBDT01QQUNUSUZZIFgKKworCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAJCSMgfFh8ID49IDIqKigtNDApPworCWJnZS5iCQlTQ09LMQorCWJyYS53CQlTQ1NNCisKK1NDT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CisJYmx0LmIJCVNDTUFJTgorCWJyYS53CQlTUkVEVUNFWAorCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KKyMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorU0NNQUlOOgorCWZtb3YueAkJJWZwMCwlZnAxCisKKwlmbXVsLmQJCVRXT0JZUEkoJXBjKSwlZnAxCSMgWCoyL1BJCisKKwlsZWEJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgorCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIENPTlZFUlQgVE8gSU5URUdFUgorCisJbW92LmwJCUlOVCglYTYpLCVkMQorCWFzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBOKlBJQlkyLCBJTiBZMSwgWTIKKworCWZzdWIueAkJKCVhMSkrLCVmcDAJCSMgWC1ZMQorCWZzdWIucwkJKCVhMSksJWZwMAkJIyBGUDAgSVMgUiA9IChYLVkxKS1ZMgorCitTQ0NPTlQ6CisjLS1jb250aW51YXRpb24gcG9pbnQgZnJvbSBSRURVQ0VYCisKKwltb3YubAkJSU5UKCVhNiksJWQxCisJcm9yLmwJCSYxLCVkMQorCWNtcC5sCQklZDEsJjAJCQkjIEQwIDwgMCBJRkYgTiBJUyBPREQKKwliZ2UudwkJTkVWRU4KKworU05PREQ6CisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBEMCwgQTAsIEZQMi4KKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTID0gUipSCisJZm1vdi5kCQlTSU5BNyglcGMpLCVmcDEJCSMgQTcKKwlmbW92LmQJCUNPU0I4KCVwYyksJWZwMgkJIyBCOAorCWZtdWwueAkJJWZwMCwlZnAxCQkjIFNBNworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFNCOAorCisJbW92LmwJCSVkMiwtKCVzcCkKKwltb3YubAkJJWQxLCVkMgorCXJvci5sCQkmMSwlZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisJZW9yLmwJCSVkMSwlZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisKKwlmYWRkLmQJCVNJTkE2KCVwYyksJWZwMQkJIyBBNitTQTcKKwlmYWRkLmQJCUNPU0I3KCVwYyksJWZwMgkJIyBCNytTQjgKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTYrU0E3KQorCWVvci5sCQklZDIsUlBSSU1FKCVhNikKKwltb3YubAkJKCVzcCkrLCVkMgorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjcrU0I4KQorCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJbW92LmwJCSYweDNGODAwMDAwLFBPU05FRzEoJWE2KQorCWVvci5sCQklZDEsUE9TTkVHMSglYTYpCisKKwlmYWRkLmQJCVNJTkE1KCVwYyksJWZwMQkJIyBBNStTKEE2K1NBNykKKwlmYWRkLmQJCUNPU0I2KCVwYyksJWZwMgkJIyBCNitTKEI3K1NCOCkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTUrUyhBNitTQTcpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjYrUyhCNytTQjgpKQorCWZtb3YueAkJJWZwMCxTUFJJTUUoJWE2KQorCisJZmFkZC5kCQlTSU5BNCglcGMpLCVmcDEJCSMgQTQrUyhBNStTKEE2K1NBNykpCisJZW9yLmwJCSVkMSxTUFJJTUUoJWE2KQorCWZhZGQuZAkJQ09TQjUoJXBjKSwlZnAyCQkjIEI1K1MoQjYrUyhCNytTQjgpKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNCsuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNSsuLi4pCisKKwlmYWRkLmQJCVNJTkEzKCVwYyksJWZwMQkJIyBBMytTKEE0Ky4uLikKKwlmYWRkLmQJCUNPU0I0KCVwYyksJWZwMgkJIyBCNCtTKEI1Ky4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTMrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjQrLi4uKQorCisJZmFkZC54CQlTSU5BMiglcGMpLCVmcDEJCSMgQTIrUyhBMysuLi4pCisJZmFkZC54CQlDT1NCMyglcGMpLCVmcDIJCSMgQjMrUyhCNCsuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEEyKy4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEIzKy4uLikKKworCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAxCQkjIEExK1MoQTIrLi4uKQorCWZhZGQueAkJQ09TQjIoJXBjKSwlZnAyCQkjIEIyK1MoQjMrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBMSsuLi4pCisJZm11bC54CQklZnAyLCVmcDAJCSMgUyhCMisuLi4pCisKKwlmbXVsLngJCVJQUklNRSglYTYpLCVmcDEJIyBSJ1MoQTErLi4uKQorCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAwCQkjIEIxK1MoQjIuLi4pCisJZm11bC54CQlTUFJJTUUoJWE2KSwlZnAwCSMgUycoQjErUyhCMisuLi4pKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjIHJlc3RvcmUgZnAyCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJUlBSSU1FKCVhNiksJWZwMQkjIENPUyhYKQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDAJIyBTSU4oWCkKKwlicmEJCXRfaW54MgorCitORVZFTjoKKyMtLVJFR0lTVEVSUyBTQVZFRCBTTyBGQVI6IEZQMi4KKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTID0gUipSCisKKwlmbW92LmQJCUNPU0I4KCVwYyksJWZwMQkJIyBCOAorCWZtb3YuZAkJU0lOQTcoJXBjKSwlZnAyCQkjIEE3CisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTQjgKKwlmbW92LngJCSVmcDAsU1BSSU1FKCVhNikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTQTcKKworCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisKKwlmYWRkLmQJCUNPU0I3KCVwYyksJWZwMQkJIyBCNytTQjgKKwlmYWRkLmQJCVNJTkE2KCVwYyksJWZwMgkJIyBBNitTQTcKKworCWVvci5sCQklZDEsUlBSSU1FKCVhNikKKwllb3IubAkJJWQxLFNQUklNRSglYTYpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI3K1NCOCkKKworCW9yLmwJCSYweDNGODAwMDAwLCVkMQorCW1vdi5sCQklZDEsUE9TTkVHMSglYTYpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEE2K1NBNykKKworCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAxCQkjIEI2K1MoQjcrU0I4KQorCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAyCQkjIEE1K1MoQTYrU0E3KQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNitTKEI3K1NCOCkpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBNStTKEE2K1NBNykpCisKKwlmYWRkLmQJCUNPU0I1KCVwYyksJWZwMQkJIyBCNStTKEI2K1MoQjcrU0I4KSkKKwlmYWRkLmQJCVNJTkE0KCVwYyksJWZwMgkJIyBBNCtTKEE1K1MoQTYrU0E3KSkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjUrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTQrLi4uKQorCisJZmFkZC5kCQlDT1NCNCglcGMpLCVmcDEJCSMgQjQrUyhCNSsuLi4pCisJZmFkZC5kCQlTSU5BMyglcGMpLCVmcDIJCSMgQTMrUyhBNCsuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI0Ky4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEEzKy4uLikKKworCWZhZGQueAkJQ09TQjMoJXBjKSwlZnAxCQkjIEIzK1MoQjQrLi4uKQorCWZhZGQueAkJU0lOQTIoJXBjKSwlZnAyCQkjIEEyK1MoQTMrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCMysuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBMisuLi4pCisKKwlmYWRkLngJCUNPU0IyKCVwYyksJWZwMQkJIyBCMitTKEIzKy4uLikKKwlmYWRkLngJCVNJTkExKCVwYyksJWZwMgkJIyBBMStTKEEyKy4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjIrLi4uKQorCWZtdWwueAkJJWZwMiwlZnAwCQkjIHMoYTErLi4uKQorCisKKwlmYWRkLnMJCUNPU0IxKCVwYyksJWZwMQkJIyBCMStTKEIyLi4uKQorCWZtdWwueAkJUlBSSU1FKCVhNiksJWZwMAkjIFInUyhBMSsuLi4pCisJZm11bC54CQlTUFJJTUUoJWE2KSwlZnAxCSMgUycoQjErUyhCMisuLi4pKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjIHJlc3RvcmUgZnAyCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDEJIyBDT1MoWCkKKwlic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwlmYWRkLngJCVJQUklNRSglYTYpLCVmcDAJIyBTSU4oWCkKKwlicmEJCXRfaW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0NCT1JTOgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QudwkJU1JFRFVDRVgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDU006CisjCW1vdi53CQkmMHgwMDAwLFhEQ0FSRSglYTYpCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZzdWIucwkJJjB4MDA4MDAwMDAsJWZwMQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3YubAkJJWZwY3IsJWQwCQkjIGQwIG11c3QgaGF2ZSBmcGNyLHRvbworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJYnJhCQl0X2NhdGNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3NpbmNvc2QKKyMtLVNJTiBBTkQgQ09TIE9GIFggRk9SIERFTk9STUFMSVpFRCBYCitzc2luY29zZDoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJYnNyCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMtLVdIRU4gUkVEVUNFWCBJUyBVU0VELCBUSEUgQ09ERSBXSUxMIElORVZJVEFCTFkgQkUgU0xPVy4KKyMtLVRISVMgUkVEVUNUSU9OIE1FVEhPRCwgSE9XRVZFUiwgSVMgTVVDSCBGQVNURVIgVEhBTiBVU0lORworIy0tVEhFIFJFTUFJTkRFUiBJTlNUUlVDVElPTiBXSElDSCBJUyBOT1cgSU4gU09GVFdBUkUuCitTUkVEVUNFWDoKKwlmbW92bS54CQkmMHgzYywtKCVzcCkJCSMgc2F2ZSB7ZnAyLWZwNX0KKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgZnAxID0gMAorCisjLS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0CisjLS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKKyMtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorIy0tc2FmZS4KKwljbXAubAkJJWQxLCYweDdmZmVmZmZmCQkjIGlzIGFyZyBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmUuYgkJU0xPT1AJCQkjIG5vCisKKyMgeWVzOyBjcmVhdGUgMioqMTYzODMqUEkvMgorCW1vdi53CQkmMHg3ZmZlLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhjOTBmZGFhMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisKKyMgY3JlYXRlIGxvdyBoYWxmIG9mIDIqKjE2MzgzKlBJLzIgYXQgRlBfU0NSMQorCW1vdi53CQkmMHg3ZmRjLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NWEzMDhkMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCisKKwlmdGVzdC54CQklZnAwCQkJIyB0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwlmYmx0LncJCXNyZWRfbmVnCisKKwlvci5iCQkmMHg4MCxGUF9TQ1IwX0VYKCVhNikJIyBwb3NpdGl2ZSBhcmcKKwlvci5iCQkmMHg4MCxGUF9TQ1IxX0VYKCVhNikKK3NyZWRfbmVnOgorCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBoaWdoIHBhcnQgb2YgcmVkdWN0aW9uIGlzIGV4YWN0CisJZm1vdi54CQklZnAwLCVmcDEJCSMgc2F2ZSBoaWdoIHJlc3VsdCBpbiBmcDEKKwlmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgbG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1Yi54CQklZnAwLCVmcDEJCSMgZGV0ZXJtaW5lIGxvdyBjb21wb25lbnQgb2YgcmVzdWx0CisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMQkjIGZwMC9mcDEgYXJlIHJlZHVjZWQgYXJndW1lbnQuCisKKyMtLU9OIEVOVFJZLCBGUDAgSVMgWCwgT04gUkVUVVJOLCBGUDAgSVMgWCBSRU0gUEkvMiwgfFh8IDw9IFBJLzQuCisjLS1pbnRlZ2VyIHF1b3RpZW50IHdpbGwgYmUgc3RvcmVkIGluIE4KKyMtLUludGVybWVkaXRhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKK1NMT09QOgorCWZtb3YueAkJJWZwMCxJTkFSRyglYTYpCQkjICstMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3YudwkJSU5BUkcoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVhMQkJCSMgc2F2ZSBhIGNvcHkgb2YgRDAKKwlhbmQubAkJJjB4MDAwMDdGRkYsJWQxCisJc3ViLmwJCSYweDAwMDAzRkZGLCVkMQkJIyBkMCA9IEsKKwljbXAubAkJJWQxLCYyOAorCWJsZS5iCQlTTEFTVExPT1AKK1NDT05UTE9PUDoKKwlzdWIubAkJJjI3LCVkMQkJCSMgZDAgPSBMIDo9IEstMjcKKwltb3YuYgkJJjAsRU5ERkxBRyglYTYpCisJYnJhLmIJCVNXT1JLCitTTEFTVExPT1A6CisJY2xyLmwJCSVkMQkJCSMgZDAgPSBMIDo9IDAKKwltb3YuYgkJJjEsRU5ERkxBRyglYTYpCisKK1NXT1JLOgorIy0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorIy0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCisjLS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKKyMtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDIJCSMgQklBU0VEIEVYUCBPRiAyL1BJCisJc3ViLmwJCSVkMSwlZDIJCQkjIEJJQVNFRCBFWFAgT0YgMioqKC1MKSooMi9QSSkKKworCW1vdi5sCQkmMHhBMkY5ODM2RSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJJjB4NEU0NDE1MkEsRlBfU0NSMF9MTyglYTYpCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBGUF9TQ1IwID0gMioqKC1MKSooMi9QSSkKKworCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMgkjIGZwMiA9IFggKiAyKiooLUwpKigyL1BJKQorCisjLS1XRSBNVVNUIE5PVyBGSU5EIElOVChGUDIpLiBTSU5DRSBXRSBORUVEIFRISVMgVkFMVUUgSU4KKyMtLUZMT0FUSU5HIFBPSU5UIEZPUk1BVCwgVEhFIFRXTyBGTU9WRSdTCUZNT1ZFLkwgRlAgPC0tPiBOCisjLS1XSUxMIEJFIFRPTyBJTkVGRklDSUVOVC4gVEhFIFdBWSBBUk9VTkQgSVQgSVMgVEhBVAorIy0tKFNJR04oSU5BUkcpKjIqKjYzCSsJRlAyKSAtIFNJR04oSU5BUkcpKjIqKjYzIFdJTEwgR0lWRQorIy0tVVMgVEhFIERFU0lSRUQgVkFMVUUgSU4gRkxPQVRJTkcgUE9JTlQuCisJbW92LmwJCSVhMSwlZDIKKwlzd2FwCQklZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisJb3IubAkJJjB4NUYwMDAwMDAsJWQyCQkjIGQyID0gU0lHTihJTkFSRykqMioqNjMgSU4gU0dMCisJbW92LmwJCSVkMixUV09UTzYzKCVhNikKKwlmYWRkLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgVEhFIEZSQUNUSU9OQUwgUEFSVCBPRiBGUDEgSVMgUk9VTkRFRAorCWZzdWIucwkJVFdPVE82MyglYTYpLCVmcDIJIyBmcDIgPSBOCisjCWZpbnQueAkJJWZwMgorCisjLS1DUkVBVElORyAyKiooTCkqUGlieTJfMSBhbmQgMioqKEwpKlBpYnkyXzIKKwltb3YubAkJJWQxLCVkMgkJCSMgZDIgPSBMCisKKwlhZGQubAkJJjB4MDAwMDNGRkYsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMioqTCAqIChQSS8yKQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCSYweEM5MEZEQUEyLEZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikJCSMgRlBfU0NSMCA9IDIqKihMKSAqIFBpYnkyXzEKKworCWFkZC5sCQkmMHgwMDAwM0ZERCwlZDEKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NUEzMDhEMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCQkjIEZQX1NDUjEgPSAyKiooTCkgKiBQaWJ5Ml8yCisKKwltb3YuYgkJRU5ERkxBRyglYTYpLCVkMQorCisjLS1XZSBhcmUgbm93IHJlYWR5IHRvIHBlcmZvcm0gKFIrcikgLSBOKlAxIC0gTipQMiwgUDEgPSAyKiooTCkgKiBQaWJ5Ml8xIGFuZAorIy0tUDIgPSAyKiooTCkgKiBQaWJ5Ml8yCisJZm1vdi54CQklZnAyLCVmcDQJCSMgZnA0ID0gTgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDQJIyBmcDQgPSBXID0gTipQMQorCWZtb3YueAkJJWZwMiwlZnA1CQkjIGZwNSA9IE4KKwlmbXVsLngJCUZQX1NDUjEoJWE2KSwlZnA1CSMgZnA1ID0gdyA9IE4qUDIKKwlmbW92LngJCSVmcDQsJWZwMwkJIyBmcDMgPSBXID0gTipQMQorCisjLS13ZSB3YW50IFArcCA9IFcrdyAgYnV0ICB8cHwgPD0gaGFsZiB1bHAgb2YgUAorIy0tVGhlbiwgd2UgbmVlZCB0byBjb21wdXRlICBBIDo9IFItUCAgIGFuZCAgYSA6PSByLXAKKwlmYWRkLngJCSVmcDUsJWZwMwkJIyBmcDMgPSBQCisJZnN1Yi54CQklZnAzLCVmcDQJCSMgZnA0ID0gVy1QCisKKwlmc3ViLngJCSVmcDMsJWZwMAkJIyBmcDAgPSBBIDo9IFIgLSBQCisJZmFkZC54CQklZnA1LCVmcDQJCSMgZnA0ID0gcCA9IChXLVApK3cKKworCWZtb3YueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEKKwlmc3ViLngJCSVmcDQsJWZwMQkJIyBmcDEgPSBhIDo9IHIgLSBwCisKKyMtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorIy0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwID0gUiA6PSBBK2EKKyMtLU5vIG5lZWQgdG8gY2FsY3VsYXRlIHIgaWYgdGhpcyBpcyB0aGUgbGFzdCBsb29wCisJY21wLmIJCSVkMSwmMAorCWJndC53CQlTUkVTVE9SRQorCisjLS1OZWVkIHRvIGNhbGN1bGF0ZSByCisJZnN1Yi54CQklZnAwLCVmcDMJCSMgZnAzID0gQS1SCisJZmFkZC54CQklZnAzLCVmcDEJCSMgZnAxID0gciA6PSAoQS1SKSthCisJYnJhLncJCVNMT09QCisKK1NSRVNUT1JFOgorCWZtb3YubAkJJWZwMixJTlQoJWE2KQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSB7ZnAyLWZwNX0KKworCW1vdi5sCQlBREpOKCVhNiksJWQxCisJY21wLmwJCSVkMSwmNAorCisJYmx0LncJCVNJTkNPTlQKKwlicmEudwkJU0NDT05UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3RhbigpOiAgY29tcHV0ZXMgdGhlIHRhbmdlbnQgb2YgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzdGFuZCgpOiBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHRhbihYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscCBpbiA2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gIworIwl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA2LgkJCSMKKyMJCQkJCQkJCQkjCisjCTIuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0CSMKKyMJCWsgPSBOIG1vZCAyLCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCBvciAxLgkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgayBpcyBvZGQsIGdvIHRvIDUuCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAoayBpcyBldmVuKSBUYW4oWCkgPSB0YW4ocikgYW5kIHRhbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYQkjCisjCQlyYXRpb25hbCBmdW5jdGlvbiBVL1Ygd2hlcmUJCQkJIworIwkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAkJCSMKKyMJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgIHMgPSByKnIuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIChrIGlzIG9kZCkgVGFuKFgpID0gLWNvdChyKS4gU2luY2UgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSAjCisjCQlhIHJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQkJCQkjCisjCQlVID0gciArIHIqcyooUDEgKyBzKihQMiArIHMqUDMpKSwgYW5kCQkJIworIwkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCBzID0gcipyLAkjCisjCQktQ290KHIpID0gLVYvVS4gRXhpdC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTYuIElmIHxYfCA+IDEsIGdvIHRvIDguCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNy4gKHxYfDwyKiooLTQwKSkgVGFuKFgpID0gWC4gRXhpdC4JCQkJIworIwkJCQkJCQkJCSMKKyMJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjawkjCisjCQl0byAyLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUQU5RNDoKKwlsb25nCQkweDNFQTBCNzU5LDB4RjUwRjg2ODgKK1RBTlAzOgorCWxvbmcJCTB4QkVGMkJBQTUsMHhBODkyNEYwNAorCitUQU5RMzoKKwlsb25nCQkweEJGMzQ2RjU5LDB4QjM5QkE2NUYsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK1RBTlAyOgorCWxvbmcJCTB4M0ZGNjAwMDAsMHhFMDczRDNGQywweDE5OUM0QTAwLDB4MDAwMDAwMDAKKworVEFOUTI6CisJbG9uZwkJMHgzRkY5MDAwMCwweEQyM0NENjg0LDB4MTVEOTVGQTEsMHgwMDAwMDAwMAorCitUQU5QMToKKwlsb25nCQkweEJGRkMwMDAwLDB4ODg5NUE2QzUsMHhGQjQyM0JDQSwweDAwMDAwMDAwCisKK1RBTlExOgorCWxvbmcJCTB4QkZGRDAwMDAsMHhFRUY1N0UwRCwweEE4NEJDOENFLDB4MDAwMDAwMDAKKworSU5WVFdPUEk6CisJbG9uZwkJMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEsMHgwMDAwMDAwMAorCitUV09QSTE6CisJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorVFdPUEkyOgorCWxvbmcJCTB4M0ZERjAwMDAsMHg4NUEzMDhENCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworIy0tTipQSS8yLCAtMzIgPD0gTiA8PSAzMiwgSU4gQSBMRUFESU5HIFRFUk0gSU4gRVhULiBBTkQgVFJBSUxJTkcKKyMtLVRFUk0gSU4gU0dMLiBOT1RFIFRIQVQgUEkgSVMgNjQtQklUIExPTkcsIFRIVVMgTipQSS8yIElTIEFUCisjLS1NT1NUIDY5IEJJVFMgTE9ORy4KKyMJZ2xvYmFsCQlQSVRCTAorUElUQkw6CisJbG9uZwkJMHhDMDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTgwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhDMkM3NUJDRCwweDEwNUQ3QzIzLDB4QTBEMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweEExRTgwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHgyMTQ4MDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4QTEyMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QTlBNTYwNzgsMHhDQzMwNjNERCwweDIxRkMwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMTEwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg5RDE0NjJDRSwweEFBMTlEN0I5LDB4QTE1ODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIxRTAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHgyMEIwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4QTE4ODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4ODNGMjY3N0EsMHg2NUVDQkY3MywweDIxQzQwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgyMDAwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhFRUMyRDNBMCwweDg3QUM2NjlGLDB4MjEzODAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweEExMzAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHg5RkMwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjEwMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweEExNjgwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMEEwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4MjA5MDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIxNjAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTA4MDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4MUY4MDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweEEwQjAwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDgwMDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4QTAyMDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIwRTAwMDAwCisJbG9uZwkJMHhDMDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjAwMDAwMAorCWxvbmcJCTB4QzAwMTAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjAwMDAwMDAKKwlsb25nCQkweEMwMDEwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIwNjAwMDAwCisJbG9uZwkJMHhDMDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjgwMDAwMAorCWxvbmcJCTB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MUYwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjAwMDAwMAorCWxvbmcJCTB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4OUY4MDAwMDAKKwlsb25nCQkweDQwMDEwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEEwNjAwMDAwCisJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDAwMDAwMAorCWxvbmcJCTB4NDAwMTAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4OUYwMDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEEwRTAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMDIwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTA4MDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweDIwQjAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjgwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4MjEwODAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEExNjAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMDkwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4MjBBMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweDIxNjgwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTAwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhENUEwRDg0QywweDQzN0Y0RTU4LDB4MUZDMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweDIxMzAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHhBMTM4MDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4QTAwMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4ODNGMjY3N0EsMHg2NUVDQkY3MywweEExQzQwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTg4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg5MDgzNjUyNCwweDg4MDM0Qjk2LDB4QTBCMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEExRTAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHgyMTU4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4QTExMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QTlBNTYwNzgsMHhDQzMwNjNERCwweEExRkMwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMTIwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhCNjM2NUUyMiwweEVFNDZGMDAwLDB4QTE0ODAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweDIxRTgwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHgyMEQwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTE4MDAwMDAKKworCXNldAkJSU5BUkcsRlBfU0NSMAorCisJc2V0CQlUV09UTzYzLExfU0NSMQorCXNldAkJSU5ULExfU0NSMQorCXNldAkJRU5ERkxBRyxMX1NDUjIKKworCWdsb2JhbAkJc3Rhbgorc3RhbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyB8WHwgPj0gMioqKC00MCk/CisJYmdlLmIJCVRBTk9LMQorCWJyYS53CQlUQU5TTQorVEFOT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CisJYmx0LmIJCVRBTk1BSU4KKwlicmEudwkJUkVEVUNFWAorCitUQU5NQUlOOgorIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLmQJCVRXT0JZUEkoJXBjKSwlZnAxCSMgWCoyL1BJCisKKwlsZWEubAkJUElUQkwrMHgyMDAoJXBjKSwlYTEJIyBUQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKwlmbW92LmwJCSVmcDEsJWQxCQkjIENPTlZFUlQgVE8gSU5URUdFUgorCisJYXNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIE4qUElCWTIgSU4gWTEsIFkyCisKKwlmc3ViLngJCSglYTEpKywlZnAwCQkjIFgtWTEKKworCWZzdWIucwkJKCVhMSksJWZwMAkJIyBGUDAgSVMgUiA9IChYLVkxKS1ZMgorCisJcm9yLmwJCSY1LCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgRDAgV0FTIE9ERCBJRkYgRDAgPCAwCisKK1RBTkNPTlQ6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyLGZwMworCisJY21wLmwJCSVkMSwmMAorCWJsdC53CQlOT0RECisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIFMgPSBSKlIKKworCWZtb3YuZAkJVEFOUTQoJXBjKSwlZnAzCisJZm1vdi5kCQlUQU5QMyglcGMpLCVmcDIKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFNRNAorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFNQMworCisJZmFkZC5kCQlUQU5RMyglcGMpLCVmcDMJCSMgUTMrU1E0CisJZmFkZC54CQlUQU5QMiglcGMpLCVmcDIJCSMgUDIrU1AzCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBTKFEzK1NRNCkKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBTKFAyK1NQMykKKworCWZhZGQueAkJVEFOUTIoJXBjKSwlZnAzCQkjIFEyK1MoUTMrU1E0KQorCWZhZGQueAkJVEFOUDEoJXBjKSwlZnAyCQkjIFAxK1MoUDIrU1AzKQorCisJZm11bC54CQklZnAxLCVmcDMJCSMgUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAxLCVmcDIJCSMgUyhQMStTKFAyK1NQMykpCisKKwlmYWRkLngJCVRBTlExKCVwYyksJWZwMwkJIyBRMStTKFEyK1MoUTMrU1E0KSkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBSUyhQMStTKFAyK1NQMykpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBTKFExK1MoUTIrUyhRMytTUTQpKSkKKworCWZhZGQueAkJJWZwMiwlZnAwCQkjIFIrUlMoUDErUyhQMitTUDMpKQorCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMStTKFExKy4uLikKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMixmcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmRpdi54CQklZnAxLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9pbngyCisKK05PREQ6CisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBTID0gUipSCisKKwlmbW92LmQJCVRBTlE0KCVwYyksJWZwMworCWZtb3YuZAkJVEFOUDMoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBTUTQKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTUDMKKworCWZhZGQuZAkJVEFOUTMoJXBjKSwlZnAzCQkjIFEzK1NRNAorCWZhZGQueAkJVEFOUDIoJXBjKSwlZnAyCQkjIFAyK1NQMworCisJZm11bC54CQklZnAwLCVmcDMJCSMgUyhRMytTUTQpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhQMitTUDMpCisKKwlmYWRkLngJCVRBTlEyKCVwYyksJWZwMwkJIyBRMitTKFEzK1NRNCkKKwlmYWRkLngJCVRBTlAxKCVwYyksJWZwMgkJIyBQMStTKFAyK1NQMykKKworCWZtdWwueAkJJWZwMCwlZnAzCQkjIFMoUTIrUyhRMytTUTQpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoUDErUyhQMitTUDMpKQorCisJZmFkZC54CQlUQU5RMSglcGMpLCVmcDMJCSMgUTErUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAxLCVmcDIJCSMgUlMoUDErUyhQMitTUDMpKQorCisJZm11bC54CQklZnAzLCVmcDAJCSMgUyhRMStTKFEyK1MoUTMrU1E0KSkpCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBSK1JTKFAxK1MoUDIrU1AzKSkKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyAxK1MoUTErLi4uKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyLGZwMworCisJZm1vdi54CQklZnAxLC0oJXNwKQorCWVvci5sCQkmMHg4MDAwMDAwMCwoJXNwKQorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmZGl2LngJCSglc3ApKywlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfaW54MgorCitUQU5CT1JTOgorIy0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KKyMtLUlGIHxYfCA8IDIqKigtNDApLCBSRVRVUk4gWCBPUiAxLgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QuYgkJUkVEVUNFWAorCitUQU5TTToKKwlmbW92LngJCSVmcDAsLSglc3ApCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQkoJXNwKSssJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NpYmJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXN0YW5kCisjLS1UQU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc3RhbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIy0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgorIy0tVEhJUyBSRURVQ1RJT04gTUVUSE9ELCBIT1dFVkVSLCBJUyBNVUNIIEZBU1RFUiBUSEFOIFVTSU5HCisjLS1USEUgUkVNQUlOREVSIElOU1RSVUNUSU9OIFdISUNIIElTIE5PVyBJTiBTT0ZUV0FSRS4KK1JFRFVDRVg6CisJZm1vdm0ueAkJJjB4M2MsLSglc3ApCQkjIHNhdmUge2ZwMi1mcDV9CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIGZwMSA9IDAKKworIy0tSWYgY29tcGFjdCBmb3JtIG9mIGFicyhhcmcpIGluIGQwPSQ3ZmZlZmZmZiwgYXJndW1lbnQgaXMgc28gbGFyZ2UgdGhhdAorIy0tdGhlcmUgaXMgYSBkYW5nZXIgb2YgdW53YW50ZWQgb3ZlcmZsb3cgaW4gZmlyc3QgTE9PUCBpdGVyYXRpb24uICBJbiB0aGlzCisjLS1jYXNlLCByZWR1Y2UgYXJndW1lbnQgYnkgb25lIHJlbWFpbmRlciBzdGVwIHRvIG1ha2Ugc3Vic2VxdWVudCByZWR1Y3Rpb24KKyMtLXNhZmUuCisJY21wLmwJCSVkMSwmMHg3ZmZlZmZmZgkJIyBpcyBhcmcgZGFuZ2Vyb3VzbHkgbGFyZ2U/CisJYm5lLmIJCUxPT1AJCQkjIG5vCisKKyMgeWVzOyBjcmVhdGUgMioqMTYzODMqUEkvMgorCW1vdi53CQkmMHg3ZmZlLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhjOTBmZGFhMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisKKyMgY3JlYXRlIGxvdyBoYWxmIG9mIDIqKjE2MzgzKlBJLzIgYXQgRlBfU0NSMQorCW1vdi53CQkmMHg3ZmRjLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NWEzMDhkMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCisKKwlmdGVzdC54CQklZnAwCQkJIyB0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwlmYmx0LncJCXJlZF9uZWcKKworCW9yLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIHBvc2l0aXZlIGFyZworCW9yLmIJCSYweDgwLEZQX1NDUjFfRVgoJWE2KQorcmVkX25lZzoKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgaGlnaCBwYXJ0IG9mIHJlZHVjdGlvbiBpcyBleGFjdAorCWZtb3YueAkJJWZwMCwlZnAxCQkjIHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIGxvdyBwYXJ0IG9mIHJlZHVjdGlvbgorCWZzdWIueAkJJWZwMCwlZnAxCQkjIGRldGVybWluZSBsb3cgY29tcG9uZW50IG9mIHJlc3VsdAorCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDEJIyBmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCisjLS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorIy0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCisjLS1JbnRlcm1lZGl0YXRlIHJlbWFpbmRlciBpcyA2Ni1iaXQgbG9uZzsgKFIscikgaW4gKEZQMCxGUDEpCitMT09QOgorCWZtb3YueAkJJWZwMCxJTkFSRyglYTYpCQkjICstMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3YudwkJSU5BUkcoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVhMQkJCSMgc2F2ZSBhIGNvcHkgb2YgRDAKKwlhbmQubAkJJjB4MDAwMDdGRkYsJWQxCisJc3ViLmwJCSYweDAwMDAzRkZGLCVkMQkJIyBkMCA9IEsKKwljbXAubAkJJWQxLCYyOAorCWJsZS5iCQlMQVNUTE9PUAorQ09OVExPT1A6CisJc3ViLmwJCSYyNywlZDEJCQkjIGQwID0gTCA6PSBLLTI3CisJbW92LmIJCSYwLEVOREZMQUcoJWE2KQorCWJyYS5iCQlXT1JLCitMQVNUTE9PUDoKKwljbHIubAkJJWQxCQkJIyBkMCA9IEwgOj0gMAorCW1vdi5iCQkmMSxFTkRGTEFHKCVhNikKKworV09SSzoKKyMtLUZJTkQgVEhFIFJFTUFJTkRFUiBPRiAoUixyKSBXLlIuVC4JMioqTCAqIChQSS8yKS4gTCBJUyBTTyBDSE9TRU4KKyMtLVRIQVQJSU5UKCBYICogKDIvUEkpIC8gMioqKEwpICkgPCAyKioyOS4KKworIy0tQ1JFQVRFIDIqKigtTCkgKiAoMi9QSSksIFNJR04oSU5BUkcpKjIqKig2MyksCisjLS0yKipMICogKFBJYnkyXzEpLCAyKipMICogKFBJYnkyXzIpCisKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMi9QSQorCXN1Yi5sCQklZDEsJWQyCQkJIyBCSUFTRUQgRVhQIE9GIDIqKigtTCkqKDIvUEkpCisKKwltb3YubAkJJjB4QTJGOTgzNkUsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCSYweDRFNDQxNTJBLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgRlBfU0NSMCA9IDIqKigtTCkqKDIvUEkpCisKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDIJIyBmcDIgPSBYICogMioqKC1MKSooMi9QSSkKKworIy0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCisjLS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorIy0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKKyMtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKKyMtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCW1vdi5sCQklYTEsJWQyCisJc3dhcAkJJWQyCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgorCW9yLmwJCSYweDVGMDAwMDAwLCVkMgkJIyBkMiA9IFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdi5sCQklZDIsVFdPVE82MyglYTYpCisJZmFkZC5zCQlUV09UTzYzKCVhNiksJWZwMgkjIFRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKwlmc3ViLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgZnAyID0gTgorIwlmaW50cnoueAklZnAyLCVmcDIKKworIy0tQ1JFQVRJTkcgMioqKEwpKlBpYnkyXzEgYW5kIDIqKihMKSpQaWJ5Ml8yCisJbW92LmwJCSVkMSwlZDIJCQkjIGQyID0gTAorCisJYWRkLmwJCSYweDAwMDAzRkZGLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIqKkwgKiAoUEkvMikKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhDOTBGREFBMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCQkjIEZQX1NDUjAgPSAyKiooTCkgKiBQaWJ5Ml8xCisKKwlhZGQubAkJJjB4MDAwMDNGREQsJWQxCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJJjB4ODVBMzA4RDMsRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQkJIyBGUF9TQ1IxID0gMioqKEwpICogUGlieTJfMgorCisJbW92LmIJCUVOREZMQUcoJWE2KSwlZDEKKworIy0tV2UgYXJlIG5vdyByZWFkeSB0byBwZXJmb3JtIChSK3IpIC0gTipQMSAtIE4qUDIsIFAxID0gMioqKEwpICogUGlieTJfMSBhbmQKKyMtLVAyID0gMioqKEwpICogUGlieTJfMgorCWZtb3YueAkJJWZwMiwlZnA0CQkjIGZwNCA9IE4KKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnA0CSMgZnA0ID0gVyA9IE4qUDEKKwlmbW92LngJCSVmcDIsJWZwNQkJIyBmcDUgPSBOCisJZm11bC54CQlGUF9TQ1IxKCVhNiksJWZwNQkjIGZwNSA9IHcgPSBOKlAyCisJZm1vdi54CQklZnA0LCVmcDMJCSMgZnAzID0gVyA9IE4qUDEKKworIy0td2Ugd2FudCBQK3AgPSBXK3cgIGJ1dCAgfHB8IDw9IGhhbGYgdWxwIG9mIFAKKyMtLVRoZW4sIHdlIG5lZWQgdG8gY29tcHV0ZSAgQSA6PSBSLVAgICBhbmQgIGEgOj0gci1wCisJZmFkZC54CQklZnA1LCVmcDMJCSMgZnAzID0gUAorCWZzdWIueAkJJWZwMywlZnA0CQkjIGZwNCA9IFctUAorCisJZnN1Yi54CQklZnAzLCVmcDAJCSMgZnAwID0gQSA6PSBSIC0gUAorCWZhZGQueAkJJWZwNSwlZnA0CQkjIGZwNCA9IHAgPSAoVy1QKSt3CisKKwlmbW92LngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBCisJZnN1Yi54CQklZnA0LCVmcDEJCSMgZnAxID0gYSA6PSByIC0gcAorCisjLS1Ob3cgd2UgbmVlZCB0byBub3JtYWxpemUgKEEsYSkgdG8gICJuZXcgKFIscikiIHdoZXJlIFIrciA9IEErYSBidXQKKyMtLXxyfCA8PSBoYWxmIHVscCBvZiBSLgorCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCA9IFIgOj0gQSthCisjLS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcC5iCQklZDEsJjAKKwliZ3QudwkJUkVTVE9SRQorCisjLS1OZWVkIHRvIGNhbGN1bGF0ZSByCisJZnN1Yi54CQklZnAwLCVmcDMJCSMgZnAzID0gQS1SCisJZmFkZC54CQklZnAzLCVmcDEJCSMgZnAxID0gciA6PSAoQS1SKSthCisJYnJhLncJCUxPT1AKKworUkVTVE9SRToKKwlmbW92LmwJCSVmcDIsSU5UKCVhNikKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJKCVzcCkrLCYweDNjCQkjIHJlc3RvcmUge2ZwMi1mcDV9CisKKwltb3YubAkJSU5UKCVhNiksJWQxCisJcm9yLmwJCSYxLCVkMQorCisJYnJhLncJCVRBTkNPTlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYXRhbigpOiAgY29tcHV0ZXMgdGhlIGFyY3RhbmdlbnQgb2YgYSBub3JtYWxpemVkIG51bWJlcgkJIworIyBzYXRhbmQoKTogY29tcHV0ZXMgdGhlIGFyY3RhbmdlbnQgb2YgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBhcmN0YW4oWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlTdGVwIDEuIElmIHxYfCA+PSAxNiBvciB8WHwgPCAxLzE2LCBnbyB0byBTdGVwIDUuCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuIExldCBYID0gc2duICogMioqayAqIDEueHh4eHh4eHguLi54LgkJCSMKKyMJCU5vdGUgdGhhdCBrID0gLTQsIC0zLC4uLiwgb3IgMy4JCQkJIworIwkJRGVmaW5lIEYgPSBzZ24gKiAyKiprICogMS54eHh4MSwgaS5lLiB0aGUgZmlyc3QgNQkjCisjCQlzaWduaWZpY2FudCBiaXRzIG9mIFggd2l0aCBhIGJpdC0xIGF0dGFjaGVkIGF0IHRoZSA2LXRoCSMKKyMJCWJpdCBwb3NpdGlvbi4gRGVmaW5lIHUgdG8gYmUgdSA9IChYLUYpIC8gKDEgKyBYKkYpLgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuIEFwcHJveGltYXRlIGFyY3Rhbih1KSBieSBhIHBvbHlub21pYWwgcG9seS4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4gUmV0dXJuIGFyY3RhbihGKSArIHBvbHksIGFyY3RhbihGKSBpcyBmZXRjaGVkIGZyb20gYQkjCisjCQl0YWJsZSBvZiB2YWx1ZXMgY2FsY3VsYXRlZCBiZWZvcmVoYW5kLiBFeGl0LgkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA1LiBJZiB8WHwgPj0gMTYsIGdvIHRvIFN0ZXAgNy4JCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA2LiBBcHByb3hpbWF0ZSBhcmN0YW4oWCkgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gWC4gRXhpdC4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCA3LiBEZWZpbmUgWCcgPSAtMS9YLiBBcHByb3hpbWF0ZSBhcmN0YW4oWCcpIGJ5IGFuIG9kZAkjCisjCQlwb2x5bm9taWFsIGluIFgnLgkJCQkJIworIwkJQXJjdGFuKFgpID0gc2lnbihYKSpQaS8yICsgYXJjdGFuKFgnKS4gRXhpdC4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUQU5BMzoJbG9uZwkJMHhCRkY2Njg3RSwweDMxNDk4N0Q4CitBVEFOQTI6CWxvbmcJCTB4NDAwMkFDNjksMHgzNEEyNkRCMworQVRBTkExOglsb25nCQkweEJGQzI0NzZGLDB4NEUxREEyOEUKKworQVRBTkI2Oglsb25nCQkweDNGQjM0NDQ0LDB4N0Y4NzY5ODkKK0FUQU5CNToJbG9uZwkJMHhCRkI3NDRFRSwweDdGQUY0NURCCitBVEFOQjQ6CWxvbmcJCTB4M0ZCQzcxQzYsMHg0Njk0MDIyMAorQVRBTkIzOglsb25nCQkweEJGQzI0OTI0LDB4OTIxODcyRjkKK0FUQU5CMjoJbG9uZwkJMHgzRkM5OTk5OSwweDk5OTk4RkE5CitBVEFOQjE6CWxvbmcJCTB4QkZENTU1NTUsMHg1NTU1NTU1NQorCitBVEFOQzU6CWxvbmcJCTB4QkZCNzBCRjMsMHg5ODUzOUU2QQorQVRBTkM0Oglsb25nCQkweDNGQkM3MTg3LDB4OTYyRDFEN0QKK0FUQU5DMzoJbG9uZwkJMHhCRkMyNDkyNCwweDgyNzEwN0I4CitBVEFOQzI6CWxvbmcJCTB4M0ZDOTk5OTksMHg5OTk2MjYzRQorQVRBTkMxOglsb25nCQkweEJGRDU1NTU1LDB4NTU1NTU1MzYKKworUFBJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitOUElCWTI6CWxvbmcJCTB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKKworUFRJTlk6CWxvbmcJCTB4MDAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK05USU5ZOglsb25nCQkweDgwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0FUQU5UQkw6CisJbG9uZwkJMHgzRkZCMDAwMCwweDgzRDE1MkM1LDB4MDYwQjdBNTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg4QkM4NTQ0NSwweDY1NDk4QjhCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4OTNCRTQwNjAsMHgxNzYyNkIwRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweDlCQjMwNzhELDB4MzVBRUMyMDIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhBM0E2OUE1MiwweDVERENFN0RFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QUI5OEU5NDMsMHg2Mjc2NTYxOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEIzODlFNTAyLDB4RjlDNTk4NjIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhCQjc5N0U0MywweDZCMDlFNkZCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QzM2N0E1QzcsMHgzOUU1RjQ0NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweENCNTQ0QzYxLDB4Q0ZGN0Q1QzYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhEMzNGNjJGOCwweDI0ODg1MzNFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4REIyOERBODEsMHg2MjQwNEM3NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEUzMTBBNDA3LDB4OEFEMzRGMTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhFQUY2QjBBOCwweDE4OEVFMUVCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RjJEQUYxOTQsMHg5REJFNzlENSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEZBQkQ1ODEzLDB4NjFENDdFM0UsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg4MzQ2QUMyMSwweDA5NTlFQ0M0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OEIyMzJBMDgsMHgzMDQyODJEOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDkyRkI3MEI4LDB4RDI5QUUyRjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg5QUNGNDc2RiwweDVDQ0QxQ0I0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QTI5RTc2MzAsMHg0OTU0RjIzRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEFBNjhDNUQwLDB4OEFCODUyMzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhCMjJERkZGRCwweDlENTM5RjgzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QjlFREVGNDUsMHgzRTkwMEVBNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEMxQTg1RjFDLDB4Qzc1RTNFQTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhDOTVEMUJFOCwweDI4MTM4REU2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RDEwQkYzMDAsMHg4NDBEMkRFNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEQ4QjRCMkJBLDB4NkJDMDVFN0EsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFMDU3MkE2QiwweEI0MjMzNUY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RTdGMzJBNzAsMHhFQTlDQUE4RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEVGODg4NDMyLDB4NjRFQ0VGQUEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhGNzE3MEEyOCwweEVDQzA2NjY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODEyRkQyODgsMHgzMzJEQUQzMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDg4QThEMUIxLDB4MjE4RTRENjQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5MDEyQUIzRiwweDIzRTRBRUU4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OTc2Q0MzRDQsMHgxMUU3RjFCOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDlFQjY4OTQ5LDB4Mzg4OUEyMjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBNUVGNzJDMywweDQ0ODczNjFCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QUQxNzAwQkEsMHhGMDdBNzIyNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEI0MkNCQ0ZBLDB4RkQzN0VGQjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCQjMwM0E5NCwweDBCQTgwRjg5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QzIyMTE1QzYsMHhGQ0FFQkJBRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEM4RkVGM0U2LDB4ODYzMzEyMjEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDRkM5ODMzMCwweEI0MDAwQzcwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RDY4MDdBQTEsMHgxMDJDNUJGOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEREMjM5OUJDLDB4MzEyNTJBQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFM0IyQTg1NSwweDZCOEZDNTE3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RUEyRDc2NEYsMHg2NDMxNTk4OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEYzQkY1QkY4LDB4QkFEMUEyMUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MDFDRTM5RSwweDBEMjA1QzlBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODYzMEEyREEsMHhEQTFFRDA2NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhDMUFENDQ1LDB4RjNFMDlCOEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MURCOEYxNiwweDY0RjM1MEUyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTc3MzE0MjAsMHgzNjVFNTM4QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlDRTFDOEU2LDB4QTBCOENEQkEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMjI4MzJEQiwweENBREFBRTA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTc0NkYyREQsMHhCNzYwMjI5NCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFDM0VDMEZCLDB4OTk3REQ2QTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTEwNjg4QSwweEVCREM2RjZBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjVCQ0M0OTAsMHg1OUVDQzRCMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJBNDRCQzdELDB4RDQ3MDc4MkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCRUE5NDE0NCwweEZEMDQ5QUFDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzJFQjRBQkIsMHg2NjE2MjhCNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM3MEJENTRDLDB4RTYwMkVFMTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDRDAwMDU0OSwweEFERUM3MTU5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDQ4NDU3RDIsMHhEOEVBNEVBMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweERCOTQ4REE3LDB4MTJERUNFM0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFMjM4NTVGOSwweDY5RTgwOTZBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTg3NzExMjksMHhDNDM1MzI1OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEVFNTdDMTZFLDB4MEQzNzlDMEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGM0UxMDIxMSwweEE4N0MzNzc5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjkxOTAzOUQsMHg3NThCOEQ0MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEZFMDU4QjhGLDB4NjQ5MzVGQjMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MTU1RkI0OSwweDdCNjg1RDA0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODM4ODlFMzUsMHg0OUQxMDhFMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDg1OUNGQTc2LDB4NTExRDcyNEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Nzk1MkVDRiwweEZGODEzMUU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODk3MzJGRDEsMHg5NTU3NjQxQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhCMzhDQUQxLDB4MDE5MzJBMzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Q0U3QThEOCwweDMwMUVFNkI1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OEY0NkEzOUUsMHgyRUFFNTI4MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDkyMkRBN0Q3LDB4OTE4ODg0ODcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEQxOUZDQiwweERFREY1MjQxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTczQUI5NDQsMHgxOUQyQTA4QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDk5NkZGMDBFLDB4MDhFMTBCOTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5Qjc3M0Y5NSwweDEyMzIxREE3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OUQ1NUNDMzIsMHgwRjkzNTYyNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDlGMTAwNTc1LDB4MDA2Q0M1NzEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMEE5QzI5MCwweEQ5N0NDMDZDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTIyNjU5RUIsMHhFQkMwNjMwQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEEzODhCNEFGLDB4RjZFRjBFQzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNEQzNUYxMCwweDYxRDI5MkM0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTYwODk1REMsMHhGQkUzMTg3RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3MkE1MURDLDB4NzM2N0JFQUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBODNBNTE1MywweDA5NTYxNjhGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTkzQTIwMDcsMHg3NTM5NTQ2RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFBOUU3MjQ1LDB4MDIzQjI2MDUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBQzRDODRCQSwweDZGRTRENThGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QURDRTRBNEEsMHg2MDZCOTcxMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFGMkEyRENELDB4OEQyNjNDOUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMDY1NkY4MSwweEYyMjI2NUM3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjE4NDY1MTUsMHgwRjcxNDk2QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIyOEFBQTE1LDB4NkY5QURBMzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMzdCNDRGRiwweDM3NjZCODk1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjQ1OEMzREMsMHhFOTYzMDQzMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI1MjU1MjlELDB4NTYyMjQ2QkQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNUUyQ0NBOSwweDVGOUQ4OENDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjY5MkNBREEsMHg3QUNBMUFEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI3MzZBRUE3LDB4QTY5MjU4MzgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCN0NGQUIyOCwweDdFOUY3QjM2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4Qjg1RUNDNjYsMHhDQjIxOTgzNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RTRGRDVBLDB4MjBBNTkzREEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOTlGNDFGNiwweDRBRkY5QkI1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkE3RjFFMTcsMHg4NDJCQkU3QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJCNDcxMjg1LDB4NzYzN0UxN0QsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQkZBQkU4QSwweDQ3ODhERjZGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkM5RDBGQUQsMHgyQjY4OUQ3OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJEMzA2QTM5LDB4NDcxRUNEODYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCREI2QzczMSwweDg1NkFGMThBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkUzMUNBQzUsMHgwMkU4MEQ3MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJFQTJENTVDLDB4RTMzMTk0RTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRjBCMTBCNywweEMwMzEyOEYwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkY2QjdBMTgsMHhEQUNCNzc4RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGQzRFQTQ2LDB4NjNGQTE4RjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMDE4MUJERSwweDhCODlBNDU0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzA2NUIwNjYsMHhDRkJGNjQzOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEMwQUUzNDVGLDB4NTYzNDBBRTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMEYyMjI5MSwweDlDQjlFNkE3LDB4MDAwMDAwMDAKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKwlzZXQJCVhGUkFDTE8sWCs4CisKKwlzZXQJCUFUQU5GLEZQX1NDUjEKKwlzZXQJCUFUQU5GSEksQVRBTkYrNAorCXNldAkJQVRBTkZMTyxBVEFORis4CisKKwlnbG9iYWwJCXNhdGFuCisjLS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKK3NhdGFuOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlmbW92LngJCSVmcDAsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkZCODAwMAkJIyB8WHwgPj0gMS8xNj8KKwliZ2UuYgkJQVRBTk9LMQorCWJyYS53CQlBVEFOU00KKworQVRBTk9LMToKKwljbXAubAkJJWQxLCYweDQwMDJGRkZGCQkjIHxYfCA8IDE2ID8KKwlibGUuYgkJQVRBTk1BSU4KKwlicmEudwkJQVRBTkJJRworCisjLS1USEUgTU9TVCBMSUtFTFkgQ0FTRSwgfFh8IElOIFsxLzE2LCAxNikuIFdFIFVTRSBUQUJMRSBURUNITklRVUUKKyMtLVRIRSBJREVBIElTIEFUQU4oWCkgPSBBVEFOKEYpICsgQVRBTiggW1gtRl0gLyBbMStYRl0gKS4KKyMtLVNPIElGIEYgSVMgQ0hPU0VOIFRPIEJFIENMT1NFIFRPIFggQU5EIEFUQU4oRikgSVMgU1RPUkVEIElOCisjLS1BIFRBQkxFLCBBTEwgV0UgTkVFRCBJUyBUTyBBUFBST1hJTUFURSBBVEFOKFUpIFdIRVJFCisjLS1VID0gKFgtRikvKDErWEYpIElTIFNNQUxMIChSRU1FTUJFUiBGIElTIENMT1NFIFRPIFgpLiBJVCBJUworIy0tVFJVRSBUSEFUIEEgRElWSURFIElTIE5PVyBORUVERUQsIEJVVCBUSEUgQVBQUk9YSU1BVElPTiBGT1IKKyMtLUFUQU4oVSkgSVMgQSBWRVJZIFNIT1JUIFBPTFlOT01JQUwgQU5EIFRIRSBJTkRFWElORyBUTworIy0tRkVUQ0ggRiBBTkQgU0FWSU5HIE9GIFJFR0lTVEVSUyBDQU4gQkUgQUxMIEhJREVEIFVOREVSIFRIRQorIy0tRElWSURFLiBJTiBUSEUgRU5EIFRISVMgTUVUSE9EIElTIE1VQ0ggRkFTVEVSIFRIQU4gQSBUUkFESVRJT05BTAorIy0tT05FLiBOT1RFIEFMU08gVEhBVCBUSEUgVFJBRElUSU9OQUwgU0NIRU1FIFRIQVQgQVBQUk9YSU1BVEUKKyMtLUFUQU4oWCkgRElSRUNUTFkgV0lMTCBORUVEIFRPIFVTRSBBIFJBVElPTkFMIEFQUFJPWElNQVRJT04KKyMtLShESVZJU0lPTiBORUVERUQpIEFOWVdBWSBCRUNBVVNFIEEgUE9MWU5PTUlBTCBBUFBST1hJTUFUSU9OCisjLS1XSUxMIElOVk9MVkUgQSBWRVJZIExPTkcgUE9MWU5PTUlBTC4KKworIy0tTk9XIFdFIFNFRSBYIEFTICstMl5LICogMS5CQkJCQkJCLi4uLkIgPC0gMS4gKyA2MyBCSVRTCisjLS1XRSBDSE9TRSBGIFRPIEJFICstMl5LICogMS5CQkJCMQorIy0tVEhBVCBJUyBJVCBNQVRDSEVTIFRIRSBFWFBPTkVOVCBBTkQgRklSU1QgNSBCSVRTIE9GIFgsIFRIRQorIy0tU0lYVEggQklUUyBJUyBTRVQgVE8gQkUgMS4gU0lOQ0UgSyA9IC00LCAtMywgLi4uLCAzLCBUSEVSRQorIy0tQVJFIE9OTFkgOCBUSU1FUyAxNiA9IDJeNyA9IDEyOCB8RnwnUy4gU0lOQ0UgQVRBTigtfEZ8KSBJUworIy0tIC1BVEFOKHxGfCksIFdFIE5FRUQgVE8gU1RPUkUgT05MWSBBVEFOKHxGfCkuCisKK0FUQU5NQUlOOgorCisJYW5kLmwJCSYweEY4MDAwMDAwLFhGUkFDKCVhNikJIyBGSVJTVCA1IEJJVFMKKwlvci5sCQkmMHgwNDAwMDAwMCxYRlJBQyglYTYpCSMgU0VUIDYtVEggQklUIFRPIDEKKwltb3YubAkJJjB4MDAwMDAwMDAsWEZSQUNMTyglYTYpICMgTE9DQVRJT04gT0YgWCBJUyBOT1cgRgorCisJZm1vdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIFgKKwlmbXVsLngJCVgoJWE2KSwlZnAxCQkjIEZQMSBJUyBYKkYsIE5PVEUgVEhBVCBYKkYgPiAwCisJZnN1Yi54CQlYKCVhNiksJWZwMAkJIyBGUDAgSVMgWC1GCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgRlAxIElTIDEgKyBYKkYKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgVSA9IChYLUYpLygxK1gqRikKKworIy0tV0hJTEUgVEhFIERJVklTSU9OIElTIFRBS0lORyBJVFMgVElNRSwgV0UgRkVUQ0ggQVRBTih8RnwpCisjLS1DUkVBVEUgQVRBTihGKSBBTkQgU1RPUkUgSVQgSU4gQVRBTkYsIEFORAorIy0tU0FWRSBSRUdJU1RFUlMgRlAyLgorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgU0FWRSBkMiBURU1QT1JBUklMWQorCW1vdi5sCQklZDEsJWQyCQkJIyBUSEUgRVhQIEFORCAxNiBCSVRTIE9GIFgKKwlhbmQubAkJJjB4MDAwMDc4MDAsJWQxCQkjIDQgVkFSWUlORyBCSVRTIE9GIEYnUyBGUkFDVElPTgorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDIJCSMgRVhQT05FTlQgT0YgRgorCXN1Yi5sCQkmMHgzRkZCMDAwMCwlZDIJCSMgSys0CisJYXNyLmwJCSYxLCVkMgorCWFkZC5sCQklZDIsJWQxCQkJIyBUSEUgNyBCSVRTIElERU5USUZZSU5HIEYKKwlhc3IubAkJJjcsJWQxCQkJIyBJTkRFWCBJTlRPIFRCTCBPRiBBVEFOKHxGfCkKKwlsZWEJCUFUQU5UQkwoJXBjKSwlYTEKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBBVEFOKHxGfCkKKwltb3YubAkJKCVhMSkrLEFUQU5GKCVhNikKKwltb3YubAkJKCVhMSkrLEFUQU5GSEkoJWE2KQorCW1vdi5sCQkoJWExKSssQVRBTkZMTyglYTYpCSMgQVRBTkYgSVMgTk9XIEFUQU4ofEZ8KQorCW1vdi5sCQlYKCVhNiksJWQxCQkjIExPQUQgU0lHTiBBTkQgRVhQTy4gQUdBSU4KKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCQkjIFNJR04oRikKKwlvci5sCQklZDEsQVRBTkYoJWE2KQkJIyBBVEFORiBJUyBOT1cgU0lHTihGKSpBVEFOKHxGfCkKKwltb3YubAkJKCVzcCkrLCVkMgkJIyBSRVNUT1JFIGQyCisKKyMtLVRIQVQnUyBBTEwgSSBIQVZFIFRPIERPIEZPUiBOT1csCisjLS1CVVQgQUxBUywgVEhFIERJVklERSBJUyBTVElMTCBDUkFOS0lORyEKKworIy0tVSBJTiBGUDAsIFdFIEFSRSBOT1cgUkVBRFkgVE8gQ09NUFVURSBBVEFOKFUpIEFTCisjLS1VICsgQTEqVSpWKihBMiArIFYqKEEzICsgVikpLCBWID0gVSpVCisjLS1USEUgUE9MWU5PTUlBTCBNQVkgTE9PSyBTVFJBTkdFLCBCVVQgSVMgTkVWRVJUSEVMRVNTIENPUlJFQ1QuCisjLS1USEUgTkFUVVJBTCBGT1JNIElTIFUgKyBVKlYqKEExICsgViooQTIgKyBWKkEzKSkKKyMtLVdIQVQgV0UgSEFWRSBIRVJFIElTIE1FUkVMWQlBMSA9IEEzLCBBMiA9IEExL0EzLCBBMyA9IEEyL0EzLgorIy0tVEhFIFJFQVNPTiBGT1IgVEhJUyBSRUFSUkFOR0VNRU5UIElTIFRPIE1BS0UgVEhFIElOREVQRU5ERU5UCisjLS1QQVJUUyBBMSpVKlYgQU5EIChBMiArIC4uLiBTVFVGRikgTU9SRSBMT0FELUJBTEFOQ0VECisKKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEKKwlmbW92LmQJCUFUQU5BMyglcGMpLCVmcDIKKwlmYWRkLngJCSVmcDEsJWZwMgkJIyBBMytWCisJZm11bC54CQklZnAxLCVmcDIJCSMgViooQTMrVikKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBVKlYKKwlmYWRkLmQJCUFUQU5BMiglcGMpLCVmcDIJIyBBMitWKihBMytWKQorCWZtdWwuZAkJQVRBTkExKCVwYyksJWZwMQkjIEExKlUqVgorCWZtdWwueAkJJWZwMiwlZnAxCQkjIEExKlUqViooQTIrViooQTMrVikpCisJZmFkZC54CQklZnAxLCVmcDAJCSMgQVRBTihVKSwgRlAxIFJFTEVBU0VECisKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCWZhZGQueAkJQVRBTkYoJWE2KSwlZnAwCQkjIEFUQU4oWCkKKwlicmEJCXRfaW54MgorCitBVEFOQk9SUzoKKyMtLXxYfCBJUyBJTiBkMCBJTiBDT01QQUNUIEZPUk0uIEZQMSwgZDAgU0FWRUQuCisjLS1GUDAgSVMgWCBBTkQgfFh8IDw9IDEvMTYgT1IgfFh8ID49IDE2LgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QudwkJQVRBTkJJRwkJCSMgSS5FLiB8WHwgPj0gMTYKKworQVRBTlNNOgorIy0tfFh8IDw9IDEvMTYKKyMtLUlGIHxYfCA8IDJeKC00MCksIFJFVFVSTiBYIEFTIEFOU1dFUi4gT1RIRVJXSVNFLCBBUFBST1hJTUFURQorIy0tQVRBTihYKSBCWSBYICsgWCpZKihCMStZKihCMitZKihCMytZKihCNCtZKihCNStZKkI2KSkpKSkKKyMtLVdISUNIIElTIFggKyBYKlkqKCBbQjErWiooQjMrWipCNSldICsgW1kqKEIyK1oqKEI0K1oqQjYpXSApCisjLS1XSEVSRSBZID0gWCpYLCBBTkQgWiA9IFkqWS4KKworCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAKKwlibHQudwkJQVRBTlRJTlkKKworIy0tQ09NUFVURSBQT0xZTk9NSUFMCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlBPIElTIFkgPSBYKlgKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFogPSBZKlkKKworCWZtb3YuZAkJQVRBTkI2KCVwYyksJWZwMgorCWZtb3YuZAkJQVRBTkI1KCVwYyksJWZwMworCisJZm11bC54CQklZnAxLCVmcDIJCSMgWipCNgorCWZtdWwueAkJJWZwMSwlZnAzCQkjIFoqQjUKKworCWZhZGQuZAkJQVRBTkI0KCVwYyksJWZwMgkjIEI0K1oqQjYKKwlmYWRkLmQJCUFUQU5CMyglcGMpLCVmcDMJIyBCMytaKkI1CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBaKihCNCtaKkI2KQorCWZtdWwueAkJJWZwMywlZnAxCQkjIFoqKEIzK1oqQjUpCisKKwlmYWRkLmQJCUFUQU5CMiglcGMpLCVmcDIJIyBCMitaKihCNCtaKkI2KQorCWZhZGQuZAkJQVRBTkIxKCVwYyksJWZwMQkjIEIxK1oqKEIzK1oqQjUpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBZKihCMitaKihCNCtaKkI2KSkKKwlmbXVsLngJCVgoJWE2KSwlZnAwCQkjIFgqWQorCisJZmFkZC54CQklZnAyLCVmcDEJCSMgW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXQorCisJZm11bC54CQklZnAxLCVmcDAJCSMgWCpZKihbQjErWiooQjMrWipCNSldK1tZKihCMitaKihCNCtaKkI2KSldKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJZmFkZC54CQlYKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK0FUQU5USU5ZOgorIy0tfFh8IDwgMl4oLTQwKSwgQVRBTihYKSA9IFgKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9jYXRjaAorCitBVEFOQklHOgorIy0tSUYgfFh8ID4gMl4oMTAwKSwgUkVUVVJOCVNJR04oWCkqKFBJLzIgLSBUSU5ZKS4gT1RIRVJXSVNFLAorIy0tUkVUVVJOIFNJR04oWCkqUEkvMiArIEFUQU4oLTEvWCkuCisJY21wLmwJCSVkMSwmMHg0MDYzODAwMAorCWJndC53CQlBVEFOSFVHRQorCisjLS1BUFBST1hJTUFURSBBVEFOKC0xL1gpIEJZCisjLS1YJytYJypZKihDMStZKihDMitZKihDMytZKihDNCtZKkM1KSkpKSwgWCcgPSAtMS9YLCBZID0gWCcqWCcKKyMtLVRISVMgQ0FOIEJFIFJFLVdSSVRURU4gQVMKKyMtLVgnK1gnKlkqKCBbQzErWiooQzMrWipDNSldICsgW1kqKEMyK1oqQzQpXSApLCBaID0gWSpZLgorCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm1vdi5zCQkmMHhCRjgwMDAwMCwlZnAxCSMgTE9BRCAtMQorCWZkaXYueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyAtMS9YCisKKyMtLURJVklERSBJUyBTVElMTCBDUkFOS0lORworCisJZm1vdi54CQklZnAxLCVmcDAJCSMgRlAwIElTIFgnCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFkgPSBYJypYJworCWZtb3YueAkJJWZwMSxYKCVhNikJCSMgWCBJUyBSRUFMTFkgWCcKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFogPSBZKlkKKworCWZtb3YuZAkJQVRBTkM1KCVwYyksJWZwMworCWZtb3YuZAkJQVRBTkM0KCVwYyksJWZwMgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgWipDNQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFoqQjQKKworCWZhZGQuZAkJQVRBTkMzKCVwYyksJWZwMwkjIEMzK1oqQzUKKwlmYWRkLmQJCUFUQU5DMiglcGMpLCVmcDIJIyBDMitaKkM0CisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBaKihDMytaKkM1KSwgRlAzIFJFTEVBU0VECisJZm11bC54CQklZnAwLCVmcDIJCSMgWSooQzIrWipDNCkKKworCWZhZGQuZAkJQVRBTkMxKCVwYyksJWZwMQkjIEMxK1oqKEMzK1oqQzUpCisJZm11bC54CQlYKCVhNiksJWZwMAkJIyBYJypZCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBbWSooQzIrWipDNCldK1tDMStaKihDMytaKkM1KV0KKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFgnKlkqKFtCMStaKihCMytaKkI1KV0KKyMJCQkJCS4uLgkrW1kqKEIyK1oqKEI0K1oqQjYpKV0pCisJZmFkZC54CQlYKCVhNiksJWZwMAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJdHN0LmIJCSglYTApCisJYnBsLmIJCXBvc19iaWcKKworbmVnX2JpZzoKKwlmYWRkLngJCU5QSUJZMiglcGMpLCVmcDAKKwlicmEJCXRfbWlueDIKKworcG9zX2JpZzoKKwlmYWRkLngJCVBQSUJZMiglcGMpLCVmcDAKKwlicmEJCXRfcGlueDIKKworQVRBTkhVR0U6CisjLS1SRVRVUk4gU0lHTihYKSooUElCWTIgLSBUSU5ZKSA9IFNJR04oWCkqUElCWTIgLSBTSUdOKFgpKlRJTlkKKwl0c3QuYgkJKCVhMCkKKwlicGwuYgkJcG9zX2h1Z2UKKworbmVnX2h1Z2U6CisJZm1vdi54CQlOUElCWTIoJXBjKSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCVBUSU5ZKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCitwb3NfaHVnZToKKwlmbW92LngJCVBQSUJZMiglcGMpLCVmcDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJTlRJTlkoJXBjKSwlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXNhdGFuZAorIy0tRU5UUlkgUE9JTlQgRk9SIEFUQU4oWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorc2F0YW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2FzaW4oKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNhc2luZCgpOiBjb21wdXRlcyB0aGUgaW52ZXJzZSBzaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBhcmNzaW4oWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQVNJTgkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXNpbihYKSBieQkJCQkjCisjCQl6IDo9IHNxcnQoIFsxLVhdWzErWF0gKQkJCQkJIworIwkJYXNpbihYKSA9IGF0YW4oIHggLyB6ICkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKHxYfCA9IDEpIHNnbiA6PSBzaWduKFgpLCByZXR1cm4gYXNpbihYKSA6PSBzZ24gKiBQaS8yLiBFeGl0LiMKKyMJCQkJCQkJCQkjCisjCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNhc2luCitzYXNpbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ2UuYgkJQVNJTkJJRworCisjIFRoaXMgY2F0Y2ggaXMgYWRkZWQgaGVyZSBmb3IgdGhlICcwNjAgUVNQLiBPcmlnaW5hbGx5LCB0aGUgY2FsbCB0bworIyBzYXRhbigpIHdvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgY2F1c2luZyB0aGUgZXhjZXB0aW9uIHdoaWNoIHdvdWxkCisjIG5vdCBiZSBjYXVnaHQgdW50aWwgZ2VuX2V4Y2VwdCgpLiBOb3csIHdpdGggdGhlIGV4Y2VwdGlvbnMgYmVpbmcKKyMgZGV0ZWN0ZWQgaW5zaWRlIG9mIHNhdGFuKCksIHRoZSBleGNlcHRpb24gd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgdGhlcmUKKyMgaW5zdGVhZCBvZiBpbnNpZGUgc2FzaW4oKSBhcyBleHBlY3RlZC4KKwljbXAubAkJJWQxLCYweDNGRDc4MDAwCisJYmx0LncJCUFTSU5USU5ZCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKKyMtLUFTSU4oWCkgPSBBVEFOKCBYIC8gU1FSVCggKDEtWCkoMStYKSApICkKKworQVNJTk1BSU46CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJZnN1Yi54CQklZnAwLCVmcDEJCSMgMS1YCisJZm1vdm0ueAkJJjB4NCwtKCVzcCkJCSMgIHtmcDJ9CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAyCisJZmFkZC54CQklZnAwLCVmcDIJCSMgMStYCisJZm11bC54CQklZnAyLCVmcDEJCSMgKDErWCkoMS1YKQorCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyAge2ZwMn0KKwlmc3FydC54CQklZnAxCQkJIyBTUVJUKFsxLVhdWzErWF0pCisJZmRpdi54CQklZnAxLCVmcDAJCSMgWC9TUVJUKFsxLVhdWzErWF0pCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWC9TUVJUKC4uLikKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBYL1NRUlQoLi4uKQorCWJzcgkJc2F0YW4KKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWC9TUVJUKC4uLikgZnJvbSBzdGFjaworCWJyYQkJdF9pbngyCisKK0FTSU5CSUc6CisJZmFicy54CQklZnAwCQkJIyB8WHwKKwlmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKKwlmYmd0CQl0X29wZXJyCQkJIyBjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KKworIy0tfFh8ID0gMSwgQVNJTihYKSA9ICstIFBJLzIuCitBU0lOT05FOgorCWZtb3YueAkJUElCWTIoJXBjKSwlZnAwCisJbW92LmwJCSglYTApLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgU0lHTiBCSVQgT0YgWAorCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyArLTEgSU4gU0dMIEZPUk1BVAorCW1vdi5sCQklZDEsLSglc3ApCQkjIHB1c2ggU0lHTihYKSBJTiBTR0wtRk1UCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbXVsLnMJCSglc3ApKywlZnAwCisJYnJhCQl0X2lueDIKKworIy0tfFh8IDwgMl4oLTQwKSwgQVRBTihYKSA9IFgKK0FTSU5USU5ZOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSglYTApLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uCisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXNhc2luZAorIy0tQVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzYXNpbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYWNvcygpOiAgY29tcHV0ZXMgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzYWNvc2QoKTogY29tcHV0ZXMgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBhcmNjb3MoWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMJQUNPUwkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYWNvcyhYKSBieQkJCQkjCisjCQl6IDo9ICgxLVgpIC8gKDErWCkJCQkJCSMKKyMJCWFjb3MoWCkgPSAyICogYXRhbiggc3FydCh6KSApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiB8WHwgPiAxLCBnbyB0byA1LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPSAxKSBJZiBYID4gMCwgcmV0dXJuIDAuIE90aGVyd2lzZSwgcmV0dXJuIFBpLiBFeGl0LgkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzYWNvcworc2Fjb3M6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEJCSMgcGFjayBleHAgdy8gdXBwZXIgMTYgZnJhY3Rpb24KKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmdlLmIJCUFDT1NCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorIy0tQUNPUyhYKSA9IDIgKiBBVEFOKAlTUVJUKCAoMS1YKS8oMStYKSApICkKKworQUNPU01BSU46CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJZmFkZC54CQklZnAwLCVmcDEJCSMgMStYCisJZm5lZy54CQklZnAwCQkJIyAtWAorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDEtWAorCWZkaXYueAkJJWZwMSwlZnAwCQkjICgxLVgpLygxK1gpCisJZnNxcnQueAkJJWZwMAkJCSMgU1FSVCgoMS1YKS8oMStYKSkKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIG9yaWdpbmFsIHVzZXJzIGZwY3IKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgU1FSVCguLi4pIHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gc3FydAorCWJzcgkJc2F0YW4JCQkjIEFUQU4oU1FSVChbMS1YXS9bMStYXSkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFNRUlQoLi4uKSBmcm9tIHN0YWNrCisKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCWZhZGQueAkJJWZwMCwlZnAwCQkjIDIgKiBBVEFOKCBTVFVGRiApCisJYnJhCQl0X3BpbngyCisKK0FDT1NCSUc6CisJZmFicy54CQklZnAwCisJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCisJZmJndAkJdF9vcGVycgkJCSMgY2F1c2UgYW4gb3BlcnIgZXhjZXB0aW9uCisKKyMtLXxYfCA9IDEsIEFDT1MoWCkgPSAwIE9SIFBJCisJdHN0LmIJCSglYTApCQkJIyBpcyBYIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJwbC5iCQlBQ09TUDEKKworIy0tWCA9IC0xCisjUmV0dXJucyBQSSBhbmQgaW5leGFjdCBleGNlcHRpb24KK0FDT1NNMToKKwlmbW92LngJCVBJKCVwYyksJWZwMAkJIyBsb2FkIFBJCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCByb3VuZCBtb2RlLHByZWMKKwlmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAJIyBhZGQgYSBzbWFsbCB2YWx1ZQorCWJyYQkJdF9waW54MgorCitBQ09TUDE6CisJYnJhCQlsZF9wemVybwkJIyBhbnN3ZXIgaXMgcG9zaXRpdmUgemVybworCisJZ2xvYmFsCQlzYWNvc2QKKyMtLUFDT1MoWCkgPSBQSS8yIEZPUiBERU5PUk1BTElaRUQgWAorc2Fjb3NkOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGxvYWQgdXNlcidzIHJuZCBtb2RlL3ByZWMKKwlmbW92LngJCVBJQlkyKCVwYyksJWZwMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNldG94KCk6ICAgIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNldG94ZCgpOiAgIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2V0b3htMSgpOiAgY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIG1pbnVzIDEgZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNldG94bTFkKCk6IGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBtaW51cyAxIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBleHAoWCkgb3IgZXhwKFgpLTEJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDAuODUgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNIGFuZCBJTVBMRU1FTlRBVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjCXNldG94ZAkJCQkJCQkJIworIwktLS0tLS0JCQkJCQkJCSMKKyMJU3RlcCAxLglTZXQgYW5zIDo9IDEuMAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBhbnMgKyBzaWduKFgpKjJeKC0xMjYpLiBFeGl0LgkJIworIwlOb3RlczoJVGhpcyB3aWxsIGFsd2F5cyBnZW5lcmF0ZSBvbmUgZXhjZXB0aW9uIC0tIGluZXhhY3QuCSMKKyMJCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlzZXRveAkJCQkJCQkJIworIwktLS0tLQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglGaWx0ZXIgb3V0IGV4dHJlbWUgY2FzZXMgb2YgaW5wdXQgYXJndW1lbnQuCQkjCisjCQkxLjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgMS4zLgkJIworIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKKyMJCTEuMwlJZiB8WHwgPCAxNjM4MCBsb2coMiksIGdvIHRvIFN0ZXAgMi4JCSMKKyMJCTEuNAlHbyB0byBTdGVwIDguCQkJCQkjCisjCU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLiMKKyMJCVRvIGF2b2lkIHRoZSB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIGEJIworIwkJY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZiB8WHwgaXMgdXNlZC4gVGhpcyBmb3JtYXQgaXMgYQkjCisjCQkzMi1iaXQgaW50ZWdlciwgdGhlIHVwcGVyIChtb3JlIHNpZ25pZmljYW50KSAxNiBiaXRzCSMKKyMJCWFyZSB0aGUgc2lnbiBhbmQgYmlhc2VkIGV4cG9uZW50IGZpZWxkIG9mIHxYfDsgdGhlCSMKKyMJCWxvd2VyIDE2IGJpdHMgYXJlIHRoZSAxNiBtb3N0IHNpZ25pZmljYW50IGZyYWN0aW9uCSMKKyMJCShpbmNsdWRpbmcgdGhlIGV4cGxpY2l0IGJpdCkgYml0cyBvZiB8WHwuIENvbnNlcXVlbnRseSwJIworIwkJdGhlIGNvbXBhcmlzb25zIGluIFN0ZXBzIDEuMSBhbmQgMS4zIGNhbiBiZSBwZXJmb3JtZWQJIworIwkJYnkgaW50ZWdlciBjb21wYXJpc29uLiBOb3RlIGFsc28gdGhhdCB0aGUgY29uc3RhbnQJIworIwkJMTYzODAgbG9nKDIpIHVzZWQgaW4gU3RlcCAxLjMgaXMgYWxzbyBpbiB0aGUgY29tcGFjdAkjCisjCQlmb3JtLiBUaHVzIHRha2luZyB0aGUgYnJhbmNoIHRvIFN0ZXAgMiBndWFyYW50ZWVzCSMKKyMJCXxYfCA8IDE2MzgwIGxvZygyKS4gVGhlcmUgaXMgbm8gaGFybSB0byBoYXZlIGEgc21hbGwJIworIwkJbnVtYmVyIG9mIGNhc2VzIHdoZXJlIHxYfCBpcyBsZXNzIHRoYW4sCWJ1dCBjbG9zZSB0bywJIworIwkJMTYzODAgbG9nKDIpIGFuZCB0aGUgYnJhbmNoIHRvIFN0ZXAgOSBpcyB0YWtlbi4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JQ2FsY3VsYXRlIE4gPSByb3VuZC10by1uZWFyZXN0LWludCggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4xCVNldCBBZGpGbGFnIDo9IDAgKGluZGljYXRlcyB0aGUgYnJhbmNoIDEuMyAtPiAyICMKKyMJCQl3YXMgdGFrZW4pCQkJCQkjCisjCQkyLjIJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMwlDYWxjdWxhdGUJSiA9IE4gbW9kIDY0OyBzbyBKID0gMCwxLDIsLi4uLCAjCisjCQkJb3IgNjMuCQkJCQkJIworIwkJMi40CUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCSMKKyMJCTIuNQlDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0b3JlZCB2YWx1ZSBvZgkjCisjCQkJMl4oSi82NCkuCQkJCQkjCisjCQkyLjYJQ3JlYXRlIHRoZSB2YWx1ZSBTY2FsZSA9IDJeTS4JCQkjCisjCU5vdGVzOglUaGUgY2FsY3VsYXRpb24gaW4gMi4yIGlzIHJlYWxseSBwZXJmb3JtZWQgYnkJCSMKKyMJCQlaIDo9IFggKiBjb25zdGFudAkJCQkjCisjCQkJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoWikJCSMKKyMJCXdoZXJlCQkJCQkJCSMKKyMJCQljb25zdGFudCA6PSBzaW5nbGUtcHJlY2lzaW9uKCA2NC9sb2cgMiApLgkjCisjCQkJCQkJCQkJIworIwkJVXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uIGNvbnN0YW50IGF2b2lkcyBtZW1vcnkJCSMKKyMJCWFjY2Vzcy4gQW5vdGhlciBlZmZlY3Qgb2YgdXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uCSMKKyMJCSJjb25zdGFudCIgaXMgdGhhdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBaIGlzCQkjCisjCQkJCQkJCQkJIworIwkJCVogPSBYKig2NC9sb2cyKSooMStlcHMpLCB8ZXBzfCA8PSAyXigtMjQpLgkjCisjCQkJCQkJCQkJIworIwkJVGhpcyBlcnJvciBoYXMgdG8gYmUgY29uc2lkZXJlZCBsYXRlciBpbiBTdGVwcyAzIGFuZCA0LgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgkJCQkjCisjCQkzLjEJUiA6PSBYICsgTipMMSwJCQkJCSMKKyMJCQkJd2hlcmUgTDEgOj0gc2luZ2xlLXByZWNpc2lvbigtbG9nMi82NCkuCSMKKyMJCTMuMglSIDo9IFIgKyBOKkwyLAkJCQkJIworIwkJCQlMMiA6PSBleHRlbmRlZC1wcmVjaXNpb24oLWxvZzIvNjQgLSBMMSkuIworIwlOb3RlczoJYSkgVGhlIHdheSBMMSBhbmQgTDIgYXJlIGNob3NlbiBlbnN1cmVzIEwxK0wyCQkjCisjCQlhcHByb3hpbWF0ZSB0aGUgdmFsdWUgLWxvZzIvNjQgdG8gODggYml0cyBvZiBhY2N1cmFjeS4JIworIwkJYikgTipMMSBpcyBleGFjdCBiZWNhdXNlIE4gaXMgbm8gbG9uZ2VyIHRoYW4gMjIgYml0cwkjCisjCQlhbmQgTDEgaXMgbm8gbG9uZ2VyIHRoYW4gMjQgYml0cy4JCQkjCisjCQljKSBUaGUgY2FsY3VsYXRpb24gWCtOKkwxIGlzIGFsc28gZXhhY3QgZHVlIHRvCQkjCisjCQljYW5jZWxsYXRpb24uIFRodXMsIFIgaXMgcHJhY3RpY2FsbHkgWCtOKEwxK0wyKSB0byBmdWxsCSMKKyMJCTY0IGJpdHMuCQkJCQkJIworIwkJZCkgSXQgaXMgaW1wb3J0YW50IHRvIGVzdGltYXRlIGhvdyBsYXJnZSBjYW4gfFJ8IGJlCSMKKyMJCWFmdGVyIFN0ZXAgMy4yLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCQlOID0gcm5kLXRvLWludCggWCo2NC9sb2cyICgxK2VwcykgKSwgfGVwc3w8PTJeKC0yNCkJIworIwkJWCo2NC9sb2cyICgxK2VwcykJPQlOICsgZiwJfGZ8IDw9IDAuNQkjCisjCQlYKjY0L2xvZzIgLSBOCT0JZiAtIGVwcypYIDY0L2xvZzIJCSMKKyMJCVggLSBOKmxvZzIvNjQJPQlmKmxvZzIvNjQgLSBlcHMqWAkJIworIwkJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCQlOb3cgfFh8IDw9IDE2NDQ2IGxvZzIsIHRodXMJCQkJIworIwkJCQkJCQkJCSMKKyMJCQl8WCAtIE4qbG9nMi82NHwgPD0gKDAuNSArIDE2NDQ2LzJeKDE4KSkqbG9nMi82NAkjCisjCQkJCQk8PSAwLjU3IGxvZzIvNjQuCQkjCisjCQkgVGhpcyBib3VuZCB3aWxsIGJlIHVzZWQgaW4gU3RlcCA0LgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4JQXBwcm94aW1hdGUgZXhwKFIpLTEgYnkgYSBwb2x5bm9taWFsCQkJIworIwkJcCA9IFIgKyBSKlIqKEExICsgUiooQTIgKyBSKihBMyArIFIqKEE0ICsgUipBNSkpKSkJIworIwlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMJIworIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQTEgKHdoaWNoIGlzIDEvMiksIEE0CSMKKyMJCWFuZCBBNSBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQTIgYW5kIEEzIGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uLgkJCQkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGFib3ZlLAkJCSMKKyMJCSAgIHxwIC0gKGV4cChSKS0xKXwgPCAyXigtNjguOCkgZm9yIGFsbCB8UnwgPD0gMC4wMDYyLgkjCisjCQlOb3RlIHRoYXQgMC4wMDYyIGlzIHNsaWdodGx5IGJpZ2dlciB0aGFuIDAuNTcgbG9nMi82NC4JIworIwkJYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8JIworIwkJdHdvIGluZGVwZW5kZW50IHBpZWNlcyBvZiByb3VnaGx5IGVxdWFsIGNvbXBsZXhpdGllcwkjCisjCQkJcCA9IFsgUiArIFIqUyooQTIgKyBTKkE0KSBdCSsJCSMKKyMJCQkJWyBTKihBMSArIFMqKEEzICsgUypBNSkpIF0JCSMKKyMJCXdoZXJlIFMgPSBSKlIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKmV4cChSKSA9IDJeKEovNjQpKigxK3ApIGJ5CQkjCisjCQkJCWFucyA6PSBUICsgKCBUKnAgKyB0KQkJCSMKKyMJCXdoZXJlIFQgYW5kIHQgYXJlIHRoZSBzdG9yZWQgdmFsdWVzIGZvciAyXihKLzY0KS4JIworIwlOb3RlczoJMl4oSi82NCkgaXMgc3RvcmVkIGFzIFQgYW5kIHQgd2hlcmUgVCt0IGFwcHJveGltYXRlcwkjCisjCQkyXihKLzY0KSB0byByb3VnaGx5IDg1IGJpdHM7IFQgaXMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCWFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMJIworIwkJcm91bmRlZCB0byA2MiBiaXRzIHNvIHRoYXQgdGhlIGxhc3QgdHdvIGJpdHMgb2YgVCBhcmUJIworIwkJemVyby4gVGhlIHJlYXNvbiBmb3Igc3VjaCBhIHNwZWNpYWwgZm9ybSBpcyB0aGF0IFQtMSwJIworIwkJVC0yLCBhbmQgVC04IHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbAkjCisjCQlnaXZlIG11Y2ggbW9yZSBhY2N1cmF0ZSBjb21wdXRhdGlvbiBvZiB0aGUgZnVuY3Rpb24JIworIwkJRVhQTTEuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpCQkJCSMKKyMJCQlleHAoWCkgPSAyXk0gKiAyXihKLzY0KSAqIGV4cChSKS4JCSMKKyMJCTYuMQlJZiBBZGpGbGFnID0gMCwgZ28gdG8gNi4zCQkJIworIwkJNi4yCWFucyA6PSBhbnMgKiBBZGpTY2FsZQkJCQkjCisjCQk2LjMJUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCSMKKyMJCTYuNAlSZXR1cm4gYW5zIDo9IGFucyAqIFNjYWxlLiBFeGl0LgkJIworIwlOb3RlczoJSWYgQWRqRmxhZyA9IDAsIHdlIGhhdmUgWCA9IE1sb2cyICsgSmxvZzIvNjQgKyBSLAkjCisjCQl8TXwgPD0gMTYzODAsIGFuZCBTY2FsZSA9IDJeTS4gTW9yZW92ZXIsIGV4cChYKSB3aWxsCSMKKyMJCW5laXRoZXIgb3ZlcmZsb3cgbm9yIHVuZGVyZmxvdy4gSWYgQWRqRmxhZyA9IDEsIHRoYXQJIworIwkJbWVhbnMgdGhhdAkJCQkJCSMKKyMJCQlYID0gKE0xK00pbG9nMiArIEpsb2cyLzY0ICsgUiwgfE0xK018ID49IDE2MzgwLgkjCisjCQlIZW5jZSwgZXhwKFgpIG1heSBvdmVyZmxvdyBvciB1bmRlcmZsb3cgb3IgbmVpdGhlci4JIworIwkJV2hlbiB0aGF0IGlzIHRoZSBjYXNlLCBBZGpTY2FsZSA9IDJeKE0xKSB3aGVyZSBNMSBpcwkjCisjCQlhcHByb3hpbWF0ZWx5IE0uIFRodXMgNi4yIHdpbGwgbmV2ZXIgY2F1c2UJCSMKKyMJCW92ZXIvdW5kZXJmbG93LiBQb3NzaWJsZSBleGNlcHRpb24gaW4gNi40IGlzIG92ZXJmbG93CSMKKyMJCW9yIHVuZGVyZmxvdy4gVGhlIGluZXhhY3QgZXhjZXB0aW9uIGlzIG5vdCBnZW5lcmF0ZWQgaW4JIworIwkJNi40LiBBbHRob3VnaCBvbmUgY2FuIGFyZ3VlIHRoYXQgdGhlIGluZXhhY3QgZmxhZwkjCisjCQlzaG91bGQgYWx3YXlzIGJlIHJhaXNlZCwgdG8gc2ltdWxhdGUgdGhhdCBleGNlcHRpb24JIworIwkJY29zdCB0byBtdWNoIHRoYW4gdGhlIGZsYWcgaXMgd29ydGggaW4gcHJhY3RpY2FsIHVzZXMuCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNy4JUmV0dXJuIDEgKyBYLgkJCQkJCSMKKyMJCTcuMQlhbnMgOj0gWAkJCQkJIworIwkJNy4yCVJlc3RvcmUgdXNlciBGUENSLgkJCQkjCisjCQk3LjMJUmV0dXJuIGFucyA6PSAxICsgYW5zLiBFeGl0CQkJIworIwlOb3RlczoJRm9yIG5vbi16ZXJvIFgsIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3aWxsIGFsd2F5cyBiZQkjCisjCQlyYWlzZWQgYnkgNy4zLiBUaGF0IGlzIHRoZSBvbmx5IGV4Y2VwdGlvbiByYWlzZWQgYnkgNy4zLiMKKyMJCU5vdGUgYWxzbyB0aGF0IHdlIHVzZSB0aGUgRk1PVkVNIGluc3RydWN0aW9uIHRvIG1vdmUgWAkjCisjCQlpbiBTdGVwIDcuMSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFwcGluZy4gKEFsdGhvdWdoCSMKKyMJCXRoZSBGTU9WRU0gbWF5IG5vdCBzZWVtIHJlbGV2YW50IHNpbmNlIFggaXMgbm9ybWFsaXplZCwJIworIwkJdGhlIHByZWNhdXRpb24gd2lsbCBiZSB1c2VmdWwgaW4gdGhlIGxpYnJhcnkgdmVyc2lvbiBvZgkjCisjCQl0aGlzIGNvZGUgd2hlcmUgdGhlIHNlcGFyYXRlIGVudHJ5IGZvciBkZW5vcm1hbGl6ZWQJIworIwkJaW5wdXRzIHdpbGwgYmUgZG9uZSBhd2F5IHdpdGguKQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDguCUhhbmRsZSBleHAoWCkgd2hlcmUgfFh8ID49IDE2MzgwbG9nMi4JCQkjCisjCQk4LjEJSWYgfFh8ID4gMTY0ODAgbG9nMiwgZ28gdG8gU3RlcCA5LgkJIworIwkJKG1pbWljIDIuMiAtIDIuNikJCQkJCSMKKyMJCTguMglOIDo9IHJvdW5kLXRvLWludGVnZXIoIFggKiA2NC9sb2cyICkJCSMKKyMJCTguMwlDYWxjdWxhdGUgSiA9IE4gbW9kIDY0LCBKID0gMCwxLC4uLiw2MwkJIworIwkJOC40CUsgOj0gKE4tSikvNjQsIE0xIDo9IHRydW5jYXRlKEsvMiksIE0gPSBLLU0xLAkjCisjCQkJQWRqRmxhZyA6PSAxLgkJCQkJIworIwkJOC41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlCSMKKyMJCQkyXihKLzY0KS4JCQkJCSMKKyMJCTguNglDcmVhdGUgdGhlIHZhbHVlcyBTY2FsZSA9IDJeTSwgQWRqU2NhbGUgPSAyXk0xLgkjCisjCQk4LjcJR28gdG8gU3RlcCAzLgkJCQkJIworIwlOb3RlczoJUmVmZXIgdG8gbm90ZXMgZm9yIDIuMiAtIDIuNi4JCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA5LglIYW5kbGUgZXhwKFgpLCB8WHwgPiAxNjQ4MCBsb2cyLgkJCSMKKyMJCTkuMQlJZiBYIDwgMCwgZ28gdG8gOS4zCQkJCSMKKyMJCTkuMglhbnMgOj0gSHVnZSwgZ28gdG8gOS40CQkJCSMKKyMJCTkuMwlhbnMgOj0gVGlueS4JCQkJCSMKKyMJCTkuNAlSZXN0b3JlIHVzZXIgRlBDUi4JCQkJIworIwkJOS41CVJldHVybiBhbnMgOj0gYW5zICogYW5zLiBFeGl0LgkJCSMKKyMJTm90ZXM6CUV4cChYKSB3aWxsIHN1cmVseSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIGRlcGVuZGluZyBvbgkjCisjCQlYJ3Mgc2lnbi4gIkh1Z2UiIGFuZCAiVGlueSIgYXJlIHJlc3BlY3RpdmVseSBsYXJnZS90aW55CSMKKyMJCWV4dGVuZGVkLXByZWNpc2lvbiBudW1iZXJzIHdob3NlIHNxdWFyZSBvdmVyL3VuZGVyZmxvdwkjCisjCQl3aXRoIGFuIGluZXhhY3QgcmVzdWx0LiBUaHVzLCA5LjUgYWx3YXlzIHJhaXNlcyB0aGUJIworIwkJaW5leGFjdCB0b2dldGhlciB3aXRoIGVpdGhlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCSMKKyMJCQkJCQkJCQkjCisjCXNldG94bTFkCQkJCQkJCSMKKyMJLS0tLS0tLS0JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglTZXQgYW5zIDo9IDAJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCVJldHVybglhbnMgOj0gWCArIGFucy4gRXhpdC4JCQkJIworIwlOb3RlczoJVGhpcyB3aWxsIHJldHVybiBYIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvdW5kaW5nCSMKKyMJCSBwcmVjaXNpb24gcHJlc2NyaWJlZCBieSB0aGUgdXNlciBGUENSLgkJCSMKKyMJCQkJCQkJCQkjCisjCXNldG94bTEJCQkJCQkJCSMKKyMJLS0tLS0tLQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglDaGVjayB8WHwJCQkJCQkjCisjCQkxLjEJSWYgfFh8ID49IDEvNCwgZ28gdG8gU3RlcCAxLjMuCQkJIworIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKKyMJCTEuMwlJZiB8WHwgPCA3MCBsb2coMiksIGdvIHRvIFN0ZXAgMi4JCSMKKyMJCTEuNAlHbyB0byBTdGVwIDEwLgkJCQkJIworIwlOb3RlczoJVGhlIHVzdWFsIGNhc2Ugc2hvdWxkIHRha2UgdGhlIGJyYW5jaGVzIDEuMSAtPiAxLjMgLT4gMi4jCisjCQlIb3dldmVyLCBpdCBpcyBjb25jZWl2YWJsZSB8WHwgY2FuIGJlIHNtYWxsIHZlcnkgb2Z0ZW4JIworIwkJYmVjYXVzZSBFWFBNMSBpcyBpbnRlbmRlZCB0byBldmFsdWF0ZSBleHAoWCktMQkJIworIwkJYWNjdXJhdGVseSB3aGVuIHxYfCBpcyBzbWFsbC4gRm9yIGZ1cnRoZXIgZGV0YWlscyBvbgkjCisjCQl0aGUgY29tcGFyaXNvbnMsIHNlZSB0aGUgbm90ZXMgb24gU3RlcCAxIG9mIHNldG94LgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMQlOIDo9IHJvdW5kLXRvLW5lYXJlc3QtaW50ZWdlciggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4yCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sICMKKyMJCQlvciA2My4JCQkJCQkjCisjCQkyLjMJQ2FsY3VsYXRlCU0gPSAoTiAtIEopLzY0OyBzbyBOID0gNjRNICsgSi4JIworIwkJMi40CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIG9mCSMKKyMJCQkyXihKLzY0KS4JCQkJCSMKKyMJCTIuNQlDcmVhdGUgdGhlIHZhbHVlcyBTYyA9IDJeTSBhbmQJCQkjCisjCQkJT25lYnlTYyA6PSAtMl4oLU0pLgkJCQkjCisjCU5vdGVzOglTZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMiBvZiBzZXRveC4JCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgkJCQkjCisjCQkzLjEJUiA6PSBYICsgTipMMSwJCQkJCSMKKyMJCQkJd2hlcmUgTDEgOj0gc2luZ2xlLXByZWNpc2lvbigtbG9nMi82NCkuCSMKKyMJCTMuMglSIDo9IFIgKyBOKkwyLAkJCQkJIworIwkJCQlMMiA6PSBleHRlbmRlZC1wcmVjaXNpb24oLWxvZzIvNjQgLSBMMSkuIworIwlOb3RlczoJQXBwbHlpbmcgdGhlIGFuYWx5c2lzIG9mIFN0ZXAgMyBvZiBzZXRveCBpbiB0aGlzIGNhc2UJIworIwkJc2hvd3MgdGhhdCB8UnwgPD0gMC4wMDU1IChub3RlIHRoYXQgfFh8IDw9IDcwIGxvZzIgaW4JIworIwkJdGhpcyBjYXNlKS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDQuCUFwcHJveGltYXRlIGV4cChSKS0xIGJ5IGEgcG9seW5vbWlhbAkJCSMKKyMJCQlwID0gUitSKlIqKEExK1IqKEEyK1IqKEEzK1IqKEE0K1IqKEE1K1IqQTYpKSkpKQkjCisjCU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cwkjCisjCQlhcmUgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBBMSAod2hpY2ggaXMgMS8yKSwgQTUJIworIwkJYW5kIEE2IGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBBMiwgQTMgYW5kIEE0IGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uLgkJCQkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb24gYWJvdmUsCQkJIworIwkJCXxwIC0gKGV4cChSKS0xKXwgPAl8UnwgKiAyXigtNzIuNykJCSMKKyMJCWZvciBhbGwgfFJ8IDw9IDAuMDA1NS4JCQkJCSMKKyMJCWMpIFRvIGZ1bGx5IHV0aWxpemUgdGhlIHBpcGVsaW5lLCBwIGlzIHNlcGFyYXRlZCBpbnRvCSMKKyMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKKyMJCQlwID0gWyBSKlMqKEEyICsgUyooQTQgKyBTKkE2KSkgXQkrCSMKKyMJCQkJWyBSICsgUyooQTEgKyBTKihBMyArIFMqQTUpKSBdCQkjCisjCQl3aGVyZSBTID0gUipSLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNS4JQ29tcHV0ZSAyXihKLzY0KSpwIGJ5CQkJCQkjCisjCQkJCXAgOj0gVCpwCQkJCSMKKyMJCXdoZXJlIFQgYW5kIHQgYXJlIHRoZSBzdG9yZWQgdmFsdWVzIGZvciAyXihKLzY0KS4JIworIwlOb3RlczoJMl4oSi82NCkgaXMgc3RvcmVkIGFzIFQgYW5kIHQgd2hlcmUgVCt0IGFwcHJveGltYXRlcwkjCisjCQkyXihKLzY0KSB0byByb3VnaGx5IDg1IGJpdHM7IFQgaXMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCWFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMJIworIwkJcm91bmRlZCB0byA2MiBiaXRzIHNvIHRoYXQgdGhlIGxhc3QgdHdvIGJpdHMgb2YgVCBhcmUJIworIwkJemVyby4gVGhlIHJlYXNvbiBmb3Igc3VjaCBhIHNwZWNpYWwgZm9ybSBpcyB0aGF0IFQtMSwJIworIwkJVC0yLCBhbmQgVC04IHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbAkjCisjCQliZSBleHBsb2l0ZWQgaW4gU3RlcCA2IGJlbG93LiBUaGUgdG90YWwgcmVsYXRpdmUgZXJyb3IJIworIwkJaW4gcCBpcyBubyBiaWdnZXIgdGhhbiAyXigtNjcuNykgY29tcGFyZWQgdG8gdGhlIGZpbmFsCSMKKyMJCXJlc3VsdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCktMQkJCQkjCisjCQkJZXhwKFgpLTEgPSAyXk0gKiAoIDJeKEovNjQpICsgcCAtIDJeKC1NKSApLgkjCisjCQk2LjEJSWYgTSA8PSA2MywgZ28gdG8gU3RlcCA2LjMuCQkJIworIwkJNi4yCWFucyA6PSBUICsgKHAgKyAodCArIE9uZWJ5U2MpKS4gR28gdG8gNi42CSMKKyMJCTYuMwlJZiBNID49IC0zLCBnbyB0byA2LjUuCQkJCSMKKyMJCTYuNAlhbnMgOj0gKFQgKyAocCArIHQpKSArIE9uZWJ5U2MuIEdvIHRvIDYuNgkjCisjCQk2LjUJYW5zIDo9IChUICsgT25lYnlTYykgKyAocCArIHQpLgkJCSMKKyMJCTYuNglSZXN0b3JlIHVzZXIgRlBDUi4JCQkJIworIwkJNi43CVJldHVybiBhbnMgOj0gU2MgKiBhbnMuIEV4aXQuCQkJIworIwlOb3RlczoJVGhlIHZhcmlvdXMgYXJyYW5nZW1lbnRzIG9mIHRoZSBleHByZXNzaW9ucyBnaXZlCSMKKyMJCWFjY3VyYXRlIGV2YWx1YXRpb25zLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA3LglleHAoWCktMSBmb3IgfFh8IDwgMS80LgkJCQkJIworIwkJNy4xCUlmIHxYfCA+PSAyXigtNjUpLCBnbyB0byBTdGVwIDkuCQkjCisjCQk3LjIJR28gdG8gU3RlcCA4LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA4LglDYWxjdWxhdGUgZXhwKFgpLTEsIHxYfCA8IDJeKC02NSkuCQkJIworIwkJOC4xCUlmIHxYfCA8IDJeKC0xNjMxMiksIGdvdG8gOC4zCQkJIworIwkJOC4yCVJlc3RvcmUgRlBDUjsgcmV0dXJuIGFucyA6PSBYIC0gMl4oLTE2MzgyKS4JIworIwkJCUV4aXQuCQkJCQkJIworIwkJOC4zCVggOj0gWCAqIDJeKDE0MCkuCQkJCSMKKyMJCTguNAlSZXN0b3JlIEZQQ1I7IGFucyA6PSBhbnMgLSAyXigtMTYzODIpLgkJIworIwkJIFJldHVybiBhbnMgOj0gYW5zKjJeKDE0MCkuIEV4aXQJCQkjCisjCU5vdGVzOglUaGUgaWRlYSBpcyB0byByZXR1cm4gIlggLSB0aW55IiB1bmRlciB0aGUgdXNlcgkJIworIwkJcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2Rlcy4gVG8gYXZvaWQgdW5uZWNlc3NhcnkJIworIwkJaW5lZmZpY2llbmN5LCB3ZSBzdGF5IGF3YXkgZnJvbSBkZW5vcm1hbGl6ZWQgbnVtYmVycwkjCisjCQl0aGUgYmVzdCB3ZSBjYW4uIEZvciB8WHwgPj0gMl4oLTE2MzEyKSwgdGhlCQkjCisjCQlzdHJhaWdodGZvcndhcmQgOC4yIGdlbmVyYXRlcyB0aGUgaW5leGFjdCBleGNlcHRpb24gYXMJIworIwkJdGhlIGNhc2Ugd2FycmFudHMuCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDkuCUNhbGN1bGF0ZSBleHAoWCktMSwgfFh8IDwgMS80LCBieSBhIHBvbHlub21pYWwJCSMKKyMJCQlwID0gWCArIFgqWCooQjEgKyBYKihCMiArIC4uLiArIFgqQjEyKSkJCSMKKyMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKKyMJCWFyZSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEIxICh3aGljaCBpcyAxLzIpLCBCOQkjCisjCQl0byBCMTIgYXJlIHNpbmdsZSBwcmVjaXNpb247IEIzIHRvIEI4IGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uOyBhbmQgQjIgaXMgZG91YmxlIGV4dGVuZGVkLgkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb24gYWJvdmUsCQkJIworIwkJCXxwIC0gKGV4cChYKS0xKXwgPCB8WHwgMl4oLTcwLjYpCQkjCisjCQlmb3IgYWxsIHxYfCA8PSAwLjI1MS4JCQkJCSMKKyMJCU5vdGUgdGhhdCAwLjI1MSBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAxLzQuCQkjCisjCQljKSBUbyBmdWxseSBwcmVzZXJ2ZSBhY2N1cmFjeSwgdGhlIHBvbHlub21pYWwgaXMJIworIwkJY29tcHV0ZWQgYXMJCQkJCQkjCisjCQkJWCArICggUypCMSArCVEgKSB3aGVyZSBTID0gWCpYIGFuZAkJIworIwkJCVEJPQlYKlMqKEIyICsgWCooQjMgKyAuLi4gKyBYKkIxMikpCSMKKyMJCWQpIFRvIGZ1bGx5IHV0aWxpemUgdGhlIHBpcGVsaW5lLCBRIGlzIHNlcGFyYXRlZCBpbnRvCSMKKyMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKKyMJCQlRID0gWyBYKlMqKEIyICsgUyooQjQgKyAuLi4gKyBTKkIxMikpIF0gKwkjCisjCQkJCVsgUypTKihCMyArIFMqKEI1ICsgLi4uICsgUypCMTEpKSBdCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMTAuIENhbGN1bGF0ZSBleHAoWCktMSBmb3IgfFh8ID49IDcwIGxvZyAyLgkJIworIwkJMTAuMSBJZiBYID49IDcwbG9nMiAsIGV4cChYKSAtIDEgPSBleHAoWCkgZm9yIGFsbAkjCisjCQlwcmFjdGljYWwgcHVycG9zZXMuIFRoZXJlZm9yZSwgZ28gdG8gU3RlcCAxIG9mIHNldG94LgkjCisjCQkxMC4yIElmIFggPD0gLTcwbG9nMiwgZXhwKFgpIC0gMSA9IC0xIGZvciBhbGwgcHJhY3RpY2FsCSMKKyMJCXB1cnBvc2VzLgkJCQkJCSMKKyMJCWFucyA6PSAtMQkJCQkJCSMKKyMJCVJlc3RvcmUgdXNlciBGUENSCQkJCQkjCisjCQlSZXR1cm4gYW5zIDo9IGFucyArIDJeKC0xMjYpLiBFeGl0LgkJCSMKKyMJTm90ZXM6CTEwLjIgd2lsbCBhbHdheXMgY3JlYXRlIGFuIGluZXhhY3QgYW5kIHJldHVybiAtMSArIHRpbnkJIworIwkJaW4gdGhlIHVzZXIgcm91bmRpbmcgcHJlY2lzaW9uIGFuZCBtb2RlLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTDI6CWxvbmcJCTB4M0ZEQzAwMDAsMHg4MkUzMDg2NSwweDQzNjFDNEM2LDB4MDAwMDAwMDAKKworRUVYUEEzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTRDQzEKK0VFWFBBMjoJbG9uZwkJMHgzRkM1NTU1NSwweDU1NTU0QTU0CisKK0VNMUE0Oglsb25nCQkweDNGODExMTExLDB4MTExNzQzODUKK0VNMUEzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTRGNUEKKworRU0xQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NTU1NSwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworRU0xQjg6CWxvbmcJCTB4M0VDNzFERTMsMHhBNTc3NDY4MgorRU0xQjc6CWxvbmcJCTB4M0VGQTAxQTAsMHgxOUQ3Q0I2OAorCitFTTFCNjoJbG9uZwkJMHgzRjJBMDFBMCwweDFBMDE5REYzCitFTTFCNToJbG9uZwkJMHgzRjU2QzE2QywweDE2QzE3MEUyCisKK0VNMUI0Oglsb25nCQkweDNGODExMTExLDB4MTExMTExMTEKK0VNMUIzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTU1NTUKKworRU0xQjI6CWxvbmcJCTB4M0ZGQzAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQUFCCisJbG9uZwkJMHgwMDAwMDAwMAorCitUV08xNDA6CWxvbmcJCTB4NDhCMDAwMDAsMHgwMDAwMDAwMAorVFdPTjE0MDoKKwlsb25nCQkweDM3MzAwMDAwLDB4MDAwMDAwMDAKKworRUVYUFRCTDoKKwlsb25nCQkweDNGRkYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgxNjREMUYzLDB4QkMwMzA3NzQsMHg5Rjg0MUE5QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ4LDB4OUZDMUQ1QjkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODQzQTI4QzMsMHhBQ0RFNDA0OCwweEEwNzI4MzY5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg1QUFDMzY3LDB4Q0M0ODdCMTQsMHgxRkM1Qzk1QworCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4MUVFODVDOUYKKwlsb25nCQkweDNGRkYwMDAwLDB4ODg5ODBFODAsMHg5MkRBODUyOCwweDlGQTIwNzI5CisJbG9uZwkJMHgzRkZGMDAwMCwweDhBMTRENTc1LDB4NDk2RUZEOUMsMHhBMDdCRjlBRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU4LDB4QTAwMjBEQ0YKKwlsb25nCQkweDNGRkYwMDAwLDB4OEQxQURGNUIsMHg3RTVCQTlFNCwweDIwNUE2M0RBCisJbG9uZwkJMHgzRkZGMDAwMCwweDhFQTQzOThCLDB4NDVDRDUzQzAsMHgxRUI3MDA1MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4MUY2RUIwMjkKKwlsb25nCQkweDNGRkYwMDAwLDB4OTFDM0QzNzMsMHhBQjExQzMzOCwweEEwNzgxNDk0CisJbG9uZwkJMHgzRkZGMDAwMCwweDkzNUEyQjJGLDB4MTNFNkU5MkMsMHg5RUIzMTlCMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYwLDB4MjAxNzQ1N0QKKwlsb25nCQkweDNGRkYwMDAwLDB4OTY5NDJEMzcsMHgyMDE4NUEwMCwweDFGMTFENTM3CisJbG9uZwkJMHgzRkZGMDAwMCwweDk4MzdGMDUxLDB4OERCOEE5NzAsMHg5RkI5NTJERAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY0LDB4MUZFNDMwODcKKwlsb25nCQkweDNGRkYwMDAwLDB4OUI4RDM5QjksMHhENTRFNTUzOCwweDFGQTJBODE4CisJbG9uZwkJMHgzRkZGMDAwMCwweDlEM0VEOUE3LDB4MkNGRkI3NTAsMHgxRkRFNDk0RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFDLDB4MjA1MDQ4OTAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTBCMDUxMEYsMHhCOTcxNEZDNCwweEEwNzM2OTFDCisJbG9uZwkJMHgzRkZGMDAwMCwweEEyNzA0MzAzLDB4MEM0OTY4MTgsMHgxRjlCN0EwNQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MEEwLDB4QTA3OTcxMjYKKwlsb25nCQkweDNGRkYwMDAwLDB4QTVGRUQ2QTksMHhCMTUxMzhFQywweEEwNzFBMTQwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3Q0Q5M0I0LDB4RTk2NTM1NjgsMHgyMDRGNjJEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4MUYyODNDNEEKKwlsb25nCQkweDNGRkYwMDAwLDB4QUI3QTM5QjUsMHhBOTNFRDMzOCwweDlGOUE3RkRDCisJbG9uZwkJMHgzRkZGMDAwMCwweEFENTgzRUVBLDB4NDJBMTRBQzgsMHhBMDVCM0ZBQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc0LDB4MUZERjI2MTAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjEyM0Y1ODEsMHhEMkFDMjU5MCwweDlGNzA1RjkwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIzMTFDNDEyLDB4QTkxMTI0ODgsMHgyMDFGNjc4QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4MUYzMkZCMTMKKwlsb25nCQkweDNGRkYwMDAwLDB4QjZGRDkxRTMsMHgyOEQxNzc5MCwweDIwMDM4QjMwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RkJBRjQ3LDB4NjJGQjlFRTgsMHgyMDBEQzNDQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZDLDB4OUY4QjJBRTYKKwlsb25nCQkweDNGRkYwMDAwLDB4QkQwOEEzOUYsMHg1ODBDMzZDMCwweEEwMkJCRjcwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGMTc5OUI2LDB4N0E3MzEwODQsMHhBMDBCRjUxOAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU4LDB4QTA0MURENDEKKwlsb25nCQkweDNGRkYwMDAwLDB4QzM0NkNDREEsMHgyNDk3NjQwOCwweDlGREYxMzdCCisJbG9uZwkJMHgzRkZGMDAwMCwweEM1NjcyQTExLDB4NTUwNkRBREMsMHgyMDFGMTU2OAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVDLDB4MUZDMTNBMkUKKwlsb25nCQkweDNGRkYwMDAwLDB4QzlCOUJEODYsMHg2RTJGMjdBNCwweEEwM0Y4RjAzCisJbG9uZwkJMHgzRkZGMDAwMCwweENCRUMxNEZFLDB4RjI3MjdDNUMsMHgxRkY0OTA3RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4OUU2RTUzRTQKKwlsb25nCQkweDNGRkYwMDAwLDB4RDA2MzMzREEsMHhFRjJCMjU5NCwweDFGRDZENDVDCisJbG9uZwkJMHgzRkZGMDAwMCwweEQyQTgxRDkxLDB4RjEyQUU0NUMsMHhBMDc2RURCOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTIwLDB4OUZBNkRFMjEKKwlsb25nCQkweDNGRkYwMDAwLDB4RDc0NEZDQ0EsMHhENjlENkFGNCwweDFFRTY5QTJGCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ5OUQxNUMyLDB4NzhBRkQ3QjQsMHgyMDdGNDM5RgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU0LDB4MjAxRUMyMDcKKwlsb25nCQkweDNGRkYwMDAwLDB4REU2MEY0ODIsMHg1RTBFOTEyNCwweDlFOEJFMTc1CisJbG9uZwkJMHgzRkZGMDAwMCwweEUwQ0NERUVDLDB4MkE5NEUxMTAsMHgyMDAzMkM0QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUwLDB4MjAwNERGRjUKKwlsb25nCQkweDNGRkYwMDAwLDB4RTVCOTA2RTcsMHg3QzgzNDhBOCwweDFFNzJGNDdBCisJbG9uZwkJMHgzRkZGMDAwMCwweEU4Mzk2QTUwLDB4M0M0QkRDNjgsMHgxRjcyMkYyMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTMwLDB4QTAxN0U5NDUKKwlsb25nCQkweDNGRkYwMDAwLDB4RUQ0RjMwMUUsMHhEOTk0MkI4NCwweDFGNDAxQTVCCisJbG9uZwkJMHgzRkZGMDAwMCwweEVGRTRCOTlCLDB4RENEQUY1Q0MsMHg5RkI5QTlFMworCWxvbmcJCTB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTM4LDB4MjA3NDRDMDUKKwlsb25nCQkweDNGRkYwMDAwLDB4RjUyNTdEMTUsMHgyNDg2Q0MyQywweDFGNzczQTE5CisJbG9uZwkJMHgzRkZGMDAwMCwweEY3RDBERjczLDB4MEFEMTNCQjgsMHgxRkZFOTBENQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNDLDB4QTA0MUVEMjIKKwlsb25nCQkweDNGRkYwMDAwLDB4RkQzRTBDMEMsMHhGNDg2QzE3NCwweDFGODUzRjNBCisKKwlzZXQJCUFESkZMQUcsTF9TQ1IyCisJc2V0CQlTQ0FMRSxGUF9TQ1IwCisJc2V0CQlBREpTQ0FMRSxGUF9TQ1IxCisJc2V0CQlTQyxGUF9TQ1IwCisJc2V0CQlPTkVCWVNDLEZQX1NDUjEKKworCWdsb2JhbAkJc2V0b3gKK3NldG94OgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgaGVyZSBYIGlzIGZpbml0ZSwgbm9uLXplcm8sIGFuZCBub3QgTmFOJ3MKKworIy0tU3RlcCAxLgorCW1vdi5sCQkoJWEwKSwlZDEJCSMgbG9hZCBwYXJ0IG9mIGlucHV0IFgKKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiBYCisJY21wLmwJCSVkMSwmMHgzRkJFMDAwMAkJIyAyXigtNjUpCisJYmdlLmIJCUVYUEMxCQkJIyBub3JtYWwgY2FzZQorCWJyYQkJRVhQU00KKworRVhQQzE6CisjLS1UaGUgY2FzZSB8WHwgPj0gMl4oLTY1KQorCW1vdi53CQk0KCVhMCksJWQxCQkjIGV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21wLmwJCSVkMSwmMHg0MDBDQjE2NwkJIyAxNjM4MCBsb2cyIHRydW5jLiAxNiBiaXRzCisJYmx0LmIJCUVYUE1BSU4JCQkjIG5vcm1hbCBjYXNlCisJYnJhCQlFRVhQQklHCisKK0VYUE1BSU46CisjLS1TdGVwIDIuCisjLS1UaGlzIGlzIHRoZSBub3JtYWwgYnJhbmNoOgkyXigtNjUpIDw9IHxYfCA8IDE2MzgwIGxvZzIuCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwltb3YubAkJJjAsQURKRkxBRyglYTYpCisJZm1vdi5sCQklZnAwLCVkMQkJIyBOID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFRVhQVEJMKCVwYyksJWExCisJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAorCWxzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKKwlhc3IubAkJJjYsJWQxCQkJIyBEMCBpcyBNCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXihNKQorCW1vdi53CQlMMiglcGMpLExfU0NSMSglYTYpCSMgcHJlZmV0Y2ggTDIsIG5vIG5lZWQgaW4gQ0IKKworRVhQQ09OVDE6CisjLS1TdGVwIDMuCisjLS1mcDEsZnAyIHNhdmVkIG9uIHRoZSBzdGFjay4gZnAwIGlzIE4sIGZwMSBpcyBYLAorIy0tYTAgcG9pbnRzIHRvIDJeKEovNjQpLCBEMCBpcyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwucwkJJjB4QkMzMTcyMTgsJWZwMAkjIE4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQorCWZtdWwueAkJTDIoJXBjKSwlZnAyCQkjIE4gKiBMMiwgTDErTDIgPSAtbG9nMi82NAorCWZhZGQueAkJJWZwMSwlZnAwCQkjIFggKyBOKkwxCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIFIsIHJlZHVjZWQgYXJnLgorCisjLS1TdGVwIDQuCisjLS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKKyMtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqQTUpKSkpCisjLS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCisjLS1bUitSKlMqKEEyK1MqQTQpXSArIFtTKihBMStTKihBMytTKkE1KSldCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIGZwMSBJUyBTID0gUipSCisKKwlmbW92LnMJCSYweDNBQjYwQjcwLCVmcDIJIyBmcDIgSVMgQTUKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKkE1CisJZm1vdi54CQklZnAxLCVmcDMKKwlmbXVsLnMJCSYweDNDMDg4ODk1LCVmcDMJIyBmcDMgSVMgUypBNAorCisJZmFkZC5kCQlFRVhQQTMoJXBjKSwlZnAyCSMgZnAyIElTIEEzK1MqQTUKKwlmYWRkLmQJCUVFWFBBMiglcGMpLCVmcDMJIyBmcDMgSVMgQTIrUypBNAorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEzK1MqQTUpCisJbW92LncJCSVkMSxTQ0FMRSglYTYpCQkjIFNDQUxFIGlzIDJeKE0pIGluIGV4dGVuZGVkCisJbW92LmwJCSYweDgwMDAwMDAwLFNDQUxFKzQoJWE2KQorCWNsci5sCQlTQ0FMRSs4KCVhNikKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIGZwMyBJUyBTKihBMitTKkE0KQorCisJZmFkZC5zCQkmMHgzRjAwMDAwMCwlZnAyCSMgZnAyIElTIEExK1MqKEEzK1MqQTUpCisJZm11bC54CQklZnAwLCVmcDMJCSMgZnAzIElTIFIqUyooQTIrUypBNCkKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKihBMStTKihBMytTKkE1KSkKKwlmYWRkLngJCSVmcDMsJWZwMAkJIyBmcDAgSVMgUitSKlMqKEEyK1MqQTQpLAorCisJZm1vdi54CQkoJWExKSssJWZwMQkJIyBmcDEgaXMgbGVhZC4gcHQuIG9mIDJeKEovNjQpCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIEVYUChSKSAtIDEKKworIy0tU3RlcCA1CisjLS1maW5hbCByZWNvbnN0cnVjdGlvbiBwcm9jZXNzCisjLS1FWFAoWCkgPSAyXk0gKiAoIDJeKEovNjQpICsgMl4oSi82NCkqKEVYUChSKS0xKSApCisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyAyXihKLzY0KSooRXhwKFIpLTEpCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQorCWZhZGQucwkJKCVhMSksJWZwMAkJIyBhY2N1cmF0ZSAyXihKLzY0KQorCisJZmFkZC54CQklZnAxLCVmcDAJCSMgMl4oSi82NCkgKyAyXihKLzY0KSouLi4KKwltb3YubAkJQURKRkxBRyglYTYpLCVkMQorCisjLS1TdGVwIDYKKwl0c3QubAkJJWQxCisJYmVxLmIJCU5PUk1BTAorQURKVVNUOgorCWZtdWwueAkJQURKU0NBTEUoJWE2KSwlZnAwCitOT1JNQUw6CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VyIEZQQ1IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCVNDQUxFKCVhNiksJWZwMAkJIyBtdWx0aXBseSAyXihNKQorCWJyYQkJdF9jYXRjaAorCitFWFBTTToKKyMtLVN0ZXAgNworCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIGxvYWQgWAorCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgMStYIGluIHVzZXIgbW9kZQorCWJyYQkJdF9waW54MgorCitFRVhQQklHOgorIy0tU3RlcCA4CisJY21wLmwJCSVkMSwmMHg0MDBDQjI3QwkJIyAxNjQ4MCBsb2cyCisJYmd0LmIJCUVYUDJCSUcKKyMtLVN0ZXBzIDguMiAtLSA4LjYKKwlmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQorCW1vdi5sCQkmMSxBREpGTEFHKCVhNikKKwlmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVFWFBUQkwoJXBjKSwlYTEKKwlmbW92LmwJCSVkMSwlZnAwCQkjIGNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAorCWxzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKKwlhc3IubAkJJjYsJWQxCQkJIyBEMCBpcyBLCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIEsgdGVtcG9yYXJpbHkKKwlhc3IubAkJJjEsJWQxCQkJIyBEMCBpcyBNMQorCXN1Yi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgYTEgaXMgTQorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTTEpCisJbW92LncJCSVkMSxBREpTQ0FMRSglYTYpCSMgQURKU0NBTEUgOj0gMl4oTTEpCisJbW92LmwJCSYweDgwMDAwMDAwLEFESlNDQUxFKzQoJWE2KQorCWNsci5sCQlBREpTQ0FMRSs4KCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCQkjIEQwIGlzIE0KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJYnJhLncJCUVYUENPTlQxCQkjIGdvIGJhY2sgdG8gU3RlcCAzCisKK0VYUDJCSUc6CisjLS1TdGVwIDkKKwl0c3QuYgkJKCVhMCkJCQkjIGlzIFggcG9zaXRpdmUgb3IgbmVnYXRpdmU/CisJYm1pCQl0X3VuZmwyCisJYnJhCQl0X292ZmwyCisKKwlnbG9iYWwJCXNldG94ZAorc2V0b3hkOgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKKwltb3YubAkJKCVhMCksLSglc3ApCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwoJXNwKQorCW9yaS5sCQkmMHgwMDgwMDAwMCwoJXNwKQkjIHNpZ24oWCkqMl4oLTEyNikKKworCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSglc3ApKywlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXNldG94bTEKK3NldG94bTE6CisjLS1lbnRyeSBwb2ludCBmb3IgRVhQTTEoWCksIGhlcmUgWCBpcyBmaW5pdGUsIG5vbi16ZXJvLCBub24tTmFOCisKKyMtLVN0ZXAgMS4KKyMtLVN0ZXAgMS4xCisJbW92LmwJCSglYTApLCVkMQkJIyBsb2FkIHBhcnQgb2YgaW5wdXQgWAorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIFgKKwljbXAubAkJJWQxLCYweDNGRkQwMDAwCQkjIDEvNAorCWJnZS5iCQlFTTFDT04xCQkJIyB8WHwgPj0gMS80CisJYnJhCQlFTTFTTQorCitFTTFDT04xOgorIy0tU3RlcCAxLjMKKyMtLVRoZSBjYXNlIHxYfCA+PSAxLzQKKwltb3YudwkJNCglYTApLCVkMQkJIyBleHBvLiBhbmQgcGFydGlhbCBzaWcuIG9mIHxYfAorCWNtcC5sCQklZDEsJjB4NDAwNEMyMTUJCSMgNzBsb2cyIHJvdW5kZWQgdXAgdG8gMTYgYml0cworCWJsZS5iCQlFTTFNQUlOCQkJIyAxLzQgPD0gfFh8IDw9IDcwbG9nMgorCWJyYQkJRU0xQklHCisKK0VNMU1BSU46CisjLS1TdGVwIDIuCisjLS1UaGlzIGlzIHRoZSBjYXNlOgkxLzQgPD0gfFh8IDw9IDcwIGxvZzIuCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwlmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVFWFBUQkwoJXBjKSwlYTEKKwlmbW92LmwJCSVkMSwlZnAwCQkjIGNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBhZGRyZXNzIG9mIDJeKEovNjQpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQorCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIE0KKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgYSBjb3B5IG9mIE0KKworIy0tU3RlcCAzLgorIy0tZnAxLGZwMiBzYXZlZCBvbiB0aGUgc3RhY2suIGZwMCBpcyBOLCBmcDEgaXMgWCwKKyMtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgYW5kIGExIGJvdGggY29udGFpbiBNCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLnMJCSYweEJDMzE3MjE4LCVmcDAJIyBOICogTDEsIEwxID0gbGVhZCgtbG9nMi82NCkKKwlmbXVsLngJCUwyKCVwYyksJWZwMgkJIyBOICogTDIsIEwxK0wyID0gLWxvZzIvNjQKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBYICsgTipMMQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBpcyBSLCByZWR1Y2VkIGFyZy4KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeTQorCisjLS1TdGVwIDQuCisjLS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKKyMtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqKEE1ICsgUipBNikpKSkpCisjLS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCisjLS1bUipTKihBMitTKihBNCtTKkE2KSldICsgW1IrUyooQTErUyooQTMrUypBNSkpXQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBmcDEgSVMgUyA9IFIqUgorCisJZm1vdi5zCQkmMHgzOTUwMDk3QiwlZnAyCSMgZnAyIElTIGE2CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUypBNgorCWZtb3YueAkJJWZwMSwlZnAzCisJZm11bC5zCQkmMHgzQUI2MEI2QSwlZnAzCSMgZnAzIElTIFMqQTUKKworCWZhZGQuZAkJRU0xQTQoJXBjKSwlZnAyCQkjIGZwMiBJUyBBNCtTKkE2CisJZmFkZC5kCQlFTTFBMyglcGMpLCVmcDMJCSMgZnAzIElTIEEzK1MqQTUKKwltb3YudwkJJWQxLFNDKCVhNikJCSMgU0MgaXMgMl4oTSkgaW4gZXh0ZW5kZWQKKwltb3YubAkJJjB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xyLmwJCVNDKzgoJWE2KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEE0K1MqQTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQkJIyBEMCBpcwlNCisJbmVnLncJCSVkMQkJCSMgRDAgaXMgLU0KKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBmcDMgSVMgUyooQTMrUypBNSkKKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKC1NKQorCWZhZGQuZAkJRU0xQTIoJXBjKSwlZnAyCQkjIGZwMiBJUyBBMitTKihBNCtTKkE2KQorCWZhZGQucwkJJjB4M0YwMDAwMDAsJWZwMwkjIGZwMyBJUyBBMStTKihBMytTKkE1KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEyK1MqKEE0K1MqQTYpKQorCW9yLncJCSYweDgwMDAsJWQxCQkjIHNpZ25lZC9leHBvLiBvZiAtMl4oLU0pCisJbW92LncJCSVkMSxPTkVCWVNDKCVhNikJIyBPbmVieVNjIGlzIC0yXigtTSkKKwltb3YubAkJJjB4ODAwMDAwMDAsT05FQllTQys0KCVhNikKKwljbHIubAkJT05FQllTQys4KCVhNikKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBmcDEgSVMgUyooQTErUyooQTMrUypBNSkpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgSVMgUipTKihBMitTKihBNCtTKkE2KSkKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgSVMgUitTKihBMStTKihBMytTKkE1KSkKKworCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBJUyBFWFAoUiktMQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQorCisjLS1TdGVwIDUKKyMtLUNvbXB1dGUgMl4oSi82NCkqcAorCisJZm11bC54CQkoJWExKSwlZnAwCQkjIDJeKEovNjQpKihFeHAoUiktMSkKKworIy0tU3RlcCA2CisjLS1TdGVwIDYuMQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgcmV0cmlldmUgTQorCWNtcC5sCQklZDEsJjYzCisJYmxlLmIJCU1MRTYzCisjLS1TdGVwIDYuMglNID49IDY0CisJZm1vdi5zCQkxMiglYTEpLCVmcDEJCSMgZnAxIGlzIHQKKwlmYWRkLngJCU9ORUJZU0MoJWE2KSwlZnAxCSMgZnAxIGlzIHQrT25lYnlTYworCWZhZGQueAkJJWZwMSwlZnAwCQkjIHArKHQrT25lYnlTYyksIGZwMSByZWxlYXNlZAorCWZhZGQueAkJKCVhMSksJWZwMAkJIyBUKyhwKyh0K09uZWJ5U2MpKQorCWJyYQkJRU0xU0NBTEUKK01MRTYzOgorIy0tU3RlcCA2LjMJTSA8PSA2MworCWNtcC5sCQklZDEsJi0zCisJYmdlLmIJCU1HRU4zCitNTFROMzoKKyMtLVN0ZXAgNi40CU0gPD0gLTQKKwlmYWRkLnMJCTEyKCVhMSksJWZwMAkJIyBwK3QKKwlmYWRkLngJCSglYTEpLCVmcDAJCSMgVCsocCt0KQorCWZhZGQueAkJT05FQllTQyglYTYpLCVmcDAJIyBPbmVieVNjICsgKFQrKHArdCkpCisJYnJhCQlFTTFTQ0FMRQorTUdFTjM6CisjLS1TdGVwIDYuNQktMyA8PSBNIDw9IDYzCisJZm1vdi54CQkoJWExKSssJWZwMQkJIyBmcDEgaXMgVAorCWZhZGQucwkJKCVhMSksJWZwMAkJIyBmcDAgaXMgcCt0CisJZmFkZC54CQlPTkVCWVNDKCVhNiksJWZwMQkjIGZwMSBpcyBUK09uZWJ5U2MKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyAoVCtPbmVieVNjKSsocCt0KQorCitFTTFTQ0FMRToKKyMtLVN0ZXAgNi42CisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbXVsLngJCVNDKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK0VNMVNNOgorIy0tU3RlcCA3CXxYfCA8IDEvNC4KKwljbXAubAkJJWQxLCYweDNGQkUwMDAwCQkjIDJeKC02NSkKKwliZ2UuYgkJRU0xUE9MWQorCitFTTFUSU5ZOgorIy0tU3RlcCA4CXxYfCA8IDJeKC02NSkKKwljbXAubAkJJWQxLCYweDAwMzMwMDAwCQkjIDJeKC0xNjMxMikKKwlibHQuYgkJRU0xMlRJTlkKKyMtLVN0ZXAgOC4yCisJbW92LmwJCSYweDgwMDEwMDAwLFNDKCVhNikJIyBTQyBpcyAtMl4oLTE2MzgyKQorCW1vdi5sCQkmMHg4MDAwMDAwMCxTQys0KCVhNikKKwljbHIubAkJU0MrOCglYTYpCisJZm1vdi54CQkoJWEwKSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKKwlmYWRkLngJCVNDKCVhNiksJWZwMAorCWJyYQkJdF9jYXRjaAorCitFTTEyVElOWToKKyMtLVN0ZXAgOC4zCisJZm1vdi54CQkoJWEwKSwlZnAwCisJZm11bC5kCQlUV08xNDAoJXBjKSwlZnAwCisJbW92LmwJCSYweDgwMDEwMDAwLFNDKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xyLmwJCVNDKzgoJWE2KQorCWZhZGQueAkJU0MoJWE2KSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLmQJCVRXT04xNDAoJXBjKSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0VNMVBPTFk6CisjLS1TdGVwIDkJZXhwKFgpLTEgYnkgYSBzaW1wbGUgcG9seW5vbWlhbAorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBmcDAgaXMgWAorCWZtdWwueAkJJWZwMCwlZnAwCQkjIGZwMCBpcyBTIDo9IFgqWAorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CisJZm1vdi5zCQkmMHgyRjMwQ0FBOCwlZnAxCSMgZnAxIGlzIEIxMgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKkIxMgorCWZtb3YucwkJJjB4MzEwRjgyOTAsJWZwMgkjIGZwMiBpcyBCMTEKKwlmYWRkLnMJCSYweDMyRDczMjIwLCVmcDEJIyBmcDEgaXMgQjEwK1MqQjEyCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUypCMTEKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjEwICsgLi4uCisKKwlmYWRkLnMJCSYweDM0OTNGMjgxLCVmcDIJIyBmcDIgaXMgQjkrUyouLi4KKwlmYWRkLmQJCUVNMUI4KCVwYyksJWZwMQkJIyBmcDEgaXMgQjgrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCOSsuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjgrLi4uCisKKwlmYWRkLmQJCUVNMUI3KCVwYyksJWZwMgkJIyBmcDIgaXMgQjcrUyouLi4KKwlmYWRkLmQJCUVNMUI2KCVwYyksJWZwMQkJIyBmcDEgaXMgQjYrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCNysuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjYrLi4uCisKKwlmYWRkLmQJCUVNMUI1KCVwYyksJWZwMgkJIyBmcDIgaXMgQjUrUyouLi4KKwlmYWRkLmQJCUVNMUI0KCVwYyksJWZwMQkJIyBmcDEgaXMgQjQrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCNSsuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjQrLi4uCisKKwlmYWRkLmQJCUVNMUIzKCVwYyksJWZwMgkJIyBmcDIgaXMgQjMrUyouLi4KKwlmYWRkLngJCUVNMUIyKCVwYyksJWZwMQkJIyBmcDEgaXMgQjIrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCMysuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjIrLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUypTKihCMysuLi4pCisJZm11bC54CQkoJWEwKSwlZnAxCQkjIGZwMSBpcyBYKlMqKEIyLi4uCisKKwlmbXVsLnMJCSYweDNGMDAwMDAwLCVmcDAJIyBmcDAgaXMgUypCMQorCWZhZGQueAkJJWZwMiwlZnAxCQkjIGZwMSBpcyBRCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgZnAyIHJlc3RvcmVkIHslZnAyLyVmcDN9CisKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgaXMgUypCMStRCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJKCVhMCksJWZwMAorCWJyYQkJdF9pbngyCisKK0VNMUJJRzoKKyMtLVN0ZXAgMTAJfFh8ID4gNzAgbG9nMgorCW1vdi5sCQkoJWEwKSwlZDEKKwljbXAubAkJJWQxLCYwCisJYmd0LncJCUVYUEMxCisjLS1TdGVwIDEwLjIKKwlmbW92LnMJCSYweEJGODAwMDAwLCVmcDAJIyBmcDAgaXMgLTEKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAkjIC0xICsgMl4oLTEyNikKKwlicmEJCXRfbWlueDIKKworCWdsb2JhbAkJc2V0b3htMWQKK3NldG94bTFkOgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZGVub3JtYWxpemVkCisjLS1TdGVwIDAuCisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzZ2V0ZXhwKCk6ICByZXR1cm5zIHRoZSBleHBvbmVudCBwb3J0aW9uIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4JIworIwkgICAgICBUaGUgZXhwb25lbnQgYmlhcyBpcyByZW1vdmVkIGFuZCB0aGUgZXhwb25lbnQgdmFsdWUgaXMJIworIwkgICAgICByZXR1cm5lZCBhcyBhbiBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyIGluIGZwMC4JCSMKKyMgc2dldGV4cGQoKTogaGFuZGxlcyBkZW5vcm1hbGl6ZWQgbnVtYmVycy4JCQkJIworIwkJCQkJCQkJCSMKKyMgc2dldG1hbigpOiAgZXh0cmFjdHMgdGhlIG1hbnRpc3NhIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4gVGhlCQkjCisjCSAgICAgIG1hbnRpc3NhIGlzIGNvbnZlcnRlZCB0byBhbiBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyIHcvCSMKKyMJICAgICAgYW4gZXhwb25lbnQgb2YgJDNmZmYgYW5kIGlzIHJldHVybmVkIGluIGZwMC4gVGhlIHJhbmdlIG9mICMKKyMJICAgICAgdGhlIHJlc3VsdCBpcyBbMS4wIC0gMi4wKS4JCQkJIworIyBzZ2V0bWFuZCgpOiBoYW5kbGVzIGRlbm9ybWFsaXplZCBudW1iZXJzLgkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IGV4cG9uZW50KFgpIG9yIG1hbnRpc3NhKFgpCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNnZXRleHAKK3NnZXRleHA6CisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBnZXQgdGhlIGV4cG9uZW50CisJYmNscgkJJjB4ZiwlZDAJCSMgY2xlYXIgdGhlIHNpZ24gYml0CisJc3ViaS53CQkmMHgzZmZmLCVkMAkJIyBzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92LncJCSVkMCwlZnAwCQkjIHJldHVybiBleHAgaW4gZnAwCisJYmx0LmIJCXNnZXRleHBuCQkjIGl0J3MgbmVnYXRpdmUKKwlydHMKKworc2dldGV4cG46CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworCWdsb2JhbAkJc2dldGV4cGQKK3NnZXRleHBkOgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKKwlzdWJpLncJCSYweDNmZmYsJWQwCQkjIHN1YnRyYWN0IG9mZiB0aGUgYmlhcworCWZtb3YudwkJJWQwLCVmcDAJCSMgcmV0dXJuIGV4cCBpbiBmcDAKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisJZ2xvYmFsCQlzZ2V0bWFuCitzZ2V0bWFuOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZ2V0IHRoZSBleHAKKwlvcmkudwkJJjB4N2ZmZiwlZDAJCSMgY2xlYXIgb2xkIGV4cAorCWJjbHIJCSYweGUsJWQwCQkjIG1ha2UgaXQgdGhlIG5ldyBleHAgKy0zZmZmCisKKyMgaGVyZSwgd2UgYnVpbGQgdGhlIHJlc3VsdCBpbiBhIHRtcCBsb2NhdGlvbiBzbyBhcyBub3QgdG8gZGlzdHVyYiB0aGUgaW5wdXQKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSB0byB0bXAgbG9jCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgdG8gdG1wIGxvYworCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwdXQgbmV3IHZhbHVlIGJhY2sgaW4gZnAwCisJYm1pLmIJCXNnZXRtYW5uCQkjIGl0J3MgbmVnYXRpdmUKKwlydHMKKworc2dldG1hbm46CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBGb3IgZGVub3JtYWxpemVkIG51bWJlcnMsIHNoaWZ0IHRoZSBtYW50aXNzYSB1bnRpbCB0aGUgai1iaXQgPSAxLAorIyB0aGVuIGxvYWQgdGhlIGV4cG9uZW50IHdpdGggKy8xICQzZmZmLgorIworCWdsb2JhbAkJc2dldG1hbmQKK3NnZXRtYW5kOgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZXhwb25lbnQKKwlicmEuYgkJc2dldG1hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNjb3NoKCk6ICBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2Nvc2hkKCk6IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBjb3NoKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCUNPU0gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTYzODAgbG9nMiwgZ28gdG8gMy4JCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gKHxYfCA8PSAxNjM4MCBsb2cyKSBDb3NoKFgpIGlzIG9idGFpbmVkIGJ5IHRoZSBmb3JtdWxhZQkjCisjCQl5ID0gfFh8LCB6ID0gZXhwKFkpLCBhbmQJCQkJIworIwkJY29zaChYKSA9ICgxLzIpKiggeiArIDEveiApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiAofFh8ID4gMTYzODAgbG9nMikuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkjCisjCQkJCQkJCQkJIworIwk0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQkJCQkjCisjCQljb3NoKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKKyMJCUhvd2V2ZXIsIGludm9raW5nIGV4cCh8WHwpIG1heSBjYXVzZSBwcmVtYXR1cmUJCSMKKyMJCW92ZXJmbG93LiBUaHVzLCB3ZSBjYWxjdWxhdGUgc2luaChYKSBhcyBmb2xsb3dzOgkjCisjCQlZCTo9IHxYfAkJCQkJCSMKKyMJCUZhY3QJOj0JMioqKDE2MzgwKQkJCQkjCisjCQlZJwk6PSBZIC0gMTYzODEgbG9nMgkJCQkjCisjCQljb3NoKFgpIDo9IEZhY3QgKiBleHAoWScpLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMTY0ODAgbG9nMikgc2luaChYKSBtdXN0IG92ZXJmbG93LiBSZXR1cm4JCSMKKyMJCUh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAkjCisjCQl0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyCSMKKyMJCWluIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVFdPMTYzODA6CisJbG9uZwkJMHg3RkZCMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisJZ2xvYmFsCQlzY29zaAorc2Nvc2g6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDQwMENCMTY3CisJYmd0LmIJCUNPU0hCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorIy0tQ09TSChYKSA9ICgxLzIpICogKCBFWFAoWCkgKyAxL0VYUChYKSApCisKKwlmYWJzLngJCSVmcDAJCQkjIHxYfAorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgfFh8IHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gfFh8CisJYnNyCQlzZXRveAkJCSMgRlAwIElTIEVYUCh8WHwpCisJYWRkLmwJCSYweGMsJXNwCQkjIGVyYXNlIHxYfCBmcm9tIHN0YWNrCisJZm11bC5zCQkmMHgzRjAwMDAwMCwlZnAwCSMgKDEvMilFWFAofFh8KQorCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LnMJCSYweDNFODAwMDAwLCVmcDEJIyAoMS80KQorCWZkaXYueAkJJWZwMCwlZnAxCQkjIDEvKDIgRVhQKHxYfCkpCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRkFERF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIEFERAorCWZhZGQueAkJJWZwMSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0NPU0hCSUc6CisJY21wLmwJCSVkMSwmMHg0MDBDQjJCMworCWJndC5iCQlDT1NISFVHRQorCisJZmFicy54CQklZnAwCisJZnN1Yi5kCQlUMSglcGMpLCVmcDAJCSMgKHxYfC0xNjM4MUxPRzJfTEVBRCkKKwlmc3ViLmQJCVQyKCVwYyksJWZwMAkJIyB8WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgZnAwIHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gZnAwCisJYnNyCQlzZXRveAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBmcDAgZnJvbSBzdGFjaworCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJVFdPMTYzODAoJXBjKSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0NPU0hIVUdFOgorCWJyYQkJdF9vdmZsMgorCisJZ2xvYmFsCQlzY29zaGQKKyMtLUNPU0goWCkgPSAxIEZPUiBERU5PUk1BTElaRUQgWAorc2Nvc2hkOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzc2luaCgpOiAgY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc3NpbmhkKCk6IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gc2luaChYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIyAgICAgICBTSU5ICQkJCQkJCQkjCisjICAgICAgIDEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDIuICh8WHwgPD0gMTYzODAgbG9nMikgU2luaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYQkjCisjICAgICAgICAgICAgICAgeSA9IHxYfCwgc2duID0gc2lnbihYKSwgYW5kIHogPSBleHBtMShZKSwJCSMKKyMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2duKigxLzIpKiggeiArIHovKDEreikgKS4JCQkjCisjICAgICAgICAgIEV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDMuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDQuICgxNjM4MCBsb2cyIDwgfFh8IDw9IDE2NDgwIGxvZzIpCQkJCSMKKyMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKKyMgICAgICAgICAgSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4JIworIyAgICAgICAgICBUaHVzLCB3ZSBjYWxjdWxhdGUgc2luaChYKSBhcyBmb2xsb3dzOgkJCSMKKyMgICAgICAgICAgICAgWSAgICAgICA6PSB8WHwJCQkJCQkjCisjICAgICAgICAgICAgIHNnbiAgICAgOj0gc2lnbihYKQkJCQkJIworIyAgICAgICAgICAgICBzZ25GYWN0IDo9IHNnbiAqIDIqKigxNjM4MCkJCQkJIworIyAgICAgICAgICAgICBZJyAgICAgIDo9IFkgLSAxNjM4MSBsb2cyCQkJCQkjCisjICAgICAgICAgICAgIHNpbmgoWCkgOj0gc2duRmFjdCAqIGV4cChZJykuCQkJCSMKKyMgICAgICAgICAgRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgNS4gKHxYfCA+IDE2NDgwIGxvZzIpIHNpbmgoWCkgbXVzdCBvdmVyZmxvdy4gUmV0dXJuCQkjCisjICAgICAgICAgIHNpZ24oWCkqSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCSMKKyMgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHNpZ24uIEh1Z2UgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlciBpbgkjCisjICAgICAgICAgIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNzaW5oCitzc2luaDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJbW92LmwJCSVkMSwlYTEJCQkjIHNhdmUgKGNvbXBhY3RlZCkgb3BlcmFuZAorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDQwMENCMTY3CisJYmd0LmIJCVNJTkhCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorIy0tWSA9IHxYfCwgWiA9IEVYUE0xKFkpLCBTSU5IKFgpID0gU0lHTihYKSooMS8yKSooIFogKyBaLygxK1opICkKKworCWZhYnMueAkJJWZwMAkJCSMgWSA9IHxYfAorCisJbW92bS5sCQkmMHg4MDQwLC0oJXNwKQkJIyB7YTEvZDB9CisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWSBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFkKKwljbHIubAkJJWQwCisJYnNyCQlzZXRveG0xCQkJIyBGUDAgSVMgWiA9IEVYUE0xKFkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFkgZnJvbSBzdGFjaworCWZtb3YubAkJJjAsJWZwY3IKKwltb3ZtLmwJCSglc3ApKywmMHgwMjAxCQkjIHthMS9kMH0KKworCWZtb3YueAkJJWZwMCwlZnAxCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMStaCisJZm1vdi54CQklZnAwLC0oJXNwKQorCWZkaXYueAkJJWZwMSwlZnAwCQkjIFovKDErWikKKwltb3YubAkJJWExLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHgzRjAwMDAwMCwlZDEKKwlmYWRkLngJCSglc3ApKywlZnAwCisJbW92LmwJCSVkMSwtKCVzcCkKKworCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC5zCQkoJXNwKSssJWZwMAkJIyBsYXN0IGZwIGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb25zIHNldAorCWJyYQkJdF9jYXRjaAorCitTSU5IQklHOgorCWNtcC5sCQklZDEsJjB4NDAwQ0IyQjMKKwliZ3QJCXRfb3ZmbAorCWZhYnMueAkJJWZwMAorCWZzdWIuZAkJVDEoJXBjKSwlZnAwCQkjICh8WHwtMTYzODFMT0cyX0xFQUQpCisJbW92LmwJCSYwLC0oJXNwKQorCW1vdi5sCQkmMHg4MDAwMDAwMCwtKCVzcCkKKwltb3YubAkJJWExLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHg3RkZCMDAwMCwlZDEKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBFWFRFTkRFRCBGTVQKKwlmc3ViLmQJCVQyKCVwYyksJWZwMAkJIyB8WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgZnAwIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gZnAwCisJYnNyCQlzZXRveAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBmcDAgZnJvbSBzdGFjaworCisJbW92LmwJCSglc3ApKywlZDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJKCVzcCkrLCVmcDAJCSMgcG9zc2libGUgZXhjZXB0aW9uCisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXNzaW5oZAorIy0tU0lOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzc2luaGQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFuaCgpOiAgY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzdGFuaGQoKTogY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSB0YW5oKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCVRBTkgJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49ICg1LzIpIGxvZzIgb3IgfFh8IDw9IDIqKigtNDApLCBnbyB0byAzLgkJIworIwkJCQkJCQkJCSMKKyMJMi4gKDIqKigtNDApIDwgfFh8IDwgKDUvMikgbG9nMikgQ2FsY3VsYXRlIHRhbmgoWCkgYnkJCSMKKyMJCXNnbiA6PSBzaWduKFgpLCB5IDo9IDJ8WHwsIHogOj0gZXhwbTEoWSksIGFuZAkJIworIwkJdGFuaChYKSA9IHNnbiooIHovKDIreikgKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gKHxYfCA8PSAyKiooLTQwKSBvciB8WHwgPj0gKDUvMikgbG9nMikuIElmIHxYfCA8IDEsCQkjCisjCQlnbyB0byA3LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPj0gKDUvMikgbG9nMikgSWYgfFh8ID49IDUwIGxvZzIsIGdvIHRvIDYuCQkjCisjCQkJCQkJCQkJIworIwk1LiAoKDUvMikgbG9nMiA8PSB8WHwgPCA1MCBsb2cyKSBDYWxjdWxhdGUgdGFuaChYKSBieQkJIworIwkJc2duIDo9IHNpZ24oWCksIHkgOj0gMnxYfCwgeiA6PSBleHAoWSksCQkJIworIwkJdGFuaChYKSA9IHNnbiAtIFsgc2duKjIvKDEreikgXS4JCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk2LiAofFh8ID49IDUwIGxvZzIpIFRhbmgoWCkgPSArLTEgKHJvdW5kIHRvIG5lYXJlc3QpLiBUaHVzLCB3ZQkjCisjCQljYWxjdWxhdGUgVGFuaChYKSBieQkJCQkJIworIwkJc2duIDo9IHNpZ24oWCksIFRpbnkgOj0gMioqKC0xMjYpLAkJCSMKKyMJCXRhbmgoWCkgOj0gc2duIC0gc2duKlRpbnkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuICh8WHwgPCAyKiooLTQwKSkuIFRhbmgoWCkgPSBYLglFeGl0LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCVNHTixMX1NDUjMKKworCXNldAkJVixGUF9TQ1IwCisKKwlnbG9iYWwJCXN0YW5oCitzdGFuaDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJZm1vdi54CQklZnAwLFgoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCW1vdi5sCQklZDEsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsICYweDNmZDc4MDAwCSMgaXMgfFh8IDwgMl4oLTQwKT8KKwlibHQudwkJVEFOSEJPUlMJCSMgeWVzCisJY21wLmwJCSVkMSwgJjB4M2ZmZmRkY2UJIyBpcyB8WHwgPiAoNS8yKUxPRzI/CisJYmd0LncJCVRBTkhCT1JTCQkjIHllcworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFCisjLS1ZID0gMnxYfCwgWiA9IEVYUE0xKFkpLCBUQU5IKFgpID0gU0lHTihYKSAqIFogLyAoWisyKS4KKworCW1vdi5sCQlYKCVhNiksJWQxCisJbW92LmwJCSVkMSxTR04oJWE2KQorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEKKwlhZGQubAkJJjB4MDAwMTAwMDAsJWQxCQkjIEVYUE9ORU5UIE9GIDJ8WHwKKwltb3YubAkJJWQxLFgoJWE2KQorCWFuZC5sCQkmMHg4MDAwMDAwMCxTR04oJWE2KQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgRlAwIElTIFkgPSAyfFh8CisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCisJYnNyCQlzZXRveG0xCQkJIyBGUDAgSVMgWiA9IEVYUE0xKFkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFkgZnJvbSBzdGFjaworCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZhZGQucwkJJjB4NDAwMDAwMDAsJWZwMQkjIForMgorCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlmbW92LngJCSVmcDEsViglYTYpCisJZW9yLmwJCSVkMSxWKCVhNikKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmRpdi54CQlWKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK1RBTkhCT1JTOgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwlibHQudwkJVEFOSFNNCisKKwljbXAubAkJJWQxLCYweDQwMDQ4QUExCisJYmd0LncJCVRBTkhIVUdFCisKKyMtLSAoNS8yKSBMT0cyIDwgfFh8IDwgNTAgTE9HMiwKKyMtLVRBTkgoWCkgPSAxIC0gKDIvW0VYUCgyWCkrMV0pLiBMRVQgWSA9IDJ8WHwsIFNHTiA9IFNJR04oWCksCisjLS1UQU5IKFgpID0gU0dOIC0JU0dOKjIvW0VYUChZKSsxXS4KKworCW1vdi5sCQlYKCVhNiksJWQxCisJbW92LmwJCSVkMSxTR04oJWE2KQorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEKKwlhZGQubAkJJjB4MDAwMTAwMDAsJWQxCQkjIEVYUE8gT0YgMnxYfAorCW1vdi5sCQklZDEsWCglYTYpCQkjIFkgPSAyfFh8CisJYW5kLmwJCSYweDgwMDAwMDAwLFNHTiglYTYpCisJbW92LmwJCVNHTiglYTYpLCVkMQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgWSA9IDJ8WHwKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCisJYnNyCQlzZXRveAkJCSMgRlAwIElTIEVYUChZKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKKwltb3YubAkJKCVzcCkrLCVkMAorCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyBFWFAoWSkrMQorCisJZW9yLmwJCSYweEMwMDAwMDAwLCVkMQkJIyAtU0lHTihYKSoyCisJZm1vdi5zCQklZDEsJWZwMQkJIyAtU0lHTihYKSoyIElOIFNHTCBGTVQKKwlmZGl2LngJCSVmcDAsJWZwMQkJIyAtU0lHTihYKTIgLyBbRVhQKFkpKzEgXQorCisJbW92LmwJCVNHTiglYTYpLCVkMQorCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyBTR04KKwlmbW92LnMJCSVkMSwlZnAwCQkjIFNHTiBJTiBTR0wgRk1UCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCW1vdi5iCQkmRkFERF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIEFERAorCWZhZGQueAkJJWZwMSwlZnAwCisJYnJhCQl0X2lueDIKKworVEFOSFNNOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9jYXRjaAorCisjLS0tUkVUVVJOIFNHTihYKSAtIFNHTihYKUVQUworVEFOSEhVR0U6CisJbW92LmwJCVgoJWE2KSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCisJZm1vdi5zCQklZDEsJWZwMAorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwllb3IubAkJJjB4ODA4MDAwMDAsJWQxCQkjIC1TSUdOKFgpKkVQUworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwlmYWRkLnMJCSVkMSwlZnAwCisJYnJhCQl0X2lueDIKKworCWdsb2JhbAkJc3RhbmhkCisjLS1UQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3N0YW5oZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNsb2duKCk6ICAgIGNvbXB1dGVzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nbmQoKTogICBjb21wdXRlcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nbnAxKCk6ICBjb21wdXRlcyB0aGUgbG9nKDErWCkgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNsb2ducDFkKCk6IGNvbXB1dGVzIHRoZSBsb2coMStYKSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gbG9nKFgpIG9yIGxvZygxK1gpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUxPR046CQkJCQkJCQkjCisjCVN0ZXAgMS4gSWYgfFgtMXwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coWCkgYnkgYW4gb2RkCQkjCisjCQlwb2x5bm9taWFsIGluIHUsIHdoZXJlIHUgPSAyKFgtMSkvKFgrMSkuIE90aGVyd2lzZSwJIworIwkJbW92ZSBvbiB0byBTdGVwIDIuCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuIFggPSAyKiprICogWSB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiB0byBiZSB0aGUgZmlyc3QJIworIwkJc2V2ZW4gc2lnbmlmaWNhbnQgYml0cyBvZiBZIHBsdXMgMioqKC03KSwgaS5lLgkJIworIwkJRiA9IDEueHh4eHh4MSBpbiBiYXNlIDIgd2hlcmUgdGhlIHNpeCAieCIgbWF0Y2ggdGhvc2UJIworIwkJb2YgWS4gTm90ZSB0aGF0IHxZLUZ8IDw9IDIqKigtNykuCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAzLiBEZWZpbmUgdSA9IChZLUYpL0YuIEFwcHJveGltYXRlIGxvZygxK3UpIGJ5IGEJCSMKKyMJCXBvbHlub21pYWwgaW4gdSwgbG9nKDErdSkgPSBwb2x5LgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4gUmVjb25zdHJ1Y3QJCQkJCQkjCisjCQlsb2coWCkgPSBsb2coIDIqKmsgKiBZICkgPSBrKmxvZygyKSArIGxvZyhGKSArIGxvZygxK3UpCSMKKyMJCWJ5IGsqbG9nKDIpICsgKGxvZyhGKSArIHBvbHkpLiBUaGUgdmFsdWVzIG9mIGxvZyhGKSBhcmUJIworIwkJY2FsY3VsYXRlZCBiZWZvcmVoYW5kIGFuZCBzdG9yZWQgaW4gdGhlIHByb2dyYW0uCSMKKyMJCQkJCQkJCQkjCisjCWxvZ25wMToJCQkJCQkJCSMKKyMJU3RlcCAxOiBJZiB8WHwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coMStYKSBieSBhbiBvZGQJCSMKKyMJCXBvbHlub21pYWwgaW4gdSB3aGVyZSB1ID0gMlgvKDIrWCkuIE90aGVyd2lzZSwgbW92ZSBvbgkjCisjCQl0byBTdGVwIDIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyOiBMZXQgMStYID0gMioqayAqIFksIHdoZXJlIDEgPD0gWSA8IDIuIERlZmluZSBGIGFzIGRvbmUJIworIwkJaW4gU3RlcCAyIG9mIHRoZSBhbGdvcml0aG0gZm9yIExPR04gYW5kIGNvbXB1dGUJCSMKKyMJCWxvZygxK1gpIGFzIGsqbG9nKDIpICsgbG9nKEYpICsgcG9seSB3aGVyZSBwb2x5CQkjCisjCQlhcHByb3hpbWF0ZXMgbG9nKDErdSksIHUgPSAoWS1GKS9GLgkJCSMKKyMJCQkJCQkJCQkjCisjCUltcGxlbWVudGF0aW9uIE5vdGVzOgkJCQkJCSMKKyMJTm90ZSAxLiBUaGVyZSBhcmUgNjQgZGlmZmVyZW50IHBvc3NpYmxlIHZhbHVlcyBmb3IgRiwgdGh1cyA2NAkjCisjCQlsb2coRikncyBuZWVkIHRvIGJlIHRhYnVsYXRlZC4gTW9yZW92ZXIsIHRoZSB2YWx1ZXMgb2YJIworIwkJMS9GIGFyZSBhbHNvIHRhYnVsYXRlZCBzbyB0aGF0IHRoZSBkaXZpc2lvbiBpbiAoWS1GKS9GCSMKKyMJCWNhbiBiZSBwZXJmb3JtZWQgYnkgYSBtdWx0aXBsaWNhdGlvbi4JCQkjCisjCQkJCQkJCQkJIworIwlOb3RlIDIuIEluIFN0ZXAgMiBvZiBsb2ducDEsIGluIG9yZGVyIHRvIHByZXNlcnZlZCBhY2N1cmFjeSwJIworIwkJdGhlIHZhbHVlIFktRiBoYXMgdG8gYmUgY2FsY3VsYXRlZCBjYXJlZnVsbHkgd2hlbgkjCisjCQkxLzIgPD0gWCA8IDMvMi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlOb3RlIDMuIFRvIGZ1bGx5IGV4cGxvaXQgdGhlIHBpcGVsaW5lLCBwb2x5bm9taWFscyBhcmUgdXN1YWxseQkjCisjCQlzZXBhcmF0ZWQgaW50byB0d28gcGFydHMgZXZhbHVhdGVkIGluZGVwZW5kZW50bHkgYmVmb3JlCSMKKyMJCWJlaW5nIGFkZGVkIHVwLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMT0dPRjI6CisJbG9uZwkJMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitvbmU6CisJbG9uZwkJMHgzRjgwMDAwMAoremVybzoKKwlsb25nCQkweDAwMDAwMDAwCitpbmZ0eToKKwlsb25nCQkweDdGODAwMDAwCituZWdvbmU6CisJbG9uZwkJMHhCRjgwMDAwMAorCitMT0dBNjoKKwlsb25nCQkweDNGQzI0OTlBLDB4QjVFNDA0MEIKK0xPR0E1OgorCWxvbmcJCTB4QkZDNTU1QjUsMHg4NDhDQjdEQgorCitMT0dBNDoKKwlsb25nCQkweDNGQzk5OTk5LDB4OTg3RDg3MzAKK0xPR0EzOgorCWxvbmcJCTB4QkZDRkZGRkYsMHhGRjZGN0U5NworCitMT0dBMjoKKwlsb25nCQkweDNGRDU1NTU1LDB4NTU1NTU1QTQKK0xPR0ExOgorCWxvbmcJCTB4QkZFMDAwMDAsMHgwMDAwMDAwOAorCitMT0dCNToKKwlsb25nCQkweDNGMTc1NDk2LDB4QUREN0RBRDYKK0xPR0I0OgorCWxvbmcJCTB4M0YzQzcxQzIsMHhGRTgwQzdFMAorCitMT0dCMzoKKwlsb25nCQkweDNGNjI0OTI0LDB4OTI4QkNDRkYKK0xPR0IyOgorCWxvbmcJCTB4M0Y4OTk5OTksMHg5OTk5OTVFQworCitMT0dCMToKKwlsb25nCQkweDNGQjU1NTU1LDB4NTU1NTU1NTUKK1RXTzoKKwlsb25nCQkweDQwMDAwMDAwLDB4MDAwMDAwMDAKKworTFRIT0xEOgorCWxvbmcJCTB4M2Y5OTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworTE9HVEJMOgorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGRTAzRjgwRiwweEUwM0Y4MEZFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRjcwMDAwLDB4RkYwMTUzNTgsMHg4MzNDNDdFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEZBMjMyQ0YyLDB4NTIxMzhBQzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGOTAwMDAsMHhCREM4RDgzRSwweEFEODhENTQ5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjY2MDNEOTgsMHgwRjY2MDNEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZBMDAwMCwweDlDRjQzRENGLDB4RjVFQUZENDgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGMkI5RDY0OCwweDBGMkI5RDY1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkEwMDAwLDB4REExNkVCODgsMHhDQjhERjYxNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEVGMkVCNzFGLDB4QzQzNDUyMzgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg4QjI5Qjc3NSwweDFCRDcwNzQzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RUJCREIyQTUsMHhDMTYxOUM4QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEE4RDgzOUY4LDB4MzBDMUZCNDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFODY1QUM3QiwweDc2MDNBMTk3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QzYxQTJFQjEsMHg4Q0Q5MDdBRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEU1MjU5ODJBLDB4RjcwQzg4MEUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhFMkYyQTQ3QSwweERFM0ExOEFGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTFGQzc4MEUsMHgxRkM3ODBFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEZGNjQ4OThFLDB4REY1NUQ1NTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhERUU5NUM0QywweEEwMzdCQTU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OERCOTU2QTksMHg3QjNEMDE0OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweERCRUI2MUVFLDB4RDE5QzU5NTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg5QjhGRTEwMCwweEY0N0JBMURFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDkwMUIyMDMsMHg2NDA2QzgwRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEE5MzcyRjFELDB4MERBMUJEMTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhENjJCODBENiwweDJCODBENjJDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QjZCMDdGMzgsMHhDRTkwRTQ2QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQzNjgwRDM2LDB4ODBEMzY4MEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhDM0ZEMDMyOSwweDA2NDg4NDgxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDBCNjlGQ0IsMHhEMjU4MEQwQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEQxMURFMEZGLDB4MTVBQjE4Q0EsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDRTE2OEE3NywweDI1MDgwQ0UxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4REUxNDMzQTEsMHg2QzY2QjE1MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweENCODcyN0MwLDB4NjVDMzkzRTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFQUUxMEI1QSwweDdEREM4QURELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzkwN0RBNEUsMHg4NzExNDZBRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEY3ODU2RTVFLDB4RTJDOUIyOTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDNjk4MEM2OSwweDgwQzY5ODBDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODIwMTJDQTUsMHhBNjgyMDZENywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM0MzcyRjg1LDB4NUQ4MjRDQTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4ODJDNUZDRCwweDcyNTZBOEM1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzFFNEJCRDUsMHg5NUY2RTk0NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDhFNDRDNjBCLDB4NENDRkQ3REUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCRkEwMkZFOCwweDBCRkEwMkZGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OTQ0QUQwOUUsMHhGNDM1MUFGNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJENjkxMDQ3LDB4MDc2NjFBQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5QTNFRUNENCwweEMzRUFBNkIyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkIzRUU3MjEsMHhBNTREODgwQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEEwMjE4NDM0LDB4MzUzRjFERTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCOTIxNDNGQSwweDM2RjVFMDJFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QTVGMkZDQUIsMHhCQkM1MDZEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEI3MEZCQjVBLDB4MTlCRTM2NTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBQkIzQjhCQSwweDJBRDM2MkE1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjUwOUU2OEEsMHg5Qjk0ODIxRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEIxNjQxNzk1LDB4Q0UzQ0E5N0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMzBGNjM1MiwweDg5MTdDODBCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QjcwNDc1NTEsMHg1RDBGMUM2MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEIxMUZEM0I4LDB4MEIxMUZEM0MsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCQzk1MkFGRSwweEVBM0QxM0UxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUYzQUREQzYsMHg4MEFGM0FERSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEMyMTY4RUQwLDB4RjQ1OEJBNEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBRDYwMkI1OCwweDBBRDYwMkI2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4Qzc4OEY0MzksMHhCMzE2M0JGMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFCOEY2OUUyLDB4ODM1OUNEMTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDQ0VDQUMwOCwweEJGMDQ1NjVELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTlDODRBNDcsMHhBMDdGNTYzOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEQyNDIwNDg3LDB4MkREODUxNjAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBODBBODBBOCwweDBBODBBODBCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RDc4OTQ5OTIsMHgzQkMzNTg4QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE2NTVDNDM5LDB4MkQ3QjczQTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhEQ0MyQzRCNCwweDk4ODdEQUNDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTRBOUNGMUQsMHg5NjgzMzc1MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEUxRUVCRDNFLDB4NkQ2QTZCOUUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMzA2NUUzRiwweEFFN0NEMEUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RTcwRDc4NUMsMHgyRjlGNUJEQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEExNkIzMTJFLDB4QThGQzM3N0QsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFQzFGMzkyQywweDUxNzlGMjgzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUZEODA5RkQsMHg4MDlGRDgwQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEYxMjQ0MEQzLDB4RTM2MTMwRTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5RTRDQUQyMywweERENUYzQTIwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RjYxQ0NFOTIsMHgzNDY2MDBCQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlDQzhFMTYwLDB4QzNGQjE5QjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGQjA5MUZEMywweDgxNDU2MzBBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUI0QzZGOUUsMHhGMDNBM0NBQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEZGRTk3MDQyLDB4QkZBNEMyQUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5OUQ3MjJEQSwweEJERTU4RjA2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODI1RUZDRUQsMHg0OTM2OTMzMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk4NjhDODA5LDB4ODY4QzgwOTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NEMzN0E3QSwweEI5QTkwNUM5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTcwMTJFMDIsMHg1QzA0QjgwOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg3MjI0QzJFLDB4OEU2NDVGQjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NUEwMjU2OCwweDA5NUEwMjU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODk3QjhDQUMsMHg5RjdERTI5OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk0NDU4MDk0LDB4NDU4MDk0NDYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QkNGNTVERSwweEM0Q0QwNUZFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTJGMTEzODQsMHgwNDk3ODg5QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhFMURDMEZCLDB4ODlFMTI1RTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MUEyQjNDNCwweEQ1RTZGODA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTA2NkU2OEMsMHg5NTVCNkM5QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkwNUEzODYzLDB4M0UwNkM0M0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MkFBREU3NCwweEM3QkU1OUUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEYxNzc5RDksMHhGREMzQTIxOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk0RTlCRkY2LDB4MTU4NDU2NDMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4RERBNTIwMiwweDM3Njk0ODA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTcyM0ExQjcsMHgyMDEzNDIwMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhDQTI5QzA0LDB4NjUxNEUwMjMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5OTU4OTlDOCwweDkwRUI4OTkwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEI3MDM0NEEsMHgxMzlCQzc1QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlCODhCREFBLDB4M0EzREFFMkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QTQyRjg3MCwweDU2NjlEQjQ2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OURCNDIyNEYsMHhGRkUxMTU3QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg5MUFDNzNBLDB4RTk4MTlCNTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5RkRBREMyNiwweDhCN0ExMkRBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODdGNzgwODcsMHhGNzgwODdGOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEExRkNGRjE3LDB4Q0U3MzNCRDQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NkQ5MDU0NCwweDdBMzRBQ0M2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTQxQTlFOEYsMHg1NDQ2RkI5RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg1QkYzNzYxLDB4MkNFRTNDOUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNjMzQ0Q3RSwweDY3NzFDRDhCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODRBOUY5QzgsMHgwODRBOUY5RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE4NDg5RTYwLDB4MEI0MzVBNUUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4Mzk5MzA1MiwweDNGQkUzMzY4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUE1OTIzM0MsMHhDQ0E0QkQ0OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgyOENCRkJFLDB4QjlBMDIwQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBQzY1NkRBRSwweDZCQ0M0OTg1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODE4NDhEQTgsMHhGQUYwRDI3NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFFNkQ4RUUzLDB4NjBCQjI0NjgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MDgwODA4MCwweDgwODA4MDgxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjA3MTk3QTIsMHgzQzQ2QzY1NCwweDAwMDAwMDAwCisKKwlzZXQJCUFESkssTF9TQ1IxCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCUYsRlBfU0NSMQorCXNldAkJRkZSQUMsRis0CisKKwlzZXQJCUtMT0cyLEZQX1NDUjAKKworCXNldAkJU0FWRVUsRlBfU0NSMAorCisJZ2xvYmFsCQlzbG9nbgorIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKK3Nsb2duOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJbW92LmwJCSYweDAwMDAwMDAwLEFESksoJWE2KQorCitMT0dCR046CisjLS1GUENSIFNBVkVEIEFORCBDTEVBUkVELCBJTlBVVCBJUyAyXihBREpLKSpGUDAsIEZQMCBDT05UQUlOUworIy0tQSBGSU5JVEUsIE5PTi1aRVJPLCBOT1JNQUxJWkVEIE5VTUJFUi4KKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCisJbW92LmwJCSglYTApLFgoJWE2KQorCW1vdi5sCQk0KCVhMCksWCs0KCVhNikKKwltb3YubAkJOCglYTApLFgrOCglYTYpCisKKwljbXAubAkJJWQxLCYwCQkJIyBDSEVDSyBJRiBYIElTIE5FR0FUSVZFCisJYmx0LncJCUxPR05FRwkJCSMgTE9HIE9GIE5FR0FUSVZFIEFSR1VNRU5UIElTIElOVkFMSUQKKyMgWCBJUyBQT1NJVElWRSwgQ0hFQ0sgSUYgWCBJUyBORUFSIDEKKwljbXAubAkJJWQxLCYweDNmZmVmMDdkCQkjIElTIFggPCAxNS8xNj8KKwlibHQuYgkJTE9HTUFJTgkJCSMgWUVTCisJY21wLmwJCSVkMSwmMHgzZmZmODg0MQkJIyBJUyBYID4gMTcvMTY/CisJYmxlLncJCUxPR05FQVIxCQkjIE5PCisKK0xPR01BSU46CisjLS1USElTIFNIT1VMRCBCRSBUSEUgVVNVQUwgQ0FTRSwgWCBOT1QgVkVSWSBDTE9TRSBUTyAxCisKKyMtLVggPSAyXihLKSAqIFksIDEgPD0gWSA8IDIuIFRIVVMsIFkgPSAxLlhYWFhYWFhYLi4uLlhYIElOIEJJTkFSWS4KKyMtLVdFIERFRklORSBGID0gMS5YWFhYWFgxLCBJLkUuIEZJUlNUIDcgQklUUyBPRiBZIEFORCBBVFRBQ0ggQSAxLgorIy0tVEhFIElERUEgSVMgVEhBVCBMT0coWCkgPSBLKkxPRzIgKyBMT0coWSkKKyMtLQkJCSA9IEsqTE9HMiArIExPRyhGKSArIExPRygxICsgKFktRikvRikuCisjLS1OT1RFIFRIQVQgVSA9IChZLUYpL0YgSVMgVkVSWSBTTUFMTCBBTkQgVEhVUyBBUFBST1hJTUFUSU5HCisjLS1MT0coMStVKSBDQU4gQkUgVkVSWSBFRkZJQ0lFTlQuCisjLS1BTFNPIE5PVEUgVEhBVCBUSEUgVkFMVUUgMS9GIElTIFNUT1JFRCBJTiBBIFRBQkxFIFNPIFRIQVQgTk8KKyMtLURJVklTSU9OIElTIE5FRURFRCBUTyBDQUxDVUxBVEUgKFktRikvRi4KKworIy0tR0VUIEssIFksIEYsIEFORCBBRERSRVNTIE9GIDEvRi4KKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY4LCVkMQkJCSMgU0hJRlRFRCAxNiBCSVRTLCBCSUFTRUQgRVhQTy4gT0YgWAorCXN1Yi5sCQkmMHgzRkZGLCVkMQkJIyBUSElTIElTIEsKKwlhZGQubAkJQURKSyglYTYpLCVkMQkJIyBBREpVU1QgSywgT1JJR0lOQUwgSU5QVVQgTUFZIEJFICBERU5PUk0uCisJbGVhCQlMT0dUQkwoJXBjKSwlYTAJCSMgQkFTRSBBRERSRVNTIE9GIDEvRiBBTkQgTE9HKEYpCisJZm1vdi5sCQklZDEsJWZwMQkJIyBDT05WRVJUIEsgVE8gRkxPQVRJTkctUE9JTlQgRk9STUFUCisKKyMtLVdISUxFIFRIRSBDT05WRVJTSU9OIElTIEdPSU5HIE9OLCBXRSBHRVQgRiBBTkQgQUREUkVTUyBPRiAxL0YKKwltb3YubAkJJjB4M0ZGRjAwMDAsWCglYTYpCSMgWCBJUyBOT1cgWSwgSS5FLiAyXigtSykqWAorCW1vdi5sCQlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmQubAkJJjB4RkUwMDAwMDAsRkZSQUMoJWE2KQkjIEZJUlNUIDcgQklUUyBPRiBZCisJb3IubAkJJjB4MDEwMDAwMDAsRkZSQUMoJWE2KQkjIEdFVCBGOiBBVFRBQ0ggQSAxIEFUIFRIRSBFSUdIVEggQklUCisJbW92LmwJCUZGUkFDKCVhNiksJWQxCSMgUkVBRFkgVE8gR0VUIEFERFJFU1MgT0YgMS9GCisJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY0LCVkMQkJCSMgU0hJRlRFRCAyMCwgRDAgSVMgVEhFIERJU1BMQUNFTUVOVAorCWFkZC5sCQklZDEsJWEwCQkJIyBBMCBJUyBUSEUgQUREUkVTUyBGT1IgMS9GCisKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQorCWNsci5sCQlGKzgoJWE2KQorCWZzdWIueAkJRiglYTYpLCVmcDAJCSMgWS1GCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgU0FWRSBGUDItMyBXSElMRSBGUDAgSVMgTk9UIFJFQURZCisjLS1TVU1NQVJZOiBGUDAgSVMgWS1GLCBBMCBJUyBBRERSRVNTIE9GIDEvRiwgRlAxIElTIEsKKyMtLVJFR0lTVEVSUyBTQVZFRDogRlBDUiwgRlAxLCBGUDIKKworTFAxQ09OVDE6CisjLS1BTiBSRS1FTlRSWSBQT0lOVCBGT1IgTE9HTlAxCisJZm11bC54CQkoJWEwKSwlZnAwCQkjIEZQMCBJUyBVID0gKFktRikvRgorCWZtdWwueAkJTE9HT0YyKCVwYyksJWZwMQkjIEdFVCBLKkxPRzIgV0hJTEUgRlAwIElTIE5PVCBSRUFEWQorCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC54CQklZnAyLCVmcDIJCSMgRlAyIElTIFY9VSpVCisJZm1vdi54CQklZnAxLEtMT0cyKCVhNikJCSMgUFVUIEsqTE9HMiBJTiBNRU1FT1JZLCBGUkVFIEZQMQorCisjLS1MT0coMStVKSBJUyBBUFBST1hJTUFURUQgQlkKKyMtLVUgKyBWKihBMStVKihBMitVKihBMytVKihBNCtVKihBNStVKkE2KSkpKSkgV0hJQ0ggSVMKKyMtLVtVICsgViooQTErViooQTMrVipBNSkpXSAgKyAgW1UqViooQTIrViooQTQrVipBNikpXQorCisJZm1vdi54CQklZnAyLCVmcDMKKwlmbW92LngJCSVmcDIsJWZwMQorCisJZm11bC5kCQlMT0dBNiglcGMpLCVmcDEJCSMgVipBNgorCWZtdWwuZAkJTE9HQTUoJXBjKSwlZnAyCQkjIFYqQTUKKworCWZhZGQuZAkJTE9HQTQoJXBjKSwlZnAxCQkjIEE0K1YqQTYKKwlmYWRkLmQJCUxPR0EzKCVwYyksJWZwMgkJIyBBMytWKkE1CisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBWKihBNCtWKkE2KQorCWZtdWwueAkJJWZwMywlZnAyCQkjIFYqKEEzK1YqQTUpCisKKwlmYWRkLmQJCUxPR0EyKCVwYyksJWZwMQkJIyBBMitWKihBNCtWKkE2KQorCWZhZGQuZAkJTE9HQTEoJXBjKSwlZnAyCQkjIEExK1YqKEEzK1YqQTUpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBWKihBMitWKihBNCtWKkE2KSkKKwlhZGQubAkJJjE2LCVhMAkJCSMgQUREUkVTUyBPRiBMT0coRikKKwlmbXVsLngJCSVmcDMsJWZwMgkJIyBWKihBMStWKihBMytWKkE1KSkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFUqViooQTIrViooQTQrVipBNikpCisJZmFkZC54CQklZnAyLCVmcDAJCSMgVStWKihBMStWKihBMytWKkE1KSkKKworCWZhZGQueAkJKCVhMCksJWZwMQkJIyBMT0coRikrVSpWKihBMitWKihBNCtWKkE2KSkKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgUkVTVE9SRSBGUDItMworCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBMT0coRikgKyBMT0coMStVKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCUtMT0cyKCVhNiksJWZwMAkJIyBGSU5BTCBBREQKKwlicmEJCXRfaW54MgorCisKK0xPR05FQVIxOgorCisjIGlmIHRoZSBpbnB1dCBpcyBleGFjdGx5IGVxdWFsIHRvIG9uZSwgdGhlbiBleGl0IHRocm91Z2ggbGRfcHplcm8uCisjIGlmIHRoZXNlIDIgbGluZXMgd2VyZW4ndCBoZXJlLCB0aGUgY29ycmVjdCBhbnN3ZXIgd291bGQgYmUgcmV0dXJuZWQKKyMgYnV0IHRoZSBJTkVYMiBiaXQgd291bGQgYmUgc2V0LgorCWZjbXAuYgkJJWZwMCwmMHgxCQkjIGlzIGl0IGVxdWFsIHRvIG9uZT8KKwlmYmVxLmwJCWxkX3B6ZXJvCQkjIHllcworCisjLS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMS4gRlAwIENPTlRBSU5TIFRIRSBJTlBVVC4KKwlmbW92LngJCSVmcDAsJWZwMQorCWZzdWIucwkJb25lKCVwYyksJWZwMQkJIyBGUDEgSVMgWC0xCisJZmFkZC5zCQlvbmUoJXBjKSwlZnAwCQkjIEZQMCBJUyBYKzEKKwlmYWRkLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgMihYLTEpCisjLS1MT0coWCkgPSBMT0coMStVLzIpLUxPRygxLVUvMikgV0hJQ0ggSVMgQU4gT0REIFBPTFlOT01JQUwKKyMtLUlOIFUsIFUgPSAyKFgtMSkvKFgrMSkgPSBGUDEvRlAwCisKK0xQMUNPTlQyOgorIy0tVEhJUyBJUyBBTiBSRS1FTlRSWSBQT0lOVCBGT1IgTE9HTlAxCisJZmRpdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIFUKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMi0zCisjLS1SRUdJU1RFUlMgU0FWRUQgQVJFIE5PVyBGUENSLEZQMSxGUDIsRlAzCisjLS1MRVQgVj1VKlUsIFc9VipWLCBDQUxDVUxBVEUKKyMtLVUgKyBVKlYqKEIxICsgViooQjIgKyBWKihCMyArIFYqKEI0ICsgVipCNSkpKSkgQlkKKyMtLVUgKyBVKlYqKCAgW0IxICsgVyooQjMgKyBXKkI1KV0gICsgIFtWKihCMiArIFcqQjQpXSAgKQorCWZtb3YueAkJJWZwMSwlZnAwCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFYKKwlmbW92LngJCSVmcDEsU0FWRVUoJWE2KQkJIyBTVE9SRSBVIElOIE1FTU9SWSwgRlJFRSBGUDEKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBXCisKKwlmbW92LmQJCUxPR0I1KCVwYyksJWZwMworCWZtb3YuZAkJTE9HQjQoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBXKkI1CisJZm11bC54CQklZnAxLCVmcDIJCSMgVypCNAorCisJZmFkZC5kCQlMT0dCMyglcGMpLCVmcDMJCSMgQjMrVypCNQorCWZhZGQuZAkJTE9HQjIoJXBjKSwlZnAyCQkjIEIyK1cqQjQKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFcqKEIzK1cqQjUpLCBGUDMgUkVMRUFTRUQKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFYqKEIyK1cqQjQpCisKKwlmYWRkLmQJCUxPR0IxKCVwYyksJWZwMQkJIyBCMStXKihCMytXKkI1KQorCWZtdWwueAkJU0FWRVUoJWE2KSwlZnAwCQkjIEZQMCBJUyBVKlYKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIEIxK1cqKEIzK1cqQjUpICsgViooQjIrVypCNCksIEZQMiBSRUxFQVNFRAorCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBGUDItMyBSRVNUT1JFRAorCisJZm11bC54CQklZnAxLCVmcDAJCSMgVSpWKiggW0IxK1cqKEIzK1cqQjUpXSArIFtWKihCMitXKkI0KV0gKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCVNBVkVVKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKKyMtLVJFR0lTVEVSUyBTQVZFRCBGUENSLiBMT0coLVZFKSBJUyBJTlZBTElECitMT0dORUc6CisJYnJhCQl0X29wZXJyCisKKwlnbG9iYWwJCXNsb2duZAorc2xvZ25kOgorIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCisKKwltb3YubAkJJi0xMDAsQURKSyglYTYpCQkjIElOUFVUID0gMl4oQURKSykgKiBGUDAKKworIy0tLS1ub3JtYWxpemUgdGhlIGlucHV0IHZhbHVlIGJ5IGxlZnQgc2hpZnRpbmcgayBiaXRzIChrIHRvIGJlIGRldGVybWluZWQKKyMtLS0tYmVsb3cpLCBhZGp1c3RpbmcgZXhwb25lbnQgYW5kIHN0b3JpbmcgLWsgdG8gIEFESksKKyMtLS0tdGhlIHZhbHVlIFRXT1RPMTAwIGlzIG5vIGxvbmdlciBuZWVkZWQuCisjLS0tLU5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGUgZGVub3JtYWxpemVkIGlucHV0IGlzIE5PTi1aRVJPLgorCisJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIHNvbWUgcmVnaXN0ZXJzICB7ZDItZDd9CisJbW92LmwJCSglYTApLCVkMwkJIyBEMyBpcyBleHBvbmVudCBvZiBzbWFsbGVzdCBub3JtLiAjCisJbW92LmwJCTQoJWEwKSwlZDQKKwltb3YubAkJOCglYTApLCVkNQkJIyAoRDQsRDUpIGlzIChIaV9YLExvX1gpCisJY2xyLmwJCSVkMgkJCSMgRDIgdXNlZCBmb3IgaG9sZGluZyBLCisKKwl0c3QubAkJJWQ0CisJYm5lLmIJCUhpX25vdDAKKworSGlfMDoKKwltb3YubAkJJWQ1LCVkNAorCWNsci5sCQklZDUKKwltb3YubAkJJjMyLCVkMgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDQKKwlhZGQubAkJJWQ2LCVkMgkJCSMgKEQzLEQ0LEQ1KSBpcyBub3JtYWxpemVkCisKKwltb3YubAkJJWQzLFgoJWE2KQorCW1vdi5sCQklZDQsWEZSQUMoJWE2KQorCW1vdi5sCQklZDUsWEZSQUMrNCglYTYpCisJbmVnLmwJCSVkMgorCW1vdi5sCQklZDIsQURKSyglYTYpCisJZm1vdi54CQlYKCVhNiksJWZwMAorCW1vdm0ubAkJKCVzcCkrLCYweGZjCQkjIHJlc3RvcmUgcmVnaXN0ZXJzIHtkMi1kN30KKwlsZWEJCVgoJWE2KSwlYTAKKwlicmEudwkJTE9HQkdOCQkJIyBiZWdpbiByZWd1bGFyIGxvZyhYKQorCitIaV9ub3QwOgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CQkjIGZpbmQgZmlyc3QgMQorCW1vdi5sCQklZDYsJWQyCQkJIyBnZXQgaworCWxzbC5sCQklZDYsJWQ0CisJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQorCWxzbC5sCQklZDYsJWQ1CisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQ0CQkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKworCW1vdi5sCQklZDMsWCglYTYpCisJbW92LmwJCSVkNCxYRlJBQyglYTYpCisJbW92LmwJCSVkNSxYRlJBQys0KCVhNikKKwluZWcubAkJJWQyCisJbW92LmwJCSVkMixBREpLKCVhNikKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJbW92bS5sCQkoJXNwKSssJjB4ZmMJCSMgcmVzdG9yZSByZWdpc3RlcnMge2QyLWQ3fQorCWxlYQkJWCglYTYpLCVhMAorCWJyYS53CQlMT0dCR04JCQkjIGJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKwlnbG9iYWwJCXNsb2ducDEKKyMtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKK3Nsb2ducDE6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwlmYWJzLngJCSVmcDAJCQkjIHRlc3QgbWFnbml0dWRlCisJZmNtcC54CQklZnAwLExUSE9MRCglcGMpCSMgY29tcGFyZSB3aXRoIG1pbiB0aHJlc2hvbGQKKwlmYmd0LncJCUxQMVJFQUwJCQkjIGlmIGdyZWF0ZXIsIGNvbnRpbnVlCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIHJldHVybiBzaWduZWQgYXJndW1lbnQKKwlicmEJCXRfY2F0Y2gKKworTFAxUkVBTDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCW1vdi5sCQkmMHgwMDAwMDAwMCxBREpLKCVhNikKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBGUDEgSVMgSU5QVVQgWgorCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBYIDo9IFJPVU5EKDErWikKKwlmbW92LngJCSVmcDAsWCglYTYpCisJbW92LncJCVhGUkFDKCVhNiksWERDQVJFKCVhNikKKwltb3YubAkJWCglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwlibGUudwkJTFAxTkVHMAkJCSMgTE9HIE9GIFpFUk8gT1IgLVZFCisJY21wLmwJCSVkMSwmMHgzZmZlODAwMAkJIyBJUyBCT1VORFMgWzEvMiwzLzJdPworCWJsdC53CQlMT0dNQUlOCisJY21wLmwJCSVkMSwmMHgzZmZmYzAwMAorCWJndC53CQlMT0dNQUlOCisjLS1JRiAxK1ogPiAzLzIgT1IgMStaIDwgMS8yLCBUSEVOIFgsIFdISUNIIElTIFJPVU5ESU5HIDErWiwKKyMtLUNPTlRBSU5TIEFUIExFQVNUIDYzIEJJVFMgT0YgSU5GT1JNQVRJT04gT0YgWi4gSU4gVEhBVCBDQVNFLAorIy0tU0lNUExZIElOVk9LRSBMT0coWCkgRk9SIExPRygxK1opLgorCitMUDFORUFSMToKKyMtLU5FWFQgU0VFIElGIEVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpCisJY21wLmwJCSVkMSwmMHgzZmZlZjA3ZAorCWJsdC53CQlMUDFDQVJFCisJY21wLmwJCSVkMSwmMHgzZmZmODg0MQorCWJndC53CQlMUDFDQVJFCisKK0xQMU9ORTE2OgorIy0tRVhQKC0xLzE2KSA8IFggPCBFWFAoMS8xNikuIExPRygxK1opID0gTE9HKDErVS8yKSAtIExPRygxLVUvMikKKyMtLVdIRVJFIFUgPSAyWi8oMitaKSA9IDJaLygxK1gpLgorCWZhZGQueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyAyWgorCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBGUDAgSVMgMStYCisjLS1VID0gRlAxL0ZQMAorCWJyYS53CQlMUDFDT05UMgorCitMUDFDQVJFOgorIy0tSEVSRSBXRSBVU0UgVEhFIFVTVUFMIFRBQkxFIERSSVZFTiBBUFBST0FDSC4gQ0FSRSBIQVMgVE8gQkUKKyMtLVRBS0VOIEJFQ0FVU0UgMStaIENBTiBIQVZFIDY3IEJJVFMgT0YgSU5GT1JNQVRJT04gQU5EIFdFIE1VU1QKKyMtLVBSRVNFUlZFIEFMTCBUSEUgSU5GT1JNQVRJT04uIEJFQ0FVU0UgMStaIElTIElOIFsxLzIsMy8yXSwKKyMtLVRIRVJFIEFSRSBPTkxZIFRXTyBDQVNFUy4KKyMtLUNBU0UgMTogMStaIDwgMSwgVEhFTiBLID0gLTEgQU5EIFktRiA9ICgyLUYpICsgMloKKyMtLUNBU0UgMjogMStaID4gMSwgVEhFTiBLID0gMCAgQU5EIFktRiA9ICgxLUYpICsgWgorIy0tT04gUkVUVVJOSU5HIFRPIExQMUNPTlQxLCBXRSBNVVNUIEhBVkUgSyBJTiBGUDEsIEFERFJFU1MgT0YKKyMtLSgxL0YpIElOIEEwLCBZLUYgSU4gRlAwLCBBTkQgRlAyIFNBVkVELgorCisJbW92LmwJCVhGUkFDKCVhNiksRkZSQUMoJWE2KQorCWFuZC5sCQkmMHhGRTAwMDAwMCxGRlJBQyglYTYpCisJb3IubAkJJjB4MDEwMDAwMDAsRkZSQUMoJWE2KQkjIEYgT0JUQUlORUQKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCQkjIFNFRSBJRiAxK1ogPiAxCisJYmdlLmIJCUtJU1pFUk8KKworS0lTTkVHMToKKwlmbW92LnMJCVRXTyglcGMpLCVmcDAKKwltb3YubAkJJjB4M2ZmZjAwMDAsRiglYTYpCisJY2xyLmwJCUYrOCglYTYpCisJZnN1Yi54CQlGKCVhNiksJWZwMAkJIyAyLUYKKwltb3YubAkJRkZSQUMoJWE2KSwlZDEKKwlhbmQubAkJJjB4N0UwMDAwMDAsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjQsJWQxCQkJIyBEMCBDT05UQUlOUyBESVNQTEFDRU1FTlQgRk9SIDEvRgorCWZhZGQueAkJJWZwMSwlZnAxCQkjIEdFVCAyWgorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIFNBVkUgRlAyICB7JWZwMi8lZnAzfQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBZLUYgPSAoMi1GKSsyWgorCWxlYQkJTE9HVEJMKCVwYyksJWEwCQkjIEEwIElTIEFERFJFU1MgT0YgMS9GCisJYWRkLmwJCSVkMSwlYTAKKwlmbW92LnMJCW5lZ29uZSglcGMpLCVmcDEJIyBGUDEgSVMgSyA9IC0xCisJYnJhLncJCUxQMUNPTlQxCisKK0tJU1pFUk86CisJZm1vdi5zCQlvbmUoJXBjKSwlZnAwCisJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQorCWNsci5sCQlGKzgoJWE2KQorCWZzdWIueAkJRiglYTYpLCVmcDAJCSMgMS1GCisJbW92LmwJCUZGUkFDKCVhNiksJWQxCisJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY0LCVkMQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBZLUYKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBGUDIgU0FWRUQgeyVmcDIvJWZwM30KKwlsZWEJCUxPR1RCTCglcGMpLCVhMAorCWFkZC5sCQklZDEsJWEwCQkJIyBBMCBJUyBBRERSRVNTIE9GIDEvRgorCWZtb3YucwkJemVybyglcGMpLCVmcDEJCSMgRlAxIElTIEsgPSAwCisJYnJhLncJCUxQMUNPTlQxCisKK0xQMU5FRzA6CisjLS1GUENSIFNBVkVELiBEMCBJUyBYIElOIENPTVBBQ1QgRk9STS4KKwljbXAubAkJJWQxLCYwCisJYmx0LmIJCUxQMU5FRworTFAxWkVSTzoKKwlmbW92LnMJCW5lZ29uZSglcGMpLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJYnJhCQl0X2R6CisKK0xQMU5FRzoKKwlmbW92LnMJCXplcm8oJXBjKSwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWJyYQkJdF9vcGVycgorCisJZ2xvYmFsCQlzbG9nbnAxZAorIy0tRU5UUlkgUE9JTlQgRk9SIExPRygxK1opIEZPUiBERU5PUk1BTElaRUQgSU5QVVQKKyMgU2ltcGx5IHJldHVybiB0aGUgZGVub3JtCitzbG9nbnAxZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNhdGFuaCgpOiAgY29tcHV0ZXMgdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbm9ybSBpbnB1dAkjCisjIHNhdGFuaGQoKTogY29tcHV0ZXMgdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgZGVub3JtIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGFyY3RhbmgoWCkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlBVEFOSAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXRhbmgoWCkgYnkJCQkJIworIwkJc2duIDo9IHNpZ24oWCkJCQkJCQkjCisjCQl5IDo9IHxYfAkJCQkJCSMKKyMJCXogOj0gMnkvKDEteSkJCQkJCQkjCisjCQlhdGFuaChYKSA6PSBzZ24gKiAoMS8yKSAqIGxvZ3AxKHopCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAofFh8ID0gMSkgR2VuZXJhdGUgaW5maW5pdHkgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaWduIGFuZAkjCisjCQlkaXZpZGUtYnktemVybyBieQkJCQkJIworIwkJc2duIDo9IHNpZ24oWCkJCQkJCQkjCisjCQlhdGFuKFgpIDo9IHNnbiAvICgrMCkuCQkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzYXRhbmgKK3NhdGFuaDoKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJnZS5iCQlBVEFOSEJJRworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCisjLS1ZID0gfFh8LCBaID0gMlkvKDEtWSksIEFUQU5IKFgpID0gU0lHTihYKSAqICgxLzIpICogTE9HMVAoWikuCisKKwlmYWJzLngJCSglYTApLCVmcDAJCSMgWSA9IHxYfAorCWZtb3YueAkJJWZwMCwlZnAxCisJZm5lZy54CQklZnAxCQkJIyAtWQorCWZhZGQueAkJJWZwMCwlZnAwCQkjIDJZCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMS1ZCisJZmRpdi54CQklZnAxLCVmcDAJCSMgMlkvKDEtWSkKKwltb3YubAkJKCVhMCksJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW9yLmwJCSYweDNGMDAwMDAwLCVkMQkJIyBTSUdOKFgpKkhBTEYKKwltb3YubAkJJWQxLC0oJXNwKQorCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlCisJY2xyLmwJCSVkMAkJCSMgcGFzcyBleHQgcHJlYyxSTgorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFogb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBaCisJYnNyCQlzbG9nbnAxCQkJIyBMT0cxUChaKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBaIGZyb20gc3RhY2sKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIGZldGNoIG9sZCBwcmVjLG1vZGUKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBsb2FkIGl0CisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC5zCQkoJXNwKSssJWZwMAorCWJyYQkJdF9jYXRjaAorCitBVEFOSEJJRzoKKwlmYWJzLngJCSglYTApLCVmcDAJCSMgfFh8CisJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCisJZmJndAkJdF9vcGVycgorCWJyYQkJdF9kegorCisJZ2xvYmFsCQlzYXRhbmhkCisjLS1BVEFOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzYXRhbmhkOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2xvZzEwKCk6ICBjb21wdXRlcyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZzEwZCgpOiBjb21wdXRlcyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nMigpOiAgIGNvbXB1dGVzIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2cyZCgpOiAgY29tcHV0ZXMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gbG9nXzEwKFgpIG9yIGxvZ18yKFgpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAxLjcgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAzIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNsb2cxMGQ6CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4JSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICBDb21wdXRlIGxvZ18xMChYKSA9IGxvZyhYKSAqICgxL2xvZygxMCkpLgkJIworIyAgICAgICAgICAgIDIuMSBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICAyLjIgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgc2xvZzEwOgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLiBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBDYWxsIHNMb2dOIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDEwKSkuCQkjCisjICAgICAgICAgICAgMi4xICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICAyLjIgIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMTAuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNMb2cyZDoJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMikpLgkJIworIyAgICAgICAgICAgIDIuMSAgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCisjICAgICAgICAgICAgMi4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDIuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNMb2cyOgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLiBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBJZiBYIGlzIG5vdCBhbiBpbnRlZ2VyIHBvd2VyIG9mIHR3bywgaS5lLiwgWCAhPSAyXmssCSMKKyMgICAgICAgICAgICAgICBnbyB0byBTdGVwIDMuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgIFJldHVybiBrLgkJCQkJCSMKKyMgICAgICAgICAgICAyLjEgIEdldCBpbnRlZ2VyIGssIFggPSAyXmsuCQkJCSMKKyMgICAgICAgICAgICAyLjIgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUi4JCQkJIworIyAgICAgICAgICAgIDIuMyAgUmV0dXJuIGFucyA6PSBjb252ZXJ0LXRvLWRvdWJsZS1leHRlbmRlZChrKS4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMy4gQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNC4gICBDb21wdXRlIGxvZ18yKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4JCSMKKyMgICAgICAgICAgICA0LjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIworIyAgICAgICAgICAgIDQuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitJTlZfTDEwOgorCWxvbmcJCTB4M0ZGRDAwMDAsMHhERTVCRDhBOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKKworSU5WX0wyOgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEFBM0IyOSwweDVDMTdGMEJDLDB4MDAwMDAwMDAKKworCWdsb2JhbAkJc2xvZzEwCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMTAoWCksIFggaXMgbm9ybWFsaXplZAorc2xvZzEwOgorCWZtb3YuYgkJJjB4MSwlZnAwCisJZmNtcC54CQklZnAwLCglYTApCQkjIGlmIG9wZXJhbmQgPT0gMSwKKwlmYmVxLmwJCWxkX3B6ZXJvCQkjIHJldHVybiBhbiBFWEFDVCB6ZXJvCisKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duCQkJIyBsb2coWCksIFggbm9ybWFsLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDEwKCVwYyksJWZwMAorCWJyYQkJdF9pbngyCisKKwlnbG9iYWwJCXNsb2cxMGQKKyMtLWVudHJ5IHBvaW50IGZvciBMb2cxMChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKK3Nsb2cxMGQ6CisJbW92LmwJCSglYTApLCVkMQorCWJsdC53CQlpbnZhbGlkCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJYnNyCQlzbG9nbmQJCQkjIGxvZyhYKSwgWCBkZW5vcm0uCisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbXVsLngJCUlOVl9MMTAoJXBjKSwlZnAwCisJYnJhCQl0X21pbngyCisKKwlnbG9iYWwJCXNsb2cyCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMihYKSwgWCBpcyBub3JtYWxpemVkCitzbG9nMjoKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKworCW1vdi5sCQk4KCVhMCksJWQxCisJYm5lLmIJCWNvbnRpbnVlCQkjIFggaXMgbm90IDJeaworCisJbW92LmwJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJYm5lLmIJCWNvbnRpbnVlCisKKyMtLVggPSAyXmsuCisJbW92LncJCSglYTApLCVkMQorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDEKKwlzdWIubAkJJjB4M0ZGRiwlZDEKKwliZXEubAkJbGRfcHplcm8KKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtb3YubAkJJWQxLCVmcDAKKwlicmEJCXRfaW54MgorCitjb250aW51ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duCQkJIyBsb2coWCksIFggbm9ybWFsLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDIoJXBjKSwlZnAwCisJYnJhCQl0X2lueDIKKworaW52YWxpZDoKKwlicmEJCXRfb3BlcnIKKworCWdsb2JhbAkJc2xvZzJkCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMihYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKK3Nsb2cyZDoKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duZAkJCSMgbG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtdWwueAkJSU5WX0wyKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0d290b3goKTogIGNvbXB1dGVzIDIqKlggZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3R3b3RveGQoKTogY29tcHV0ZXMgMioqWCBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0ZW50b3goKTogIGNvbXB1dGVzIDEwKipYIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0ZW50b3hkKCk6IGNvbXB1dGVzIDEwKipYIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IDIqKlggb3IgMTAqKlgJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwl0d290b3gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTY0ODAsIGdvIHRvIEV4cEJpZy4JCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBEZWNvbXBvc2UgWCBhcyBYID0gTi82NCArIHIgd2hlcmUgfHJ8IDw9IDEvMTI4LiBGdXJ0aGVybW9yZQkjCisjCQlkZWNvbXBvc2UgTiBhcwkJCQkJCSMKKyMJCSBOID0gNjQoTSArIE0nKSArIGosICBqID0gMCwxLDIsLi4uLDYzLgkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIE92ZXJ3cml0ZSByIDo9IHIgKiBsb2cyLiBUaGVuCQkJCSMKKyMJCTIqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgkJIworIwkJR28gdG8gZXhwciB0byBjb21wdXRlIHRoYXQgZXhwcmVzc2lvbi4JCQkjCisjCQkJCQkJCQkJIworIwl0ZW50b3gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTY0ODAqbG9nXzEwKDIpIChiYXNlIDEwIGxvZyBvZiAyKSwgZ28gdG8gRXhwQmlnLgkjCisjCQkJCQkJCQkJIworIwkyLiBJZiB8WHwgPCAyKiooLTcwKSwgZ28gdG8gRXhwU20uCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIFNldCB5IDo9IFgqbG9nXzIoMTApKjY0IChiYXNlIDIgbG9nIG9mIDEwKS4gU2V0CQkjCisjCQlOIDo9IHJvdW5kLXRvLWludCh5KS4gRGVjb21wb3NlIE4gYXMJCQkjCisjCQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4JCQkjCisjCQkJCQkJCQkJIworIwk0LiBEZWZpbmUgciBhcwkJCQkJCQkjCisjCQlyIDo9ICgoWCAtIE4qTDEpLU4qTDIpICogTDEwCQkJCSMKKyMJCXdoZXJlIEwxLCBMMiBhcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhcnRzIG9mCSMKKyMJCWxvZ18xMCgyKS82NCBhbmQgTDEwIGlzIHRoZSBuYXR1cmFsIGxvZyBvZiAxMC4gVGhlbgkjCisjCQkxMCoqWCA9IDIqKihNJykgKiAyKiooTSkgKiAyKiooai82NCkgKiBleHAocikuCQkjCisjCQlHbyB0byBleHByIHRvIGNvbXB1dGUgdGhhdCBleHByZXNzaW9uLgkJCSMKKyMJCQkJCQkJCQkjCisjCWV4cHIJCQkJCQkJCSMKKyMJMS4gRmV0Y2ggMioqKGovNjQpIGZyb20gdGFibGUgYXMgRmFjdDEgYW5kIEZhY3QyLgkJIworIwkJCQkJCQkJCSMKKyMJMi4gT3ZlcndyaXRlIEZhY3QxIGFuZCBGYWN0MiBieQkJCQkJIworIwkJRmFjdDEgOj0gMioqKE0pICogRmFjdDEJCQkJCSMKKyMJCUZhY3QyIDo9IDIqKihNKSAqIEZhY3QyCQkJCQkjCisjCQlUaHVzIEZhY3QxICsgRmFjdDIgPSAyKiooTSkgKiAyKiooai82NCkuCQkjCisjCQkJCQkJCQkJIworIwkzLiBDYWxjdWxhdGUgUCB3aGVyZSAxICsgUCBhcHByb3hpbWF0ZXMgZXhwKHIpOgkJCSMKKyMJCVAgPSByICsgcipyKihBMStyKihBMisuLi4rcipBNSkpLgkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIExldCBBZGpGYWN0IDo9IDIqKihNJykuIFJldHVybgkJCQkjCisjCQlBZGpGYWN0ICogKCBGYWN0MSArICgoRmFjdDEqUCkgKyBGYWN0MikgKS4JCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUV4cEJpZwkJCQkJCQkJIworIwkxLiBHZW5lcmF0ZSBvdmVyZmxvdyBieSBIdWdlICogSHVnZSBpZiBYID4gMDsgb3RoZXJ3aXNlLAkjCisjCSAgICAgICAgZ2VuZXJhdGUgdW5kZXJmbG93IGJ5IFRpbnkgKiBUaW55LgkJCSMKKyMJCQkJCQkJCQkjCisjCUV4cFNtCQkJCQkJCQkjCisjCTEuIFJldHVybiAxICsgWC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMMlRFTjY0OgorCWxvbmcJCTB4NDA2QTkzNEYsMHgwOTc5QTM3MQkjIDY0TE9HMTAvTE9HMgorTDEwVFdPMToKKwlsb25nCQkweDNGNzM0NDEzLDB4NTA5RjgwMDAJIyBMT0cyLzY0TE9HMTAKKworTDEwVFdPMjoKKwlsb25nCQkweEJGQ0QwMDAwLDB4QzAyMTlEQzEsMHhEQTk5NEZEMiwweDAwMDAwMDAwCisKK0xPRzEwOglsb25nCQkweDQwMDAwMDAwLDB4OTM1RDhEREQsMHhBQUE4QUMxNywweDAwMDAwMDAwCisKK0xPRzI6CWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTcyMTdGNywweEQxQ0Y3OUFDLDB4MDAwMDAwMDAKKworRVhQQTU6CWxvbmcJCTB4M0Y1NkMxNkQsMHg2RjdCRDBCMgorRVhQQTQ6CWxvbmcJCTB4M0Y4MTExMTIsMHgzMDJDNzEyQworRVhQQTM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NENDMQorRVhQQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NEE1NAorRVhQQTE6CWxvbmcJCTB4M0ZFMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworVEVYUFRCTDoKKwlsb25nCQkweDNGRkYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDNGNzM4MDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgxNjREMUYzLDB4QkMwMzA3NzMsMHgzRkJFRjdDQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ3LDB4M0ZCREY4QTkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODQzQTI4QzMsMHhBQ0RFNDA0NiwweDNGQkNEN0M5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg1QUFDMzY3LDB4Q0M0ODdCMTUsMHhCRkJERThEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4M0ZCREU4NUMKKwlsb25nCQkweDNGRkYwMDAwLDB4ODg5ODBFODAsMHg5MkRBODUyNywweDNGQkVCQkYxCisJbG9uZwkJMHgzRkZGMDAwMCwweDhBMTRENTc1LDB4NDk2RUZEOUEsMHgzRkJCODBDQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU3LDB4QkZCQTgzNzMKKwlsb25nCQkweDNGRkYwMDAwLDB4OEQxQURGNUIsMHg3RTVCQTlFNiwweEJGQkU5NjcwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhFQTQzOThCLDB4NDVDRDUzQzAsMHgzRkJEQjcwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4M0ZCRUVFQjAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTFDM0QzNzMsMHhBQjExQzMzNiwweDNGQkJGRDZECisJbG9uZwkJMHgzRkZGMDAwMCwweDkzNUEyQjJGLDB4MTNFNkU5MkMsMHhCRkJEQjMxOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYxLDB4M0ZCREJBMkIKKwlsb25nCQkweDNGRkYwMDAwLDB4OTY5NDJEMzcsMHgyMDE4NUEwMCwweDNGQkU5MUQ1CisJbG9uZwkJMHgzRkZGMDAwMCwweDk4MzdGMDUxLDB4OERCOEE5NkYsMHgzRkJFOEQ1QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY1LDB4QkZCQ0RFN0IKKwlsb25nCQkweDNGRkYwMDAwLDB4OUI4RDM5QjksMHhENTRFNTUzOSwweEJGQkVCQUFGCisJbG9uZwkJMHgzRkZGMDAwMCwweDlEM0VEOUE3LDB4MkNGRkI3NTEsMHhCRkJEODZEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFFLDB4QkZCRUJFREQKKwlsb25nCQkweDNGRkYwMDAwLDB4QTBCMDUxMEYsMHhCOTcxNEZDMiwweDNGQkNDOTZFCisJbG9uZwkJMHgzRkZGMDAwMCwweEEyNzA0MzAzLDB4MEM0OTY4MTksMHhCRkJFQzkwQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MDlFLDB4M0ZCQkQxREIKKwlsb25nCQkweDNGRkYwMDAwLDB4QTVGRUQ2QTksMHhCMTUxMzhFQSwweDNGQkNFNUVCCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3Q0Q5M0I0LDB4RTk2NTM1NkEsMHhCRkJFQzI3NAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4M0ZCRUE4M0MKKwlsb25nCQkweDNGRkYwMDAwLDB4QUI3QTM5QjUsMHhBOTNFRDMzNywweDNGQkVDQjAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFENTgzRUVBLDB4NDJBMTRBQzYsMHgzRkJFOTMwMQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc1LDB4QkZCRDgzNjcKKwlsb25nCQkweDNGRkYwMDAwLDB4QjEyM0Y1ODEsMHhEMkFDMjU5MCwweEJGQkVGMDVGCisJbG9uZwkJMHgzRkZGMDAwMCwweEIzMTFDNDEyLDB4QTkxMTI0ODksMHgzRkJERkIzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4M0ZCRUIyRkIKKwlsb25nCQkweDNGRkYwMDAwLDB4QjZGRDkxRTMsMHgyOEQxNzc5MSwweDNGQkFFMkNCCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RkJBRjQ3LDB4NjJGQjlFRTksMHgzRkJDREMzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZCLDB4M0ZCRUU5QUEKKwlsb25nCQkweDNGRkYwMDAwLDB4QkQwOEEzOUYsMHg1ODBDMzZCRiwweEJGQkVBRUZECisJbG9uZwkJMHgzRkZGMDAwMCwweEJGMTc5OUI2LDB4N0E3MzEwODMsMHhCRkJDQkY1MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU2LDB4M0ZCRUY4OEEKKwlsb25nCQkweDNGRkYwMDAwLDB4QzM0NkNDREEsMHgyNDk3NjQwNywweDNGQkQ4M0IyCisJbG9uZwkJMHgzRkZGMDAwMCwweEM1NjcyQTExLDB4NTUwNkRBREQsMHgzRkJERjhBQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVELDB4QkZCREZCMTcKKwlsb25nCQkweDNGRkYwMDAwLDB4QzlCOUJEODYsMHg2RTJGMjdBMywweEJGQkVGRTNDCisJbG9uZwkJMHgzRkZGMDAwMCwweENCRUMxNEZFLDB4RjI3MjdDNUQsMHhCRkJCQjZGOAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4QkZCQ0VFNTMKKwlsb25nCQkweDNGRkYwMDAwLDB4RDA2MzMzREEsMHhFRjJCMjU5NSwweEJGQkRBNEFFCisJbG9uZwkJMHgzRkZGMDAwMCwweEQyQTgxRDkxLDB4RjEyQUU0NUEsMHgzRkJDOTEyNAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTFGLDB4M0ZCRUIyNDMKKwlsb25nCQkweDNGRkYwMDAwLDB4RDc0NEZDQ0EsMHhENjlENkFGNCwweDNGQkRFNjlBCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ5OUQxNUMyLDB4NzhBRkQ3QjYsMHhCRkI4QkM2MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU1LDB4M0ZCREY2MTAKKwlsb25nCQkweDNGRkYwMDAwLDB4REU2MEY0ODIsMHg1RTBFOTEyNCwweEJGQkQ4QkUxCisJbG9uZwkJMHgzRkZGMDAwMCwweEUwQ0NERUVDLDB4MkE5NEUxMTEsMHgzRkJBQ0IxMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUxLDB4M0ZCQjlCRkUKKwlsb25nCQkweDNGRkYwMDAwLDB4RTVCOTA2RTcsMHg3QzgzNDhBOCwweDNGQkNGMkY0CisJbG9uZwkJMHgzRkZGMDAwMCwweEU4Mzk2QTUwLDB4M0M0QkRDNjgsMHgzRkJFRjIyRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTJGLDB4QkZCREJGNEEKKwlsb25nCQkweDNGRkYwMDAwLDB4RUQ0RjMwMUUsMHhEOTk0MkI4NCwweDNGQkVDMDFBCisJbG9uZwkJMHgzRkZGMDAwMCwweEVGRTRCOTlCLDB4RENEQUY1Q0IsMHgzRkJFOENBQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTNBLDB4QkZCQ0JCM0YKKwlsb25nCQkweDNGRkYwMDAwLDB4RjUyNTdEMTUsMHgyNDg2Q0MyQywweDNGQkVGNzNBCisJbG9uZwkJMHgzRkZGMDAwMCwweEY3RDBERjczLDB4MEFEMTNCQjksMHhCRkI4Qjc5NQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNBLDB4M0ZCRUY4NEIKKwlsb25nCQkweDNGRkYwMDAwLDB4RkQzRTBDMEMsMHhGNDg2QzE3NSwweEJGQkVGNTgxCisKKwlzZXQJCUlOVCxMX1NDUjEKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKworCXNldAkJQURKRkFDVCxGUF9TQ1IwCisKKwlzZXQJCUZBQ1QxLEZQX1NDUjAKKwlzZXQJCUZBQ1QxSEksRkFDVDErNAorCXNldAkJRkFDVDFMT1csRkFDVDErOAorCisJc2V0CQlGQUNUMixGUF9TQ1IxCisJc2V0CQlGQUNUMkhJLEZBQ1QyKzQKKwlzZXQJCUZBQ1QyTE9XLEZBQ1QyKzgKKworCWdsb2JhbAkJc3R3b3RveAorIy0tRU5UUlkgUE9JTlQgRk9SIDIqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKK3N0d290b3g6CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJZm1vdi54CQklZnAwLFgoJWE2KQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKworCWNtcC5sCQklZDEsJjB4M0ZCOTgwMDAJCSMgfFh8ID49IDIqKigtNzApPworCWJnZS5iCQlUV09PSzEKKwlicmEudwkJRVhQQk9SUworCitUV09PSzE6CisJY21wLmwJCSVkMSwmMHg0MDBEODBDMAkJIyB8WHwgPiAxNjQ4MD8KKwlibGUuYgkJVFdPTUFJTgorCWJyYS53CQlFWFBCT1JTCisKK1RXT01BSU46CisjLS1VU1VBTCBDQVNFLCAyXigtNzApIDw9IHxYfCA8PSAxNjQ4MAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLnMJCSYweDQyODAwMDAwLCVmcDEJIyA2NCAqIFgKKwlmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgTiA9IFJPVU5ELVRPLUlOVCg2NCBYKQorCW1vdi5sCQklZDIsLSglc3ApCisJbGVhCQlURVhQVEJMKCVwYyksJWExCSMgTE9BRCBBRERSRVNTIE9GIFRBQkxFIE9GIDJeKEovNjQpCisJZm1vdi5sCQlJTlQoJWE2KSwlZnAxCQkjIE4gLS0+IEZMT0FUSU5HIEZNVAorCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVkMgorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgSVMgSgorCWFzbC5sCQkmNCwlZDEJCQkjIERJU1BMQUNFTUVOVCBGT1IgMl4oSi82NCkKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBGT1IgMl4oSi82NCkKKwlhc3IubAkJJjYsJWQyCQkJIyBkMiBJUyBMLCBOID0gNjRMICsgSgorCW1vdi5sCQklZDIsJWQxCisJYXNyLmwJCSYxLCVkMQkJCSMgRDAgSVMgTQorCXN1Yi5sCQklZDEsJWQyCQkJIyBkMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgorCWFkZC5sCQkmMHgzRkZGLCVkMgorCisjLS1TVU1NQVJZOiBhMSBJUyBBRERSRVNTIEZPUiBUSEUgTEVBRElORyBQT1JUSU9OIE9GIDJeKEovNjQpLAorIy0tRDAgSVMgTSBXSEVSRSBOID0gNjQoTStNJykgKyBKLiBOT1RFIFRIQVQgfE18IDw9IDE2MTQwIEJZIERFU0lHTi4KKyMtLUFESkZBQ1QgPSAyXihNJykuCisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSIEFSRSAoSU4gT1JERVIpIEZQQ1IsIEQwLCBGUDEsIGExLCBBTkQgRlAyLgorCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC5zCQkmMHgzQzgwMDAwMCwlZnAxCSMgKDEvNjQpKk4KKwltb3YubAkJKCVhMSkrLEZBQ1QxKCVhNikKKwltb3YubAkJKCVhMSkrLEZBQ1QxSEkoJWE2KQorCW1vdi5sCQkoJWExKSssRkFDVDFMT1coJWE2KQorCW1vdi53CQkoJWExKSssRkFDVDIoJWE2KQorCisJZnN1Yi54CQklZnAxLCVmcDAJCSMgWCAtICgxLzY0KSpJTlQoNjQgWCkKKworCW1vdi53CQkoJWExKSssRkFDVDJISSglYTYpCisJY2xyLncJCUZBQ1QySEkrMiglYTYpCisJY2xyLmwJCUZBQ1QyTE9XKCVhNikKKwlhZGQudwkJJWQxLEZBQ1QxKCVhNikKKwlmbXVsLngJCUxPRzIoJXBjKSwlZnAwCQkjIEZQMCBJUyBSCisJYWRkLncJCSVkMSxGQUNUMiglYTYpCisKKwlicmEudwkJZXhwcgorCitFWFBCT1JTOgorIy0tRlBDUiwgRDAgU0FWRUQKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LmIJCVRFWFBCSUcKKworIy0tfFh8IElTIFNNQUxMLCBSRVRVUk4gMSArIFgKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCisJYnJhCQl0X3BpbngyCisKK1RFWFBCSUc6CisjLS18WHwgSVMgTEFSR0UsIEdFTkVSQVRFIE9WRVJGTE9XIElGIFggPiAwOyBFTFNFIEdFTkVSQVRFIFVOREVSRkxPVworIy0tUkVHSVNURVJTIFNBVkUgU08gRkFSIEFSRSBGUENSIEFORCAgRDAKKwltb3YubAkJWCglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwlibHQuYgkJRVhQTkVHCisKKwlicmEJCXRfb3ZmbDIJCQkjIHRfb3ZmbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisKK0VYUE5FRzoKKwlicmEJCXRfdW5mbDIJCQkjIHRfdW5mbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisKKwlnbG9iYWwJCXN0d290b3hkCitzdHdvdG94ZDoKKyMtLUVOVFJZIFBPSU5UIEZPUiAyKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAorCW1vdi5sCQkoJWEwKSwlZDEKKwlvci5sCQkmMHgwMDgwMDAwMSwlZDEKKwlmYWRkLnMJCSVkMSwlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXN0ZW50b3gKKyMtLUVOVFJZIFBPSU5UIEZPUiAxMCoqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworc3RlbnRveDoKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlmbW92LngJCSVmcDAsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkI5ODAwMAkJIyB8WHwgPj0gMioqKC03MCk/CisJYmdlLmIJCVRFTk9LMQorCWJyYS53CQlFWFBCT1JTCisKK1RFTk9LMToKKwljbXAubAkJJWQxLCYweDQwMEI5QjA3CQkjIHxYfCA8PSAxNjQ4MCpsb2cyL2xvZzEwID8KKwlibGUuYgkJVEVOTUFJTgorCWJyYS53CQlFWFBCT1JTCisKK1RFTk1BSU46CisjLS1VU1VBTCBDQVNFLCAyXigtNzApIDw9IHxYfCA8PSAxNjQ4MCBMT0cgMiAvIExPRyAxMAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLmQJCUwyVEVONjQoJXBjKSwlZnAxCSMgWCo2NCpMT0cxMC9MT0cyCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIE49SU5UKFgqNjQqTE9HMTAvTE9HMikKKwltb3YubAkJJWQyLC0oJXNwKQorCWxlYQkJVEVYUFRCTCglcGMpLCVhMQkjIExPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQorCWZtb3YubAkJSU5UKCVhNiksJWZwMQkJIyBOIC0tPiBGTE9BVElORyBGTVQKKwltb3YubAkJSU5UKCVhNiksJWQxCisJbW92LmwJCSVkMSwlZDIKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIElTIEoKKwlhc2wubAkJJjQsJWQxCQkJIyBESVNQTEFDRU1FTlQgRk9SIDJeKEovNjQpCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgRk9SIDJeKEovNjQpCisJYXNyLmwJCSY2LCVkMgkJCSMgZDIgSVMgTCwgTiA9IDY0TCArIEoKKwltb3YubAkJJWQyLCVkMQorCWFzci5sCQkmMSwlZDEJCQkjIEQwIElTIE0KKwlzdWIubAkJJWQxLCVkMgkJCSMgZDIgSVMgTScsIE4gPSA2NChNK00nKSArIEoKKwlhZGQubAkJJjB4M0ZGRiwlZDIKKworIy0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKKyMtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCisjLS1BREpGQUNUID0gMl4oTScpLgorIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbW92LngJCSVmcDEsJWZwMgorCisJZm11bC5kCQlMMTBUV08xKCVwYyksJWZwMQkjIE4qKExPRzIvNjRMT0cxMClfTEVBRAorCW1vdi5sCQkoJWExKSssRkFDVDEoJWE2KQorCisJZm11bC54CQlMMTBUV08yKCVwYyksJWZwMgkjIE4qKExPRzIvNjRMT0cxMClfVFJBSUwKKworCW1vdi5sCQkoJWExKSssRkFDVDFISSglYTYpCisJbW92LmwJCSglYTEpKyxGQUNUMUxPVyglYTYpCisJZnN1Yi54CQklZnAxLCVmcDAJCSMgWCAtIE4gTF9MRUFECisJbW92LncJCSglYTEpKyxGQUNUMiglYTYpCisKKwlmc3ViLngJCSVmcDIsJWZwMAkJIyBYIC0gTiBMX1RSQUlMCisKKwltb3YudwkJKCVhMSkrLEZBQ1QySEkoJWE2KQorCWNsci53CQlGQUNUMkhJKzIoJWE2KQorCWNsci5sCQlGQUNUMkxPVyglYTYpCisKKwlmbXVsLngJCUxPRzEwKCVwYyksJWZwMAkJIyBGUDAgSVMgUgorCWFkZC53CQklZDEsRkFDVDEoJWE2KQorCWFkZC53CQklZDEsRkFDVDIoJWE2KQorCitleHByOgorIy0tRlBDUiwgRlAyLCBGUDMgQVJFIFNBVkVEIElOIE9SREVSIEFTIFNIT1dOLgorIy0tQURKRkFDVCBDT05UQUlOUyAyKiooTScpLCBGQUNUMSArIEZBQ1QyID0gMioqKE0pICogMioqKEovNjQpLgorIy0tRlAwIElTIFIuIFRIRSBGT0xMT1dJTkcgQ09ERSBDT01QVVRFUworIy0tCTIqKihNJytNKSAqIDIqKihKLzY0KSAqIEVYUChSKQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgUyA9IFIqUgorCisJZm1vdi5kCQlFWFBBNSglcGMpLCVmcDIJCSMgRlAyIElTIEE1CisJZm1vdi5kCQlFWFBBNCglcGMpLCVmcDMJCSMgRlAzIElTIEE0CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUypBNQorCWZtdWwueAkJJWZwMSwlZnAzCQkjIEZQMyBJUyBTKkE0CisKKwlmYWRkLmQJCUVYUEEzKCVwYyksJWZwMgkJIyBGUDIgSVMgQTMrUypBNQorCWZhZGQuZAkJRVhQQTIoJXBjKSwlZnAzCQkjIEZQMyBJUyBBMitTKkE0CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUyooQTMrUypBNSkKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBGUDMgSVMgUyooQTIrUypBNCkKKworCWZhZGQuZAkJRVhQQTEoJXBjKSwlZnAyCQkjIEZQMiBJUyBBMStTKihBMytTKkE1KQorCWZtdWwueAkJJWZwMCwlZnAzCQkjIEZQMyBJUyBSKlMqKEEyK1MqQTQpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUyooQTErUyooQTMrUypBNSkpCisJZmFkZC54CQklZnAzLCVmcDAJCSMgRlAwIElTIFIrUipTKihBMitTKkE0KQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIEZQMCBJUyBFWFAoUikgLSAxCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKyMtLUZJTkFMIFJFQ09OU1RSVUNUSU9OIFBST0NFU1MKKyMtLUVYUChYKSA9IDJeTSoyXihKLzY0KSArIDJeTSoyXihKLzY0KSooRVhQKFIpLTEpICAtICAoMSBPUiAwKQorCisJZm11bC54CQlGQUNUMSglYTYpLCVmcDAKKwlmYWRkLngJCUZBQ1QyKCVhNiksJWZwMAorCWZhZGQueAkJRkFDVDEoJWE2KSwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCW1vdi53CQklZDIsQURKRkFDVCglYTYpCSMgSU5TRVJUIEVYUE9ORU5UCisJbW92LmwJCSglc3ApKywlZDIKKwltb3YubAkJJjB4ODAwMDAwMDAsQURKRkFDVCs0KCVhNikKKwljbHIubAkJQURKRkFDVCs4KCVhNikKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCUFESkZBQ1QoJWE2KSwlZnAwCSMgRklOQUwgQURKVVNUTUVOVAorCWJyYQkJdF9jYXRjaAorCisJZ2xvYmFsCQlzdGVudG94ZAorc3RlbnRveGQ6CisjLS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBzZXQgdXNlcidzIHJvdW5kaW5nIG1vZGUvcHJlY2lzaW9uCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCisJbW92LmwJCSglYTApLCVkMQorCW9yLmwJCSYweDAwODAwMDAxLCVkMQorCWZhZGQucwkJJWQxLCVmcDAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzbW92Y3IoKTogcmV0dXJucyB0aGUgUk9NIGNvbnN0YW50IGF0IHRoZSBvZmZzZXQgc3BlY2lmaWVkIGluIGQxCSMKKyMJICAgIHJvdW5kZWQgdG8gdGhlIG1vZGUgYW5kIHByZWNpc2lvbiBzcGVjaWZpZWQgaW4gZDAuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCWQxID0gUk9NIG9mZnNldAkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSB0aGUgUk9NIGNvbnN0YW50IHJvdW5kZWQgdG8gdGhlIHVzZXIncyByb3VuZGluZyBtb2RlLHByZWMJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc21vdmNyCitzbW92Y3I6CisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSByb20gb2Zmc2V0IGZvciBhIHNlYworCisJbHNyLmIJCSYweDQsJWQwCQkjIHNoaWZ0IGN0cmwgYml0cyB0byBsbworCW1vdi5sCQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQorCWFuZGkudwkJJjB4MywlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQorCWFuZGkudwkJJjB4YywlZDAJCSMgZXh0cmFjdCBybmQgcHJlYworCXN3YXAJCSVkMAkJCSMgcHV0IHJuZCBwcmVjIGluIGhpCisJbW92LncJCSVkMSwlZDAJCQkjIHB1dCBybmQgbW9kZSBpbiBsbworCisJbW92LmwJCSglc3ApKywlZDEJCSMgZ2V0IHJvbSBvZmZzZXQKKworIworIyBjaGVjayByYW5nZSBvZiBvZmZzZXQKKyMKKwl0c3QuYgkJJWQxCQkJIyBpZiB6ZXJvLCBvZmZzZXQgaXMgdG8gcGkKKwliZXEuYgkJcGlfdGJsCQkJIyBpdCBpcyBwaQorCWNtcGkuYgkJJWQxLCYweDBhCQkjIGNoZWNrIHJhbmdlICQwMSAtICQwYQorCWJsZS5iCQl6X3ZhbAkJCSMgaWYgaW4gdGhpcyByYW5nZSwgcmV0dXJuIHplcm8KKwljbXBpLmIJCSVkMSwmMHgwZQkJIyBjaGVjayByYW5nZSAkMGIgLSAkMGUKKwlibGUuYgkJc21fdGJsCQkJIyB2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorCWNtcGkuYgkJJWQxLCYweDJmCQkjIGNoZWNrIHJhbmdlICQxMCAtICQyZgorCWJsZS5iCQl6X3ZhbAkJCSMgaWYgaW4gdGhpcyByYW5nZSwgcmV0dXJuIHplcm8KKwljbXBpLmIJCSVkMSwmMHgzZgkJIyBjaGVjayByYW5nZSAkMzAgLSAkM2YKKwlibGUuYgkJYmdfdGJsCQkJIyB2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorCit6X3ZhbDoKKwlicmEubAkJbGRfcHplcm8JCSMgcmV0dXJuIGEgemVybworCisjCisjIHRoZSBhbnN3ZXIgaXMgUEkgcm91bmRlZCB0byB0aGUgcHJvcGVyIHByZWNpc2lvbi4KKyMKKyMgZmV0Y2ggYSBwb2ludGVyIHRvIHRoZSBhbnN3ZXIgdGFibGUgcmVsYXRpbmcgdG8gdGhlIHByb3BlciByb3VuZGluZworIyBwcmVjaXNpb24uCisjCitwaV90Ymw6CisJdHN0LmIJCSVkMAkJCSMgaXMgcm1vZGUgUk4/CisJYm5lLmIJCXBpX25vdF9ybgkJIyBubworcGlfcm46CisJbGVhLmwJCVBJUk4oJXBjKSwlYTAJCSMgeWVzOyBsb2FkIFBJIFJOIHRhYmxlIGFkZHIKKwlicmEudwkJc2V0X2ZpbngKK3BpX25vdF9ybjoKKwljbXBpLmIJCSVkMCwmcnBfbW9kZQkJIyBpcyBybW9kZSBSUD8KKwliZXEuYgkJcGlfcnAJCQkjIHllcworcGlfcnpybToKKwlsZWEubAkJUElSWlJNKCVwYyksJWEwCQkjIG5vOyBsb2FkIFBJIFJaLFJNIHRhYmxlIGFkZHIKKwlicmEuYgkJc2V0X2ZpbngKK3BpX3JwOgorCWxlYS5sCQlQSVJQKCVwYyksJWEwCQkjIGxvYWQgUEkgUlAgdGFibGUgYWRkcgorCWJyYS5iCQlzZXRfZmlueAorCisjCisjIHRoZSBhbnN3ZXIgaXMgb25lIG9mOgorIwkkMEIJbG9nMTAoMikJKGluZXhhY3QpCisjCSQwQwllCQkoaW5leGFjdCkKKyMJJDBECWxvZzIoZSkJCShpbmV4YWN0KQorIwkkMEUJbG9nMTAoZSkJKGV4YWN0KQorIworIyBmZXRjaCBhIHBvaW50ZXIgdG8gdGhlIGFuc3dlciB0YWJsZSByZWxhdGluZyB0byB0aGUgcHJvcGVyIHJvdW5kaW5nCisjIHByZWNpc2lvbi4KKyMKK3NtX3RibDoKKwlzdWJpLmIJCSYweGIsJWQxCQkjIG1ha2Ugb2Zmc2V0IGluIDAtNCByYW5nZQorCXRzdC5iCQklZDAJCQkjIGlzIHJtb2RlIFJOPworCWJuZS5iCQlzbV9ub3Rfcm4JCSMgbm8KK3NtX3JuOgorCWxlYS5sCQlTTUFMUk4oJXBjKSwlYTAJCSMgeWVzOyBsb2FkIFJOIHRhYmxlIGFkZHIKK3NtX3RibF9jb250OgorCWNtcGkuYgkJJWQxLCYweDIJCSMgaXMgcmVzdWx0IGxvZzEwKGUpPworCWJsZS5iCQlzZXRfZmlueAkJIyBubzsgYW5zd2VyIGlzIGluZXhhY3QKKwlicmEuYgkJbm9fZmlueAkJCSMgeWVzOyBhbnN3ZXIgaXMgZXhhY3QKK3NtX25vdF9ybjoKKwljbXBpLmIJCSVkMCwmcnBfbW9kZQkJIyBpcyBybW9kZSBSUD8KKwliZXEuYgkJc21fcnAJCQkjIHllcworc21fcnpybToKKwlsZWEubAkJU01BTFJaUk0oJXBjKSwlYTAJIyBubzsgbG9hZCBSWixSTSB0YWJsZSBhZGRyCisJYnJhLmIJCXNtX3RibF9jb250CitzbV9ycDoKKwlsZWEubAkJU01BTFJQKCVwYyksJWEwCQkjIGxvYWQgUlAgdGFibGUgYWRkcgorCWJyYS5iCQlzbV90YmxfY29udAorCisjCisjIHRoZSBhbnN3ZXIgaXMgb25lIG9mOgorIwkkMzAJbG4oMikJCShpbmV4YWN0KQorIwkkMzEJbG4oMTApCQkoaW5leGFjdCkKKyMJJDMyCTEwXjAJCShleGFjdCkKKyMJJDMzCTEwXjEJCShleGFjdCkKKyMJJDM0CTEwXjIJCShleGFjdCkKKyMJJDM1CTEwXjQJCShleGFjdCkKKyMJJDM2CTEwXjgJCShleGFjdCkKKyMJJDM3CTEwXjE2CQkoZXhhY3QpCisjCSQzOAkxMF4zMgkJKGluZXhhY3QpCisjCSQzOQkxMF42NAkJKGluZXhhY3QpCisjCSQzQQkxMF4xMjgJCShpbmV4YWN0KQorIwkkM0IJMTBeMjU2CQkoaW5leGFjdCkKKyMJJDNDCTEwXjUxMgkJKGluZXhhY3QpCisjCSQzRAkxMF4xMDI0CQkoaW5leGFjdCkKKyMJJDNFCTEwXjIwNDgJCShpbmV4YWN0KQorIwkkM0YJMTBeNDA5NgkJKGluZXhhY3QpCisjCisjIGZldGNoIGEgcG9pbnRlciB0byB0aGUgYW5zd2VyIHRhYmxlIHJlbGF0aW5nIHRvIHRoZSBwcm9wZXIgcm91bmRpbmcKKyMgcHJlY2lzaW9uLgorIworYmdfdGJsOgorCXN1YmkuYgkJJjB4MzAsJWQxCQkjIG1ha2Ugb2Zmc2V0IGluIDAtZiByYW5nZQorCXRzdC5iCQklZDAJCQkjIGlzIHJtb2RlIFJOPworCWJuZS5iCQliZ19ub3Rfcm4JCSMgbm8KK2JnX3JuOgorCWxlYS5sCQlCSUdSTiglcGMpLCVhMAkJIyB5ZXM7IGxvYWQgUk4gdGFibGUgYWRkcgorYmdfdGJsX2NvbnQ6CisJY21waS5iCQklZDEsJjB4MQkJIyBpcyBvZmZzZXQgPD0gJDMxPworCWJsZS5iCQlzZXRfZmlueAkJIyB5ZXM7IGFuc3dlciBpcyBpbmV4YWN0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyAkMzIgPD0gb2Zmc2V0IDw9ICQzNz8KKwlibGUuYgkJbm9fZmlueAkJCSMgeWVzOyBhbnN3ZXIgaXMgZXhhY3QKKwlicmEuYgkJc2V0X2ZpbngJCSMgbm87IGFuc3dlciBpcyBpbmV4YWN0CitiZ19ub3Rfcm46CisJY21waS5iCQklZDAsJnJwX21vZGUJCSMgaXMgcm1vZGUgUlA/CisJYmVxLmIJCWJnX3JwCQkJIyB5ZXMKK2JnX3J6cm06CisJbGVhLmwJCUJJR1JaUk0oJXBjKSwlYTAJIyBubzsgbG9hZCBSWixSTSB0YWJsZSBhZGRyCisJYnJhLmIJCWJnX3RibF9jb250CitiZ19ycDoKKwlsZWEubAkJQklHUlAoJXBjKSwlYTAJCSMgbG9hZCBSUCB0YWJsZSBhZGRyCisJYnJhLmIJCWJnX3RibF9jb250CisKKyMgYW5zd2VyIGlzIGluZXhhY3QsIHNvIHNldCBJTkVYMiBhbmQgQUlORVggaW4gdGhlIHVzZXIncyBGUFNSLgorc2V0X2Zpbng6CisJb3JpLmwJCSZpbngyYV9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IElORVgyL0FJTkVYCitub19maW54OgorCW11bHUudwkJJjB4YywlZDEJCSMgb2Zmc2V0IHBvaW50cyBpbnRvIHRhYmxlcworCXN3YXAJCSVkMAkJCSMgcHV0IHJuZCBwcmVjIGluIGxvIHdvcmQKKwl0c3QuYgkJJWQwCQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisKKwlibmUuYgkJbm90X2V4dAkJCSMgaWYgeHByZWMsIGRvIG5vdCBjYWxsIHJvdW5kCisKKyMgUHJlY2lzaW9uIGlzIGV4dGVuZGVkCisJZm1vdm0ueAkJKCVhMCwlZDEudyksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjIFByZWNpc2lvbiBpcyBzaW5nbGUgb3IgZG91YmxlCitub3RfZXh0OgorCXN3YXAJCSVkMAkJCSMgcm5kIHByZWMgaW4gdXBwZXIgd29yZAorCisjIGNhbGwgcm91bmQoKSB0byByb3VuZCB0aGUgYW5zd2VyIHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uLgorIyBleHBvbmVudHMgb3V0IG9mIHJhbmdlIGZvciBzaW5nbGUgb3IgZG91YmxlIERPIE5PVCBjYXVzZSB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cuCisJbW92LncJCTB4MCglYTAsJWQxLncpLEZQX1NDUjFfRVgoJWE2KSAjIGxvYWQgZmlyc3Qgd29yZAorCW1vdi5sCQkweDQoJWEwLCVkMS53KSxGUF9TQ1IxX0hJKCVhNikgIyBsb2FkIHNlY29uZCB3b3JkCisJbW92LmwJCTB4OCglYTAsJWQxLncpLEZQX1NDUjFfTE8oJWE2KSAjIGxvYWQgdGhpcmQgd29yZAorCW1vdi5sCQklZDAsJWQxCisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBhbnN3ZXIKKwljbHIudwkJTE9DQUxfU0dOKCVhMCkJCSMgc2lnbiBhbHdheXMgcG9zaXRpdmUKKwlic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgbWFudGlzc2EKKworCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiByb3VuZGVkIHJlc3VsdCBpbiBmcDAKKwlydHMKKworCWFsaWduCQkweDQKKworUElSTjoJbG9uZwkJMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUJIyBwaQorUElSWlJNOglsb25nCQkweDQwMDAwMDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNAkjIHBpCitQSVJQOglsb25nCQkweDQwMDAwMDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNQkjIHBpCisKK1NNQUxSTjoJbG9uZwkJMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTgJIyBsb2cxMCgyKQorCWxvbmcJCTB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhCSMgZQorCWxvbmcJCTB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJjCSMgbG9nMihlKQorCWxvbmcJCTB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1CSMgbG9nMTAoZSkKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkjIDAuMAorCitTTUFMUlpSTToKKwlsb25nCQkweDNmZmQwMDAwLDB4OWEyMDlhODQsMHhmYmNmZjc5OAkjIGxvZzEwKDIpCisJbG9uZwkJMHg0MDAwMDAwMCwweGFkZjg1NDU4LDB4YTJiYjRhOWEJIyBlCisJbG9uZwkJMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmIJIyBsb2cyKGUpCisJbG9uZwkJMHgzZmZkMDAwMCwweGRlNWJkOGE5LDB4MzcyODcxOTUJIyBsb2cxMChlKQorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCSMgMC4wCisKK1NNQUxSUDoJbG9uZwkJMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTkJIyBsb2cxMCgyKQorCWxvbmcJCTB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTliCSMgZQorCWxvbmcJCTB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJjCSMgbG9nMihlKQorCWxvbmcJCTB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1CSMgbG9nMTAoZSkKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkjIDAuMAorCitCSUdSTjoJbG9uZwkJMHgzZmZlMDAwMCwweGIxNzIxN2Y3LDB4ZDFjZjc5YWMJIyBsbigyKQorCWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3CSMgbG4oMTApCisKKwlsb25nCQkweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCisJbG9uZwkJMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDIKKwlsb25nCQkweDQwMEMwMDAwLDB4OUM0MDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gNAorCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4CisJbG9uZwkJMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAJIyAxMCBeIDE2CisJbG9uZwkJMHg0MDY5MDAwMCwweDlEQzVBREE4LDB4MkI3MEI1OUUJIyAxMCBeIDMyCisJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDUJIyAxMCBeIDY0CisJbG9uZwkJMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDRTAJIyAxMCBeIDEyOAorCWxvbmcJCTB4NDM1MTAwMDAsMHhBQTdFRUJGQiwweDlERjlERThFCSMgMTAgXiAyNTYKKwlsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNwkjIDEwIF4gNTEyCisJbG9uZwkJMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcJIyAxMCBeIDEwMjQKKwlsb25nCQkweDVBOTIwMDAwLDB4OUU4QjNCNUQsMHhDNTNENURFNQkjIDEwIF4gMjA0OAorCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCCSMgMTAgXiA0MDk2CisKK0JJR1JaUk06CisJbG9uZwkJMHgzZmZlMDAwMCwweGIxNzIxN2Y3LDB4ZDFjZjc5YWIJIyBsbigyKQorCWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE2CSMgbG4oMTApCisKKwlsb25nCQkweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCisJbG9uZwkJMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDIKKwlsb25nCQkweDQwMEMwMDAwLDB4OUM0MDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gNAorCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4CisJbG9uZwkJMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAJIyAxMCBeIDE2CisJbG9uZwkJMHg0MDY5MDAwMCwweDlEQzVBREE4LDB4MkI3MEI1OUQJIyAxMCBeIDMyCisJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDUJIyAxMCBeIDY0CisJbG9uZwkJMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDREYJIyAxMCBeIDEyOAorCWxvbmcJCTB4NDM1MTAwMDAsMHhBQTdFRUJGQiwweDlERjlERThECSMgMTAgXiAyNTYKKwlsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNgkjIDEwIF4gNTEyCisJbG9uZwkJMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcJIyAxMCBeIDEwMjQKKwlsb25nCQkweDVBOTIwMDAwLDB4OUU4QjNCNUQsMHhDNTNENURFNAkjIDEwIF4gMjA0OAorCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlBCSMgMTAgXiA0MDk2CisKK0JJR1JQOgorCWxvbmcJCTB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCSMgbG4oMikKKwlsb25nCQkweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNwkjIGxuKDEwKQorCisJbG9uZwkJMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDAKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ2CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE4CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNzY2FsZSgpOiBjb21wdXRlcyB0aGUgZGVzdGluYXRpb24gb3BlcmFuZCBzY2FsZWQgYnkgdGhlIHNvdXJjZQkjCisjCSAgICBvcGVyYW5kLiBJZiB0aGUgYWJzb3VsdXRlIHZhbHVlIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZCBpcwkjCisjCSAgICA+PSAyXjE0LCBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaXMgcmV0dXJuZWQuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCAgPSBwb2ludGVyIHRvIGRvdWJsZS1leHRlbmRlZCBzb3VyY2Ugb3BlcmFuZCBYCQkjCisjCWExICA9IHBvaW50ZXIgdG8gZG91YmxlLWV4dGVuZGVkIGRlc3RpbmF0aW9uIG9wZXJhbmQgWQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gIHNjYWxlKFgsWSkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQJU0lHTiwJCUxfU0NSMQorCisJZ2xvYmFsCQlzc2NhbGUKK3NzY2FsZToKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzdG9yZSBvZmYgY3RybCBiaXRzIGZvciBub3cKKworCW1vdi53CQlEU1RfRVgoJWExKSwlZDEJCSMgZ2V0IGRzdCBleHBvbmVudAorCXNtaS5iCQlTSUdOKCVhNikJCSMgdXNlIFNJR04gdG8gaG9sZCBkc3Qgc2lnbgorCWFuZGkubAkJJjB4MDAwMDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24gZnJvbSBkc3QgZXhwCisKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGNoZWNrIHNyYyBib3VuZHMKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsciBzcmMgc2lnbiBiaXQKKwljbXBpLncJCSVkMCwmMHgzZmZmCQkjIGlzIHNyYyB+IFpFUk8/CisJYmx0LncJCXNyY19zbWFsbAkJIyB5ZXMKKwljbXBpLncJCSVkMCwmMHg0MDBjCQkjIG5vOyBpcyBzcmMgdG9vIGJpZz8KKwliZ3QudwkJc3JjX291dAkJCSMgeWVzCisKKyMKKyMgU291cmNlIGlzIHdpdGhpbiAyXjE0IHJhbmdlLgorIworc3JjX29rOgorCWZpbnRyei54CVNSQyglYTApLCVmcDAJCSMgY2FsYyBpbnQgb2Ygc3JjCisJZm1vdi5sCQklZnAwLCVkMAkJIyBpbnQgc3JjIHRvIGQwCisjIGRvbid0IHdhbnQgYW55IGFjY3J1ZWQgYml0cyBmcm9tIHRoZSBmaW50cnogc2hvd2luZyB1cCBsYXRlciBzaW5jZQorIyB3ZSBtYXkgbmVlZCB0byByZWFkIHRoZSBmcHNyIGZvciB0aGUgbGFzdCBmcCBvcCBpbiB0X2NhdGNoMigpLgorCWZtb3YubAkJJjB4MCwlZnBzcgorCisJdHN0LmIJCURTVF9ISSglYTEpCQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CisJYm1pLmIJCXNva19ub3JtCisKKyMgdGhlIGRzdCBpcyBhIERFTk9STS4gbm9ybWFsaXplIHRoZSBERU5PUk0gYW5kIGFkZCB0aGUgYWRqdXN0bWVudCB0bworIyB0aGUgc3JjIHZhbHVlLiB0aGVuLCBqdW1wIHRvIHRoZSBub3JtIHBhcnQgb2YgdGhlIHJvdXRpbmUuCitzb2tfZG5ybToKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNyYyBmb3Igbm93CisKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpICMgbWFrZSBhIGNvcHkKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gREVOT1JNCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisJbmVnLmwJCSVkMAorCWFkZC5sCQkoJXNwKSssJWQwCQkjIGFkZCBhZGp1c3RtZW50IHRvIHNyYworCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgbG9hZCBub3JtYWxpemVkIERFTk9STQorCisJY21waS53CQklZDAsJi0weDNmZmYJCSMgaXMgdGhlIHNoZnQgYW10IHJlYWxseSBsb3c/CisJYmdlLmIJCXNva19ub3JtMgkJIyB0aGFuayBnb29kbmVzcyBubworCisjIHRoZSBtdWx0aXBseSBmYWN0b3IgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gY3JlYXRlIHNob3VsZCBiZSBhIGRlbm9ybQorIyBmb3IgdGhlIG11bHRpcGx5IHRvIHdvcmsuIHRoZXJlZm9yZSwgd2UncmUgZ29pbmcgdG8gYWN0dWFsbHkgZG8gYQorIyBtdWx0aXBseSB3aXRoIGEgZGVub3JtIHdoaWNoIHdpbGwgY2F1c2UgYW4gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUKKyMgZXhjZXB0aW9uIHRvIGJlIHB1dCBpbnRvIHRoZSBtYWNoaW5lIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGFuZCBjb3JyZWN0ZWQKKyMgbGF0ZXIuIHdlIGRvbid0IGRvIHRoaXMgd2l0aCB0aGUgREVOT1JNcyBhYm92ZSBiZWNhdXNlIHRoaXMgbWV0aG9kCisjIGlzIHNsb3dlci4gYnV0LCBkb24ndCBmcmV0LCBJIGRvbid0IHNlZSBpdCBiZWluZyB1c2VkIG11Y2ggZWl0aGVyLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMQkJIyBsb2FkIG5vcm1hbGl6ZWQgbWFudGlzc2EKKwlzdWJpLmwJCSYtMHgzZmZmLCVkMAkJIyBob3cgbWFueSBzaG91bGQgd2Ugc2hpZnQ/CisJbmVnLmwJCSVkMAkJCSMgbWFrZSBpdCBwb3NpdGl2ZQorCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIGl0ID4gMzI/CisJYmdlLmIJCXNva19kbnJtXzMyCQkjIHllcworCWxzci5sCQklZDAsJWQxCQkJIyBubzsgYml0IHN0YXlzIGluIHVwcGVyIGx3CisJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IHplcm8gbG93IG1hbnRpc3NhCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgaW5zZXJ0IG5ldyBoaWdoIG1hbnRpc3NhCisJY2xyLmwJCS0oJXNwKQkJCSMgbWFrZSB6ZXJvIGV4cG9uZW50CisJYnJhLmIJCXNva19ub3JtX2NvbnQKK3Nva19kbnJtXzMyOgorCXN1YmkuYgkJJjB4MjAsJWQwCQkjIGdldCBzaGlmdCBjb3VudAorCWxzci5sCQklZDAsJWQxCQkJIyBtYWtlIGxvdyBtYW50aXNzYSBsb25nd29yZAorCW1vdi5sCQklZDEsLSglc3ApCQkjIGluc2VydCBuZXcgbG93IG1hbnRpc3NhCisJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IHplcm8gaGlnaCBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIG1ha2UgemVybyBleHBvbmVudAorCWJyYS5iCQlzb2tfbm9ybV9jb250CisKKyMgdGhlIHNyYyB3aWxsIGZvcmNlIHRoZSBkc3QgdG8gYSBERU5PUk0gdmFsdWUgb3Igd29yc2UuIHNvLCBsZXQncworIyBjcmVhdGUgYW4gZnAgbXVsdGlwbHkgdGhhdCB3aWxsIGNyZWF0ZSB0aGUgcmVzdWx0Lgorc29rX25vcm06CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBmcDAgd2l0aCBub3JtYWxpemVkIHNyYworc29rX25vcm0yOgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCisKKwlhZGRpLncJCSYweDNmZmYsJWQwCQkjIHR1cm4gc3JjIGFtdCBpbnRvIGV4cCB2YWx1ZQorCXN3YXAJCSVkMAkJCSMgcHV0IGV4cG9uZW50IGluIGhpZ2ggd29yZAorCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJJjB4ODAwMDAwMDAsLSglc3ApCSMgaW5zZXJ0IG5ldyBoaWdoIG1hbnRpc3NhCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgaW5zZXJ0IG5ldyBsbyBtYW50aXNzYQorCitzb2tfbm9ybV9jb250OgorCWZtb3YubAkJJWZwY3IsJWQwCQkjIGQwIG5lZWRzIGZwY3IgZm9yIHRfY2F0Y2gyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQkoJXNwKSssJWZwMAkJIyBkbyB0aGUgbXVsdGlwbHkKKwlicmEJCXRfY2F0Y2gyCQkjIGNhdGNoIGFueSBleGNlcHRpb25zCisKKyMKKyMgU291cmNlIGlzIG91dHNpZGUgb2YgMl4xNCByYW5nZS4gIFRlc3QgdGhlIHNpZ24gYW5kIGJyYW5jaAorIyB0byB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGhhbmRsZXIuCisjCitzcmNfb3V0OgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgY3RybCBiaXRzCisJZXhnCQklYTAsJWExCQkJIyBzd2FwIHNyYyxkc3QgcHRycworCXRzdC5iCQlTUkNfRVgoJWExKQkJIyBpcyBzcmMgbmVnYXRpdmU/CisJYm1pCQl0X3VuZmwJCQkjIHllczsgdW5kZXJmbG93CisJYnJhCQl0X292Zmxfc2MJCSMgbm87IG92ZXJmbG93CisKKyMKKyMgVGhlIHNvdXJjZSBpbnB1dCBpcyBiZWxvdyAxLCBzbyB3ZSBjaGVjayBmb3IgZGVub3JtYWxpemVkIG51bWJlcnMKKyMgYW5kIHNldCB1bmZsLgorIworc3JjX3NtYWxsOgorCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJwbC5iCQlzc21hbGxfZG9uZQkJIyB5ZXMKKworCW1vdi5sCQkoJXNwKSssJWQwCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbm87IGxvYWQgY29udHJvbCBiaXRzCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJRFNUKCVhMSksJWZwMAkJIyBzaW1wbHkgcmV0dXJuIGRlc3QKKwlicmEJCXRfY2F0Y2gyCitzc21hbGxfZG9uZToKKwltb3YubAkJKCVzcCkrLCVkMAkJIyBsb2FkIGNvbnRyb2wgYml0cyBpbnRvIGQxCisJbW92LmwJCSVhMSwlYTAJCQkjIHBhc3MgcHRyIHRvIGRzdAorCWJyYQkJdF9yZXNkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc21vZCgpOiBjb21wdXRlcyB0aGUgZnAgTU9EIG9mIHRoZSBpbnB1dCB2YWx1ZXMgWCxZLgkJCSMKKyMgc3JlbSgpOiBjb21wdXRlcyB0aGUgZnAgKElFRUUpIFJFTSBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgWAkJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dCBZCQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIwlUaGUgaW5wdXQgb3BlcmFuZHMgWCBhbmQgWSBjYW4gYmUgZWl0aGVyIG5vcm1hbGl6ZWQgb3IJCSMKKyMJZGVub3JtYWxpemVkLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIyAgICAgIGZwMCA9IEZSRU0oWCxZKSBvciBGTU9EKFgsWSkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuICBTYXZlIGFuZCBzdHJpcCBzaWducyBvZiBYIGFuZCBZOiBzaWduWCA6PSBzaWduKFgpLAkjCisjICAgICAgICAgICAgICAgIHNpZ25ZIDo9IHNpZ24oWSksIFggOj0gfFh8LCBZIDo9IHxZfCwJCQkjCisjICAgICAgICAgICAgICAgIHNpZ25RIDo9IHNpZ25YIEVPUiBzaWduWS4gUmVjb3JkIHdoZXRoZXIgTU9EIG9yIFJFTQkjCisjICAgICAgICAgICAgICAgIGlzIHJlcXVlc3RlZC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICBTZXQgTCA6PSBleHBvKFgpLWV4cG8oWSksIGsgOj0gMCwgUSA6PSAwLgkJIworIyAgICAgICAgICAgICAgICBJZiAoTCA8IDApIHRoZW4JCQkJCSMKKyMgICAgICAgICAgICAgICAgICAgUiA6PSBYLCBnbyB0byBTdGVwIDQuCQkJCSMKKyMgICAgICAgICAgICAgICAgZWxzZQkJCQkJCQkjCisjICAgICAgICAgICAgICAgICAgIFIgOj0gMl4oLUwpWCwgaiA6PSBMLgkJCQkjCisjICAgICAgICAgICAgICAgIGVuZGlmCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMy4gIFBlcmZvcm0gTU9EKFgsWSkJCQkJCSMKKyMgICAgICAgICAgICAzLjEgSWYgUiA9IFksIGdvIHRvIFN0ZXAgOS4JCQkJIworIyAgICAgICAgICAgIDMuMiBJZiBSID4gWSwgdGhlbiB7IFIgOj0gUiAtIFksIFEgOj0gUSArIDF9CQkjCisjICAgICAgICAgICAgMy4zIElmIGogPSAwLCBnbyB0byBTdGVwIDQuCQkJCSMKKyMgICAgICAgICAgICAzLjQgayA6PSBrICsgMSwgaiA6PSBqIC0gMSwgUSA6PSAyUSwgUiA6PSAyUi4gR28gdG8JIworIyAgICAgICAgICAgICAgICBTdGVwIDMuMS4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDQuICBBdCB0aGlzIHBvaW50LCBSID0gWCAtIFFZID0gTU9EKFgsWSkuIFNldAkJIworIyAgICAgICAgICAgICAgICBMYXN0X1N1YnRyYWN0IDo9IGZhbHNlICh1c2VkIGluIFN0ZXAgNyBiZWxvdykuIElmCSMKKyMgICAgICAgICAgICAgICAgTU9EIGlzIHJlcXVlc3RlZCwgZ28gdG8gU3RlcCA2LgkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNS4gIFIgPSBNT0QoWCxZKSwgYnV0IFJFTShYLFkpIGlzIHJlcXVlc3RlZC4JCSMKKyMgICAgICAgICAgICA1LjEgSWYgUiA8IFkvMiwgdGhlbiBSID0gTU9EKFgsWSkgPSBSRU0oWCxZKS4gR28gdG8JIworIyAgICAgICAgICAgICAgICBTdGVwIDYuCQkJCQkJIworIyAgICAgICAgICAgIDUuMiBJZiBSID4gWS8yLCB0aGVuIHsgc2V0IExhc3RfU3VidHJhY3QgOj0gdHJ1ZSwJCSMKKyMgICAgICAgICAgICAgICAgUSA6PSBRICsgMSwgWSA6PSBzaWduWSpZIH0uIEdvIHRvIFN0ZXAgNi4JCSMKKyMgICAgICAgICAgICA1LjMgVGhpcyBpcyB0aGUgdHJpY2t5IGNhc2Ugb2YgUiA9IFkvMi4gSWYgUSBpcyBvZGQsCSMKKyMgICAgICAgICAgICAgICAgdGhlbiB7IFEgOj0gUSArIDEsIHNpZ25YIDo9IC1zaWduWCB9LgkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNi4gIFIgOj0gc2lnblgqUi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDcuICBJZiBMYXN0X1N1YnRyYWN0ID0gdHJ1ZSwgUiA6PSBSIC0gWS4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDguICBSZXR1cm4gc2lnblEsIGxhc3QgNyBiaXRzIG9mIFEsIGFuZCBSIGFzIHJlcXVpcmVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDkuICBBdCB0aGlzIHBvaW50LCBSID0gMl4oLWopKlggLSBRIFkgPSBZLiBUaHVzLAkJIworIyAgICAgICAgICAgICAgICBYID0gMl4oaikqKFErMSlZLiBzZXQgUSA6PSAyXihqKSooUSsxKSwJCSMKKyMgICAgICAgICAgICAgICAgUiA6PSAwLiBSZXR1cm4gc2lnblEsIGxhc3QgNyBiaXRzIG9mIFEsIGFuZCBSLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXNldAkJTW9kX0ZsYWcsTF9TQ1IzCisJc2V0CQlTY19GbGFnLExfU0NSMysxCisKKwlzZXQJCVNpZ25ZLExfU0NSMgorCXNldAkJU2lnblgsTF9TQ1IyKzIKKwlzZXQJCVNpZ25RLExfU0NSMysyCisKKwlzZXQJCVksRlBfU0NSMAorCXNldAkJWV9IaSxZKzQKKwlzZXQJCVlfTG8sWSs4CisKKwlzZXQJCVIsRlBfU0NSMQorCXNldAkJUl9IaSxSKzQKKwlzZXQJCVJfTG8sUis4CisKK1NjYWxlOgorCWxvbmcJCTB4MDAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCWdsb2JhbAkJc21vZAorc21vZDoKKwljbHIuYgkJRlBTUl9RQllURSglYTYpCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBjdHJsIGJpdHMKKwljbHIuYgkJTW9kX0ZsYWcoJWE2KQorCWJyYS5iCQlNb2RfUmVtCisKKwlnbG9iYWwJCXNyZW0KK3NyZW06CisJY2xyLmIJCUZQU1JfUUJZVEUoJWE2KQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgY3RybCBiaXRzCisJbW92LmIJCSYweDEsTW9kX0ZsYWcoJWE2KQorCitNb2RfUmVtOgorIy4uU2F2ZSBzaWduIG9mIFggYW5kIFkKKwltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgZGF0YSByZWdpc3RlcnMKKwltb3YudwkJU1JDX0VYKCVhMCksJWQzCisJbW92LncJCSVkMyxTaWduWSglYTYpCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMwkJIyBZIDo9IHxZfAorCisjCisJbW92LmwJCVNSQ19ISSglYTApLCVkNAorCW1vdi5sCQlTUkNfTE8oJWEwKSwlZDUJCSMgKEQzLEQ0LEQ1KSBpcyB8WXwKKworCXRzdC5sCQklZDMKKwlibmUuYgkJWV9Ob3JtYWwKKworCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDMJCSMgJDNGRkQgKyAxCisJdHN0LmwJCSVkNAorCWJuZS5iCQlIaVlfbm90MAorCitIaVlfMDoKKwltb3YubAkJJWQ1LCVkNAorCWNsci5sCQklZDUKKwlzdWIubAkJJjMyLCVkMworCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDQKKwlzdWIubAkJJWQ2LCVkMwkJCSMgKEQzLEQ0LEQ1KSBpcyBub3JtYWxpemVkCisjCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJQ2hrX1gKKworSGlZX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYKKwlzdWIubAkJJWQ2LCVkMworCWxzbC5sCQklZDYsJWQ0CisJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQorCWxzbC5sCQklZDYsJWQ1CisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQ0CQkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJQ2hrX1gKKworWV9Ob3JtYWw6CisJYWRkLmwJCSYweDAwMDAzRkZFLCVkMwkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKworQ2hrX1g6CisJbW92LncJCURTVF9FWCglYTEpLCVkMAorCW1vdi53CQklZDAsU2lnblgoJWE2KQorCW1vdi53CQlTaWduWSglYTYpLCVkMQorCWVvci5sCQklZDAsJWQxCisJYW5kLmwJCSYweDAwMDA4MDAwLCVkMQorCW1vdi53CQklZDEsU2lnblEoJWE2KQkJIyBzaWduKFEpIG9idGFpbmVkCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMAorCW1vdi5sCQlEU1RfSEkoJWExKSwlZDEKKwltb3YubAkJRFNUX0xPKCVhMSksJWQyCQkjIChEMCxEMSxEMikgaXMgfFh8CisJdHN0LmwJCSVkMAorCWJuZS5iCQlYX05vcm1hbAorCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDAKKwl0c3QubAkJJWQxCisJYm5lLmIJCUhpWF9ub3QwCisKK0hpWF8wOgorCW1vdi5sCQklZDIsJWQxCisJY2xyLmwJCSVkMgorCXN1Yi5sCQkmMzIsJWQwCisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlsc2wubAkJJWQ2LCVkMQorCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJSW5pdAorCitIaVhfbm90MDoKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgorCXN1Yi5sCQklZDYsJWQwCisJbHNsLmwJCSVkNiwlZDEKKwltb3YubAkJJWQyLCVkNwkJCSMgYSBjb3B5IG9mIEQyCisJbHNsLmwJCSVkNiwlZDIKKwluZWcubAkJJWQ2CisJYWRkLmwJCSYzMiwlZDYKKwlsc3IubAkJJWQ2LCVkNworCW9yLmwJCSVkNywlZDEJCQkjIChEMCxEMSxEMikgbm9ybWFsaXplZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorCWJyYS5iCQlJbml0CisKK1hfTm9ybWFsOgorCWFkZC5sCQkmMHgwMDAwM0ZGRSwlZDAJCSMgKEQwLEQxLEQyKSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0luaXQ6CisjCisJbW92LmwJCSVkMyxMX1NDUjEoJWE2KQkJIyBzYXZlIGJpYXNlZCBleHAoWSkKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGJpYXNlZCBleHAoWCkKKwlzdWIubAkJJWQzLCVkMAkJCSMgTCA6PSBleHBvKFgpLWV4cG8oWSkKKworCWNsci5sCQklZDYJCQkjIEQ2IDo9IGNhcnJ5IDwtIDAKKwljbHIubAkJJWQzCQkJIyBEMyBpcyBRCisJbW92LmwJCSYwLCVhMQkJCSMgQTEgaXMgazsgaitrPUwsIFE9MAorCisjLi4oQ2FycnksRDEsRDIpIGlzIFIKKwl0c3QubAkJJWQwCisJYmdlLmIJCU1vZF9Mb29wX3ByZQorCisjLi5leHBvKFgpIDwgZXhwbyhZKS4gVGh1cyBYID0gbW9kKFgsWSkKKyMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisJYnJhLncJCUdldF9Nb2QKKworTW9kX0xvb3BfcHJlOgorCWFkZHEubAkJJjB4NCwlc3AJCSMgZXJhc2UgZXhwKFgpCisjLi5BdCB0aGlzIHBvaW50ICBSID0gMl4oLUwpWDsgUSA9IDA7IGsgPSAwOyBhbmQgIGsraiA9IEwKK01vZF9Mb29wOgorCXRzdC5sCQklZDYJCQkjIHRlc3QgY2FycnkgYml0CisJYmd0LmIJCVJfR1RfWQorCisjLi5BdCB0aGlzIHBvaW50IGNhcnJ5ID0gMCwgUiA9IChEMSxEMiksIFkgPSAoRDQsRDUpCisJY21wLmwJCSVkMSwlZDQJCQkjIGNvbXBhcmUgaGkoUikgYW5kIGhpKFkpCisJYm5lLmIJCVJfTkVfWQorCWNtcC5sCQklZDIsJWQ1CQkJIyBjb21wYXJlIGxvKFIpIGFuZCBsbyhZKQorCWJuZS5iCQlSX05FX1kKKworIy4uQXQgdGhpcyBwb2ludCwgUiA9IFkKKwlicmEudwkJUmVtX2lzXzAKKworUl9ORV9ZOgorIy4udXNlIHRoZSBib3Jyb3cgb2YgdGhlIHByZXZpb3VzIGNvbXBhcmUKKwliY3MuYgkJUl9MVF9ZCQkJIyBib3Jyb3cgaXMgc2V0IGlmZiBSIDwgWQorCitSX0dUX1k6CisjLi5JZiBDYXJyeSBpcyBzZXQsIHRoZW4gWSA8IChDYXJyeSxEMSxEMikgPCAyWS4gT3RoZXJ3aXNlLCBDYXJyeSA9IDAKKyMuLmFuZCBZIDwgKEQxLEQyKSA8IDJZLiBFaXRoZXIgd2F5LCBwZXJmb3JtIFIgLSBZCisJc3ViLmwJCSVkNSwlZDIJCQkjIGxvKFIpIC0gbG8oWSkKKwlzdWJ4LmwJCSVkNCwlZDEJCQkjIGhpKFIpIC0gaGkoWSkKKwljbHIubAkJJWQ2CQkJIyBjbGVhciBjYXJyeQorCWFkZHEubAkJJjEsJWQzCQkJIyBRIDo9IFEgKyAxCisKK1JfTFRfWToKKyMuLkF0IHRoaXMgcG9pbnQsIENhcnJ5PTAsIFIgPCBZLiBSID0gMl4oay1MKVggLSBRWTsgaytqID0gTDsgaiA+PSAwLgorCXRzdC5sCQklZDAJCQkjIHNlZSBpZiBqID0gMC4KKwliZXEuYgkJUG9zdExvb3AKKworCWFkZC5sCQklZDMsJWQzCQkJIyBRIDo9IDJRCisJYWRkLmwJCSVkMiwlZDIJCQkjIGxvKFIpID0gMmxvKFIpCisJcm94bC5sCQkmMSwlZDEJCQkjIGhpKFIpID0gMmhpKFIpICsgY2FycnkKKwlzY3MJCSVkNgkJCSMgc2V0IENhcnJ5IGlmIDIoUikgb3ZlcmZsb3dzCisJYWRkcS5sCQkmMSwlYTEJCQkjIGsgOj0gaysxCisJc3VicS5sCQkmMSwlZDAJCQkjIGogOj0gaiAtIDEKKyMuLkF0IHRoaXMgcG9pbnQsIFI9KENhcnJ5LEQxLEQyKSA9IDJeKGstTClYIC0gUVksIGoraz1MLCBqID49IDAsIFIgPCAyWS4KKworCWJyYS5iCQlNb2RfTG9vcAorCitQb3N0TG9vcDoKKyMuLmsgPSBMLCBqID0gMCwgQ2FycnkgPSAwLCBSID0gKEQxLEQyKSA9IFggLSBRWSwgUiA8IFkuCisKKyMuLm5vcm1hbGl6ZSBSLgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJCSMgbmV3IGJpYXNlZCBleHBvIG9mIFIKKwl0c3QubAkJJWQxCisJYm5lLmIJCUhpUl9ub3QwCisKK0hpUl8wOgorCW1vdi5sCQklZDIsJWQxCisJY2xyLmwJCSVkMgorCXN1Yi5sCQkmMzIsJWQwCisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlsc2wubAkJJWQ2LCVkMQorCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJR2V0X01vZAorCitIaVJfbm90MDoKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgorCWJtaS5iCQlHZXRfTW9kCQkJIyBhbHJlYWR5IG5vcm1hbGl6ZWQKKwlzdWIubAkJJWQ2LCVkMAorCWxzbC5sCQklZDYsJWQxCisJbW92LmwJCSVkMiwlZDcJCQkjIGEgY29weSBvZiBEMgorCWxzbC5sCQklZDYsJWQyCisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKKworIworR2V0X01vZDoKKwljbXAubAkJJWQwLCYweDAwMDA0MUZFCisJYmdlLmIJCU5vX1NjYWxlCitEb19TY2FsZToKKwltb3YudwkJJWQwLFIoJWE2KQorCW1vdi5sCQklZDEsUl9IaSglYTYpCisJbW92LmwJCSVkMixSX0xvKCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CisJbW92LncJCSVkNixZKCVhNikKKwltb3YubAkJJWQ0LFlfSGkoJWE2KQorCW1vdi5sCQklZDUsWV9MbyglYTYpCisJZm1vdi54CQlSKCVhNiksJWZwMAkJIyBubyBleGNlcHRpb24KKwltb3YuYgkJJjEsU2NfRmxhZyglYTYpCisJYnJhLmIJCU1vZE9yUmVtCitOb19TY2FsZToKKwltb3YubAkJJWQxLFJfSGkoJWE2KQorCW1vdi5sCQklZDIsUl9MbyglYTYpCisJc3ViLmwJCSYweDNGRkUsJWQwCisJbW92LncJCSVkMCxSKCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CisJc3ViLmwJCSYweDNGRkUsJWQ2CisJbW92LmwJCSVkNixMX1NDUjEoJWE2KQorCWZtb3YueAkJUiglYTYpLCVmcDAKKwltb3YudwkJJWQ2LFkoJWE2KQorCW1vdi5sCQklZDQsWV9IaSglYTYpCisJbW92LmwJCSVkNSxZX0xvKCVhNikKKwljbHIuYgkJU2NfRmxhZyglYTYpCisKKyMKK01vZE9yUmVtOgorCXRzdC5iCQlNb2RfRmxhZyglYTYpCisJYmVxLmIJCUZpeF9TaWduCisKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CQkjIG5ldyBiaWFzZWQgZXhwbyhZKQorCXN1YnEubAkJJjEsJWQ2CQkJIyBiaWFzZWQgZXhwbyhZLzIpCisJY21wLmwJCSVkMCwlZDYKKwlibHQuYgkJRml4X1NpZ24KKwliZ3QuYgkJTGFzdF9TdWIKKworCWNtcC5sCQklZDEsJWQ0CisJYm5lLmIJCU5vdF9FUQorCWNtcC5sCQklZDIsJWQ1CisJYm5lLmIJCU5vdF9FUQorCWJyYS53CQlUaWVfQ2FzZQorCitOb3RfRVE6CisJYmNzLmIJCUZpeF9TaWduCisKK0xhc3RfU3ViOgorIworCWZzdWIueAkJWSglYTYpLCVmcDAJCSMgbm8gZXhjZXB0aW9ucworCWFkZHEubAkJJjEsJWQzCQkJIyBRIDo9IFEgKyAxCisKKyMKK0ZpeF9TaWduOgorIy4uR2V0IHNpZ24gb2YgWAorCW1vdi53CQlTaWduWCglYTYpLCVkNgorCWJnZS5iCQlHZXRfUQorCWZuZWcueAkJJWZwMAorCisjLi5HZXQgUQorIworR2V0X1E6CisJY2xyLmwJCSVkNgorCW1vdi53CQlTaWduUSglYTYpLCVkNgkJIyBENiBpcyBzaWduKFEpCisJbW92LmwJCSY4LCVkNworCWxzci5sCQklZDcsJWQ2CisJYW5kLmwJCSYweDAwMDAwMDdGLCVkMwkJIyA3IGJpdHMgb2YgUQorCW9yLmwJCSVkNiwlZDMJCQkjIHNpZ24gYW5kIGJpdHMgb2YgUQorIwlzd2FwCQklZDMKKyMJZm1vdi5sCQklZnBzciwlZDYKKyMJYW5kLmwJCSYweEZGMDBGRkZGLCVkNgorIwlvci5sCQklZDMsJWQ2CisjCWZtb3YubAkJJWQ2LCVmcHNyCQkjIHB1dCBRIGluIGZwc3IKKwltb3YuYgkJJWQzLEZQU1JfUUJZVEUoJWE2KQkjIHB1dCBRIGluIGZwc3IKKworIworUmVzdG9yZToKKwltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyAgeyVkMi0lZDd9CisJbW92LmwJCSglc3ApKywlZDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCXRzdC5iCQlTY19GbGFnKCVhNikKKwliZXEuYgkJRmluaXNoCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQlTY2FsZSglcGMpLCVmcDAJCSMgbWF5IGNhdXNlIHVuZGVyZmxvdworCWJyYQkJdF9jYXRjaDIKKyMgdGhlICcwNDAgcGFja2FnZSBkaWQgdGhpcyBhcHBhcmVudGx5IHRvIHNlZSBpZiB0aGUgZHN0IG9wZXJhbmQgZm9yIHRoZQorIyBwcmVjZWRpbmcgZm11bCB3YXMgYSBkZW5vcm0uIGJ1dCwgaXQgYmV0dGVyIG5vdCBoYXZlIGJlZW4gc2luY2UgdGhlCisjIGFsZ29yaXRobSBqdXN0IGdvdCBkb25lIHBsYXlpbmcgd2l0aCBmcDAgYW5kIGV4cGVjdGVkIG5vIGV4Y2VwdGlvbnMKKyMgYXMgYSByZXN1bHQuIHRydXN0IG1lLi4uCisjCWJyYQkJdF9hdm9pZF91bnN1cHAJCSMgY2hlY2sgZm9yIGRlbm9ybSBhcyBhCisjCQkJCQkJO3Jlc3VsdCBvZiB0aGUgc2NhbGluZworCitGaW5pc2g6CisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJJWZwMCwlZnAwCQkjIGNhcHR1cmUgZXhjZXB0aW9ucyAmIHJvdW5kCisJYnJhCQl0X2NhdGNoMgorCitSZW1faXNfMDoKKyMuLlIgPSAyXigtailYIC0gUSBZID0gWSwgdGh1cyBSID0gMCBhbmQgcXVvdGllbnQgPSAyXmogKFErMSkKKwlhZGRxLmwJCSYxLCVkMworCWNtcC5sCQklZDAsJjgJCQkjIEQwIGlzIGoKKwliZ2UuYgkJUV9CaWcKKworCWxzbC5sCQklZDAsJWQzCisJYnJhLmIJCVNldF9SXzAKKworUV9CaWc6CisJY2xyLmwJCSVkMworCitTZXRfUl8wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAorCWNsci5iCQlTY19GbGFnKCVhNikKKwlicmEudwkJRml4X1NpZ24KKworVGllX0Nhc2U6CisjLi5DaGVjayBwYXJpdHkgb2YgUQorCW1vdi5sCQklZDMsJWQ2CisJYW5kLmwJCSYweDAwMDAwMDAxLCVkNgorCXRzdC5sCQklZDYKKwliZXEudwkJRml4X1NpZ24JCSMgUSBpcyBldmVuCisKKyMuLlEgaXMgb2RkLCBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblgKKwlhZGRxLmwJCSYxLCVkMworCW1vdi53CQlTaWduWCglYTYpLCVkNgorCWVvci5sCQkmMHgwMDAwODAwMCwlZDYKKwltb3YudwkJJWQ2LFNpZ25YKCVhNikKKwlicmEudwkJRml4X1NpZ24KKworcW5hbjoJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXRfZHooKTogSGFuZGxlIERaIGV4Y2VwdGlvbiBkdXJpbmcgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uLgkjCisjCSAgICAgICAgU2V0cyBOIGJpdCBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzb3VyY2Ugb3BlcmFuZC4JCSMKKyMJdF9kejIoKTogSGFuZGxlIERaIGV4Y2VwdGlvbiBkdXJpbmcgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uLgkjCisjCQkgU2V0cyBOIGJpdCBhbHdheXMuCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBTdG9yZSBwcm9wZXJseSBzaWduZWQgSU5GIGludG8gZnAwLgkJCQkjCisjCS0gU2V0IEZQU1IgZXhjZXB0aW9uIHN0YXR1cyBkeiBiaXQsIGNjb2RlIGluZiBiaXQsIGFuZAkJIworIwkgIGFjY3J1ZWQgZHogYml0LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfZHoKK3RfZHo6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIG5vOyBpcyBzcmMgbmVnYXRpdmU/CisJYm1pLmIJCXRfZHoyCQkJIyB5ZXMKKworZHpfcGluZjoKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyByZXR1cm4gK0lORiBpbiBmcDAKKwlvcmkubAkJJmR6aW5mX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgSS9EWi9BRFoKKwlydHMKKworCWdsb2JhbAkJdF9kejIKK3RfZHoyOgorCWZtb3YucwkJJjB4ZmY4MDAwMDAsJWZwMAkjIHJldHVybiAtSU5GIGluIGZwMAorCW9yaS5sCQkmZHppbmZfbWFzaytuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOL0kvRFovQURaCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9QRVJSIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gc2V0IEZQU1IgZXhjZXB0aW9uIHN0YXR1cyBvcGVyciBiaXQsIGNvbmRpdGlvbiBjb2RlCSMKKyMJICBuYW4gYml0OyBTdG9yZSBkZWZhdWx0IE5BTiBpbnRvIGZwMAkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQl0X29wZXJyCit0X29wZXJyOgorCW9yaS5sCQkmb3BuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOYU4vT1BFUlIvQUlPUAorCWZtb3ZtLngJCXFuYW4oJXBjKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCBOQU4gaW4gZnAwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEV4dGVuZGVkIERFTk9STToJCQkJCQkjCisjCS0gRm9yIGFsbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgZGVub3JtYWxpemVkIGlucHV0IGFuZAkjCisjCSAgdGhhdCBmKHgpPXgsIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LgkJCSMKKyMJLSB3ZSBvbmx5IHJldHVybiB0aGUgRVhPUCBoZXJlIGlmIGVpdGhlciB1bmRlcmZsb3cgb3IJIworIwkgIGluZXhhY3QgaXMgZW5hYmxlZC4JCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRW50cnkgcG9pbnQgZm9yIHNjYWxlIHcvIGV4dGVuZGVkIGRlbm9ybS4gVGhlIGZ1bmN0aW9uIGRvZXMKKyMgTk9UIHNldCBJTkVYMi9BVU5GTC9BSU5FWC4KKwlnbG9iYWwJCXRfcmVzZG5ybQordF9yZXNkbnJtOgorCW9yaS5sCQkmdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IFVORkwKKwlicmEuYgkJeGRucm1fY29uCisKKwlnbG9iYWwJCXRfZXh0ZG5ybQordF9leHRkbnJtOgorCW9yaS5sCQkmdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgVU5GTC9JTkVYMi9BVU5GTC9BSU5FWAorCit4ZG5ybV9jb246CisJbW92LmwJCSVhMCwlYTEJCQkjIG1ha2UgY29weSBvZiBzcmMgcHRyCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgY29weSBvZiBybmQgcHJlYyxtb2RlCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uPworCWJuZS5iCQl4ZG5ybV9zZAkJIyBubworCisjIHJlc3VsdCBwcmVjaXNpb24gaXMgZXh0ZW5kZWQuCisJdHN0LmIJCUxPQ0FMX0VYKCVhMCkJCSMgaXMgZGVub3JtIG5lZ2F0aXZlPworCWJwbC5iCQl4ZG5ybV9leGl0CQkjIG5vCisKKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCAnTicgY2NvZGUgYml0CisJYnJhLmIJCXhkbnJtX2V4aXQKKworIyByZXN1bHQgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUKK3hkbnJtX3NkOgorCW1vdi5sCQklYTEsLSglc3ApCisJdHN0LmIJCUxPQ0FMX0VYKCVhMCkJCSMgaXMgZGVub3JtIHBvcyBvciBuZWc/CisJc21pLmIJCSVkMQkJCSMgc2V0IGQwIGFjY29kaW5nbHkKKwlic3IubAkJdW5mX3N1YgorCW1vdi5sCQkoJXNwKSssJWExCit4ZG5ybV9leGl0OgorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAorCWFuZGkuYgkJJjB4MGEsJWQwCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQl4ZG5ybV9lbmEJCSMgeWVzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMKKyMgdW5mbCBlbmFibGVkICMKKyMjIyMjIyMjIyMjIyMjIyMKKyMgd2UgaGF2ZSBhIERFTk9STSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGFuIEVYT1AuCisjIHNvLCBub3JtYWxpemUgdGhlIG1hbnRpc3NhLCBhZGQgMHg2MDAwIHRvIHRoZSBuZXcgZXhwb25lbnQsCisjIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiBmcDEuCit4ZG5ybV9lbmE6CisJbW92LncJCUxPQ0FMX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCUxPQ0FMX0hJKCVhMSksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCUxPQ0FMX0xPKCVhMSksRlBfU0NSMF9MTyglYTYpCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCisJYWRkaS5sCQkmMHg2MDAwLCVkMAkJIyBhZGQgZXh0cmEgYmlhcworCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVTkZMIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gVGhpcyByb3V0aW5lIGlzIGZvciBjYXNlcyB3aGVyZSBldmVuIGFuIEVYT1AgaXNuJ3QJIworIwkgIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByYW5nZSBvZiB0aGlzIHJlc3VsdC4JIworIwkgIEluIHN1Y2ggYSBjYXNlLCB0aGUgRVhPUCBlcXVhbHMgemVyby4JCQkjCisjCS0gUmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdCB0byB0aGUgcHJvcGVyIHByZWNpc2lvbgkjCisjCSAgd2l0aCB0aGUgc2lnbiBvZiB0aGlzIHJlc3VsdCBiZWluZyB0aGUgc2FtZSBhcyB0aGF0CSMKKyMJICBvZiB0aGUgc3JjIG9wZXJhbmQuCQkJCQkjCisjCS0gdF91bmZsMigpIGlzIHByb3ZpZGVkIHRvIGZvcmNlIHRoZSByZXN1bHQgc2lnbiB0bwkjCisjCSAgcG9zaXRpdmUgd2hpY2ggaXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvciBmZXRveCgpLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJdF91bmZsCit0X3VuZmw6CisJb3JpLmwJCSZ1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBVTkZML0lORVgyL0FVTkZML0FJTkVYCisKKwl0c3QuYgkJKCVhMCkJCQkjIGlzIHJlc3VsdCBwb3Mgb3IgbmVnPworCXNtaS5iCQklZDEJCQkjIHNldCBkMSBhY2NvcmRpbmdseQorCWJzci5sCQl1bmZfc3ViCQkJIyBjYWxjIGRlZmF1bHQgdW5mbCByZXN1bHQKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDEJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIyB0X3VuZmwyIEFMV0FZUyB0ZWxscyB1bmZfc3ViIHRvIGNyZWF0ZSBhIHBvc2l0aXZlIHJlc3VsdAorCWdsb2JhbAkJdF91bmZsMgordF91bmZsMjoKKwlvcmkubAkJJnVuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IFVORkwvSU5FWDIvQVVORkwvQUlORVgKKworCXNmLmIJCSVkMQkJCSMgc2V0IGQwIHRvIHJlcHJlc2VudCBwb3NpdGl2ZQorCWJzci5sCQl1bmZfc3ViCQkJIyBjYWxjIGRlZmF1bHQgdW5mbCByZXN1bHQKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisKKwlmbW92LnMJCSYweDAwMDAwMDAsJWZwMQkJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT1ZGTCBleGNlcHRpb246CQkJCQkJIworIwktIFRoaXMgcm91dGluZSBpcyBmb3IgY2FzZXMgd2hlcmUgZXZlbiBhbiBFWE9QIGlzbid0CSMKKyMJICBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmFuZ2Ugb2YgdGhpcyByZXN1bHQuCSMKKyMJLSBSZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uCSMKKyMJICB3aXRoIHRoZSBzaWduIG9mIHRoaXMgcmVzdWx0IGJlaW5nIHRoZSBzYW1lIGFzIHRoYXQJIworIwkgIG9mIHRoZSBzcmMgb3BlcmFuZC4JCQkJCSMKKyMJLSB0X292ZmwyKCkgaXMgcHJvdmlkZWQgdG8gZm9yY2UgdGhlIHJlc3VsdCBzaWduIHRvCSMKKyMJICBwb3NpdGl2ZSB3aGljaCBpcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9yIGZjb3NoKCkuCSMKKyMJLSB0X292Zmxfc2MoKSBpcyBwcm92aWRlZCBmb3Igc2NhbGUoKSB3aGljaCBvbmx5IHNldHMJIworIwkgIHRoZSBpbmV4YWN0IGJpdHMgaWYgdGhlIG51bWJlciBpcyBpbmV4YWN0IGZvciB0aGUJIworIwkgIHByZWNpc2lvbiBpbmRpY2F0ZWQuCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X292Zmxfc2MKK3Rfb3ZmbF9zYzoKKwlvcmkubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgT1ZGTC9BT1ZGTC9BSU5FWAorCisJbW92LmIJCSVkMCwlZDEJCQkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBleHRyYWN0IHJuZCBwcmVjCisJYmVxLmIJCW92Zmxfd29yawkJIyBwcmVjIGlzIGV4dGVuZGVkCisKKwl0c3QuYgkJTE9DQUxfSEkoJWEwKQkJIyBpcyBkc3QgYSBERU5PUk0/CisJYm1pLmIJCW92Zmxfc2Nfbm9ybQkJIyBubworCisjIGRzdCBvcCBpcyBhIERFTk9STS4gd2UgaGF2ZSB0byBub3JtYWxpemUgdGhlIG1hbnRpc3NhIHRvIHNlZSBpZiB0aGUKKyMgcmVzdWx0IHdvdWxkIGJlIGluZXhhY3QgZm9yIHRoZSBnaXZlbiBwcmVjaXNpb24uIG1ha2UgYSBjb3B5IG9mIHRoZQorIyBkc3Qgc28gd2UgZG9uJ3Qgc2NyZXcgdXAgdGhlIHZlcnNpb24gcGFzc2VkIHRvIHVzLgorCW1vdi53CQlMT0NBTF9FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlMT0NBTF9ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlMT0NBTF9MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIEZQX1NDUjAKKwltb3ZtLmwJCSYweGMwODAsLSglc3ApCQkjIHNhdmUgZDAtZDEvYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCisJbW92bS5sCQkoJXNwKSssJjB4MDEwMwkJIyByZXN0b3JlIGQwLWQxL2EwCisKK292Zmxfc2Nfbm9ybToKKwljbXBpLmIJCSVkMSwmMHg0MAkJIyBpcyBwcmVjIGRibD8KKwlibmUuYgkJb3ZmbF9zY19kYmwJCSMgbm87IHNnbAorb3ZmbF9zY19zZ2w6CisJdHN0LmwJCUxPQ0FMX0xPKCVhMCkJCSMgaXMgbG8gbHcgb2Ygc2dsIHNldD8KKwlibmUuYgkJb3ZmbF9zY19pbngJCSMgeWVzCisJdHN0LmIJCTMrTE9DQUxfSEkoJWEwKQkJIyBpcyBsbyBieXRlIG9mIGhpIGx3IHNldD8KKwlibmUuYgkJb3ZmbF9zY19pbngJCSMgeWVzCisJYnJhLmIJCW92Zmxfd29yawkJIyBkb24ndCBzZXQgSU5FWDIKK292Zmxfc2NfZGJsOgorCW1vdi5sCQlMT0NBTF9MTyglYTApLCVkMQkjIGFyZSBhbnkgb2YgbG8gMTEgYml0cyBvZgorCWFuZGkubAkJJjB4N2ZmLCVkMQkJIyBkYmwgbWFudGlzc2Egc2V0PworCWJlcS5iCQlvdmZsX3dvcmsJCSMgbm87IGRvbid0IHNldCBJTkVYMgorb3ZmbF9zY19pbng6CisJb3JpLmwJCSZpbmV4Ml9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IElORVgyCisJYnJhLmIJCW92Zmxfd29yawkJIyBjb250aW51ZQorCisJZ2xvYmFsCQl0X292ZmwKK3Rfb3ZmbDoKKwlvcmkubAkJJm92ZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE9WRkwvSU5FWDIvQU9WRkwvQUlORVgKKworb3ZmbF93b3JrOgorCXRzdC5iCQlMT0NBTF9FWCglYTApCQkjIHdoYXQgaXMgdGhlIHNpZ24/CisJc21pLmIJCSVkMQkJCSMgc2V0IGQxIGFjY29yZGluZ2x5CisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGMgZGVmYXVsdCBvdmZsIHJlc3VsdAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IG5ldyBjY29kZXMKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDEJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIyB0X292ZmwyIEFMV0FZUyB0ZWxscyBvdmZfcmVzIHRvIGNyZWF0ZSBhIHBvc2l0aXZlIHJlc3VsdAorCWdsb2JhbAkJdF9vdmZsMgordF9vdmZsMjoKKwlvcmkubAkJJm92ZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE9WRkwvSU5FWDIvQU9WRkwvQUlORVgKKworCXNmLmIJCSVkMQkJCSMgY2xlYXIgc2lnbiBmbGFnIGZvciBwb3NpdGl2ZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgb3ZmbCByZXN1bHQKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBuZXcgY2NvZGVzCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRfY2F0Y2goKToJCQkJCQkJIworIwktIHRoZSBsYXN0IG9wZXJhdGlvbiBvZiBhIHRyYW5zY2VuZGVudGFsIGVtdWxhdGlvbgkjCisjCSAgcm91dGluZSBtYXkgaGF2ZSBjYXVzZWQgYW4gdW5kZXJmbG93IG9yIG92ZXJmbG93LgkjCisjCSAgd2UgZmluZCBvdXQgaWYgdGhpcyBvY2N1cnJlZCBieSBkb2luZyBhbiBmc2F2ZSBhbmQJIworIwkgIGNoZWNraW5nIHRoZSBleGNlcHRpb24gYml0LiBpZiBvbmUgZGlkIG9jY3VyLCB0aGVuIHdlCSMKKyMJICBqdW1wIHRvIGZnZW5fZXhjZXB0KCkgd2hpY2ggY3JlYXRlcyB0aGUgZGVmYXVsdAkjCisjCSAgcmVzdWx0IGFuZCBFWE9QIGZvciB1cy4JCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXRfY2F0Y2gKK3RfY2F0Y2g6CisKKwlmc2F2ZQkJLSglc3ApCisJdHN0LmIJCTB4Miglc3ApCisJYm1pLmIJCWNhdGNoCisJYWRkLmwJCSYweGMsJXNwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElORVgyIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gVGhlIGluZXgyIGFuZCBhaW5leCBiaXRzIGFyZSBzZXQuCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXRfaW54MgordF9pbngyOgorCWZibHQudwkJdF9taW54MgorCWZiZXEudwkJaW54Ml96ZXJvCisKKwlnbG9iYWwJCXRfcGlueDIKK3RfcGlueDI6CisJb3JpLncJCSZpbngyYV9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgSU5FWDIvQUlORVgKKwlydHMKKworCWdsb2JhbAkJdF9taW54MgordF9taW54MjoKKwlvcmkubAkJJmlueDJhX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9JTkVYMi9BSU5FWAorCXJ0cworCitpbngyX3plcm86CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQorCW9yaS53CQkmaW54MmFfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IElORVgyL0FJTkVYCisJcnRzCisKKyMgYW4gdW5kZXJmbG93IG9yIG92ZXJmbG93IGV4Y2VwdGlvbiBvY2N1cnJlZC4KKyMgd2UgbXVzdCBzZXQgSU5FWC9BSU5FWCBzaW5jZSB0aGUgZm11bC9mZGl2L2Ztb3YgZW11bGF0aW9uIG1heSBub3QhCitjYXRjaDoKKwlvcmkudwkJJmlueDJhX21hc2ssRlBTUl9FWENFUFQoJWE2KQorY2F0Y2gyOgorCWJzci5sCQlmZ2VuX2V4Y2VwdAorCWFkZC5sCQkmMHhjLCVzcAorCXJ0cworCisJZ2xvYmFsCQl0X2NhdGNoMgordF9jYXRjaDI6CisKKwlmc2F2ZQkJLSglc3ApCisKKwl0c3QuYgkJMHgyKCVzcCkKKwlibWkuYgkJY2F0Y2gyCisJYWRkLmwJCSYweGMsJXNwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQorCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB1bmZfcmVzKCk6IHVuZGVyZmxvdyBkZWZhdWx0IHJlc3VsdCBjYWxjdWxhdGlvbiBmb3IgdHJhbnNjZW5kZW50YWxzCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUOgkJCQkJCQkJIworIwlkMCAgIDogcm5kIG1vZGUscHJlY2lzaW9uCQkJCQkjCisjCWQxLmIgOiBzaWduIGJpdCBvZiByZXN1bHQgKCcxMTExMTExMSA9ICgtKSA7ICcwMDAwMDAwMCA9ICgrKSkJIworIyBPVVRQVVQ6CQkJCQkJCQkjCisjCWEwICAgOiBwb2ludHMgdG8gcmVzdWx0IChpbiBpbnN0cnVjdGlvbiBtZW1vcnkpCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordW5mX3N1YjoKKwlvcmkubAkJJnVuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisKKwlhbmRpLncJCSYweDEwLCVkMQkJIyBrZWVwIHNpZ24gYml0IGluIDR0aCBzcG90CisKKwlsc3IuYgkJJjB4NCwlZDAJCSMgc2hpZnQgcm5kIHByZWMsbW9kZSB0byBsbyBiaXRzCisJYW5kaS5iCQkmMHhmLCVkMAkJIyBzdHJpcCBoaSBybmQgbW9kZSBiaXQKKwlvci5iCQklZDEsJWQwCQkJIyBjb25jYXQge3Nnbixtb2RlLHByZWN9CisKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKwlsc2wuYgkJJjB4MSwlZDEJCSMgbXVsdCBpbmRleCAyIGJ5IDIKKworCW1vdi5iCQkodGJsX3VuZl9jYy5iLCVwYywlZDAudyoxKSxGUFNSX0NDKCVhNikgIyBpbnNlcnQgY2NvZGUgYml0cworCWxlYQkJKHRibF91bmZfcmVzdWx0LmIsJXBjLCVkMS53KjgpLCVhMCAjIGdyYWIgcmVzdWx0IHB0cgorCXJ0cworCit0YmxfdW5mX2NjOgorCWJ5dGUJCTB4NCwgMHg0LCAweDQsIDB4MAorCWJ5dGUJCTB4NCwgMHg0LCAweDQsIDB4MAorCWJ5dGUJCTB4NCwgMHg0LCAweDQsIDB4MAorCWJ5dGUJCTB4MCwgMHgwLCAweDAsIDB4MAorCWJ5dGUJCTB4OCsweDQsIDB4OCsweDQsIDB4OCwgMHg4KzB4NAorCWJ5dGUJCTB4OCsweDQsIDB4OCsweDQsIDB4OCwgMHg4KzB4NAorCWJ5dGUJCTB4OCsweDQsIDB4OCsweDQsIDB4OCwgMHg4KzB4NAorCit0YmxfdW5mX3Jlc3VsdDoKKwlsb25nCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2V4dAorCWxvbmcJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0CisJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKKwlsb25nCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAgIyBNSU47IGV4dAorCisJbG9uZwkJMHgzZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKKwlsb25nCQkweDNmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAorCWxvbmcJCTB4M2Y4MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87c2dsCisJbG9uZwkJMHgzZjgxMDAwMCwgMHgwMDAwMDEwMCwgMHgwMDAwMDAwMCwgMHgwICMgTUlOOyBzZ2wKKworCWxvbmcJCTB4M2MwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCisJbG9uZwkJMHgzYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSMDtkYmwKKwlsb25nCQkweDNjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2RibAorCWxvbmcJCTB4M2MwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDA4MDAsIDB4MCAjIE1JTjsgZGJsCisKKwlsb25nCQkweDAsMHgwLDB4MCwweDAKKwlsb25nCQkweDAsMHgwLDB4MCwweDAKKwlsb25nCQkweDAsMHgwLDB4MCwweDAKKwlsb25nCQkweDAsMHgwLDB4MCwweDAKKworCWxvbmcJCTB4ODAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0CisJbG9uZwkJMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKKwlsb25nCQkweDgwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAgIyBNSU47IGV4dAorCWxvbmcJCTB4ODAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0CisKKwlsb25nCQkweGJmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAorCWxvbmcJCTB4YmY4MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87c2dsCisJbG9uZwkJMHhiZjgxMDAwMCwgMHgwMDAwMDEwMCwgMHgwMDAwMDAwMCwgMHgwICMgTUlOOyBzZ2wKKwlsb25nCQkweGJmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAorCisJbG9uZwkJMHhiYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztkYmwKKwlsb25nCQkweGJjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2RibAorCWxvbmcJCTB4YmMwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDA4MDAsIDB4MCAjIE1JTjsgZGJsCisJbG9uZwkJMHhiYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztkYmwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX3plcm8oKTogUmV0dXJuIHNpZ25lZCB6ZXJvIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcmNfemVybworc3JjX3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGdldCBzaWduIG9mIHNyYyBvcGVyYW5kCisJYm1pLmIJCWxkX216ZXJvCQkjIGlmIG5lZywgbG9hZCBuZWcgemVybworCisjCisjIGxkX3B6ZXJvKCk6IHJldHVybiBhIHBvc2l0aXZlIHplcm8uCisjCisJZ2xvYmFsCQlsZF9wemVybworbGRfcHplcm86CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCArMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworCisjIGxkX216ZXJvKCk6IHJldHVybiBhIG5lZ2F0aXZlIHplcm8uCisJZ2xvYmFsCQlsZF9temVybworbGRfbXplcm86CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCAtMAorCW1vdi5iCQkmbmVnX2JtYXNrK3pfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnWicgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRzdF96ZXJvKCk6IFJldHVybiBzaWduZWQgemVybyBhY2NvcmRpbmcgdG8gc2lnbiBvZiBkc3Qgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJZHN0X3plcm8KK2RzdF96ZXJvOgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBnZXQgc2lnbiBvZiBkc3Qgb3BlcmFuZAorCWJtaS5iCQlsZF9temVybwkJIyBpZiBuZWcsIGxvYWQgbmVnIHplcm8KKwlicmEuYgkJbGRfcHplcm8JCSMgbG9hZCBwb3NpdGl2ZSB6ZXJvCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX2luZigpOiBSZXR1cm4gc2lnbmVkIGluZiBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JjX2luZgorc3JjX2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgZ2V0IHNpZ24gb2Ygc3JjIG9wZXJhbmQKKwlibWkuYgkJbGRfbWluZgkJCSMgaWYgbmVnYXRpdmUgYnJhbmNoCisKKyMKKyMgbGRfcGluZigpOiByZXR1cm4gYSBwb3NpdGl2ZSBpbmZpbml0eS4KKyMKKwlnbG9iYWwJCWxkX3BpbmYKK2xkX3BpbmY6CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbG9hZCArSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJTkYnIGNjb2RlIGJpdAorCXJ0cworCisjCisjIGxkX21pbmYoKTpyZXR1cm4gYSBuZWdhdGl2ZSBpbmZpbml0eS4KKyMKKwlnbG9iYWwJCWxkX21pbmYKK2xkX21pbmY6CisJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgbG9hZCAtSU5GCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCAnTicsJ0knIGNjb2RlIGJpdHMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkc3RfaW5mKCk6IFJldHVybiBzaWduZWQgaW5mIGFjY29yZGluZyB0byBzaWduIG9mIGRzdCBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlkc3RfaW5mCitkc3RfaW5mOgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBnZXQgc2lnbiBvZiBkc3Qgb3BlcmFuZAorCWJtaS5iCQlsZF9taW5mCQkJIyBpZiBuZWdhdGl2ZSBicmFuY2gKKwlicmEuYgkJbGRfcGluZgorCisJZ2xvYmFsCQlzenJfaW5mCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzenJfaW5mKCk6IFJldHVybiArWkVSTyBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZCBvcgkJIworIwkgICAgICAgICAgICArSU5GIGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kLgkJIworIwkgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3gsIGZ0d290b3gsIGFuZCBmdGVudG94LgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3pyX2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfcHplcm8KKwlicmEuYgkJbGRfcGluZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNvcHJfaW5mKCk6IFJldHVybiArSU5GIGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kIG9yCQkJIworIwkgICAgICBqdW1wIHRvIG9wZXJhbmQgZXJyb3Igcm91dGluZSBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZC4JIworIwkgICAgICBSb3V0aW5lIHVzZWQgZm9yIGZsb2duLCBmbG9nbnAxLCBmbG9nMTAsIGFuZCBmbG9nMi4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc29wcl9pbmYKK3NvcHJfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS53CQl0X29wZXJyCisJYnJhLmIJCWxkX3BpbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2V0b3htMWkoKTogUmV0dXJuIG1pbnVzIG9uZSBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZCBvcgkjCisjCSAgICAgIHBvc2l0aXZlIGluZmluaXR5IGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kLgkjCisjCSAgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3htMS4JCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNldG94bTFpCitzZXRveG0xaToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfbW9uZQorCWJyYS5iCQlsZF9waW5mCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX29uZSgpOiBSZXR1cm4gc2lnbmVkIG9uZSBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JjX29uZQorc3JjX29uZToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfbW9uZQorCisjCisjIGxkX3BvbmUoKTogcmV0dXJuIHBvc2l0aXZlIG9uZS4KKyMKKwlnbG9iYWwJCWxkX3BvbmUKK2xkX3BvbmU6CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAwCSMgbG9hZCArMQorCWNsci5iCQlGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBsZF9tb25lKCk6IHJldHVybiBuZWdhdGl2ZSBvbmUuCisjCisJZ2xvYmFsCQlsZF9tb25lCitsZF9tb25lOgorCWZtb3YucwkJJjB4YmY4MDAwMDAsJWZwMAkjIGxvYWQgLTEKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCitwcGlieTI6CWxvbmcJCTB4M2ZmZjAwMDAsIDB4YzkwZmRhYTIsIDB4MjE2OGMyMzUKK21waWJ5MjoJbG9uZwkJMHhiZmZmMDAwMCwgMHhjOTBmZGFhMiwgMHgyMTY4YzIzNQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzcGlfMigpOiBSZXR1cm4gc2lnbmVkIFBJLzIgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcGlfMgorc3BpXzI6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLmIJCWxkX21waTIKKworIworIyBsZF9wcGkyKCk6IHJldHVybiBwb3NpdGl2ZSBQSS8yLgorIworCWdsb2JhbAkJbGRfcHBpMgorbGRfcHBpMjoKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtb3YueAkJcHBpYnkyKCVwYyksJWZwMAkjIGxvYWQgK3BpLzIKKwlicmEudwkJdF9waW54MgkJCSMgc2V0IElORVgyCisKKyMKKyMgbGRfbXBpMigpOiByZXR1cm4gbmVnYXRpdmUgUEkvMi4KKyMKKwlnbG9iYWwJCWxkX21waTIKK2xkX21waTI6CisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbW92LngJCW1waWJ5MiglcGMpLCVmcDAJIyBsb2FkIC1waS8yCisJYnJhLncJCXRfbWlueDIJCQkjIHNldCBJTkVYMgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZ2l2ZSBzdXBwb3J0IGZvciBmc2luY29zLiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgc3NpbmNvc3ooKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgWkVSTywgc3RvcmUgYSBvbmUgaW4gdGhlCisjCSAgICAgIGNvc2luZSByZWdpc3RlciBhbmQgcmV0dXJuIGEgWkVSTyBpbiBmcDAgdy8gdGhlIHNhbWUgc2lnbgorIwkgICAgICBhcyB0aGUgc3JjIG9wZXJhbmQuCisjCisJZ2xvYmFsCQlzc2luY29zegorc3NpbmNvc3o6CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIHRlc3Qgc2lnbgorCWJwbC5iCQlzaW5jb3N6cAorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiBzaW4gcmVzdWx0IGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCisJYnJhLmIJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKK3NpbmNvc3pwOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiBzaW4gcmVzdWx0IGluIGZwMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikKKwlicmEuYgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCisjCisjIHNzaW5jb3NpKCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIElORiwgc3RvcmUgYSBRTkFOIGluIHRoZSBjb3NpbmUKKyMJICAgICAgcmVnaXN0ZXIgYW5kIGp1bXAgdG8gdGhlIG9wZXJhbmQgZXJyb3Igcm91dGluZSBmb3IgbmVnYXRpdmUKKyMJICAgICAgc3JjIG9wZXJhbmRzLgorIworCWdsb2JhbAkJc3NpbmNvc2kKK3NzaW5jb3NpOgorCWZtb3YueAkJcW5hbiglcGMpLCVmcDEJCSMgbG9hZCBOQU4KKwlic3IubAkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWJyYS53CQl0X29wZXJyCisKKyMKKyMgc3NpbmNvc3FuYW4oKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgYSBRTkFOLCBzdG9yZSB0aGUgUU5BTiBpbiB0aGUgY29zaW5lCisjCQkgcmVnaXN0ZXIgYW5kIGJyYW5jaCB0byB0aGUgc3JjIFFOQU4gcm91dGluZS4KKyMKKwlnbG9iYWwJCXNzaW5jb3NxbmFuCitzc2luY29zcW5hbjoKKwlmbW92LngJCUxPQ0FMX0VYKCVhMCksJWZwMQorCWJzci5sCQlzdG9fY29zCisJYnJhLncJCXNyY19xbmFuCisKKyMKKyMgc3NpbmNvc3NuYW4oKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgYW4gU05BTiwgc3RvcmUgdGhlIFNOQU4gdy8gdGhlIFNOQU4gYml0IHNldAorIwkJIGluIHRoZSBjb3NpbmUgcmVnaXN0ZXIgYW5kIGJyYW5jaCB0byB0aGUgc3JjIFNOQU4gcm91dGluZS4KKyMKKwlnbG9iYWwJCXNzaW5jb3NzbmFuCitzc2luY29zc25hbjoKKwlmbW92LngJCUxPQ0FMX0VYKCVhMCksJWZwMQorCWJzci5sCQlzdG9fY29zCisJYnJhLncJCXNyY19zbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0b19jb3MoKTogc3RvcmUgZnAxIHRvIHRoZSBmcHJlZyBkZXNpZ25hdGVkIGJ5IHRoZSBDTURSRUcgZHN0IGZpZWxkLgkjCisjCSAgICAgZnAxIGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNvc2luZSBwb3J0aW9uIG9mIHNzaW5jb3MoKS4JIworIwkgICAgIHRoZSB2YWx1ZSBpbiBmcDEgd2lsbCBub3QgdGFrZSBhbnkgZXhjZXB0aW9ucyB3aGVuIG1vdmVkLgkjCisjIElOUFVUOgkJCQkJCQkJIworIwlmcDEgOiBmcCB2YWx1ZSB0byBzdG9yZQkJCQkJCSMKKyMgTU9ESUZJRUQ6CQkJCQkJCQkjCisjCWQwCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzdG9fY29zCitzdG9fY29zOgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAKKwlhbmRpLncJCSYweDcsJWQwCisJbW92LncJCSh0Ymxfc3RvX2Nvcy5iLCVwYywlZDAudyoyKSwlZDAKKwlqbXAJCSh0Ymxfc3RvX2Nvcy5iLCVwYywlZDAudyoxKQorCit0Ymxfc3RvX2NvczoKKwlzaG9ydAkJc3RvX2Nvc18wIC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc18xIC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc18yIC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc18zIC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc180IC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc181IC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc182IC0gdGJsX3N0b19jb3MKKwlzaG9ydAkJc3RvX2Nvc183IC0gdGJsX3N0b19jb3MKKworc3RvX2Nvc18wOgorCWZtb3ZtLngJCSYweDQwLEVYQ19GUDAoJWE2KQorCXJ0cworc3RvX2Nvc18xOgorCWZtb3ZtLngJCSYweDQwLEVYQ19GUDEoJWE2KQorCXJ0cworc3RvX2Nvc18yOgorCWZtb3YueAkJJWZwMSwlZnAyCisJcnRzCitzdG9fY29zXzM6CisJZm1vdi54CQklZnAxLCVmcDMKKwlydHMKK3N0b19jb3NfNDoKKwlmbW92LngJCSVmcDEsJWZwNAorCXJ0cworc3RvX2Nvc181OgorCWZtb3YueAkJJWZwMSwlZnA1CisJcnRzCitzdG9fY29zXzY6CisJZm1vdi54CQklZnAxLCVmcDYKKwlydHMKK3N0b19jb3NfNzoKKwlmbW92LngJCSVmcDEsJWZwNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNtb2Rfc2Rucm0KKwlnbG9iYWwJCXNtb2Rfc25vcm0KK3Ntb2Rfc2Rucm06CitzbW9kX3Nub3JtOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNtb2QKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS53CQlzbW9kX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc21vZAorCWNtcGkuYgkJJWQxLCZTTkFOCisJYmVxLmwJCWRzdF9zbmFuCisJYnJhLmwJCWRzdF9xbmFuCisKKwlnbG9iYWwJCXNtb2Rfc3plcm8KK3Ntb2Rfc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlkc3RfcW5hbgorCWJyYS5sCQlkc3Rfc25hbgorCisJZ2xvYmFsCQlzbW9kX3NpbmYKK3Ntb2Rfc2luZjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzbW9kX2ZwbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNtb2RfenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbW9kX2ZwbgorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKK3Ntb2RfenJvOgorc3JlbV96cm86CisJbW92LmIJCVNSQ19FWCglYTApLCVkMQkJIyBnZXQgc3JjIHNpZ24KKwltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGdldCBkc3Qgc2lnbgorCWVvci5iCQklZDAsJWQxCQkJIyBnZXQgcWJ5dGUgc2lnbgorCWFuZGkuYgkJJjB4ODAsJWQxCisJbW92LmIJCSVkMSxGUFNSX1FCWVRFKCVhNikKKwl0c3QuYgkJJWQwCisJYnBsLncJCWxkX3B6ZXJvCisJYnJhLncJCWxkX216ZXJvCisKK3Ntb2RfZnBuOgorc3JlbV9mcG46CisJY2xyLmIJCUZQU1JfUUJZVEUoJWE2KQorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmIJCVNSQ19FWCglYTApLCVkMQkJIyBnZXQgc3JjIHNpZ24KKwltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGdldCBkc3Qgc2lnbgorCWVvci5iCQklZDAsJWQxCQkJIyBnZXQgcWJ5dGUgc2lnbgorCWFuZGkuYgkJJjB4ODAsJWQxCisJbW92LmIJCSVkMSxGUFNSX1FCWVRFKCVhNikKKwljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCisJYm5lLmIJCXNtb2RfbnJtCisJbGVhCQlEU1QoJWExKSwlYTAKKwltb3YubAkJKCVzcCkrLCVkMAorCWJyYQkJdF9yZXNkbnJtCitzbW9kX25ybToKKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtb3YueAkJRFNUKCVhMSksJWZwMAorCXRzdC5iCQlEU1RfRVgoJWExKQorCWJtaS5iCQlzbW9kX25ybV9uZWcKKwlydHMKKworc21vZF9ucm1fbmVnOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JlbV9zbm9ybQorCWdsb2JhbAkJc3JlbV9zZG5ybQorc3JlbV9zZG5ybToKK3NyZW1fc25vcm06CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc3JlbQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLncJCXNyZW1fenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzcmVtCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwlicmEubAkJZHN0X3NuYW4KKworCWdsb2JhbAkJc3JlbV9zemVybworc3JlbV9zemVybzoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKKwlnbG9iYWwJCXNyZW1fc2luZgorc3JlbV9zaW5mOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLncJCXNyZW1fZnBuCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEudwkJc3JlbV96cm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNyZW1fZnBuCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwlicmEubAkJZHN0X3NuYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3NjYWxlX3Nub3JtCisJZ2xvYmFsCQlzc2NhbGVfc2Rucm0KK3NzY2FsZV9zbm9ybToKK3NzY2FsZV9zZG5ybToKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzc2NhbGUKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlkc3RfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJZHN0X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3NjYWxlCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwlicmEubAkJZHN0X3NuYW4KKworCWdsb2JhbAkJc3NjYWxlX3N6ZXJvCitzc2NhbGVfc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc3NjYWxlCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJZHN0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCWRzdF9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNzY2FsZQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKKwlnbG9iYWwJCXNzY2FsZV9zaW5mCitzc2NhbGVfc2luZjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwljbXBpLmIJCSVkMSwmU05BTgorCWJlcS5sCQlkc3Rfc25hbgorCWJyYS5sCQl0X29wZXJyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHNvcF9zcW5hbigpOiBUaGUgc3JjIG9wIGZvciBmcmVtL2Ztb2QvZnNjYWxlIHdhcyBhIFFOQU4uCisjCisJZ2xvYmFsCQlzb3Bfc3FuYW4KK3NvcF9zcW5hbjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmIJCWRzdF9xbmFuCisJY21waS5iCQklZDEsJlNOQU4KKwliZXEuYgkJZHN0X3NuYW4KKwlicmEuYgkJc3JjX3FuYW4KKworIworIyBzb3Bfc3NuYW4oKTogVGhlIHNyYyBvcCBmb3IgZnJlbS9mbW9kL2ZzY2FsZSB3YXMgYW4gU05BTi4KKyMKKwlnbG9iYWwJCXNvcF9zc25hbgorc29wX3NzbmFuOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEuYgkJZHN0X3FuYW5fc3JjX3NuYW4KKwljbXBpLmIJCSVkMSwmU05BTgorCWJlcS5iCQlkc3Rfc25hbgorCWJyYS5iCQlzcmNfc25hbgorCitkc3RfcW5hbl9zcmNfc25hbjoKKwlvcmkubAkJJnNuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOQU4vU05BTi9BSU9QCisJYnJhLmIJCWRzdF9xbmFuCisKKyMKKyMgZHN0X3FuYW4oKTogUmV0dXJuIHRoZSBkc3QgU05BTiB3LyB0aGUgU05BTiBiaXQgc2V0LgorIworCWdsb2JhbAkJZHN0X3NuYW4KK2RzdF9zbmFuOgorCWZtb3YueAkJRFNUKCVhMSksJWZwMAkJIyB0aGUgZm1vdmUgc2V0cyB0aGUgU05BTiBiaXQKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBjYXRjaCByZXN1bHRpbmcgc3RhdHVzCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgc3RhdHVzCisJcnRzCisKKyMKKyMgZHN0X3FuYW4oKTogUmV0dXJuIHRoZSBkc3QgUU5BTi4KKyMKKwlnbG9iYWwJCWRzdF9xbmFuCitkc3RfcW5hbjoKKwlmbW92LngJCURTVCglYTEpLCVmcDAJCSMgcmV0dXJuIHRoZSBub24tc2lnbmFsbGluZyBuYW4KKwl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgc2V0IGNjb2RlcyBhY2NvcmRpbmcgdG8gUU5BTiBzaWduCisJYm1pLmIJCWRzdF9xbmFuX20KK2RzdF9xbmFuX3A6CisJbW92LmIJCSZuYW5fYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCitkc3RfcW5hbl9tOgorCW1vdi5iCQkmbmVnX2JtYXNrK25hbl9ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBzcmNfc25hbigpOiBSZXR1cm4gdGhlIHNyYyBTTkFOIHcvIHRoZSBTTkFOIGJpdCBzZXQuCisjCisJZ2xvYmFsCQlzcmNfc25hbgorc3JjX3NuYW46CisJZm1vdi54CQlTUkMoJWEwKSwlZnAwCQkjIHRoZSBmbW92ZSBzZXRzIHRoZSBTTkFOIGJpdAorCWZtb3YubAkJJWZwc3IsJWQwCQkjIGNhdGNoIHJlc3VsdGluZyBzdGF0dXMKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBzdGF0dXMKKwlydHMKKworIworIyBzcmNfcW5hbigpOiBSZXR1cm4gdGhlIHNyYyBRTkFOLgorIworCWdsb2JhbAkJc3JjX3FuYW4KK3NyY19xbmFuOgorCWZtb3YueAkJU1JDKCVhMCksJWZwMAkJIyByZXR1cm4gdGhlIG5vbi1zaWduYWxsaW5nIG5hbgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBzZXQgY2NvZGVzIGFjY29yZGluZyB0byBRTkFOIHNpZ24KKwlibWkuYgkJZHN0X3FuYW5fbQorc3JjX3FuYW5fcDoKKwltb3YuYgkJJm5hbl9ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKK3NyY19xbmFuX206CisJbW92LmIJCSZuZWdfYm1hc2srbmFuX2JtYXNrLEZQU1JfQ0MoJWE2KQorCXJ0cworCisjCisjIGZrZXJuMi5zOgorIwlUaGVzZSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgYnkgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyCisjIHJvdXRpbmVzIHdoZXJlIGFuIGluc3RydWN0aW9uIGlzIHNlbGVjdGVkIGJ5IGFuIGluZGV4IGludG8KKyMgYSBsYXJnZSBqdW1wIHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBpbnN0cnVjdGlvbiB3aGljaAorIyBoYXMgYmVlbiBkZWNvZGVkLiBGbG93IGNvbnRpbnVlcyBoZXJlIHdoZXJlIHdlIG5vdyBkZWNvZGUKKyMgZnVydGhlciBhY2NvZGluZyB0byB0aGUgc291cmNlIG9wZXJhbmQgdHlwZS4KKyMKKworCWdsb2JhbAkJZnNpbmgKK2ZzaW5oOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNzaW5oCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNyY19pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNzaW5oZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZsb2ducDEKK2Zsb2ducDE6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2xvZ25wMQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzb3ByX2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc2xvZ25wMWQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmZXRveG0xCitmZXRveG0xOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNldG94bTEKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc2V0b3htMWkKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNldG94bTFkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZnRhbmgKK2Z0YW5oOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXN0YW5oCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNyY19vbmUKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXN0YW5oZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZhdGFuCitmYXRhbjoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzYXRhbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzcGlfMgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc2F0YW5kCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmFzaW4KK2Zhc2luOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNhc2luCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNhc2luZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZhdGFuaAorZmF0YW5oOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNhdGFuaAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzYXRhbmhkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZnNpbmUKK2ZzaW5lOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNzaW4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3NpbmQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmdGFuCitmdGFuOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXN0YW4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3RhbmQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmZXRveAorZmV0b3g6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2V0b3gKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wb25lCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzenJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzZXRveGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmdHdvdG94CitmdHdvdG94OgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXN0d290b3gKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wb25lCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzenJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzdHdvdG94ZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZ0ZW50b3gKK2Z0ZW50b3g6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc3RlbnRveAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWxkX3BvbmUKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXN6cl9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXN0ZW50b3hkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmxvZ24KK2Zsb2duOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNsb2duCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJdF9kejIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNvcHJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbG9nbmQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmbG9nMTAKK2Zsb2cxMDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzbG9nMTAKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQl0X2R6MgorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc29wcl9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNsb2cxMGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmbG9nMgorZmxvZzI6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2xvZzIKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQl0X2R6MgorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc29wcl9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNsb2cyZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZjb3NoCitmY29zaDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzY29zaAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWxkX3BvbmUKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCWxkX3BpbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNjb3NoZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZhY29zCitmYWNvczoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzYWNvcworCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWxkX3BwaTIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNhY29zZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZjb3MKK2Zjb3M6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2NvcworCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWxkX3BvbmUKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNjb3NkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmdldGV4cAorZmdldGV4cDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzZ2V0ZXhwCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNnZXRleHBkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmdldG1hbgorZmdldG1hbjoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzZ2V0bWFuCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNnZXRtYW5kCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZnNpbmNvcworZnNpbmNvczoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzc2luY29zCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3NpbmNvc3oKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNzaW5jb3NpCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2luY29zZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNzaW5jb3NxbmFuCisJYnJhLmwJCXNzaW5jb3NzbmFuCisKKwlnbG9iYWwJCWZtb2QKK2Ztb2Q6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc21vZF9zbm9ybQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNtb2Rfc3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNtb2Rfc2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc21vZF9zZG5ybQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNvcF9zcW5hbgorCWJyYS5sCQlzb3Bfc3NuYW4KKworCWdsb2JhbAkJZnJlbQorZnJlbToKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzcmVtX3Nub3JtCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JlbV9zemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc3JlbV9zaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzcmVtX3NkbnJtCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc29wX3NxbmFuCisJYnJhLmwJCXNvcF9zc25hbgorCisJZ2xvYmFsCQlmc2NhbGUKK2ZzY2FsZToKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzc2NhbGVfc25vcm0KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzc2NhbGVfc3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNzY2FsZV9zaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2NhbGVfc2Rucm0KKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzb3Bfc3FuYW4KKwlicmEubAkJc29wX3NzbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmdlbl9leGNlcHQoKTogY2F0Y2ggYW4gZXhjZXB0aW9uIGR1cmluZyB0cmFuc2NlbmRlbnRhbAkJIworIwkJICAgICAgIGVtdWxhdGlvbgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm11bCgpIC0gZW11bGF0ZSBhIG11bHRpcGx5IGluc3RydWN0aW9uCQkJCSMKKyMJZmFkZCgpIC0gZW11bGF0ZSBhbiBhZGQgaW5zdHJ1Y3Rpb24JCQkJIworIwlmaW4oKSAtIGVtdWxhdGUgYW4gZm1vdmUgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVzdGluYXRpb24gb3BlcmFuZAkJCQkJIworIwlkMCAgPSB0eXBlIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayBleGNlcHRpb24JCQkjCisjCWZzYXZlIGZyYW1lID0gc291cmNlIG9wZXJhbmQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQW4gZXhjZXB0aW9uIG9jY3VycmVkIG9uIHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIHRoZQkJIworIyB0cmFuc2NlbmRlbnRhbCBlbXVsYXRpb24uIGhvcGVmdWxseSwgdGhpcyB3b24ndCBiZSBoYXBwZW5pbmcgbXVjaAkjCisjIGJlY2F1c2UgaXQgd2lsbCBiZSBWRVJZIHNsb3cuCQkJCQkJIworIwlUaGUgb25seSBleGNlcHRpb25zIGNhcGFibGUgb2YgcGFzc2luZyB0aHJvdWdoIGhlcmUgYXJlCQkjCisjIE92ZXJmbG93LCBVbmRlcmZsb3csIGFuZCBVbnN1cHBvcnRlZCBEYXRhIFR5cGUuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZmdlbl9leGNlcHQKK2ZnZW5fZXhjZXB0OgorCWNtcGkuYgkJMHgzKCVzcCksJjB4NwkJIyBpcyBleGNlcHRpb24gVU5TVVBQPworCWJlcS5iCQlmZ2VfdW5zdXBwCQkjIHllcworCisJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQorCitmZ2VfY29udDoKKwltb3YuYgkJJk5PUk0sRFRBRyglYTYpCisKKyMgb2ssIEkgaGF2ZSBhIHByb2JsZW0gd2l0aCBwdXR0aW5nIHRoZSBkc3Qgb3AgYXQgRlBfRFNULiB0aGUgZW11bGF0aW9uCisjIHJvdXRpbmVzIGFyZW4ndCBzdXBwb3NlZCB0byBhbHRlciB0aGUgb3BlcmFuZHMgYnV0IHdlJ3ZlIGp1c3Qgc3F1YXNoZWQKKyMgRlBfRFNUIGhlcmUuLi4KKworIyA4LzE3LzkzIC0gdGhpcyB0dXJucyBvdXQgdG8gYmUgbW9yZSBvZiBhICJjbGVhbmxpbmVzcyIgc3RhbmRwb2ludAorIyB0aGVuIGEgcG90ZW50aWFsIGJ1Zy4gdG8gYmVnaW4gd2l0aCwgb25seSB0aGUgZHlhZGljIGZ1bmN0aW9ucworIyBmcmVtLGZtb2QsIGFuZCBmc2NhbGUgd291bGQgZ2V0IHRoZSBkc3QgdHJhc2hlZCBoZXJlLiBCdXQsIGZvcgorIyB0aGUgMDYwU1AsIHRoZSBGUF9EU1QgaXMgbmV2ZXIgdXNlZCBhZ2FpbiBhbnl3YXlzLgorCWZtb3ZtLngJCSYweDgwLEZQX0RTVCglYTYpCSMgZHN0IG9wIGlzIGluIGZwMAorCisJbGVhCQkweDQoJXNwKSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKworCWNtcGkuYgkJJWQxLCZGTU9WX09QCisJYmVxLmIJCWZnZV9maW4JCQkjIGl0IHdhcyBhbiAiZm1vdiIKKwljbXBpLmIJCSVkMSwmRkFERF9PUAorCWJlcS5iCQlmZ2VfZmFkZAkJIyBpdCB3YXMgYW4gImZhZGQiCitmZ2VfZm11bDoKKwlic3IubAkJZm11bAorCXJ0cworZmdlX2ZhZGQ6CisJYnNyLmwJCWZhZGQKKwlydHMKK2ZnZV9maW46CisJYnNyLmwJCWZpbgorCXJ0cworCitmZ2VfdW5zdXBwOgorCW1vdi5iCQkmREVOT1JNLFNUQUcoJWE2KQorCWJyYS5iCQlmZ2VfY29udAorCisjCisjIFRoaXMgdGFibGUgaG9sZHMgdGhlIG9mZnNldHMgb2YgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyBmb3IgZWFjaCBpbmRpdmlkdWFsCisjIG1hdGggb3BlcmF0aW9uIHJlbGF0aXZlIHRvIHRoZSBhZGRyZXNzIG9mIHRoaXMgdGFibGUuIEluY2x1ZGVkIGFyZQorIyByb3V0aW5lcyBsaWtlIGZhZGQvZm11bC9mYWJzIGFzIHdlbGwgYXMgdGhlIHRyYW5zY2VuZGVudGFscy4KKyMgVGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZXh0ZW5zaW9uIGJpdHMgb2YgdGhlCisjIG9wZXJhdGlvbiBsb25nd29yZC4KKyMKKworCXN3YmVnCQkmMTA5Cit0YmxfdW5zdXBwOgorCWxvbmcJCWZpbgkJLSB0YmxfdW5zdXBwCSMgMDA6IGZtb3ZlCisJbG9uZwkJZmludAkJLSB0YmxfdW5zdXBwCSMgMDE6IGZpbnQKKwlsb25nCQlmc2luaAkJLSB0YmxfdW5zdXBwCSMgMDI6IGZzaW5oCisJbG9uZwkJZmludHJ6CQktIHRibF91bnN1cHAJIyAwMzogZmludHJ6CisJbG9uZwkJZnNxcnQJCS0gdGJsX3Vuc3VwcAkjIDA0OiBmc3FydAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmxvZ25wMQkJLSB0YmxfdW5zdXBwCSMgMDY6IGZsb2ducDEKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZldG94bTEJCS0gdGJsX3Vuc3VwcAkjIDA4OiBmZXRveG0xCisJbG9uZwkJZnRhbmgJCS0gdGJsX3Vuc3VwcAkjIDA5OiBmdGFuaAorCWxvbmcJCWZhdGFuCQktIHRibF91bnN1cHAJIyAwYTogZmF0YW4KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZhc2luCQktIHRibF91bnN1cHAJIyAwYzogZmFzaW4KKwlsb25nCQlmYXRhbmgJCS0gdGJsX3Vuc3VwcAkjIDBkOiBmYXRhbmgKKwlsb25nCQlmc2luZQkJLSB0YmxfdW5zdXBwCSMgMGU6IGZzaW4KKwlsb25nCQlmdGFuCQktIHRibF91bnN1cHAJIyAwZjogZnRhbgorCWxvbmcJCWZldG94CQktIHRibF91bnN1cHAJIyAxMDogZmV0b3gKKwlsb25nCQlmdHdvdG94CQktIHRibF91bnN1cHAJIyAxMTogZnR3b3RveAorCWxvbmcJCWZ0ZW50b3gJCS0gdGJsX3Vuc3VwcAkjIDEyOiBmdGVudG94CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmbG9nbgkJLSB0YmxfdW5zdXBwCSMgMTQ6IGZsb2duCisJbG9uZwkJZmxvZzEwCQktIHRibF91bnN1cHAJIyAxNTogZmxvZzEwCisJbG9uZwkJZmxvZzIJCS0gdGJsX3Vuc3VwcAkjIDE2OiBmbG9nMgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmFicwkJLSB0YmxfdW5zdXBwCSMgMTg6IGZhYnMKKwlsb25nCQlmY29zaAkJLSB0YmxfdW5zdXBwCSMgMTk6IGZjb3NoCisJbG9uZwkJZm5lZwkJLSB0YmxfdW5zdXBwCSMgMWE6IGZuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZhY29zCQktIHRibF91bnN1cHAJIyAxYzogZmFjb3MKKwlsb25nCQlmY29zCQktIHRibF91bnN1cHAJIyAxZDogZmNvcworCWxvbmcJCWZnZXRleHAJCS0gdGJsX3Vuc3VwcAkjIDFlOiBmZ2V0ZXhwCisJbG9uZwkJZmdldG1hbgkJLSB0YmxfdW5zdXBwCSMgMWY6IGZnZXRtYW4KKwlsb25nCQlmZGl2CQktIHRibF91bnN1cHAJIyAyMDogZmRpdgorCWxvbmcJCWZtb2QJCS0gdGJsX3Vuc3VwcAkjIDIxOiBmbW9kCisJbG9uZwkJZmFkZAkJLSB0YmxfdW5zdXBwCSMgMjI6IGZhZGQKKwlsb25nCQlmbXVsCQktIHRibF91bnN1cHAJIyAyMzogZm11bAorCWxvbmcJCWZzZ2xkaXYJCS0gdGJsX3Vuc3VwcAkjIDI0OiBmc2dsZGl2CisJbG9uZwkJZnJlbQkJLSB0YmxfdW5zdXBwCSMgMjU6IGZyZW0KKwlsb25nCQlmc2NhbGUJCS0gdGJsX3Vuc3VwcAkjIDI2OiBmc2NhbGUKKwlsb25nCQlmc2dsbXVsCQktIHRibF91bnN1cHAJIyAyNzogZnNnbG11bAorCWxvbmcJCWZzdWIJCS0gdGJsX3Vuc3VwcAkjIDI4OiBmc3ViCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzMDogZnNpbmNvcworCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDMxOiBmc2luY29zCisJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzI6IGZzaW5jb3MKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzMzogZnNpbmNvcworCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDM0OiBmc2luY29zCisJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzU6IGZzaW5jb3MKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzNjogZnNpbmNvcworCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDM3OiBmc2luY29zCisJbG9uZwkJZmNtcAkJLSB0YmxfdW5zdXBwCSMgMzg6IGZjbXAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZ0c3QJCS0gdGJsX3Vuc3VwcAkjIDNhOiBmdHN0CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzaW4JCS0gdGJsX3Vuc3VwcAkjIDQwOiBmc21vdmUKKwlsb25nCQlmc3NxcnQJCS0gdGJsX3Vuc3VwcAkjIDQxOiBmc3NxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRpbgkJLSB0YmxfdW5zdXBwCSMgNDQ6IGZkbW92ZQorCWxvbmcJCWZkc3FydAkJLSB0YmxfdW5zdXBwCSMgNDU6IGZkc3FydAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzYWJzCQktIHRibF91bnN1cHAJIyA1ODogZnNhYnMKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzbmVnCQktIHRibF91bnN1cHAJIyA1YTogZnNuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkYWJzCQktIHRibF91bnN1cHAJIyA1YzogZmRhYnMKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkbmVnCQktIHRibF91bnN1cHAJIyA1ZTogZmRuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzZGl2CQktIHRibF91bnN1cHAJIyA2MDogZnNkaXYKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzYWRkCQktIHRibF91bnN1cHAJIyA2MjogZnNhZGQKKwlsb25nCQlmc211bAkJLSB0YmxfdW5zdXBwCSMgNjM6IGZzbXVsCisJbG9uZwkJZmRkaXYJCS0gdGJsX3Vuc3VwcAkjIDY0OiBmZGRpdgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRhZGQJCS0gdGJsX3Vuc3VwcAkjIDY2OiBmZGFkZAorCWxvbmcJCWZkbXVsCQktIHRibF91bnN1cHAJIyA2NzogZmRtdWwKKwlsb25nCQlmc3N1YgkJLSB0YmxfdW5zdXBwCSMgNjg6IGZzc3ViCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRzdWIJCS0gdGJsX3Vuc3VwcAkjIDZjOiBmZHN1YgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZtdWwoKTogZW11bGF0ZXMgdGhlIGZtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc211bCgpOiBlbXVsYXRlcyB0aGUgZnNtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZG11bCgpOiBlbXVsYXRlcyB0aGUgZmRtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgbXVsdGlwbHkJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmbXVsIHRvCQkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWFsaWduCQkweDEwCit0YmxfZm11bF9vdmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHRfbWF4CisJbG9uZwkJMHgzZmZmIC0gMHg0MDdlCQkjIHNnbF9tYXgKKwlsb25nCQkweDNmZmYgLSAweDQzZmUJCSMgZGJsX21heAordGJsX2ZtdWxfdW5mbDoKKwlsb25nCQkweDNmZmYgKyAweDAwMDEJCSMgZXh0X3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNmODAJCSMgc2dsX3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNjMDAJCSMgZGJsX3VuZmwKKworCWdsb2JhbAkJZnNtdWwKK2ZzbXVsOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZm11bAorCisJZ2xvYmFsCQlmZG11bAorZmRtdWw6CisJYW5kaS5iCQkmMHgzMCwlZDAKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmbXVsCitmbXVsOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCWJuZS53CQlmbXVsX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKK2ZtdWxfbm9ybToKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgc3JjIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwlhZGQubAkJJWQwLCglc3ApCQkjIFNDQUxFX0ZBQ1RPUiA9IHNjYWxlMSArIHNjYWxlMgorCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCisJbHNyLmIJCSYweDYsJWQxCQkjIHNoaWZ0IHRvIGxvIGJpdHMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyBsb2FkIFMuRi4KKwljbXAubAkJJWQwLCh0YmxfZm11bF9vdmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IG92Zmw/CisJYmVxLncJCWZtdWxfbWF5X292ZmwJCSMgcmVzdWx0IG1heSBybmQgdG8gb3ZlcmZsb3cKKwlibHQudwkJZm11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXAubAkJJWQwLCh0YmxfZm11bF91bmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IHVuZmw/CisJYmVxLncJCWZtdWxfbWF5X3VuZmwJCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAorCWJndC53CQlmbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CisKKyMKKyMgTk9STUFMOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiB3aWxsIG5laXRoZXIgb3ZlcmZsb3cgbm9yIHVuZGVyZmxvdy4KKyMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUuCisjIC0gc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCB1c2luZyB0aGUgc2NhbGUgZmFjdG9yLiBpZiBib3RoIG9wZXJhbmRzIHdlcmUKKyMgbm9ybWFsaXplZCB0aGVuIHdlIHJlYWxseSBkb24ndCBuZWVkIHRvIGdvIHRocm91Z2ggdGhpcyBzY2FsaW5nLiBidXQgZm9yIG5vdywKKyMgdGhpcyB3aWxsIGRvLgorIworZm11bF9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm11bF9ub3JtYWxfZXhpdDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkVSRkxPVzoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gb3ZlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjIC0gaWYgb3ZlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB3ZSBuZWVkIGEgbXVsdGlwbHkgcmVzdWx0IHJvdW5kZWQgdG8KKyMgZXh0ZW5kZWQgcHJlY2lzaW9uLiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoaXMKKyMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKKyMgbXVsdGlwbHkgdXNpbmcgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlLiB0aGUgcmVzdWx0CisjIG9mIHRoaXMgb3BlcmF0aW9uIHRoZW4gaGFzIGl0cyBleHBvbmVudCBzY2FsZWQgYnkgLTB4NjAwMCB0byBjcmVhdGUgdGhlCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCisjCitmbXVsX292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworIyBzYXZlIHNldHRpbmcgdGhpcyB1bnRpbCBub3cgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGZtdWxfbWF5X292ZmwgbWF5IGp1bXAgaW4KK2ZtdWxfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZtdWxfb3ZmbF9lbmEJCSMgeWVzCisKKyMgY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorZm11bF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHJuZCBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZDsgQ3JlYXRlIEVYT1A6CisjIC0gaWYgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLCB0aGVuIHdlIGhhdmUgdGhlIEVYT1AuIHNpbXBseSBiaWFzIHRoZSBleHBvbmVudAorIyB3aXRoIGFuIGV4dHJhIC0weDYwMDAuIGlmIHRoZSBwcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgbmVlZCB0bworIyBjYWxjdWxhdGUgYSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmbXVsX292ZmxfZW5hOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyB0ZXN0IHRoZSBybmQgcHJlYworCWJuZS5iCQlmbXVsX292ZmxfZW5hX3NkCSMgaXQncyBzZ2wgb3IgZGJsCisKK2ZtdWxfb3ZmbF9lbmFfY29udDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHNpZ24gYml0CisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZtdWxfb3ZmbF9kaXMKKworZm11bF9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZSBvbmx5CisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWJyYS5iCQlmbXVsX292ZmxfZW5hX2NvbnQKKworIworIyBtYXkgT1ZFUkZMT1c6CisjIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIE1BWSBvdmVyZmxvdy4KKyMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KKyMgc2V0IHRoZSBpbmV4YWN0IGJpdHMuCisjIC0gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgcmV0dXJuIGl0IGluIGZwMC4KKyMKK2ZtdWxfbWF5X292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmbXVsX292ZmxfdHN0CQkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmbXVsX25vcm1hbF9leGl0CisKKyMKKyMgVU5ERVJGTE9XOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBpcyBhbiB1bmRlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjIC0gaWYgb3ZlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB3ZSBuZWVkIGEgbXVsdGlwbHkgcmVzdWx0IHJvdW5kZWQgdG8KKyMgZXh0ZW5kZWQgcHJlY2lzaW9uLiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoaXMKKyMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKKyMgbXVsdGlwbHkgdXNpbmcgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlLiB0aGUgcmVzdWx0CisjIG9mIHRoaXMgb3BlcmF0aW9uIHRoZW4gaGFzIGl0cyBleHBvbmVudCBzY2FsZWQgYnkgLTB4NjAwMCB0byBjcmVhdGUgdGhlCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCisjCitmbXVsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKyMgZm9yIGZ1biwgbGV0J3MgdXNlIG9ubHkgZXh0ZW5kZWQgcHJlY2lzaW9uLCByb3VuZCB0byB6ZXJvLiB0aGVuLCBsZXQKKyMgdGhlIHVuZl9yZXMoKSByb3V0aW5lIGZpZ3VyZSBvdXQgYWxsIHRoZSByZXN0LgorIyB3aWxsIHdlIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZtdWxfdW5mbF9lbmEJCSMgeWVzCisKK2ZtdWxfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMyIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgVU5GTCBpcyBlbmFibGVkLgorIworZm11bF91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCisKKyMgaWYgdGhlIHJuZCBtb2RlIGlzIGFueXRoaW5nIGJ1dCBSWiwgdGhlbiB3ZSBoYXZlIHRvIHJlLWRvIHRoZSBhYm92ZQorIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZm11bF91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmbXVsX3VuZmxfZGlzCisKK2ZtdWxfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmbXVsX3VuZmxfZW5hX2NvbnQKKworIyBNQVkgVU5ERVJGTE9XOgorIyAtdXNlIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gdGhpcyBjb2RlIGZhdm9ycyBvcGVyYXRpb25zCisjIHRoYXQgZG8gbm90IHVuZGVyZmxvdy4KK2ZtdWxfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID4gMi5iPworCWZiZ3QudwkJZm11bF9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlmYmx0LncJCWZtdWxfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAyLiBidXQsCisjIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDIgb3IKKyMgYSBub3JtYWxpemVkIG51bWJlciB0aGF0IHJvdW5kZWQgZG93biB0byBhIDIuIHNvLCByZWRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uCisjIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZCByZXN1bHQgaXMuCisjIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA8IDIuYj8KKwlmYmdlLncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmbXVsX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZm11bF9vcDoKKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggUU5BTgorCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgWkVSTyB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggUU5BTgorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfaW5mX2RzdAktIHRibF9mbXVsX29wICMgSU5GIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgSU5GIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBRTkFOCisJc2hvcnQJCWZtdWxfaW5mX2RzdAktIHRibF9mbXVsX29wICMgSU5GIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBaRVJPCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IFFOQU4KKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggU05BTgorCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisKKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggUU5BTgorCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBaRVJPCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IFFOQU4KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggU05BTgorCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisKK2ZtdWxfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZtdWxfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmbXVsX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorCisjCisjIE11bHRpcGx5OiAoWmVybyB4IFplcm8pIHx8IChaZXJvIHggbm9ybSkgfHwgKFplcm8geCBkZW5vcm0pCisjCisJZ2xvYmFsCQlmbXVsX3plcm8JCSMgZ2xvYmFsIGZvciBmc2dsbXVsCitmbXVsX3plcm86CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZtdWxfemVyb19wCQkjIHJlc3VsdCBaRVJPIGlzIHBvcy4KK2ZtdWxfemVyb19uOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBaL04KKwlydHMKK2ZtdWxfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGxvYWQgK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyBNdWx0aXBseTogKGluZiB4IGluZikgfHwgKGluZiB4IG5vcm0pIHx8IChpbmYgeCBkZW5vcm0pCisjCisjIE5vdGU6IFRoZSBqLWJpdCBmb3IgYW4gaW5maW5pdHkgaXMgYSBkb24ndC1jYXJlLiBIb3dldmVyLCB0byBiZQorIyBzdHJpY3RseSBjb21wYXRpYmxlIHcvIHRoZSA2ODg4MS84ODIsIHdlIG1ha2Ugc3VyZSB0byByZXR1cm4gYW4KKyMgSU5GIHcvIHRoZSBqLWJpdCBzZXQgaWYgdGhlIGlucHV0IElORiBqLWJpdCB3YXMgc2V0LiBEZXN0aW5hdGlvbgorIyBJTkZzIHRha2UgcHJpb3JpdHkuCisjCisJZ2xvYmFsCQlmbXVsX2luZl9kc3QJCSMgZ2xvYmFsIGZvciBmc2dsbXVsCitmbXVsX2luZl9kc3Q6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIElORiByZXN1bHQgaW4gZnAwCisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZtdWxfaW5mX2RzdF9wCQkjIHJlc3VsdCBJTkYgaXMgcG9zLgorZm11bF9pbmZfZHN0X246CisJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgorCWZuZWcueAkJJWZwMAkJCSMgc2V0IHJlc3VsdCBzaWduCisJbW92LmIJCSZpbmZfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTgorCXJ0cworZm11bF9pbmZfZHN0X3A6CisJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworCWdsb2JhbAkJZm11bF9pbmZfc3JjCQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBJTkYgcmVzdWx0IGluIGZwMAorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KKwlicmEuYgkJZm11bF9pbmZfZHN0X24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmaW4oKTogZW11bGF0ZXMgdGhlIGZtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJZnNpbigpOiBlbXVsYXRlcyB0aGUgZnNtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJZmRpbigpOiBlbXVsYXRlcyB0aGUgZmRtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBtYW50aXNzYSBmb3IgRVhPUCBvbiBkZW5vcm0JCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuXzFvcCgpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCSMKKyMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWMvbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCU5vcm1zIGNhbiBiZSBlbXVsYXRlZCB3LyBhIHJlZ3VsYXIgZm1vdmUgaW5zdHJ1Y3Rpb24uIEZvcgkjCisjIHNnbC9kYmwsIG11c3Qgc2NhbGUgZXhwb25lbnQgYW5kIHBlcmZvcm0gYW4gImZtb3ZlIi4gQ2hlY2sgdG8gc2VlCSMKKyMgaWYgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIG92ZXJmbG93ZWQvdW5kZXJmbG93ZWQuIElmIHNvLCB1c2UgdW5mX3JlcygpCSMKKyMgb3Igb3ZmX3JlcygpIHRvIHJldHVybiB0aGUgZGVmYXVsdCByZXN1bHQuIEFsc28gcmV0dXJuIEVYT1AgaWYJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZC4gSWYgbm8gZXhjZXB0aW9uLCByZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0LgkjCisjCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzaW4KK2ZzaW46CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlY2lzaW9uCisJYnJhLmIJCWZpbgorCisJZ2xvYmFsCQlmZGluCitmZGluOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWNpc2lvbgorCisJZ2xvYmFsCQlmaW4KK2ZpbjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwltb3YuYgkJU1RBRyglYTYpLCVkMQkJIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS53CQlmaW5fbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBGUCBNT1ZFIElOOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQorIworZmluX25vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS53CQlmaW5fbm90X2V4dAkJIyBubywgc28gZ28gaGFuZGxlIGRibCBvciBzZ2wKKworIworIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2Fubm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyB0aGUgb3BlcmFuZCBuZWdhdGl2ZT8KKwlicGwuYgkJZmluX25vcm1fZG9uZQkJIyBubworCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKK2Zpbl9ub3JtX2RvbmU6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmaW5fZGVub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZmluX25vdF9leHQJCSMgbm8sIHNvIGdvIGhhbmRsZSBkYmwgb3Igc2dsCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgdGhlIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9kZW5vcm1fZG9uZQkJIyBubworCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKK2Zpbl9kZW5vcm1fZG9uZToKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmaW5fZGVub3JtX3VuZmxfZW5hCSMgeWVzCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2Zpbl9kZW5vcm1fdW5mbF9lbmE6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHJlc3VsdAorCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJYWRkaS53CQkmMHg2MDAwLCVkMAkJIyBhZGQgbmV3IGJpYXMgdG8gZXhwb25lbnQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIG9sZCBzaWduLGV4cAorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgY2xlYXIgc2lnbiBwb3NpdGlvbgorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBuZXcgZXhvLG9sZCBzaWduCisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBvciBkb3VibGUgcHJlY2lzaW9uCisjCitmaW5fbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZmluX2RibAorCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCisjCitmaW5fc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZmluX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZmluX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIworIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGludG8gdGhlIGZwIHJlZyBmaWxlCisjCitmaW5fc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBtb3ZlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2Zpbl9zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwb25lbnQKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbgorIworZmluX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLncJCWZpbl9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmaW5fc2RfbWF5X292ZmwJCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZpbl9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisJYnJhLncJCWZpbl9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmaW5fc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCXRzdC5iCQlGUF9TQ1IwX0VYKCVhNikJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlicGwuYgkJZmluX3NkX3VuZmxfdHN0CisJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB0aGVuIGdvIGNhbGN1bGF0ZSB0aGUgRVhPUCBmaXJzdC4KK2Zpbl9zZF91bmZsX3RzdDoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmluX3NkX3VuZmxfZW5hCQkjIHllcworCitmaW5fc2RfdW5mbF9kaXM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMgbWF5IGhhdmUgc2V0ICdaJworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmaW5fc2RfdW5mbF9lbmE6CisJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMgZXh0cmFjdCBvbGQgc2lnbgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmaW5fc2RfdW5mbF9kaXMKKworIworIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCisjCitmaW5fc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbW92ZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmaW5fc2Rfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZpbl9zZF9vdmZsX2VuYQkJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2Zpbl9zZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZC4KKyMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KKyMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgorIworZmluX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZmluX3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIG92ZXJmbG93LiBzby4uLgorIworZmluX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSB0aGUgbW92ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmaW5fc2Rfb3ZmbF90c3QJCSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZpbl9zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIG9wZXJhbmQgaXMgbm90IGEgTk9STTogY2hlY2sgaXRzIG9wdHlwZSBhbmQgYnJhbmNoIGFjY29yZGluZ2x5CisjCitmaW5fbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZmluX2Rlbm9ybQorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU5zCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU5zCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIGRvIHRoZSBmbW92ZSBpbjsgYXQgdGhpcyBwb2ludCwgb25seSBwb3NzaWJsZSBvcHMgYXJlIFpFUk8gYW5kIElORi4KKyMgdXNlIGZtb3YgdG8gZGV0ZXJtaW5lIGNjb2Rlcy4KKyMgcHJlYzptb2RlIHNob3VsZCBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQgYnV0IGl0IHdvbid0IGFmZmVjdCBhbnN3ZXIgYW55d2F5cy4KKyMKKwlmbW92LngJCVNSQyglYTApLCVmcDAJCSMgZG8gZm1vdmUgaW4KKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBubyBleGNlcHRpb25zIHBvc3NpYmxlCisJcm9sLmwJCSYweDgsJWQwCQkjIHB1dCBjY29kZXMgaW4gbG8gYnl0ZQorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmRpdigpOiBlbXVsYXRlcyB0aGUgZmRpdiBpbnN0cnVjdGlvbgkJCQkjCisjCWZzZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2RpdiBpbnN0cnVjdGlvbgkJCQkjCisjCWZkZGl2KCk6IGVtdWxhdGVzIHRoZSBmZGRpdiBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBkaXZpZGUJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmZGl2IHRvCQkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWFsaWduCQkweDEwCit0YmxfZmRpdl91bmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4MDAwMAkJIyBleHRfdW5mbAorCWxvbmcJCTB4M2ZmZiAtIDB4M2Y4MQkJIyBzZ2xfdW5mbAorCWxvbmcJCTB4M2ZmZiAtIDB4M2MwMQkJIyBkYmxfdW5mbAorCit0YmxfZmRpdl9vdmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHQgb3ZlcmZsb3cgZXhwb25lbnQKKwlsb25nCQkweDNmZmYgLSAweDQwN2UJCSMgc2dsIG92ZXJmbG93IGV4cG9uZW50CisJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibCBvdmVyZmxvdyBleHBvbmVudAorCisJZ2xvYmFsCQlmc2RpdgorZnNkaXY6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYworCWJyYS5iCQlmZGl2CisKKwlnbG9iYWwJCWZkZGl2CitmZGRpdjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZkaXYKK2ZkaXY6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZmRpdl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIERJVklERTogTk9STXMgYW5kIERFTk9STXMgT05MWSEKKyMKK2ZkaXZfbm9ybToKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgc3JjIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwluZWcubAkJKCVzcCkJCQkjIFNDQUxFIEZBQ1RPUiA9IHNjYWxlMSAtIHNjYWxlMgorCWFkZC5sCQklZDAsKCVzcCkKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbgorCWxzci5iCQkmMHg2LCVkMQkJIyBzaGlmdCB0byBsbyBiaXRzCisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfb3ZmbC5iLCVwYywlZDEudyo0KSAjIHdpbGwgcmVzdWx0IG92ZXJmbG93PworCWJsZS53CQlmZGl2X21heV9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXAubAkJJWQwLCh0YmxfZmRpdl91bmZsLncsJXBjLCVkMS53KjQpICMgd2lsbCByZXN1bHQgdW5kZXJmbG93PworCWJlcS53CQlmZGl2X21heV91bmZsCQkjIG1heWJlCisJYmd0LncJCWZkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworZmRpdl9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzYXZlIEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZkaXZfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IG9uIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc3RvcmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCit0YmxfZmRpdl9vdmZsMjoKKwlsb25nCQkweDdmZmYKKwlsb25nCQkweDQwN2YKKwlsb25nCQkweDQzZmYKKworZmRpdl9ub19vdmZsOgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgc2NhbGUgZmFjdG9yCisJYnJhLmIJCWZkaXZfbm9ybWFsX2V4aXQKKworZmRpdl9tYXlfb3ZmbDoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCWZtb3YubAkJJjB4MCwlZnBjcgorCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KKworCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQkoJXNwKSwlZDAJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIHJlc3VsdCBmcm9tIHN0YWNrCisJYW5kaS5sCQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSglc3ApLCVkMAkJIyBhZGQgc2NhbGUgZmFjdG9yCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfb3ZmbDIuYiwlcGMsJWQxLncqNCkKKwlibHQuYgkJZmRpdl9ub19vdmZsCisJbW92LmwJCSglc3ApKywlZDAKKworZmRpdl9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmRpdl9vdmZsX2VuYQkJIyB5ZXMKKworZmRpdl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZkaXZfb3ZmbF9lbmE6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmRpdl9vdmZsX2VuYV9zZAkjIG5vLCBkbyBzZ2wgb3IgZGJsCisKK2ZkaXZfb3ZmbF9lbmFfY29udDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHNpZ24gYml0CisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZkaXZfb3ZmbF9kaXMKKworZmRpdl9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJYnJhLmIJCWZkaXZfb3ZmbF9lbmFfY29udAorCitmZGl2X3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmZGl2X3VuZmxfZW5hCQkjIHllcworCitmZGl2X3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgVU5GTCBpcyBlbmFibGVkLgorIworZmRpdl91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmRpdl91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZmRpdl91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9lcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmZGl2X3VuZmxfZGlzCisKK2ZkaXZfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmZGl2X3VuZmxfZW5hX2NvbnQKKworIworIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgorIworZmRpdl9tYXlfdW5mbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+IDEuYj8KKwlmYmd0LncJCWZkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAxCisjIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCisjIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKKyMgcmVzdWx0IGlzLiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKKworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA8IDEuYj8KKwlmYmdlLncJCWZkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgRGl2aWRlOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmZGl2X25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mZGl2X29wOgorCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBaRVJPCisJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBRTkFOCisJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgTk9STSAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX29wZXJyCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gUU5BTgorCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9pbmZfZHN0CS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gWkVSTworCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgSU5GIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIElORiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9pbmZfZHN0CS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgSU5GIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIE5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gUU5BTgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKworCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIE5PUk0KKwlzaG9ydAkJZmRpdl9pbmZfbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFFOQU4KKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIE5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gUU5BTgorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKworZmRpdl9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZkaXZfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmZGl2X3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCisKKwlnbG9iYWwJCWZkaXZfemVyb19sb2FkCQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl96ZXJvX2xvYWQ6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyByZXN1bHQgc2lnbiBpcyBleGNsdXNpdmUKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCQkjIG9yIG9mIGlucHV0IHNpZ25zLgorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZkaXZfemVyb19sb2FkX3AJIyByZXN1bHQgaXMgcG9zaXRpdmUKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyBsb2FkIGEgLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL04KKwlydHMKK2ZkaXZfemVyb19sb2FkX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCBhICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgVGhlIGRlc3RpbmF0aW9uIHdhcyBJbiBSYW5nZSBhbmQgdGhlIHNvdXJjZSB3YXMgYSBaRVJPLiBUaGUgcmVzdWx0LAorIyB0aGVyZWZvcmUsIGlzIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCisjIFNvLCBkZXRlcm1pbmUgdGhlIHNpZ24gYW5kIHJldHVybiBhIG5ldyBJTkYgKHcvIHRoZSBqLWJpdCBjbGVhcmVkKS4KKyMKKwlnbG9iYWwJCWZkaXZfaW5mX2xvYWQJCSMgZ2xvYmFsIGZvciBmc2dsZGl2CitmZGl2X2luZl9sb2FkOgorCW9yaS53CQkmZHpfbWFzaythZHpfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgbm87IHNldCBEWi9BRFoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGxvYWQgYm90aCBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X2luZl9sb2FkX3AJCSMgcmVzdWx0IGlzIHBvc2l0aXZlCisJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgLUlORgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KKwlydHMKK2ZkaXZfaW5mX2xvYWRfcDoKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyBtYWtlIHJlc3VsdCArSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgorCXJ0cworCisjCisjIFRoZSBkZXN0aW5hdGlvbiB3YXMgYW4gSU5GIHcvIGFuIEluIFJhbmdlIG9yIFpFUk8gc291cmNlLCB0aGUgcmVzdWx0IGlzCisjIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCisjIFRoZSA2ODg4MS84ODIgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gSU5GIHcvIHRoZSBuZXcgc2lnbihpZiB0aGUgai1iaXQgb2YgdGhlCisjIGRzdCBJTkYgaXMgc2V0LCB0aGVuIHRoZW4gai1iaXQgb2YgdGhlIHJlc3VsdCBJTkYgaXMgYWxzbyBzZXQpLgorIworCWdsb2JhbAkJZmRpdl9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl9pbmZfZHN0OgorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDAJCSMgbG9hZCBib3RoIHNpZ25zCisJbW92LmIJCVNSQ19FWCglYTApLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZkaXZfaW5mX2RzdF9wCQkjIHJlc3VsdCBpcyBwb3NpdGl2ZQorCisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlmYWJzLngJCSVmcDAJCQkjIGNsZWFyIHNpZ24gYml0CisJZm5lZy54CQklZnAwCQkJIyBzZXQgc2lnbiBiaXQKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZmRpdl9pbmZfZHN0X3A6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlmYWJzLngJCSVmcDAJCQkjIHJldHVybiBwb3NpdGl2ZSBJTkYKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm5lZygpOiBlbXVsYXRlcyB0aGUgZm5lZyBpbnN0cnVjdGlvbgkJCQkjCisjCWZzbmVnKCk6IGVtdWxhdGVzIHRoZSBmc25lZyBpbnN0cnVjdGlvbgkJCQkjCisjCWZkbmVnKCk6IGVtdWxhdGVzIHRoZSBmZG5lZyBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgYSBkZW5vcm0gdG8gcHJvdmlkZSBFWE9QCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc2dsL2RibCBzb3VyY2UgZXhwb25lbnQJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCisjCXJlc19zbmFuXzFvcCgpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgemVyb2VzLCBhbmQgaW5maW5pdGllcyBhcyBzcGVjaWFsIGNhc2VzLiBTZXBhcmF0ZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb25zLiBFeHRlbmRlZCBwcmVjaXNpb24gY2FuIGJlCSMKKyMgZW11bGF0ZWQgYnkgc2ltcGx5IHNldHRpbmcgc2lnbiBiaXQuIFNnbC9kYmwgb3BlcmFuZHMgbXVzdCBiZSBzY2FsZWQJIworIyBhbmQgYW4gYWN0dWFsIGZuZWcgcGVyZm9ybWVkIHRvIHNlZSBpZiBvdmVyZmxvdy91bmRlcmZsb3cgd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93L292ZXJmbG93IHJlc3VsdC4gRWxzZSwJIworIyBzY2FsZSB0aGUgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4gcmVzdWx0LiBGUFNSIGdldHMgc2V0IGJhc2VkIG9uCSMKKyMgdGhlIHJlc3VsdCB2YWx1ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNuZWcKK2ZzbmVnOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmbmVnCisKKwlnbG9iYWwJCWZkbmVnCitmZG5lZzoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZuZWcKK2ZuZWc6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZuZWdfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBORUdBVEUgU0lHTiA6IG5vcm1zIGFuZCBkZW5vcm1zIE9OTFkhCisjCitmbmVnX25vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS53CQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKyMKKyMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbiBub3QgZ2V0IGFuIHVuZGVyZmxvdworIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KKyMgc2tpcCB0aGUgc2NhbGluZyBhbmQgdW5zY2FsaW5nLi4uCisjCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgorCWJwbC5iCQlmbmVnX25vcm1fbG9hZAkJIyBzaWduIGlzIHBvc2l0aXZlCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKK2ZuZWdfbm9ybV9sb2FkOgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmbmVnX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZuZWdfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgorCWJwbC5iCQlmbmVnX2Rlbm9ybV9kb25lCSMgbm8KKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyB5ZXMsIHNldCAnTicgY2NvZGUgYml0CitmbmVnX2Rlbm9ybV9kb25lOgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CisJYm5lLmIJCWZuZWdfZXh0X3VuZmxfZW5hCSMgeWVzCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2ZuZWdfZXh0X3VuZmxfZW5hOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZuZWdfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZm5lZ19kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZm5lZ19zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmbmVnX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZm5lZ19zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnIGZpbGUKKyMKK2ZuZWdfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmbmVnX3NkX25vcm1hbF9leGl0OgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKKwltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2ZuZWdfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UuYgkJZm5lZ19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmbmVnX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZuZWdfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmbmVnX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIworIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKKyMKK2ZuZWdfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWVvcmkuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19zZF91bmZsX3RzdAorCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCitmbmVnX3NkX3VuZmxfdHN0OgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbmVnX3NkX3VuZmxfZW5hCSMgeWVzCisKK2ZuZWdfc2RfdW5mbF9kaXM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMgbWF5IGhhdmUgc2V0ICdaJworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZm5lZ19zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmbmVnX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZm5lZ19zZF9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmbmVnX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbmVnX3NkX292ZmxfZW5hCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmbmVnX3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmbmVnX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZm5lZ19zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCisjCitmbmVnX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmbmVnX3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZuZWdfc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZuZWdfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZm5lZ19kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU4KKwliZXEubAkJcmVzX3FuYW5fMW9wCisKKyMKKyMgZG8gdGhlIGZuZWc7IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCisjIHVzZSBmbmVnIHRvIGRldGVybWluZSBjY29kZXMuCisjIHByZWM6bW9kZSBzaG91bGQgYmUgemVybyBhdCB0aGlzIHBvaW50IGJ1dCBpdCB3b24ndCBhZmZlY3QgYW5zd2VyIGFueXdheXMuCisjCisJZm5lZy54CQlTUkNfRVgoJWEwKSwlZnAwCSMgZG8gZm5lZworCWZtb3YubAkJJWZwc3IsJWQwCisJcm9sLmwJCSYweDgsJWQwCQkjIHB1dCBjY29kZXMgaW4gbG8gYnl0ZQorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnRzdCgpOiBlbXVsYXRlcyB0aGUgZnRlc3QgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVze3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBpbnN0cnVjdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlDaGVjayB0aGUgc291cmNlIG9wZXJhbmQgdGFnIChTVEFHKSBhbmQgc2V0IHRoZSBGUENSIGFjY29yZGluZwkjCisjIHRvIHRoZSBvcGVyYW5kIHR5cGUgYW5kIHNpZ24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnRzdAorZnRzdDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmdHN0X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTm9ybToKKyMKK2Z0c3Rfbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF9ub3JtX20JCSMgeWVzCisJcnRzCitmdHN0X25vcm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZnRzdF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZ0c3RfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZ0c3RfaW5mCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIERlbm9ybToKKyMKK2Z0c3RfZGVub3JtOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5iCQlmdHN0X2Rlbm9ybV9tCQkjIHllcworCXJ0cworZnRzdF9kZW5vcm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisjCisjIEluZmluaXR5OgorIworZnRzdF9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3RfaW5mX20JCSMgeWVzCitmdHN0X2luZl9wOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCitmdHN0X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ0knLCdOJyBjY29kZSBiaXRzCisJcnRzCisKKyMKKyMgWmVybzoKKyMKK2Z0c3RfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF96ZXJvX20JCSMgeWVzCitmdHN0X3plcm9fcDoKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKK2Z0c3RfemVyb19tOgorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZpbnQoKTogZW11bGF0ZXMgdGhlIGZpbnQgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKKyMgaGVyZS4gRm9yIG5vcm1zLCBsb2FkIHRoZSByb3VuZGluZyBtb2RlL3ByZWMsIGV4ZWN1dGUgYSAiZmludCIsIHRoZW4JIworIyBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKKyMJRm9yIGRlbm9ybXMsIGZvcmNlIHRoZSBqLWJpdCB0byBhIG9uZSBhbmQgZG8gdGhlIHNhbWUgYXMgZm9yCSMKKyMgbm9ybXMuIERlbm9ybXMgYXJlIHNvIGxvdyB0aGF0IHRoZSBhbnN3ZXIgd2lsbCBlaXRoZXIgYmUgYSB6ZXJvIG9yIGEJIworIyBvbmUuCQkJCQkJCQkJIworIwlGb3IgemVyb2VzL2luZnMvTkFOcywgcmV0dXJuIHRoZSBzYW1lIHdoaWxlIHNldHRpbmcgdGhlIEZQU1IJIworIyBhcyBhcHByb3ByaWF0ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZmludAorZmludDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmaW50X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTm9ybToKKyMKK2ZpbnRfbm9ybToKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBzZXQgcHJlYyA9IGV4dAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmludC54CQlTUkMoJWEwKSwlZnAwCQkjIGV4ZWN1dGUgZmludAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzZXQgZXhjZXB0aW9uIGJpdHMKKworCXJ0cworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZmludF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZpbnRfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZpbnRfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEuYgkJZmludF9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AJCSMgd2VlZCBvdXQgUU5BTgorCisjCisjIERlbm9ybToKKyMKKyMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSBlaXRoZXIgKCsvLSlaRVJPIG9yICgrLy0pMS4KKyMgYWxzbywgdGhlIElORVgyIGFuZCBBSU5FWCBleGNlcHRpb24gYml0cyB3aWxsIGJlIHNldC4KKyMgc28sIHdlIGNvdWxkIGVpdGhlciBzZXQgdGhlc2UgbWFudWFsbHkgb3IgZm9yY2UgdGhlIERFTk9STQorIyB0byBhIHZlcnkgc21hbGwgTk9STSBhbmQgc2hpcCBpdCB0byB0aGUgTk9STSByb3V0aW5lLgorIyBJIGRvIHRoZSBsYXR0ZXIuCisjCitmaW50X2Rlbm9ybToKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpICMgY29weSBzaWduLCB6ZXJvIGV4cAorCW1vdi5iCQkmMHg4MCxGUF9TQ1IwX0hJKCVhNikJIyBmb3JjZSBERU5PUk0gPT0+IHNtYWxsIE5PUk0KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEuYgkJZmludF9ub3JtCisKKyMKKyMgWmVybzoKKyMKK2ZpbnRfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBuZWdhdGl2ZT8KKwlibWkuYgkJZmludF96ZXJvX20JCSMgeWVzCitmaW50X3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmaW50X3plcm9fbToKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gLVpFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCisJcnRzCisKKyMKKyMgSW5maW5pdHk6CisjCitmaW50X2luZjoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRfaW5mX20JCSMgeWVzCitmaW50X2luZl9wOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCitmaW50X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmludHJ6KCk6IGVtdWxhdGVzIHRoZSBmaW50cnogaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfe3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBvcGVyYXRpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbi9tb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2VwYXJhdGUgYWNjb3JkaW5nIHRvIG9wZXJhbmQgdHlwZS4gVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2gJIworIyBoZXJlLiBGb3Igbm9ybXMsIGxvYWQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYywgZXhlY3V0ZSBhICJmaW50cnoiLAkjCisjIHRoZW4gc3RvcmUgdGhlIHJlc3VsdGluZyBGUFNSIGJpdHMuCQkJCQkjCisjCUZvciBkZW5vcm1zLCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUgYW5kIGRvIHRoZSBzYW1lIGFzIGZvcgkjCisjIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKKyMgb25lLgkJCQkJCQkJCSMKKyMJRm9yIHplcm9lcy9pbmZzL05BTnMsIHJldHVybiB0aGUgc2FtZSB3aGlsZSBzZXR0aW5nIHRoZSBGUFNSCSMKKyMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZpbnRyegorZmludHJ6OgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLmIJCWZpbnRyel9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmaW50cnpfbm9ybToKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmludHJ6LngJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnRyegorCisJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCisKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZpbnRyel9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZpbnRyel96ZXJvCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZmludHJ6X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLmIJCWZpbnRyel9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AJCSMgd2VlZCBvdXQgUU5BTgorCisjCisjIERlbm9ybToKKyMKKyMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSAoKy8tKVpFUk8uCisjIGFsc28sIHRoZSBJTkVYMiBhbmQgQUlORVggZXhjZXB0aW9uIGJpdHMgd2lsbCBiZSBzZXQuCisjIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KKyMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KKyMgSSBkbyB0aGUgbGF0dGVyLgorIworZmludHJ6X2Rlbm9ybToKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpICMgY29weSBzaWduLCB6ZXJvIGV4cAorCW1vdi5iCQkmMHg4MCxGUF9TQ1IwX0hJKCVhNikJIyBmb3JjZSBERU5PUk0gPT0+IHNtYWxsIE5PUk0KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEuYgkJZmludHJ6X25vcm0KKworIworIyBaZXJvOgorIworZmludHJ6X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRyel96ZXJvX20JCSMgeWVzCitmaW50cnpfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTyBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKK2ZpbnRyel96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIEluZmluaXR5OgorIworZmludHJ6X2luZjoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRyel9pbmZfbQkJIyB5ZXMKK2ZpbnRyel9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZmludHJ6X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFicygpOiAgZW11bGF0ZXMgdGhlIGZhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc2FicygpOiBlbXVsYXRlcyB0aGUgZnNhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGFicygpOiBlbXVsYXRlcyB0aGUgZmRhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIGRlbm9ybSBtYW50aXNzYSB0byBwcm92aWRlIEVYT1AJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIG1ha2UgZXhwb25lbnQuID0gMDsgZ2V0IHNjYWxlIGZhY3RvcgkjCisjCXVuZl9yZXMoKSAtIGNhbGN1bGF0ZSB1bmRlcmZsb3cgcmVzdWx0CQkJCSMKKyMJb3ZmX3JlcygpIC0gY2FsY3VsYXRlIG92ZXJmbG93IHJlc3VsdAkJCQkjCisjCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm5kIHByZWNpc2lvbi9tb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJU2ltcGx5IGNsZWFyIHNpZ24gZm9yIGV4dGVuZGVkIHByZWNpc2lvbiBub3JtLiBFeHQgcHJlYyBkZW5vcm0JIworIyBnZXRzIGFuIEVYT1AgY3JlYXRlZCBmb3IgaXQgc2luY2UgaXQncyBhbiB1bmRlcmZsb3cuCQkJIworIwlEb3VibGUgYW5kIHNpbmdsZSBwcmVjaXNpb24gY2FuIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cuIEZpcnN0LAkjCisjIHNjYWxlIHRoZSBvcGVyYW5kIHN1Y2ggdGhhdCB0aGUgZXhwb25lbnQgaXMgemVyby4gUGVyZm9ybSBhbiAiZmFicyIJIworIyB1c2luZyB0aGUgY29ycmVjdCBybmQgbW9kZS9wcmVjLiBDaGVjayB0byBzZWUgaWYgdGhlIG9yaWdpbmFsCQkjCisjIGV4cG9uZW50IHdvdWxkIHRha2UgYW4gZXhjZXB0aW9uLiBJZiBzbywgdXNlIHVuZl9yZXMoKSBvciBvdmZfcmVzKCkJIworIyB0byBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0LiBBbHNvLCBjcmVhdGUgdGhlIEVYT1AgZm9yIHRoZQkjCisjIGV4Y2VwdGlvbmFsIGNhc2UuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIsIGluc2VydCB0aGUgY29ycmVjdAkjCisjIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLgkJCQkJCSMKKyMJVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2ggaGVyZS4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNhYnMKK2ZzYWJzOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmYWJzCisKKwlnbG9iYWwJCWZkYWJzCitmZGFiczoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZmFicworZmFiczoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUudwkJZmFic19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIEFCU09MVVRFIFZBTFVFOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQorIworZmFic19ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFic19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisjCisjIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMQorCWJjbHIJCSYxNSwlZDEJCQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIGZvciBhbiBleHRlbmRlZCBwcmVjaXNpb24gREVOT1JNLCB0aGUgVU5GTCBleGNlcHRpb24gYml0IGlzIHNldAorIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKKyMKK2ZhYnNfZGVub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFic19ub3RfZXh0CQkjIG5vCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWJjbHIJCSYxNSwlZDAJCQkjIGNsZWFyIHNpZ24KKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudAorCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfZXh0X3VuZmxfZW5hCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2ZhYnNfZXh0X3VuZmxfZW5hOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZhYnNfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZmFic19kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZmFic19zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmYWJzX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZmFic19zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnIGZpbGUKKyMKK2ZhYnNfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmYWJzX3NkX25vcm1hbF9leGl0OgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2ZhYnNfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UuYgkJZmFic19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmYWJzX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZhYnNfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmYWJzX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIworIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKKyMKK2ZhYnNfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWJjbHIJCSYweDcsRlBfU0NSMF9FWCglYTYpCSMgZm9yY2UgYWJzb2x1dGUgdmFsdWUKKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCBnbyBjYWxjdWxhdGUgRVhPUCBmaXJzdC4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFic19zZF91bmZsX2VuYQkjIHllcworCitmYWJzX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgcG9zc2libGUgJ1onIGNjb2RlCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmYWJzX3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZhYnNfc2RfdW5mbF9kaXMKKworIworIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCisjCitmYWJzX3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZhYnNfc2Rfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfc2Rfb3ZmbF9lbmEJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2ZhYnNfc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2ZhYnNfc2Rfb3ZmbF9lbmE6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmYWJzX3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KKyMKK2ZhYnNfc2RfbWF5X292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KKwlmYmdlLncJCWZhYnNfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZmFic19zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZmFic19ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS53CQlmYWJzX2Rlbm9ybQorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU4KKwliZXEubAkJcmVzX3NuYW5fMW9wCisJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgorCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworCWZhYnMueAkJU1JDKCVhMCksJWZwMAkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQorCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZmFic19pbmYKK2ZhYnNfemVybzoKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKK2ZhYnNfaW5mOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmNtcCgpOiBmcCBjb21wYXJlIG9wIHJvdXRpbmUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjL21vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcyBhbmQgZGVub3JtcyBhcyBzcGVjaWFsIGNhc2VzLiBGb3IgZXZlcnl0aGluZyBlbHNlLAkjCisjIGp1c3QgdXNlIHRoZSBhY3R1YWwgZmNtcCBpbnN0cnVjdGlvbiB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbgkjCisjIGNvZGVzLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZmNtcAorZmNtcDoKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCisJYm5lLmIJCWZjbXBfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBDT01QQVJFIEZQIE9QcyA6IE5PUk1zLCBaRVJPcywgSU5GcywgYW5kICJjb3JyZWN0ZWQiIERFTk9STXMKKyMKK2ZjbXBfbm9ybToKKwlmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyBsb2FkIGRzdCBvcAorCisJZmNtcC54CQklZnAwLFNSQyglYTApCQkjIGRvIGNvbXBhcmUKKworCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgorCXJvbC5sCQkmMHg4LCVkMAkJIyBleHRyYWN0IGNjb2RlIGJpdHMKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBjY29kZSBiaXRzKG5vIGV4YyBiaXRzIGFyZSBzZXQpCisKKwlydHMKKworIworIyBmY21wOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmY21wX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZjbXBfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZjbXBfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mY21wX29wOgorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBOT1JNCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZjbXBfbnJtX2Rucm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIE5PUk0KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gWkVSTworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3MJLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gTk9STQorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIElORiAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgSU5GIC0gUU5BTgorCXNob3J0CQlmY21wX2Rucm1fcwktIHRibF9mY21wX29wICMgSU5GIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIElORiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBaRVJPCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKwlzaG9ydAkJZmNtcF9kbnJtX25ybQktIHRibF9mY21wX29wICMgREVOT1JNIC0gTk9STQorCXNob3J0CQlmY21wX2Rucm1fZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gWkVSTworCXNob3J0CQlmY21wX2Rucm1fZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3NkCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgREVOT1JNIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIE5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIFpFUk8KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIElORgorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gUU5BTgorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworIyB1bmxpa2UgYWxsIG90aGVyIGZ1bmN0aW9ucyBmb3IgUU5BTiBhbmQgU05BTiwgZmNtcCBkb2VzIE5PVCBzZXQgdGhlCisjICdOJyBiaXQgZm9yIGEgbmVnYXRpdmUgUU5BTiBvciBTTkFOIGlucHV0IHNvIHdlIG11c3Qgc3F1ZWxjaCBpdCBoZXJlLgorZmNtcF9yZXNfcW5hbjoKKwlic3IubAkJcmVzX3FuYW4KKwlhbmRpLmIJCSYweGY3LEZQU1JfQ0MoJWE2KQorCXJ0cworZmNtcF9yZXNfc25hbjoKKwlic3IubAkJcmVzX3NuYW4KKwlhbmRpLmIJCSYweGY3LEZQU1JfQ0MoJWE2KQorCXJ0cworCisjCisjIERFTk9STXMgYXJlIGEgbGl0dGxlIG1vcmUgZGlmZmljdWx0LgorIyBJZiB5b3UgaGF2ZSBhIDIgREVOT1JNcywgdGhlbiB5b3UgY2FuIGp1c3QgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lCisjIGFuZCB1c2UgdGhlIGZjbXBfbm9ybSByb3V0aW5lLgorIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYW4gSU5GIG9yIFpFUk8sIGp1c3QgZm9yY2UgdGhlIERFTk9STSdzIGotYml0IHRvIGEgb25lCisjIGFuZCB1c2UgdGhlIGZjbXBfbm9ybSByb3V0aW5lLgorIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYSBOT1JNIHdpdGggb3Bwb3NpdGUgc2lnbnMsIHRoZW4gdXNlIGZjbXBfbm9ybSwgYWxzby4KKyMgQnV0IHdpdGggYSBERU5PUk0gYW5kIGEgTk9STSBvZiB0aGUgc2FtZSBzaWduLCB0aGUgbmVnIGJpdCBpcyBzZXQgaWYgdGhlCisjICgxKSBzaWducyBhcmUgKCspIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBkc3Qgb3IKKyMgKDIpIHNpZ25zIGFyZSAoLSkgYW5kIHRoZSBERU5PUk0gaXMgdGhlIHNyYworIworCitmY21wX2Rucm1fczoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBzcmM7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX2Rucm1fZDoKKwltb3YubAkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBzcmM7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWExCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX2Rucm1fc2Q6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksJWQwCisJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KKwltb3YubAkJJWQwLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gZHN0OyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTEKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEudwkJZmNtcF9ub3JtCisKK2ZjbXBfbnJtX2Rucm06CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJtaS53CQlmY21wX2Rucm1fcworCisjIHNpZ25zIGFyZSB0aGUgc2FtZSwgc28gbXVzdCBkZXRlcm1pbmUgdGhlIGFuc3dlciBvdXJzZWx2ZXMuCisJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPworCWJtaS5iCQlmY21wX25ybV9kbnJtX20JCSMgeWVzCisJcnRzCitmY21wX25ybV9kbnJtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKKworZmNtcF9kbnJtX25ybToKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGRldGVybWluZSBpZiBsaWtlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYm1pLncJCWZjbXBfZG5ybV9kCisKKyMgc2lnbnMgYXJlIHRoZSBzYW1lLCBzbyBtdXN0IGRldGVybWluZSB0aGUgYW5zd2VyIG91cnNlbHZlcy4KKwl0c3QuYgkJJWQwCQkJIyBpcyBzcmMgb3AgbmVnYXRpdmU/CisJYnBsLmIJCWZjbXBfZG5ybV9ucm1fbQkJIyBubworCXJ0cworZmNtcF9kbnJtX25ybV9tOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnNnbG11bCgpOiBlbXVsYXRlcyB0aGUgZnNnbG11bCBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKKyMJdW5mX3JlczQoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgZm9yIHNnbG9wCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzZ2xtdWwgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzZ2xtdWwKK2ZzZ2xtdWw6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQorCisJYm5lLncJCWZzZ2xtdWxfbm90X25vcm0JIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCitmc2dsbXVsX25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwlhZGQubAkJKCVzcCkrLCVkMAkJIyBTQ0FMRV9GQUNUT1IgPSBzY2FsZTEgKyBzY2FsZTIKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCSMgd291bGQgcmVzdWx0IG92Zmw/CisJYmVxLncJCWZzZ2xtdWxfbWF5X292ZmwJIyByZXN1bHQgbWF5IHJuZCB0byBvdmVyZmxvdworCWJsdC53CQlmc2dsbXVsX292ZmwJCSMgcmVzdWx0IHdpbGwgb3ZlcmZsb3cKKworCWNtcGkubAkJJWQwLCYweDNmZmYrMHgwMDAxCSMgd291bGQgcmVzdWx0IHVuZmw/CisJYmVxLncJCWZzZ2xtdWxfbWF5X3VuZmwJIyByZXN1bHQgbWF5IHJuZCB0byBubyB1bmZsCisJYmd0LncJCWZzZ2xtdWxfdW5mbAkJIyByZXN1bHQgd2lsbCB1bmRlcmZsb3cKKworZnNnbG11bF9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xtdWxfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsbXVsX292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xtdWxfb3ZmbF90c3Q6CisKKyMgc2F2ZSBzZXR0aW5nIHRoaXMgdW50aWwgbm93IGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBmc2dsbXVsX21heV9vdmZsIG1heSBqdW1wIGluCisJb3IubAkJJm92ZmxfaW54X21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc2dsbXVsX292ZmxfZW5hCSMgeWVzCisKK2ZzZ2xtdWxfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGZvcmNlIHByZWMgPSBleHQKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsbXVsX292ZmxfZW5hOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIG1vdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnNnbG11bF9vdmZsX2RpcworCitmc2dsbXVsX21heV9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZnNnbG11bF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmc2dsbXVsX25vcm1hbF9leGl0CisKK2ZzZ2xtdWxfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbG11bF91bmZsX2VuYQkjIHllcworCitmc2dsbXVsX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXM0CQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZzZ2xtdWxfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmc2dsbXVsX3VuZmxfZGlzCisKK2ZzZ2xtdWxfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+IDIuYj8KKwlmYmd0LncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmc2dsbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAyIG9yCisjIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgorIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgorIyB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKKworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8IDwgMi5iPworCWZiZ2UudwkJZnNnbG11bF9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlicmEudwkJZnNnbG11bF91bmZsCQkjIHllcywgdW5kZXJmbG93IG9jY3VycmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIFNpbmdsZSBQcmVjaXNpb24gTXVsdGlwbHk6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZzZ2xtdWxfbm90X25vcm06CisJbW92LncJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZzZ2xtdWxfb3A6CisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggWkVSTworCXNob3J0CQlmc2dsbXVsX3Jlc19vcGVycgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfb3BlcnIJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggWkVSTworCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKK2ZzZ2xtdWxfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZzZ2xtdWxfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmc2dsbXVsX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnNnbG11bF96ZXJvOgorCWJyYS5sCQlmbXVsX3plcm8KK2ZzZ2xtdWxfaW5mX3NyYzoKKwlicmEubAkJZm11bF9pbmZfc3JjCitmc2dsbXVsX2luZl9kc3Q6CisJYnJhLmwJCWZtdWxfaW5mX2RzdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzZ2xkaXYoKTogZW11bGF0ZXMgdGhlIGZzZ2xkaXYgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbGRpdiB0bwkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNnbGRpdgorZnNnbGRpdjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKworCWJuZS53CQlmc2dsZGl2X25vdF9ub3JtCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBESVZJREU6IE5PUk1zIGFuZCBERU5PUk1zIE9OTFkhCisjCitmc2dsZGl2X25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IgMQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IgMgorCisJbmVnLmwJCSglc3ApCQkJIyBTLkYuID0gc2NhbGUxIC0gc2NhbGUyCisJYWRkLmwJCSVkMCwoJXNwKQorCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uLG1vZGUKKwlsc3IuYgkJJjB4NiwlZDEKKwltb3YubAkJKCVzcCkrLCVkMAorCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCisJYmxlLncJCWZzZ2xkaXZfbWF5X292ZmwKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgwMDAwCSMgd2lsbCByZXN1bHQgdW5kZXJmbG93PworCWJlcS53CQlmc2dsZGl2X21heV91bmZsCSMgbWF5YmUKKwliZ3QudwkJZnNnbGRpdl91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCitmc2dsZGl2X25vcm1hbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNhdmUgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZnNnbGRpdl9ub3JtYWxfZXhpdDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbGRpdl9tYXlfb3ZmbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIHNldCBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEKKwlmbW92LmwJCSYweDAsJWZwY3IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciByZXN1bHQKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWNtcC5sCQklZDEsJjB4N2ZmZgkJIyBkaWQgZGl2aWRlIG92ZXJmbG93PworCWJsdC5iCQlmc2dsZGl2X25vcm1hbF9leGl0CisKK2ZzZ2xkaXZfb3ZmbF90c3Q6CisJb3IudwkJJm92ZmxfaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbGRpdl9vdmZsX2VuYQkjIHllcworCitmc2dsZGl2X292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZQorCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGtpbGwgcHJlY2lzaW9uCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZzZ2xkaXZfb3ZmbF9lbmE6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgbXMgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xkaXZfb3ZmbF9kaXMKKworZnNnbGRpdl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbGRpdl91bmZsX2VuYQkjIHllcworCitmc2dsZGl2X3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXM0CQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZzZ2xkaXZfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbiwgbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnNnbGRpdl91bmZsX2RpcworCisjCisjIHRoZSBkaXZpZGUgb3BlcmF0aW9uIE1BWSB1bmRlcmZsb3c6CisjCitmc2dsZGl2X21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID4gMS5iPworCWZiZ3QudwkJZnNnbGRpdl9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlmYmx0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAxLiBidXQsCisjIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDEKKyMgb3IgYSBub3JtYWxpemVkIG51bWJlciB0aGF0IHJvdW5kZWQgZG93biB0byBhIDEuIHNvLCByZWRvIHRoZSBlbnRpcmUKKyMgb3BlcmF0aW9uIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZAorIyByZXN1bHQgaXMuIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gJWZwMQorCisJY2xyLmwJCSVkMQkJCSMgY2xlYXIgc2NyYXRjaCByZWdpc3RlcgorCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGZvcmNlIFJaIHJuZCBtb2RlCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CisJZmJnZS53CQlmc2dsZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmc2dsZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZnNnbGRpdl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mc2dsZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mc2dsZGl2X29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZnNnbGRpdl9vcDoKKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfbG9hZAktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfZHN0CQktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3Jlc19vcGVycgktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9pbmZfZHN0CQktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfbG9hZAktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCitmc2dsZGl2X3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnNnbGRpdl9yZXNfc25hbjoKKwlicmEubAkJcmVzX3NuYW4KK2ZzZ2xkaXZfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZzZ2xkaXZfaW5mX2xvYWQ6CisJYnJhLmwJCWZkaXZfaW5mX2xvYWQKK2ZzZ2xkaXZfemVyb19sb2FkOgorCWJyYS5sCQlmZGl2X3plcm9fbG9hZAorZnNnbGRpdl9pbmZfZHN0OgorCWJyYS5sCQlmZGl2X2luZl9kc3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJZnNhZGQoKTogZW11bGF0ZXMgdGhlIGZhZGQgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGFkZCgpOiBlbXVsYXRlcyB0aGUgZmRhZGQgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKKyMJcmVzX29wZXJyKCkgLSBzZXQgT1BFUlIgcmVzdWx0CQkJCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJRG8gYWRkaXRpb24gYWZ0ZXIgc2NhbGluZyBleHBvbmVudHMgc3VjaCB0aGF0IGV4Y2VwdGlvbiB3b24ndAkjCisjIG9jY3VyLiBUaGVuLCBjaGVjayByZXN1bHQgZXhwb25lbnQgdG8gc2VlIGlmIGV4Y2VwdGlvbiB3b3VsZCBoYXZlCSMKKyMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCByZXN1bHQgYW5kIG1heWJlIEVYT1AuIEVsc2UsIGluc2VydAkjCisjIHRoZSBjb3JyZWN0IHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLiBTZXQgRlBTUiBiaXRzIGFzIGFwcHJvcHJpYXRlLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2FkZAorZnNhZGQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYworCWJyYS5iCQlmYWRkCisKKwlnbG9iYWwJCWZkYWRkCitmZGFkZDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZhZGQKK2ZhZGQ6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZmFkZF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIEFERDogbm9ybXMgYW5kIGRlbm9ybXMKKyMKK2ZhZGRfbm9ybToKKwlic3IubAkJYWRkc3ViX3NjYWxlcjIJCSMgc2NhbGUgZXhwb25lbnRzCisKK2ZhZGRfemVyb19lbnRyeToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMixOLFoKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCisKKwlmYmVxLncJCWZhZGRfemVyb19leGl0CQkjIGlmIHJlc3VsdCBpcyB6ZXJvLCBlbmQgbm93CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg2LCVkMQorCisJbW92LncJCSglc3ApLCVkMgkJIyBmZXRjaCBuZXcgc2lnbiwgZXhwCisJYW5kaS5sCQkmMHg3ZmZmLCVkMgkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDIJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKworCWNtcC5sCQklZDIsKHRibF9mYWRkX292ZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiBvdmVyZmxvdz8KKwliZ2UuYgkJZmFkZF9vdmZsCQkjIHllcworCisJY21wLmwJCSVkMiwodGJsX2ZhZGRfdW5mbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIHVuZGVyZmxvdz8KKwlibHQudwkJZmFkZF91bmZsCQkjIHllcworCWJlcS53CQlmYWRkX21heV91bmZsCQkjIG1heWJlOyBnbyBmaW5kIG91dAorCitmYWRkX25vcm1hbDoKKwltb3YudwkJKCVzcCksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIHNpZ24KKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF96ZXJvX2V4aXQ6CisjCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiB6ZXJvIGluIGZwMAorCXJ0cworCit0YmxfZmFkZF9vdmZsOgorCWxvbmcJCTB4N2ZmZgkJCSMgZXh0IG92ZmwKKwlsb25nCQkweDQwN2YJCQkjIHNnbCBvdmZsCisJbG9uZwkJMHg0M2ZmCQkJIyBkYmwgb3ZmbAorCit0YmxfZmFkZF91bmZsOgorCWxvbmcJICAgICAgICAweDAwMDAJCQkjIGV4dCB1bmZsCisJbG9uZwkJMHgzZjgxCQkJIyBzZ2wgdW5mbAorCWxvbmcJCTB4M2MwMQkJCSMgZGJsIHVuZmwKKworZmFkZF9vdmZsOgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWRkX292ZmxfZW5hCQkjIHllcworCisJYWRkLmwJCSYweGMsJXNwCitmYWRkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF9vdmZsX2VuYToKKwltb3YuYgkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmYWRkX292ZmxfZW5hX3NkCSMgbm87IHByZWMgPSBzZ2wgb3IgZGJsCisKK2ZhZGRfb3ZmbF9lbmFfY29udDoKKwltb3YudwkJKCVzcCksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIHNpZ24KKwlzdWJpLmwJCSYweDYwMDAsJWQyCQkjIGFkZCBleHRyYSBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZmFkZF9vdmZsX2RpcworCitmYWRkX292ZmxfZW5hX3NkOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlhZGQubAkJJjB4Yywlc3AKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkKKwlicmEuYgkJZmFkZF9vdmZsX2VuYV9jb250CisKK2ZhZGRfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWFkZC5sCQkmMHhjLCVzcAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWRkX3VuZmxfZW5hCQkjIHllcworCitmYWRkX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFkZF91bmZsX2VuYV9zZAkjIG5vOyBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZmFkZF91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmYWRkX3VuZmxfZGlzCisKK2ZhZGRfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmYWRkX3VuZmxfZW5hX2NvbnQKKworIworIyByZXN1bHQgaXMgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24KKyMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCisjIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAuCisjCitmYWRkX21heV91bmZsOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQorCWJlcS53CQlmYWRkX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJbW92LmwJCTB4NCglc3ApLCVkMQkJIyBleHRyYWN0IGhpKG1hbikKKwljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KKwlibmUudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CisJYm5lLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIG9rLCBzbyBub3cgdGhlIHJlc3VsdCBoYXMgYSBleHBvbmVudCBlcXVhbCB0byB0aGUgc21hbGxlc3Qgbm9ybWFsaXplZAorIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCisjIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCisjIGcscixzLgorIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CisjIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgorIyBzbywgd2UgZG8gdGhpcyBiZSByZS1leGVjdXRpbmcgdGhlIGFkZCB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKyMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gZnAxCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZhYnMueAkJJWZwMAkJCSMgY29tcGFyZSBhYnNvbHV0ZSB2YWx1ZXMKKwlmYWJzLngJCSVmcDEKKwlmY21wLngJCSVmcDAsJWZwMQkJIyBpcyBmaXJzdCByZXN1bHQgPiBzZWNvbmQ/CisKKwlmYmd0LncJCWZhZGRfdW5mbAkJIyB5ZXM7IGl0J3MgYW4gdW5kZXJmbG93CisJYnJhLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBpdCdzIG5vdCBhbiB1bmRlcmZsb3cKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBBZGQ6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZhZGRfbm90X25vcm06CisJbW92LncJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZhZGRfb3A6CisJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgTk9STSArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvX3NyYwktIHRibF9mYWRkX29wICMgTk9STSArIFpFUk8KKwlzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgSU5GCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCisJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgTk9STSArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvXzIJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgWkVSTyArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX3plcm9fZHN0CS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworCXNob3J0CQlmYWRkX2luZl9kc3QJLSB0YmxfZmFkZF9vcCAjIElORiArIE5PUk0KKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mXzIJLSB0YmxfZmFkZF9vcCAjIElORiArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX2luZl9kc3QJLSB0YmxfZmFkZF9vcCAjIElORiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIE5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIFpFUk8KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgUU5BTgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvX3NyYwktIHRibF9mYWRkX29wICMgREVOT1JNICsgWkVSTworCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIE5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIFpFUk8KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIElORgorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgUU5BTgorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworZmFkZF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZhZGRfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCisKKyMKKyMgYm90aCBvcGVyYW5kcyBhcmUgWkVST2VzCisjCitmYWRkX3plcm9fMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGFyZSB0aGUgc2lnbnMgb3Bwb3NpdGUKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlibWkudwkJZmFkZF96ZXJvXzJfY2hrX3JtCSMgd2VlZCBvdXQgKC1aRVJPKSsoK1pFUk8pCisKKyMgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZS4gc28gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUKKyMgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGVseSBzaWduZWQgemVyby4KKwl0c3QuYgkJJWQwCQkJIyBhcmUgWkVST2VzIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJtaS5iCQlmYWRkX3plcm9fcm0JCSMgbmVnYXRpdmUKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyB0aGUgWkVST2VzIGhhdmUgb3Bwb3NpdGUgc2lnbnM6CisjIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGVzIGFyZSBSTixSWiwgb3IgUlAuCisjIC0gLVpFUk8gaXMgcmV0dXJuZWQgaW4gdGhlIGNhc2Ugb2YgUk0uCisjCitmYWRkX3plcm9fMl9jaGtfcm06CisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQorCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9PSBSTT8KKwliZXEuYgkJZmFkZF96ZXJvX3JtCQkjIHllcworCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCitmYWRkX3plcm9fcm06CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCisJbW92LmIJCSZuZWdfYm1hc2srel9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgTkVHL1oKKwlydHMKKworIworIyBvbmUgb3BlcmFuZCBpcyBhIFpFUk8gYW5kIHRoZSBvdGhlciBpcyBhIERFTk9STSBvciBOT1JNLiBzY2FsZQorIyB0aGUgREVOT1JNIG9yIE5PUk0gYW5kIGp1bXAgdG8gdGhlIHJlZ3VsYXIgZmFkZCByb3V0aW5lLgorIworZmFkZF96ZXJvX2RzdDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSB0aGUgb3BlcmFuZAorCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKKwljbHIubAkJRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCisKK2ZhZGRfemVyb19zcmM6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMF9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKwlicmEudwkJZmFkZF96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZmFkZAorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUKKyMgZGlmZmVyZW50IHNpZ25zLiBlbHNlLCBhbiBJTkYgb2YgdGhlIHNhbWUgc2lnbiBpcyByZXR1cm5lZAorIworZmFkZF9pbmZfMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlibWkubAkJcmVzX29wZXJyCQkjIHdlZWQgb3V0ICgtSU5GKSsoK0lORikKKworIyBvaywgc28gaXQncyBub3QgYW4gT1BFUlIuIGJ1dCwgd2UgZG8gaGF2ZSB0byByZW1lbWJlciB0byByZXR1cm4gdGhlCisjIHNyYyBJTkYgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSA4ODEvODgyIGdldHMgdGhlIGotYml0IGZyb20uLi4KKworIworIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQorIworZmFkZF9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBzcmMgSU5GCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZT8KKwlicGwuYgkJZmFkZF9pbmZfZG9uZQkJIyB5ZXM7IHdlJ3JlIGRvbmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworIworIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQorIworZmFkZF9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGlzIElORiBwb3NpdGl2ZT8KKwlicGwuYgkJZmFkZF9pbmZfZG9uZQkJIyB5ZXM7IHdlJ3JlIGRvbmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZmFkZF9pbmZfZG9uZToKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnN1YigpOiBlbXVsYXRlcyB0aGUgZnN1YiBpbnN0cnVjdGlvbgkJCQkjCisjCWZzc3ViKCk6IGVtdWxhdGVzIHRoZSBmc3N1YiBpbnN0cnVjdGlvbgkJCQkjCisjCWZkc3ViKCk6IGVtdWxhdGVzIHRoZSBmZHN1YiBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhZGRzdWJfc2NhbGVyMigpIC0gc2NhbGUgdGhlIG9wZXJhbmRzIHNvIHRoZXkgd29uJ3QgdGFrZSBleGMJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSBzZXQgUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHNldCBTTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfb3BlcnIoKSAtIHNldCBPUEVSUiByZXN1bHQJCQkJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNldCBzcmMgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNldCBkc3Qgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIwlEbyBzdWJ0cmFjdGlvbiBhZnRlciBzY2FsaW5nIGV4cG9uZW50cyBzdWNoIHRoYXQgZXhjZXB0aW9uIHdvbid0IworIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIworIyB0aGUgY29ycmVjdCByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4gU2V0IEZQU1IgYml0cyBhcyBhcHByb3ByaWF0ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNzdWIKK2Zzc3ViOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZnN1YgorCisJZ2xvYmFsCQlmZHN1YgorZmRzdWI6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmc3ViCitmc3ViOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZzdWJfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBTVUI6IG5vcm1zIGFuZCBkZW5vcm1zCisjCitmc3ViX25vcm06CisJYnNyLmwJCWFkZHN1Yl9zY2FsZXIyCQkjIHNjYWxlIGV4cG9uZW50cworCitmc3ViX3plcm9fZW50cnk6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMiwgTiwgWgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBleGMgYW5kIGNjb2RlIGJpdHMKKworCWZiZXEudwkJZnN1Yl96ZXJvX2V4aXQJCSMgaWYgcmVzdWx0IHplcm8sIGVuZCBub3cKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKworCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCisJbHNyLmIJCSYweDYsJWQxCisKKwltb3YudwkJKCVzcCksJWQyCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisKKwljbXAubAkJJWQyLCh0YmxfZnN1Yl9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CisJYmdlLmIJCWZzdWJfb3ZmbAkJIyB5ZXMKKworCWNtcC5sCQklZDIsKHRibF9mc3ViX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CisJYmx0LncJCWZzdWJfdW5mbAkJIyB5ZXMKKwliZXEudwkJZnN1Yl9tYXlfdW5mbAkJIyBtYXliZTsgZ28gZmluZCBvdXQKKworZnN1Yl9ub3JtYWw6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfemVyb19leGl0OgorIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKKwlydHMKKwordGJsX2ZzdWJfb3ZmbDoKKwlsb25nCQkweDdmZmYJCQkjIGV4dCBvdmZsCisJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAorCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKKwordGJsX2ZzdWJfdW5mbDoKKwlsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAorCWxvbmcJCTB4M2Y4MQkJCSMgc2dsIHVuZmwKKwlsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCisKK2ZzdWJfb3ZmbDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnN1Yl9vdmZsX2VuYQkJIyB5ZXMKKworCWFkZC5sCQkmMHhjLCVzcAorZnN1Yl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfb3ZmbF9lbmE6CisJbW92LmIJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnN1Yl9vdmZsX2VuYV9zZAkjIG5vCisKK2ZzdWJfb3ZmbF9lbmFfY29udDoKKwltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIHtzZ24sZXhwfQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBzdWJ0cmFjdCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDIJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmc3ViX292ZmxfZGlzCisKK2ZzdWJfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWFkZC5sCQkmMHhjLCVzcAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQorCWJyYS5iCQlmc3ViX292ZmxfZW5hX2NvbnQKKworZnN1Yl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJYWRkLmwJCSYweGMsJXNwCisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzdWJfdW5mbF9lbmEJCSMgeWVzCisKK2ZzdWJfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjICdaJyBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmc3ViX3VuZmxfZW5hX3NkCSMgbm8KKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCitmc3ViX3VuZmxfZW5hX2NvbnQ6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2duLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmc3ViX3VuZmxfZGlzCisKK2ZzdWJfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGNsZWFyIHJuZCBwcmVjCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmc3ViX3VuZmxfZW5hX2NvbnQKKworIworIyByZXN1bHQgaXMgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24KKyMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCisjIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAuCisjCitmc3ViX21heV91bmZsOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBmZXRjaCBybmQgcHJlYworCWJlcS53CQlmc3ViX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJbW92LmwJCTB4NCglc3ApLCVkMQorCWNtcGkubAkJJWQxLCYweDgwMDAwMDAwCQkjIGlzIGhpKG1hbikgPSAweDgwMDAwMDAwPworCWJuZS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKwl0c3QubAkJMHg4KCVzcCkJCSMgaXMgbG8obWFuKSA9IDB4MD8KKwlibmUudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PworCWJlcS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgb2ssIHNvIG5vdyB0aGUgcmVzdWx0IGhhcyBhIGV4cG9uZW50IGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkCisjIGV4cG9uZW50IGZvciB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uLiBhbHNvLCB0aGUgbWFudGlzc2EgaXMgZXF1YWwgdG8KKyMgMHg4MDAwMDAwMDAwMDAwMDAwIGFuZCB0aGlzIG1hbnRpc3NhIGlzIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgbm9uLXplcm8KKyMgZyxyLHMuCisjIG5vdywgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cKKyMgcm91bmRlZCAidXAiIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgcm91bmRlZCAiZG93biIuCisjIHNvLCB3ZSBkbyB0aGlzIGJlIHJlLWV4ZWN1dGluZyB0aGUgYWRkIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIGFuZAorIyBzZWVpbmcgaWYgdGhlIG5ldyByZXN1bHQgaXMgc21hbGxlciBvciBlcXVhbCB0byB0aGUgY3VycmVudCByZXN1bHQuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIGNvbXBhcmUgYWJzb2x1dGUgdmFsdWVzCisJZmFicy54CQklZnAxCisJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPworCisJZmJndC53CQlmc3ViX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdworCWJyYS53CQlmc3ViX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgU3ViOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmc3ViX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mc3ViX29wOgorCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb19zcmMJLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBaRVJPCisJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgTk9STSAtIElORgorCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgorCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb18yCS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl96ZXJvX2RzdAktIHRibF9mc3ViX29wICMgWkVSTyAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKKwlzaG9ydAkJZnN1Yl9pbmZfZHN0CS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBOT1JNCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl8yCS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9pbmZfZHN0CS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBaRVJPCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb19zcmMJLSB0YmxfZnN1Yl9vcCAjIERFTk9STSAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBaRVJPCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKK2ZzdWJfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmc3ViX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIFpFUk9lcworIworZnN1Yl96ZXJvXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQxLCVkMAorCWJwbC5iCQlmc3ViX3plcm9fMl9jaGtfcm0KKworIyB0aGUgc2lnbnMgYXJlIG9wcG9zaXRlLCBzbywgcmV0dXJuIGEgWkVSTyB3LyB0aGUgc2lnbiBvZiB0aGUgZHN0IFpFUk8KKwl0c3QuYgkJJWQwCQkJIyBpcyBkc3QgbmVnYXRpdmU/CisJYm1pLmIJCWZzdWJfemVyb18yX3JtCQkjIHllcworCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIG5vOyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyB0aGUgWkVST2VzIGhhdmUgdGhlIHNhbWUgc2lnbnM6CisjIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk4sUlosIG9yIFJQCisjIC0gLVpFUk8gaXMgcmV0dXJuZWQgaW4gdGhlIGNhc2Ugb2YgUk0uCisjCitmc3ViX3plcm9fMl9jaGtfcm06CisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQorCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9IFJNPworCWJlcS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBubzsgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKK2ZzdWJfemVyb18yX3JtOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFovTkVHCisJcnRzCisKKyMKKyMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgYSBOT1JNLgorIyBzY2FsZSB0aGUgREVOT1JNIG9yIE5PUk0gYW5kIGp1bXAgdG8gdGhlIHJlZ3VsYXIgZnN1YiByb3V0aW5lLgorIworZnN1Yl96ZXJvX2RzdDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSB0aGUgb3BlcmFuZAorCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKKwljbHIubAkJRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCWJyYS53CQlmc3ViX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmc3ViCisKK2ZzdWJfemVyb19zcmM6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMF9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKwlicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUgdGhlCisjIHNhbWUgc2lnbnMuIGVsc2UsCisjCitmc3ViX2luZl8yOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQxLCVkMAorCWJwbC5sCQlyZXNfb3BlcnIJCSMgd2VlZCBvdXQgKC1JTkYpKygrSU5GKQorCisjIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0IHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuCisjIHRoZSBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdC4KKworZnN1Yl9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBzcmMgSU5GCisJZm5lZy54CQklZnAwCQkJIyBpbnZlcnQgc2lnbgorCWZiZ2UudwkJZnN1Yl9pbmZfZG9uZQkJIyBzaWduIGlzIG5vdyBwb3NpdGl2ZQorCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRworCXJ0cworCitmc3ViX2luZl9kc3Q6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIGRzdCBJTkYKKwl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJwbC5iCQlmc3ViX2luZl9kb25lCQkjIG5vCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZzdWJfaW5mX2RvbmU6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzcXJ0KCk6IGVtdWxhdGVzIHRoZSBmc3FydCBpbnN0cnVjdGlvbgkJCQkjCisjCWZzc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNzcXJ0IGluc3RydWN0aW9uCQkJIworIwlmZHNxcnQoKTogZW11bGF0ZXMgdGhlIGZkc3FydCBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3NxcnQoKSAtIHNjYWxlIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW5fMW9wKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJIworIwlyZXNfc25hbl8xb3AoKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIHNxcnQJCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNxcnQgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzc3FydAorZnNzcXJ0OgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmc3FydAorCisJZ2xvYmFsCQlmZHNxcnQKK2Zkc3FydDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZnNxcnQKK2ZzcXJ0OgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKwljbHIudwkJJWQxCisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUudwkJZnNxcnRfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBTUVVBUkUgUk9PVDogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKKyMKK2ZzcXJ0X25vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmwJCXJlc19vcGVycgkJIyB5ZXMKKworCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnNxcnRfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc3FydC54CQkoJWEwKSwlZnAwCQkjIGV4ZWN1dGUgc3F1YXJlIHJvb3QKKworCWZtb3YubAkJJWZwc3IsJWQxCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2V0IE4sSU5FWAorCisJcnRzCisKK2ZzcXJ0X2Rlbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkubAkJcmVzX29wZXJyCQkjIHllcworCisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmc3FydF9ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwlicmEudwkJZnNxcnRfc2Rfbm9ybWFsCisKKyMKKyMgb3BlcmFuZCBpcyBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZQorIworZnNxcnRfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUudwkJZnNxcnRfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZzcXJ0X3NnbDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV9zcXJ0CQkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgxCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZXEudwkJZnNxcnRfc2RfbWF5X3VuZmwKKwliZ3QudwkJZnNxcnRfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDA3ZgkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZnNxcnRfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmc3FydF9zZF9ub3JtYWw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc3FydF9zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmc3FydF9kYmw6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMQkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCisJYmd0LmIJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQzZmYJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZnNxcnRfc2Rfbm9ybWFsCQkjIG5vOyBobyBoYW5kbGUgbm9ybWFsaXplZCBvcAorCisjIHdlJ3JlIG9uIHRoZSBsaW5lIGhlcmUgYW5kIHRoZSBkaXN0aW5ndWlzaW5nIGNoYXJhY3RlcmlzdGljIGlzIHdoZXRoZXIKKyMgdGhlIGV4cG9uZW50IGlzIDNmZmYgb3IgM2ZmZS4gaWYgaXQncyAzZmZlLCB0aGVuIGl0J3MgYSBzYWZlIG51bWJlcgorIyBlbHNld2lzZSBmYWxsIHRocm91Z2ggdG8gdW5kZXJmbG93LgorZnNxcnRfc2RfbWF5X3VuZmw6CisJYnRzdAkJJjB4MCwxK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIGV4cG9uZW50IDB4M2ZmZj8KKwlibmUudwkJZnNxcnRfc2Rfbm9ybWFsCQkjIHllcywgc28gbm8gdW5kZXJmbG93CisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmc3FydF9zZF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNxdWFyZSByb290CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCBnbyBjYWxjdWxhdGUgRVhPUCBmaXJzdC4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNxcnRfc2RfdW5mbF9lbmEJIyB5ZXMKKworZnNxcnRfc2RfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBwb3NzaWJsZSAnWicgY2NvZGUKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCisjIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KKyMKK2ZzcXJ0X3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZzcXJ0X3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZnNxcnRfc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHNxdWFyZSByb290CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzcXJ0X3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc3FydF9zZF9vdmZsX2VuYQkjIHllcworCisjCisjIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CisjIGNhbGxpbmcgb3ZmX3JlcygpLgorIworZnNxcnRfc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2ZzcXJ0X3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZnNxcnRfc2Rfb3ZmbF9kaXMKKworIworIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgorIworZnNxcnRfc2RfbWF5X292Zmw6CisJYnRzdAkJJjB4MCwxK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIGV4cG9uZW50IDB4M2ZmZj8KKwlibmUudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXMsIHNvIG92ZXJmbG93CisKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZtb3YueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID49IDEuYj8KKwlmYmdlLncJCWZzcXJ0X3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbF9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmc3FydF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS53CQlmc3FydF9kZW5vcm0KKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZzcXJ0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmc3FydF9pbmYKKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AKKworIworIwlmc3FydCgrMCkgPSArMAorIwlmc3FydCgtMCkgPSAtMAorIwlmc3FydCgrSU5GKSA9ICtJTkYKKyMJZnNxcnQoLUlORikgPSBPUEVSUgorIworZnNxcnRfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkuYgkJZnNxcnRfemVyb19tCQkjIG5lZ2F0aXZlCitmc3FydF96ZXJvX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmc3FydF96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCisJcnRzCisKK2ZzcXJ0X2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJtaS5sCQlyZXNfb3BlcnIJCSMgbmVnYXRpdmUKK2ZzcXJ0X2luZl9wOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiArSU5GIGluIGZwMAorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKTogc2NhbGUgaW5wdXRzIHRvIGZhZGQvZnN1YiBzdWNoIHRoYXQgbm8JIworIwkJCSAgT1ZGTC9VTkZMIGV4Y2VwdGlvbnMgd2lsbCByZXN1bHQJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBtYW50aXNzYSBhZnRlciBhZGp1c3RpbmcgZXhwb25lbnQJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBmcCBvcDEoc3JjKQkJCQkJIworIwlGUF9EU1QoYTYpID0gZnAgb3AyKGRzdCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBmcCBvcDEgc2NhbGVkKHNyYykJCQkJCSMKKyMJRlBfRFNUKGE2KSA9IGZwIG9wMiBzY2FsZWQoZHN0KQkJCQkJIworIwlkMCAgICAgICAgID0gc2NhbGUgYW1vdW50CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiB0aGUgRFNUIGV4cG9uZW50IGlzID4gdGhlIFNSQyBleHBvbmVudCwgc2V0IHRoZSBEU1QgZXhwb25lbnQJIworIyBlcXVhbCB0byAweDNmZmYgYW5kIHNjYWxlIHRoZSBTUkMgZXhwb25lbnQgYnkgdGhlIHZhbHVlIHRoYXQgdGhlCSMKKyMgRFNUIGV4cG9uZW50IHdhcyBzY2FsZWQgYnkuIElmIHRoZSBTUkMgZXhwb25lbnQgaXMgZ3JlYXRlciBvciBlcXVhbCwJIworIyBkbyB0aGUgb3Bwb3NpdGUuIFJldHVybiB0aGlzIHNjYWxlIGZhY3RvciBpbiBkMC4JCQkjCisjCUlmIHRoZSB0d28gZXhwb25lbnRzIGRpZmZlciBieSA+IHRoZSBudW1iZXIgb2YgbWFudGlzc2EgYml0cwkjCisjIHBsdXMgdHdvLCB0aGVuIHNldCB0aGUgc21hbGxlc3QgZXhwb25lbnQgdG8gYSB2ZXJ5IHNtYWxsIHZhbHVlIGFzIGEJIworIyBxdWljayBzaG9ydGN1dC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJYWRkc3ViX3NjYWxlcjIKK2FkZHN1Yl9zY2FsZXIyOgorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJbW92LncJCURTVF9FWCglYTEpLCVkMQorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKKworCWFuZGkudwkJJjB4N2ZmZiwlZDAKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBzdG9yZSBzcmMgZXhwb25lbnQKKwltb3YudwkJJWQxLDIrTF9TQ1IxKCVhNikJIyBzdG9yZSBkc3QgZXhwb25lbnQKKworCWNtcC53CQklZDAsICVkMQkJIyBpcyBzcmMgZXhwID49IGRzdCBleHA/CisJYmdlLmwJCXNyY19leHBfZ2UyCisKKyMgZHN0IGV4cCBpcyA+ICBzcmMgZXhwOyBzY2FsZSBkc3QgdG8gZXhwID0gMHgzZmZmCitkc3RfZXhwX2d0MjoKKwlic3IubAkJc2NhbGVfdG9femVyb19kc3QKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CisJYm5lLmIJCWNtcGV4cDEyCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBkZW5vcm07IHJlc3VsdCBpcyBuZXcgZXhwCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCisJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBpbnNldCBuZXcgZXhwCisKK2NtcGV4cDEyOgorCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAorCXN1YmkudwkJJm1hbnRpc3NhbGVuKzIsJWQwCSMgc3VidHJhY3QgbWFudGlzc2FsZW4rMiBmcm9tIGxhcmdlciBleHAKKworCWNtcC53CQklZDAsTF9TQ1IxKCVhNikJCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CisJYmdlLmIJCXF1aWNrX3NjYWxlMTIKKworCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKKwlhZGQudwkJMHgyKCVzcCksJWQwCQkjIHNjYWxlIHNyYyBleHBvbmVudCBieSBzY2FsZSBmYWN0b3IKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQorCWFuZC53CQkmMHg4MDAwLCVkMQorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCitxdWlja19zY2FsZTEyOgorCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyB6ZXJvIHNyYyBleHBvbmVudAorCWJzZXQJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBzZXQgZXhwID0gMQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCisjIHNyYyBleHAgaXMgPj0gZHN0IGV4cDsgc2NhbGUgc3JjIHRvIGV4cCA9IDB4M2ZmZgorc3JjX2V4cF9nZTI6CisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkuYgkJRFRBRyglYTYpLCZERU5PUk0JIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJuZS5iCQljbXBleHAyMgorCWxlYQkJRlBfU0NSMSglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIGRlbm9ybTsgcmVzdWx0IGlzIG5ldyBleHAKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IHZhbCkKKwltb3YudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpbnNldCBuZXcgZXhwCisKK2NtcGV4cDIyOgorCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKKwlzdWJpLncJCSZtYW50aXNzYWxlbisyLCVkMAkjIHN1YnRyYWN0IG1hbnRpc3NhbGVuKzIgZnJvbSBsYXJnZXIgZXhwCisKKwljbXAudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpcyBkaWZmZXJlbmNlID49IGxlbihtYW50aXNzYSkrMj8KKwliZ2UuYgkJcXVpY2tfc2NhbGUyMgorCisJbW92LncJCTIrTF9TQ1IxKCVhNiksJWQwCisJYWRkLncJCTB4Miglc3ApLCVkMAkJIyBzY2FsZSBkc3QgZXhwb25lbnQgYnkgc2NhbGUgZmFjdG9yCisJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQxCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IHtzZ24sbmV3IGV4cH0KKwltb3YudwkJJWQwLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZHN0IGV4cG9uZW50CisKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCisJcnRzCisKK3F1aWNrX3NjYWxlMjI6CisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjFfRVgoJWE2KQkjIHplcm8gZHN0IGV4cG9uZW50CisJYnNldAkJJjB4MCwxK0ZQX1NDUjFfRVgoJWE2KQkjIHNldCBleHAgPSAxCisKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQkJICAgICB2YWx1ZSBhdCBGUF9TQ1IwKGE2KS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGlmIHRoZSBvcGVyYW5kIHdhcyBhIERFTk9STQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kIHRvIGJlIHNjYWxlZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBzY2FsZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQJCQkjCisjCWQwCSAgICA9IHNjYWxlIHZhbHVlCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTZXQgdGhlIGV4cG9uZW50IG9mIHRoZSBpbnB1dCBvcGVyYW5kIHRvIDB4M2ZmZi4gU2F2ZSB0aGUgdmFsdWUJIworIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCisjIG5vcm1hbGl6ZSB0aGUgb3BlcmFuZCBpZiBpdCB3YXMgYSBERU5PUk0uIEFkZCB0aGlzIG5vcm1hbGl6YXRpb24JIworIyB2YWx1ZSB0byB0aGUgcHJldmlvdXMgdmFsdWUuIFJldHVybiB0aGUgcmVzdWx0LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNjYWxlX3RvX3plcm9fc3JjCitzY2FsZV90b196ZXJvX3NyYzoKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQorCisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAorCisJYW5kaS53CQkmMHg4MDAwLCVkMAkJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KKwlvci53CQkmMHgzZmZmLCVkMAkJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IGJpYXNlZCBleHBvbmVudAorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwliZXEuYgkJc3R6c19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworc3R6c19ub3JtOgorCW1vdi5sCQkmMHgzZmZmLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKworCXJ0cworCitzdHpzX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJbW92LmwJCSVkMCwlZDEJCQkjIHByZXBhcmUgZm9yIG9wX25vcm0gY2FsbAorCWJyYS5iCQlzdHpzX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKKworIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfc3FydCgpOiBzY2FsZSB0aGUgaW5wdXQgb3BlcmFuZCBleHBvbmVudCBzbyBhIHN1YnNlcXVlbnQJIworIwkJICAgICAgZnNxcnQgb3BlcmF0aW9uIHdvbid0IHRha2UgYW4gZXhjZXB0aW9uLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgdGhlIGlucHV0IG9wZXJhbmQgaXMgYSBERU5PUk0sIG5vcm1hbGl6ZSBpdC4JCQkjCisjCUlmIHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBldmVuLCBzZXQgdGhlIGV4cG9uZW50CSMKKyMgdG8gMHgzZmZlIGFuZCByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZlKS8yIi4gSWYgdGhlCSMKKyMgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgb2ZmLCBzZXQgdGhlIGV4cG9uZW50IHRvIG94M2ZmZiBhbmQJIworIyByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZmKS8yIi4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2NhbGVfc3FydAorc2NhbGVfc3FydDoKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJlcS5iCQlzc19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZXh0cmFjdCBvcGVyYW5kJ3Mge3NnbixleHB9CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAorCisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjBfRVgoJWE2KQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgorCisJYnRzdAkJJjB4MCwlZDEJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPworCWJlcS5iCQlzc19ub3JtX2V2ZW4KKworCW9yaS53CQkmMHgzZmZmLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LmwJCSYweDNmZmYsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3Nfbm9ybV9ldmVuOgorCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LmwJCSYweDNmZmUsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3NfZGVub3JtOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIHNyYyBvcAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCisKKwlidHN0CQkmMHgwLCVkMAkJIyBpcyBleHAgZXZlbiBvciBvZGQ/CisJYmVxLmIJCXNzX2Rlbm9ybV9ldmVuCisKKwlvcmkudwkJJjB4M2ZmZixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCWFkZC5sCQkmMHgzZmZmLCVkMAorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3NfZGVub3JtX2V2ZW46CisJb3JpLncJCSYweDNmZmUsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwlhZGQubAkJJjB4M2ZmZSwlZDAKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKKyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCk6IHNjYWxlIHRoZSBleHBvbmVudCBvZiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCSAgICAgdmFsdWUgYXQgRlBfU0NSMShhNikuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMShhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjEoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKKyMgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgYW5kIG5ldyBleHBvbmVudC4gVGhlbiwJIworIyBub3JtYWxpemUgdGhlIG9wZXJhbmQgaWYgaXQgd2FzIGEgREVOT1JNLiBBZGQgdGhpcyBub3JtYWxpemF0aW9uCSMKKyMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzY2FsZV90b196ZXJvX2RzdAorc2NhbGVfdG9femVyb19kc3Q6CisJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCwlZDAJCSMgZXh0cmFjdCBvcGVyYW5kJ3Mgc2duCisJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwltb3YudwkJJWQwLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBiaWFzZWQgZXhwb25lbnQKKworCWNtcGkuYgkJRFRBRyglYTYpLCZERU5PUk0JIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYmVxLmIJCXN0emRfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK3N0emRfbm9ybToKKwltb3YubAkJJjB4M2ZmZiwlZDAKKwlzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCisJcnRzCisKK3N0emRfZGVub3JtOgorCWxlYQkJRlBfU0NSMSglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIGRzdCBvcAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCisJbmVnLmwJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwltb3YubAkJJWQwLCVkMQkJCSMgcHJlcGFyZSBmb3Igb3Bfbm9ybSBjYWxsCisJYnJhLmIJCXN0emRfbm9ybQkJIyBmaW5pc2ggc2NhbGluZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19xbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBRTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCisjCXJlc19zbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCisjCXJlc19xbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKKyMJcmVzX3NuYW5fMW9wKCk6IHJldHVybiBkZmx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIG1vbmFkaWMJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU1JDKGE2KSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNyYyBvcGVyYW5kCQkjCisjCUZQX0RTVChhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkc3Qgb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBlaXRoZXIgb3BlcmFuZCAoYnV0IG5vdCBib3RoIG9wZXJhbmRzKSBvZiBhbiBvcGVyYXRpb24gaXMgYQkjCisjIG5vbnNpZ25hbGxpbmcgTkFOLCB0aGVuIHRoYXQgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuIElmIGJvdGgJIworIyBvcGVyYW5kcyBhcmUgbm9uc2lnbmFsbGluZyBOQU5zLCB0aGVuIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuCQkJCSMKKyMJSWYgZWl0aGVyIG9wZXJhbmQgdG8gYW4gb3BlcmF0aW9uIGlzIGEgc2lnbmFsbGluZyBOQU4gKFNOQU4pLAkjCisjIHRoZW4sIHRoZSBTTkFOIGJpdCBpcyBzZXQgaW4gdGhlIEZQU1IgRVhDIGJ5dGUuIElmIHRoZSBTTkFOIHRyYXAJIworIyBlbmFibGUgYml0IGlzIHNldCBpbiB0aGUgRlBDUiwgdGhlbiB0aGUgdHJhcCBpcyB0YWtlbiBhbmQgdGhlCQkjCisjIGRlc3RpbmF0aW9uIGlzIG5vdCBtb2RpZmllZC4gSWYgdGhlIFNOQU4gdHJhcCBlbmFibGUgYml0IGlzIG5vdCBzZXQsCSMKKyMgdGhlbiB0aGUgU05BTiBpcyBjb252ZXJ0ZWQgdG8gYSBub25zaWduYWxsaW5nIE5BTiAoYnkgc2V0dGluZyB0aGUJIworIyBTTkFOIGJpdCBpbiB0aGUgb3BlcmFuZCB0byBvbmUpLCBhbmQgdGhlIG9wZXJhdGlvbiBjb250aW51ZXMgYXMJIworIyBkZXNjcmliZWQgaW4gdGhlIHByZWNlZGluZyBwYXJhZ3JhcGgsIGZvciBub25zaWduYWxsaW5nIE5BTnMuCQkjCisjCU1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgRlBTUiBiaXRzIGFyZSBzZXQgYmVmb3JlIGV4aXRpbmcuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXJlc19xbmFuCisJZ2xvYmFsCQlyZXNfc25hbgorcmVzX3FuYW46CityZXNfc25hbjoKKwljbXAuYgkJRFRBRyglYTYpLCAmU05BTgkjIGlzIHRoZSBkc3QgYW4gU05BTj8KKwliZXEuYgkJZHN0X3NuYW4yCisJY21wLmIJCURUQUcoJWE2KSwgJlFOQU4JIyBpcyB0aGUgZHN0IGEgIFFOQU4/CisJYmVxLmIJCWRzdF9xbmFuMgorc3JjX25hbjoKKwljbXAuYgkJU1RBRyglYTYpLCAmUU5BTgorCWJlcS5iCQlzcmNfcW5hbjIKKwlnbG9iYWwJCXJlc19zbmFuXzFvcAorcmVzX3NuYW5fMW9wOgorc3JjX3NuYW4yOgorCWJzZXQJCSYweDYsIEZQX1NSQ19ISSglYTYpCSMgc2V0IFNOQU4gYml0CisJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCisJZ2xvYmFsCQlyZXNfcW5hbl8xb3AKK3Jlc19xbmFuXzFvcDoKK3NyY19xbmFuMjoKKwlvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCitkc3Rfc25hbjI6CisJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJYnNldAkJJjB4NiwgRlBfRFNUX0hJKCVhNikJIyBzZXQgU05BTiBiaXQKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlicmEuYgkJbmFuX2NvbXAKK2RzdF9xbmFuMjoKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwljbXAuYgkJU1RBRyglYTYpLCAmU05BTgorCWJuZQkJbmFuX2RvbmUKKwlvci5sCQkmYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9kb25lOgorCW9yLmwJCSZuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9jb21wOgorCWJ0c3QJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBpcyBOQU4gbmVnPworCWJlcS5iCQluYW5fbm90X25lZworCW9yLmwJCSZuZWdfbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9ub3RfbmVnOgorCWZtb3ZtLngJCSglYTApLCAmMHg4MAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19vcGVycigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgZHVyaW5nIG9wZXJhbmQgZXJyb3IJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgb3BlcmFuZCBlcnJvciByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQW4gbm9uc2lnbmFsbGluZyBOQU4gaXMgcmV0dXJuZWQgYXMgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZW4JIworIyBhbiBvcGVyYW5kIGVycm9yIG9jY3VycyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoJCQkjCisjCQkJCQkJCQkJIworIwlNdWx0aXBseTogKEluZmluaXR5IHggWmVybykJCQkJCSMKKyMJRGl2aWRlICA6IChaZXJvIC8gWmVybykgfHwgKEluZmluaXR5IC8gSW5maW5pdHkpCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlyZXNfb3BlcnIKK3Jlc19vcGVycjoKKwlvci5sCQkmbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpCisJZm1vdm0ueAkJbmFuX3JldHVybiglcGMpLCAmMHg4MAorCXJ0cworCituYW5fcmV0dXJuOgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZGJjYygpOiByb3V0aW5lIHRvIGVtdWxhdGUgdGhlIGZkYmNjIGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJX2ZkYmNjKCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggRG4gdmFsdWUJCQkJCSMKKyMJc3RvcmVfZHJlZ19sKCkgLSBzdG9yZSB1cGRhdGVkIERuIHZhbHVlCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gZGlzcGxhY2VtZW50CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhpcyByb3V0aW5lIGNoZWNrcyB3aGljaCBjb25kaXRpb25hbCBwcmVkaWNhdGUgaXMgc3BlY2lmaWVkIGJ5CSMKKyMgdGhlIHN0YWNrZWQgZmRiY2MgaW5zdHJ1Y3Rpb24gb3Bjb2RlIGFuZCB0aGVuIGJyYW5jaGVzIHRvIGEgcm91dGluZQkjCisjIGZvciB0aGF0IHByZWRpY2F0ZS4gVGhlIGNvcnJlc3BvbmRpbmcgZmJjYyBpbnN0cnVjdGlvbiBpcyB0aGVuIHVzZWQJIworIyB0byBzZWUgd2hldGhlciB0aGUgY29uZGl0aW9uIChzcGVjaWZpZWQgYnkgdGhlIHN0YWNrZWQgRlBTUikgaXMgdHJ1ZQkjCisjIG9yIGZhbHNlLgkJCQkJCQkJIworIwlJZiBhIEJTVU4gZXhjZXB0aW9uIHNob3VsZCBiZSBpbmRpY2F0ZWQsIHRoZSBCU1VOIGFuZCBBQlNVTgkjCisjIGJpdHMgYXJlIHNldCBpbiB0aGUgc3RhY2tlZCBGUFNSLiBJZiB0aGUgQlNVTiBleGNlcHRpb24gaXMgZW5hYmxlZCwJIworIyB0aGUgZmJzdW5fZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbiBvbiB0aGUgc3RhY2suIElmIGFuCSMKKyMgZW5hYmxlZCBCU1VOIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBhbmQgdGhlIHByZWRpY2F0ZSBpcyB0cnVlLCB0aGVuCSMKKyMgRG4gaXMgZmV0Y2hlZCBhbmQgZGVjcmVtZW50ZWQgYnkgb25lLiBJZiBEbiBpcyBub3QgZXF1YWwgdG8gLTEsIGFkZAkjCisjIHRoZSBkaXNwbGFjZW1lbnQgdmFsdWUgdG8gdGhlIHN0YWNrZWQgUEMgc28gdGhhdCB3aGVuIGFuICJydGUiIGlzCSMKKyMgZmluYWxseSBleGVjdXRlZCwgdGhlIGJyYW5jaCBvY2N1cnMuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZkYmNjCitfZmRiY2M6CisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzYXZlIGRpc3BsYWNlbWVudAorCisJbW92LncJCUVYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBwcmVkaWNhdGUKKworCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnCisJbW92LmIJCUZQU1JfQ0MoJWE2KSwlZDEJIyBmZXRjaCBmcCBjY29kZXMKKwlyb3IubAkJJjB4OCwlZDEJCSMgcm90YXRlIHRvIHRvcCBieXRlCisJZm1vdi5sCQklZDEsJWZwc3IJCSMgaW5zZXJ0IGludG8gRlBTUgorCisJbW92LncJCSh0YmxfZmRiY2MuYiwlcGMsJWQwLncqMiksJWQxICMgbG9hZCB0YWJsZQorCWptcAkJKHRibF9mZGJjYy5iLCVwYywlZDEudykgIyBqdW1wIHRvIGZkYmNjIHJvdXRpbmUKKwordGJsX2ZkYmNjOgorCXNob3J0CQlmZGJjY19mCQktCXRibF9mZGJjYwkjIDAwCisJc2hvcnQJCWZkYmNjX2VxCS0JdGJsX2ZkYmNjCSMgMDEKKwlzaG9ydAkJZmRiY2Nfb2d0CS0JdGJsX2ZkYmNjCSMgMDIKKwlzaG9ydAkJZmRiY2Nfb2dlCS0JdGJsX2ZkYmNjCSMgMDMKKwlzaG9ydAkJZmRiY2Nfb2x0CS0JdGJsX2ZkYmNjCSMgMDQKKwlzaG9ydAkJZmRiY2Nfb2xlCS0JdGJsX2ZkYmNjCSMgMDUKKwlzaG9ydAkJZmRiY2Nfb2dsCS0JdGJsX2ZkYmNjCSMgMDYKKwlzaG9ydAkJZmRiY2Nfb3IJLQl0YmxfZmRiY2MJIyAwNworCXNob3J0CQlmZGJjY191bgktCXRibF9mZGJjYwkjIDA4CisJc2hvcnQJCWZkYmNjX3VlcQktCXRibF9mZGJjYwkjIDA5CisJc2hvcnQJCWZkYmNjX3VndAktCXRibF9mZGJjYwkjIDEwCisJc2hvcnQJCWZkYmNjX3VnZQktCXRibF9mZGJjYwkjIDExCisJc2hvcnQJCWZkYmNjX3VsdAktCXRibF9mZGJjYwkjIDEyCisJc2hvcnQJCWZkYmNjX3VsZQktCXRibF9mZGJjYwkjIDEzCisJc2hvcnQJCWZkYmNjX25lcQktCXRibF9mZGJjYwkjIDE0CisJc2hvcnQJCWZkYmNjX3QJCS0JdGJsX2ZkYmNjCSMgMTUKKwlzaG9ydAkJZmRiY2Nfc2YJLQl0YmxfZmRiY2MJIyAxNgorCXNob3J0CQlmZGJjY19zZXEJLQl0YmxfZmRiY2MJIyAxNworCXNob3J0CQlmZGJjY19ndAktCXRibF9mZGJjYwkjIDE4CisJc2hvcnQJCWZkYmNjX2dlCS0JdGJsX2ZkYmNjCSMgMTkKKwlzaG9ydAkJZmRiY2NfbHQJLQl0YmxfZmRiY2MJIyAyMAorCXNob3J0CQlmZGJjY19sZQktCXRibF9mZGJjYwkjIDIxCisJc2hvcnQJCWZkYmNjX2dsCS0JdGJsX2ZkYmNjCSMgMjIKKwlzaG9ydAkJZmRiY2NfZ2xlCS0JdGJsX2ZkYmNjCSMgMjMKKwlzaG9ydAkJZmRiY2NfbmdsZQktCXRibF9mZGJjYwkjIDI0CisJc2hvcnQJCWZkYmNjX25nbAktCXRibF9mZGJjYwkjIDI1CisJc2hvcnQJCWZkYmNjX25sZQktCXRibF9mZGJjYwkjIDI2CisJc2hvcnQJCWZkYmNjX25sdAktCXRibF9mZGJjYwkjIDI3CisJc2hvcnQJCWZkYmNjX25nZQktCXRibF9mZGJjYwkjIDI4CisJc2hvcnQJCWZkYmNjX25ndAktCXRibF9mZGJjYwkjIDI5CisJc2hvcnQJCWZkYmNjX3NuZXEJLQl0YmxfZmRiY2MJIyAzMAorCXNob3J0CQlmZGJjY19zdAktCXRibF9mZGJjYwkjIDMxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgTm9uYXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIG5vbmF3YXJlIHRlc3RzLCBvbmx5IHRoZSBmYWxzZSBicmFuY2ggY2hhbmdlcyB0aGUJIworIyBjb3VudGVyLiBIb3dldmVyLCB0aGUgdHJ1ZSBicmFuY2ggbWF5IHNldCBic3VuIHNvIHdlIGNoZWNrIHRvIHNlZQkjCisjIGlmIHRoZSBOQU4gYml0IGlzIHNldCwgaW4gd2hpY2ggY2FzZSBCU1VOIGFuZCBBSU9QIHdpbGwgYmUgc2V0LgkjCisjCQkJCQkJCQkJIworIyBUaGUgY2FzZXMgRVEgYW5kIE5FIGFyZSBzaGFyZWQgYnkgdGhlIEF3YXJlIGFuZCBOb25hd2FyZSBncm91cHMJIworIyBhbmQgYXJlIGluY2FwYWJsZSBvZiBzZXR0aW5nIHRoZSBCU1VOIGV4Y2VwdGlvbiBiaXQuCQkJIworIwkJCQkJCQkJCSMKKyMgVHlwaWNhbGx5LCBvbmx5IG9uZSBvZiB0aGUgdHdvIHBvc3NpYmxlIGJyYW5jaCBkaXJlY3Rpb25zIGNvdWxkCSMKKyMgaGF2ZSB0aGUgTkFOIGJpdCBzZXQuCQkJCQkJCSMKKyMgKFRoaXMgaXMgYXNzdW1pbmcgdGhlIG11dHVhbCBleGNsdXNpdmVuZXNzIG9mIEZQU1IgY2MgYml0IGdyb3VwaW5ncwkjCisjICBpcyBwcmVzZXJ2ZWQuKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGVxdWFsOgorIworIwlaCisjCitmZGJjY19lcToKKwlmYmVxLncJCWZkYmNjX2VxX3llcwkJIyBlcXVhbD8KK2ZkYmNjX2VxX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2VxX3llczoKKwlydHMKKworIworIyBub3QgZXF1YWw6CisjCV8KKyMJWgorIworZmRiY2NfbmVxOgorCWZibmVxLncJCWZkYmNjX25lcV95ZXMJCSMgbm90IGVxdWFsPworZmRiY2NfbmVxX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX25lcV95ZXM6CisJcnRzCisKKyMKKyMgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZkYmNjX2d0OgorCWZiZ3QudwkJZmRiY2NfZ3RfeWVzCQkjIGdyZWF0ZXIgdGhhbj8KKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87Z28gaGFuZGxlIGNvdW50ZXIKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfZ3RfeWVzOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgbm90IGdyZWF0ZXIgdGhhbjoKKyMKKyMJTkFOdlp2TgorIworZmRiY2Nfbmd0OgorCWZibmd0LncJCWZkYmNjX25ndF95ZXMJCSMgbm90IGdyZWF0ZXIgdGhhbj8KK2ZkYmNjX25ndF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19uZ3RfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmZGJjY19uZ3RfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19uZ3RfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw6CisjCSAgIF9fX19fCisjCVp2KE5BTnZOKQorIworZmRiY2NfZ2U6CisJZmJnZS53CQlmZGJjY19nZV95ZXMJCSMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPworZmRiY2NfZ2Vfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vO2dvIGhhbmRsZSBjb3VudGVyCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2dlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZmRiY2NfZ2VfeWVzX2RvbmUJIyBubztnbyBkbyBub3RoaW5nCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2NfZ2VfeWVzX2RvbmU6CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk6CisjCSAgICAgICBfCisjCU5BTnYoTl5aKQorIworZmRiY2NfbmdlOgorCWZibmdlLncJCWZkYmNjX25nZV95ZXMJCSMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpPworZmRiY2NfbmdlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX25nZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZkYmNjX25nZV9kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KK2ZkYmNjX25nZV9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworCisjCisjIGxlc3MgdGhhbjoKKyMJICAgX19fX18KKyMJTl4oTkFOdlopCisjCitmZGJjY19sdDoKKwlmYmx0LncJCWZkYmNjX2x0X3llcwkJIyBsZXNzIHRoYW4/CitmZGJjY19sdF9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2x0X3llczoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG5vdCBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoWnZOKQorIworZmRiY2Nfbmx0OgorCWZibmx0LncJCWZkYmNjX25sdF95ZXMJCSMgbm90IGxlc3MgdGhhbj8KK2ZkYmNjX25sdF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19ubHRfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmZGJjY19ubHRfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19ubHRfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBsZXNzIHRoYW4gb3IgZXF1YWw6CisjCSAgICAgX19fCisjCVp2KE5eTkFOKQorIworZmRiY2NfbGU6CisJZmJsZS53CQlmZGJjY19sZV95ZXMJCSMgbGVzcyB0aGFuIG9yIGVxdWFsPworZmRiY2NfbGVfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19sZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZkYmNjX2xlX3llc19kb25lCSMgbm87IGdvIGRvIG5vdGhpbmcKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19sZV95ZXNfZG9uZToKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKToKKyMJICAgICBfX18KKyMJTkFOdihOdlopCisjCitmZGJjY19ubGU6CisJZmJubGUudwkJZmRiY2NfbmxlX3llcwkJIyBub3QgKGxlc3MgdGhhbiBvciBlcXVhbCk/CitmZGJjY19ubGVfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfbmxlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZmRiY2NfbmxlX2RvbmUJCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KK2ZkYmNjX25sZV9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworCisjCisjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZmRiY2NfZ2w6CisJZmJnbC53CQlmZGJjY19nbF95ZXMJCSMgZ3JlYXRlciBvciBsZXNzIHRoYW4/CitmZGJjY19nbF9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGhhbmRsZSBjb3VudGVyCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2dsX3llczoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG5vdCAoZ3JlYXRlciBvciBsZXNzIHRoYW4pOgorIworIwlOQU52WgorIworZmRiY2NfbmdsOgorCWZibmdsLncJCWZkYmNjX25nbF95ZXMJCSMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik/CitmZGJjY19uZ2xfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfbmdsX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZmRiY2NfbmdsX2RvbmUJCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KK2ZkYmNjX25nbF9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworCisjCisjIGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsOgorIwlfX18KKyMJTkFOCisjCitmZGJjY19nbGU6CisJZmJnbGUudwkJZmRiY2NfZ2xlX3llcwkJIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbD8KK2ZkYmNjX2dsZV9ubzoKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfZ2xlX3llczoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpOgorIworIwlOQU4KKyMKK2ZkYmNjX25nbGU6CisJZmJuZ2xlLncJZmRiY2NfbmdsZV95ZXMJCSMgbm90IChncmVhdGVyLCBsZXNzLCBvciBlcXVhbCk/CitmZGJjY19uZ2xlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX25nbGVfeWVzOgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgTWlzY2VsbGFuZW91cyB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgbWlzY2VsbGFuZW91cyB0ZXN0cywgYWxsIGJ1dCBmZGJmIGFuZCBmZGJ0IGNhbiBzZXQgYnN1bi4gIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBmYWxzZToKKyMKKyMJRmFsc2UKKyMKK2ZkYmNjX2Y6CQkJCQkjIG5vIGJzdW4gcG9zc2libGUKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgZ28gaGFuZGxlIGNvdW50ZXIKKworIworIyB0cnVlOgorIworIwlUcnVlCisjCitmZGJjY190OgkJCQkJIyBubyBic3VuIHBvc3NpYmxlCisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBzaWduYWxsaW5nIGZhbHNlOgorIworIwlGYWxzZQorIworZmRiY2Nfc2Y6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQ/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vO2dvIGhhbmRsZSBjb3VudGVyCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBnbyBoYW5kbGUgY291bnRlcgorCisjCisjIHNpZ25hbGxpbmcgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZmRiY2Nfc3Q6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQ/CisJYmVxLmIJCWZkYmNjX3N0X2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2Nfc3RfZG9uZToKKwlydHMKKworIworIyBzaWduYWxsaW5nIGVxdWFsOgorIworIwlaCisjCitmZGJjY19zZXE6CisJZmJzZXEudwkJZmRiY2Nfc2VxX3llcwkJIyBzaWduYWxsaW5nIGVxdWFsPworZmRiY2Nfc2VxX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PworCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX3NlcV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQ/CisJYmVxLmIJCWZkYmNjX3NlcV95ZXNfZG9uZQkjIG5vO2dvIGRvIG5vdGhpbmcKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19zZXFfeWVzX2RvbmU6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIHNpZ25hbGxpbmcgbm90IGVxdWFsOgorIwlfCisjCVoKKyMKK2ZkYmNjX3NuZXE6CisJZmJzbmVxLncJZmRiY2Nfc25lcV95ZXMJCSMgc2lnbmFsbGluZyBub3QgZXF1YWw/CitmZGJjY19zbmVxX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PworCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX3NuZXFfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZkYmNjX3NuZXFfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19zbmVxX2RvbmU6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgQXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCBhY3Rpb24gaXMgb25seSB0YWtlbiBpZiB0aGUgcmVzdWx0IGlzIGZhbHNlLiMKKyMgVGhlcmVmb3JlLCB0aGUgb3Bwb3NpdGUgYnJhbmNoIHR5cGUgaXMgdXNlZCB0byBqdW1wIHRvIHRoZSBkZWNyZW1lbnQJIworIyByb3V0aW5lLgkJCQkJCQkJIworIyBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUgc2V0IGZvciBhbnkgb2YgdGhlc2UgdGVzdHMuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZkYmNjX29ndDoKKwlmYm9ndC53CQlmZGJjY19vZ3RfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuPworZmRiY2Nfb2d0X25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX29ndF95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZCBvciBsZXNzIG9yIGVxdWFsOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZkYmNjX3VsZToKKwlmYnVsZS53CQlmZGJjY191bGVfeWVzCQkjIHVub3JkZXJlZCBvciBsZXNzIG9yIGVxdWFsPworZmRiY2NfdWxlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX3VsZV95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2ZkYmNjX29nZToKKwlmYm9nZS53CQlmZGJjY19vZ2VfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPworZmRiY2Nfb2dlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX29nZV95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZCBvciBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoTl5aKQorIworZmRiY2NfdWx0OgorCWZidWx0LncJCWZkYmNjX3VsdF95ZXMJCSMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbj8KK2ZkYmNjX3VsdF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY191bHRfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGxlc3MgdGhhbjoKKyMJICAgX19fX18KKyMJTl4oTkFOdlopCisjCitmZGJjY19vbHQ6CisJZmJvbHQudwkJZmRiY2Nfb2x0X3llcwkJIyBvcmRlcmVkIGxlc3MgdGhhbj8KK2ZkYmNjX29sdF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vbHRfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciBvciBlcXVhbDoKKyMKKyMJTkFOdlp2TgorIworZmRiY2NfdWdlOgorCWZidWdlLncJCWZkYmNjX3VnZV95ZXMJCSMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbj8KK2ZkYmNjX3VnZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY191Z2VfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGxlc3MgdGhhbiBvciBlcXVhbDoKKyMJICAgICBfX18KKyMJWnYoTl5OQU4pCisjCitmZGJjY19vbGU6CisJZmJvbGUudwkJZmRiY2Nfb2xlX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZmRiY2Nfb2xlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX29sZV95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW46CisjCSAgICAgX19fCisjCU5BTnYoTnZaKQorIworZmRiY2NfdWd0OgorCWZidWd0LncJCWZkYmNjX3VndF95ZXMJCSMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbj8KK2ZkYmNjX3VndF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY191Z3RfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZmRiY2Nfb2dsOgorCWZib2dsLncJCWZkYmNjX29nbF95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2ZkYmNjX29nbF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vZ2xfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZXF1YWw6CisjCisjCU5BTnZaCisjCitmZGJjY191ZXE6CisJZmJ1ZXEudwkJZmRiY2NfdWVxX3llcwkJIyB1bm9yZGVyZWQgb3IgZXF1YWw/CitmZGJjY191ZXFfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfdWVxX3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZDoKKyMJX19fCisjCU5BTgorIworZmRiY2Nfb3I6CisJZmJvci53CQlmZGJjY19vcl95ZXMJCSMgb3JkZXJlZD8KK2ZkYmNjX29yX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX29yX3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkOgorIworIwlOQU4KKyMKK2ZkYmNjX3VuOgorCWZidW4udwkJZmRiY2NfdW5feWVzCQkjIHVub3JkZXJlZD8KK2ZkYmNjX3VuX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX3VuX3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGJzdW4gZXhjZXB0aW9uIGJpdCB3YXMgbm90IHNldC4KKyMKKyMgKDEpIHN1YnRyYWN0IDEgZnJvbSB0aGUgY291bnQgcmVnaXN0ZXIKKyMgKDIpIGlmIChjciA9PSAtMSkgdGhlbgorIwlwYyA9IHBjIG9mIG5leHQgaW5zdHJ1Y3Rpb24KKyMgICAgIGVsc2UKKyMJcGMgKz0gc2lnbl9leHQoMTYtYml0IGRpc3BsYWNlbWVudCkKKyMKK2ZkYmNjX2ZhbHNlOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwgJWQxCSMgZmV0Y2ggbG8gb3B3b3JkCisJYW5kaS53CQkmMHg3LCAlZDEJCSMgZXh0cmFjdCBjb3VudCByZWdpc3RlcgorCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggY291bnQgdmFsdWUKKyMgbWFrZSBzdXJlIHRoYXQgZDAgaXNuJ3QgY29ycnVwdGVkIGJldHdlZW4gY2FsbHMuLi4KKworCXN1YnEudwkJJjB4MSwgJWQwCQkjIERuIC0gMSAtPiBEbgorCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSBuZXcgY291bnQgdmFsdWUKKworCWNtcGkudwkJJWQwLCAmLTB4MQkJIyBpcyAoRG4gPT0gLTEpPworCWJuZS5iCQlmZGJjY19mYWxzZV9jb250CSMgbm87CisJcnRzCisKK2ZkYmNjX2ZhbHNlX2NvbnQ6CisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkJIyBmZXRjaCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJVVNFUl9GUElBUiglYTYpLCVkMAkjIGFkZCBpbnN0cnVjdGlvbiBQQworCWFkZHEubAkJJjB4NCwlZDAJCSMgYWRkIGluc3RydWN0aW9uIGxlbmd0aAorCW1vdi5sCQklZDAsRVhDX1BDKCVhNikJCSMgc2V0IG5ldyBQQworCXJ0cworCisjIHRoZSBlbXVsYXRpb24gcm91dGluZSBzZXQgYnN1biBhbmQgQlNVTiB3YXMgZW5hYmxlZC4gaGF2ZSB0bworIyBmaXggc3RhY2sgYW5kIGp1bXAgdG8gdGhlIGJzdW4gaGFuZGxlci4KKyMgbGV0IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSB1cCB0bworIyBlbGltaW5hdGUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGZpZWxkLgorZmRiY2NfYnN1bjoKKwltb3YuYgkJJmZic3VuX2ZsZyxTUENPTkRfRkxHKCVhNikKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmdHJhcGNjKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSB0aGUgZnRyYXBjYyBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mdHJhcGNjKCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhpcyByb3V0aW5lIGNoZWNrcyB3aGljaCBjb25kaXRpb25hbCBwcmVkaWNhdGUgaXMgc3BlY2lmaWVkIGJ5CSMKKyMgdGhlIHN0YWNrZWQgZnRyYXBjYyBpbnN0cnVjdGlvbiBvcGNvZGUgYW5kIHRoZW4gYnJhbmNoZXMgdG8gYSByb3V0aW5lCSMKKyMgZm9yIHRoYXQgcHJlZGljYXRlLiBUaGUgY29ycmVzcG9uZGluZyBmYmNjIGluc3RydWN0aW9uIGlzIHRoZW4gdXNlZAkjCisjIHRvIHNlZSB3aGV0aGVyIHRoZSBjb25kaXRpb24gKHNwZWNpZmllZCBieSB0aGUgc3RhY2tlZCBGUFNSKSBpcyB0cnVlCSMKKyMgb3IgZmFsc2UuCQkJCQkJCQkjCisjCUlmIGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIGluZGljYXRlZCwgdGhlIEJTVU4gYW5kIEFCU1VOCSMKKyMgYml0cyBhcmUgc2V0IGluIHRoZSBzdGFja2VkIEZQU1IuIElmIHRoZSBCU1VOIGV4Y2VwdGlvbiBpcyBlbmFibGVkLAkjCisjIHRoZSBmYnN1bl9mbGcgaXMgc2V0IGluIHRoZSBTUENPTkRfRkxHIGxvY2F0aW9uIG9uIHRoZSBzdGFjay4gSWYgYW4JIworIyBlbmFibGVkIEJTVU4gc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIGFuZCB0aGUgcHJlZGljYXRlIGlzIHRydWUsIHRoZW4JIworIyB0aGUgZnRyYXBjY19mbGcgaXMgc2V0IGluIHRoZSBTUENPTkRfRkxHIGxvY2F0aW9uLiBUaGVzZSBzcGVjaWFsCSMKKyMgZmxhZ3MgaW5kaWNhdGUgdG8gdGhlIGNhbGxpbmcgcm91dGluZSB0byBlbXVsYXRlIHRoZSBleGNlcHRpb25hbAkjCisjIGNvbmRpdGlvbi4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mdHJhcGNjCitfZnRyYXBjYzoKKwltb3YudwkJRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIHByZWRpY2F0ZQorCisJY2xyLmwJCSVkMQkJCSMgY2xlYXIgc2NyYXRjaCByZWcKKwltb3YuYgkJRlBTUl9DQyglYTYpLCVkMQkjIGZldGNoIGZwIGNjb2RlcworCXJvci5sCQkmMHg4LCVkMQkJIyByb3RhdGUgdG8gdG9wIGJ5dGUKKwlmbW92LmwJCSVkMSwlZnBzcgkJIyBpbnNlcnQgaW50byBGUFNSCisKKwltb3YudwkJKHRibF9mdHJhcGNjLmIsJXBjLCVkMC53KjIpLCAlZDEgIyBsb2FkIHRhYmxlCisJam1wCQkodGJsX2Z0cmFwY2MuYiwlcGMsJWQxLncpICMganVtcCB0byBmdHJhcGNjIHJvdXRpbmUKKwordGJsX2Z0cmFwY2M6CisJc2hvcnQJCWZ0cmFwY2NfZgktCXRibF9mdHJhcGNjCSMgMDAKKwlzaG9ydAkJZnRyYXBjY19lcQktCXRibF9mdHJhcGNjCSMgMDEKKwlzaG9ydAkJZnRyYXBjY19vZ3QJLQl0YmxfZnRyYXBjYwkjIDAyCisJc2hvcnQJCWZ0cmFwY2Nfb2dlCS0JdGJsX2Z0cmFwY2MJIyAwMworCXNob3J0CQlmdHJhcGNjX29sdAktCXRibF9mdHJhcGNjCSMgMDQKKwlzaG9ydAkJZnRyYXBjY19vbGUJLQl0YmxfZnRyYXBjYwkjIDA1CisJc2hvcnQJCWZ0cmFwY2Nfb2dsCS0JdGJsX2Z0cmFwY2MJIyAwNgorCXNob3J0CQlmdHJhcGNjX29yCS0JdGJsX2Z0cmFwY2MJIyAwNworCXNob3J0CQlmdHJhcGNjX3VuCS0JdGJsX2Z0cmFwY2MJIyAwOAorCXNob3J0CQlmdHJhcGNjX3VlcQktCXRibF9mdHJhcGNjCSMgMDkKKwlzaG9ydAkJZnRyYXBjY191Z3QJLQl0YmxfZnRyYXBjYwkjIDEwCisJc2hvcnQJCWZ0cmFwY2NfdWdlCS0JdGJsX2Z0cmFwY2MJIyAxMQorCXNob3J0CQlmdHJhcGNjX3VsdAktCXRibF9mdHJhcGNjCSMgMTIKKwlzaG9ydAkJZnRyYXBjY191bGUJLQl0YmxfZnRyYXBjYwkjIDEzCisJc2hvcnQJCWZ0cmFwY2NfbmVxCS0JdGJsX2Z0cmFwY2MJIyAxNAorCXNob3J0CQlmdHJhcGNjX3QJLQl0YmxfZnRyYXBjYwkjIDE1CisJc2hvcnQJCWZ0cmFwY2Nfc2YJLQl0YmxfZnRyYXBjYwkjIDE2CisJc2hvcnQJCWZ0cmFwY2Nfc2VxCS0JdGJsX2Z0cmFwY2MJIyAxNworCXNob3J0CQlmdHJhcGNjX2d0CS0JdGJsX2Z0cmFwY2MJIyAxOAorCXNob3J0CQlmdHJhcGNjX2dlCS0JdGJsX2Z0cmFwY2MJIyAxOQorCXNob3J0CQlmdHJhcGNjX2x0CS0JdGJsX2Z0cmFwY2MJIyAyMAorCXNob3J0CQlmdHJhcGNjX2xlCS0JdGJsX2Z0cmFwY2MJIyAyMQorCXNob3J0CQlmdHJhcGNjX2dsCS0JdGJsX2Z0cmFwY2MJIyAyMgorCXNob3J0CQlmdHJhcGNjX2dsZQktCXRibF9mdHJhcGNjCSMgMjMKKwlzaG9ydAkJZnRyYXBjY19uZ2xlCS0JdGJsX2Z0cmFwY2MJIyAyNAorCXNob3J0CQlmdHJhcGNjX25nbAktCXRibF9mdHJhcGNjCSMgMjUKKwlzaG9ydAkJZnRyYXBjY19ubGUJLQl0YmxfZnRyYXBjYwkjIDI2CisJc2hvcnQJCWZ0cmFwY2Nfbmx0CS0JdGJsX2Z0cmFwY2MJIyAyNworCXNob3J0CQlmdHJhcGNjX25nZQktCXRibF9mdHJhcGNjCSMgMjgKKwlzaG9ydAkJZnRyYXBjY19uZ3QJLQl0YmxfZnRyYXBjYwkjIDI5CisJc2hvcnQJCWZ0cmFwY2Nfc25lcQktCXRibF9mdHJhcGNjCSMgMzAKKwlzaG9ydAkJZnRyYXBjY19zdAktCXRibF9mdHJhcGNjCSMgMzEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgSUVFRSBOb25hd2FyZSB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgbm9uYXdhcmUgdGVzdHMsIHdlIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkJIworIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIEluIGFkZGl0aW9uLCB3ZSBjaGVjayB0byBzZWUJCSMKKyMgaWYgdGhlIE5BTiBiaXQgaXMgc2V0LCBpbiB3aGljaCBjYXNlIEJTVU4gYW5kIEFJT1Agd2lsbCBiZSBzZXQuCSMKKyMJCQkJCQkJCQkjCisjIFRoZSBjYXNlcyBFUSBhbmQgTkUgYXJlIHNoYXJlZCBieSB0aGUgQXdhcmUgYW5kIE5vbmF3YXJlIGdyb3VwcwkjCisjIGFuZCBhcmUgaW5jYXBhYmxlIG9mIHNldHRpbmcgdGhlIEJTVU4gZXhjZXB0aW9uIGJpdC4JCQkjCisjCQkJCQkJCQkJIworIyBUeXBpY2FsbHksIG9ubHkgb25lIG9mIHRoZSB0d28gcG9zc2libGUgYnJhbmNoIGRpcmVjdGlvbnMgY291bGQJIworIyBoYXZlIHRoZSBOQU4gYml0IHNldC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBlcXVhbDoKKyMKKyMJWgorIworZnRyYXBjY19lcToKKwlmYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBlcXVhbD8KK2Z0cmFwY2NfZXFfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgZXF1YWw6CisjCV8KKyMJWgorIworZnRyYXBjY19uZXE6CisJZmJuZXEudwkJZnRyYXBjY190cmFwCQkjIG5vdCBlcXVhbD8KK2Z0cmFwY2NfbmVxX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2Z0cmFwY2NfZ3Q6CisJZmJndC53CQlmdHJhcGNjX3RyYXAJCSMgZ3JlYXRlciB0aGFuPworZnRyYXBjY19ndF9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZnRyYXBjY19ndF9kb25lCQkjIG5vCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2NfZ3RfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBub3QgZ3JlYXRlciB0aGFuOgorIworIwlOQU52WnZOCisjCitmdHJhcGNjX25ndDoKKwlmYm5ndC53CQlmdHJhcGNjX25ndF95ZXMJCSMgbm90IGdyZWF0ZXIgdGhhbj8KK2Z0cmFwY2Nfbmd0X25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCitmdHJhcGNjX25ndF95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIworIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw6CisjCSAgIF9fX19fCisjCVp2KE5BTnZOKQorIworZnRyYXBjY19nZToKKwlmYmdlLncJCWZ0cmFwY2NfZ2VfeWVzCQkjIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KK2Z0cmFwY2NfZ2Vfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZ0cmFwY2NfZ2VfZG9uZQkJIyBubzsgZ28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2NfZ2VfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKK2Z0cmFwY2NfZ2VfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpOgorIwkgICAgICAgXworIwlOQU52KE5eWikKKyMKK2Z0cmFwY2NfbmdlOgorCWZibmdlLncJCWZ0cmFwY2NfbmdlX3llcwkJIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk/CitmdHJhcGNjX25nZV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19uZ2VfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgbGVzcyB0aGFuOgorIwkgICBfX19fXworIwlOXihOQU52WikKKyMKK2Z0cmFwY2NfbHQ6CisJZmJsdC53CQlmdHJhcGNjX3RyYXAJCSMgbGVzcyB0aGFuPworZnRyYXBjY19sdF9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZnRyYXBjY19sdF9kb25lCQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworZnRyYXBjY19sdF9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworCisjCisjIG5vdCBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoWnZOKQorIworZnRyYXBjY19ubHQ6CisJZmJubHQudwkJZnRyYXBjY19ubHRfeWVzCQkjIG5vdCBsZXNzIHRoYW4/CitmdHJhcGNjX25sdF9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19ubHRfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgbGVzcyB0aGFuIG9yIGVxdWFsOgorIwkgICAgIF9fXworIwladihOXk5BTikKKyMKK2Z0cmFwY2NfbGU6CisJZmJsZS53CQlmdHJhcGNjX2xlX3llcwkJIyBsZXNzIHRoYW4gb3IgZXF1YWw/CitmdHJhcGNjX2xlX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmdHJhcGNjX2xlX2RvbmUJCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX2xlX2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCitmdHJhcGNjX2xlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKToKKyMJICAgICBfX18KKyMJTkFOdihOdlopCisjCitmdHJhcGNjX25sZToKKwlmYm5sZS53CQlmdHJhcGNjX25sZV95ZXMJCSMgbm90IChsZXNzIHRoYW4gb3IgZXF1YWwpPworZnRyYXBjY19ubGVfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKK2Z0cmFwY2NfbmxlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZnRyYXBjY19nbDoKKwlmYmdsLncJCWZ0cmFwY2NfdHJhcAkJIyBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2Z0cmFwY2NfZ2xfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZ0cmFwY2NfZ2xfZG9uZQkJIyBubzsgZ28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2NfZ2xfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKToKKyMKKyMJTkFOdloKKyMKK2Z0cmFwY2NfbmdsOgorCWZibmdsLncJCWZ0cmFwY2NfbmdsX3llcwkJIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKT8KK2Z0cmFwY2NfbmdsX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCitmdHJhcGNjX25nbF95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIworIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbDoKKyMJX19fCisjCU5BTgorIworZnRyYXBjY19nbGU6CisJZmJnbGUudwkJZnRyYXBjY190cmFwCQkjIGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsPworZnRyYXBjY19nbGVfbm86CisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKToKKyMKKyMJTkFOCisjCitmdHJhcGNjX25nbGU6CisJZmJuZ2xlLncJZnRyYXBjY19uZ2xlX3llcwkjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpPworZnRyYXBjY19uZ2xlX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCitmdHJhcGNjX25nbGVfeWVzOgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIE1pc2NlbGxhbmVvdXMgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCB3ZSBvbmx5IGhhdmUgdG8gc2V0IHRoZSByZXN1bHQgYmFzZWQgb24gdGhlCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUJIworIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGZhbHNlOgorIworIwlGYWxzZQorIworZnRyYXBjY19mOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZnRyYXBjY190OgorCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgZ28gdGFrZSB0cmFwCisKKyMKKyMgc2lnbmFsbGluZyBmYWxzZToKKyMKKyMJRmFsc2UKKyMKK2Z0cmFwY2Nfc2Y6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEuYgkJZnRyYXBjY19zZl9kb25lCQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworZnRyYXBjY19zZl9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworCisjCisjIHNpZ25hbGxpbmcgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZnRyYXBjY19zdDoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgc2lnbmFsbGluZyBlcXVhbDoKKyMKKyMJWgorIworZnRyYXBjY19zZXE6CisJZmJzZXEudwkJZnRyYXBjY19zZXFfeWVzCQkjIHNpZ25hbGxpbmcgZXF1YWw/CitmdHJhcGNjX3NlcV9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmdHJhcGNjX3NlcV9kb25lCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX3NlcV9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworZnRyYXBjY19zZXFfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIworIyBzaWduYWxsaW5nIG5vdCBlcXVhbDoKKyMJXworIwlaCisjCitmdHJhcGNjX3NuZXE6CisJZmJzbmVxLncJZnRyYXBjY19zbmVxX3llcwkjIHNpZ25hbGxpbmcgZXF1YWw/CitmdHJhcGNjX3NuZXFfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnRyYXBjY19zbmVxX25vX2RvbmUJIyBubzsgZ28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2Nfc25lcV9ub19kb25lOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCitmdHJhcGNjX3NuZXFfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgSUVFRSBBd2FyZSB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgYXdhcmUgdGVzdHMsIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJIworIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIFRoZSBCU1VOIGV4Y2VwdGlvbiB3aWxsIG5vdCBiZQkjCisjIHNldCBmb3IgYW55IG9mIHRoZXNlIHRlc3RzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgb3JkZXJlZCBncmVhdGVyIHRoYW46CisjCV9fX19fX18KKyMJTkFOdlp2TgorIworZnRyYXBjY19vZ3Q6CisJZmJvZ3QudwkJZnRyYXBjY190cmFwCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuPworZnRyYXBjY19vZ3Rfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbDoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmdHJhcGNjX3VsZToKKwlmYnVsZS53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw/CitmdHJhcGNjX3VsZV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2Z0cmFwY2Nfb2dlOgorCWZib2dlLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KK2Z0cmFwY2Nfb2dlX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbjoKKyMJICAgICAgIF8KKyMJTkFOdihOXlopCisjCitmdHJhcGNjX3VsdDoKKwlmYnVsdC53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbj8KK2Z0cmFwY2NfdWx0X25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZCBsZXNzIHRoYW46CisjCSAgIF9fX19fCisjCU5eKE5BTnZaKQorIworZnRyYXBjY19vbHQ6CisJZmJvbHQudwkJZnRyYXBjY190cmFwCQkjIG9yZGVyZWQgbGVzcyB0aGFuPworZnRyYXBjY19vbHRfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciBvciBlcXVhbDoKKyMKKyMJTkFOdlp2TgorIworZnRyYXBjY191Z2U6CisJZmJ1Z2UudwkJZnRyYXBjY190cmFwCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/CitmdHJhcGNjX3VnZV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQgbGVzcyB0aGFuIG9yIGVxdWFsOgorIwkgICAgIF9fXworIwladihOXk5BTikKKyMKK2Z0cmFwY2Nfb2xlOgorCWZib2xlLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZnRyYXBjY19vbGVfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuOgorIwkgICAgIF9fXworIwlOQU52KE52WikKKyMKK2Z0cmFwY2NfdWd0OgorCWZidWd0LncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPworZnRyYXBjY191Z3Rfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZnRyYXBjY19vZ2w6CisJZmJvZ2wudwkJZnRyYXBjY190cmFwCQkjIG9yZGVyZWQgZ3JlYXRlciBvciBsZXNzIHRoYW4/CitmdHJhcGNjX29nbF9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZCBvciBlcXVhbDoKKyMKKyMJTkFOdloKKyMKK2Z0cmFwY2NfdWVxOgorCWZidWVxLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgZXF1YWw/CitmdHJhcGNjX3VlcV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQ6CisjCV9fXworIwlOQU4KKyMKK2Z0cmFwY2Nfb3I6CisJZmJvci53CQlmdHJhcGNjX3RyYXAJCSMgb3JkZXJlZD8KK2Z0cmFwY2Nfb3Jfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQ6CisjCisjCU5BTgorIworZnRyYXBjY191bjoKKwlmYnVuLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQ/CitmdHJhcGNjX3VuX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdGhlIGJzdW4gZXhjZXB0aW9uIGJpdCB3YXMgbm90IHNldC4KKyMgd2Ugd2lsbCBuZWVkIHRvIGp1bXAgdG8gdGhlIGZ0cmFwY2MgdmVjdG9yLiB0aGUgc3RhY2sgZnJhbWUKKyMgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGF0IG9mIHRoZSBmcCB1bmltcCBpbnN0cnVjdGlvbi4gdGhlCisjIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSA8ZWE+IGZpZWxkIHNob3VsZCBob2xkIHRoZSBQQworIyBvZiB0aGUgZnRyYXBjYyBpbnN0cnVjdGlvbiBhbmQgdGhlIHZlY3RvciBvZmZzZXQgZmllbGQKKyMgc2hvdWxkIGRlbm90ZSB0aGUgZnRyYXBjYyB0cmFwLgorZnRyYXBjY190cmFwOgorCW1vdi5iCQkmZnRyYXBjY19mbGcsU1BDT05EX0ZMRyglYTYpCisJcnRzCisKKyMgdGhlIGVtdWxhdGlvbiByb3V0aW5lIHNldCBic3VuIGFuZCBCU1VOIHdhcyBlbmFibGVkLiBoYXZlIHRvCisjIGZpeCBzdGFjayBhbmQganVtcCB0byB0aGUgYnN1biBoYW5kbGVyLgorIyBsZXQgdGhlIGNhbGxlciBvZiB0aGlzIHJvdXRpbmUgc2hpZnQgdGhlIHN0YWNrIGZyYW1lIHVwIHRvCisjIGVsaW1pbmF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgZmllbGQuCitmdHJhcGNjX2JzdW46CisJbW92LmIJCSZmYnN1bl9mbGcsU1BDT05EX0ZMRyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZnNjYygpOiByb3V0aW5lIHRvIGVtdWxhdGUgdGhlIGZzY2MgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlfZnNjYygpCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlzdG9yZV9kcmVnX2IoKSAtIHN0b3JlIHJlc3VsdCB0byBkYXRhIHJlZ2lzdGVyIGZpbGUJCSMKKyMJZGVjX2FyZWcoKSAtIGRlY3JlbWVudCBhbiBhcmVnIGZvciAtKGFuKSBtb2RlCQkJIworIwlpbmNfYXJlZygpIC0gaW5jcmVtZW50IGFuIGFyZWcgZm9yIChhbikrIG1vZGUJCQkjCisjCV9kbWVtX3dyaXRlX2J5dGUoKSAtIHN0b3JlIHJlc3VsdCB0byBtZW1vcnkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGlzIHJvdXRpbmUgY2hlY2tzIHdoaWNoIGNvbmRpdGlvbmFsIHByZWRpY2F0ZSBpcyBzcGVjaWZpZWQgYnkJIworIyB0aGUgc3RhY2tlZCBmc2NjIGluc3RydWN0aW9uIG9wY29kZSBhbmQgdGhlbiBicmFuY2hlcyB0byBhIHJvdXRpbmUJIworIyBmb3IgdGhhdCBwcmVkaWNhdGUuIFRoZSBjb3JyZXNwb25kaW5nIGZiY2MgaW5zdHJ1Y3Rpb24gaXMgdGhlbiB1c2VkCSMKKyMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiAoc3BlY2lmaWVkIGJ5IHRoZSBzdGFja2VkIEZQU1IpIGlzIHRydWUJIworIyBvciBmYWxzZS4JCQkJCQkJCSMKKyMJSWYgYSBCU1VOIGV4Y2VwdGlvbiBzaG91bGQgYmUgaW5kaWNhdGVkLCB0aGUgQlNVTiBhbmQgQUJTVU4JIworIyBiaXRzIGFyZSBzZXQgaW4gdGhlIHN0YWNrZWQgRlBTUi4gSWYgdGhlIEJTVU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsCSMKKyMgdGhlIGZic3VuX2ZsZyBpcyBzZXQgaW4gdGhlIFNQQ09ORF9GTEcgbG9jYXRpb24gb24gdGhlIHN0YWNrLiBJZiBhbgkjCisjIGVuYWJsZWQgQlNVTiBzaG91bGQgbm90IGJlIGZsYWdnZWQgYW5kIHRoZSBwcmVkaWNhdGUgaXMgdHJ1ZSwgdGhlbgkjCisjIHRoZSByZXN1bHQgaXMgc3RvcmVkIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIGZpbGUgb3IgbWVtb3J5CQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnNjYworX2ZzY2M6CisJbW92LncJCUVYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBwcmVkaWNhdGUKKworCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnCisJbW92LmIJCUZQU1JfQ0MoJWE2KSwlZDEJIyBmZXRjaCBmcCBjY29kZXMKKwlyb3IubAkJJjB4OCwlZDEJCSMgcm90YXRlIHRvIHRvcCBieXRlCisJZm1vdi5sCQklZDEsJWZwc3IJCSMgaW5zZXJ0IGludG8gRlBTUgorCisJbW92LncJCSh0YmxfZnNjYy5iLCVwYywlZDAudyoyKSwlZDEgIyBsb2FkIHRhYmxlCisJam1wCQkodGJsX2ZzY2MuYiwlcGMsJWQxLncpCSMganVtcCB0byBmc2NjIHJvdXRpbmUKKwordGJsX2ZzY2M6CisJc2hvcnQJCWZzY2NfZgkJLQl0YmxfZnNjYwkjIDAwCisJc2hvcnQJCWZzY2NfZXEJCS0JdGJsX2ZzY2MJIyAwMQorCXNob3J0CQlmc2NjX29ndAktCXRibF9mc2NjCSMgMDIKKwlzaG9ydAkJZnNjY19vZ2UJLQl0YmxfZnNjYwkjIDAzCisJc2hvcnQJCWZzY2Nfb2x0CS0JdGJsX2ZzY2MJIyAwNAorCXNob3J0CQlmc2NjX29sZQktCXRibF9mc2NjCSMgMDUKKwlzaG9ydAkJZnNjY19vZ2wJLQl0YmxfZnNjYwkjIDA2CisJc2hvcnQJCWZzY2Nfb3IJCS0JdGJsX2ZzY2MJIyAwNworCXNob3J0CQlmc2NjX3VuCQktCXRibF9mc2NjCSMgMDgKKwlzaG9ydAkJZnNjY191ZXEJLQl0YmxfZnNjYwkjIDA5CisJc2hvcnQJCWZzY2NfdWd0CS0JdGJsX2ZzY2MJIyAxMAorCXNob3J0CQlmc2NjX3VnZQktCXRibF9mc2NjCSMgMTEKKwlzaG9ydAkJZnNjY191bHQJLQl0YmxfZnNjYwkjIDEyCisJc2hvcnQJCWZzY2NfdWxlCS0JdGJsX2ZzY2MJIyAxMworCXNob3J0CQlmc2NjX25lcQktCXRibF9mc2NjCSMgMTQKKwlzaG9ydAkJZnNjY190CQktCXRibF9mc2NjCSMgMTUKKwlzaG9ydAkJZnNjY19zZgkJLQl0YmxfZnNjYwkjIDE2CisJc2hvcnQJCWZzY2Nfc2VxCS0JdGJsX2ZzY2MJIyAxNworCXNob3J0CQlmc2NjX2d0CQktCXRibF9mc2NjCSMgMTgKKwlzaG9ydAkJZnNjY19nZQkJLQl0YmxfZnNjYwkjIDE5CisJc2hvcnQJCWZzY2NfbHQJCS0JdGJsX2ZzY2MJIyAyMAorCXNob3J0CQlmc2NjX2xlCQktCXRibF9mc2NjCSMgMjEKKwlzaG9ydAkJZnNjY19nbAkJLQl0YmxfZnNjYwkjIDIyCisJc2hvcnQJCWZzY2NfZ2xlCS0JdGJsX2ZzY2MJIyAyMworCXNob3J0CQlmc2NjX25nbGUJLQl0YmxfZnNjYwkjIDI0CisJc2hvcnQJCWZzY2NfbmdsCS0JdGJsX2ZzY2MJIyAyNQorCXNob3J0CQlmc2NjX25sZQktCXRibF9mc2NjCSMgMjYKKwlzaG9ydAkJZnNjY19ubHQJLQl0YmxfZnNjYwkjIDI3CisJc2hvcnQJCWZzY2NfbmdlCS0JdGJsX2ZzY2MJIyAyOAorCXNob3J0CQlmc2NjX25ndAktCXRibF9mc2NjCSMgMjkKKwlzaG9ydAkJZnNjY19zbmVxCS0JdGJsX2ZzY2MJIyAzMAorCXNob3J0CQlmc2NjX3N0CQktCXRibF9mc2NjCSMgMzEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgSUVFRSBOb25hd2FyZSB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgbm9uYXdhcmUgdGVzdHMsIHdlIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkJIworIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIEluIGFkZGl0aW9uLCB3ZSBjaGVjayB0byBzZWUJCSMKKyMgaWYgdGhlIE5BTiBiaXQgaXMgc2V0LCBpbiB3aGljaCBjYXNlIEJTVU4gYW5kIEFJT1Agd2lsbCBiZSBzZXQuCSMKKyMJCQkJCQkJCQkjCisjIFRoZSBjYXNlcyBFUSBhbmQgTkUgYXJlIHNoYXJlZCBieSB0aGUgQXdhcmUgYW5kIE5vbmF3YXJlIGdyb3VwcwkjCisjIGFuZCBhcmUgaW5jYXBhYmxlIG9mIHNldHRpbmcgdGhlIEJTVU4gZXhjZXB0aW9uIGJpdC4JCQkjCisjCQkJCQkJCQkJIworIyBUeXBpY2FsbHksIG9ubHkgb25lIG9mIHRoZSB0d28gcG9zc2libGUgYnJhbmNoIGRpcmVjdGlvbnMgY291bGQJIworIyBoYXZlIHRoZSBOQU4gYml0IHNldC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBlcXVhbDoKKyMKKyMJWgorIworZnNjY19lcToKKwlmYmVxLncJCWZzY2NfZXFfeWVzCQkjIGVxdWFsPworZnNjY19lcV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19lcV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG5vdCBlcXVhbDoKKyMJXworIwlaCisjCitmc2NjX25lcToKKwlmYm5lcS53CQlmc2NjX25lcV95ZXMJCSMgbm90IGVxdWFsPworZnNjY19uZXFfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfbmVxX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZzY2NfZ3Q6CisJZmJndC53CQlmc2NjX2d0X3llcwkJIyBncmVhdGVyIHRoYW4/Citmc2NjX2d0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2NfZ3RfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBub3QgZ3JlYXRlciB0aGFuOgorIworIwlOQU52WnZOCisjCitmc2NjX25ndDoKKwlmYm5ndC53CQlmc2NjX25ndF95ZXMJCSMgbm90IGdyZWF0ZXIgdGhhbj8KK2ZzY2Nfbmd0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25ndF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2ZzY2NfZ2U6CisJZmJnZS53CQlmc2NjX2dlX3llcwkJIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw/Citmc2NjX2dlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2NfZ2VfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKToKKyMJICAgICAgIF8KKyMJTkFOdihOXlopCisjCitmc2NjX25nZToKKwlmYm5nZS53CQlmc2NjX25nZV95ZXMJCSMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpPworZnNjY19uZ2Vfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfbmdlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBsZXNzIHRoYW46CisjCSAgIF9fX19fCisjCU5eKE5BTnZaKQorIworZnNjY19sdDoKKwlmYmx0LncJCWZzY2NfbHRfeWVzCQkjIGxlc3MgdGhhbj8KK2ZzY2NfbHRfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorZnNjY19sdF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG5vdCBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoWnZOKQorIworZnNjY19ubHQ6CisJZmJubHQudwkJZnNjY19ubHRfeWVzCQkjIG5vdCBsZXNzIHRoYW4/Citmc2NjX25sdF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19ubHRfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIGxlc3MgdGhhbiBvciBlcXVhbDoKKyMJICAgICBfX18KKyMJWnYoTl5OQU4pCisjCitmc2NjX2xlOgorCWZibGUudwkJZnNjY19sZV95ZXMJCSMgbGVzcyB0aGFuIG9yIGVxdWFsPworZnNjY19sZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX2xlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBub3QgKGxlc3MgdGhhbiBvciBlcXVhbCk6CisjCSAgICAgX19fCisjCU5BTnYoTnZaKQorIworZnNjY19ubGU6CisJZmJubGUudwkJZnNjY19ubGVfeWVzCQkjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKT8KK2ZzY2NfbmxlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25sZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgZ3JlYXRlciBvciBsZXNzIHRoYW46CisjCV9fX19fCisjCU5BTnZaCisjCitmc2NjX2dsOgorCWZiZ2wudwkJZnNjY19nbF95ZXMJCSMgZ3JlYXRlciBvciBsZXNzIHRoYW4/Citmc2NjX2dsX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2NfZ2xfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKToKKyMKKyMJTkFOdloKKyMKK2ZzY2NfbmdsOgorCWZibmdsLncJCWZzY2NfbmdsX3llcwkJIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKT8KK2ZzY2NfbmdsX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25nbF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw6CisjCV9fXworIwlOQU4KKyMKK2ZzY2NfZ2xlOgorCWZiZ2xlLncJCWZzY2NfZ2xlX3llcwkJIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbD8KK2ZzY2NfZ2xlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX2dsZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpOgorIworIwlOQU4KKyMKK2ZzY2NfbmdsZToKKwlmYm5nbGUudwkJZnNjY19uZ2xlX3llcwkjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpPworZnNjY19uZ2xlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25nbGVfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgTWlzY2VsbGFuZW91cyB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgYXdhcmUgdGVzdHMsIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJIworIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIFRoZSBCU1VOIGV4Y2VwdGlvbiB3aWxsIG5vdCBiZQkjCisjIHNldCBmb3IgYW55IG9mIHRoZXNlIHRlc3RzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgZmFsc2U6CisjCisjCUZhbHNlCisjCitmc2NjX2Y6CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyB0cnVlOgorIworIwlUcnVlCisjCitmc2NjX3Q6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHNpZ25hbGxpbmcgZmFsc2U6CisjCisjCUZhbHNlCisjCitmc2NjX3NmOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIHNpZ25hbGxpbmcgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZnNjY19zdDoKKwlzdAkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBzaWduYWxsaW5nIGVxdWFsOgorIworIwlaCisjCitmc2NjX3NlcToKKwlmYnNlcS53CQlmc2NjX3NlcV95ZXMJCSMgc2lnbmFsbGluZyBlcXVhbD8KK2ZzY2Nfc2VxX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorZnNjY19zZXFfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgc2lnbmFsbGluZyBub3QgZXF1YWw6CisjCV8KKyMJWgorIworZnNjY19zbmVxOgorCWZic25lcS53CWZzY2Nfc25lcV95ZXMJCSMgc2lnbmFsbGluZyBlcXVhbD8KK2ZzY2Nfc25lcV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2Nfc25lcV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwkJCQkJCQkJCSMKKyMgSUVFRSBBd2FyZSB0ZXN0cwkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBGb3IgdGhlIElFRUUgYXdhcmUgdGVzdHMsIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJIworIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIFRoZSBCU1VOIGV4Y2VwdGlvbiB3aWxsIG5vdCBiZQkjCisjIHNldCBmb3IgYW55IG9mIHRoZXNlIHRlc3RzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgb3JkZXJlZCBncmVhdGVyIHRoYW46CisjCV9fX19fX18KKyMJTkFOdlp2TgorIworZnNjY19vZ3Q6CisJZmJvZ3QudwkJZnNjY19vZ3RfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuPworZnNjY19vZ3Rfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2Nfb2d0X3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw6CisjCV9fX19fX18KKyMJTkFOdlp2TgorIworZnNjY191bGU6CisJZmJ1bGUudwkJZnNjY191bGVfeWVzCQkjIHVub3JkZXJlZCBvciBsZXNzIG9yIGVxdWFsPworZnNjY191bGVfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfdWxlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgb3JkZXJlZCBncmVhdGVyIHRoYW4gb3IgZXF1YWw6CisjCSAgIF9fX19fCisjCVp2KE5BTnZOKQorIworZnNjY19vZ2U6CisJZmJvZ2UudwkJZnNjY19vZ2VfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPworZnNjY19vZ2Vfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2Nfb2dlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbjoKKyMJICAgICAgIF8KKyMJTkFOdihOXlopCisjCitmc2NjX3VsdDoKKwlmYnVsdC53CQlmc2NjX3VsdF95ZXMJCSMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbj8KK2ZzY2NfdWx0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX3VsdF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG9yZGVyZWQgbGVzcyB0aGFuOgorIwkgICBfX19fXworIwlOXihOQU52WikKKyMKK2ZzY2Nfb2x0OgorCWZib2x0LncJCWZzY2Nfb2x0X3llcwkJIyBvcmRlcmVkIGxlc3MgdGhhbj8KK2ZzY2Nfb2x0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29sdF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHVub3JkZXJlZCBvciBncmVhdGVyIG9yIGVxdWFsOgorIworIwlOQU52WnZOCisjCitmc2NjX3VnZToKKwlmYnVnZS53CQlmc2NjX3VnZV95ZXMJCSMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbj8KK2ZzY2NfdWdlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX3VnZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG9yZGVyZWQgbGVzcyB0aGFuIG9yIGVxdWFsOgorIwkgICAgIF9fXworIwladihOXk5BTikKKyMKK2ZzY2Nfb2xlOgorCWZib2xlLncJCWZzY2Nfb2xlX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZnNjY19vbGVfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2Nfb2xlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbjoKKyMJICAgICBfX18KKyMJTkFOdihOdlopCisjCitmc2NjX3VndDoKKwlmYnVndC53CQlmc2NjX3VndF95ZXMJCSMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbj8KK2ZzY2NfdWd0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX3VndF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG9yZGVyZWQgZ3JlYXRlciBvciBsZXNzIHRoYW46CisjCV9fX19fCisjCU5BTnZaCisjCitmc2NjX29nbDoKKwlmYm9nbC53CQlmc2NjX29nbF95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2ZzY2Nfb2dsX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29nbF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHVub3JkZXJlZCBvciBlcXVhbDoKKyMKKyMJTkFOdloKKyMKK2ZzY2NfdWVxOgorCWZidWVxLncJCWZzY2NfdWVxX3llcwkJIyB1bm9yZGVyZWQgb3IgZXF1YWw/Citmc2NjX3VlcV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY191ZXFfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBvcmRlcmVkOgorIwlfX18KKyMJTkFOCisjCitmc2NjX29yOgorCWZib3IudwkJZnNjY19vcl95ZXMJCSMgb3JkZXJlZD8KK2ZzY2Nfb3Jfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2Nfb3JfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyB1bm9yZGVyZWQ6CisjCisjCU5BTgorIworZnNjY191bjoKKwlmYnVuLncJCWZzY2NfdW5feWVzCQkjIHVub3JkZXJlZD8KK2ZzY2NfdW5fbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfdW5feWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgYnN1biBleGNlcHRpb24gYml0IHdhcyBzZXQuIG5vdywgY2hlY2sgdG8gc2VlIGlzIEJTVU4KKyMgaXMgZW5hYmxlZC4gaWYgc28sIGRvbid0IHN0b3JlIHJlc3VsdCBhbmQgY29ycmVjdCBzdGFjayBmcmFtZQorIyBmb3IgYSBic3VuIGV4Y2VwdGlvbi4KKyMKK2ZzY2NfY2hrX2JzdW46CisJYnRzdAkJJmJzdW5fYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZzY2NfYnN1bgorCisjCisjIHRoZSBic3VuIGV4Y2VwdGlvbiBiaXQgd2FzIG5vdCBzZXQuCisjIHRoZSByZXN1bHQgaGFzIGJlZW4gc2VsZWN0ZWQuCisjIG5vdywgY2hlY2sgdG8gc2VlIGlmIHRoZSByZXN1bHQgaXMgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhIHJlZ2lzdGVyCisjIGZpbGUgb3IgaW4gbWVtb3J5LgorIworZnNjY19kb25lOgorCW1vdi5sCQklZDAsJWEwCQkJIyBzYXZlIHJlc3VsdCBmb3IgYSBtb21lbnQKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBmZXRjaCBsbyBvcHdvcmQKKwltb3YubAkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBleHRyYWN0IHNyYyBtb2RlCisKKwlibmUuYgkJZnNjY19tZW1fb3AJCSMgaXQncyBhIG1lbW9yeSBvcGVyYXRpb24KKworCW1vdi5sCQklZDAsJWQxCisJYW5kaS53CQkmMHg3LCVkMQkJIyBwYXNzIGluZGV4IGluIGQxCisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgcmVzdWx0IGluIGQwCisJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzYXZlIHJlc3VsdCBpbiByZWdmaWxlCisJcnRzCisKKyMKKyMgdGhlIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZjoKKyMJLT4gRG4gOiA8ZWE+IGlzIGdhcmJhZ2UKKyMKKyMgaWYgdGhlIGFkZHJlc3NpbmcgbW9kZSBpcyBwb3N0LWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50LAorIyB0aGVuIHRoZSBhZGRyZXNzIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQuCisjCitmc2NjX21lbV9vcDoKKwljbXBpLmIJCSVkMSwmMHgxOAkJIyBpcyA8ZWE+IChBbikrID8KKwliZXEuYgkJZnNjY19tZW1faW5jCQkjIHllcworCWNtcGkuYgkJJWQxLCYweDIwCQkjIGlzIDxlYT4gLShBbikgPworCWJlcS5iCQlmc2NjX21lbV9kZWMJCSMgeWVzCisKKwltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyByZXN1bHQgaW4gZDAKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIGZldGNoIDxlYT4KKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHJlc3VsdCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZzY2NfZXJyCQkjIHllcworCisJcnRzCisKKyMgYWRkcmVzaW5nIG1vZGUgaXMgcG9zdC1pbmNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCisjIGZhaWxzIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLiBpZiB3cml0ZSBwYXNzZXMgdGhlbgorIyBjYWxsIGluY19hcmVnKCkgdG8gdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLgorZnNjY19tZW1faW5jOgorCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIHJlc3VsdCBpbiBkMAorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgZmV0Y2ggPGVhPgorCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgcmVzdWx0IGJ5dGUKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZnNjY19lcnIJCSMgeWVzCisKKwltb3YuYgkJMHgxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBmZXRjaCBvcHdvcmQKKwlhbmRpLncJCSYweDcsJWQxCQkjIHBhc3MgaW5kZXggaW4gZDEKKwltb3ZxLmwJCSYweDEsJWQwCQkjIHBhc3MgYW10IHRvIGluYyBieQorCWJzci5sCQlpbmNfYXJlZwkJIyBpbmNyZW1lbnQgYWRkcmVzcyByZWdpc3RlcgorCisJcnRzCisKKyMgYWRkcmVzc2luZyBtb2RlIGlzIHByZS1kZWNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCisjIGZhaWxzIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLiBpZiB0aGUgd3JpdGUgcGFzc2VzIHRoZW4KKyMgY2FsbCBkZWNfYXJlZygpIHRvIHVwZGF0ZSB0aGUgYWRkcmVzcyByZWdpc3Rlci4KK2ZzY2NfbWVtX2RlYzoKKwltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyByZXN1bHQgaW4gZDAKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIGZldGNoIDxlYT4KKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHJlc3VsdCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZzY2NfZXJyCQkjIHllcworCisJbW92LmIJCTB4MStFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggb3B3b3JkCisJYW5kaS53CQkmMHg3LCVkMQkJIyBwYXNzIGluZGV4IGluIGQxCisJbW92cS5sCQkmMHgxLCVkMAkJIyBwYXNzIGFtdCB0byBkZWMgYnkKKwlic3IubAkJZGVjX2FyZWcJCSMgZGVjcmVtZW50IGFkZHJlc3MgcmVnaXN0ZXIKKworCXJ0cworCisjIHRoZSBlbXVsYXRpb24gcm91dGluZSBzZXQgYnN1biBhbmQgQlNVTiB3YXMgZW5hYmxlZC4gaGF2ZSB0bworIyBmaXggc3RhY2sgYW5kIGp1bXAgdG8gdGhlIGJzdW4gaGFuZGxlci4KKyMgbGV0IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSB1cCB0bworIyBlbGltaW5hdGUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGZpZWxkLgorZnNjY19ic3VuOgorCW1vdi5iCQkmZmJzdW5fZmxnLFNQQ09ORF9GTEcoJWE2KQorCXJ0cworCisjIHRoZSBieXRlIHdyaXRlIHRvIG1lbW9yeSBoYXMgZmFpbGVkLiBwYXNzIHRoZSBmYWlsaW5nIGVmZmVjdGl2ZSBhZGRyZXNzCisjIGFuZCBhIEZTTFcgdG8gZnVuaW1wX2RhY2MoKS4KK2ZzY2NfZXJyOgorCW1vdi53CQkmMHgwMGExLEVYQ19WT0ZGKCVhNikKKwlicmEubAkJZmFjY19maW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmbW92bV9keW5hbWljKCk6IGVtdWxhdGUgImZtb3ZtIiBkeW5hbWljIGluc3RydWN0aW9uCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBkYXRhIHJlZ2lzdGVyCQkJCSMKKyMJe2ksZCx9bWVtX3JlYWQoKSAtIGZldGNoIGRhdGEgZnJvbSBtZW1vcnkJCQkjCisjCV9tZW1fd3JpdGUoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5CQkJCSMKKyMJaWVhX2lhY2MoKSAtIGluc3RydWN0aW9uIG1lbW9yeSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJCSMKKyMJaWVhX2RhY2MoKSAtIGRhdGEgbWVtb3J5IGFjY2VzcyBlcnJvciBvY2N1cnJlZAkJCSMKKyMJcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBpbmRleCByZWdzIGlmIGFjY2VzcyBlcnJvciBvY2N1cnJlZAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBpbnN0ciBpcyAiZm1vdm0gRG4sLShBNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkJIworIwkJZDAgPSBzaXplIG9mIGR1bXAJCQkJCSMKKyMJCWQxID0gRG4JCQkJCQkJIworIwlFbHNlIGlmIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciwJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwlFbHNlIGlmIGRhdGEgYWNjZXNzIGVycm9yLAkJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwkJYTAgPSBhZGRyZXNzIG9mIGZhdWx0CQkJCQkjCisjCUVsc2UJCQkJCQkJCSMKKyMJCW5vbmUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSBlZmZlY3RpdmUgYWRkcmVzcyBtdXN0IGJlIGNhbGN1bGF0ZWQgc2luY2UgdGhpcyBpcyBlbnRlcmVkCSMKKyMgZnJvbSBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIgZXhjZXB0aW9uIGhhbmRsZXIuIFNvLCB3ZQkjCisjIGhhdmUgb3VyIG93biBmY2FsY19lYSgpIHJvdXRpbmUgaGVyZS4gSWYgYW4gYWNjZXNzIGVycm9yIGlzIGZsYWdnZWQJIworIyBieSBhIF97aSxkLH1tZW1fcmVhZCgpIGNhbGwsIHdlIG11c3QgZXhpdCB0aHJvdWdoIHRoZSBzcGVjaWFsCQkjCisjIGhhbmRsZXIuCQkJCQkJCQkjCisjCVRoZSBkYXRhIHJlZ2lzdGVyIGlzIGRldGVybWluZWQgYW5kIGl0cyB2YWx1ZSBsb2FkZWQgdG8gZ2V0IHRoZQkjCisjIHN0cmluZyBvZiBGUCByZWdpc3RlcnMgYWZmZWN0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvCSMKKyMgYSBsb29rdXAgdGFibGUgc3VjaCB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBieXRlcwkJIworIyBpbnZvbHZlZC4JCQkJCQkJCSMKKyMJSWYgdGhlIGluc3RydWN0aW9uIGlzICJmbW92bS54IDxlYT4sRG4iLCBhIF9tZW1fcmVhZCgpIGlzIHVzZWQJIworIyB0byByZWFkIGluIGFsbCBGUCB2YWx1ZXMuIEFnYWluLCBfbWVtX3JlYWQoKSBtYXkgZmFpbCBhbmQgcmVxdWlyZSBhCSMKKyMgc3BlY2lhbCBleGl0LgkJCQkJCQkJIworIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sPGVhPiIsIGEgX21lbV93cml0ZSgpIGlzIHVzZWQJIworIyB0byB3cml0ZSBhbGwgRlAgdmFsdWVzLiBfbWVtX3dyaXRlKCkgbWF5IGFsc28gZmFpbC4JCQkjCisjCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCBETiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUsCSMKKyMgdGhlbiB3ZSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGR1bXAgYW5kIHRoZSBzdHJpbmcgdG8gdGhlIGNhbGxlcgkjCisjIHNvIHRoYXQgdGhlIG1vdmUgY2FuIG9jY3VyIG91dHNpZGUgb2YgdGhpcyByb3V0aW5lLiBUaGlzIHNwZWNpYWwJIworIyBjYXNlIGlzIHJlcXVpcmVkIHNvIHRoYXQgbW92ZXMgdG8gdGhlIHN5c3RlbSBzdGFjayBhcmUgaGFuZGxlZAkjCisjIGNvcnJlY3RseS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIERZTkFNSUM6CQkJCQkJCQkjCisjCWZtb3ZtLngJZG4sIDxlYT4JCQkJCQkjCisjCWZtb3ZtLngJPGVhPiwgZG4JCQkJCQkjCisjCQkJCQkJCQkJIworIwkgICAgICA8V09SRCAxPgkJICAgICAgPFdPUkQyPgkJCQkjCisjCTExMTEgMDAxMCAwMCB8PGVhPnwJMTFAJiAxMDAwIDAkJCQgMDAwMAkJCSMKKyMJCQkJCQkJCQkjCisjCSYgPSAoMCk6IHByZWRlY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUJCQkJIworIwkgICAgKDEpOiBwb3N0aW5jcmVtZW50IG9yIGNvbnRyb2wgYWRkcmVzc2luZyBtb2RlCQkjCisjCUAgPSAoMCk6IG1vdmUgbGlzdGVkIHJlZ3MgZnJvbSBtZW1vcnkgdG8gdGhlIEZQVQkJIworIwkgICAgKDEpOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gdGhlIEZQVSB0byBtZW1vcnkJCSMKKyMJJCQkICAgIDogaW5kZXggb2YgZGF0YSByZWdpc3RlciBob2xkaW5nIHJlZyBzZWxlY3QgbWFzawkJIworIwkJCQkJCQkJCSMKKyMgTk9URVM6CQkJCQkJCQkjCisjCUlmIHRoZSBkYXRhIHJlZ2lzdGVyIGhvbGRzIGEgemVybywgdGhlbiB0aGUJCQkjCisjCWluc3RydWN0aW9uIGlzIGEgbm9wLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZtb3ZtX2R5bmFtaWMKK2Ztb3ZtX2R5bmFtaWM6CisKKyMgZXh0cmFjdCB0aGUgZGF0YSByZWdpc3RlciBpbiB3aGljaCB0aGUgYml0IHN0cmluZyByZXNpZGVzLi4uCisJbW92LmIJCTErRVhDX0VYVFdPUkQoJWE2KSwlZDEJIyBmZXRjaCBleHR3b3JkCisJYW5kaS53CQkmMHg3MCwlZDEJCSMgZXh0cmFjdCByZWcgYml0cworCWxzci5iCQkmMHg0LCVkMQkJIyBzaGlmdCBpbnRvIGxvIGJpdHMKKworIyBmZXRjaCB0aGUgYml0IHN0cmluZyBpbnRvIGQwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggcmVnIHN0cmluZworCisJYW5kaS5sCQkmMHgwMDAwMDBmZiwlZDAJCSMga2VlcCBvbmx5IGxvIGJ5dGUKKworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc3RyZworCW1vdi5iCQkodGJsX2Ztb3ZtX3NpemUudywlcGMsJWQwKSwlZDAKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNpemUKKwlic3IubAkJZm1vdm1fY2FsY19lYQkJIyBjYWxjdWxhdGUgPGVhPgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgc2l6ZQorCW1vdi5sCQkoJXNwKSssJWQxCQkjIHJlc3RvcmUgc3RyZworCisjIGlmIHRoZSBiaXQgc3RyaW5nIGlzIGEgemVybywgdGhlbiB0aGUgb3BlcmF0aW9uIGlzIGEgbm8tb3AKKyMgYnV0LCBtYWtlIHN1cmUgdGhhdCB3ZSd2ZSBjYWxjdWxhdGVkIGVhIGFuZCBhZHZhbmNlZCB0aGUgb3B3b3JkIHBvaW50ZXIKKwliZXEudwkJZm1vdm1fZGF0YV9kb25lCisKKyMgc2VwYXJhdGUgbW92ZSBpbnMgZnJvbSBtb3ZlIG91dHMuLi4KKwlidHN0CQkmMHg1LEVYQ19FWFRXT1JEKCVhNikJIyBpcyBpdCBhIG1vdmUgaW4gb3Igb3V0PworCWJlcS53CQlmbW92bV9kYXRhX2luCQkjIGl0J3MgYSBtb3ZlIG91dAorCisjIyMjIyMjIyMjIyMjCisjIE1PVkUgT1VUOiAjCisjIyMjIyMjIyMjIyMjCitmbW92bV9kYXRhX291dDoKKwlidHN0CQkmMHg0LEVYQ19FWFRXT1JEKCVhNikJIyBjb250cm9sIG9yIHByZWRlY3JlbWVudD8KKwlibmUudwkJZm1vdm1fb3V0X2N0cmwJCSMgY29udHJvbAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9vdXRfcHJlZGVjOgorIyBmb3IgcHJlZGVjcmVtZW50IG1vZGUsIHRoZSBiaXQgc3RyaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiBib3RoIGNvbnRyb2wKKyMgb3BlcmF0aW9ucyBhbmQgcG9zdGluY3JlbWVudCBtb2RlLiAoYml0NyA9IEZQNyAuLi4gYml0MCA9IEZQMCkKKyMgaGVyZSwgd2UgY29udmVydCBpdCB0byBiZSBqdXN0IGxpa2UgdGhlIG90aGVycy4uLgorCW1vdi5iCQkodGJsX2Ztb3ZtX2NvbnZlcnQudywlcGMsJWQxLncqMSksJWQxCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCWZtb3ZtX291dF9jdHJsCQkjIHVzZXIKKworZm1vdm1fb3V0X3ByZWRlY19zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIGlzIDxlYT4gbW9kZSAtKGE3KT8KKwlibmUuYgkJZm1vdm1fb3V0X2N0cmwKKworIyB0aGUgb3BlcmF0aW9uIHdhcyB1bmZvcnR1bmF0ZWx5IGFuOiBmbW92bS54IGRuLC0oc3ApCisjIGNhbGxlZCBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgd2UncmUgYWxzbyBwYXNzaW5nICJzaXplIiBhbmQgInN0cmciIGJhY2sgdG8gdGhlIGNhbGxpbmcgcm91dGluZQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9vdXRfY3RybDoKKwltb3YubAkJJWEwLCVhMQkJCSMgbW92ZSA8ZWE+IHRvIGExCisKKwlzdWIubAkJJWQwLCVzcAkJCSMgc3VidHJhY3Qgc2l6ZSBvZiBkdW1wCisJbGVhCQkoJXNwKSwlYTAKKworCXRzdC5iCQklZDEJCQkjIHNob3VsZCBGUDAgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMQkjIG5vCisKKwltb3YubAkJMHgwK0VYQ19GUDAoJWE2KSwoJWEwKSsJIyB5ZXMKKwltb3YubAkJMHg0K0VYQ19GUDAoJWE2KSwoJWEwKSsKKwltb3YubAkJMHg4K0VYQ19GUDAoJWE2KSwoJWEwKSsKKworZm1vdm1fb3V0X2N0cmxfZnAxOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAxIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDIJIyBubworCisJbW92LmwJCTB4MCtFWENfRlAxKCVhNiksKCVhMCkrCSMgeWVzCisJbW92LmwJCTB4NCtFWENfRlAxKCVhNiksKCVhMCkrCisJbW92LmwJCTB4OCtFWENfRlAxKCVhNiksKCVhMCkrCisKK2Ztb3ZtX291dF9jdHJsX2ZwMjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAzCSMgbm8KKworCWZtb3ZtLngJCSYweDIwLCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDM6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDMgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNAkjIG5vCisKKwlmbW92bS54CQkmMHgxMCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA0OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA0IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDUJIyBubworCisJZm1vdm0ueAkJJjB4MDgsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA2CSMgbm8KKworCWZtb3ZtLngJCSYweDA0LCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDY6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDYgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNwkjIG5vCisKKwlmbW92bS54CQkmMHgwMiwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA3OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA3IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9kb25lCSMgbm8KKworCWZtb3ZtLngJCSYweDAxLCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9kb25lOgorCW1vdi5sCQklYTEsTF9TQ1IxKCVhNikKKworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3M6IHN1cGVydmlzb3Igc3JjCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzaXplCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIGNvcHkgZGF0YSB0byB1c2VyIG1lbQorCisJbW92LmwJCSglc3ApKywlZDAKKwlhZGQubAkJJWQwLCVzcAkJCSMgY2xlYXIgZnByZWcgZGF0YSBmcm9tIHN0YWNrCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGVycj8KKwlibmUudwkJZm1vdm1fb3V0X2VycgkJIyB5ZXMKKworCXJ0cworCisjIyMjIyMjIyMjIyMKKyMgTU9WRSBJTjogIworIyMjIyMjIyMjIyMjCitmbW92bV9kYXRhX2luOgorCW1vdi5sCQklYTAsTF9TQ1IxKCVhNikKKworCXN1Yi5sCQklZDAsJXNwCQkJIyBtYWtlIHJvb20gZm9yIGZwcmVncworCWxlYQkJKCVzcCksJWExCisKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGJpdCBzdHJpbmcgZm9yIGxhdGVyCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSAjIG9mIGJ5dGVzCisKKwlic3IubAkJX2RtZW1fcmVhZAkJIyBjb3B5IGRhdGEgZnJvbSB1c2VyIG1lbQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0cmlldmUgIyBvZiBieXRlcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS53CQlmbW92bV9pbl9lcnIJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVkMQkJIyBsb2FkIGJpdCBzdHJpbmcKKworCWxlYQkJKCVzcCksJWEwCQkjIGFkZHIgb2Ygc3RhY2sKKworCXRzdC5iCQklZDEJCQkjIHNob3VsZCBGUDAgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX2RhdGFfaW5fZnAxCSMgbm8KKworCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDAoJWE2KQkjIHllcworCW1vdi5sCQkoJWEwKSssMHg0K0VYQ19GUDAoJWE2KQorCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDAoJWE2KQorCitmbW92bV9kYXRhX2luX2ZwMToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDIJIyBubworCisJbW92LmwJCSglYTApKywweDArRVhDX0ZQMSglYTYpCSMgeWVzCisJbW92LmwJCSglYTApKywweDQrRVhDX0ZQMSglYTYpCisJbW92LmwJCSglYTApKywweDgrRVhDX0ZQMSglYTYpCisKK2Ztb3ZtX2RhdGFfaW5fZnAyOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAyIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMwkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MjAJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnAzOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAzIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNAkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MTAJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA0OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA0IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNQkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDgJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA1OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA1IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNgkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDQJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA2OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA2IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNwkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDIJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA3OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA3IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2RvbmUJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDAxCQkjIHllcworCitmbW92bV9kYXRhX2luX2RvbmU6CisJYWRkLmwJCSVkMCwlc3AJCQkjIHJlbW92ZSBmcHJlZ3MgZnJvbSBzdGFjaworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Ztb3ZtX2RhdGFfZG9uZToKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGFibGUgaW5kZXhlZCBieSB0aGUgb3BlcmF0aW9uJ3MgYml0IHN0cmluZyB0aGF0IGdpdmVzIHRoZSBudW1iZXIKKyMgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlIG1vdmVkLgorIworIyBudW1iZXIgb2YgYnl0ZXMgPSAoIyBvZiAxJ3MgaW4gYml0IHN0cmluZykgKiAxMihieXRlcy9mcHJlZykKKyMKK3RibF9mbW92bV9zaXplOgorCWJ5dGUJMHgwMCwweDBjLDB4MGMsMHgxOCwweDBjLDB4MTgsMHgxOCwweDI0CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDNjLDB4NDgsMHg0OCwweDU0LDB4NDgsMHg1NCwweDU0LDB4NjAKKworIworIyB0YWJsZSB0byBjb252ZXJ0IGEgcHJlLWRlY3JlbWVudCBiaXQgc3RyaW5nIGludG8gYSBwb3N0LWluY3JlbWVudAorIyBvciBjb250cm9sIGJpdCBzdHJpbmcuCisjIGV4OgkweDAwCT09PgkweDAwCisjCTB4MDEJPT0+CTB4ODAKKyMJMHgwMgk9PT4JMHg0MAorIwkJLgorIwkJLgorIwkweGZkCT09PgkweGJmCisjCTB4ZmUJPT0+CTB4N2YKKyMJMHhmZgk9PT4JMHhmZgorIwordGJsX2Ztb3ZtX2NvbnZlcnQ6CisJYnl0ZQkweDAwLDB4ODAsMHg0MCwweGMwLDB4MjAsMHhhMCwweDYwLDB4ZTAKKwlieXRlCTB4MTAsMHg5MCwweDUwLDB4ZDAsMHgzMCwweGIwLDB4NzAsMHhmMAorCWJ5dGUJMHgwOCwweDg4LDB4NDgsMHhjOCwweDI4LDB4YTgsMHg2OCwweGU4CisJYnl0ZQkweDE4LDB4OTgsMHg1OCwweGQ4LDB4MzgsMHhiOCwweDc4LDB4ZjgKKwlieXRlCTB4MDQsMHg4NCwweDQ0LDB4YzQsMHgyNCwweGE0LDB4NjQsMHhlNAorCWJ5dGUJMHgxNCwweDk0LDB4NTQsMHhkNCwweDM0LDB4YjQsMHg3NCwweGY0CisJYnl0ZQkweDBjLDB4OGMsMHg0YywweGNjLDB4MmMsMHhhYywweDZjLDB4ZWMKKwlieXRlCTB4MWMsMHg5YywweDVjLDB4ZGMsMHgzYywweGJjLDB4N2MsMHhmYworCWJ5dGUJMHgwMiwweDgyLDB4NDIsMHhjMiwweDIyLDB4YTIsMHg2MiwweGUyCisJYnl0ZQkweDEyLDB4OTIsMHg1MiwweGQyLDB4MzIsMHhiMiwweDcyLDB4ZjIKKwlieXRlCTB4MGEsMHg4YSwweDRhLDB4Y2EsMHgyYSwweGFhLDB4NmEsMHhlYQorCWJ5dGUJMHgxYSwweDlhLDB4NWEsMHhkYSwweDNhLDB4YmEsMHg3YSwweGZhCisJYnl0ZQkweDA2LDB4ODYsMHg0NiwweGM2LDB4MjYsMHhhNiwweDY2LDB4ZTYKKwlieXRlCTB4MTYsMHg5NiwweDU2LDB4ZDYsMHgzNiwweGI2LDB4NzYsMHhmNgorCWJ5dGUJMHgwZSwweDhlLDB4NGUsMHhjZSwweDJlLDB4YWUsMHg2ZSwweGVlCisJYnl0ZQkweDFlLDB4OWUsMHg1ZSwweGRlLDB4M2UsMHhiZSwweDdlLDB4ZmUKKwlieXRlCTB4MDEsMHg4MSwweDQxLDB4YzEsMHgyMSwweGExLDB4NjEsMHhlMQorCWJ5dGUJMHgxMSwweDkxLDB4NTEsMHhkMSwweDMxLDB4YjEsMHg3MSwweGYxCisJYnl0ZQkweDA5LDB4ODksMHg0OSwweGM5LDB4MjksMHhhOSwweDY5LDB4ZTkKKwlieXRlCTB4MTksMHg5OSwweDU5LDB4ZDksMHgzOSwweGI5LDB4NzksMHhmOQorCWJ5dGUJMHgwNSwweDg1LDB4NDUsMHhjNSwweDI1LDB4YTUsMHg2NSwweGU1CisJYnl0ZQkweDE1LDB4OTUsMHg1NSwweGQ1LDB4MzUsMHhiNSwweDc1LDB4ZjUKKwlieXRlCTB4MGQsMHg4ZCwweDRkLDB4Y2QsMHgyZCwweGFkLDB4NmQsMHhlZAorCWJ5dGUJMHgxZCwweDlkLDB4NWQsMHhkZCwweDNkLDB4YmQsMHg3ZCwweGZkCisJYnl0ZQkweDAzLDB4ODMsMHg0MywweGMzLDB4MjMsMHhhMywweDYzLDB4ZTMKKwlieXRlCTB4MTMsMHg5MywweDUzLDB4ZDMsMHgzMywweGIzLDB4NzMsMHhmMworCWJ5dGUJMHgwYiwweDhiLDB4NGIsMHhjYiwweDJiLDB4YWIsMHg2YiwweGViCisJYnl0ZQkweDFiLDB4OWIsMHg1YiwweGRiLDB4M2IsMHhiYiwweDdiLDB4ZmIKKwlieXRlCTB4MDcsMHg4NywweDQ3LDB4YzcsMHgyNywweGE3LDB4NjcsMHhlNworCWJ5dGUJMHgxNywweDk3LDB4NTcsMHhkNywweDM3LDB4YjcsMHg3NywweGY3CisJYnl0ZQkweDBmLDB4OGYsMHg0ZiwweGNmLDB4MmYsMHhhZiwweDZmLDB4ZWYKKwlieXRlCTB4MWYsMHg5ZiwweDVmLDB4ZGYsMHgzZiwweGJmLDB4N2YsMHhmZgorCisJZ2xvYmFsCQlmbW92bV9jYWxjX2VhCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBfZm1vdm1fY2FsY19lYTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9jYWxjX2VhOgorCW1vdi5sCQklZDAsJWEwCQkJIyBtb3ZlICMgYnl0ZXMgdG8gYTAKKworIyBjdXJyZW50bHksIE1PREUgYW5kIFJFRyBhcmUgdGFrZW4gZnJvbSB0aGUgRVhDX09QV09SRC4gdGhpcyBjb3VsZCBiZQorIyBlYXNpbHkgY2hhbmdlZCBpZiB0aGV5IHdlcmUgaW5wdXRzIHBhc3NlZCBpbiByZWdpc3RlcnMuCisJbW92LncJCUVYQ19PUFdPUkQoJWE2KSwlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAorCW1vdi53CQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQorCisJYW5kaS53CQkmMHgzZiwlZDAJCSMgZXh0cmFjdCBtb2RlIGZpZWxkCisJYW5kaS5sCQkmMHg3LCVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKKworIyBqdW1wIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZvciBlYWNoIHtNT0RFLFJFR30gcGFpci4KKwltb3YudwkJKHRibF9mZWFfbW9kZS5iLCVwYywlZDAudyoyKSwlZDAgIyBmZXRjaCBqbXAgZGlzdGFuY2UKKwlqbXAJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMSkgIyBqbXAgdG8gY29ycmVjdCBlYSBtb2RlCisKKwlzd2JlZwkJJjY0Cit0YmxfZmVhX21vZGU6CisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9wX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2ExCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E3CS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTAJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTMJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTYJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhYnNfc2hvcnQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFic19sb25nCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZwY19pbmQJCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZwY19pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0OiAoQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfYTA6CisJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMAorCXJ0cworCitmYWRkcl9pbmRfYTE6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMQorCXJ0cworCitmYWRkcl9pbmRfYTI6CisJbW92LmwJCSVhMiwlYTAJCQkjIEdldCBjdXJyZW50IGEyCisJcnRzCisKK2ZhZGRyX2luZF9hMzoKKwltb3YubAkJJWEzLCVhMAkJCSMgR2V0IGN1cnJlbnQgYTMKKwlydHMKKworZmFkZHJfaW5kX2E0OgorCW1vdi5sCQklYTQsJWEwCQkJIyBHZXQgY3VycmVudCBhNAorCXJ0cworCitmYWRkcl9pbmRfYTU6CisJbW92LmwJCSVhNSwlYTAJCQkjIEdldCBjdXJyZW50IGE1CisJcnRzCisKK2ZhZGRyX2luZF9hNjoKKwltb3YubAkJKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE2CisJcnRzCisKK2ZhZGRyX2luZF9hNzoKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcG9zdGluY3JlbWVudDogKEFuKSsgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZhZGRyX2luZF9wX2EwOgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTAKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLEVYQ19EUkVHUysweDgoJWE2KQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLEVYQ19EUkVHUysweGMoJWE2KQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2EyOgorCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWEyCQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMzoKKwltb3YubAkJJWEzLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTMKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhMwkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTQ6CisJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwlYTQJCQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2E1OgorCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWE1CQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNjoKKwltb3YubAkJKCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE2CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwoJWE2KQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNzoKKwltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfQTcoJWE2KQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcHJlZGVjcmVtZW50OiAtKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfbV9hMDoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAkjIEdldCBjdXJyZW50IGEwCisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTE6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMQorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweGMoJWE2KQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2EyOgorCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhMgkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTM6CisJbW92LmwJCSVhMywlZDAJCQkjIEdldCBjdXJyZW50IGEzCisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsJWEzCQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNDoKKwltb3YubAkJJWE0LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTQKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTQJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E1OgorCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhNQkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTY6CisJbW92LmwJCSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E3OgorCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTcKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTcoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfZGlzcF9hMDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVhMAkjIGEwICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2ExOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWEwCSMgYTEgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTI6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhMiwlYTAJCQkjIGEyICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2EzOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTMsJWEwCQkJIyBhMyArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hNDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJJWE0LCVhMAkJCSMgYTQgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTU6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhNSwlYTAJCQkjIGE1ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E2OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQkoJWE2KSwlYTAJCSMgYTYgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19BNyglYTYpLCVhMAkJIyBhNyArIGQxNgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBpbmRleCg4LWJpdCBkaXNwbGFjZW1lbnQpOiAoZDgsIEFuLCBYbikgIworIyAgICAiICAgICAgICIgICAgICAgICAiICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBBbiwgWG4pICAjCisjIE1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgQW5dLCBYbiwgb2QpCQkgICAgICAgIworIyBNZW1vcnkgaW5kaXJlY3QgcHJlaW5kZXhlZDogKFtiZCwgQW4sIFhuXSwgb2QpCQkgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfZXh0OgorCWFkZHEubAkJJjB4OCwlZDEKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBiYXNlIGFyZWcKKwltb3YubAkJJWQwLC0oJXNwKQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIGV4dHdvcmQgaW4gZDAKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVhMAorCisJYnRzdAkJJjB4OCwlZDAKKwlibmUudwkJZmNhbGNfbWVtX2luZAorCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBob2xkIG9wd29yZAorCisJbW92LmwJCSVkMCwlZDEKKwlyb2wudwkJJjB4NCwlZDEKKwlhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgaW5kZXggcmVnbm8KKworIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggaW5kZXgKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQyCQkjIGZldGNoIG9wd29yZAorCisJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaXQgd29yZCBvciBsb25nPworCWJuZS5iCQlmYWlpOF9sb25nCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleAorZmFpaThfbG9uZzoKKwltb3YubAkJJWQyLCVkMQorCXJvbC53CQkmMHg3LCVkMQorCWFuZGkubAkJJjB4MywlZDEJCSMgZXh0cmFjdCBzY2FsZSB2YWx1ZQorCisJbHNsLmwJCSVkMSwlZDAJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCisKKwlleHRiLmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCSVkMiwlZDAJCQkjIGluZGV4ICsgZGlzcAorCWFkZC5sCQklZDAsJWEwCQkJIyBBbiArIChpbmRleCArIGRpc3ApCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIG9sZCBkMgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWJzb2x1dGUgc2hvcnQ6IChYWFgpLlcgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWJzX3Nob3J0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzaG9ydCBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIGxvbmc6IChYWFgpLkwgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZhYnNfbG9uZzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJvZ3JhbSBjb3VudGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgUEMpICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZwY19pbmQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHdvcmQgZGlzcGxhY2VtZW50CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGMgKyBkMTYKKworIyBfaW1lbV9yZWFkX3dvcmQoKSBpbmNyZWFzZWQgdGhlIGV4dHdwdHIgYnkgMi4gbmVlZCB0byBhZGp1c3QgaGVyZS4KKwlzdWJxLmwJCSYweDIsJWEwCQkjIGFkanVzdCA8ZWE+CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEMgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBQQywgQW4pICMKKyMgIiAgICAgIiAgICAgdy8gICAiICAoYmFzZSBkaXNwbGFjZW1lbnQpOiAoYmQsIFBDLCBBbikgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBQQ10sIFhuLCBvZCkgICAgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIFBDLCBYbl0sIG9kKSAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZwY19pbmRfZXh0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHQgd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHB1dCBiYXNlIGluIGEwCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgYmFzZQorCisJYnRzdAkJJjB4OCwlZDAJCSMgaXMgZGlzcCBvbmx5IDggYml0cz8KKwlibmUudwkJZmNhbGNfbWVtX2luZAkJIyBjYWxjIG1lbW9yeSBpbmRpcmVjdAorCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzdG9yZSBvcHdvcmQKKworCW1vdi5sCQklZDAsJWQxCQkJIyBtYWtlIGV4dHdvcmQgY29weQorCXJvbC53CQkmMHg0LCVkMQkJIyByb3RhdGUgcmVnIG51bSBpbnRvIHBsYWNlCisJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IHJlZ2lzdGVyIG51bWJlcgorCisjIGNvdW50IG9uIGZldGNoX2RyZWcoKSBub3QgdG8gYWx0ZXIgYTAuLi4KKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBpbmRleAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDIJCSMgZmV0Y2ggb3B3b3JkCisKKwlidHN0CQkmMHhiLCVkMgkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCWZwaWk4X2xvbmcJCSMgbG9uZworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKK2ZwaWk4X2xvbmc6CisJbW92LmwJCSVkMiwlZDEKKwlyb2wudwkJJjB4NywlZDEJCSMgcm90YXRlIHNjYWxlIHZhbHVlIGludG8gcGxhY2UKKwlhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKKworCWxzbC5sCQklZDEsJWQwCQkJIyBzaGlmdCBpbmRleCBieSBzY2FsZQorCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQklZDIsJWQwCQkJIyBkaXNwICsgaW5kZXgKKwlhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCisJcnRzCisKKyMgZDIgPSBpbmRleAorIyBkMyA9IGJhc2UKKyMgZDQgPSBvZAorIyBkNSA9IGV4dHdvcmQKK2ZjYWxjX21lbV9pbmQ6CisJYnRzdAkJJjB4NiwlZDAJCSMgaXMgdGhlIGluZGV4IHN1cHByZXNzZWQ/CisJYmVxLmIJCWZjYWxjX2luZGV4CisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKworCW1vdi5sCQklZDAsJWQ1CQkJIyBwdXQgZXh0d29yZCBpbiBkNQorCW1vdi5sCQklYTAsJWQzCQkJIyBwdXQgYmFzZSBpbiBkMworCisJY2xyLmwJCSVkMgkJCSMgeWVzLCBzbyBpbmRleCA9IDAKKwlicmEuYgkJZmJhc2Vfc3VwcF9jaworCisjIGluZGV4OgorZmNhbGNfaW5kZXg6CisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzYXZlIGQwIChvcHdvcmQpCisJYmZleHR1CQklZDB7JjE2OiY0fSwlZDEJCSMgZmV0Y2ggZHJlZyBpbmRleAorCWJzci5sCQlmZXRjaF9kcmVnCisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKwltb3YubAkJJWQwLCVkMgkJCSMgcHV0IGluZGV4IGluIGQyCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNQorCW1vdi5sCQklYTAsJWQzCisKKwlidHN0CQkmMHhiLCVkNQkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCWZub19leHQKKwlleHQubAkJJWQyCisKK2Zub19leHQ6CisJYmZleHR1CQklZDV7JjIxOiYyfSwlZDAKKwlsc2wubAkJJWQwLCVkMgorCisjIGJhc2UgYWRkcmVzcyAocGFzc2VkIGFzIHBhcmFtZXRlciBpbiBkMyk6CisjIHdlIGNsZWFyIHRoZSB2YWx1ZSBoZXJlIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBzdXBwcmVzc2VkLgorZmJhc2Vfc3VwcF9jazoKKwlidHN0CQkmMHg3LCVkNQkJIyBpcyB0aGUgYmQgc3VwcHJlc3NlZD8KKwliZXEuYgkJZm5vX2Jhc2Vfc3VwCisJY2xyLmwJCSVkMworCisjIGJhc2UgZGlzcGxhY2VtZW50OgorZm5vX2Jhc2Vfc3VwOgorCWJmZXh0dQkJJWQ1eyYyNjomMn0sJWQwCQkjIGdldCBiZCBzaXplCisjCWJlcS5sCQlmbW92bV9lcnJvcgkJIyBpZiAoc2l6ZSA9PSAwKSBpdCdzIHJlc2VydmVkCisKKwljbXBpLmIJCSVkMCwmMHgyCisJYmx0LmIJCWZub19iZAorCWJlcS5iCQlmZ2V0X3dvcmRfYmQKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCisKKwlicmEuYgkJZmNoa19pbmQKKworZmdldF93b3JkX2JkOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBiZAorCitmY2hrX2luZDoKKwlhZGQubAkJJWQwLCVkMwkJCSMgYmFzZSArPSBiZAorCisjIG91dGVyIGRpc3BsYWNlbWVudDoKK2Zub19iZDoKKwliZmV4dHUJCSVkNXsmMzA6JjJ9LCVkMAkJIyBpcyBvZCBzdXBwcmVzc2VkPworCWJlcS53CQlmYWlpX2JkCisKKwljbXBpLmIJCSVkMCwmMHgyCisJYmx0LmIJCWZudWxsX29kCisJYmVxLmIJCWZ3b3JkX29kCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWZhZGRfdGhlbQorCitmd29yZF9vZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgb2QKKwlicmEuYgkJZmFkZF90aGVtCisKK2ZudWxsX29kOgorCWNsci5sCQklZDAKKworZmFkZF90aGVtOgorCW1vdi5sCQklZDAsJWQ0CisKKwlidHN0CQkmMHgyLCVkNQkJIyBwcmUgb3IgcG9zdCBpbmRleGluZz8KKwliZXEuYgkJZnByZV9pbmRleGVkCisKKwltb3YubAkJJWQzLCVhMAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZmNlYV9lcnIJCSMgeWVzCisKKwlhZGQubAkJJWQyLCVkMAkJCSMgPGVhPiArPSBpbmRleAorCWFkZC5sCQklZDQsJWQwCQkJIyA8ZWE+ICs9IG9kCisJYnJhLmIJCWZkb25lX2VhCisKK2ZwcmVfaW5kZXhlZDoKKwlhZGQubAkJJWQyLCVkMwkJCSMgcHJlaW5kZXhpbmcKKwltb3YubAkJJWQzLCVhMAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZmNlYV9lcnIJCSMgeWVzCisKKwlhZGQubAkJJWQ0LCVkMAkJCSMgZWEgKz0gb2QKKwlicmEuYgkJZmRvbmVfZWEKKworZmFpaV9iZDoKKwlhZGQubAkJJWQyLCVkMwkJCSMgZWEgPSAoYmFzZSArIGJkKSArIGluZGV4CisJbW92LmwJCSVkMywlZDAKK2Zkb25lX2VhOgorCW1vdi5sCQklZDAsJWEwCisKKwltb3ZtLmwJCSglc3ApKywmMHgwMDNjCQkjIHJlc3RvcmUgZDItZDUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmY2VhX2VycjoKKwltb3YubAkJJWQzLCVhMAorCisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJbW92LncJCSYweDAxMDEsJWQwCisJYnJhLmwJCWllYV9kYWNjCisKK2ZjZWFfaWFjYzoKKwltb3ZtLmwJCSglc3ApKywmMHgwMDNjCQkjIHJlc3RvcmUgZDItZDUKKwlicmEubAkJaWVhX2lhY2MKKworZm1vdm1fb3V0X2VycjoKKwlic3IubAkJcmVzdG9yZQorCW1vdi53CQkmMHgwMGUxLCVkMAorCWJyYS5iCQlmbW92bV9lcnIKKworZm1vdm1faW5fZXJyOgorCWJzci5sCQlyZXN0b3JlCisJbW92LncJCSYweDAxNjEsJWQwCisKK2Ztb3ZtX2VycjoKKwltb3YubAkJTF9TQ1IxKCVhNiksJWEwCisJYnJhLmwJCWllYV9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm1vdm1fY3RybCgpOiBlbXVsYXRlIGZtb3ZtLmwgb2YgY29udHJvbCByZWdpc3RlcnMgaW5zdHIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGxvbmd3b3JkIGZyb20gbWVtb3J5CQkJIworIwlpZWFfaWFjYygpIC0gX2ltZW1fcmVhZF9sb25nKCkgZmFpbGVkOyBlcnJvciByZWNvdmVyeQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgX2ltZW1fcmVhZF9sb25nKCkgZG9lc24ndCBmYWlsOgkJCQkjCisjCQlVU0VSX0ZQQ1IoYTYpICA9IG5ldyBGUENSIHZhbHVlCQkJCSMKKyMJCVVTRVJfRlBTUihhNikgID0gbmV3IEZQU1IgdmFsdWUJCQkJIworIwkJVVNFUl9GUElBUihhNikgPSBuZXcgRlBJQVIgdmFsdWUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlEZWNvZGUgdGhlIGluc3RydWN0aW9uIHR5cGUgYnkgbG9va2luZyBhdCB0aGUgZXh0ZW5zaW9uIHdvcmQJIworIyBpbiBvcmRlciB0byBzZWUgaG93IG1hbnkgY29udHJvbCByZWdpc3RlcnMgdG8gZmV0Y2ggZnJvbSBtZW1vcnkuCSMKKyMgRmV0Y2ggdGhlbSB1c2luZyBfaW1lbV9yZWFkX2xvbmcoKS4gSWYgdGhpcyBmZXRjaCBmYWlscywgZXhpdCB0aHJvdWdoCSMKKyMgdGhlIHNwZWNpYWwgYWNjZXNzIGVycm9yIGV4aXQgaGFuZGxlciBpZWFfaWFjYygpLgkJCSMKKyMJCQkJCQkJCQkjCisjIEluc3RydWN0aW9uIHdvcmQgZGVjb2Rpbmc6CQkJCQkJIworIwkJCQkJCQkJCSMKKyMJZm1vdmVtLmwgIzxkYXRhPiwge0ZQSUFSJnxGUENSJnxGUFNSfQkJCQkjCisjCQkJCQkJCQkJIworIwkJV09SRDEJCQlXT1JEMgkJCQkjCisjCTExMTEgMDAxMCAwMCAxMTExMDAJMTAwJCAkJDAwIDAwMDAgMDAwMAkJCSMKKyMJCQkJCQkJCQkjCisjCSQkJCAoMTAwKTogRlBDUgkJCQkJCQkjCisjCSAgICAoMDEwKTogRlBTUgkJCQkJCQkjCisjCSAgICAoMDAxKTogRlBJQVIJCQkJCQkjCisjCSAgICAoMDAwKTogRlBJQVIJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmbW92bV9jdHJsCitmbW92bV9jdHJsOgorCW1vdi5iCQlFWENfRVhUV09SRCglYTYpLCVkMAkjIGZldGNoIHJlZyBzZWxlY3QgYml0cworCWNtcGkuYgkJJWQwLCYweDljCQkjIGZwY3IgJiBmcHNyICYgZnBpYXIgPworCWJlcS53CQlmY3RybF9pbl83CQkjIHllcworCWNtcGkuYgkJJWQwLCYweDk4CQkjIGZwY3IgJiBmcHNyID8KKwliZXEudwkJZmN0cmxfaW5fNgkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHg5NAkJIyBmcGNyICYgZnBpYXIgPworCWJlcS5iCQlmY3RybF9pbl81CQkjIHllcworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwc3IvZnBpYXIKK2ZjdHJsX2luXzM6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjaworCXJ0cworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBpYXIKK2ZjdHJsX2luXzU6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjaworCXJ0cworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBzcgorZmN0cmxfaW5fNjoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBDUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUENSKCVhNikJIyBzdG9yZSBuZXcgRlBDUiB0byBtZW0KKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBTUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBuZXcgRlBTUiB0byBtZW0KKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2Zwc3IvZnBpYXIKK2ZjdHJsX2luXzc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gbWVtCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2RjYWxjX2VhKCk6IGNhbGMgY29ycmVjdCA8ZWE+IGZyb20gPGVhPiBzdGFja2VkIG9uIGV4Y2VwdGlvbgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlpbmNfYXJlZygpIC0gaW5jcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIJCQkjCisjCWRlY19hcmVnKCkgLSBkZWNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlcgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFkanVzdCA8ZWE+IGJ5CQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjICJEdW1teSIgQ0FMQ3VsYXRlIEVmZmVjdGl2ZSBBZGRyZXNzOgkJCQkJIworIwlUaGUgc3RhY2tlZCA8ZWE+IGZvciBGUCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucyBhbmQgb3BjbGFzcwkjCisjCXR3byBwYWNrZWQgaW5zdHJ1Y3Rpb25zIGlzIGNvcnJlY3Qgd2l0aCB0aGUgZXhjZXB0aW9uIG9mLi4uCSMKKyMJCQkJCQkJCQkjCisjCTEpIC0oQW4pICAgOiBUaGUgcmVnaXN0ZXIgaXMgbm90IHVwZGF0ZWQgcmVnYXJkbGVzcyBvZiBzaXplLgkjCisjCQkgICAgIEFsc28sIGZvciBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHBhY2tlZCwgdGhlCSMKKyMJCSAgICAgc3RhY2tlZCA8ZWE+IHZhbHVlIGlzIDggYnl0ZXMgdG9vIGJpZwkJIworIwkyKSAoQW4pKyAgIDogVGhlIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLgkJCSMKKyMJMykgIzxkYXRhPiA6IFRoZSB1cHBlciBsb25nd29yZCBvZiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgaXMJIworIwkJICAgICBzdGFja2VkIGIsdyxsIGFuZCBzIHNpemVzIGFyZSBjb21wbGV0ZWx5IHN0YWNrZWQuCSMKKyMJCSAgICAgZCx4LCBhbmQgcCBhcmUgbm90LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZGNhbGNfZWEKK19kY2FsY19lYToKKwltb3YubAkJJWQwLCAlYTAJCSMgbW92ZSAjIGJ5dGVzIHRvICVhMAorCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCAlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAorCW1vdi5sCQklZDAsICVkMQkJIyBtYWtlIGEgY29weQorCisJYW5kaS53CQkmMHgzOCwgJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywgJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAorCisJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CisJYmVxLmIJCWRjZWFfcGkJCQkjIHllcworCisJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CisJYmVxLmIJCWRjZWFfcGQJCQkjIHllcworCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG1vZGUscmVnCisJY21waS5iCQklZDAsJjB4M2MJCSMgaXMgbW9kZSAjPGRhdGE+PworCisJYmVxLmIJCWRjZWFfaW1tCQkjIHllcworCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyByZXR1cm4gPGVhPgorCXJ0cworCisjIG5lZWQgdG8gc2V0IGltbWVkaWF0ZSBkYXRhIGZsYWcgaGVyZSBzaW5jZSB3ZSdsbCBuZWVkIHRvIGRvCisjIGFuIGltZW1fcmVhZCB0byBmZXRjaCB0aGlzIGxhdGVyLgorZGNlYV9pbW06CisJbW92LmIJCSZpbW1lZF9mbGcsU1BDT05EX0ZMRyglYTYpCisJbGVhCQkoW1VTRVJfRlBJQVIsJWE2XSwweDQpLCVhMCAjIG5vOyByZXR1cm4gPGVhPgorCXJ0cworCisjIGhlcmUsIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5LiBob3dldmVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUKKyMgYWRkcmVzcyByZWdpc3Rlci4uLgorZGNlYV9waToKKwltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyBhbXQgdG8gaW5jIGJ5CisJYnNyLmwJCWluY19hcmVnCQkjIGluYyBhZGRyIHJlZ2lzdGVyCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJcnRzCisKKyMgdGhlIDxlYT4gaXMgc3RhY2tlZCBjb3JyZWN0bHkgZm9yIGFsbCBidXQgZXh0ZW5kZWQgYW5kIHBhY2tlZCB3aGljaAorIyB0aGUgPGVhPnMgYXJlIDggYnl0ZXMgdG9vIGxhcmdlLgorIyBpdCB3b3VsZCBtYWtlIG5vIHNlbnNlIHRvIGhhdmUgYSBwcmUtZGVjcmVtZW50IHRvIGE3IGluIHN1cGVydmlzb3IKKyMgbW9kZSBzbyB3ZSBkb24ndCBldmVuIHdvcnJ5IGFib3V0IHRoaXMgdHJpY2t5IGNhc2UgaGVyZSA6ICkKK2RjZWFfcGQ6CisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgYW10IHRvIGRlYyBieQorCWJzci5sCQlkZWNfYXJlZwkJIyBkZWMgYWRkciByZWdpc3RlcgorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCisJY21waS5iCQklZDAsJjB4YwkJIyBpcyBvcHNpemUgZXh0IG9yIHBhY2tlZD8KKwliZXEuYgkJZGNlYV9wZDIJCSMgeWVzCisJcnRzCitkY2VhX3BkMjoKKwlzdWIubAkJJjB4OCwlYTAJCSMgY29ycmVjdCA8ZWE+CisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBwdXQgY29ycmVjdCA8ZWE+IG9uIHN0YWNrCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWFfZm91dCgpOiBjYWxjdWxhdGUgY29ycmVjdCBzdGFja2VkIDxlYT4gZm9yIGV4dGVuZGVkCSMKKyMJCQkgYW5kIHBhY2tlZCBkYXRhIG9wY2xhc3MgMyBvcGVyYXRpb25zLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSByZXR1cm4gY29ycmVjdCBlZmZlY3RpdmUgYWRkcmVzcwkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGb3Igb3BjbGFzcyAzIGV4dGVuZGVkIGFuZCBwYWNrZWQgZGF0YSBvcGVyYXRpb25zLCB0aGUgPGVhPgkjCisjIHN0YWNrZWQgZm9yIHRoZSBleGNlcHRpb24gaXMgaW5jb3JyZWN0IGZvciAtKGFuKSBhbmQgKGFuKSsgYWRkcmVzc2luZwkjCisjIG1vZGVzLiBBbHNvLCB3aGlsZSB3ZSdyZSBhdCBpdCwgdGhlIGluZGV4IHJlZ2lzdGVyIGl0c2VsZiBtdXN0IGdldAkjCisjIHVwZGF0ZWQuCQkJCQkJCQkjCisjCVNvLCBmb3IgLShhbiksIHdlIG11c3Qgc3VidHJhY3QgOCBvZmYgb2YgdGhlIHN0YWNrZWQgPGVhPiB2YWx1ZQkjCisjIGFuZCByZXR1cm4gdGhhdCB2YWx1ZSBhcyB0aGUgY29ycmVjdCA8ZWE+IGFuZCBzdG9yZSB0aGF0IHZhbHVlIGluIEFuLgkjCisjIEZvciAoYW4pKywgdGhlIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0IGJ1dCB3ZSBtdXN0IGFkanVzdCBBbiBieSArMTIuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBjYWxjX2VhIGlzIGN1cnJlbnRseSB1c2VkIHRvIHJldHJpZXZlIHRoZSBjb3JyZWN0IDxlYT4KKyMgZm9yIGZtb3ZlIG91dHMgb2YgdHlwZSBleHRlbmRlZCBhbmQgcGFja2VkLgorCWdsb2JhbAkJX2NhbGNfZWFfZm91dAorX2NhbGNfZWFfZm91dDoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4MzgsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCisKKwljbXBpLmIJCSVkMCwmMHgxOAkJIyBpcyBtb2RlIChBbikrID8KKwliZXEuYgkJY2VhZl9waQkJCSMgeWVzCisKKwljbXBpLmIJCSVkMCwmMHgyMAkJIyBpcyBtb2RlIC0oQW4pID8KKwliZXEudwkJY2VhZl9wZAkJCSMgeWVzCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJcnRzCisKKyMgKEFuKSsgOiBleHRlbmRlZCBhbmQgcGFja2VkIGZtb3ZlIG91dAorIwk6IHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisjCTogIkFuIiBub3QgdXBkYXRlZAorY2VhZl9waToKKwltb3YudwkJKHRibF9jZWFmX3BpLmIsJXBjLCVkMS53KjIpLCVkMQorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAKKwlqbXAJCSh0YmxfY2VhZl9waS5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9jZWFmX3BpOgorCXNob3J0CQljZWFmX3BpMCAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGkxIC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTIgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpMyAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk0IC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTUgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNiAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk3IC0gdGJsX2NlYWZfcGkKKworY2VhZl9waTA6CisJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweDgoJWE2KQorCXJ0cworY2VhZl9waTE6CisJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweGMoJWE2KQorCXJ0cworY2VhZl9waTI6CisJYWRkLmwJCSYweGMsJWEyCisJcnRzCitjZWFmX3BpMzoKKwlhZGQubAkJJjB4YywlYTMKKwlydHMKK2NlYWZfcGk0OgorCWFkZC5sCQkmMHhjLCVhNAorCXJ0cworY2VhZl9waTU6CisJYWRkLmwJCSYweGMsJWE1CisJcnRzCitjZWFmX3BpNjoKKwlhZGRpLmwJCSYweGMsRVhDX0E2KCVhNikKKwlydHMKK2NlYWZfcGk3OgorCW1vdi5iCQkmbWlhN19mbGcsU1BDT05EX0ZMRyglYTYpCisJYWRkaS5sCQkmMHhjLEVYQ19BNyglYTYpCisJcnRzCisKKyMgLShBbikgOiBleHRlbmRlZCBhbmQgcGFja2VkIGZtb3ZlIG91dAorIwk6IHN0YWNrZWQgPGVhPiA9IGFjdHVhbCA8ZWE+ICsgOAorIwk6ICJBbiIgbm90IHVwZGF0ZWQKK2NlYWZfcGQ6CisJbW92LncJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoyKSwlZDEKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCisJc3ViLmwJCSYweDgsJWEwCisJc3ViLmwJCSYweDgsRVhDX0VBKCVhNikKKwlqbXAJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9jZWFmX3BkOgorCXNob3J0CQljZWFmX3BkMCAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQxIC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDIgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkMyAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ0IC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDUgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNiAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ3IC0gdGJsX2NlYWZfcGQKKworY2VhZl9wZDA6CisJbW92LmwJCSVhMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2NlYWZfcGQxOgorCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitjZWFmX3BkMjoKKwltb3YubAkJJWEwLCVhMgorCXJ0cworY2VhZl9wZDM6CisJbW92LmwJCSVhMCwlYTMKKwlydHMKK2NlYWZfcGQ0OgorCW1vdi5sCQklYTAsJWE0CisJcnRzCitjZWFmX3BkNToKKwltb3YubAkJJWEwLCVhNQorCXJ0cworY2VhZl9wZDY6CisJbW92LmwJCSVhMCxFWENfQTYoJWE2KQorCXJ0cworY2VhZl9wZDc6CisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQorCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2xvYWRfZm9wKCk6IGxvYWQgb3BlcmFuZCBmb3IgdW5pbXBsZW1lbnRlZCBGUCBleGNlcHRpb24JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgZXh0IHByZWMgb3B0eXBlIHRhZwkJCSMKKyMJc2V0X3RhZ19zKCkgLSBkZXRlcm1pbmUgc2dsIHByZWMgb3B0eXBlIHRhZwkJCSMKKyMJc2V0X3RhZ19kKCkgLSBkZXRlcm1pbmUgZGJsIHByZWMgb3B0eXBlIHRhZwkJCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY29udmVydCBub3JtYWxpemVkIG51bWJlciB0byBkZW5vcm0gb3IgemVybwkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBhIGRlbm9ybWFsaXplZCBudW1iZXIJCQkjCisjCWdldF9wYWNrZWQoKSAtIGZldGNoIGEgcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkJCSMKKyMJX2RjYWxjX2VhKCkgLSBjYWxjdWxhdGUgPGVhPiwgZml4aW5nIEFuIGluIHByb2Nlc3MJCSMKKyMJCQkJCQkJCQkjCisjCV9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSAtIHJlYWQgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkJCSMKKyMJX2RtZW1fcmVhZCgpIC0gcmVhZCBmcm9tIGRhdGEgbWVtb3J5CQkJCSMKKyMJX2RtZW1fcmVhZF97Ynl0ZSx3b3JkLGxvbmd9KCkgLSByZWFkIGZyb20gZGF0YSBtZW1vcnkJCSMKKyMJCQkJCQkJCQkjCisjCWZhY2NfaW5fe2IsdyxsLGQseH0oKSAtIG1lbSByZWFkIGZhaWxlZDsgc3BlY2lhbCBleGl0IHBvaW50CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIG1lbW9yeSBhY2Nlc3MgZG9lc24ndCBmYWlsOgkJCQkJIworIwkJRlBfU1JDKGE2KSA9IHNvdXJjZSBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQlGUF9EU1QoYTYpID0gZGVzdGluYXRpb24gb3BlcmFuZCBpbiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgVW5pbXBsZW1lbnRlZCBGUCBleGNlcHRpb24gaGFuZGxlciBpbgkjCisjIG9yZGVyIHRvIGxvYWQgdGhlIHNvdXJjZSBhbmQgbWF5YmUgZGVzdGluYXRpb24gb3BlcmFuZCBpbnRvCQkjCisjIEZQX1NSQyhhNikgYW5kIEZQX0RTVChhNikuIElmIHRoZSBpbnN0cnVjdGlvbiB3YXMgb3BjbGFzcyB6ZXJvLCBsb2FkCSMKKyMgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZnJvbSB0aGUgRlAgcmVnaXN0ZXIgZmlsZS4gU2V0IHRoZSBvcHR5cGUJIworIyB0YWdzIGZvciBib3RoIGlmIGR5YWRpYywgb25lIGZvciBtb25hZGljLiBJZiBhIG51bWJlciBpcyBhbiBVTk5PUk0sCSMKKyMgY29udmVydCBpdCB0byBhIERFTk9STSBvciBhIFpFUk8uCQkJCQkjCisjCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyBvcGNsYXNzIHR3byAobWVtb3J5LT5yZWcpLCB0aGVuIGZldGNoCSMKKyMgdGhlIGRlc3RpbmF0aW9uIGZyb20gdGhlIHJlZ2lzdGVyIGZpbGUgYW5kIHRoZSBzb3VyY2Ugb3BlcmFuZCBmcm9tCSMKKyMgbWVtb3J5LiBUYWcgYW5kIGZpeCBib3RoIGFzIGFib3ZlIHcvIG9wY2xhc3MgemVybyBpbnN0cnVjdGlvbnMuCSMKKyMJSWYgdGhlIHNvdXJjZSBvcGVyYW5kIGlzIGJ5dGUsd29yZCxsb25nLCBvciBzaW5nbGUsIGl0IG1heSBiZQkjCisjIGluIHRoZSBkYXRhIHJlZ2lzdGVyIGZpbGUuIElmIGl0J3MgYWN0dWFsbHkgb3V0IGluIG1lbW9yeSwgdXNlIG9uZSBvZgkjCisjIHRoZSBtZW1fcmVhZCgpIHJvdXRpbmVzIHRvIGZldGNoIGl0LiBJZiB0aGUgbWVtX3JlYWQoKSBhY2Nlc3MgcmV0dXJucwkjCisjIGEgZmFpbGluZyB2YWx1ZSwgZXhpdCB0aHJvdWdoIHRoZSBzcGVjaWFsIGZhY2NfaW4oKSByb3V0aW5lIHdoaWNoCSMKKyMgd2lsbCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiAjCisjIGZyYW1lLgkJCQkJCQkJIworIwlJbW1lZGlhdGUgZGF0YSBhbmQgcmVndWxhciBkYXRhIGFjY2Vzc2VzIGFyZSBzZXBhcmF0ZWQgYmVjYXVzZQkjCisjIGlmIGFuIGltbWVkaWF0ZSBkYXRhIGFjY2VzcyBmYWlscywgdGhlIHJlc3VsdGluZyBmYXVsdCBzdGF0dXMJCSMKKyMgbG9uZ3dvcmQgc3RhY2tlZCBmb3IgdGhlIGFjY2VzcyBlcnJvciBleGNlcHRpb24gbXVzdCBoYXZlIHRoZQkJIworIyBpbnN0cnVjdGlvbiBiaXQgc2V0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfbG9hZF9mb3AKK19sb2FkX2ZvcDoKKworIyAgMTUgICAgIDEzIDEyIDEwICA5IDcgIDYgICAgICAgMAorIyAvICAgICAgICBcIC8gICBcIC8gIFwgLyAgICAgICAgIFwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHwgb3BjbGFzcyB8IFJYICB8IFJZIHwgRVhURU5TSU9OIHwgICgybmQgd29yZCBvZiBnZW5lcmFsIEZQIGluc3RydWN0aW9uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKworIwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomM30sICVkMCAjIGV4dHJhY3Qgb3BjbGFzcworIwljbXBpLmIJCSVkMCwgJjB4MgkJIyB3aGljaCBjbGFzcyBpcyBpdD8gKCcwMDAsJzAxMCwnMDExKQorIwliZXEudwkJb3AwMTAJCQkjIGhhbmRsZSA8ZWE+IC0+IGZwbgorIwliZ3QudwkJb3AwMTEJCQkjIGhhbmRsZSBmcG4gLT4gPGVhPgorCisjIHdlJ3JlIG5vdCB1c2luZyBvcDAxMSBmb3Igbm93Li4uCisJYnRzdAkJJjB4NixFWENfQ01EUkVHKCVhNikKKwlibmUuYgkJb3AwMTAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUENMQVNTICcwMDA6IHJlZyAtPiByZWcgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworb3AwMDA6CisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbiB3b3JkIGxvCisJYnRzdAkJJjB4NSwlZDAJCSMgdGVzdGluZyBleHRlbnNpb24gYml0cworCWJlcS5iCQlvcDAwMF9zcmMJCSMgKGJpdCA1ID09IDApID0+IG1vbmFkaWMKKwlidHN0CQkmMHg0LCVkMAkJIyAoYml0IDUgPT0gMSkKKwliZXEuYgkJb3AwMDBfZHN0CQkjIChiaXQgNCA9PSAwKSA9PiBkeWFkaWMKKwlhbmQudwkJJjB4MDA3ZiwlZDAJCSMgZXh0cmFjdCBleHRlbnNpb24gYml0cyB7NjowfQorCWNtcGkudwkJJWQwLCYweDAwMzgJCSMgaXMgaXQgYW4gZmNtcCAoZHlhZGljKSA/CisJYm5lLmIJCW9wMDAwX3NyYwkJIyBpdCdzIGFuIGZjbXAKKworb3AwMDBfZHN0OgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwgJWQwICMgZXh0cmFjdCBkc3QgZmllbGQKKwlic3IubAkJbG9hZF9mcG4yCQkjIGZldGNoIGRzdCBmcHJlZyBpbnRvIEZQX0RTVAorCisJYnNyLmwJCXNldF90YWdfeAkJIyBnZXQgZHN0IG9wdHlwZSB0YWcKKworCWNtcGkuYgkJJWQwLCAmVU5OT1JNCQkjIGlzIGRzdCBmcHJlZyBhbiBVTk5PUk0/CisJYmVxLmIJCW9wMDAwX2RzdF91bm5vcm0JIyB5ZXMKK29wMDAwX2RzdF9jb250OgorCW1vdi5iCQklZDAsIERUQUcoJWE2KQkJIyBzdG9yZSB0aGUgZHN0IG9wdHlwZSB0YWcKKworb3AwMDBfc3JjOgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwgJWQwICMgZXh0cmFjdCBzcmMgZmllbGQKKwlic3IubAkJbG9hZF9mcG4xCQkjIGZldGNoIHNyYyBmcHJlZyBpbnRvIEZQX1NSQworCisJYnNyLmwJCXNldF90YWdfeAkJIyBnZXQgc3JjIG9wdHlwZSB0YWcKKworCWNtcGkuYgkJJWQwLCAmVU5OT1JNCQkjIGlzIHNyYyBmcHJlZyBhbiBVTk5PUk0/CisJYmVxLmIJCW9wMDAwX3NyY191bm5vcm0JIyB5ZXMKK29wMDAwX3NyY19jb250OgorCW1vdi5iCQklZDAsIFNUQUcoJWE2KQkJIyBzdG9yZSB0aGUgc3JjIG9wdHlwZSB0YWcKKwlydHMKKworb3AwMDBfZHN0X3Vubm9ybToKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyBmaXggdGhlIGRzdCBVTk5PUk0KKwlicmEuYgkJb3AwMDBfZHN0X2NvbnQKK29wMDAwX3NyY191bm5vcm06CisJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBzcmMgVU5OT1JNCisJYnJhLmIJCW9wMDAwX3NyY19jb250CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9QQ0xBU1MgJzAxMDogPGVhPiAtPiByZWcgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK29wMDEwOgorCW1vdi53CQlFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uIHdvcmQKKwlidHN0CQkmMHg1LCVkMAkJIyB0ZXN0aW5nIGV4dGVuc2lvbiBiaXRzCisJYmVxLmIJCW9wMDEwX3NyYwkJIyAoYml0IDUgPT0gMCkgPT4gbW9uYWRpYworCWJ0c3QJCSYweDQsJWQwCQkjIChiaXQgNSA9PSAxKQorCWJlcS5iCQlvcDAxMF9kc3QJCSMgKGJpdCA0ID09IDApID0+IGR5YWRpYworCWFuZC53CQkmMHgwMDdmLCVkMAkJIyBleHRyYWN0IGV4dGVuc2lvbiBiaXRzIHs2OjB9CisJY21waS53CQklZDAsJjB4MDAzOAkJIyBpcyBpdCBhbiBmY21wIChkeWFkaWMpID8KKwlibmUuYgkJb3AwMTBfc3JjCQkjIGl0J3MgYW4gZmNtcAorCitvcDAxMF9kc3Q6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCAlZDAgIyBleHRyYWN0IGRzdCBmaWVsZAorCWJzci5sCQlsb2FkX2ZwbjIJCSMgZmV0Y2ggZHN0IGZwcmVnIHB0cgorCisJYnNyLmwJCXNldF90YWdfeAkJIyBnZXQgZHN0IHR5cGUgdGFnCisKKwljbXBpLmIJCSVkMCwgJlVOTk9STQkJIyBpcyBkc3QgZnByZWcgYW4gVU5OT1JNPworCWJlcS5iCQlvcDAxMF9kc3RfdW5ub3JtCSMgeWVzCitvcDAxMF9kc3RfY29udDoKKwltb3YuYgkJJWQwLCBEVEFHKCVhNikJCSMgc3RvcmUgdGhlIGRzdCBvcHR5cGUgdGFnCisKK29wMDEwX3NyYzoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMzomM30sICVkMCAjIGV4dHJhY3Qgc3JjIHR5cGUgZmllbGQKKworCWJmZXh0dQkJRVhDX09QV09SRCglYTYpeyYxMDomM30sICVkMSAjIGV4dHJhY3QgPGVhPiBtb2RlIGZpZWxkCisJYm5lLncJCWZldGNoX2Zyb21fbWVtCQkjIHNyYyBvcCBpcyBpbiBtZW1vcnkKKworb3AwMTBfZHJlZzoKKwljbHIuYgkJU1RBRyglYTYpCQkjIGVpdGhlciBOT1JNIG9yIFpFUk8KKwliZmV4dHUJCUVYQ19PUFdPUkQoJWE2KXsmMTM6JjN9LCAlZDEgIyBleHRyYWN0IHNyYyByZWcgZmllbGQKKworCW1vdi53CQkodGJsX29wMDEwX2RyZWcuYiwlcGMsJWQwLncqMiksICVkMCAjIGptcCBiYXNlZCBvbiBvcHR5cGUKKwlqbXAJCSh0Ymxfb3AwMTBfZHJlZy5iLCVwYywlZDAudyoxKSAjIGZldGNoIHNyYyBmcm9tIGRyZWcKKworb3AwMTBfZHN0X3Vubm9ybToKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyBmaXggdGhlIGRzdCBVTk5PUk0KKwlicmEuYgkJb3AwMTBfZHN0X2NvbnQKKworCXN3YmVnCQkmMHg4Cit0Ymxfb3AwMTBfZHJlZzoKKwlzaG9ydAkJb3BkX2xvbmcJLSB0Ymxfb3AwMTBfZHJlZworCXNob3J0CQlvcGRfc2dsCQktIHRibF9vcDAxMF9kcmVnCisJc2hvcnQJCXRibF9vcDAxMF9kcmVnCS0gdGJsX29wMDEwX2RyZWcKKwlzaG9ydAkJdGJsX29wMDEwX2RyZWcJLSB0Ymxfb3AwMTBfZHJlZworCXNob3J0CQlvcGRfd29yZAktIHRibF9vcDAxMF9kcmVnCisJc2hvcnQJCXRibF9vcDAxMF9kcmVnCS0gdGJsX29wMDEwX2RyZWcKKwlzaG9ydAkJb3BkX2J5dGUJLSB0Ymxfb3AwMTBfZHJlZworCXNob3J0CQl0Ymxfb3AwMTBfZHJlZwktIHRibF9vcDAxMF9kcmVnCisKKyMKKyMgTE9ORzogY2FuIGJlIGVpdGhlciBOT1JNIG9yIFpFUk8uLi4KKyMKK29wZF9sb25nOgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGxvbmcgaW4gZDAKKwlmbW92LmwJCSVkMCwgJWZwMAkJIyBsb2FkIGEgbG9uZworCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCisJZmJlcS53CQlvcGRfbG9uZ196ZXJvCQkjIGxvbmcgaXMgYSBaRVJPCisJcnRzCitvcGRfbG9uZ196ZXJvOgorCW1vdi5iCQkmWkVSTywgU1RBRyglYTYpCSMgc2V0IFpFUk8gb3B0eXBlIGZsYWcKKwlydHMKKworIworIyBXT1JEOiBjYW4gYmUgZWl0aGVyIE5PUk0gb3IgWkVSTy4uLgorIworb3BkX3dvcmQ6CisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggd29yZCBpbiBkMAorCWZtb3YudwkJJWQwLCAlZnAwCQkjIGxvYWQgYSB3b3JkCisJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKKwlmYmVxLncJCW9wZF93b3JkX3plcm8JCSMgV09SRCBpcyBhIFpFUk8KKwlydHMKK29wZF93b3JkX3plcm86CisJbW92LmIJCSZaRVJPLCBTVEFHKCVhNikJIyBzZXQgWkVSTyBvcHR5cGUgZmxhZworCXJ0cworCisjCisjIEJZVEU6IGNhbiBiZSBlaXRoZXIgTk9STSBvciBaRVJPLi4uCisjCitvcGRfYnl0ZToKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCB3b3JkIGluIGQwCisJZm1vdi5iCQklZDAsICVmcDAJCSMgbG9hZCBhIGJ5dGUKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCWZiZXEudwkJb3BkX2J5dGVfemVybwkJIyBieXRlIGlzIGEgWkVSTworCXJ0cworb3BkX2J5dGVfemVybzoKKwltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBaRVJPIG9wdHlwZSBmbGFnCisJcnRzCisKKyMKKyMgU0dMOiBjYW4gYmUgZWl0aGVyIE5PUk0sIERFTk9STSwgWkVSTywgSU5GLCBRTkFOIG9yIFNOQU4gYnV0IG5vdCBVTk5PUk0KKyMKKyMgc2VwYXJhdGUgU05BTnMgYW5kIERFTk9STXMgc28gdGhleSBjYW4gYmUgbG9hZGVkIHcvIHNwZWNpYWwgY2FyZS4KKyMgYWxsIG90aGVycyBjYW4gc2ltcGx5IGJlIG1vdmVkICJpbiIgdXNpbmcgZm1vdmUuCisjCitvcGRfc2dsOgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIHNnbCBpbiBkMAorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikKKworCWxlYQkJTF9TQ1IxKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byB0aGUgc2dsCisJYnNyLmwJCXNldF90YWdfcwkJIyBkZXRlcm1pbmUgc2dsIHR5cGUKKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc2F2ZSB0aGUgc3JjIHRhZworCisJY21waS5iCQklZDAsICZTTkFOCQkjIGlzIGl0IGFuIFNOQU4/CisJYmVxLncJCWdldF9zZ2xfc25hbgkJIyB5ZXMKKworCWNtcGkuYgkJJWQwLCAmREVOT1JNCQkjIGlzIGl0IGEgREVOT1JNPworCWJlcS53CQlnZXRfc2dsX2Rlbm9ybQkJIyB5ZXMKKworCWZtb3YucwkJKCVhMCksICVmcDAJCSMgbm8sIHNvIGNhbiBsb2FkIGl0IHJlZ3VsYXIKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZXRjaF9mcm9tX21lbSgpOgkJCQkJCQkjCisjIC0gc3JjIGlzIG91dCBpbiBtZW1vcnkuIG11c3Q6CQkJCQkJIworIwkoMSkgY2FsYyBlYSAtIG11c3QgcmVhZCBBRlRFUiB5b3Uga25vdyB0aGUgc3JjIHR5cGUgc2luY2UJIworIwkJICAgICAgaWYgdGhlIGVhIGlzIC0oKSBvciAoKSssIG5lZWQgdG8ga25vdyAjIG9mIGJ5dGVzLgkjCisjCSgyKSByZWFkIGl0IGluIGZyb20gZWl0aGVyIHVzZXIgb3Igc3VwZXJ2aXNvciBzcGFjZQkJIworIwkoMykgaWYgKGIgfHwgdyB8fCBsKSB0aGVuIHNpbXBseSByZWFkIGluCQkJIworIwkgICAgaWYgKHMgfHwgZCB8fCB4KSB0aGVuIGNoZWNrIGZvciBTTkFOLFVOTk9STSxERU5PUk0JCSMKKyMJICAgIGlmIChwYWNrZWQpIHRoZW4gcHVudCBmb3Igbm93CQkJCSMKKyMgSU5QVVQ6CQkJCQkJCQkjCisjCSVkMCA6IHNyYyB0eXBlIGZpZWxkCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmV0Y2hfZnJvbV9tZW06CisJY2xyLmIJCVNUQUcoJWE2KQkJIyBlaXRoZXIgTk9STSBvciBaRVJPCisKKwltb3YudwkJKHRibF9mcF90eXBlLmIsJXBjLCVkMC53KjIpLCAlZDAgIyBpbmRleCBieSBzcmMgdHlwZSBmaWVsZAorCWptcAkJKHRibF9mcF90eXBlLmIsJXBjLCVkMC53KjEpCisKKwlzd2JlZwkJJjB4OAordGJsX2ZwX3R5cGU6CisJc2hvcnQJCWxvYWRfbG9uZwktIHRibF9mcF90eXBlCisJc2hvcnQJCWxvYWRfc2dsCS0gdGJsX2ZwX3R5cGUKKwlzaG9ydAkJbG9hZF9leHQJLSB0YmxfZnBfdHlwZQorCXNob3J0CQlsb2FkX3BhY2tlZAktIHRibF9mcF90eXBlCisJc2hvcnQJCWxvYWRfd29yZAktIHRibF9mcF90eXBlCisJc2hvcnQJCWxvYWRfZGJsCS0gdGJsX2ZwX3R5cGUKKwlzaG9ydAkJbG9hZF9ieXRlCS0gdGJsX2ZwX3R5cGUKKwlzaG9ydAkJdGJsX2ZwX3R5cGUJLSB0YmxfZnBfdHlwZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsb2FkIGEgTE9ORyBpbnRvICVmcDA6CQkjCisjCS1udW1iZXIgY2FuJ3QgZmF1bHQJCSMKKyMJKDEpIGNhbGMgZWEJCQkjCisjCSgyKSByZWFkIDQgYnl0ZXMgaW50byBMX1NDUjEJIworIwkoMykgZm1vdi5sIGludG8gJWZwMAkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2xvYWRfbG9uZzoKKwltb3ZxLmwJCSYweDQsICVkMAkJIyBwYXNzOiA0IChieXRlcykKKwlic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcKKwliZXEuYgkJbG9hZF9sb25nX2ltbWVkCisKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLmwJCWZhY2NfaW5fbAkJIyB5ZXMKKworbG9hZF9sb25nX2NvbnQ6CisJZm1vdi5sCQklZDAsICVmcDAJCSMgcmVhZCBpbnRvICVmcDA7Y29udmVydCB0byB4cHJlYworCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCisKKwlmYmVxLncJCWxvYWRfbG9uZ196ZXJvCQkjIHNyYyBvcCBpcyBhIFpFUk8KKwlydHMKK2xvYWRfbG9uZ196ZXJvOgorCW1vdi5iCQkmWkVSTywgU1RBRyglYTYpCSMgc2V0IG9wdHlwZSB0YWcgdG8gWkVSTworCXJ0cworCitsb2FkX2xvbmdfaW1tZWQ6CisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBzcmMgb3BlcmFuZCBpbW1lZCBkYXRhCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZ1bmltcF9pYWNjCQkjIHllcworCWJyYS5iCQlsb2FkX2xvbmdfY29udAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsb2FkIGEgV09SRCBpbnRvICVmcDA6CQkjCisjCS1udW1iZXIgY2FuJ3QgZmF1bHQJCSMKKyMJKDEpIGNhbGMgZWEJCQkjCisjCSgyKSByZWFkIDIgYnl0ZXMgaW50byBMX1NDUjEJIworIwkoMykgZm1vdi53IGludG8gJWZwMAkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2xvYWRfd29yZDoKKwltb3ZxLmwJCSYweDIsICVkMAkJIyBwYXNzOiAyIChieXRlcykKKwlic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcKKwliZXEuYgkJbG9hZF93b3JkX2ltbWVkCisKKwlic3IubAkJX2RtZW1fcmVhZF93b3JkCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLmwJCWZhY2NfaW5fdwkJIyB5ZXMKKworbG9hZF93b3JkX2NvbnQ6CisJZm1vdi53CQklZDAsICVmcDAJCSMgcmVhZCBpbnRvICVmcDA7Y29udmVydCB0byB4cHJlYworCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCisKKwlmYmVxLncJCWxvYWRfd29yZF96ZXJvCQkjIHNyYyBvcCBpcyBhIFpFUk8KKwlydHMKK2xvYWRfd29yZF96ZXJvOgorCW1vdi5iCQkmWkVSTywgU1RBRyglYTYpCSMgc2V0IG9wdHlwZSB0YWcgdG8gWkVSTworCXJ0cworCitsb2FkX3dvcmRfaW1tZWQ6CisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBpbW1lZCBkYXRhCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZ1bmltcF9pYWNjCQkjIHllcworCWJyYS5iCQlsb2FkX3dvcmRfY29udAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsb2FkIGEgQllURSBpbnRvICVmcDA6CQkjCisjCS1udW1iZXIgY2FuJ3QgZmF1bHQJCSMKKyMJKDEpIGNhbGMgZWEJCQkjCisjCSgyKSByZWFkIDEgYnl0ZSBpbnRvIExfU0NSMQkjCisjCSgzKSBmbW92LmIgaW50byAlZnAwCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbG9hZF9ieXRlOgorCW1vdnEubAkJJjB4MSwgJWQwCQkjIHBhc3M6IDEgKGJ5dGUpCisJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCisJYmVxLmIJCWxvYWRfYnl0ZV9pbW1lZAorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX2IJCSMgeWVzCisKK2xvYWRfYnl0ZV9jb250OgorCWZtb3YuYgkJJWQwLCAlZnAwCQkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCisJZmJlcS53CQlsb2FkX2J5dGVfemVybwkJIyBzcmMgb3AgaXMgYSBaRVJPCisJcnRzCitsb2FkX2J5dGVfemVybzoKKwltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBvcHR5cGUgdGFnIHRvIFpFUk8KKwlydHMKKworbG9hZF9ieXRlX2ltbWVkOgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKKwlicmEuYgkJbG9hZF9ieXRlX2NvbnQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIFNHTCBpbnRvICVmcDA6CQkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCisjCSgxKSBjYWxjIGVhCQkJIworIwkoMikgcmVhZCA0IGJ5dGVzIGludG8gTF9TQ1IxCSMKKyMJKDMpIGZtb3YucyBpbnRvICVmcDAJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX3NnbDoKKwltb3ZxLmwJCSYweDQsICVkMAkJIyBwYXNzOiA0IChieXRlcykKKwlic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcKKwliZXEuYgkJbG9hZF9zZ2xfaW1tZWQKKworCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKKwltb3YubAkJJWQwLCBMX1NDUjEoJWE2KQkjIHN0b3JlIHNyYyBvcCBvbiBzdGFjaworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX2wJCSMgeWVzCisKK2xvYWRfc2dsX2NvbnQ6CisJbGVhCQlMX1NDUjEoJWE2KSwgJWEwCSMgcGFzczogcHRyIHRvIHNnbCBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ19zCQkjIGRldGVybWluZSBzcmMgdHlwZSB0YWcKKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZyBvbiBzdGFjaworCisJY21waS5iCQklZDAsICZERU5PUk0JCSMgaXMgaXQgYSBzZ2wgREVOT1JNPworCWJlcS53CQlnZXRfc2dsX2Rlbm9ybQkJIyB5ZXMKKworCWNtcGkuYgkJJWQwLCAmU05BTgkJIyBpcyBpdCBhIHNnbCBTTkFOPworCWJlcS53CQlnZXRfc2dsX3NuYW4JCSMgeWVzCisKKwlmbW92LnMJCUxfU0NSMSglYTYpLCAlZnAwCSMgcmVhZCBpbnRvICVmcDA7Y29udmVydCB0byB4cHJlYworCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCisJcnRzCisKK2xvYWRfc2dsX2ltbWVkOgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKKwlicmEuYgkJbG9hZF9zZ2xfY29udAorCisjIG11c3QgY29udmVydCBzZ2wgZGVub3JtIGZvcm1hdCB0byBhbiBYcHJlYyBkZW5vcm0gZm10IHN1aXRhYmxlIGZvcgorIyBub3JtYWxpemF0aW9uLi4uCisjICVhMCA6IHBvaW50cyB0byBzZ2wgZGVub3JtCitnZXRfc2dsX2Rlbm9ybToKKwljbHIudwkJRlBfU1JDX0VYKCVhNikKKwliZmV4dHUJCSglYTApeyY5OiYyM30sICVkMAkjIGZldGNoIHNnbCBoaShfbWFudGlzc2EpCisJbHNsLmwJCSYweDgsICVkMAorCW1vdi5sCQklZDAsIEZQX1NSQ19ISSglYTYpCSMgc2V0IGV4dCBoaShfbWFudGlzc2EpCisJY2xyLmwJCUZQX1NSQ19MTyglYTYpCQkjIHNldCBleHQgbG8oX21hbnRpc3NhKQorCisJY2xyLncJCUZQX1NSQ19FWCglYTYpCisJYnRzdAkJJjB4NywgKCVhMCkJCSMgaXMgc2duIGJpdCBzZXQ/CisJYmVxLmIJCXNnbF9kbnJtX25vcm0KKwlic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQkjIHNldCBzZ24gb2YgeHByZWMgdmFsdWUKKworc2dsX2Rucm1fbm9ybToKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG51bWJlcgorCW1vdi53CQkmMHgzZjgxLCAlZDEJCSMgeHByZWMgZXhwID0gMHgzZjgxCisJc3ViLncJCSVkMCwgJWQxCQkjIGV4cCA9IDB4M2Y4MSAtIHNoZnQgYW10LgorCW9yLncJCSVkMSwgRlBfU1JDX0VYKCVhNikJIyB7c2duLGV4cH0KKworCW1vdi5iCQkmTk9STSwgU1RBRyglYTYpCSMgZml4IHNyYyB0eXBlIHRhZworCXJ0cworCisjIGNvbnZlcnQgc2dsIHRvIGV4dCBTTkFOCisjICVhMCA6IHBvaW50cyB0byBzZ2wgU05BTgorZ2V0X3NnbF9zbmFuOgorCW1vdi53CQkmMHg3ZmZmLCBGUF9TUkNfRVgoJWE2KSAjIHNldCBleHAgb2YgU05BTgorCWJmZXh0dQkJKCVhMCl7Jjk6JjIzfSwgJWQwCisJbHNsLmwJCSYweDgsICVkMAkJIyBleHRyYWN0IGFuZCBpbnNlcnQgaGkobWFuKQorCW1vdi5sCQklZDAsIEZQX1NSQ19ISSglYTYpCisJY2xyLmwJCUZQX1NSQ19MTyglYTYpCisKKwlidHN0CQkmMHg3LCAoJWEwKQkJIyBzZWUgaWYgc2lnbiBvZiBTTkFOIGlzIHNldAorCWJlcS5iCQlub19zZ2xfc25hbl9zZ24KKwlic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQorbm9fc2dsX3NuYW5fc2duOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBsb2FkIGEgREJMIGludG8gJWZwMDoJCQkjCisjCS1udW1iZXIgY2FuJ3QgZmF1bHQJCSMKKyMJKDEpIGNhbGMgZWEJCQkjCisjCSgyKSByZWFkIDggYnl0ZXMgaW50byBMX1NDUigxLDIpIworIwkoMykgZm1vdi5kIGludG8gJWZwMAkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2xvYWRfZGJsOgorCW1vdnEubAkJJjB4OCwgJWQwCQkjIHBhc3M6IDggKGJ5dGVzKQorCWJzci5sCQlfZGNhbGNfZWEJCSMgY2FsYyA8ZWE+OyA8ZWE+IGluICVhMAorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZworCWJlcS5iCQlsb2FkX2RibF9pbW1lZAorCisJbGVhCQlMX1NDUjEoJWE2KSwgJWExCSMgcGFzczogcHRyIHRvIGlucHV0IGRibCB0bXAgc3BhY2UKKwltb3ZxLmwJCSYweDgsICVkMAkJIyBwYXNzOiAjIGJ5dGVzIHRvIHJlYWQKKwlic3IubAkJX2RtZW1fcmVhZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX2QJCSMgeWVzCisKK2xvYWRfZGJsX2NvbnQ6CisJbGVhCQlMX1NDUjEoJWE2KSwgJWEwCSMgcGFzczogcHRyIHRvIGlucHV0IGRibAorCWJzci5sCQlzZXRfdGFnX2QJCSMgZGV0ZXJtaW5lIHNyYyB0eXBlIHRhZworCW1vdi5iCQklZDAsIFNUQUcoJWE2KQkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKKworCWNtcGkuYgkJJWQwLCAmREVOT1JNCQkjIGlzIGl0IGEgZGJsIERFTk9STT8KKwliZXEudwkJZ2V0X2RibF9kZW5vcm0JCSMgeWVzCisKKwljbXBpLmIJCSVkMCwgJlNOQU4JCSMgaXMgaXQgYSBkYmwgU05BTj8KKwliZXEudwkJZ2V0X2RibF9zbmFuCQkjIHllcworCisJZm1vdi5kCQlMX1NDUjEoJWE2KSwgJWZwMAkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCXJ0cworCitsb2FkX2RibF9pbW1lZDoKKwlsZWEJCUxfU0NSMSglYTYpLCAlYTEJIyBwYXNzOiBwdHIgdG8gaW5wdXQgZGJsIHRtcCBzcGFjZQorCW1vdnEubAkJJjB4OCwgJWQwCQkjIHBhc3M6ICMgYnl0ZXMgdG8gcmVhZAorCWJzci5sCQlfaW1lbV9yZWFkCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZ1bmltcF9pYWNjCQkjIHllcworCWJyYS5iCQlsb2FkX2RibF9jb250CisKKyMgbXVzdCBjb252ZXJ0IGRibCBkZW5vcm0gZm9ybWF0IHRvIGFuIFhwcmVjIGRlbm9ybSBmbXQgc3VpdGFibGUgZm9yCisjIG5vcm1hbGl6YXRpb24uLi4KKyMgJWEwIDogbG9jLiBvZiBkYmwgZGVub3JtCitnZXRfZGJsX2Rlbm9ybToKKwljbHIudwkJRlBfU1JDX0VYKCVhNikKKwliZmV4dHUJCSglYTApeyYxMjomMzF9LCAlZDAJIyBmZXRjaCBoaShfbWFudGlzc2EpCisJbW92LmwJCSVkMCwgRlBfU1JDX0hJKCVhNikKKwliZmV4dHUJCTQoJWEwKXsmMTE6JjIxfSwgJWQwCSMgZmV0Y2ggbG8oX21hbnRpc3NhKQorCW1vdi5sCQkmMHhiLCAlZDEKKwlsc2wubAkJJWQxLCAlZDAKKwltb3YubAkJJWQwLCBGUF9TUkNfTE8oJWE2KQorCisJYnRzdAkJJjB4NywgKCVhMCkJCSMgaXMgc2duIGJpdCBzZXQ/CisJYmVxLmIJCWRibF9kbnJtX25vcm0KKwlic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQkjIHNldCBzZ24gb2YgeHByZWMgdmFsdWUKKworZGJsX2Rucm1fbm9ybToKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG51bWJlcgorCW1vdi53CQkmMHgzYzAxLCAlZDEJCSMgeHByZWMgZXhwID0gMHgzYzAxCisJc3ViLncJCSVkMCwgJWQxCQkjIGV4cCA9IDB4M2MwMSAtIHNoZnQgYW10LgorCW9yLncJCSVkMSwgRlBfU1JDX0VYKCVhNikJIyB7c2duLGV4cH0KKworCW1vdi5iCQkmTk9STSwgU1RBRyglYTYpCSMgZml4IHNyYyB0eXBlIHRhZworCXJ0cworCisjIGNvbnZlcnQgZGJsIHRvIGV4dCBTTkFOCisjICVhMCA6IHBvaW50cyB0byBkYmwgU05BTgorZ2V0X2RibF9zbmFuOgorCW1vdi53CQkmMHg3ZmZmLCBGUF9TUkNfRVgoJWE2KSAjIHNldCBleHAgb2YgU05BTgorCisJYmZleHR1CQkoJWEwKXsmMTI6JjMxfSwgJWQwCSMgZmV0Y2ggaGkoX21hbnRpc3NhKQorCW1vdi5sCQklZDAsIEZQX1NSQ19ISSglYTYpCisJYmZleHR1CQk0KCVhMCl7JjExOiYyMX0sICVkMAkjIGZldGNoIGxvKF9tYW50aXNzYSkKKwltb3YubAkJJjB4YiwgJWQxCisJbHNsLmwJCSVkMSwgJWQwCisJbW92LmwJCSVkMCwgRlBfU1JDX0xPKCVhNikKKworCWJ0c3QJCSYweDcsICglYTApCQkjIHNlZSBpZiBzaWduIG9mIFNOQU4gaXMgc2V0CisJYmVxLmIJCW5vX2RibF9zbmFuX3NnbgorCWJzZXQJCSYweDcsIEZQX1NSQ19FWCglYTYpCitub19kYmxfc25hbl9zZ246CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIFhwcmVjIGludG8gJWZwMDoJCQkjCisjCS1udW1iZXIgY2FuJ3QgZmF1bHQJCQkjCisjCSgxKSBjYWxjIGVhCQkJCSMKKyMJKDIpIHJlYWQgMTIgYnl0ZXMgaW50byBMX1NDUigxLDIpCSMKKyMJKDMpIGZtb3YueCBpbnRvICVmcDAJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX2V4dDoKKwltb3YubAkJJjB4YywgJWQwCQkjIHBhc3M6IDEyIChieXRlcykKKwlic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPgorCisJbGVhCQlGUF9TUkMoJWE2KSwgJWExCSMgcGFzczogcHRyIHRvIGlucHV0IGV4dCB0bXAgc3BhY2UKKwltb3YubAkJJjB4YywgJWQwCQkjIHBhc3M6ICMgb2YgYnl0ZXMgdG8gcmVhZAorCWJzci5sCQlfZG1lbV9yZWFkCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLmwJCWZhY2NfaW5feAkJIyB5ZXMKKworCWxlYQkJRlBfU1JDKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIGRldGVybWluZSBzcmMgdHlwZSB0YWcKKworCWNtcGkuYgkJJWQwLCAmVU5OT1JNCQkjIGlzIHRoZSBzcmMgb3AgYW4gVU5OT1JNPworCWJlcS5iCQlsb2FkX2V4dF91bm5vcm0JCSMgeWVzCisKKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc3RvcmUgdGhlIHNyYyBvcHR5cGUgdGFnCisJcnRzCisKK2xvYWRfZXh0X3Vubm9ybToKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyBmaXggdGhlIHNyYyBVTk5PUk0KKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc3RvcmUgdGhlIHNyYyBvcHR5cGUgdGFnCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIHBhY2tlZCBpbnRvICVmcDA6CQkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkJIworIwkoMSkgY2FsYyBlYQkJCQkjCisjCSgyKSByZWFkIDEyIGJ5dGVzIGludG8gTF9TQ1IoMSwyLDMpCSMKKyMJKDMpIGZtb3YueCBpbnRvICVmcDAJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX3BhY2tlZDoKKwlic3IubAkJZ2V0X3BhY2tlZAorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyBkZXRlcm1pbmUgc3JjIHR5cGUgdGFnCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyB0aGUgc3JjIG9wIGFuIFVOTk9STSBaRVJPPworCWJlcS5iCQlsb2FkX3BhY2tlZF91bm5vcm0JIyB5ZXMKKworCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHN0b3JlIHRoZSBzcmMgb3B0eXBlIHRhZworCXJ0cworCitsb2FkX3BhY2tlZF91bm5vcm06CisJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBVTk5PUk0gWkVSTworCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHN0b3JlIHRoZSBzcmMgb3B0eXBlIHRhZworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZvdXQoKTogbW92ZSBmcm9tIGZwIHJlZ2lzdGVyIHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yb3VuZCgpIC0gbmVlZGVkIHRvIGNyZWF0ZSBFWE9QIGZvciBzZ2wvZGJsIHByZWNpc2lvbgkJIworIwlub3JtKCkgLSBuZWVkZWQgdG8gY3JlYXRlIEVYT1AgZm9yIGV4dGVuZGVkIHByZWNpc2lvbgkJIworIwlvdmZfcmVzKCkgLSBjcmVhdGUgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQgZm9yIHNnbC9kYmwgcHJlY2lzaW9uIworIwl1bmZfcmVzKCkgLSBjcmVhdGUgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWMuCSMKKyMJZHN0X2RibCgpIC0gY3JlYXRlIHJvdW5kZWQgZGJsIHByZWNpc2lvbiByZXN1bHQuCQkjCisjCWRzdF9zZ2woKSAtIGNyZWF0ZSByb3VuZGVkIHNnbCBwcmVjaXNpb24gcmVzdWx0LgkJIworIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBkeW5hbWljIGstZmFjdG9yIHJlZyBmb3IgcGFja2VkLgkJIworIwliaW5kZWMoKSAtIGNvbnZlcnQgRlAgYmluYXJ5IG51bWJlciB0byBwYWNrZWQgbnVtYmVyLgkJIworIwlfbWVtX3dyaXRlKCkgLSB3cml0ZSBkYXRhIHRvIG1lbW9yeS4JCQkJIworIwlfbWVtX3dyaXRlMigpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkgdW5sZXNzIHN1cHYgbW9kZSAtKGE3KSBleGMuIworIwlfZG1lbV93cml0ZV97Ynl0ZSx3b3JkLGxvbmd9KCkgLSB3cml0ZSBkYXRhIHRvIG1lbW9yeS4JCSMKKyMJc3RvcmVfZHJlZ197Yix3LGx9KCkgLSBzdG9yZSBkYXRhIHRvIGRhdGEgcmVnaXN0ZXIgZmlsZS4JIworIwlmYWNjX291dF97Yix3LGwsZCx4fSgpIC0gZGF0YSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm91bmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwIDogaW50ZXJtZWRpYXRlIHVuZGVyZmxvdyBvciBvdmVyZmxvdyByZXN1bHQgaWYJCSMKKyMJICAgICAgT1ZGTC9VTkZMIG9jY3VycmVkIGZvciBhIHNnbCBvciBkYmwgb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhpcyByb3V0aW5lIGlzIGFjY2Vzc2VkIGJ5IG1hbnkgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIGRvIGFuCSMKKyMgb3BjbGFzcyB0aHJlZSBtb3ZlIG9mIGFuIG9wZXJhbmQgb3V0IHRvIG1lbW9yeS4JCQkjCisjCURlY29kZSBhbiBmbW92ZSBvdXQgKG9wY2xhc3MgMykgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIGlmCSMKKyMgaXQncyBiLHcsbCxzLGQseCwgb3IgcCBpbiBzaXplLiBiLHcsbCBjYW4gYmUgc3RvcmVkIHRvIGVpdGhlciBhIGRhdGEJIworIyByZWdpc3RlciBvciBtZW1vcnkuIFRoZSBhbGdvcml0aG0gdXNlcyBhIHN0YW5kYXJkICJmbW92ZSIgdG8gY3JlYXRlCSMKKyMgdGhlIHJvdW5kZWQgcmVzdWx0LiBBbHNvLCBzaW5jZSBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCwgdGhpcyBhbHNvCSMKKyMgY3JlYXRlIHRoZSBjb3JyZWN0IE9QRVJSIGRlZmF1bHQgcmVzdWx0IGlmIGFwcHJvcHJpYXRlLgkJIworIwlGb3Igc2dsIG9yIGRibCBwcmVjaXNpb24sIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBjYW4gb2NjdXIuIElmCSMKKyMgZWl0aGVyIG9jY3VycyBhbmQgaXMgZW5hYmxlZCwgdGhlIEVYT1AuCQkJCSMKKyMJRm9yIGV4dGVuZGVkIHByZWNpc2lvbiwgdGhlIHN0YWNrZWQgPGVhPiBtdXN0IGJlIGZpeGVkIGFsb25nCSMKKyMgdy8gdGhlIGFkZHJlc3MgaW5kZXggcmVnaXN0ZXIgYXMgYXBwcm9wcmlhdGUgdy8gX2NhbGNfZWFfZm91dCgpLiBJZgkjCisjIHRoZSBzb3VyY2UgaXMgYSBkZW5vcm0gYW5kIGlmIHVuZGVyZmxvdyBpcyBlbmFibGVkLCBhbiBFWE9QIG11c3QgYmUJIworIyBjcmVhdGVkLgkJCQkJCQkJIworIwlGb3IgcGFja2VkLCB0aGUgay1mYWN0b3IgbXVzdCBiZSBmZXRjaGVkIGZyb20gdGhlIGluc3RydWN0aW9uCSMKKyMgd29yZCBvciBhIGRhdGEgcmVnaXN0ZXIuIFRoZSA8ZWE+IG11c3QgYmUgZml4ZWQgYXMgdy8gZXh0ZW5kZWQJIworIyBwcmVjaXNpb24uIFRoZW4sIGJpbmRlYygpIGlzIGNhbGxlZCB0byBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlCQkjCisjIHBhY2tlZCByZXN1bHQuCQkJCQkJCSMKKyMJSWYgYXQgYW55IHRpbWUgYW4gYWNjZXNzIGVycm9yIGlzIGZsYWdnZWQgYnkgb25lIG9mIHRoZSBtb3ZlLQkjCisjIHRvLW1lbW9yeSByb3V0aW5lcywgdGhlbiBhIHNwZWNpYWwgZXhpdCBtdXN0IGJlIG1hZGUgc28gdGhhdCB0aGUJIworIyBhY2Nlc3MgZXJyb3IgY2FuIGJlIGhhbmRsZWQgcHJvcGVybHkuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmb3V0Citmb3V0OgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDEgIyBleHRyYWN0IGRzdCBmbXQKKwltb3YudwkJKHRibF9mb3V0LmIsJXBjLCVkMS53KjIpLCVhMSAjIHVzZSBhcyBpbmRleAorCWptcAkJKHRibF9mb3V0LmIsJXBjLCVhMSkJIyBqdW1wIHRvIHJvdXRpbmUKKworCXN3YmVnCQkmMHg4Cit0YmxfZm91dDoKKwlzaG9ydAkJZm91dF9sb25nCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9zZ2wJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X2V4dAktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfcGFjawktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfd29yZAktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfZGJsCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9ieXRlCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9wYWNrCS0JdGJsX2ZvdXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUuYiBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCisjIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCitmb3V0X2J5dGU6CisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfYnl0ZV9kZW5vcm0JIyBubworCisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgbG9hZCB2YWx1ZQorCitmb3V0X2J5dGVfbm9ybToKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBpbnNlcnQgcm5kIHByZWMsbW9kZQorCisJZm1vdi5iCQklZnAwLCVkMAkJIyBleGVjIG1vdmUgb3V0IHcvIGNvcnJlY3Qgcm5kIG1vZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggRlBTUgorCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2F2ZSBuZXcgZXhjLGFjY3J1ZWQgYml0cworCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9ieXRlX2RuCQkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIGJ5dGUKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfYgkJIyB5ZXMKKworCXJ0cworCitmb3V0X2J5dGVfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfYgorCXJ0cworCitmb3V0X2J5dGVfZGVub3JtOgorCW1vdi5sCQlTUkNfRVgoJWEwKSwlZDEKKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBrZWVwIERFTk9STSBzaWduCisJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAorCWZtb3YucwkJJWQxLCVmcDAKKwlicmEuYgkJZm91dF9ieXRlX25vcm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUudyBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCisjIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCitmb3V0X3dvcmQ6CisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfd29yZF9kZW5vcm0JIyBubworCisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgbG9hZCB2YWx1ZQorCitmb3V0X3dvcmRfbm9ybToKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBpbnNlcnQgcm5kIHByZWM6bW9kZQorCisJZm1vdi53CQklZnAwLCVkMAkJIyBleGVjIG1vdmUgb3V0IHcvIGNvcnJlY3Qgcm5kIG1vZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggRlBTUgorCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2F2ZSBuZXcgZXhjLGFjY3J1ZWQgYml0cworCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF93b3JkX2RuCQkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHdvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKKworCXJ0cworCitmb3V0X3dvcmRfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfdworCXJ0cworCitmb3V0X3dvcmRfZGVub3JtOgorCW1vdi5sCQlTUkNfRVgoJWEwKSwlZDEKKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBrZWVwIERFTk9STSBzaWduCisJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAorCWZtb3YucwkJJWQxLCVmcDAKKwlicmEuYgkJZm91dF93b3JkX25vcm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUubCBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCisjIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCitmb3V0X2xvbmc6CisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfbG9uZ19kZW5vcm0JIyBubworCisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgbG9hZCB2YWx1ZQorCitmb3V0X2xvbmdfbm9ybToKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBpbnNlcnQgcm5kIHByZWM6bW9kZQorCisJZm1vdi5sCQklZnAwLCVkMAkJIyBleGVjIG1vdmUgb3V0IHcvIGNvcnJlY3Qgcm5kIG1vZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggRlBTUgorCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2F2ZSBuZXcgZXhjLGFjY3J1ZWQgYml0cworCitmb3V0X2xvbmdfd3JpdGU6CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9sb25nX2RuCQkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCXJ0cworCitmb3V0X2xvbmdfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAorCXJ0cworCitmb3V0X2xvbmdfZGVub3JtOgorCW1vdi5sCQlTUkNfRVgoJWEwKSwlZDEKKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBrZWVwIERFTk9STSBzaWduCisJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAorCWZtb3YucwkJJWQxLCVmcDAKKwlicmEuYgkJZm91dF9sb25nX25vcm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUueCBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCisjIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCisjIFRoZSBERU5PUk0gY2F1c2VzIGFuIFVuZGVyZmxvdyBleGNlcHRpb24uCitmb3V0X2V4dDoKKworIyB3ZSBjb3B5IHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IHRvIEZQX1NDUjAgc28gdGhhdCB0aGUgcmVzZXJ2ZWQKKyMgMTYtYml0IGZpZWxkIGdldHMgemVyb2VkLiB3ZSBkbyB0aGlzIHNpbmNlIHdlIHByb21pc2Ugbm90IHRvIGRpc3R1cmIKKyMgd2hhdCdzIGF0IFNSQyhhMCkuCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCWNsci53CQkyK0ZQX1NDUjBfRVgoJWE2KQkjIGNsZWFyIHJlc2VydmVkIGZpZWxkCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQKKworCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZpeCBzdGFja2VkIDxlYT4KKworCW1vdi5sCQklYTAsJWExCQkJIyBwYXNzOiBkc3QgYWRkcgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHNyYyBhZGRyCisJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcworCisjIHdlIG11c3Qgbm90IHlldCB3cml0ZSB0aGUgZXh0ZW5kZWQgcHJlY2lzaW9uIGRhdGEgdG8gdGhlIHN0YWNrCisjIGluIHRoZSBwcmUtZGVjcmVtZW50IGNhc2UgZnJvbSBzdXBlcnZpc29yIG1vZGUgb3IgZWxzZSB3ZSdsbCBjb3JydXB0CisjIHRoZSBzdGFjayBmcmFtZS4gc28sIGxlYXZlIGl0IGluIEZQX1NSQyBmb3Igbm93IGFuZCBkZWFsIHdpdGggaXQgbGF0ZXIuLi4KKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwliZXEuYgkJZm91dF9leHRfYTcKKworCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKKworCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2V4dF9kZW5vcm0JCSMgbm8KKwlydHMKKworIyB0aGUgbnVtYmVyIGlzIGEgREVOT1JNLiBtdXN0IHNldCB0aGUgdW5kZXJmbG93IGV4Y2VwdGlvbiBiaXQKK2ZvdXRfZXh0X2Rlbm9ybToKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmRlcmZsb3cgZXhjIGJpdAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCisJYW5kaS5iCQkmMHgwYSwlZDAJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZvdXRfZXh0X2V4YwkJIyB5ZXMKKwlydHMKKworIyB3ZSBkb24ndCB3YW50IHRvIGRvIHRoZSB3cml0ZSBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZQorIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCitmb3V0X2V4dF9hNzoKKwlic3IubAkJX21lbV93cml0ZTIJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF9leHRfZGVub3JtCQkjIG5vCisJcnRzCisKK2ZvdXRfZXh0X2V4YzoKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBtYW50aXNzYQorCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgYW10KQorCWFuZGkudwkJJjB4N2ZmZiwlZDAKKwlhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMga2VlcCBvbmx5IG9sZCBzaWduCisJb3IudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworZm91dF9leHRfZXJyOgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIGZpeCBzdGFja2VkIGE2CisJYnJhLmwJCWZhY2Nfb3V0X3gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS5zIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm91dF9zZ2w6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYworCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKyMKKyMgb3BlcmFuZCBpcyBhIG5vcm1hbGl6ZWQgbnVtYmVyLiBmaXJzdCwgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBtb3ZlIG91dAorIyB3b3VsZCBjYXVzZSBlaXRoZXIgYW4gdW5kZXJmbG93IG9yIG92ZXJmbG93LiB0aGVzZSBjYXNlcyBhcmUgaGFuZGxlZAorIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCisjIGV4ZWN1dGUgdGhlIG1vdmUuCisjCisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisKKwljbXBpLncJCSVkMCwmU0dMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KKwliZ3QudwkJZm91dF9zZ2xfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBPVkZMCisJYmVxLncJCWZvdXRfc2dsX21heV9vdmZsCSMgbWF5YmU7IGdvIGhhbmRsZSBwb3NzaWJsZSBPVkZMCisJY21waS53CQklZDAsJlNHTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PworCWJsdC53CQlmb3V0X3NnbF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCisjCisjIE5PUk1zKGluIHJhbmdlKSBjYW4gYmUgc3RvcmVkIG91dCBieSBhIHNpbXBsZSAiZm1vdi5zIgorIyBVbm5vcm1hbGl6ZWQgaW5wdXRzIGNhbiBjb21lIHRocm91Z2ggdGhpcyBwb2ludC4KKyMKK2ZvdXRfc2dsX2V4ZzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBmZXRjaCBmb3AgZnJvbSBzdGFjaworCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtb3YucwkJJWZwMCwlZDAJCSMgc3RvcmUgZG9lcyBjb252ZXJ0IGFuZCByb3VuZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2V0IHBvc3NpYmxlIGluZXgyL2FpbmV4CisKK2ZvdXRfc2dsX2V4Z193cml0ZToKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X3NnbF9leGdfd3JpdGVfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlydHMKKworZm91dF9zZ2xfZXhnX3dyaXRlX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKwlydHMKKworIworIyBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIG9wZXJhbmQgd291bGQgVU5GTCBpZiBtb3ZlZCBvdXQgdG8gc2luZ2xlIHByZWMsCisjIHNvLCBkZW5vcm0gYW5kIHJvdW5kIGFuZCB0aGVuIHVzZSBnZW5lcmljIHN0b3JlIHNpbmdsZSByb3V0aW5lIHRvCisjIHdyaXRlIHRoZSB2YWx1ZSB0byBtZW1vcnkuCisjCitmb3V0X3NnbF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFVORkwKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi5sCQklYTAsLSglc3ApCisKKwljbHIubAkJJWQwCQkJIyBwYXNzOiBTLkYuID0gMAorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCisJYm5lLmIJCWZvdXRfc2dsX3VuZmxfY29udAkjIGxldCBERU5PUk1zIGZhbGwgdGhyb3VnaAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK2ZvdXRfc2dsX3VuZmxfY29udDoKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIGZvcAorCWJzci5sCQlkc3Rfc2dsCQkJIyBjb252ZXJ0IHRvIHNpbmdsZSBwcmVjCisKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X3NnbF91bmZsX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLmIJCWZvdXRfc2dsX3VuZmxfY2hrZXhjCisKK2ZvdXRfc2dsX3VuZmxfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAorCitmb3V0X3NnbF91bmZsX2Noa2V4YzoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUudwkJZm91dF9zZF9leGNfdW5mbAkjIHllcworCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIworIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKKyMKK2ZvdXRfc2dsX292Zmw6CisJdHN0LmIJCTMrU1JDX0hJKCVhMCkJCSMgaXMgcmVzdWx0IGluZXhhY3Q/CisJYm5lLmIJCWZvdXRfc2dsX292ZmxfaW5leDIKKwl0c3QubAkJU1JDX0xPKCVhMCkJCSMgaXMgcmVzdWx0IGluZXhhY3Q/CisJYm5lLmIJCWZvdXRfc2dsX292ZmxfaW5leDIKKwlvcmkudwkJJm92ZmxfaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisJYnJhLmIJCWZvdXRfc2dsX292ZmxfY29udAorZm91dF9zZ2xfb3ZmbF9pbmV4MjoKKwlvcmkudwkJJm92ZmlueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leC9pbmV4MgorCitmb3V0X3NnbF9vdmZsX2NvbnQ6CisJbW92LmwJCSVhMCwtKCVzcCkKKworIyBjYWxsIG92Zl9yZXMoKSB3LyBzZ2wgcHJlYyBhbmQgdGhlIGNvcnJlY3Qgcm5kIG1vZGUgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CisjIG92ZXJmbG93IHJlc3VsdC4gRE9OJ1Qgc2F2ZSB0aGUgcmV0dXJuZWQgY2NvZGVzIGZyb20gb3ZmX3JlcygpIHNpbmNlCisjIGZtb3ZlIG91dCBkb2Vzbid0IGFsdGVyIHRoZW0uCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJc21pCQklZDEJCQkjIHNldCBpZiBzbworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogc2dsIHByZWMscm5kIG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBPVkZMIHJlc3VsdAorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIGxvYWQgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQKKwlmbW92LnMJCSVmcDAsJWQwCQkjIHN0b3JlIHRvIHNpbmdsZQorCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9zZ2xfb3ZmbF9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS5iCQlmb3V0X3NnbF9vdmZsX2Noa2V4YworCitmb3V0X3NnbF9vdmZsX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKworZm91dF9zZ2xfb3ZmbF9jaGtleGM6CisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX292ZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgbW92ZSBvdXQgTUFZIG92ZXJmbG93OgorIyAoMSkgZm9yY2UgdGhlIGV4cCB0byAweDNmZmYKKyMgKDIpIGRvIGEgbW92ZSB3LyBhcHByb3ByaWF0ZSBybmQgbW9kZQorIyAoMykgaWYgZXhwIHN0aWxsIGVxdWFscyB6ZXJvLCB0aGVuIGluc2VydCBvcmlnaW5hbCBleHBvbmVudAorIwlmb3IgdGhlIGNvcnJlY3QgcmVzdWx0LgorIyAgICAgaWYgZXhwIG5vdyBlcXVhbHMgb25lLCB0aGVuIGl0IG92ZXJmbG93ZWQgc28gY2FsbCBvdmZfcmVzLgorIworZm91dF9zZ2xfbWF5X292Zmw6CisJbW92LncJCVNSQ19FWCglYTApLCVkMQkJIyBmZXRjaCBjdXJyZW50IHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgaXQsY2xlYXIgZXhwCisJb3JpLncJCSYweDNmZmYsJWQxCQkjIGluc2VydCBleHAgPSAwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgc2NhbGVkIGV4cAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBjb3B5IGhpKG1hbikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSBsbyhtYW4pCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBmb3JjZSBmb3AgdG8gYmUgcm91bmRlZAorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIG5lZWQgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDAsJjB4MgkJIyBkaWQgZXhwb25lbnQgaW5jcmVhc2U/CisJZmJsdC53CQlmb3V0X3NnbF9leGcJCSMgbm87IGdvIGZpbmlzaCBOT1JNCisJYnJhLncJCWZvdXRfc2dsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIyMjIyMjIyMjIyMjIyMjIworCitmb3V0X3NkX2V4Y191bmZsOgorCW1vdi5sCQkoJXNwKSssJWEwCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyB3YXMgc3JjIGEgREVOT1JNPworCWJuZS5iCQlmb3V0X3NkX2V4Y19jb250CSMgbm8KKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCisJbmVnLmwJCSVkMAorCWFuZGkudwkJJjB4N2ZmZiwlZDAKKwliZmlucwkJJWQwLEZQX1NDUjBfRVgoJWE2KXsmMTomMTV9CisJYnJhLmIJCWZvdXRfc2RfZXhjX2NvbnQKKworZm91dF9zZF9leGM6Citmb3V0X3NkX2V4Y19vdmZsOgorCW1vdi5sCQkoJXNwKSssJWEwCQkjIHJlc3RvcmUgYTAKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCitmb3V0X3NkX2V4Y19jb250OgorCWJjbHIJCSYweDcsRlBfU0NSMF9FWCglYTYpCSMgY2xlYXIgc2lnbiBiaXQKKwlzbmUuYgkJMitGUF9TQ1IwX0VYKCVhNikJIyBzZXQgaW50ZXJuYWwgc2lnbiBiaXQKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gREVOT1JNCisKKwltb3YuYgkJMytMX1NDUjMoJWE2KSwlZDEKKwlsc3IuYgkJJjB4NCwlZDEKKwlhbmRpLncJCSYweDBjLCVkMQorCXN3YXAJCSVkMQorCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg0LCVkMQorCWFuZGkudwkJJjB4MDMsJWQxCisJY2xyLmwJCSVkMAkJCSMgcGFzczogemVybyBnLHIscworCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBERU5PUk0KKworCXRzdC5iCQkyK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIEVYT1AgbmVnYXRpdmU/CisJYmVxLmIJCWZvdXRfc2RfZXhjX2RvbmUJIyBubworCWJzZXQJCSYweDcsRlBfU0NSMF9FWCglYTYpCSMgeWVzCisKK2ZvdXRfc2RfZXhjX2RvbmU6CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLmQgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdXRfZGJsOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjaworCisjCisjIG9wZXJhbmQgaXMgYSBub3JtYWxpemVkIG51bWJlci4gZmlyc3QsIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgbW92ZSBvdXQKKyMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKKyMgc2VwYXJhdGVseS4gb3RoZXJ3aXNlLCBzZXQgdGhlIEZQQ1IgdG8gdGhlIHByb3BlciByb3VuZGluZyBtb2RlIGFuZAorIyBleGVjdXRlIHRoZSBtb3ZlLgorIworCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCisJY21waS53CQklZDAsJkRCTF9ISQkJIyB3aWxsIG9wZXJhbmQgb3ZlcmZsb3c/CisJYmd0LncJCWZvdXRfZGJsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgT1ZGTAorCWJlcS53CQlmb3V0X2RibF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAorCWNtcGkudwkJJWQwLCZEQkxfTE8JCSMgd2lsbCBvcGVyYW5kIHVuZGVyZmxvdz8KKwlibHQudwkJZm91dF9kYmxfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworIworIyBOT1JNcyhpbiByYW5nZSkgY2FuIGJlIHN0b3JlZCBvdXQgYnkgYSBzaW1wbGUgImZtb3YuZCIKKyMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCisjCitmb3V0X2RibF9leGc6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbW92LmQJCSVmcDAsTF9TQ1IxKCVhNikJIyBzdG9yZSBkb2VzIGNvbnZlcnQgYW5kIHJvdW5kCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgorCisJb3IudwkJJWQwLDIrVVNFUl9GUFNSKCVhNikJIyBzZXQgcG9zc2libGUgaW5leDIvYWluZXgKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKKwlsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgorCW1vdnEubAkJJjB4OCwlZDAJCSMgcGFzczogb3BzaXplIGlzIDggYnl0ZXMKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgc3RvcmUgZGJsIGZvcCB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKKworCXJ0cwkJCQkJIyBubzsgc28gd2UncmUgZmluaXNoZWQKKworIworIyBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIG9wZXJhbmQgd291bGQgVU5GTCBpZiBtb3ZlZCBvdXQgdG8gZG91YmxlIHByZWMsCisjIHNvLCBkZW5vcm0gYW5kIHJvdW5kIGFuZCB0aGVuIHVzZSBnZW5lcmljIHN0b3JlIGRvdWJsZSByb3V0aW5lIHRvCisjIHdyaXRlIHRoZSB2YWx1ZSB0byBtZW1vcnkuCisjCitmb3V0X2RibF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFVORkwKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi5sCQklYTAsLSglc3ApCisKKwljbHIubAkJJWQwCQkJIyBwYXNzOiBTLkYuID0gMAorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCisJYm5lLmIJCWZvdXRfZGJsX3VuZmxfY29udAkjIGxldCBERU5PUk1zIGZhbGwgdGhyb3VnaAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK2ZvdXRfZGJsX3VuZmxfY29udDoKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIGZvcAorCWJzci5sCQlkc3RfZGJsCQkJIyBjb252ZXJ0IHRvIHNpbmdsZSBwcmVjCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQorCW1vdi5sCQklZDEsTF9TQ1IyKCVhNikKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKKwlsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgorCW1vdnEubAkJJjB4OCwlZDAJCSMgcGFzczogb3BzaXplIGlzIDggYnl0ZXMKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgc3RvcmUgZGJsIGZvcCB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjCisjIGl0J3MgZGVmaW5pdGVseSBhbiBvdmVyZmxvdyBzbyBjYWxsIG92Zl9yZXMgdG8gZ2V0IHRoZSBjb3JyZWN0IGFuc3dlcgorIworZm91dF9kYmxfb3ZmbDoKKwltb3YudwkJMitTUkNfTE8oJWEwKSwlZDAKKwlhbmRpLncJCSYweDdmZiwlZDAKKwlibmUuYgkJZm91dF9kYmxfb3ZmbF9pbmV4MgorCisJb3JpLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCWJyYS5iCQlmb3V0X2RibF9vdmZsX2NvbnQKK2ZvdXRfZGJsX292ZmxfaW5leDI6CisJb3JpLncJCSZvdmZpbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgvaW5leDIKKworZm91dF9kYmxfb3ZmbF9jb250OgorCW1vdi5sCQklYTAsLSglc3ApCisKKyMgY2FsbCBvdmZfcmVzKCkgdy8gZGJsIHByZWMgYW5kIHRoZSBjb3JyZWN0IHJuZCBtb2RlIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdAorIyBvdmVyZmxvdyByZXN1bHQuIERPTidUIHNhdmUgdGhlIHJldHVybmVkIGNjb2RlcyBmcm9tIG92Zl9yZXMoKSBzaW5jZQorIyBmbW92ZSBvdXQgZG9lc24ndCBhbHRlciB0aGVtLgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCXNtaQkJJWQxCQkJIyBzZXQgaWYgc28KKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IGRibCBwcmVjLHJuZCBtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGMgT1ZGTCByZXN1bHQKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CisJZm1vdi5kCQklZnAwLExfU0NSMSglYTYpCSMgc3RvcmUgdG8gZG91YmxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlMX1NDUjEoJWE2KSwlYTAJCSMgcGFzczogc3JjIGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUudwkJZm91dF9zZF9leGNfb3ZmbAkjIHllcworCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIworIyBtb3ZlIG91dCBNQVkgb3ZlcmZsb3c6CisjICgxKSBmb3JjZSB0aGUgZXhwIHRvIDB4M2ZmZgorIyAoMikgZG8gYSBtb3ZlIHcvIGFwcHJvcHJpYXRlIHJuZCBtb2RlCisjICgzKSBpZiBleHAgc3RpbGwgZXF1YWxzIHplcm8sIHRoZW4gaW5zZXJ0IG9yaWdpbmFsIGV4cG9uZW50CisjCWZvciB0aGUgY29ycmVjdCByZXN1bHQuCisjICAgICBpZiBleHAgbm93IGVxdWFscyBvbmUsIHRoZW4gaXQgb3ZlcmZsb3dlZCBzbyBjYWxsIG92Zl9yZXMuCisjCitmb3V0X2RibF9tYXlfb3ZmbDoKKwltb3YudwkJU1JDX0VYKCVhMCksJWQxCQkjIGZldGNoIGN1cnJlbnQgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBpdCxjbGVhciBleHAKKwlvcmkudwkJJjB4M2ZmZiwlZDEJCSMgaW5zZXJ0IGV4cCA9IDAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBzY2FsZWQgZXhwCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KSAjIGNvcHkgaGkobWFuKQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikgIyBjb3B5IGxvKG1hbikKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGZvcmNlIGZvcCB0byBiZSByb3VuZGVkCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZhYnMueAkJJWZwMAkJCSMgbmVlZCBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMCwmMHgyCQkjIGRpZCBleHBvbmVudCBpbmNyZWFzZT8KKwlmYmx0LncJCWZvdXRfZGJsX2V4ZwkJIyBubzsgZ28gZmluaXNoIE5PUk0KKwlicmEudwkJZm91dF9kYmxfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWRzdF9kYmwoKTogY3JlYXRlIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgZnJvbSBleHRlbmRlZCBwcmVjLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGhpKGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0KQkJCQkjCisjCWQxID0gbG8oZG91YmxlIHByZWNpc2lvbiByZXN1bHQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyAgQ2hhbmdlcyBleHRlbmRlZCBwcmVjaXNpb24gdG8gZG91YmxlIHByZWNpc2lvbi4JCQkjCisjICBOb3RlOiBubyBhdHRlbXB0IGlzIG1hZGUgdG8gcm91bmQgdGhlIGV4dGVuZGVkIHZhbHVlIHRvIGRvdWJsZS4JIworIwlkYmxfc2lnbiA9IGV4dF9zaWduCQkJCQkJIworIwlkYmxfZXhwID0gZXh0X2V4cCAtICQzZmZmKGV4dCBiaWFzKSArICQ3ZmYoZGJsIGJpYXMpCQkjCisjCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCisjCWRibF9tYW50ID0gZXh0X21hbnR7NjI6MTJ9CQkJCQkjCisjCQkJCQkJCQkJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjICBleHRlbmRlZCAtPiAgfHN8ICAgIGV4cCAgICB8ICAgfDF8IG1zIG1hbnQgICB8ICAgIHwgbHMgbWFudCAgICAgfAkjCisjCQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCSMKKyMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgICAgMzIgICAgICAzMSAgICAgMTEJICAwCSMKKyMJCQkJICAgICB8CQkJICAgICB8CQkjCisjCQkJCSAgICAgfAkJCSAgICAgfAkJIworIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKKyMJCQkgICAgICAgICAgICAgdgkJCSAgICAgdgkJIworIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLQkJIworIyAgZG91YmxlICAgLT4JCSAgICAgIHxzfGV4cHwgbWFudCAgfCAgIHwgIG1hbnQgICAgICAgfAkJIworIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLQkJIworIwkJCSAgICAgIDYzICAgICA1MSAgIDMyICAgMzEJICAgICAgIDAJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZHN0X2RibDoKKwljbHIubAkJJWQwCQkJIyBjbGVhciBkMAorCW1vdi53CQlGVEVNUF9FWCglYTApLCVkMAkjIGdldCBleHBvbmVudAorCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworCWFkZGkudwkJJkRCTF9CSUFTLCVkMAkJIyBhZGQgZG91YmxlIHByZWNpc2lvbiBiaWFzCisJdHN0LmIJCUZURU1QX0hJKCVhMCkJCSMgaXMgbnVtYmVyIGEgZGVub3JtPworCWJtaS5iCQlkc3RfZ2V0X2R1cHBlcgkJIyBubworCXN1YnEudwkJJjB4MSwlZDAJCSMgeWVzOyBkZW5vcm0gYmlhcyA9IERCTF9CSUFTIC0gMQorZHN0X2dldF9kdXBwZXI6CisJc3dhcAkJJWQwCQkJIyBkMCBub3cgaW4gdXBwZXIgd29yZAorCWxzbC5sCQkmMHg0LCVkMAkJIyBkMCBpbiBwcm9wZXIgcGxhY2UgZm9yIGRibCBwcmVjIGV4cAorCXRzdC5iCQlGVEVNUF9FWCglYTApCQkjIHRlc3Qgc2lnbgorCWJwbC5iCQlkc3RfZ2V0X2RtYW4JCSMgaWYgcG9zdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQorCWJzZXQJCSYweDFmLCVkMAkJIyBpZiBuZWdhdGl2ZSwgc2V0IHNpZ24KK2RzdF9nZXRfZG1hbjoKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKKwliZmV4dHUJCSVkMXsmMTomMjB9LCVkMQkJIyBnZXQgdXBwZXIgMjAgYml0cyBvZiBtcworCW9yLmwJCSVkMSwlZDAJCQkjIHB1dCB0aGVzZSBiaXRzIGluIG1zIHdvcmQgb2YgZG91YmxlCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBwdXQgdGhlIG5ldyBleHAgYmFjayBvbiB0aGUgc3RhY2sKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKKwltb3YubAkJJjIxLCVkMAkJCSMgbG9hZCBzaGlmdCBjb3VudAorCWxzbC5sCQklZDAsJWQxCQkJIyBwdXQgbG93ZXIgMTEgYml0cyBpbiB1cHBlciBiaXRzCisJbW92LmwJCSVkMSxMX1NDUjIoJWE2KQkJIyBidWlsZCBsb3dlciBsd29yZCBpbiBtZW1vcnkKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwlZDEJIyBnZXQgbHMgbWFudGlzc2EKKwliZmV4dHUJCSVkMXsmMDomMjF9LCVkMAkJIyBnZXQgbHMgMjEgYml0cyBvZiBkb3VibGUKKwltb3YubAkJTF9TQ1IyKCVhNiksJWQxCisJb3IubAkJJWQwLCVkMQkJCSMgcHV0IHRoZW0gaW4gZG91YmxlIHJlc3VsdAorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkc3Rfc2dsKCk6IGNyZWF0ZSBzaW5nbGUgcHJlY2lzaW9uIHZhbHVlIGZyb20gZXh0ZW5kZWQgcHJlYwkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHNvdXJjZSBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBzaW5nbGUgcHJlY2lzaW9uIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjIENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIHNpbmdsZSBwcmVjaXNpb24uCQkJIworIwlzZ2xfc2lnbiA9IGV4dF9zaWduCQkJCQkJIworIwlzZ2xfZXhwID0gZXh0X2V4cCAtICQzZmZmKGV4dCBiaWFzKSArICQ3ZihzZ2wgYmlhcykJCSMKKyMJZ2V0IHJpZCBvZiBleHQgaW50ZWdlciBiaXQJCQkJCSMKKyMJc2dsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKKyMJCQkJCQkJCQkjCisjCQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCSMKKyMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKKyMJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0JIworIwkJIDk1CSAgICA2NCAgICA2MyA2MgkgICA0MCAzMiAgICAgIDMxICAgICAxMgkgIDAJIworIwkJCQkgICAgIHwJICAgfAkJCQkjCisjCQkJCSAgICAgfAkgICB8CQkJCSMKKyMJCQkJICAgICB8CSAgIHwJCQkJIworIwkJCSAgICAgICAgICAgICB2ICAgICB2CQkJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0JCQkJIworIyAgc2luZ2xlICAgLT4JCSAgICAgIHxzfGV4cHwgbWFudCAgfAkJCQkjCisjCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tCQkJCSMKKyMJCQkgICAgICAzMSAgICAgMjIgICAgIDAJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZHN0X3NnbDoKKwljbHIubAkJJWQwCisJbW92LncJCUZURU1QX0VYKCVhMCksJWQwCSMgZ2V0IGV4cG9uZW50CisJc3ViaS53CQkmRVhUX0JJQVMsJWQwCQkjIHN1YnRyYWN0IGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCisJYWRkaS53CQkmU0dMX0JJQVMsJWQwCQkjIGFkZCBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKKwl0c3QuYgkJRlRFTVBfSEkoJWEwKQkJIyBpcyBudW1iZXIgYSBkZW5vcm0/CisJYm1pLmIJCWRzdF9nZXRfc3VwcGVyCQkjIG5vCisJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gU0dMX0JJQVMgLSAxCitkc3RfZ2V0X3N1cHBlcjoKKwlzd2FwCQklZDAJCQkjIHB1dCBleHAgaW4gdXBwZXIgd29yZCBvZiBkMAorCWxzbC5sCQkmMHg3LCVkMAkJIyBzaGlmdCBpdCBpbnRvIHNpbmdsZSBleHAgYml0cworCXRzdC5iCQlGVEVNUF9FWCglYTApCQkjIHRlc3Qgc2lnbgorCWJwbC5iCQlkc3RfZ2V0X3NtYW4JCSMgaWYgcG9zaXRpdmUsIGNvbnRpbnVlCisJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBwdXQgaW4gc2lnbiBmaXJzdAorZHN0X2dldF9zbWFuOgorCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQorCWFuZGkubAkJJjB4N2ZmZmZmMDAsJWQxCQkjIGdldCB1cHBlciAyMyBiaXRzIG9mIG1zCisJbHNyLmwJCSYweDgsJWQxCQkjIGFuZCBwdXQgdGhlbSBmbHVzaCByaWdodAorCW9yLmwJCSVkMSwlZDAJCQkjIHB1dCB0aGVzZSBiaXRzIGluIG1zIHdvcmQgb2Ygc2luZ2xlCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm91dF9wYWNrOgorCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZldGNoIHRoZSA8ZWE+CisJbW92LmwJCSVhMCwtKCVzcCkKKworCW1vdi5iCQlTVEFHKCVhNiksJWQwCQkjIGZldGNoIGlucHV0IHR5cGUKKwlibmUudwkJZm91dF9wYWNrX25vdF9ub3JtCSMgaW5wdXQgaXMgbm90IE5PUk0KKworZm91dF9wYWNrX25vcm06CisJYnRzdAkJJjB4NCxFWENfQ01EUkVHKCVhNikJIyBzdGF0aWMgb3IgZHluYW1pYz8KKwliZXEuYgkJZm91dF9wYWNrX3MJCSMgc3RhdGljCisKK2ZvdXRfcGFja19kOgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEJIyBmZXRjaCBkeW5hbWljIHJlZworCWxzci5iCQkmMHg0LCVkMQorCWFuZGkudwkJJjB4NywlZDEKKworCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIERuIHcvIGstZmFjdG9yCisKKwlicmEuYgkJZm91dF9wYWNrX3R5cGUKK2ZvdXRfcGFja19zOgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBzdGF0aWMgZmllbGQKKworZm91dF9wYWNrX3R5cGU6CisJYmZleHRzCQklZDB7JjI1OiY3fSwlZDAJCSMgZXh0cmFjdCBrLWZhY3RvcgorCW1vdi5sCSVkMCwtKCVzcCkKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBpbnB1dAorCisjIGJpbmRlYyBpcyBjdXJyZW50bHkgc2NyYW1ibGluZyBGUF9TUkMgZm9yIGRlbm9ybSBpbnB1dHMuCisjIHdlJ2xsIGhhdmUgdG8gY2hhbmdlIHRoaXMsIGJ1dCBmb3Igbm93LCB0b3VnaCBsdWNrISEhCisJYnNyLmwJCWJpbmRlYwkJCSMgY29udmVydCB4cHJlYyB0byBwYWNrZWQKKworIwlhbmRpLmwJCSYweGNmZmYwMDBmLEZQX1NDUjAoJWE2KSAjIGNsZWFyIHVudXNlZCBmaWVsZHMKKwlhbmRpLmwJCSYweGNmZmZmMDBmLEZQX1NDUjAoJWE2KSAjIGNsZWFyIHVudXNlZCBmaWVsZHMKKworCW1vdi5sCSglc3ApKywlZDAKKworCXRzdC5iCQkzK0ZQX1NDUjBfRVgoJWE2KQorCWJuZS5iCQlmb3V0X3BhY2tfc2V0CisJdHN0LmwJCUZQX1NDUjBfSEkoJWE2KQorCWJuZS5iCQlmb3V0X3BhY2tfc2V0CisJdHN0LmwJCUZQX1NDUjBfTE8oJWE2KQorCWJuZS5iCQlmb3V0X3BhY2tfc2V0CisKKyMgYWRkIHRoZSBleHRyYSBjb25kaXRpb24gdGhhdCBvbmx5IGlmIHRoZSBrLWZhY3RvciB3YXMgemVybywgdG9vLCBzaG91bGQKKyMgd2UgemVybyB0aGUgZXhwb25lbnQKKwl0c3QubAkJJWQwCisJYm5lLmIJCWZvdXRfcGFja19zZXQKKyMgIm1hbnRpc3NhIiBpcyBhbGwgemVybyB3aGljaCBtZWFucyB0aGF0IHRoZSBhbnN3ZXIgaXMgemVyby4gYnV0LCB0aGUgJzA0MAorIyBhbGdvcml0aG0gYWxsb3dzIHRoZSBleHBvbmVudCB0byBiZSBub24temVyby4gdGhlIDg4MS8yIGRvIG5vdC4gdGhlcmVmb3JlLAorIyBpZiB0aGUgbWFudGlzc2EgaXMgemVybywgSSB3aWxsIHplcm8gdGhlIGV4cG9uZW50LCB0b28uCisjIHRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgZXhwb25lbnRzIHNpZ24gYml0IGlzIGFsbG93ZWQgdG8gYmUgbm9uLXplcm8KKyMgZm9yIGEgemVybywgYWxzby4uLgorCWFuZGkudwkJJjB4ZjAwMCxGUF9TQ1IwKCVhNikKKworZm91dF9wYWNrX3NldDoKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHNyYyBhZGRyCisKK2ZvdXRfcGFja193cml0ZToKKwltb3YubAkJKCVzcCkrLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgMTIgYnl0ZXMKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJlcS5iCQlmb3V0X3BhY2tfYTcKKworCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKKworCXJ0cworCisjIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhlIHdyaXRlIGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlCisjIHNvIF9tZW1fd3JpdGUyKCkgaGFuZGxlcyB0aGlzIGZvciB1cy4KK2ZvdXRfcGFja19hNzoKKwlic3IubAkJX21lbV93cml0ZTIJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwlydHMKKworZm91dF9wYWNrX25vdF9ub3JtOgorCWNtcGkuYgkJJWQwLCZERU5PUk0JCSMgaXMgaXQgYSBERU5PUk0/CisJYmVxLncJCWZvdXRfcGFja19ub3JtCQkjIHllcworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJY2xyLncJCTIrRlBfU1JDX0VYKCVhNikKKwljbXBpLmIJCSVkMCwmU05BTgkJIyBpcyBpdCBhbiBTTkFOPworCWJlcS5iCQlmb3V0X3BhY2tfc25hbgkJIyB5ZXMKKwlicmEuYgkJZm91dF9wYWNrX3dyaXRlCQkjIG5vCisKK2ZvdXRfcGFja19zbmFuOgorCW9yaS53CQkmc25hbmlvcDJfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFNOQU4vQUlPUAorCWJzZXQJCSYweDYsRlBfU1JDX0hJKCVhNikJIyBzZXQgc25hbiBiaXQKKwlicmEuYgkJZm91dF9wYWNrX3dyaXRlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmV0Y2hfZHJlZygpOiBmZXRjaCByZWdpc3RlciBhY2NvcmRpbmcgdG8gaW5kZXggaW4gZDEJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHJlZ2lzdGVyIGZldGNoZWQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEgd2hpY2ggY2FuIHJhbmdlIGZyb20gemVybwkjCisjIHRvIGZpZnRlZW4sIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmlsZSB2YWx1ZSAod2hlcmUJCSMKKyMgYWRkcmVzcyByZWdpc3RlciBpbmRleGVzIHN0YXJ0IGF0IDgpLiBEMC9EMS9BMC9BMS9BNi9BNyBhcmUgb24gdGhlCSMKKyMgc3RhY2suIFRoZSByZXN0IHNob3VsZCBzdGlsbCBiZSBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHRoaXMgcm91dGluZSBsZWF2ZXMgZDEgaW50YWN0IGZvciBzdWJzZXF1ZW50IHN0b3JlX2RyZWcgY2FsbHMuCisJZ2xvYmFsCQlmZXRjaF9kcmVnCitmZXRjaF9kcmVnOgorCW1vdi53CQkodGJsX2ZkcmVnLmIsJXBjLCVkMS53KjIpLCVkMAorCWptcAkJKHRibF9mZHJlZy5iLCVwYywlZDAudyoxKQorCit0YmxfZmRyZWc6CisJc2hvcnQJCWZkcmVnMCAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzEgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWcyIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnMyAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzQgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc1IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnNiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzcgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc4IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnOSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2EgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdiIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnYyAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2QgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdlIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnZiAtIHRibF9mZHJlZworCitmZHJlZzA6CisJbW92LmwJCUVYQ19EUkVHUysweDAoJWE2KSwlZDAKKwlydHMKK2ZkcmVnMToKKwltb3YubAkJRVhDX0RSRUdTKzB4NCglYTYpLCVkMAorCXJ0cworZmRyZWcyOgorCW1vdi5sCQklZDIsJWQwCisJcnRzCitmZHJlZzM6CisJbW92LmwJCSVkMywlZDAKKwlydHMKK2ZkcmVnNDoKKwltb3YubAkJJWQ0LCVkMAorCXJ0cworZmRyZWc1OgorCW1vdi5sCQklZDUsJWQwCisJcnRzCitmZHJlZzY6CisJbW92LmwJCSVkNiwlZDAKKwlydHMKK2ZkcmVnNzoKKwltb3YubAkJJWQ3LCVkMAorCXJ0cworZmRyZWc4OgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWQwCisJcnRzCitmZHJlZzk6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAKKwlydHMKK2ZkcmVnYToKKwltb3YubAkJJWEyLCVkMAorCXJ0cworZmRyZWdiOgorCW1vdi5sCQklYTMsJWQwCisJcnRzCitmZHJlZ2M6CisJbW92LmwJCSVhNCwlZDAKKwlydHMKK2ZkcmVnZDoKKwltb3YubAkJJWE1LCVkMAorCXJ0cworZmRyZWdlOgorCW1vdi5sCQkoJWE2KSwlZDAKKwlydHMKK2ZkcmVnZjoKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc3RvcmVfZHJlZ19sKCk6IHN0b3JlIGxvbmd3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gbG9uZ293cmQgdmFsdWUgdG8gc3RvcmUJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiByZWdpc3RlciB0byBmZXRjaCBmcm9tCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShkYXRhIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxLCBzdG9yZSB0aGUgbG9uZ3dvcmQgdmFsdWUJIworIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKKyMgd2hpbGUgdGhlIHJlc3QgYXJlIGluIHRoZWlyIGluaXRpYWwgcGxhY2VzLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9kcmVnX2wKK3N0b3JlX2RyZWdfbDoKKwltb3YudwkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3NkcmVnbC5iLCVwYywlZDEudyoxKQorCit0Ymxfc2RyZWdsOgorCXNob3J0CQlzZHJlZ2wwIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wxIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wyIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wzIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w0IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w1IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w2IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w3IC0gdGJsX3NkcmVnbAorCitzZHJlZ2wwOgorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ2wxOgorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4NCglYTYpCisJcnRzCitzZHJlZ2wyOgorCW1vdi5sCQklZDAsJWQyCisJcnRzCitzZHJlZ2wzOgorCW1vdi5sCQklZDAsJWQzCisJcnRzCitzZHJlZ2w0OgorCW1vdi5sCQklZDAsJWQ0CisJcnRzCitzZHJlZ2w1OgorCW1vdi5sCQklZDAsJWQ1CisJcnRzCitzZHJlZ2w2OgorCW1vdi5sCQklZDAsJWQ2CisJcnRzCitzZHJlZ2w3OgorCW1vdi5sCQklZDAsJWQ3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc3RvcmVfZHJlZ193KCk6IHN0b3JlIHdvcmQgdG8gZGF0YSByZWdpc3RlciBzcGVjaWZpZWQgYnkgZDEJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB3b3JkIHZhbHVlIHRvIHN0b3JlCQkJCQkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIHdvcmQgdmFsdWUJIworIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKKyMgd2hpbGUgdGhlIHJlc3QgYXJlIGluIHRoZWlyIGluaXRpYWwgcGxhY2VzLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9kcmVnX3cKK3N0b3JlX2RyZWdfdzoKKwltb3YudwkJKHRibF9zZHJlZ3cuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3NkcmVndy5iLCVwYywlZDEudyoxKQorCit0Ymxfc2RyZWd3OgorCXNob3J0CQlzZHJlZ3cwIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3cxIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3cyIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3czIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c0IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c1IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c2IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c3IC0gdGJsX3NkcmVndworCitzZHJlZ3cwOgorCW1vdi53CQklZDAsMitFWENfRFJFR1MrMHgwKCVhNikKKwlydHMKK3NkcmVndzE6CisJbW92LncJCSVkMCwyK0VYQ19EUkVHUysweDQoJWE2KQorCXJ0cworc2RyZWd3MjoKKwltb3YudwkJJWQwLCVkMgorCXJ0cworc2RyZWd3MzoKKwltb3YudwkJJWQwLCVkMworCXJ0cworc2RyZWd3NDoKKwltb3YudwkJJWQwLCVkNAorCXJ0cworc2RyZWd3NToKKwltb3YudwkJJWQwLCVkNQorCXJ0cworc2RyZWd3NjoKKwltb3YudwkJJWQwLCVkNgorCXJ0cworc2RyZWd3NzoKKwltb3YudwkJJWQwLCVkNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfYigpOiBzdG9yZSBieXRlIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYnl0ZSB2YWx1ZSB0byBzdG9yZQkJCQkJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSBieXRlIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ19iCitzdG9yZV9kcmVnX2I6CisJbW92LncJCSh0Ymxfc2RyZWdiLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ2IuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVnYjoKKwlzaG9ydAkJc2RyZWdiMCAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMSAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMiAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMyAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNCAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNSAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNiAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNyAtIHRibF9zZHJlZ2IKKworc2RyZWdiMDoKKwltb3YuYgkJJWQwLDMrRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ2IxOgorCW1vdi5iCQklZDAsMytFWENfRFJFR1MrMHg0KCVhNikKKwlydHMKK3NkcmVnYjI6CisJbW92LmIJCSVkMCwlZDIKKwlydHMKK3NkcmVnYjM6CisJbW92LmIJCSVkMCwlZDMKKwlydHMKK3NkcmVnYjQ6CisJbW92LmIJCSVkMCwlZDQKKwlydHMKK3NkcmVnYjU6CisJbW92LmIJCSVkMCwlZDUKKwlydHMKK3NkcmVnYjY6CisJbW92LmIJCSVkMCwlZDYKKwlydHMKK3NkcmVnYjc6CisJbW92LmIJCSVkMCwlZDcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlpbmNfYXJlZygpOiBpbmNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlciBieSB0aGUgdmFsdWUgaW4gZDAJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBhbW91bnQgdG8gaW5jcmVtZW50IGJ5CQkJCQkjCisjCWQxID0gaW5kZXggb2YgYWRkcmVzcyByZWdpc3RlciB0byBpbmNyZW1lbnQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoYWRkcmVzcyByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVHlwaWNhbGx5IHVzZWQgZm9yIGFuIGluc3RydWN0aW9uIHcvIGEgcG9zdC1pbmNyZW1lbnQgPGVhPiwJIworIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgaW5jcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKKyMgc3BlY2lmaWVkIGJ5IGQxLiBBMC9BMS9BNi9BNyByZXNpZGUgb24gdGhlIHN0YWNrLiBUaGUgcmVzdCByZXNpZGUJIworIyBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkJCQkJIworIwlGb3IgYTcsIGlmIHRoZSBpbmNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCisjIGluY3JlbWVudCBieSB0d28uIEZvciBhbnkgYTcgdXBkYXRlLCBzZXQgdGhlIG1pYTdfZmxhZyBzbyB0aGF0IGlmCSMKKyMgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBvY2N1cnMgbGF0ZXIgaW4gZW11bGF0aW9uLCB0aGlzIGFkZHJlc3MJIworIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWluY19hcmVnCitpbmNfYXJlZzoKKwltb3YudwkJKHRibF9pYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMSkKKwordGJsX2lhcmVnOgorCXNob3J0CQlpYXJlZzAgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWcxIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnMiAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzMgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc0IC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNSAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzYgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc3IC0gdGJsX2lhcmVnCisKK2lhcmVnMDoJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2lhcmVnMToJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2lhcmVnMjoJYWRkLmwJCSVkMCwlYTIKKwlydHMKK2lhcmVnMzoJYWRkLmwJCSVkMCwlYTMKKwlydHMKK2lhcmVnNDoJYWRkLmwJCSVkMCwlYTQKKwlydHMKK2lhcmVnNToJYWRkLmwJCSVkMCwlYTUKKwlydHMKK2lhcmVnNjoJYWRkLmwJCSVkMCwoJWE2KQorCXJ0cworaWFyZWc3Ogltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWNtcGkuYgkJJWQwLCYweDEKKwliZXEuYgkJaWFyZWc3YgorCWFkZC5sCQklZDAsRVhDX0E3KCVhNikKKwlydHMKK2lhcmVnN2I6CisJYWRkcS5sCQkmMHgyLEVYQ19BNyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZGVjX2FyZWcoKTogZGVjcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIgYnkgdGhlIHZhbHVlIGluIGQwCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYW1vdW50IHRvIGRlY3JlbWVudCBieQkJCQkJIworIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZGVjcmVtZW50CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHByZS1kZWNyZW1lbnQgPGVhPiwJIworIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgZGVjcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKKyMgc3BlY2lmaWVkIGJ5IGQxLiBBMC9BMS9BNi9BNyByZXNpZGUgb24gdGhlIHN0YWNrLiBUaGUgcmVzdCByZXNpZGUJIworIyBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkJCQkJIworIwlGb3IgYTcsIGlmIHRoZSBkZWNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCisjIGRlY3JlbWVudCBieSB0d28uIEZvciBhbnkgYTcgdXBkYXRlLCBzZXQgdGhlIG1kYTdfZmxhZyBzbyB0aGF0IGlmCSMKKyMgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBvY2N1cnMgbGF0ZXIgaW4gZW11bGF0aW9uLCB0aGlzIGFkZHJlc3MJIworIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWRlY19hcmVnCitkZWNfYXJlZzoKKwltb3YudwkJKHRibF9kYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZGFyZWcuYiwlcGMsJWQxLncqMSkKKwordGJsX2RhcmVnOgorCXNob3J0CQlkYXJlZzAgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWcxIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnMiAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzMgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc0IC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNSAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzYgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc3IC0gdGJsX2RhcmVnCisKK2RhcmVnMDoJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2RhcmVnMToJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2RhcmVnMjoJc3ViLmwJCSVkMCwlYTIKKwlydHMKK2RhcmVnMzoJc3ViLmwJCSVkMCwlYTMKKwlydHMKK2RhcmVnNDoJc3ViLmwJCSVkMCwlYTQKKwlydHMKK2RhcmVnNToJc3ViLmwJCSVkMCwlYTUKKwlydHMKK2RhcmVnNjoJc3ViLmwJCSVkMCwoJWE2KQorCXJ0cworZGFyZWc3Ogltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWNtcGkuYgkJJWQwLCYweDEKKwliZXEuYgkJZGFyZWc3YgorCXN1Yi5sCQklZDAsRVhDX0E3KCVhNikKKwlydHMKK2RhcmVnN2I6CisJc3VicS5sCQkmMHgyLEVYQ19BNyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWxvYWRfZnBuMSgpOiBsb2FkIEZQIHJlZ2lzdGVyIHZhbHVlIGludG8gRlBfU1JDKGE2KS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gaW5kZXggb2YgRlAgcmVnaXN0ZXIgdG8gbG9hZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gdmFsdWUgbG9hZGVkIGZyb20gRlAgcmVnaXN0ZXIgZmlsZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVzaW5nIHRoZSBpbmRleCBpbiBkMCwgbG9hZCBGUF9TUkMoYTYpIHdpdGggYSBudW1iZXIgZnJvbSB0aGUJIworIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlsb2FkX2ZwbjEKK2xvYWRfZnBuMToKKwltb3YudwkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMSkKKwordGJsX2xvYWRfZnBuMToKKwlzaG9ydAkJbG9hZF9mcG4xXzAgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV8xIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfMiAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzMgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV80IC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNSAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzYgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV83IC0gdGJsX2xvYWRfZnBuMQorCitsb2FkX2ZwbjFfMDoKKwltb3YubAkJMCtFWENfRlAwKCVhNiksIDArRlBfU1JDKCVhNikKKwltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfU1JDKCVhNikKKwltb3YubAkJOCtFWENfRlAwKCVhNiksIDgrRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV8xOgorCW1vdi5sCQkwK0VYQ19GUDEoJWE2KSwgMCtGUF9TUkMoJWE2KQorCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9TUkMoJWE2KQorCW1vdi5sCQk4K0VYQ19GUDEoJWE2KSwgOCtGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzI6CisJZm1vdm0ueAkJJjB4MjAsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfMzoKKwlmbW92bS54CQkmMHgxMCwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV80OgorCWZtb3ZtLngJCSYweDA4LCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzU6CisJZm1vdm0ueAkJJjB4MDQsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNjoKKwlmbW92bS54CQkmMHgwMiwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV83OgorCWZtb3ZtLngJCSYweDAxLCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWxvYWRfZnBuMigpOiBsb2FkIEZQIHJlZ2lzdGVyIHZhbHVlIGludG8gRlBfRFNUKGE2KS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gaW5kZXggb2YgRlAgcmVnaXN0ZXIgdG8gbG9hZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9EU1QoYTYpID0gdmFsdWUgbG9hZGVkIGZyb20gRlAgcmVnaXN0ZXIgZmlsZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVzaW5nIHRoZSBpbmRleCBpbiBkMCwgbG9hZCBGUF9EU1QoYTYpIHdpdGggYSBudW1iZXIgZnJvbSB0aGUJIworIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlsb2FkX2ZwbjIKK2xvYWRfZnBuMjoKKwltb3YudwkJKHRibF9sb2FkX2ZwbjIuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9sb2FkX2ZwbjIuYiwlcGMsJWQwLncqMSkKKwordGJsX2xvYWRfZnBuMjoKKwlzaG9ydAkJbG9hZF9mcG4yXzAgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl8xIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfMiAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzMgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl80IC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNSAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzYgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl83IC0gdGJsX2xvYWRfZnBuMgorCitsb2FkX2ZwbjJfMDoKKwltb3YubAkJMCtFWENfRlAwKCVhNiksIDArRlBfRFNUKCVhNikKKwltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfRFNUKCVhNikKKwltb3YubAkJOCtFWENfRlAwKCVhNiksIDgrRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl8xOgorCW1vdi5sCQkwK0VYQ19GUDEoJWE2KSwgMCtGUF9EU1QoJWE2KQorCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9EU1QoJWE2KQorCW1vdi5sCQk4K0VYQ19GUDEoJWE2KSwgOCtGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzI6CisJZm1vdm0ueAkJJjB4MjAsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfMzoKKwlmbW92bS54CQkmMHgxMCwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl80OgorCWZtb3ZtLngJCSYweDA4LCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzU6CisJZm1vdm0ueAkJJjB4MDQsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNjoKKwlmbW92bS54CQkmMHgwMiwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl83OgorCWZtb3ZtLngJCSYweDAxLCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2ZwcmVnKCk6IHN0b3JlIGFuIGZwIHZhbHVlIHRvIHRoZSBmcHJlZyBkZXNpZ25hdGVkIGQwLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBleHRlbmRlZCBwcmVjaXNpb24gdmFsdWUgdG8gc3RvcmUJCQkJIworIwlkMCAgPSBpbmRleCBvZiBmbG9hdGluZy1wb2ludCByZWdpc3RlcgkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTdG9yZSB0aGUgdmFsdWUgaW4gZnAwIHRvIHRoZSBGUCByZWdpc3RlciBkZXNpZ25hdGVkIGJ5IHRoZQkjCisjIHZhbHVlIGluIGQwLiBUaGUgRlAgbnVtYmVyIGNhbiBiZSBERU5PUk0gb3IgU05BTiBzbyB3ZSBoYXZlIHRvIGJlCSMKKyMgY2FyZWZ1bCB0aGF0IHdlIGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXN0b3JlX2ZwcmVnCitzdG9yZV9mcHJlZzoKKwltb3YudwkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoyKSwgJWQwCisJam1wCQkodGJsX3N0b3JlX2ZwcmVnLmIsJXBjLCVkMC53KjEpCisKK3RibF9zdG9yZV9mcHJlZzoKKwlzaG9ydAkJc3RvcmVfZnByZWdfMCAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ18xIC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzIgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfMyAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ180IC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzUgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNiAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ183IC0gdGJsX3N0b3JlX2ZwcmVnCisKK3N0b3JlX2ZwcmVnXzA6CisJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDAoJWE2KQorCXJ0cworc3RvcmVfZnByZWdfMToKKwlmbW92bS54CQkmMHg4MCwgRVhDX0ZQMSglYTYpCisJcnRzCitzdG9yZV9mcHJlZ18yOgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDIwCisJcnRzCitzdG9yZV9mcHJlZ18zOgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDEwCisJcnRzCitzdG9yZV9mcHJlZ180OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDA4CisJcnRzCitzdG9yZV9mcHJlZ181OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDA0CisJcnRzCitzdG9yZV9mcHJlZ182OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDAyCisJcnRzCitzdG9yZV9mcHJlZ183OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDAxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Rlbm9ybSgpOiBkZW5vcm1hbGl6ZSBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0CQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludHMgdG8gdGhlIG9wZXJhbmQgdG8gYmUgZGVub3JtYWxpemVkCQkJIworIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIworIwkJCQkJCQkJCSMKKyMJZDAgPSByb3VuZGluZyBwcmVjaXNpb24JCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gdGhlIGRlbm9ybWFsaXplZCByZXN1bHQJCQkJIworIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIworIwkJCQkJCQkJCSMKKyMJZDAgPSBndWFyZCxyb3VuZCxzdGlja3kJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGV4cG9uZW50IHVuZGVyZmxvdyB0aHJlc2hvbGQgZm9yIHRoZSBnaXZlbgkjCisjIHByZWNpc2lvbiwgc2hpZnQgdGhlIG1hbnRpc3NhIGJpdHMgdG8gdGhlIHJpZ2h0IGluIG9yZGVyIHJhaXNlIHRoZQkjCisjIGV4cG9uZW50IG9mIHRoZSBvcGVyYW5kIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWUuIFdoaWxlIHNoaWZ0aW5nIHRoZQkjCisjIG1hbnRpc3NhIGJpdHMgcmlnaHQsIG1haW50YWluIHRoZSB2YWx1ZSBvZiB0aGUgZ3VhcmQsIHJvdW5kLCBhbmQJIworIyBzdGlja3kgYml0cy4JCQkJCQkJCSMKKyMgb3RoZXIgbm90ZXM6CQkJCQkJCQkjCisjCSgxKSBfZGVub3JtKCkgaXMgY2FsbGVkIGJ5IHRoZSB1bmRlcmZsb3cgcm91dGluZXMJCSMKKyMJKDIpIF9kZW5vcm0oKSBkb2VzIE5PVCBhZmZlY3QgdGhlIHN0YXR1cyByZWdpc3RlcgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0YWJsZSBvZiBleHBvbmVudCB0aHJlc2hvbGQgdmFsdWVzIGZvciBlYWNoIHByZWNpc2lvbgorIwordGJsX3RocmVzaDoKKwlzaG9ydAkJMHgwCisJc2hvcnQJCXNnbF90aHJlc2gKKwlzaG9ydAkJZGJsX3RocmVzaAorCisJZ2xvYmFsCQlfZGVub3JtCitfZGVub3JtOgorIworIyBMb2FkIHRoZSBleHBvbmVudCB0aHJlc2hvbGQgZm9yIHRoZSBwcmVjaXNpb24gc2VsZWN0ZWQgYW5kIGNoZWNrCisjIHRvIHNlZSBpZiAodGhyZXNob2xkIC0gZXhwb25lbnQpIGlzID4gNjUgaW4gd2hpY2ggY2FzZSB3ZSBjYW4KKyMgc2ltcGx5IGNhbGN1bGF0ZSB0aGUgc3RpY2t5IGJpdCBhbmQgemVybyB0aGUgbWFudGlzc2EuIG90aGVyd2lzZQorIyB3ZSBoYXZlIHRvIGNhbGwgdGhlIGRlbm9ybWFsaXphdGlvbiByb3V0aW5lLgorIworCWxzci5iCQkmMHgyLCAlZDAJCSMgc2hpZnQgcHJlYyB0byBsbyBiaXRzCisJbW92LncJCSh0YmxfdGhyZXNoLmIsJXBjLCVkMC53KjIpLCAlZDEgIyBsb2FkIHByZWMgdGhyZXNob2xkCisJbW92LncJCSVkMSwgJWQwCQkjIGNvcHkgZDEgaW50byBkMAorCXN1Yi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBkaWZmID0gdGhyZXNob2xkIC0gZXhwCisJY21waS53CQklZDAsICY2NgkJIyBpcyBkaWZmID4gNjU/IChtYW50ICsgZyxyIGJpdHMpCisJYnBsLmIJCWRlbm9ybV9zZXRfc3RreQkJIyB5ZXM7IGp1c3QgY2FsYyBzdGlja3kKKworCWNsci5sCQklZDAJCQkjIGNsZWFyIGcscixzCisJYnRzdAkJJmluZXgyX2JpdCwgRlBTUl9FWENFUFQoJWE2KSAjIHllczsgd2FzIElORVgyIHNldD8KKwliZXEuYgkJZGVub3JtX2NhbGwJCSMgbm87IGRvbid0IGNoYW5nZSBhbnl0aGluZworCWJzZXQJCSYyOSwgJWQwCQkjIHllczsgc2V0IHN0aWNreSBiaXQKKworZGVub3JtX2NhbGw6CisJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybWFsaXplIHRoZSBudW1iZXIKKwlydHMKKworIworIyBhbGwgYml0IHdvdWxkIGhhdmUgYmVlbiBzaGlmdGVkIG9mZiBkdXJpbmcgdGhlIGRlbm9ybSBzbyBzaW1wbHkKKyMgY2FsY3VsYXRlIGlmIHRoZSBzdGlja3kgc2hvdWxkIGJlIHNldCBhbmQgY2xlYXIgdGhlIGVudGlyZSBtYW50aXNzYS4KKyMKK2Rlbm9ybV9zZXRfc3RreToKKwltb3YubAkJJjB4MjAwMDAwMDAsICVkMAkjIHNldCBzdGlja3kgYml0IGluIHJldHVybiB2YWx1ZQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBsb2FkIGV4cCB3aXRoIHRocmVzaG9sZAorCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIHNldCBkMSA9IDAgKG1zIG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIHNldCBkMiA9IDAgKG1zIG1hbnRpc3NhKQorCXJ0cworCisjCQkJCQkJCQkJIworIyBkbnJtX2xwKCk6IG5vcm1hbGl6ZSBleHBvbmVudC9tYW50aXNzYSB0byBzcGVjaWZpZWQgdGhyZXNoaG9sZAkjCisjCQkJCQkJCQkJIworIyBJTlBVVDoJCQkJCQkJCSMKKyMJJWEwCSAgIDogcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAkJIworIwklZDB7MzE6Mjl9IDogaW5pdGlhbCBndWFyZCxyb3VuZCxzdGlja3kJCQkJIworIwklZDF7MTU6MH0gIDogZGVub3JtYWxpemF0aW9uIHRocmVzaG9sZAkJCQkjCisjIE9VVFBVVDoJCQkJCQkJCSMKKyMJJWEwCSAgIDogcG9pbnRzIHRvIHRoZSBkZW5vcm1hbGl6ZWQgb3BlcmFuZAkJCSMKKyMJJWQwezMxOjI5fSA6IGZpbmFsIGd1YXJkLHJvdW5kLHN0aWNreQkJCQkjCisjCQkJCQkJCQkJIworCisjICoqKiBMb2NhbCBFcXVhdGVzICoqKiAjCitzZXQJR1JTLAkJTF9TQ1IyCQkJIyBnLHIscyB0ZW1wIHN0b3JhZ2UKK3NldAlGVEVNUF9MTzIsCUxfU0NSMQkJCSMgRlRFTVBfTE8gY29weQorCisJZ2xvYmFsCQlkbnJtX2xwCitkbnJtX2xwOgorCisjCisjIG1ha2UgYSBjb3B5IG9mIEZURU1QX0xPIGFuZCBwbGFjZSB0aGUgZyxyLHMgYml0cyBkaXJlY3RseSBhZnRlciBpdAorIyBpbiBtZW1vcnkgc28gYXMgdG8gbWFrZSB0aGUgYml0ZmllbGQgZXh0cmFjdGlvbiBmb3IgZGVub3JtYWxpemF0aW9uIGVhc2llci4KKyMKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgRlRFTVBfTE8yKCVhNikgIyBtYWtlIEZURU1QX0xPIGNvcHkKKwltb3YubAkJJWQwLCBHUlMoJWE2KQkJIyBwbGFjZSBnLHIscyBhZnRlciBpdAorCisjCisjIGNoZWNrIHRvIHNlZSBob3cgbXVjaCBsZXNzIHRoYW4gdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQgdGhlIG9wZXJhbmQKKyMgZXhwb25lbnQgaXMuCisjCisJbW92LmwJCSVkMSwgJWQwCQkjIGNvcHkgdGhlIGRlbm9ybSB0aHJlc2hvbGQKKwlzdWIudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZDEgPSB0aHJlc2hvbGQgLSB1bnMgZXhwb25lbnQKKwlibGUuYgkJZG5ybV9ub19scAkJIyBkMSA8PSAwCisJY21waS53CQklZDEsICYweDIwCQkjIGlzICggMCA8PSBkMSA8IDMyKSA/CisJYmx0LmIJCWNhc2VfMQkJCSMgeWVzCisJY21waS53CQklZDEsICYweDQwCQkjIGlzICgzMiA8PSBkMSA8IDY0KSA/CisJYmx0LmIJCWNhc2VfMgkJCSMgeWVzCisJYnJhLncJCWNhc2VfMwkJCSMgKGQxID49IDY0KQorCisjCisjIE5vIG5vcm1hbGl6YXRpb24gbmVjZXNzYXJ5CisjCitkbnJtX25vX2xwOgorCW1vdi5sCQlHUlMoJWE2KSwgJWQwCQkjIHJlc3RvcmUgb3JpZ2luYWwgZyxyLHMKKwlydHMKKworIworIyBjYXNlICgwPGQxPDMyKQorIworIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCisjICVkMSA9ICJuIiA9IGFtdCB0byBzaGlmdAorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+CisjCVwJICAgXAkJICAgICAgXAkJCSBcCisjCSBcCSAgICBcCQkgICAgICAgXAkJICBcCisjCSAgXAkgICAgIFwJCQlcCQkgICBcCisjCSAgIFwJICAgICAgXAkJCSBcCQkgICAgXAorIwkgICAgXAkgICAgICAgXAkJICBcCQkgICAgIFwKKyMJICAgICBcCQlcCQkgICBcCQkgICAgICBcCisjCSAgICAgIFwJCSBcCQkgICAgXAkJICAgICAgIFwKKyMJICAgICAgIFwJICBcCQkgICAgIFwJCQlcCisjCTwtKG4pLT48LSgzMiAtIG4pLT48LS0tLS0tKDMyKS0tLS0tLS0+PC0tLS0tLSgzMiktLS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLjB8IE5FV19ISSAgfCAgTkVXX0ZURU1QX0xPICAgICB8Z3JzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZV8xOgorCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgdGVtcCBzdG9yYWdlCisKKwltb3YudwkJJWQwLCBGVEVNUF9FWCglYTApCSMgZXhwb25lbnQgPSBkZW5vcm0gdGhyZXNob2xkCisJbW92LmwJCSYzMiwgJWQwCisJc3ViLncJCSVkMSwgJWQwCQkjICVkMCA9IDMyIC0gJWQxCisKKwljbXBpLncJCSVkMSwgJjI5CQkjIGlzIHNoZnQgYW10ID49IDI5CisJYmx0LmIJCWNhc2UxX2V4dHJhY3QJCSMgbm87IG5vIGZpeCBuZWVkZWQKKwltb3YuYgkJR1JTKCVhNiksICVkMgorCW9yLmIJCSVkMiwgMytGVEVNUF9MTzIoJWE2KQorCitjYXNlMV9leHRyYWN0OgorCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXsmMDolZDB9LCAlZDIgIyAlZDIgPSBuZXcgRlRFTVBfSEkKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQwOiYzMn0sICVkMSAjICVkMSA9IG5ldyBGVEVNUF9MTworCWJmZXh0dQkJRlRFTVBfTE8yKCVhNil7JWQwOiYzMn0sICVkMCAjICVkMCA9IG5ldyBHLFIsUworCisJbW92LmwJCSVkMiwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBGVEVNUF9ISQorCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgRlRFTVBfTE8KKworCWJmdHN0CQklZDB7JjI6JjMwfQkJIyB3ZXJlIGJpdHMgc2hpZnRlZCBvZmY/CisJYmVxLmIJCWNhc2UxX3N0aWNreV9jbGVhcgkjIG5vOyBnbyBmaW5pc2gKKwlic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyB5ZXM7IHNldCBzdGlja3kgYml0CisKK2Nhc2UxX3N0aWNreV9jbGVhcjoKKwlhbmQubAkJJjB4ZTAwMDAwMDAsICVkMAkjIGNsZWFyIGFsbCBidXQgRyxSLFMKKwltb3YubAkJKCVzcCkrLCAlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCisJcnRzCisKKyMKKyMgY2FzZSAoMzI8PWQxPDY0KQorIworIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCisjICVkMSA9ICJuIiA9IGFtdCB0byBzaGlmdAorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+CisjCVwJICAgXAkJICAgICAgXAorIwkgXAkgICAgXAkJICAgICAgIFwKKyMJICBcCSAgICAgXAkJCS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJICAgXAkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgXAorIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQkJICBcCQkgICAgXAorIwkJCSAgICAgICBcCSAgIFwJCSAgICAgXAorIwkJCQlcCSAgICBcCQkgICAgICBcCisjCQkJCSBcCSAgICAgXAkJICAgICAgIFwKKyMJPC0tLS0tLS0oMzIpLS0tLS0tPjwtKG4pLT48LSgzMiAtIG4pLT48LS0tLS0tKDMyKS0tLS0tLS0+CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4wfCBORVdfTE8gICAgIHxncnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlXzI6CisJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSB0ZW1wIHN0b3JhZ2UKKworCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKKwlzdWJpLncJCSYweDIwLCAlZDEJCSMgJWQxIG5vdyBiZXR3ZWVuIDAgYW5kIDMyCisJbW92LmwJCSYweDIwLCAlZDAKKwlzdWIudwkJJWQxLCAlZDAJCSMgJWQwID0gMzIgLSAlZDEKKworIyBzdWJ0bGUgc3RlcCBoZXJlOyBvciBpbiB0aGUgZyxyLHMgYXQgdGhlIGJvdHRvbSBvZiBGVEVNUF9MTyB0byBtaW5pbWl6ZQorIyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gY2hlY2sgZm9yIHRoZSBzdGlja3kgZGV0ZWN0LgorIyBpdCBvbmx5IHBsYXlzIGEgcm9sZSBpbiBzaGlmdCBhbW91bnRzIG9mIDYxLTYzLgorCW1vdi5iCQlHUlMoJWE2KSwgJWQyCisJb3IuYgkJJWQyLCAzK0ZURU1QX0xPMiglYTYpCisKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjA6JWQwfSwgJWQyICMgJWQyID0gbmV3IEZURU1QX0xPCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMDomMzJ9LCAlZDEgIyAlZDEgPSBuZXcgRyxSLFMKKworCWJmdHN0CQklZDF7JjI6JjMwfQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJuZS5iCQljYXNlMl9zZXRfc3RpY2t5CSMgeWVzOyBzZXQgc3RpY2t5IGJpdAorCWJmdHN0CQlGVEVNUF9MTzIoJWE2KXslZDA6JjMxfQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CisJYm5lLmIJCWNhc2UyX3NldF9zdGlja3kJIyB5ZXM7IHNldCBzdGlja3kgYml0CisKKwltb3YubAkJJWQxLCAlZDAJCSMgbW92ZSBuZXcgRyxSLFMgdG8gJWQwCisJYnJhLmIJCWNhc2UyX2VuZAorCitjYXNlMl9zZXRfc3RpY2t5OgorCW1vdi5sCQklZDEsICVkMAkJIyBtb3ZlIG5ldyBHLFIsUyB0byAlZDAKKwlic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyBzZXQgc3RpY2t5IGJpdAorCitjYXNlMl9lbmQ6CisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgc3RvcmUgRlRFTVBfSEkgPSAwCisJbW92LmwJCSVkMiwgRlRFTVBfTE8oJWEwKQkjIHN0b3JlIEZURU1QX0xPCisJYW5kLmwJCSYweGUwMDAwMDAwLCAlZDAJIyBjbGVhciBhbGwgYnV0IEcsUixTCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKKwlydHMKKworIworIyBjYXNlIChkMT49NjQpCisjCisjICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKKyMgJWQxID0gYW10IHRvIHNoaWZ0CisjCitjYXNlXzM6CisJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBkZW5vcm0gdGhyZXNob2xkCisKKwljbXBpLncJCSVkMSwgJjY1CQkjIGlzIHNoaWZ0IGFtdCA+IDY1PworCWJsdC5iCQljYXNlM182NAkJIyBubzsgaXQncyA9PSA2NAorCWJlcS5iCQljYXNlM182NQkJIyBubzsgaXQncyA9PSA2NQorCisjCisjIGNhc2UgKGQxPjY1KQorIworIyBTaGlmdCB2YWx1ZSBpcyA+IDY1IGFuZCBvdXQgb2YgcmFuZ2UuIEFsbCBiaXRzIGFyZSBzaGlmdGVkIG9mZi4KKyMgUmV0dXJuIGEgemVybyBtYW50aXNzYSB3aXRoIHRoZSBzdGlja3kgYml0IHNldAorIworCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQorCW1vdi5sCQkmMHgyMDAwMDAwMCwgJWQwCSMgc2V0IHN0aWNreSBiaXQKKwlydHMKKworIworIyBjYXNlIChkMSA9PSA2NCkKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtLS0tLS0tKDMyKS0tLS0tLT4KKyMJXAkJICAgXAorIwkgXAkJICAgIFwKKyMJICBcCQkgICAgIFwKKyMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICAgXAorIwkJCQkJICAgXAkJICAgICBcCisjCQkJCQkgICAgXAkJICAgICAgXAorIwkJCQkJICAgICBcCQkgICAgICAgXAorIwkJCQkJICAgICAgPC0tLS0tLS0oMzIpLS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uLi4uLi4uLi4uLi4uMHxncnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlM182NDoKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgZmV0Y2ggaGkobWFudGlzc2EpCisJbW92LmwJCSVkMCwgJWQxCQkjIG1ha2UgYSBjb3B5CisJYW5kLmwJCSYweGMwMDAwMDAwLCAlZDAJIyBleHRyYWN0IEcsUgorCWFuZC5sCQkmMHgzZmZmZmZmZiwgJWQxCSMgZXh0cmFjdCBvdGhlciBiaXRzCisKKwlicmEuYgkJY2FzZTNfY29tcGxldGUKKworIworIyBjYXNlIChkMSA9PSA2NSkKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtLS0tLS0tKDMyKS0tLS0tLT4KKyMJXAkJICAgXAorIwkgXAkJICAgIFwKKyMJICBcCQkgICAgIFwKKyMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgIFwKKyMJCQkJCSAgICBcCQkgICAgIFwKKyMJCQkJCSAgICAgXAkJICAgICAgXAorIwkJCQkJICAgICAgXAkJICAgICAgIFwKKyMJCQkJCSAgICAgICA8LS0tLS0tLSgzMSktLS0tLT4KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwwLi4uLi4uLi4uLi4uLi4uMHwwLi4uLi4uLi4uLi4uLi4uLjB8MHJzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZTNfNjU6CisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGZldGNoIGhpKG1hbnRpc3NhKQorCWFuZC5sCQkmMHg4MDAwMDAwMCwgJWQwCSMgZXh0cmFjdCBSIGJpdAorCWxzci5sCQkmMHgxLCAlZDAJCSMgc2hpZnQgaGlnaCBiaXQgaW50byBSIGJpdAorCWFuZC5sCQkmMHg3ZmZmZmZmZiwgJWQxCSMgZXh0cmFjdCBvdGhlciBiaXRzCisKK2Nhc2UzX2NvbXBsZXRlOgorIyBsYXN0IG9wZXJhdGlvbiBkb25lIHdhcyBhbiAiYW5kIiBvZiB0aGUgYml0cyBzaGlmdGVkIG9mZiBzbyB0aGUgY29uZGl0aW9uCisjIGNvZGVzIGFyZSBhbHJlYWR5IHNldCBzbyBicmFuY2ggYWNjb3JkaW5nbHkuCisJYm5lLmIJCWNhc2UzX3NldF9zdGlja3kJIyB5ZXM7IGdvIHNldCBuZXcgc3RpY2t5CisJdHN0LmwJCUZURU1QX0xPKCVhMCkJCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKKwl0c3QuYgkJR1JTKCVhNikJCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKKworIworIyBubyBiaXRzIHdlcmUgc2hpZnRlZCBvZmYgc28gZG9uJ3Qgc2V0IHRoZSBzdGlja3kgYml0LgorIyB0aGUgZ3VhcmQgYW5kCisjIHRoZSBlbnRpcmUgbWFudGlzc2EgaXMgemVyby4KKyMKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKKwlydHMKKworIworIyBzb21lIGJpdHMgd2VyZSBzaGlmdGVkIG9mZiBzbyBzZXQgdGhlIHN0aWNreSBiaXQuCisjIHRoZSBlbnRpcmUgbWFudGlzc2EgaXMgemVyby4KKyMKK2Nhc2UzX3NldF9zdGlja3k6CisJYnNldAkJJnJuZF9zdGt5X2JpdCwlZDAJIyBzZXQgbmV3IHN0aWNreSBiaXQKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcm91bmQoKTogcm91bmQgcmVzdWx0IGFjY29yZGluZyB0byBwcmVjaXNpb24vbW9kZQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAJICA9IHB0ciB0byBpbnB1dCBvcGVyYW5kIGluIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAkjCisjCWQxKGhpKSAgICA9IGNvbnRhaW5zIHJvdW5kaW5nIHByZWNpc2lvbjoJCQkjCisjCQkJZXh0ID0gJDAwMDB4eHh4CQkJCQkjCisjCQkJc2dsID0gJDAwMDR4eHh4CQkJCQkjCisjCQkJZGJsID0gJDAwMDh4eHh4CQkJCQkjCisjCWQxKGxvKQkgID0gY29udGFpbnMgcm91bmRpbmcgbW9kZToJCQkJIworIwkJCVJOICA9ICR4eHh4MDAwMAkJCQkJIworIwkJCVJaICA9ICR4eHh4MDAwMQkJCQkJIworIwkJCVJNICA9ICR4eHh4MDAwMgkJCQkJIworIwkJCVJQICA9ICR4eHh4MDAwMwkJCQkJIworIwlkMHszMToyOX0gPSBjb250YWlucyB0aGUgZyxyLHMgYml0cyAoZXh0ZW5kZWQpCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHJvdW5kZWQgcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPbiByZXR1cm4gdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgYTAgaXMgY29ycmVjdGx5IHJvdW5kZWQsCSMKKyMJYTAgaXMgcHJlc2VydmVkIGFuZCB0aGUgZy1yLXMgYml0cyBpbiBkMCBhcmUgY2xlYXJlZC4JCSMKKyMJVGhlIHJlc3VsdCBpcyBub3QgdHlwZWQgLSB0aGUgdGFnIGZpZWxkIGlzIGludmFsaWQuICBUaGUJIworIwlyZXN1bHQgaXMgc3RpbGwgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdC4JCSMKKyMJCQkJCQkJCQkjCisjCVRoZSBJTkVYIGJpdCBvZiBVU0VSX0ZQU1Igd2lsbCBiZSBzZXQgaWYgdGhlIHJvdW5kZWQgcmVzdWx0IHdhcwkjCisjCWluZXhhY3QgKGkuZS4gaWYgYW55IG9mIHRoZSBnLXItcyBiaXRzIHdlcmUgc2V0KS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9yb3VuZAorX3JvdW5kOgorIworIyBleHRfZ3JzKCkgbG9va3MgYXQgdGhlIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgc2V0cyB0aGUgYXBwcm9wcmlhdGUKKyMgRyxSLFMgYml0cy4KKyMgSWYgKEcsUixTID09IDApIHRoZW4gcmVzdWx0IGlzIGV4YWN0IGFuZCByb3VuZCBpcyBkb25lLCBlbHNlIHNldAorIyB0aGUgaW5leCBmbGFnIGluIHN0YXR1cyByZWcgYW5kIGNvbnRpbnVlLgorIworCWJzci5sCQlleHRfZ3JzCQkJIyBleHRyYWN0IEcsUixTCisKKwl0c3QubAkJJWQwCQkJIyBhcmUgRyxSLFMgemVybz8KKwliZXEudwkJdHJ1bmNhdGUJCSMgeWVzOyByb3VuZCBpcyBjb21wbGV0ZQorCisJb3IudwkJJmlueDJhX21hc2ssIDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgaW5leDIvYWluZXgKKworIworIyBVc2Ugcm91bmRpbmcgbW9kZSBhcyBhbiBpbmRleCBpbnRvIGEganVtcCB0YWJsZSBmb3IgdGhlc2UgbW9kZXMuCisjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGFzc3VtZXMgZ3JzICE9IDAuCisjCisJbW92LncJCSh0YmxfbW9kZS5iLCVwYywlZDEudyoyKSwgJWExICMgbG9hZCBqdW1wIG9mZnNldAorCWptcAkJKHRibF9tb2RlLmIsJXBjLCVhMSkJIyBqbXAgdG8gcm5kIG1vZGUgaGFuZGxlcgorCit0YmxfbW9kZToKKwlzaG9ydAkJcm5kX25lYXIgLSB0YmxfbW9kZQorCXNob3J0CQl0cnVuY2F0ZSAtIHRibF9tb2RlCSMgUlogYWx3YXlzIHRydW5jYXRlcworCXNob3J0CQlybmRfbW51cyAtIHRibF9tb2RlCisJc2hvcnQJCXJuZF9wbHVzIC0gdGJsX21vZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJUk9VTkQgUExVUyBJTkZJTklUWQkJCQkJIworIwkJCQkJCQkJIworIwlJZiBzaWduIG9mIGZwIG51bWJlciA9IDAgKHBvc2l0aXZlKSwgdGhlbiBhZGQgMSB0byBsLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcm5kX3BsdXM6CisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGNoZWNrIGZvciBzaWduCisJYm1pLncJCXRydW5jYXRlCQkjIGlmIHBvc2l0aXZlIHRoZW4gdHJ1bmNhdGUKKworCW1vdi5sCQkmMHhmZmZmZmZmZiwgJWQwCSMgZm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncworCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyA9IHNnbD8KKwliZXEudwkJYWRkX3NnbAkJCSMgeWVzCisJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAorCWJyYS53CQlhZGRfZXh0CQkJIyBubzsgaXQncyBleHQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJUk9VTkQgTUlOVVMgSU5GSU5JVFkJCQkJCSMKKyMJCQkJCQkJCSMKKyMJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAxIChuZWdhdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3JuZF9tbnVzOgorCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBjaGVjayBmb3Igc2lnbgorCWJwbC53CQl0cnVuY2F0ZQkJIyBpZiBuZWdhdGl2ZSB0aGVuIHRydW5jYXRlCisKKwltb3YubAkJJjB4ZmZmZmZmZmYsICVkMAkjIGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKKwlzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CisJYmVxLncJCWFkZF9zZ2wJCQkjIHllcworCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKKwlicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCVJPVU5EIE5FQVJFU1QJCQkJCQkjCisjCQkJCQkJCQkjCisjCUlmIChnPTEpLCB0aGVuIGFkZCAxIHRvIGwgYW5kIGlmIChyPXM9MCksIHRoZW4gY2xlYXIgbAkjCisjCU5vdGUgdGhhdCB0aGlzIHdpbGwgcm91bmQgdG8gZXZlbiBpbiBjYXNlIG9mIGEgdGllLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcm5kX25lYXI6CisJYXNsLmwJCSYweDEsICVkMAkJIyBzaGlmdCBnLWJpdCB0byBjLWJpdAorCWJjYy53CQl0cnVuY2F0ZQkJIyBpZiAoZz0xKSB0aGVuCisKKwlzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CisJYmVxLncJCWFkZF9zZ2wJCQkjIHllcworCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKKwlicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CisKKyMgKioqIExPQ0FMIEVRVUFURVMgKioqCitzZXQJYWRfMV9zZ2wsCTB4MDAwMDAxMDAJIyBjb25zdGFudCB0byBhZGQgMSB0byBsLWJpdCBpbiBzZ2wgcHJlYworc2V0CWFkXzFfZGJsLAkweDAwMDAwODAwCSMgY29uc3RhbnQgdG8gYWRkIDEgdG8gbC1iaXQgaW4gZGJsIHByZWMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlBREQgU0lOR0xFCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZF9zZ2w6CisJYWRkLmwJCSZhZF8xX3NnbCwgRlRFTVBfSEkoJWEwKQorCWJjYy5iCQlzY2NfY2xyCQkJIyBubyBtYW50aXNzYSBvdmVyZmxvdworCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBzaGlmdCB2LWJpdCBiYWNrIGluCisJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgc2hpZnQgdi1iaXQgYmFjayBpbgorCWFkZC53CQkmMHgxLCBGVEVNUF9FWCglYTApCSMgYW5kIGluY3IgZXhwb25lbnQKK3NjY19jbHI6CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBmb3IgcnMgPSAwCisJYm5lLmIJCXNnbF9kb25lCisJYW5kLncJCSYweGZlMDAsIEZURU1QX0hJKzIoJWEwKSAjIGNsZWFyIHRoZSBsLWJpdAorc2dsX2RvbmU6CisJYW5kLmwJCSYweGZmZmZmZjAwLCBGVEVNUF9ISSglYTApICMgdHJ1bmNhdGUgYml0cyBiZXlvbmQgc2dsIGxpbWl0CisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgZDIKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlBREQgRVhURU5ERUQJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkX2V4dDoKKwlhZGRxLmwJCSYxLEZURU1QX0xPKCVhMCkJIyBhZGQgMSB0byBsLWJpdAorCWJjYy5iCQl4Y2NfY2xyCQkJIyB0ZXN0IGZvciBjYXJyeSBvdXQKKwlhZGRxLmwJCSYxLEZURU1QX0hJKCVhMCkJIyBwcm9wYWdhdGUgY2FycnkKKwliY2MuYgkJeGNjX2NscgorCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfSEkrMiglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0CisJcm94ci53CQlGVEVNUF9MTyglYTApCisJcm94ci53CQlGVEVNUF9MTysyKCVhMCkKKwlhZGQudwkJJjB4MSxGVEVNUF9FWCglYTApCSMgYW5kIGluYyBleHAKK3hjY19jbHI6CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBycyA9IDAKKwlibmUuYgkJYWRkX2V4dF9kb25lCisJYW5kLmIJCSYweGZlLEZURU1QX0xPKzMoJWEwKQkjIGNsZWFyIHRoZSBsIGJpdAorYWRkX2V4dF9kb25lOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCUFERCBET1VCTEUJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkX2RibDoKKwlhZGQubAkJJmFkXzFfZGJsLCBGVEVNUF9MTyglYTApICMgYWRkIDEgdG8gbHNiCisJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CisJYWRkcS5sCQkmMHgxLCBGVEVNUF9ISSglYTApCSMgcHJvcGFnYXRlIGNhcnJ5CisJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CisKKwlyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfTE8oJWEwKQorCXJveHIudwkJRlRFTVBfTE8rMiglYTApCisJYWRkcS53CQkmMHgxLCBGVEVNUF9FWCglYTApCSMgaW5jciBleHBvbmVudAorZGNjX2NscjoKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IGZvciBycyA9IDAKKwlibmUuYgkJZGJsX2RvbmUKKwlhbmQudwkJJjB4ZjAwMCwgRlRFTVBfTE8rMiglYTApICMgY2xlYXIgdGhlIGwtYml0CisKK2RibF9kb25lOgorCWFuZC5sCQkmMHhmZmZmZjgwMCxGVEVNUF9MTyglYTApICMgdHJ1bmNhdGUgYml0cyBiZXlvbmQgZGJsIGxpbWl0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUcnVuY2F0ZSBhbGwgb3RoZXIgYml0cyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3RydW5jYXRlOgorCXN3YXAJCSVkMQkJCSMgc2VsZWN0IHJuZCBwcmVjCisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjIHNnbD8KKwliZXEudwkJc2dsX2RvbmUJCSMgeWVzCisJYmd0LmIJCWRibF9kb25lCQkjIG5vOyBpdCdzIGRibAorCXJ0cwkJCQkJIyBubzsgaXQncyBleHQKKworCisjCisjIGV4dF9ncnMoKTogZXh0cmFjdCBndWFyZCwgcm91bmQgYW5kIHN0aWNreSBiaXRzIGFjY29yZGluZyB0bworIwkgICAgIHJvdW5kaW5nIHByZWNpc2lvbi4KKyMKKyMgSU5QVVQKKyMJZDAJICAgPSBleHRlbmRlZCBwcmVjaXNpb24gZyxyLHMgKGluIGQwezMxOjI5fSkKKyMJZDEJICAgPSB7UFJFQyxST1VORH0KKyMgT1VUUFVUCisjCWQwezMxOjI5fSAgPSBndWFyZCwgcm91bmQsIHN0aWNreQorIworIyBUaGUgZXh0X2dycyBleHRyYWN0IHRoZSBndWFyZC9yb3VuZC9zdGlja3kgYml0cyBhY2NvcmRpbmcgdG8gdGhlCisjIHNlbGVjdGVkIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQgaXMgY2FsbGVkIGJ5IHRoZSByb3VuZCBzdWJyb3V0aW5lCisjIG9ubHkuICBBbGwgcmVnaXN0ZXJzIGV4Y2VwdCBkMCBhcmUga2VwdCBpbnRhY3QuIGQwIGJlY29tZXMgYW4KKyMgdXBkYXRlZCBndWFyZCxyb3VuZCxzdGlja3kgaW4gZDB7MzE6Mjl9CisjCisjIE5vdGVzOiB0aGUgZXh0X2dycyB1c2VzIHRoZSByb3VuZCBQUkVDLCBhbmQgdGhlcmVmb3JlIGhhcyB0byBzd2FwIGQxCisjCSBwcmlvciB0byB1c2FnZSwgYW5kIG5lZWRzIHRvIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwuIHRoaXMKKyMJIHJvdXRpbmUgaXMgdGlnaHRseSB0aWVkIHRvIHRoZSByb3VuZCByb3V0aW5lIGFuZCBub3QgbWVhbnQgdG8KKyMJIHVwaG9sZCBzdGFuZGFyZCBzdWJyb3V0aW5lIGNhbGxpbmcgcHJhY3RpY2VzLgorIworCitleHRfZ3JzOgorCXN3YXAJCSVkMQkJCSMgaGF2ZSBkMS53IHBvaW50IHRvIHJvdW5kIHByZWNpc2lvbgorCXRzdC5iCQklZDEJCQkjIGlzIHJuZCBwcmVjID0gZXh0ZW5kZWQ/CisJYm5lLmIJCWV4dF9ncnNfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworIworIyAlZDAgYWN0dWFsbHkgYWxyZWFkeSBob2xkIGcscixzIHNpbmNlIF9yb3VuZCgpIGhhZCBpdCBiZWZvcmUgY2FsbGluZworIyB0aGlzIGZ1bmN0aW9uLiBzbywgYXMgbG9uZyBhcyB3ZSBkb24ndCBkaXN0dXJiIGl0LCB3ZSBhcmUgInJldHVybmluZyIgaXQuCisjCitleHRfZ3JzX2V4dDoKKwlzd2FwCQklZDEJCQkjIHllczsgcmV0dXJuIHRvIGNvcnJlY3QgcG9zaXRpb25zCisJcnRzCisKK2V4dF9ncnNfbm90X2V4dDoKKwltb3ZtLmwJCSYweDMwMDAsIC0oJXNwKQkJIyBtYWtlIHNvbWUgdGVtcCByZWdpc3RlcnMge2QyL2QzfQorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcm5kIHByZWMgPSBzZ2w/CisJYm5lLmIJCWV4dF9ncnNfZGJsCQkjIG5vOyBnbyBoYW5kbGUgZGJsCisKKyMKKyMgc2dsOgorIwk5NgkJNjQJICA0MAkzMgkJMAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8IEVYUAl8WFhYWFhYWHwJICB8eHgJfAkJfGdyc3wKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJCQk8LS0oMjQpLS0tPm5uXAkJCSAgIC8KKyMJCQkJICAgZWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCQkJCSAgIHd3CQl8CisjCQkJCQkJdgorIwkJCQkgICBncgkgICBuZXcgc3RpY2t5CisjCitleHRfZ3JzX3NnbDoKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjI0OiYyfSwgJWQzICMgc2dsIHByZWMuIGctciBhcmUgMiBiaXRzIHJpZ2h0CisJbW92LmwJCSYzMCwgJWQyCQkjIG9mIHRoZSBzZ2wgcHJlYy4gbGltaXRzCisJbHNsLmwJCSVkMiwgJWQzCQkjIHNoaWZ0IGctciBiaXRzIHRvIE1TQiBvZiBkMworCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDIJIyBnZXQgd29yZCAyIGZvciBzLWJpdCB0ZXN0CisJYW5kLmwJCSYweDAwMDAwMDNmLCAlZDIJIyBzIGJpdCBpcyB0aGUgb3Igb2YgYWxsIG90aGVyCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBiaXRzIHRvIHRoZSByaWdodCBvZiBnLXIKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQkJIyB0ZXN0IGxvd2VyIG1hbnRpc3NhCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCXRzdC5sCQklZDAJCQkjIHRlc3Qgb3JpZ2luYWwgZyxyLHMKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CisJYnJhLmIJCWV4dF9ncnNfZW5kX3NkCQkjIGlmIHdvcmRzIDMgYW5kIDQgYXJlIGNsciwgZXhpdAorCisjCisjIGRibDoKKyMJOTYJCTY0CQkzMgkgMTEJMAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8IEVYUAl8WFhYWFhYWHwJCXwJIHx4eAl8Z3JzfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkJCQkJCSAgbm5cCSAgICAvCisjCQkJCQkJICBlZSAtLS0tLS0tCisjCQkJCQkJICB3dwl8CisjCQkJCQkJCXYKKyMJCQkJCQkgIGdyCW5ldyBzdGlja3kKKyMKK2V4dF9ncnNfZGJsOgorCWJmZXh0dQkJRlRFTVBfTE8oJWEwKXsmMjE6JjJ9LCAlZDMgIyBkYmwtcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKKwltb3YubAkJJjMwLCAlZDIJCSMgb2YgdGhlIGRibCBwcmVjLiBsaW1pdHMKKwlsc2wubAkJJWQyLCAlZDMJCSMgc2hpZnQgZy1yIGJpdHMgdG8gdGhlIE1TQiBvZiBkMworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDIJIyBnZXQgbG93ZXIgbWFudGlzc2EgIGZvciBzLWJpdCB0ZXN0CisJYW5kLmwJCSYweDAwMDAwMWZmLCAlZDIJIyBzIGJpdCBpcyB0aGUgb3ItaW5nIG9mIGFsbAorCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgb3RoZXIgYml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCisJdHN0LmwJCSVkMAkJCSMgdGVzdCB3b3JkIG9yaWdpbmFsIGcscixzCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCWJyYS5iCQlleHRfZ3JzX2VuZF9zZAkJIyBpZiBjbGVhciwgZXhpdAorCitleHRfZ3JzX3N0X3N0a3k6CisJYnNldAkJJnJuZF9zdGt5X2JpdCwgJWQzCSMgc2V0IHN0aWNreSBiaXQKK2V4dF9ncnNfZW5kX3NkOgorCW1vdi5sCQklZDMsICVkMAkJIyByZXR1cm4gZ3JzIHRvIGQwCisKKwltb3ZtLmwJCSglc3ApKywgJjB4YwkJIyByZXN0b3JlIHNjcmF0Y2ggcmVnaXN0ZXJzIHtkMi9kM30KKworCXN3YXAJCSVkMQkJCSMgcmVzdG9yZSBkMSB0byBvcmlnaW5hbAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG5vcm0oKTogbm9ybWFsaXplIHRoZSBtYW50aXNzYSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQuIHRoZQkjCisjCSAgaW5wdXQgb3BlcmFuZCBzaG91bGQgbm90IGJlIG5vcm1hbGl6ZWQgYWxyZWFkeS4JCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIGZwIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kIHRvIG5vcm1hbGl6ZQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDAgPSBudW1iZXIgb2YgYml0IHBvc2l0aW9ucyB0aGUgbWFudGlzc2Egd2FzIHNoaWZ0ZWQJCSMKKyMJYTAgPSB0aGUgaW5wdXQgb3BlcmFuZCdzIG1hbnRpc3NhIGlzIG5vcm1hbGl6ZWQ7IHRoZSBleHBvbmVudAkjCisjCSAgICAgaXMgdW5jaGFuZ2VkLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlub3JtCitub3JtOgorCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgc29tZSB0ZW1wIHJlZ3MKKwltb3YubAkJJWQzLCAtKCVzcCkKKworCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBsb2FkIGhpKG1hbnRpc3NhKQorCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDEJIyBsb2FkIGxvKG1hbnRpc3NhKQorCisJYmZmZm8JCSVkMHsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/CisJYmVxLmIJCW5vcm1fbG8JCQkjIGhpKG1hbikgaXMgYWxsIHplcm9lcyEKKworbm9ybV9oaToKKwlsc2wubAkJJWQyLCAlZDAJCSMgbGVmdCBzaGlmdCBoaShtYW4pCisJYmZleHR1CQklZDF7JjA6JWQyfSwgJWQzCSMgZXh0cmFjdCBsbyBiaXRzCisKKwlvci5sCQklZDMsICVkMAkJIyBjcmVhdGUgaGkobWFuKQorCWxzbC5sCQklZDIsICVkMQkJIyBjcmVhdGUgbG8obWFuKQorCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBoaShtYW4pCisJbW92LmwJCSVkMSwgRlRFTVBfTE8oJWEwKQkjIHN0b3JlIG5ldyBsbyhtYW4pCisKKwltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAorCisJbW92LmwJCSglc3ApKywgJWQzCQkjIHJlc3RvcmUgdGVtcCByZWdzCisJbW92LmwJCSglc3ApKywgJWQyCisKKwlydHMKKworbm9ybV9sbzoKKwliZmZmbwkJJWQxeyYwOiYzMn0sICVkMgkjIGhvdyBtYW55IHBsYWNlcyB0byBzaGlmdD8KKwlsc2wubAkJJWQyLCAlZDEJCSMgc2hpZnQgbG8obWFuKQorCWFkZC5sCQkmMzIsICVkMgkJIyBhZGQgMzIgdG8gc2hmdCBhbW91bnQKKworCW1vdi5sCQklZDEsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBoaShtYW4pCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgbG8obWFuKSBpcyBub3cgemVybworCisJbW92LmwJCSVkMiwgJWQwCQkjIHJldHVybiBzaGlmdCBhbW91bnQKKworCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncworCW1vdi5sCQkoJXNwKSssICVkMgorCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdW5ub3JtX2ZpeCgpOiAtIGNoYW5nZXMgYW4gVU5OT1JNIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIworIwkJLSByZXR1cm5zIGNvcnJlc3BvbmRpbmcgb3B0eXBlIHRhZwkJCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXVubm9ybV9maXgoKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub3JtKCkgLSBub3JtYWxpemUgdGhlIG1hbnRpc3NhCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gdW5ub3JtYWxpemVkIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQwID0gb3B0eXBlIHRhZyAtIGlzIGNvcnJlY3RlZCB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKKyMJYTAgPSBpbnB1dCBvcGVyYW5kIGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIG5vcm0sIGRlbm9ybSwgb3IJIworIwkgICAgIHplcm87IGJvdGggdGhlIGV4cG9uZW50IGFuZCBtYW50aXNzYSBhcmUgY2hhbmdlZC4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXVubm9ybV9maXgKK3Vubm9ybV9maXg6CisJYmZmZm8JCUZURU1QX0hJKCVhMCl7JjA6JjMyfSwgJWQwICMgaG93IG1hbnkgc2hpZnRzIGFyZSBuZWVkZWQ/CisJYm5lLmIJCXVubm9ybV9zaGlmdAkJIyBoaShtYW4pIGlzIG5vdCBhbGwgemVyb2VzCisKKyMKKyMgaGkobWFuKSBpcyBhbGwgemVyb2VzIHNvIHNlZSBpZiBhbnkgYml0cyBpbiBsbyhtYW4pIGFyZSBzZXQKKyMKK3Vubm9ybV9jaGtfbG86CisJYmZmZm8JCUZURU1QX0xPKCVhMCl7JjA6JjMyfSwgJWQwICMgaXMgb3BlcmFuZCByZWFsbHkgYSB6ZXJvPworCWJlcS53CQl1bm5vcm1femVybwkJIyB5ZXMKKworCWFkZC53CQkmMzIsICVkMAkJIyBubzsgZml4IHNoaWZ0IGRpc3RhbmNlCisKKyMKKyMgZDAgPSAjIHNoaWZ0cyBuZWVkZWQgZm9yIGNvbXBsZXRlIG5vcm1hbGl6YXRpb24KKyMKK3Vubm9ybV9zaGlmdDoKKwljbHIubAkJJWQxCQkJIyBjbGVhciB0b3Agd29yZAorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kLncJCSYweDdmZmYsICVkMQkJIyBzdHJpcCBvZmYgc2duCisKKwljbXAudwkJJWQwLCAlZDEJCSMgd2lsbCBkZW5vcm0gcHVzaCBleHAgPCAwPworCWJndC5iCQl1bm5vcm1fbnJtX3plcm8JCSMgeWVzOyBkZW5vcm0gb25seSB1bnRpbCBleHAgPSAwCisKKyMKKyMgZXhwb25lbnQgd291bGQgbm90IGdvIDwgMC4gdGhlcmVmb3JlLCBudW1iZXIgc3RheXMgbm9ybWFsaXplZAorIworCXN1Yi53CQklZDAsICVkMQkJIyBzaGlmdCBleHBvbmVudCB2YWx1ZQorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBsb2FkIG9sZCBleHBvbmVudAorCWFuZC53CQkmMHg4MDAwLCAlZDAJCSMgc2F2ZSBvbGQgc2lnbgorCW9yLncJCSVkMCwgJWQxCQkjIHtzZ24sbmV3IGV4cH0KKwltb3YudwkJJWQxLCBGVEVNUF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBVTk5PUk0KKworCW1vdi5iCQkmTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIGV4cG9uZW50IHdvdWxkIGdvIDwgMCwgc28gb25seSBkZW5vcm1hbGl6ZSB1bnRpbCBleHAgPSAwCisjCit1bm5vcm1fbnJtX3plcm86CisJY21wLmIJCSVkMSwgJjMyCQkjIGlzIGV4cCA8PSAzMj8KKwliZ3QuYgkJdW5ub3JtX25ybV96ZXJvX2xyZwkjIG5vOyBnbyBoYW5kbGUgbGFyZ2UgZXhwb25lbnQKKworCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXslZDE6JjMyfSwgJWQwICMgZXh0cmFjdCBuZXcgaGkobWFuKQorCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzYXZlIG5ldyBoaShtYW4pCisKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQwCSMgZmV0Y2ggb2xkIGxvKG1hbikKKwlsc2wubAkJJWQxLCAlZDAJCSMgZXh0cmFjdCBuZXcgbG8obWFuKQorCW1vdi5sCQklZDAsIEZURU1QX0xPKCVhMCkJIyBzYXZlIG5ldyBsbyhtYW4pCisKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCisKKwltb3YuYgkJJkRFTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIG9ubHkgbWFudGlzc2EgYml0cyBzZXQgYXJlIGluIGxvKG1hbikKKyMKK3Vubm9ybV9ucm1femVyb19scmc6CisJc3ViLncJCSYzMiwgJWQxCQkjIGFkanVzdCBzaGZ0IGFtdCBieSAzMgorCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMAkjIGZldGNoIG9sZCBsbyhtYW4pCisJbHNsLmwJCSVkMSwgJWQwCQkjIGxlZnQgc2hpZnQgbG8obWFuKQorCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBoaShtYW4pCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgbG8obWFuKSA9IDAKKworCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgc2V0IGV4cCA9IDAKKworCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgd2hvbGUgbWFudGlzc2EgaXMgemVybyBzbyB0aGlzIFVOTk9STSBpcyBhY3R1YWxseSBhIHplcm8KKyMKK3Vubm9ybV96ZXJvOgorCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgZm9yY2UgZXhwb25lbnQgdG8gemVybworCisJbW92LmIJCSZaRVJPLCAlZDAJCSMgZml4IG9wdHlwZSB0YWcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzZXRfdGFnX3goKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGV4dCBmcCBudW1iZXIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKKyMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFVOTk9STSwgWkVSTwkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCisjIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIworIwlJZiBpdCdzIGFuIHVubm9ybWFsaXplZCB6ZXJvLCBhbHRlciB0aGUgb3BlcmFuZCBhbmQgZm9yY2UgaXQJIworIyB0byBiZSBhIG5vcm1hbCB6ZXJvLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzZXRfdGFnX3gKK3NldF90YWdfeDoKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwgJWQwCQkjIHN0cmlwIG9mZiBzaWduCisJY21waS53CQklZDAsICYweDdmZmYJCSMgaXMgKEVYUCA9PSBNQVgpPworCWJlcS5iCQlpbmZfb3JfbmFuX3gKK25vdF9pbmZfb3JfbmFuX3g6CisJYnRzdAkJJjB4NyxGVEVNUF9ISSglYTApCisJYmVxLmIJCW5vdF9ub3JtX3gKK2lzX25vcm1feDoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworbm90X25vcm1feDoKKwl0c3QudwkJJWQwCQkJIyBpcyBleHBvbmVudCA9IDA/CisJYm5lLmIJCWlzX3Vubm9ybV94Citub3RfdW5ub3JtX3g6CisJdHN0LmwJCUZURU1QX0hJKCVhMCkKKwlibmUuYgkJaXNfZGVub3JtX3gKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc19kZW5vcm1feAoraXNfemVyb194OgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1feDoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCisjIG11c3QgZGlzdGluZ3Vpc2ggbm93ICJVbm5vcm1hbGl6ZWQgemVyb2VzIiB3aGljaCB3ZQorIyBtdXN0IGNvbnZlcnQgdG8gemVyby4KK2lzX3Vubm9ybV94OgorCXRzdC5sCQlGVEVNUF9ISSglYTApCisJYm5lLmIJCWlzX3Vubm9ybV9yZWdfeAorCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCWlzX3Vubm9ybV9yZWdfeAorIyBpdCdzIGFuICJ1bm5vcm1hbGl6ZWQgemVybyIuIGxldCdzIGNvbnZlcnQgaXQgdG8gYW4gYWN0dWFsIHplcm8uLi4KKwlhbmRpLncJCSYweDgwMDAsRlRFTVBfRVgoJWEwKQkjIGNsZWFyIGV4cG9uZW50CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX3Vubm9ybV9yZWdfeDoKKwltb3YuYgkJJlVOTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX3g6CisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJaXNfbmFuX3gKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCisJYW5kLmwJCSYweDdmZmZmZmZmLCAlZDAJIyBtc2IgaXMgYSBkb24ndCBjYXJlIQorCWJuZS5iCQlpc19uYW5feAoraXNfaW5mX3g6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX3g6CisJYnRzdAkJJjB4NiwgRlRFTVBfSEkoJWEwKQorCWJlcS5iCQlpc19zbmFuX3gKKwltb3YuYgkJJlFOQU4sICVkMAorCXJ0cworaXNfc25hbl94OgorCW1vdi5iCQkmU05BTiwgJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ19kKCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBkYmwgZnAgbnVtYmVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRzIHRvIGRvdWJsZSBwcmVjaXNpb24gb3BlcmFuZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHR5cGUgdGFnCQkJCQkJIworIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIworIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNldF90YWdfZAorc2V0X3RhZ19kOgorCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKKwltb3YubAkJJWQwLCAlZDEKKworCWFuZGkubAkJJjB4N2ZmMDAwMDAsICVkMAorCWJlcS5iCQl6ZXJvX29yX2Rlbm9ybV9kCisKKwljbXBpLmwJCSVkMCwgJjB4N2ZmMDAwMDAKKwliZXEuYgkJaW5mX29yX25hbl9kCisKK2lzX25vcm1fZDoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworemVyb19vcl9kZW5vcm1fZDoKKwlhbmQubAkJJjB4MDAwZmZmZmYsICVkMQorCWJuZQkJaXNfZGVub3JtX2QKKwl0c3QubAkJNCtGVEVNUCglYTApCisJYm5lCQlpc19kZW5vcm1fZAoraXNfemVyb19kOgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1fZDoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX2Q6CisJYW5kLmwJCSYweDAwMGZmZmZmLCAlZDEKKwlibmUJCWlzX25hbl9kCisJdHN0LmwJCTQrRlRFTVAoJWEwKQorCWJuZQkJaXNfbmFuX2QKK2lzX2luZl9kOgorCW1vdi5iCQkmSU5GLCAlZDAKKwlydHMKK2lzX25hbl9kOgorCWJ0c3QJCSYxOSwgJWQxCisJYm5lCQlpc19xbmFuX2QKK2lzX3NuYW5fZDoKKwltb3YuYgkJJlNOQU4sICVkMAorCXJ0cworaXNfcW5hbl9kOgorCW1vdi5iCQkmUU5BTiwgJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ19zKCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBzZ2wgZnAgbnVtYmVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBzaW5nbGUgcHJlY2lzaW9uIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHR5cGUgdGFnCQkJCQkJIworIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIworIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNldF90YWdfcworc2V0X3RhZ19zOgorCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKKwltb3YubAkJJWQwLCAlZDEKKworCWFuZGkubAkJJjB4N2Y4MDAwMDAsICVkMAorCWJlcS5iCQl6ZXJvX29yX2Rlbm9ybV9zCisKKwljbXBpLmwJCSVkMCwgJjB4N2Y4MDAwMDAKKwliZXEuYgkJaW5mX29yX25hbl9zCisKK2lzX25vcm1fczoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworemVyb19vcl9kZW5vcm1fczoKKwlhbmQubAkJJjB4MDA3ZmZmZmYsICVkMQorCWJuZQkJaXNfZGVub3JtX3MKK2lzX3plcm9fczoKKwltb3YuYgkJJlpFUk8sICVkMAorCXJ0cworaXNfZGVub3JtX3M6CisJbW92LmIJCSZERU5PUk0sICVkMAorCXJ0cworaW5mX29yX25hbl9zOgorCWFuZC5sCQkmMHgwMDdmZmZmZiwgJWQxCisJYm5lCQlpc19uYW5fcworaXNfaW5mX3M6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX3M6CisJYnRzdAkJJjIyLCAlZDEKKwlibmUJCWlzX3FuYW5fcworaXNfc25hbl9zOgorCW1vdi5iCQkmU05BTiwgJWQwCisJcnRzCitpc19xbmFuX3M6CisJbW92LmIJCSZRTkFOLCAlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl1bmZfcmVzKCk6IHJvdXRpbmUgdG8gcHJvZHVjZSBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgb2YgYQkjCisjCQkgICBzY2FsZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlcjsgdGhpcyBpcyB1c2VkIGJ5CSMKKyMJCSAgIGZhZGQvZmRpdi9mbXVsL2V0Yy4gZW11bGF0aW9uIHJvdXRpbmVzLgkJIworIwl1bmZfcmVzNCgpOiBzYW1lIGFzIGFib3ZlIGJ1dCBmb3IgZnNnbG11bC9mc2dsZGl2IHdoaWNoIHVzZQkjCisjCQkgICAgc2luZ2xlIHJvdW5kIHByZWMgYW5kIGV4dGVuZGVkIHByZWMgbW9kZS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kZW5vcm0oKSAtIGRlbm9ybWFsaXplIGFjY29yZGluZyB0byBzY2FsZSBmYWN0b3IJCSMKKyMJX3JvdW5kKCkgLSByb3VuZCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGFjY29yZGluZyB0byBybmQgcHJlYwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzb24gb3BlcmFuZAkJCSMKKyMJZDAgPSBzY2FsZSBmYWN0b3IJCQkJCQkjCisjCWQxID0gcm91bmRpbmcgcHJlY2lzaW9uL21vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJZDAuYiA9IHJlc3VsdCBGUFNSX2NjIHdoaWNoIGNhbGxlciBtYXkgb3IgbWF5IG5vdCB3YW50IHRvIHNhdmUJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQ29udmVydCB0aGUgaW5wdXQgb3BlcmFuZCB0byAiaW50ZXJuYWwgZm9ybWF0IiB3aGljaCBtZWFucyB0aGUJIworIyBleHBvbmVudCBpcyBleHRlbmRlZCB0byAxNiBiaXRzIGFuZCB0aGUgc2lnbiBpcyBzdG9yZWQgaW4gdGhlIHVudXNlZAkjCisjIHBvcnRpb24gb2YgdGhlIGV4dGVuZGVkIHByZWNpc29uIG9wZXJhbmQuIERlbm9ybWFsaXplIHRoZSBudW1iZXIJIworIyBhY2NvcmRpbmcgdG8gdGhlIHNjYWxlIGZhY3RvciBwYXNzZWQgaW4gZDAuIFRoZW4sIHJvdW5kIHRoZQkJIworIyBkZW5vcm1hbGl6ZWQgcmVzdWx0LgkJCQkJCQkjCisjCVNldCB0aGUgRlBTUl9leGMgYml0cyBhcyBhcHByb3ByaWF0ZSBidXQgcmV0dXJuIHRoZSBjYyBiaXRzIGluCSMKKyMgZDAgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCB0byBzYXZlIHRoZW0gKGFzIGlzIHRoZSBjYXNlIGZvcgkjCisjIGZtb3ZlIG91dCkuCQkJCQkJCQkjCisjCXVuZl9yZXM0KCkgZm9yIGZzZ2xtdWwvZnNnbGRpdiBmb3JjZXMgdGhlIGRlbm9ybSB0byBleHRlbmRlZAkjCisjIHByZWNpc2lvbiBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2luZ2xlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJdW5mX3JlcwordW5mX3JlczoKKwltb3YubAkJJWQxLCAtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKwlidHN0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgbWFrZSAiaW50ZXJuYWwiIGZvcm1hdAorCXNuZQkJRlRFTVBfU0dOKCVhMCkKKworCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kLncJCSYweDdmZmYsICVkMQorCXN1Yi53CQklZDAsICVkMQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgMTYgYml0IGV4cG9uZW50CisKKwltb3YubAkJJWEwLCAtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKKworCW1vdi5sCQkweDQoJXNwKSwlZDAJCSMgcGFzcyBybmQgcHJlYy4KKwlhbmRpLncJCSYweDAwYzAsJWQwCisJbHNyLncJCSYweDQsJWQwCisJYnNyLmwJCV9kZW5vcm0JCQkjIGRlbm9ybSByZXN1bHQKKworCW1vdi5sCQkoJXNwKSwlYTAKKwltb3YudwkJMHg2KCVzcCksJWQxCQkjIGxvYWQgcHJlYzptb2RlIGludG8gJWQxCisJYW5kaS53CQkmMHhjMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYworCWxzci53CQkmMHg0LCVkMQorCXN3YXAJCSVkMQorCW1vdi53CQkweDYoJXNwKSwlZDEKKwlhbmRpLncJCSYweDMwLCVkMQorCWxzci53CQkmMHg0LCVkMQorCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBkZW5vcm0KKworCW1vdi5sCQkoJXNwKSssICVhMAorCisjIHJlc3VsdCBpcyBub3cgcm91bmRlZCBwcm9wZXJseS4gY29udmVydCBiYWNrIHRvIG5vcm1hbCBmb3JtYXQKKwliY2xyCQkmMHg3LCBGVEVNUF9FWCglYTApCSMgY2xlYXIgc2duIGZpcnN0OyBtYXkgaGF2ZSByZXNpZHVlCisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PworCWJlcS5iCQl1bmZfcmVzX2Noa2lmemVybwkjIG5vOyByZXN1bHQgaXMgcG9zaXRpdmUKKwlic2V0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgc2V0IHJlc3VsdCBzZ24KKwljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCisKKyMgdGhlIG51bWJlciBtYXkgaGF2ZSBiZWNvbWUgemVybyBhZnRlciByb3VuZGluZy4gc2V0IGNjb2RlcyBhY2NvcmRpbmdseS4KK3VuZl9yZXNfY2hraWZ6ZXJvOgorCWNsci5sCQklZDAKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQkJIyBpcyB2YWx1ZSBub3cgYSB6ZXJvPworCWJuZS5iCQl1bmZfcmVzX2NvbnQJCSMgbm8KKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQl1bmZfcmVzX2NvbnQJCSMgbm8KKyMJYnNldAkJJnpfYml0LCBGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCWJzZXQJCSZ6X2JpdCwgJWQwCQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisKK3VuZl9yZXNfY29udDoKKworIworIyBjYW4gaW5leDEgYWxzbyBiZSBzZXQgYWxvbmcgd2l0aCB1bmZsIGFuZCBpbmV4Mj8/PworIworIyB3ZSBrbm93IHRoYXQgdW5kZXJmbG93IGhhcyBvY2N1cnJlZC4gYXVuZmwgc2hvdWxkIGJlIHNldCBpZiBJTkVYMiBpcyBhbHNvIHNldC4KKyMKKwlidHN0CQkmaW5leDJfYml0LCBGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PworCWJlcS5iCQl1bmZfcmVzX2VuZAkJIyBubworCWJzZXQJCSZhdW5mbF9iaXQsIEZQU1JfQUVYQ0VQVCglYTYpICMgeWVzOyBzZXQgYXVuZmwKKwordW5mX3Jlc19lbmQ6CisJYWRkLmwJCSYweDQsICVzcAkJIyBjbGVhciBzdGFjaworCXJ0cworCisjIHVuZl9yZXMoKSBmb3IgZnNnbG11bCgpIGFuZCBmc2dsZGl2KCkuCisJZ2xvYmFsCQl1bmZfcmVzNAordW5mX3JlczQ6CisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKwlidHN0CQkmMHg3LEZURU1QX0VYKCVhMCkJIyBtYWtlICJpbnRlcm5hbCIgZm9ybWF0CisJc25lCQlGVEVNUF9TR04oJWEwKQorCisJbW92LncJCUZURU1QX0VYKCVhMCksJWQxCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZC53CQkmMHg3ZmZmLCVkMQorCXN1Yi53CQklZDAsJWQxCisJbW92LncJCSVkMSxGVEVNUF9FWCglYTApCSMgaW5zZXJ0IDE2IGJpdCBleHBvbmVudAorCisJbW92LmwJCSVhMCwtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKKworCWNsci5sCQklZDAJCQkjIGZvcmNlIHJuZCBwcmVjID0gZXh0CisJYnNyLmwJCV9kZW5vcm0JCQkjIGRlbm9ybSByZXN1bHQKKworCW1vdi5sCQkoJXNwKSwlYTAKKwltb3YudwkJJnNfbW9kZSwlZDEJCSMgZm9yY2Ugcm5kIHByZWMgPSBzZ2wKKwlzd2FwCQklZDEKKwltb3YudwkJMHg2KCVzcCksJWQxCQkjIGxvYWQgcm5kIG1vZGUKKwlhbmRpLncJCSYweDMwLCVkMQkJIyBleHRyYWN0IHJuZCBwcmVjCisJbHNyLncJCSYweDQsJWQxCisJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIGRlbm9ybQorCisJbW92LmwJCSglc3ApKywlYTAKKworIyByZXN1bHQgaXMgbm93IHJvdW5kZWQgcHJvcGVybHkuIGNvbnZlcnQgYmFjayB0byBub3JtYWwgZm9ybWF0CisJYmNscgkJJjB4NyxGVEVNUF9FWCglYTApCSMgY2xlYXIgc2duIGZpcnN0OyBtYXkgaGF2ZSByZXNpZHVlCisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PworCWJlcS5iCQl1bmZfcmVzNF9jaGtpZnplcm8JIyBubzsgcmVzdWx0IGlzIHBvc2l0aXZlCisJYnNldAkJJjB4NyxGVEVNUF9FWCglYTApCSMgc2V0IHJlc3VsdCBzZ24KKwljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCisKKyMgdGhlIG51bWJlciBtYXkgaGF2ZSBiZWNvbWUgemVybyBhZnRlciByb3VuZGluZy4gc2V0IGNjb2RlcyBhY2NvcmRpbmdseS4KK3VuZl9yZXM0X2Noa2lmemVybzoKKwljbHIubAkJJWQwCisJdHN0LmwJCUZURU1QX0hJKCVhMCkJCSMgaXMgdmFsdWUgbm93IGEgemVybz8KKwlibmUuYgkJdW5mX3JlczRfY29udAkJIyBubworCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCXVuZl9yZXM0X2NvbnQJCSMgbm8KKyMJYnNldAkJJnpfYml0LEZQU1JfQ0MoJWE2KQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisJYnNldAkJJnpfYml0LCVkMAkJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCit1bmZfcmVzNF9jb250OgorCisjCisjIGNhbiBpbmV4MSBhbHNvIGJlIHNldCBhbG9uZyB3aXRoIHVuZmwgYW5kIGluZXgyPz8/CisjCisjIHdlIGtub3cgdGhhdCB1bmRlcmZsb3cgaGFzIG9jY3VycmVkLiBhdW5mbCBzaG91bGQgYmUgc2V0IGlmIElORVgyIGlzIGFsc28gc2V0LgorIworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEuYgkJdW5mX3JlczRfZW5kCQkjIG5vCisJYnNldAkJJmF1bmZsX2JpdCxGUFNSX0FFWENFUFQoJWE2KSAjIHllczsgc2V0IGF1bmZsCisKK3VuZl9yZXM0X2VuZDoKKwlhZGQubAkJJjB4NCwlc3AJCSMgY2xlYXIgc3RhY2sKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlvdmZfcmVzKCk6IHJvdXRpbmUgdG8gcHJvZHVjZSB0aGUgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQgb2YJIworIwkJICAgYW4gb3ZlcmZsb3dpbmcgbnVtYmVyLgkJCQkjCisjCW92Zl9yZXMyKCk6IHNhbWUgYXMgYWJvdmUgYnV0IHRoZSBybmQgbW9kZS9wcmVjIGFyZSBwYXNzZWQJIworIwkJICAgIGRpZmZlcmVudGx5LgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDEuYgk9ICctMScgPT4gKC0pOyAnMCcgPT4gKCspCQkJCSMKKyMgICBvdmZfcmVzKCk6CQkJCQkJCQkjCisjCWQwCT0gcm5kIG1vZGUvcHJlYwkJCQkJCSMKKyMgICBvdmZfcmVzMigpOgkJCQkJCQkJIworIwloaShkMCkJPSBybmQgcHJlYwkJCQkJCSMKKyMJbG8oZDApCT0gcm5kIG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMAk9IHBvaW50cyB0byBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0CQkJIworIwlkMC5iCT0gY29uZGl0aW9uIGNvZGUgYml0cwkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzaWduIG9mCSMKKyMgdGhlIHJlc3VsdCBhbmQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYyBpbiBlZmZlY3QuIFRoZXNlIGJpdHMgYXJlCSMKKyMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHRvIGNyZWF0ZSBhbiBpbmRleCBpbnRvIHRoZSBkZWZhdWx0IHJlc3VsdAkjCisjIHRhYmxlLiBBIHBvaW50ZXIgdG8gdGhlIGNvcnJlY3QgcmVzdWx0IGlzIHJldHVybmVkIGluIGEwLiBUaGUJCSMKKyMgcmVzdWx0aW5nIGNvbmRpdGlvbiBjb2RlcyBhcmUgcmV0dXJuZWQgaW4gZDAgaW4gY2FzZSB0aGUgY2FsbGVyCSMKKyMgZG9lc24ndCB3YW50IEZQU1JfY2MgYWx0ZXJlZCAoYXMgaXMgdGhlIGNhc2UgZm9yIGZtb3ZlIG91dCkuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlvdmZfcmVzCitvdmZfcmVzOgorCWFuZGkudwkJJjB4MTAsJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KKwlsc3IuYgkJJjB4NCwlZDAJCSMgc2hpZnQgcHJlYy9tb2RlCisJb3IuYgkJJWQwLCVkMQkJCSMgY29uY2F0IHRoZSB0d28KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKwlsc2wuYgkJJjB4MSwlZDEJCSMgbXVsdGlwbHkgZDEgYnkgMgorCWJyYS5iCQlvdmZfcmVzX2xvYWQKKworCWdsb2JhbAkJb3ZmX3JlczIKK292Zl9yZXMyOgorCWFuZC53CQkmMHgxMCwgJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KKwlvci5iCQklZDAsICVkMQkJIyBpbnNlcnQgcm5kIG1vZGUKKwlzd2FwCQklZDAKKwlvci5iCQklZDAsICVkMQkJIyBpbnNlcnQgcm5kIHByZWMKKwltb3YudwkJJWQxLCAlZDAJCSMgbWFrZSBhIGNvcHkKKwlsc2wuYgkJJjB4MSwgJWQxCQkjIHNoaWZ0IGxlZnQgYnkgMQorCisjCisjIHVzZSB0aGUgcm91bmRpbmcgbW9kZSwgcHJlY2lzaW9uLCBhbmQgcmVzdWx0IHNpZ24gYXMgaW4gaW5kZXggaW50byB0aGUKKyMgdHdvIHRhYmxlcyBiZWxvdyB0byBmZXRjaCB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHRoZSByZXN1bHQgY2NvZGVzLgorIworb3ZmX3Jlc19sb2FkOgorCW1vdi5iCQkodGJsX292ZmxfY2MuYiwlcGMsJWQwLncqMSksICVkMCAjIGZldGNoIHJlc3VsdCBjY29kZXMKKwlsZWEJCSh0Ymxfb3ZmbF9yZXN1bHQuYiwlcGMsJWQxLncqOCksICVhMCAjIHJldHVybiByZXN1bHQgcHRyCisKKwlydHMKKwordGJsX292ZmxfY2M6CisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgwLCAweDAsIDB4MCwgMHgwCisJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKKwlieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAorCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4CisKK3RibF9vdmZsX3Jlc3VsdDoKKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KKwlsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgK0VYVDsgUloKKwlsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgK0VYVDsgUk0KKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKKworCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgorCWxvbmcJCTB4NDA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArU0dMOyBSWgorCWxvbmcJCTB4NDA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArU0dMOyBSTQorCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAorCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJOCisJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJaCisJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJNCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJQCisKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KKwlsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUloKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk0KKwlsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUlAKKworCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTgorCWxvbmcJCTB4YzA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtU0dMOyBSWgorCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQorCWxvbmcJCTB4YzA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtU0dMOyBSUAorCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCisJbG9uZwkJMHhjM2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjIC1EQkw7IFJaCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCisJbG9uZwkJMHhjM2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjIC1EQkw7IFJQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZ2V0X3BhY2tlZCgpOiBmZXRjaCBhIHBhY2tlZCBvcGVyYW5kIGZyb20gbWVtb3J5IGFuZCB0aGVuCSMKKyMJCSAgICAgIGNvbnZlcnQgaXQgdG8gYSBmbG9hdGluZy1wb2ludCBiaW5hcnkgbnVtYmVyLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZGNhbGNfZWEoKSAtIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCA8ZWE+CQkJIworIwlfbWVtX3JlYWQoKSAtIGZldGNoIHRoZSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJIworIwlmYWNjX2luX3goKSAtIHRoZSBmZXRjaCBmYWlsZWQgc28ganVtcCB0byBzcGVjaWFsIGV4aXQgY29kZQkjCisjCWRlY2JpbigpICAgIC0gY29udmVydCBwYWNrZWQgdG8gYmluYXJ5IGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBubyBmYWlsdXJlIG9uIF9tZW1fcmVhZCgpOgkJCQkJIworIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIworIyBmcmFtZSB3LyBtYXliZSBhIGNvcnJlY3Rpb24gZmFjdG9yIGlmIHRoZSA8ZWE+IGlzIC0oYW4pIG9yIChhbikrLgkjCisjIFRoZW4sIGZldGNoIHRoZSBvcGVyYW5kIGZyb20gbWVtb3J5LiBJZiB0aGUgZmV0Y2ggZmFpbHMsIGV4aXQJCSMKKyMgdGhyb3VnaCBmYWNjX2luX3goKS4JCQkJCQkJIworIwlJZiB0aGUgcGFja2VkIG9wZXJhbmQgaXMgYSBaRVJPLE5BTiwgb3IgSU5GLCBjb252ZXJ0IGl0IHRvCSMKKyMgaXRzIGJpbmFyeSByZXByZXNlbnRhdGlvbiBoZXJlLiBFbHNlLCBjYWxsIGRlY2JpbigpIHdoaWNoIHdpbGwJIworIyBjb252ZXJ0IHRoZSBwYWNrZWQgdmFsdWUgdG8gYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGJpbmFyeSB2YWx1ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGUgc3RhY2tlZCA8ZWE+IGZvciBwYWNrZWQgaXMgY29ycmVjdCBleGNlcHQgZm9yIC0oQW4pLgorIyB0aGUgYmFzZSByZWcgbXVzdCBiZSB1cGRhdGVkIGZvciBib3RoIC0oQW4pIGFuZCAoQW4pKy4KKwlnbG9iYWwJCWdldF9wYWNrZWQKK2dldF9wYWNrZWQ6CisJbW92LmwJCSYweGMsJWQwCQkjIHBhY2tlZCBpcyAxMiBieXRlcworCWJzci5sCQlfZGNhbGNfZWEJCSMgZmV0Y2ggPGVhPjsgY29ycmVjdCBBbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTEJCSMgcGFzczogcHRyIHRvIHN1cGVyIGRzdAorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcworCWJzci5sCQlfZG1lbV9yZWFkCQkjIHJlYWQgcGFja2VkIG9wZXJhbmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUubAkJZmFjY19pbl94CQkjIHllcworCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgorCWJmZXh0dQkJRlBfU1JDKCVhNil7JjE6JjE1fSwlZDAJIyBnZXQgZXhwCisJY21waS53CQklZDAsJjB4N2ZmZgkJIyBJTkYgb3IgTkFOPworCWJuZS5iCQlncF90cnlfemVybwkJIyBubworCXJ0cwkJCQkJIyBvcGVyYW5kIGlzIGFuIElORiBvciBOQU4KKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCisjIGEgbm9ybWFsIHBhY2tlZCBvcC4KK2dwX3RyeV96ZXJvOgorCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKKwlhbmRpLmIJCSYweDBmLCVkMAkJIyBjbGVhciBhbGwgYnV0IGxhc3QgbnliYmxlCisJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KKwl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPworCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCQkjIGlzIGx3IDMgemVybz8KKwlibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybworCXJ0cwkJCQkJIyBvcGVyYW5kIGlzIGEgWkVSTworZ3Bfbm90X3NwZWM6CisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAorCWJzci5sCQlkZWNiaW4JCQkjIGNvbnZlcnQgdG8gZXh0ZW5kZWQKKwlmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIG1ha2UgdGhpcyB0aGUgc3Jjb3AKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkZWNiaW4oKTogQ29udmVydHMgbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIJIworIwkgICAgYTAgdG8gZXh0ZW5kZWQtcHJlY2lzaW9uIHZhbHVlIGluIGZwMC4JCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZXhhY3QgZnAgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhY2tlZCBiY2QgdmFsdWUuCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlFeHBlY3RlZCBpcyBhIG5vcm1hbCBiY2QgKGkuZS4gbm9uLWV4Y2VwdGlvbmFsOyBhbGwgaW5mLCB6ZXJvLAkjCisjCWFuZCBOYU4gb3BlcmFuZHMgYXJlIGRpc3BhdGNoZWQgd2l0aG91dCBlbnRlcmluZyB0aGlzIHJvdXRpbmUpCSMKKyMJdmFsdWUgaW4gNjg4ODEvODgyIGZvcm1hdCBhdCBsb2NhdGlvbiAoYTApLgkJCSMKKyMJCQkJCQkJCQkjCisjCUExLiBDb252ZXJ0IHRoZSBiY2QgZXhwb25lbnQgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUgYWRkcyBhbmQJIworIwltdWxzLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCSMKKyMJZm9yIHRoZSBtYW50aXNzYSB3aGljaCBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyAxNyBpbnRlZ2VyCSMKKyMJZGlnaXRzLCByYXRoZXIgdGhhbiAxIGludGVnZXIgYW5kIDE2IGZyYWN0aW9uIGRpZ2l0cy4JCSMKKyMJTm90ZTogdGhpcyBvcGVyYXRpb24gY2FuIG5ldmVyIG92ZXJmbG93LgkJCSMKKyMJCQkJCQkJCQkjCisjCUEyLiBDb252ZXJ0IHRoZSBiY2QgbWFudGlzc2EgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUJCSMKKyMJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCQkjCisjCVRoZSBtYW50aXNzYSBkaWdpdHMgd2lsbCBiZSBjb252ZXJ0ZWQgd2l0aCB0aGUgZGVjaW1hbCBwb2ludAkjCisjCWFzc3VtZWQgZm9sbG93aW5nIHRoZSBsZWFzdC1zaWduaWZpY2FudCBkaWdpdC4JCQkjCisjCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCisjCQkJCQkJCQkJIworIwlBMy4gQ291bnQgdGhlIG51bWJlciBvZiBsZWFkaW5nL3RyYWlsaW5nIHplcm9zIGluIHRoZQkJIworIwliY2Qgc3RyaW5nLiAgSWYgU0UgaXMgcG9zaXRpdmUsIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zOwkjCisjCWlmIG5lZ2F0aXZlLCBjb3VudCB0aGUgdHJhaWxpbmcgemVyb3MuICBTZXQgdGhlIGFkanVzdGVkCSMKKyMJZXhwb25lbnQgZXF1YWwgdG8gdGhlIGV4cG9uZW50IGZyb20gQTEgYW5kIHRoZSB6ZXJvIGNvdW50CSMKKyMJYWRkZWQgaWYgU00gPSAxIGFuZCBzdWJ0cmFjdGVkIGlmIFNNID0gMC4gIFNjYWxlIHRoZQkJIworIwltYW50aXNzYSB0aGUgZXF1aXZhbGVudCBvZiBmb3JjaW5nIGluIHRoZSBiY2QgdmFsdWU6CQkjCisjCQkJCQkJCQkJIworIwlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgkJIworIwlTTSA9IDEJYSBub24temVybyBkaWdpdCBpbiBNYW50MCwgbHNkIG9mIHRoZSBmcmFjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMJdGhpcyB3aWxsIGluc3VyZSB0aGF0IGFueSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiBpdHMJCSMKKyMJcmVwcmVzZW50YXRpb24gKGV4LiAwLjFFMiwgMUUxLCAxMEUwLCAxMDBFLTEpLCBpcyBjb252ZXJ0ZWQJIworIwljb25zaXN0ZW50bHkuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE0LiBDYWxjdWxhdGUgdGhlIGZhY3RvciAxMF5leHAgaW4gRlAxIHVzaW5nIGEgdGFibGUgb2YJCSMKKyMJMTBeKDJebikgdmFsdWVzLiAgVG8gcmVkdWNlIHRoZSBlcnJvciBpbiBmb3JtaW5nIGZhY3RvcnMJIworIwlncmVhdGVyIHRoYW4gMTBeMjcsIGEgZGlyZWN0ZWQgcm91bmRpbmcgc2NoZW1lIGlzIHVzZWQgd2l0aAkjCisjCXRhYmxlcyByb3VuZGVkIHRvIFJOLCBSTSwgYW5kIFJQLCBhY2NvcmRpbmcgdG8gdGhlIHRhYmxlCSMKKyMJaW4gdGhlIGNvbW1lbnRzIG9mIHRoZSBwd3J0ZW4gc2VjdGlvbi4JCQkJIworIwkJCQkJCQkJCSMKKyMJQTUuIEZvcm0gdGhlIGZpbmFsIGJpbmFyeSBudW1iZXIgYnkgc2NhbGluZyB0aGUgbWFudGlzc2EgYnkJIworIwl0aGUgZXhwb25lbnQgZmFjdG9yLiAgVGhpcyBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIHRoZQkJIworIwltYW50aXNzYSBpbiBGUDAgYnkgdGhlIGZhY3RvciBpbiBGUDEgaWYgdGhlIGFkanVzdGVkCQkjCisjCWV4cG9uZW50IHNpZ24gaXMgcG9zaXRpdmUsIGFuZCBkaXZpZGluZyBGUDAgYnkgRlAxIGlmCQkjCisjCWl0IGlzIG5lZ2F0aXZlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlDbGVhbiB1cCBhbmQgcmV0dXJuLiBDaGVjayBpZiB0aGUgZmluYWwgbXVsIG9yIGRpdiB3YXMgaW5leGFjdC4JIworIwlJZiBzbywgc2V0IElORVgxIGluIFVTRVJfRlBTUi4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMJUFRFTlJOLCBQVEVOUk0sIGFuZCBQVEVOUlAgYXJlIGFycmF5cyBvZiBwb3dlcnMgb2YgMTAgcm91bmRlZAorIwl0byBuZWFyZXN0LCBtaW51cywgYW5kIHBsdXMsIHJlc3BlY3RpdmVseS4gIFRoZSB0YWJsZXMgaW5jbHVkZQorIwkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKKyMJaXMgcmVxdWlyZWQgdW50aWwgdGhlIHBvd2VyIGlzIGdyZWF0ZXIgdGhhbiAyNywgaG93ZXZlciwgYWxsCisjCXRhYmxlcyBpbmNsdWRlIHRoZSBmaXJzdCA1IGZvciBlYXNlIG9mIGluZGV4aW5nLgorIworUlRBQkxFOgorCWJ5dGUJCTAsMCwwLDAKKwlieXRlCQkyLDMsMiwzCisJYnl0ZQkJMiwzLDMsMgorCWJ5dGUJCTMsMiwyLDMKKworCXNldAkJRk5JQlMsNworCXNldAkJRlNUUlQsMAorCisJc2V0CQlFU1RSVCw0CisJc2V0CQlFRElHSVRTLDIKKworCWdsb2JhbAkJZGVjYmluCitkZWNiaW46CisJbW92LmwJCTB4MCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5IG9mIGlucHV0CisJbW92LmwJCTB4NCglYTApLEZQX1NDUjBfSEkoJWE2KSAjIHNvIHdlIGRvbid0IGFsdGVyIGl0CisJbW92LmwJCTB4OCglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKwlmbW92bS54CQkmMHgxLC0oJXNwKQkJIyBzYXZlIGZwMQorIworIyBDYWxjdWxhdGUgZXhwb25lbnQ6CisjICAxLiBDb3B5IGJjZCB2YWx1ZSBpbiBtZW1vcnkgZm9yIHVzZSBhcyBhIHdvcmtpbmcgY29weS4KKyMgIDIuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBleHBvbmVudCBpbiBkMSBieSBtdWwgYW5kIGFkZC4KKyMgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCisjICA0LiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlIGZvciBpbnRlcnByZXRpbmcgdGhlIG1hbnQgYXMgYWxsIGludGVnZXIgZGlnaXRzLgorIyAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBjYWxjX2U6CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiBhY2N1bXVsYXRvciBmb3IgYmluYXJ5IGV4cG9uZW50CisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKKyMJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCopICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKKyMKK2NhbGNfZToKKwltb3YubAkJJkVESUdJVFMsJWQyCQkjICMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0CisJbW92LmwJCSZFU1RSVCwlZDMJCSMgY291bnRlciB0byBwaWNrIHVwIGRpZ2l0cworCW1vdi5sCQkoJWEwKSwlZDQJCSMgZ2V0IGZpcnN0IHdvcmQgb2YgYmNkCisJY2xyLmwJCSVkMQkJCSMgemVybyBkMSBmb3IgYWNjdW11bGF0b3IKK2VfZ2Q6CisJbXVsdS5sCQkmMHhhLCVkMQkJIyBtdWwgcGFydGlhbCBwcm9kdWN0IGJ5IG9uZSBkaWdpdCBwbGFjZQorCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kIGludG8gZDAKKwlhZGQubAkJJWQwLCVkMQkJCSMgZDEgPSBkMSArIGQwCisJYWRkcS5iCQkmNCwlZDMJCQkjIGFkdmFuY2UgZDMgdG8gdGhlIG5leHQgZGlnaXQKKwlkYmYudwkJJWQyLGVfZ2QJCSMgaWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCisJYnRzdAkJJjMwLCVkNAkJCSMgZ2V0IFNFCisJYmVxLmIJCWVfcG9zCQkJIyBkb24ndCBuZWdhdGUgaWYgcG9zCisJbmVnLmwJCSVkMQkJCSMgbmVnYXRlIGJlZm9yZSBzdWJ0cmFjdGluZworZV9wb3M6CisJc3ViLmwJCSYxNiwlZDEJCQkjIHN1YiB0byBjb21wZW5zYXRlIGZvciBzaGlmdCBvZiBtYW50CisJYmdlLmIJCWVfc2F2ZQkJCSMgaWYgc3RpbGwgcG9zLCBkbyBub3QgbmVnCisJbmVnLmwJCSVkMQkJCSMgbm93IG5lZ2F0aXZlLCBtYWtlIHBvcyBhbmQgc2V0IFNFCisJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIHNldCBTRSBpbiBkNCwKKwlvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiB3b3JraW5nIGJjZAorZV9zYXZlOgorCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgZXhwIG9uIHN0YWNrCisjCisjCisjIENhbGN1bGF0ZSBtYW50aXNzYToKKyMgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCisjICAyLiBDb3JyZWN0IGZvciBtYW50aXNzYSBzaWduLgorIyAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBjYWxjX206CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiBsd29yZCBjb3VudGVyCisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IHdvcmRzIDIgYW5kIDMgb2YgYmNkCisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKKyMJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKKyMJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCisjCSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKKyMKK2NhbGNfbToKKwltb3YubAkJJjEsJWQxCQkJIyB3b3JkIGNvdW50ZXIsIGluaXQgdG8gMQorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGFjY3VtdWxhdG9yCisjCisjCisjICBTaW5jZSB0aGUgcGFja2VkIG51bWJlciBoYXMgYSBsb25nIHdvcmQgYmV0d2VlbiB0aGUgZmlyc3QgJiBzZWNvbmQgcGFydHMsCisjICBnZXQgdGhlIGludGVnZXIgZGlnaXQgdGhlbiBza2lwIGRvd24gJiBnZXQgdGhlIHJlc3Qgb2YgdGhlCisjICBtYW50aXNzYS4gIFdlIHdpbGwgdW5yb2xsIHRoZSBsb29wIG9uY2UuCisjCisJYmZleHR1CQkoJWEwKXsmMjg6JjR9LCVkMAkjIGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKKwlmYWRkLmIJCSVkMCwlZnAwCQkjIGFkZCBkaWdpdCB0byBzdW0gaW4gZnAwCisjCisjCisjICBHZXQgdGhlIHJlc3Qgb2YgdGhlIG1hbnRpc3NhLgorIworbG9hZGx3OgorCW1vdi5sCQkoJWEwLCVkMS5MKjQpLCVkNAkjIGxvYWQgbWFudGlzc2EgbG9ucXdvcmQgaW50byBkNAorCW1vdi5sCQkmRlNUUlQsJWQzCQkjIGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwltb3YubAkJJkZOSUJTLCVkMgkJIyByZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKK21kMmI6CisJZm11bC5zCQkmMHg0MTIwMDAwMCwlZnAwCSMgZnAwID0gZnAwICogMTAKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZAorCWZhZGQuYgkJJWQwLCVmcDAJCSMgZnAwID0gZnAwICsgZGlnaXQKKyMKKyMKKyMgIElmIGFsbCB0aGUgZGlnaXRzICg4KSBpbiB0aGF0IGxvbmcgd29yZCBoYXZlIGJlZW4gY29udmVydGVkIChkMj0wKSwKKyMgIHRoZW4gaW5jIGQxICg9MikgdG8gcG9pbnQgdG8gdGhlIG5leHQgbG9uZyB3b3JkIGFuZCByZXNldCBkMyB0byAwCisjICB0byBpbml0aWFsaXplIHRoZSBkaWdpdCBvZmZzZXQsIGFuZCBzZXQgZDIgdG8gNyBmb3IgdGhlIGRpZ2l0IGNvdW50OworIyAgZWxzZSBjb250aW51ZSB3aXRoIHRoaXMgbG9uZyB3b3JkLgorIworCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmLncJCSVkMixtZDJiCQkjIGNoZWNrIGZvciBsYXN0IGRpZ2l0IGluIHRoaXMgbHcKK25leHRsdzoKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGx3IHBvaW50ZXIgaW4gbWFudGlzc2EKKwljbXAubAkJJWQxLCYyCQkJIyB0ZXN0IGZvciBsYXN0IGx3CisJYmxlLmIJCWxvYWRsdwkJCSMgaWYgbm90LCBnZXQgbGFzdCBvbmUKKyMKKyMgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBtYW50IGFuZCBtYWtlIHRoZSB2YWx1ZSBpbiBmcDAgdGhlIHNhbWUgc2lnbi4KKyMKK21fc2lnbjoKKwlidHN0CQkmMzEsKCVhMCkJCSMgdGVzdCBzaWduIG9mIHRoZSBtYW50aXNzYQorCWJlcS5iCQlhcF9zdF96CQkJIyBpZiBjbGVhciwgZ28gdG8gYXBwZW5kL3N0cmlwIHplcm9zCisJZm5lZy54CQklZnAwCQkJIyBpZiBzZXQsIG5lZ2F0ZSBmcDAKKyMKKyMgQXBwZW5kL3N0cmlwIHplcm9zOgorIworIyAgRm9yIGFkanVzdGVkIGV4cG9uZW50cyB3aGljaCBoYXZlIGFuIGFic29sdXRlIHZhbHVlIGdyZWF0ZXIgdGhhbiAyNyosCisjICB0aGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgYW1vdW50IG5lZWRlZCB0byBub3JtYWxpemUgdGhlIG1hbnRpc3NhCisjICBmb3IgdGhlIGFkanVzdGVkIGV4cG9uZW50LiAgVGhhdCBudW1iZXIgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBleHAKKyMgIGlmIHRoZSBleHAgd2FzIHBvc2l0aXZlLCBhbmQgYWRkZWQgaWYgaXQgd2FzIG5lZ2F0aXZlLiAgVGhlIHB1cnBvc2UKKyMgIG9mIHRoaXMgaXMgdG8gcmVkdWNlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQgYW5kIHRoZSBwb3NzaWJpbGl0eQorIyAgb2YgZXJyb3IgaW4gY2FsY3VsYXRpb24gb2YgcHdydGVuLgorIworIyAgMS4gQnJhbmNoIG9uIHRoZSBzaWduIG9mIHRoZSBhZGp1c3RlZCBleHBvbmVudC4KKyMgIDJwLihwb3NpdGl2ZSBleHApCisjICAgMi4gQ2hlY2sgTTE2IGFuZCB0aGUgZGlnaXRzIGluIGx3b3JkcyAyIGFuZCAzIGluIGRlY2VuZGluZyBvcmRlci4KKyMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KKyMgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgorIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgbWFrZSB0aGUgZXhwIGFicworIwkgICBhbmQgc2V0IFNFLgorIwk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgorIyAgMm4uKG5lZ2F0aXZlIGV4cCkKKyMgICAyLiBDaGVjayB0aGUgZGlnaXRzIGluIGx3b3JkcyAzIGFuZCAyIGluIGRlY2VuZGluZyBvcmRlci4KKyMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KKyMgICA0LiBBZGQgdGhlIGNvdW50IHRvIHRoZSBleHAuCisjICAgNS4gQ2hlY2sgaWYgdGhlIGV4cCBoYXMgY3Jvc3NlZCB6ZXJvIGluICMzIGFib3ZlOyBjbGVhciBTRS4KKyMgICA2LiBEaXZpZGUgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KKyMKKyMgICpXaHkgMjc/ICBJZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgaXMgd2l0aGluIC0yOCA8IGV4cEEgPCAyOCwgdGhhbgorIyAgIGFueSBhZGp1c3RtZW50IGR1ZSB0byBhcHBlbmQvc3RyaXAgemVyb3Mgd2lsbCBkcml2ZSB0aGUgcmVzdWx0YW5lCisjICAgZXhwb25lbnQgdG93YXJkcyB6ZXJvLiAgU2luY2UgYWxsIHB3cnRlbiBjb25zdGFudHMgd2l0aCBhIHBvd2VyCisjICAgb2YgMjcgb3IgbGVzcyBhcmUgZXhhY3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHRoaXMgcm91dGluZSB0bworIyAgIGF0dGVtcHQgdG8gbGVzc2VuIHRoZSByZXN1bHRhbnQgZXhwb25lbnQuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgYXBfc3RfejoKKyMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCisjCSgqKSAgZDE6IHplcm8gY291bnQKKyMJKCopICBkMjogZGlnaXQgY291bnQKKyMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKKyMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKKyMJKCopICBkNTogbHdvcmQgY291bnRlcgorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoICkgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCisjCisjIEZpcnN0IGNoZWNrIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQgdG8gc2VlIGlmIHRoaXMKKyMgcm91dGluZSBpcyBuZWNlc3NhcnkuICBJZiBzbywgdGhlbiBjaGVjayB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKKyMgYW5kIGRvIGFwcGVuZCAoKykgb3Igc3RyaXAgKC0pIHplcm9zIGFjY29yZGluZ2x5LgorIyBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIHBvc2l0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorIworYXBfc3RfejoKKwltb3YubAkJKCVzcCksJWQxCQkjIGxvYWQgZXhwQSBmb3IgcmFuZ2UgdGVzdAorCWNtcC5sCQklZDEsJjI3CQkJIyB0ZXN0IGlzIHdpdGggMjcKKwlibGUudwkJcHdydGVuCQkJIyBpZiBhYnMoZXhwQSkgPDI4LCBza2lwIGFwL3N0IHplcm9zCisJYnRzdAkJJjMwLCglYTApCQkjIGNoZWNrIHNpZ24gb2YgZXhwCisJYm5lLmIJCWFwX3N0X24JCQkjIGlmIG5lZywgZ28gdG8gbmVnIHNpZGUKKwljbHIubAkJJWQxCQkJIyB6ZXJvIGNvdW50IHJlZworCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJYmZleHR1CQklZDR7JjI4OiY0fSwlZDAJCSMgZ2V0IE0xNiBpbiBkMAorCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBNMTYgaXMgbm9uLXplcm8sIGdvIGZpeCBleHAKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIHplcm8gY291bnQKKwltb3YubAkJJjEsJWQ1CQkJIyBpbml0IGx3b3JkIGNvdW50ZXIKKwltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMiB0byBkNAorCWJuZS5iCQlhcF9wX2NsCQkJIyBpZiBsdyAyIGlzIHplcm8sIHNraXAgaXQKKwlhZGRxLmwJCSY4LCVkMQkJCSMgYW5kIGluYyBjb3VudCBieSA4CisJYWRkcS5sCQkmMSwlZDUJCQkjIGluYyBsd29yZCBjb3VudGVyCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMgdG8gZDQKK2FwX3BfY2w6CisJY2xyLmwJCSVkMwkJCSMgaW5pdCBvZmZzZXQgcmVnCisJbW92LmwJCSY3LCVkMgkJCSMgaW5pdCBkaWdpdCBjb3VudGVyCithcF9wX2dkOgorCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCBkaWdpdAorCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBub24temVybywgZ28gdG8gZml4IGV4cAorCWFkZHEubAkJJjQsJWQzCQkJIyBwb2ludCB0byBuZXh0IGRpZ2l0CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCisJZGJmLncJCSVkMixhcF9wX2dkCQkjIGdldCBuZXh0IGRpZ2l0CithcF9wX2Z4OgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDIKKwltb3YubAkJKCVzcCksJWQxCQkjIGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ2UuYgkJYXBfcF9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyB0byBwd3J0ZW4KKwluZWcubAkJJWQxCQkJIyBub3cgaXRzIG5lZzsgZ2V0IGFicworCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIGFuZCBzZXQgU0UgaW4gZDQKKwlvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiBtZW1vcnkKKyMKKyMgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgorIyB6ZXJvcyBmcm9tIHRoZSBtYW50aXNzYS4KKyMKK2FwX3BfZm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBwb3dlci1vZi10ZW4gdGFibGUKKwljbHIubAkJJWQzCQkJIyBpbml0IHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCW1vdi5sCQkmMywlZDIJCQkjIGluaXQgZDIgdG8gY291bnQgYml0cyBpbiBjb3VudGVyCithcF9wX2VsOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CisJYmNjLmIJCWFwX3BfZW4JCQkjIGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQorYXBfcF9lbjoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQlhcF9wX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAorCWZtdWwueAkJJWZwMSwlZnAwCQkjIG11bCBtYW50aXNzYSBieSAxMCoqKG5vX2JpdHNfc2hpZnRlZCkKKwlicmEuYgkJcHdydGVuCQkJIyBnbyBjYWxjIHB3cnRlbgorIworIyBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIG5lZ2F0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorIworYXBfc3RfbjoKKwljbHIubAkJJWQxCQkJIyBjbHIgY291bnRlcgorCW1vdi5sCQkmMiwlZDUJCQkjIHNldCB1cCBkNSB0byBwb2ludCB0byBsd29yZCAzCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMKKwlibmUuYgkJYXBfbl9jbAkJCSMgaWYgbm90IHplcm8sIGNoZWNrIGRpZ2l0cworCXN1Yi5sCQkmMSwlZDUJCQkjIGRlYyBkNSB0byBwb2ludCB0byBsd29yZCAyCisJYWRkcS5sCQkmOCwlZDEJCQkjIGluYyBjb3VudGVyIGJ5IDgKKwltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMgorYXBfbl9jbDoKKwltb3YubAkJJjI4LCVkMwkJCSMgcG9pbnQgdG8gbGFzdCBkaWdpdAorCW1vdi5sCQkmNywlZDIJCQkjIGluaXQgZGlnaXQgY291bnRlcgorYXBfbl9nZDoKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKKwlibmUuYgkJYXBfbl9meAkJCSMgaWYgbm9uLXplcm8sIGdvIHRvIGV4cCBmaXgKKwlzdWJxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gcHJldmlvdXMgZGlnaXQKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGRpZ2l0IGNvdW50ZXIKKwlkYmYudwkJJWQyLGFwX25fZ2QJCSMgZ2V0IG5leHQgZGlnaXQKK2FwX25fZng6CisJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgY291bnRlciB0byBkMAorCW1vdi5sCQkoJXNwKSwlZDEJCSMgZ2V0IGFkanVzdGVkIGV4cCBmcm9tIG1lbW9yeQorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBjb3VudCBmcm9tIGV4cAorCWJndC5iCQlhcF9uX2ZtCQkJIyBpZiBzdGlsbCBwb3MsIGdvIGZpeCBtYW50aXNzYQorCW5lZy5sCQklZDEJCQkjIHRha2UgYWJzIG9mIGV4cCBhbmQgY2xyIFNFCisJbW92LmwJCSglYTApLCVkNAkJIyBsb2FkIGx3b3JkIDEgdG8gZDQKKwlhbmQubAkJJjB4YmZmZmZmZmYsJWQ0CQkjIGFuZCBjbHIgU0UgaW4gZDQKKwlhbmQubAkJJjB4YmZmZmZmZmYsKCVhMCkJIyBhbmQgaW4gbWVtb3J5CisjCisjIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCisjIHplcm9zIHRvIHRoZSBtYW50aXNzYS4KKyMKK2FwX25fZm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBwb3dlci1vZi10ZW4gdGFibGUKKwljbHIubAkJJWQzCQkJIyBpbml0IHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCW1vdi5sCQkmMywlZDIJCQkjIGluaXQgZDIgdG8gY291bnQgYml0cyBpbiBjb3VudGVyCithcF9uX2VsOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CisJYmNjLmIJCWFwX25fZW4JCQkjIGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQorYXBfbl9lbjoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQlhcF9uX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAorCWZkaXYueAkJJWZwMSwlZnAwCQkjIGRpdiBtYW50aXNzYSBieSAxMCoqKG5vX2JpdHNfc2hpZnRlZCkKKyMKKyMKKyMgQ2FsY3VsYXRlIHBvd2VyLW9mLXRlbiBmYWN0b3IgZnJvbSBhZGp1c3RlZCBhbmQgc2hpZnRlZCBleHBvbmVudC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBwd3J0ZW46CisjCSgqKSAgZDA6IHRlbXAKKyMJKCApICBkMTogZXhwb25lbnQKKyMJKCopICBkMjoge0ZQQ1JbNjo1XSxTTSxTRX0gYXMgaW5kZXggaW4gUlRBQkxFOyB0ZW1wCisjCSgqKSAgZDM6IEZQQ1Igd29yayBjb3B5CisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSgqKSAgYTE6IFJUQUJMRSBwb2ludGVyCisjICBjYWxjX3A6CisjCSgqKSAgZDA6IHRlbXAKKyMJKCApICBkMTogZXhwb25lbnQKKyMJKCopICBkMzogUFdSVHh4IHRhYmxlIGluZGV4CisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBjb3B5IG9mIGJjZAorIwkoKikgIGExOiBQV1JUeHggcG9pbnRlcgorIwkoKikgZnAxOiBwb3dlci1vZi10ZW4gYWNjdW11bGF0b3IKKyMKKyMgUHdydGVuIGNhbGN1bGF0ZXMgdGhlIGV4cG9uZW50IGZhY3RvciBpbiB0aGUgc2VsZWN0ZWQgcm91bmRpbmcgbW9kZQorIyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZToKKyMKKyMJU2lnbiBvZiBNYW50ICBTaWduIG9mIEV4cCAgUm91bmRpbmcgTW9kZSAgUFdSVEVOIFJvdW5kaW5nIE1vZGUKKyMKKyMJQU5ZCSAgQU5ZCVJOCVJOCisjCisjCSArCSAgICsJUlAJUlAKKyMJIC0JICAgKwlSUAlSTQorIwkgKwkgICAtCVJQCVJNCisjCSAtCSAgIC0JUlAJUlAKKyMKKyMJICsJICAgKwlSTQlSTQorIwkgLQkgICArCVJNCVJQCisjCSArCSAgIC0JUk0JUlAKKyMJIC0JICAgLQlSTQlSTQorIworIwkgKwkgICArCVJaCVJNCisjCSAtCSAgICsJUloJUk0KKyMJICsJICAgLQlSWglSUAorIwkgLQkgICAtCVJaCVJQCisjCisjCitwd3J0ZW46CisJbW92LmwJCVVTRVJfRlBDUiglYTYpLCVkMwkjIGdldCB1c2VyJ3MgRlBDUgorCWJmZXh0dQkJJWQzeyYyNjomMn0sJWQyCQkjIGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCisJbW92LmwJCSglYTApLCVkNAkJIyByZWxvYWQgMXN0IGJjZCB3b3JkIHRvIGQ0CisJYXNsLmwJCSYyLCVkMgkJCSMgZm9ybWF0IGQyIHRvIGJlCisJYmZleHR1CQklZDR7JjA6JjJ9LCVkMAkJIyB7RlBDUls2XSxGUENSWzVdLFNNLFNFfQorCWFkZC5sCQklZDAsJWQyCQkJIyBpbiBkMiBhcyBpbmRleCBpbnRvIFJUQUJMRQorCWxlYS5sCQlSVEFCTEUoJXBjKSwlYTEJCSMgbG9hZCBydGFibGUgYmFzZQorCW1vdi5iCQkoJWExLCVkMiksJWQwCQkjIGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQorCWNsci5sCQklZDMJCQkjIGNsZWFyIGQzIHRvIGZvcmNlIG5vIGV4YyBhbmQgZXh0ZW5kZWQKKwliZmlucwkJJWQwLCVkM3smMjY6JjJ9CQkjIHN0dWZmIG5ldyByb3VuZGluZyBiaXRzIGluIEZQQ1IKKwlmbW92LmwJCSVkMywlZnBjcgkJIyB3cml0ZSBuZXcgRlBDUgorCWFzci5sCQkmMSwlZDAJCQkjIHdyaXRlIGNvcnJlY3QgUFRFTnh4IHRhYmxlCisJYmNjLmIJCW5vdF9ycAkJCSMgdG8gYTEKKwlsZWEubAkJUFRFTlJQKCVwYyksJWExCQkjIGl0IGlzIFJQCisJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCitub3RfcnA6CisJYXNyLmwJCSYxLCVkMAkJCSMga2VlcCBjaGVja2luZworCWJjYy5iCQlub3Rfcm0KKwlsZWEubAkJUFRFTlJNKCVwYyksJWExCQkjIGl0IGlzIFJNCisJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCitub3Rfcm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBpdCBpcyBSTgorY2FsY19wOgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGV4cCB0byBkMDt1c2UgZDAKKwlicGwuYgkJbm9fbmVnCQkJIyBpZiBleHAgaXMgbmVnYXRpdmUsCisJbmVnLmwJCSVkMAkJCSMgaW52ZXJ0IGl0CisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgc2V0IFNFIGJpdAorbm9fbmVnOgorCWNsci5sCQklZDMJCQkjIHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorZV9sb29wOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJZV9uZXh0CQkJIyBpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQllX2xvb3AJCQkjIG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZworIworIworIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQorIyAgc2FtZSBzaWduLiBJZiB0aGUgZXhwIHdhcyBwb3MgdGhlbiBtdWx0aXBseSBmcDEqZnAwOworIyAgZWxzZSBkaXZpZGUgZnAwL2ZwMS4KKyMKKyMgUmVnaXN0ZXIgVXNhZ2U6CisjICBub3JtOgorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCisjCSggKSBmcDE6IHNjYWxpbmcgZmFjdG9yIC0gMTAqKihhYnMoZXhwKSkKKyMKK3Bub3JtOgorCWJ0c3QJCSYzMCwoJWEwKQkJIyB0ZXN0IHRoZSBzaWduIG9mIHRoZSBleHBvbmVudAorCWJlcS5iCQltdWwJCQkjIGlmIGNsZWFyLCBnbyB0byBtdWx0aXBseQorZGl2OgorCWZkaXYueAkJJWZwMSwlZnAwCQkjIGV4cCBpcyBuZWdhdGl2ZSwgc28gZGl2aWRlIG1hbnQgYnkgZXhwCisJYnJhLmIJCWVuZF9kZWMKK211bDoKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBleHAgaXMgcG9zaXRpdmUsIHNvIG11bHRpcGx5IGJ5IGV4cAorIworIworIyBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KKyMKKyMgSWYgdGhlIGZpbmFsIG11bC9kaXYgaW4gZGVjYmluIGluY3VycmVkIGFuIGluZXggZXhjZXB0aW9uLAorIyBpdCB3aWxsIGJlIGluZXgyLCBidXQgd2lsbCBiZSByZXBvcnRlZCBhcyBpbmV4MSBieSBnZXRfb3AuCisjCitlbmRfZGVjOgorCWZtb3YubAkJJWZwc3IsJWQwCQkjIGdldCBzdGF0dXMgcmVnaXN0ZXIKKwliY2xyCQkmaW5leDJfYml0KzgsJWQwCSMgdGVzdCBmb3IgaW5leDIgYW5kIGNsZWFyIGl0CisJYmVxLmIJCW5vX2V4YwkJCSMgc2tpcCB0aGlzIGlmIG5vIGV4YworCW9yaS53CQkmaW54MWFfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IElORVgxL0FJTkVYCitub19leGM6CisJYWRkLmwJCSYweDQsJXNwCQkjIGNsZWFyIDEgbHcgcGFyYW0KKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmVzdG9yZSBmcDEKKwltb3ZtLmwJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIGQyLWQ1CisJZm1vdi5sCQkmMHgwLCVmcGNyCisJZm1vdi5sCQkmMHgwLCVmcHNyCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgYmluZGVjKCk6IENvbnZlcnRzIGFuIGlucHV0IGluIGV4dGVuZGVkIHByZWNpc2lvbiBmb3JtYXQgdG8gYmNkIGZvcm1hdCMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIGluIG1lbW9yeS4JIworIwkgICAgIHRoZSBpbnB1dCBtYXkgYmUgZWl0aGVyIG5vcm1hbGl6ZWQsIHVubm9ybWFsaXplZCwgb3IJIworIwkgICAgIGRlbm9ybWFsaXplZC4JCQkJCQkjCisjCWQwID0gY29udGFpbnMgdGhlIGstZmFjdG9yIHNpZ24tZXh0ZW5kZWQgdG8gMzItYml0cy4JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gYmNkIGZvcm1hdCByZXN1bHQgb24gdGhlIHN0YWNrLgkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlBMS4JU2V0IFJNIGFuZCBzaXplIGV4dDsgIFNldCBTSUdNQSA9IHNpZ24gb2YgaW5wdXQuCSMKKyMJCVRoZSBrLWZhY3RvciBpcyBzYXZlZCBmb3IgdXNlIGluIGQ3LiBDbGVhciB0aGUJCSMKKyMJCUJJTkRFQ19GTEcgZm9yIHNlcGFyYXRpbmcgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQJIworIwkJaW5wdXQuICBJZiBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQgb3IgZGVub3JtYWxpemVkLAkjCisjCQlub3JtYWxpemUgaXQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTIuCVNldCBYID0gYWJzKGlucHV0KS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCUEzLglDb21wdXRlIElMT0cuCQkJCQkJIworIwkJSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMJIworIwkJYXBwcm94aW1hdGVkIGJ5IGFkZGluZyBlICsgMC5mIHdoZW4gdGhlIG9yaWdpbmFsCSMKKyMJCXZhbHVlIGlzIHZpZXdlZCBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4JIworIwkJVGhpcyB2YWx1ZSBpcyBzdG9yZWQgaW4gZDYuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE0LglDbHIgSU5FWCBiaXQuCQkJCQkJIworIwkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCQkjCisjCQkJCQkJCQkJIworIwlBNS4JU2V0IElDVFIgPSAwOwkJCQkJCSMKKyMJCUlDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQkjCisjCQlsb29wIGVudHJ5IEE2LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE2LglDYWxjdWxhdGUgTEVOLgkJCQkJCSMKKyMJCUxFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUJIworIwkJay1mYWN0b3IgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLAkjCisjCQlpZiBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciwgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMJIworIwkJYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCSMKKyMJCXNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgkjCisjCQlJZiBMRU4gaXMgY29tcHV0ZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDE3LCBzZXQgT1BFUlIgaW4JIworIwkJVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4JCQkjCisjCQkJCQkJCQkJIworIwlBNy4JQ2FsY3VsYXRlIFNDQUxFLgkJCQkJIworIwkJU0NBTEUgaXMgZXF1YWwgdG8gMTBeSVNDQUxFLCB3aGVyZSBJU0NBTEUgaXMgdGhlIG51bWJlcgkjCisjCQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cwkjCisjCQlpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZQkjCisjCQlzaWduIG9mIElTQ0FMRSwgdXNlZCBpbiBBOS4gRnAxIGNvbnRhaW5zCQkjCisjCQkxMF5eKGFicyhJU0NBTEUpKSB1c2luZyBhIHJvdW5kaW5nIG1vZGUgd2hpY2ggaXMgYQkjCisjCQlmdW5jdGlvbiBvZiB0aGUgb3JpZ2luYWwgcm91bmRpbmcgbW9kZSBhbmQgdGhlIHNpZ25zCSMKKyMJCW9mIElTQ0FMRSBhbmQgWC4gIEEgdGFibGUgaXMgZ2l2ZW4gaW4gdGhlIGNvZGUuCQkjCisjCQkJCQkJCQkJIworIwlBOC4JQ2xyIElORVg7IEZvcmNlIFJaLgkJCQkJIworIwkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCQkjCisjCQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQkjCisjCQlvbmx5IG9uZSByb3VuZGluZyBlcnJvci4gIFRoZSBncnMgYml0cyBhcmUgY29sbGVjdGVkIGluICMKKyMJCXRoZSBJTkVYIGZsYWcgZm9yIHVzZSBpbiBBMTAuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE5LglTY2FsZSBYIC0+IFkuCQkJCQkJIworIwkJVGhlIG1hbnRpc3NhIGlzIHNjYWxlZCB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2YJCSMKKyMJCXNpZ25pZmljYW50IGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQJIworIwkJaW4gSU5FWDIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTEwLglPciBpbiBJTkVYLgkJCQkJCSMKKyMJCUlmIElORVggaXMgc2V0LCByb3VuZCBlcnJvciBvY2N1cnJlZC4gIFRoaXMgaXMJCSMKKyMJCWNvbXBlbnNhdGVkIGZvciBieSAnb3ItaW5nJyBpbiB0aGUgSU5FWDIgZmxhZyB0bwkjCisjCQl0aGUgbHNiIG9mIFkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTExLglSZXN0b3JlIG9yaWdpbmFsIEZQQ1I7IHNldCBzaXplIGV4dC4JCQkjCisjCQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4JIworIwkJS2VlcCB0aGUgc2l6ZSB0byBleHRlbmRlZC4JCQkJIworIwkJCQkJCQkJCSMKKyMJQTEyLglDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZwkjCisjCQltb2RlLiAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQJIworIwkJaXMgaW4gZnAwLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMy4JQ2hlY2sgZm9yIExFTiBkaWdpdHMuCQkJCQkjCisjCQlJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAkjCisjCQlvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCSMKKyMJCUE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCSMKKyMJCXJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQkjCisjCQl0aGUgbWFudGlzc2EgYnkgMTAuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTQuCUNvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4JCQkJIworIwkJVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0CSMKKyMJCW1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCSMKKyMJCXRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCSMKKyMJCXN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCSMKKyMJCVRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4JIworIwkJdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4JCQkjCisjCQkJCQkJCQkJIworIwlBMTUuCUNvbnZlcnQgdGhlIGV4cG9uZW50IHRvIGJjZC4JCQkJIworIwkJQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQkjCisjCQlkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgkJCSMKKyMJCVRlc3QgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgZXhwb25lbnQgc3RyaW5nLiAgSWYgdGhlCSMKKyMJCWxlbmd0aCBpcyA0LCBzZXQgb3BlcnIuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTYuCVdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CUJJTkRFQ19GTEcsCUVYQ19URU1QCSMgREVOT1JNIGZsYWcKKworIyBDb25zdGFudHMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCitQTE9HMjoKKwlsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OCwweDAwMDAwMDAwCitQTE9HMlVQMToKKwlsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OSwweDAwMDAwMDAwCisKKyMgQ29uc3RhbnRzIGluIHNpbmdsZSBwcmVjaXNpb24KK0ZPTkU6CisJbG9uZwkJMHgzRjgwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorRlRXTzoKKwlsb25nCQkweDQwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVEVOOgorCWxvbmcJCTB4NDEyMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0Y0OTMzOgorCWxvbmcJCTB4NDU5QTI4MDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworUkJEVEJMOgorCWJ5dGUJCTAsMCwwLDAKKwlieXRlCQkzLDMsMiwyCisJYnl0ZQkJMywyLDIsMworCWJ5dGUJCTIsMywzLDIKKworIwlJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyMKKyMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgorIworIwkJZDA6IHNjcmF0Y2g7IExFTiBpbnB1dCB0byBiaW5zdHIKKyMJCWQxOiBzY3JhdGNoCisjCQlkMjogdXBwZXIgMzItYml0cyBvZiBtYW50aXNzYSBmb3IgYmluc3RyCisjCQlkMzogc2NyYXRjaDtsb3dlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKKyMJCWQ0OiBMRU4KKyMJCWQ1OiBMQU1CREEvSUNUUgorIwkJZDY6IElMT0cKKyMJCWQ3OiBrLWZhY3RvcgorIwkJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJCWExOiBzY3JhdGNoIHBvaW50ZXIKKyMJCWEyOiBwb2ludGVyIHRvIEZQX1g7IGFicyhvcmlnaW5hbCB2YWx1ZSkgaW4gZXh0CisjCQlmcDA6IHNjcmF0Y2gKKyMJCWZwMTogc2NyYXRjaAorIwkJZnAyOiBzY3JhdGNoCisjCQlGX1NDUjE6CisjCQlGX1NDUjI6CisjCQlMX1NDUjE6CisjCQlMX1NDUjI6CisKKwlnbG9iYWwJCWJpbmRlYworYmluZGVjOgorCW1vdm0ubAkJJjB4M2YyMCwtKCVzcCkJIyAgeyVkMi0lZDcvJWEyfQorCWZtb3ZtLngJCSYweDcsLSglc3ApCSMgIHslZnAwLSVmcDJ9CisKKyMgQTEuIFNldCBSTSBhbmQgc2l6ZSBleHQuIFNldCBTSUdNQSA9IHNpZ24gaW5wdXQ7CisjICAgICBUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gIENsZWFyIEJJTkRFQ19GTEcgZm9yCisjICAgICBzZXBhcmF0aW5nICBub3JtYWxpemVkL2Rlbm9ybWFsaXplZCBpbnB1dC4gIElmIHRoZSBpbnB1dAorIyAgICAgaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLCBzZXQgdGhlIEJJTkRFQ19GTEcgbWVtb3J5IHdvcmQKKyMgICAgIHRvIHNpZ25hbCBkZW5vcm0uICBJZiB0aGUgaW5wdXQgaXMgdW5ub3JtYWxpemVkLCBub3JtYWxpemUKKyMgICAgIHRoZSBpbnB1dCBhbmQgdGVzdCBmb3IgZGVub3JtYWxpemVkIHJlc3VsdC4KKyMKKwlmbW92LmwJCSZybV9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUk0gYW5kIGV4dAorCW1vdi5sCQkoJWEwKSxMX1NDUjIoJWE2KQkjIHNhdmUgZXhwb25lbnQgZm9yIHNpZ24gY2hlY2sKKwltb3YubAkJJWQwLCVkNwkJIyBtb3ZlIGstZmFjdG9yIHRvIGQ3CisKKwljbHIuYgkJQklOREVDX0ZMRyglYTYpCSMgY2xyIG5vcm0vZGVub3JtIGZsYWcKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNICMgaXMgaW5wdXQgYSBERU5PUk0/CisJYm5lLncJCUEyX3N0cgkJIyBubzsgaW5wdXQgaXMgYSBOT1JNCisKKyMKKyMgTm9ybWFsaXplIHRoZSBkZW5vcm0KKyMKK3VuX2RlX25vcm06CisJbW92LncJCSglYTApLCVkMAorCWFuZC53CQkmMHg3ZmZmLCVkMAkjIHN0cmlwIHNpZ24gb2Ygbm9ybWFsaXplZCBleHAKKwltb3YubAkJNCglYTApLCVkMQorCW1vdi5sCQk4KCVhMCksJWQyCitub3JtX2xvb3A6CisJc3ViLncJCSYxLCVkMAorCWxzbC5sCQkmMSwlZDIKKwlyb3hsLmwJCSYxLCVkMQorCXRzdC5sCQklZDEKKwliZ2UuYgkJbm9ybV9sb29wCisjCisjIFRlc3QgaWYgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgaXMgZGVub3JtYWxpemVkCisjCisJdHN0LncJCSVkMAorCWJndC5iCQlwb3NfZXhwCQkjIGlmIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCBpcyBhIG5vcm0KKwlzdAkJQklOREVDX0ZMRyglYTYpCSMgc2V0IGZsYWcgZm9yIGRlbm9ybQorcG9zX2V4cDoKKwlhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92LncJCSVkMCwoJWEwKQorCW1vdi5sCQklZDEsNCglYTApCisJbW92LmwJCSVkMiw4KCVhMCkKKworIyBBMi4gU2V0IFggPSBhYnMoaW5wdXQpLgorIworQTJfc3RyOgorCW1vdi5sCQkoJWEwKSxGUF9TQ1IxKCVhNikJIyBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3YubAkJNCglYTApLEZQX1NDUjErNCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCisJbW92LmwJCTgoJWEwKSxGUF9TQ1IxKzgoJWE2KQkjIG1vdmUgaW5wdXQgdG8gd29yayBzcGFjZQorCWFuZC5sCQkmMHg3ZmZmZmZmZixGUF9TQ1IxKCVhNikJIyBjcmVhdGUgYWJzKFgpCisKKyMgQTMuIENvbXB1dGUgSUxPRy4KKyMgICAgIElMT0cgaXMgdGhlIGxvZyBiYXNlIDEwIG9mIHRoZSBpbnB1dCB2YWx1ZS4gIEl0IGlzIGFwcHJveC0KKyMgICAgIGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyB2aWV3ZWQKKyMgICAgIGFzIDJeXmUgKiAxLmYgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLiAgVGhpcyB2YWx1ZSBpcyBzdG9yZWQKKyMgICAgIGluIGQ2LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBrLWZhY3Rvci9leHBvbmVudAorIwlkMjogeC94CisjCWQzOiB4L3gKKyMJZDQ6IHgveAorIwlkNTogeC94CisjCWQ2OiB4L0lMT0cKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogeC94CisjCWEyOiB4L3gKKyMJZnAwOiB4L2Zsb2F0KElMT0cpCisjCWZwMTogeC94CisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKS9BYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEuYgkJQTNfY29udAkJIyBpZiBjbHIsIGNvbnRpbnVlIHdpdGggbm9ybQorCW1vdi5sCQkmLTQ5MzMsJWQ2CSMgZm9yY2UgSUxPRyA9IC00OTMzCisJYnJhLmIJCUE0X3N0cgorQTNfY29udDoKKwltb3YudwkJRlBfU0NSMSglYTYpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCisJbW92LncJCSYweDNmZmYsRlBfU0NSMSglYTYpCSMgcmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgorCWZtb3YueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBub3cgZnAwIGhhcyAxLmYKKwlzdWIudwkJJjB4M2ZmZiwlZDAJIyBzdHJpcCBvZmYgYmlhcworCWZhZGQudwkJJWQwLCVmcDAJIyBhZGQgaW4gZXhwCisJZnN1Yi5zCQlGT05FKCVwYyksJWZwMAkjIHN1YnRyYWN0IG9mZiAxLjAKKwlmYmdlLncJCXBvc19yZXMJCSMgaWYgcG9zLCBicmFuY2gKKwlmbXVsLngJCVBMT0cyVVAxKCVwYyksJWZwMAkjIGlmIG5lZywgbXVsIGJ5IExPRzJVUDEKKwlmbW92LmwJCSVmcDAsJWQ2CSMgcHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCWJyYS5iCQlBNF9zdHIJCSMgZ28gbW92ZSBvdXQgSUxPRworcG9zX3JlczoKKwlmbXVsLngJCVBMT0cyKCVwYyksJWZwMAkjIGlmIHBvcywgbXVsIGJ5IExPRzIKKwlmbW92LmwJCSVmcDAsJWQ2CSMgcHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCisKKyMgQTQuIENsciBJTkVYIGJpdC4KKyMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorCitBNF9zdHI6CisJZm1vdi5sCQkmMCwlZnBzcgkjIHplcm8gYWxsIG9mIGZwc3IgLSBub3RoaW5nIG5lZWRlZAorCisKKyMgQTUuIFNldCBJQ1RSID0gMDsKKyMgICAgIElDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQorIyAgICAgbG9vcCBlbnRyeSBBNi4gVGhlIGxvd2VyIHdvcmQgb2YgZDUgaXMgdXNlZCBmb3IgSUNUUi4KKworCWNsci53CQklZDUJCSMgY2xlYXIgSUNUUgorCisjIEE2LiBDYWxjdWxhdGUgTEVOLgorIyAgICAgTEVOIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGJlIGRpc3BsYXllZC4gIFRoZSBrLWZhY3RvcgorIyAgICAgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLCBpZiBpdCBpcworIyAgICAgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQorIyAgICAgb3JpZ2luYWwgZGVjaW1hbCBwb2ludCB3aGljaCBhcmUgdG8gYmUgaW5jbHVkZWQgYXMKKyMgICAgIHNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgorIyAgICAgSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCisjICAgICBVU0VSX0ZQU1IuICBMRU4gaXMgc3RvcmVkIGluIGQ0LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBleHBvbmVudC9VbmNoYW5nZWQKKyMJZDI6IHgveC9zY3JhdGNoCisjCWQzOiB4L3gKKyMJZDQ6IGV4YyBwaWN0dXJlL0xFTgorIwlkNTogSUNUUi9VbmNoYW5nZWQKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHgveAorIwlhMjogeC94CisjCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCisjCWZwMTogeC94CisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBNl9zdHI6CisJdHN0LmwJCSVkNwkJIyBicmFuY2ggb24gc2lnbiBvZiBrCisJYmxlLmIJCWtfbmVnCQkjIGlmIGsgPD0gMCwgTEVOID0gSUxPRyArIDEgLSBrCisJbW92LmwJCSVkNywlZDQJCSMgaWYgayA+IDAsIExFTiA9IGsKKwlicmEuYgkJbGVuX2NrCQkjIHNraXAgdG8gTEVOIGNoZWNrCitrX25lZzoKKwltb3YubAkJJWQ2LCVkNAkJIyBmaXJzdCBsb2FkIElMT0cgdG8gZDQKKwlzdWIubAkJJWQ3LCVkNAkJIyBzdWJ0cmFjdCBvZmYgaworCWFkZHEubAkJJjEsJWQ0CQkjIGFkZCBpbiB0aGUgMQorbGVuX2NrOgorCXRzdC5sCQklZDQJCSMgTEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KKwlibGUuYgkJTEVOX25nCQkjIGlmIG5lZywgc2V0IExFTiA9IDEKKwljbXAubAkJJWQ0LCYxNwkJIyB0ZXN0IGlmIExFTiA+IDE3CisJYmxlLmIJCUE3X3N0cgkJIyBpZiBub3QsIGZvcmdldCBpdAorCW1vdi5sCQkmMTcsJWQ0CQkjIHNldCBtYXggTEVOID0gMTcKKwl0c3QubAkJJWQ3CQkjIGlmIG5lZ2F0aXZlLCBuZXZlciBzZXQgT1BFUlIKKwlibGUuYgkJQTdfc3RyCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQorCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKKwlicmEuYgkJQTdfc3RyCQkjIGZpbmlzaGVkIGhlcmUKK0xFTl9uZzoKKwltb3YubAkJJjEsJWQ0CQkjIG1pbiBMRU4gaXMgMQorCisKKyMgQTcuIENhbGN1bGF0ZSBTQ0FMRS4KKyMgICAgIFNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIKKyMgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCisjICAgICBpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZSBzaWduCisjICAgICBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuICBGcDEgY29udGFpbnMgMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcKKyMgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQorIyAgICAgQ29vbmVuLCBwLiA3LjIzIGFzIHJlZi47IGhvd2V2ZXIsIHRoZSBTQ0FMRSB2YXJpYWJsZSBpcworIyAgICAgb2Ygb3Bwb3NpdGUgc2lnbiBpbiBiaW5kZWMuc2EgZnJvbSBDb29uZW4pLgorIworIwlJbml0aWFsCQkJCQlVU0UKKyMJRlBDUls2OjVdCUxBTUJEQQlTSUdOKFgpCQlGUENSWzY6NV0KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkgUk4JMDAJICAgMAkgICAwCQkwMC8wCVJOCisjCSBSTgkwMAkgICAwCSAgIDEJCTAwLzAJUk4KKyMJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgorIwkgUk4JMDAJICAgMQkgICAxCQkwMC8wCVJOCisjCSBSWgkwMQkgICAwCSAgIDAJCTExLzMJUlAKKyMJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAorIwkgUloJMDEJICAgMQkgICAwCQkxMC8yCVJNCisjCSBSWgkwMQkgICAxCSAgIDEJCTEwLzIJUk0KKyMJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAorIwkgUk0JMTAJICAgMAkgICAxCQkxMC8yCVJNCisjCSBSTQkxMAkgICAxCSAgIDAJCTEwLzIJUk0KKyMJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAorIwkgUlAJMTEJICAgMAkgICAwCQkxMC8yCVJNCisjCSBSUAkxMQkgICAwCSAgIDEJCTExLzMJUlAKKyMJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAorIwkgUlAJMTEJICAgMQkgICAxCQkxMC8yCVJNCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IGV4cG9uZW50L3NjcmF0Y2ggLSBmaW5hbCBpcyAwCisjCWQyOiB4LzAgb3IgMjQgZm9yIEE5CisjCWQzOiB4L3NjcmF0Y2ggLSBvZmZzZXQgcHRyIGludG8gUFRFTlJNIGFycmF5CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiAwL0lDVFI6TEFNQkRBCisjCWQ2OiBJTE9HL0lMT0cgb3IgayBpZiAoKGs8PTApJihJTE9HPGspKQorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiB4L3B0ciB0byBQVEVOUk0gYXJyYXkKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IHgvMTBeSVNDQUxFCisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBN19zdHI6CisJdHN0LmwJCSVkNwkJIyB0ZXN0IHNpZ24gb2YgaworCWJndC5iCQlrX3BvcwkJIyBpZiBwb3MgYW5kID4gMCwgc2tpcCB0aGlzCisJY21wLmwJCSVkNywlZDYJCSMgdGVzdCBrIC0gSUxPRworCWJsdC5iCQlrX3BvcwkJIyBpZiBJTE9HID49IGssIHNraXAgdGhpcworCW1vdi5sCQklZDcsJWQ2CQkjIGlmICgoazwwKSAmIChJTE9HIDwgaykpIElMT0cgPSBrCitrX3BvczoKKwltb3YubAkJJWQ2LCVkMAkJIyBjYWxjIElMT0cgKyAxIC0gTEVOIGluIGQwCisJYWRkcS5sCQkmMSwlZDAJCSMgYWRkIHRoZSAxCisJc3ViLmwJCSVkNCwlZDAJCSMgc3ViIG9mZiBMRU4KKwlzd2FwCQklZDUJCSMgdXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQorCWNsci53CQklZDUJCSMgc2V0IGl0IHplcm8gaW5pdGlhbGx5CisJY2xyLncJCSVkMgkJIyBzZXQgdXAgZDIgZm9yIHZlcnkgc21hbGwgY2FzZQorCXRzdC5sCQklZDAJCSMgdGVzdCBzaWduIG9mIElTQ0FMRQorCWJnZS5iCQlpc2NhbGUJCSMgaWYgcG9zLCBza2lwIG5leHQgaW5zdAorCWFkZHEudwkJJjEsJWQ1CQkjIGlmIG5lZywgc2V0IExBTUJEQSB0cnVlCisJY21wLmwJCSVkMCwmMHhmZmZmZWNkNAkjIHRlc3QgaXNjYWxlIDw9IC00OTA4CisJYmd0LmIJCW5vX2luZgkJIyBpZiBmYWxzZSwgc2tpcCByZXN0CisJYWRkLmwJCSYyNCwlZDAJCSMgYWRkIGluIDI0IHRvIGlzY2FsZQorCW1vdi5sCQkmMjQsJWQyCQkjIHB1dCAyNCBpbiBkMiBmb3IgQTkKK25vX2luZjoKKwluZWcubAkJJWQwCQkjIGFuZCB0YWtlIGFicyBvZiBJU0NBTEUKK2lzY2FsZToKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCWJmZXh0dQkJVVNFUl9GUENSKCVhNil7JjI2OiYyfSwlZDEJIyBnZXQgaW5pdGlhbCBybW9kZSBiaXRzCisJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDI6MQorCWFkZC53CQklZDUsJWQxCQkjIGFkZCBpbiBMQU1CREEKKwlsc2wudwkJJjEsJWQxCQkjIHB1dCB0aGVtIGluIGJpdHMgMzoxCisJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIHgKKwliZ2UuYgkJeF9wb3MJCSMgaWYgcG9zLCBkb24ndCBzZXQgYml0IDAKKwlhZGRxLmwJCSYxLCVkMQkJIyBpZiBuZWcsIHNldCBiaXQgMAoreF9wb3M6CisJbGVhLmwJCVJCRFRCTCglcGMpLCVhMgkjIGxvYWQgcmJkdGJsIGJhc2UKKwltb3YuYgkJKCVhMiwlZDEpLCVkMwkjIGxvYWQgZDMgd2l0aCBuZXcgcm1vZGUKKwlsc2wubAkJJjQsJWQzCQkjIHB1dCBiaXRzIGluIHByb3BlciBwb3NpdGlvbgorCWZtb3YubAkJJWQzLCVmcGNyCSMgbG9hZCBiaXRzIGludG8gZnB1CisJbHNyLmwJCSY0LCVkMwkJIyBwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwl0c3QuYgkJJWQzCQkjIGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKKwlibmUuYgkJbm90X3JuCQkjIGlmIHplcm8sIGl0IGlzIFJOCisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSTiB0YWJsZSBiYXNlCisJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCitub3Rfcm46CisJbHNyLmIJCSYxLCVkMwkJIyBnZXQgbHNiIGluIGNhcnJ5CisJYmNjLmIJCW5vdF9ycDIJCSMgaWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCisJbGVhLmwJCVBURU5SUCglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSUCB0YWJsZSBiYXNlCisJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCitub3RfcnAyOgorCWxlYS5sCQlQVEVOUk0oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk0gdGFibGUgYmFzZQorcm1vZGU6CisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK2VfbG9vcDI6CisJbHNyLmwJCSYxLCVkMAkJIyBzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjLmIJCWVfbmV4dDIJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDI6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIElTQ0FMRSBpcyB6ZXJvCisJYm5lLmIJCWVfbG9vcDIJCSMgaWYgbm90LCBsb29wCisKKyMgQTguIENsciBJTkVYOyBGb3JjZSBSWi4KKyMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorIyAgICAgUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUKKyMgICAgIG9ubHkgb25lIHJvdW5kaW5nIGVycm9yLiAgVGhlIGdycyBiaXRzIGFyZSBjb2xsZWN0ZWQgaW4KKyMgICAgIHRoZSBJTkVYIGZsYWcgZm9yIHVzZSBpbiBBMTAuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKworCWZtb3YubAkJJjAsJWZwc3IJIyBjbHIgSU5FWAorCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBSWiByb3VuZGluZyBtb2RlCisKKyMgQTkuIFNjYWxlIFggLT4gWS4KKyMgICAgIFRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNpZ25pZmljYW50CisjICAgICBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkIGluIElORVgyLiBJZiBtdWwsCisjICAgICBDaGVjayBkMiBmb3IgZXhjZXNzIDEwIGV4cG9uZW50aWFsIHZhbHVlLiAgSWYgbm90IHplcm8sCisjICAgICB0aGUgaXNjYWxlIHZhbHVlIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBwd3J0ZW4gY2FsY3VsYXRpb24KKyMgICAgIHRvIG92ZXJmbG93LiAgT25seSBhIG5lZ2F0aXZlIGlzY2FsZSBjYW4gY2F1c2UgdGhpcywgc28KKyMgICAgIG11bHRpcGx5IGJ5IDEwXihkMiksIHdoaWNoIGlzIG5vdyBvbmx5IGFsbG93ZWQgdG8gYmUgMjQsCisjICAgICB3aXRoIGEgbXVsdGlwbHkgYnkgMTBeOCBhbmQgMTBeMTYsIHdoaWNoIGlzIGV4YWN0IHNpbmNlCisjICAgICAxMF4yNCBpcyBleGFjdC4gIElmIHRoZSBpbnB1dCB3YXMgZGVub3JtYWxpemVkLCB3ZSBtdXN0CisjICAgICBjcmVhdGUgYSBidXN5IHN0YWNrIGZyYW1lIHdpdGggdGhlIG11bCBjb21tYW5kIGFuZCB0aGUKKyMgICAgIHR3byBvcGVyYW5kcywgYW5kIGFsbG93IHRoZSBmcHUgdG8gY29tcGxldGUgdGhlIG11bHRpcGx5LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUENSIHdpdGggUlogbW9kZS9VbmNoYW5nZWQKKyMJZDI6IDAgb3IgMjQvdW5jaGFuZ2VkCisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBCisjCWQ2OiBJTE9HL1VuY2hhbmdlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiBwdHIgdG8gUFRFTlJNIGFycmF5L1VuY2hhbmdlZAorIwlhMjogeC94CisjCWZwMDogZmxvYXQoSUxPRykvWCBhZGp1c3RlZCBmb3IgU0NBTEUgKFkpCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTlfc3RyOgorCWZtb3YueAkJKCVhMCksJWZwMAkjIGxvYWQgWCBmcm9tIG1lbW9yeQorCWZhYnMueAkJJWZwMAkJIyB1c2UgYWJzKFgpCisJdHN0LncJCSVkNQkJIyBMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQorCWJuZS5iCQlzY19tdWwJCSMgaWYgbmVnIChMQU1CREEgPSAxKSwgc2NhbGUgYnkgbXVsCisJZmRpdi54CQklZnAxLCVmcDAJIyBjYWxjdWxhdGUgWCAvIFNDQUxFIC0+IFkgdG8gZnAwCisJYnJhLncJCUExMF9zdAkJIyBicmFuY2ggdG8gQTEwCisKK3NjX211bDoKKwl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQorCWJlcS53CQlBOV9ub3JtCQkjIGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggbXVsCisKKyMgZm9yIERFTk9STSwgd2UgbXVzdCBjYWxjdWxhdGU6CisjCWZwMCA9IGlucHV0X29wICogMTBeSVNDQUxFICogMTBeMjQKKyMgc2luY2UgdGhlIGlucHV0IG9wZXJhbmQgaXMgYSBERU5PUk0sIHdlIGNhbid0IG11bHRpcGx5IGl0IGRpcmVjdGx5LgorIyBzbywgd2UgZG8gdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBleHBvbmVudHMgYW5kIG1hbnRpc3NhcyBzZXBhcmF0ZWx5LgorIyBpbiB0aGlzIHdheSwgd2UgYXZvaWQgdW5kZXJmbG93IG9uIGludGVybWVkaWF0ZSBzdGFnZXMgb2YgdGhlCisjIG11bHRpcGxpY2F0aW9uIGFuZCBndWFyYW50ZWUgYSByZXN1bHQgd2l0aG91dCBleGNlcHRpb24uCisJZm1vdm0ueAkJJjB4MiwtKCVzcCkJIyBzYXZlIDEwXklTQ0FMRSB0byBzdGFjaworCisJbW92LncJCSglc3ApLCVkMwkjIGdyYWIgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQzCSMgY2xlYXIgc2lnbgorCW9yaS53CQkmMHg4MDAwLCglYTApCSMgbWFrZSBERU5PUk0gZXhwIG5lZ2F0aXZlCisJYWRkLncJCSglYTApLCVkMwkjIGFkZCBERU5PUk0gZXhwIHRvIDEwXklTQ0FMRSBleHAKKwlzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUworCWFkZC53CQkzNiglYTEpLCVkMworCXN1YmkudwkJJjB4M2ZmZiwlZDMJIyBzdWJ0cmFjdCBCSUFTCisJYWRkLncJCTQ4KCVhMSksJWQzCisJc3ViaS53CQkmMHgzZmZmLCVkMwkjIHN1YnRyYWN0IEJJQVMKKworCWJtaS53CQlzY19tdWxfZXJyCSMgaXMgcmVzdWx0IGlzIERFTk9STSwgcHVudCEhIQorCisJYW5kaS53CQkmMHg4MDAwLCglc3ApCSMga2VlcCBzaWduCisJb3IudwkJJWQzLCglc3ApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwoJWEwKQkjIGNsZWFyIHNpZ24gYml0IG9uIERFTk9STSBhZ2FpbgorCW1vdi5sCQkweDgoJWEwKSwtKCVzcCkgIyBwdXQgaW5wdXQgb3AgbWFudGlzc2Egb24gc3RrCisJbW92LmwJCTB4NCglYTApLC0oJXNwKQorCW1vdi5sCQkmMHgzZmZmMDAwMCwtKCVzcCkgIyBmb3JjZSBleHAgdG8gemVybworCWZtb3ZtLngJCSglc3ApKywmMHg4MAkjIGxvYWQgbm9ybWFsaXplZCBERU5PUk0gaW50byBmcDAKKwlmbXVsLngJCSglc3ApKywlZnAwCisKKyMJZm11bC54CTM2KCVhMSksJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF44CisjCWZtdWwueAk0OCglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeMTYKKwltb3YubAkJMzYrOCglYTEpLC0oJXNwKSAjIGdldCAxMF44IG1hbnRpc3NhCisJbW92LmwJCTM2KzQoJWExKSwtKCVzcCkKKwltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KKwltb3YubAkJNDgrOCglYTEpLC0oJXNwKSAjIGdldCAxMF4xNiBtYW50aXNzYQorCW1vdi5sCQk0OCs0KCVhMSksLSglc3ApCisJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSMgZm9yY2UgZXhwIHRvIHplcm8KKwlmbXVsLngJCSglc3ApKywlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVsLngJCSglc3ApKywlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CisJYnJhLmIJCUExMF9zdAorCitzY19tdWxfZXJyOgorCWJyYS5iCQlzY19tdWxfZXJyCisKK0E5X25vcm06CisJdHN0LncJCSVkMgkJIyB0ZXN0IGZvciBzbWFsbCBleHAgY2FzZQorCWJlcS5iCQlBOV9jb24JCSMgaWYgemVybywgY29udGludWUgYXMgbm9ybWFsCisJZm11bC54CQkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAorCWZtdWwueAkJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CitBOV9jb246CisJZm11bC54CQklZnAxLCVmcDAJIyBjYWxjdWxhdGUgWCAqIFNDQUxFIC0+IFkgdG8gZnAwCisKKyMgQTEwLiBPciBpbiBJTkVYLgorIyAgICAgIElmIElORVggaXMgc2V0LCByb3VuZCBlcnJvciBvY2N1cnJlZC4gIFRoaXMgaXMgY29tcGVuc2F0ZWQKKyMgICAgICBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8gdGhlIGxzYiBvZiBZLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUENSIHdpdGggUlogbW9kZS9GUFNSIHdpdGggSU5FWDIgaXNvbGF0ZWQKKyMJZDI6IHgveAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHgvcHRyIHRvIEZQX1NDUjEoYTYpCisjCWZwMDogWS9ZIHdpdGggbHNiIGFkanVzdGVkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorCitBMTBfc3Q6CisJZm1vdi5sCQklZnBzciwlZDAJIyBnZXQgRlBTUgorCWZtb3YueAkJJWZwMCxGUF9TQ1IxKCVhNikJIyBtb3ZlIFkgdG8gbWVtb3J5CisJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTIJIyBsb2FkIGEyIHdpdGggcHRyIHRvIEZQX1NDUjEKKwlidHN0CQkmOSwlZDAJCSMgY2hlY2sgaWYgSU5FWDIgc2V0CisJYmVxLmIJCUExMV9zdAkJIyBpZiBjbGVhciwgc2tpcCByZXN0CisJb3IubAkJJjEsOCglYTIpCSMgb3IgaW4gMSB0byBsc2Igb2YgbWFudGlzc2EKKwlmbW92LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgd3JpdGUgYWRqdXN0ZWQgWSBiYWNrIHRvIGZwdQorCisKKyMgQTExLiBSZXN0b3JlIG9yaWdpbmFsIEZQQ1I7IHNldCBzaXplIGV4dC4KKyMgICAgICBQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4gIEtlZXAKKyMgICAgICB0aGUgc2l6ZSB0byBleHRlbmRlZC4gIFRoZSBzaW50ZG8gZW50cnkgcG9pbnQgaW4gdGhlIHNpbnQKKyMgICAgICByb3V0aW5lIGV4cGVjdHMgdGhlIEZQQ1IgdmFsdWUgdG8gYmUgaW4gVVNFUl9GUENSIGZvcgorIyAgICAgIG1vZGUgYW5kIHByZWNpc2lvbi4gIFRoZSBvcmlnaW5hbCBGUENSIGlzIHNhdmVkIGluIExfU0NSMS4KKworQTExX3N0OgorCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSxMX1NDUjEoJWE2KQkjIHNhdmUgaXQgZm9yIGxhdGVyCisJYW5kLmwJCSYweDAwMDAwMDMwLFVTRVJfRlBDUiglYTYpCSMgc2V0IHNpemUgdG8gZXh0LAorIwkJCQkJO2Jsb2NrIGV4Y2VwdGlvbnMKKworCisjIEExMi4gQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4KKyMgICAgICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dCBpcyBpbiBmcDAuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IEZQU1Igd2l0aCBBSU5FWCBjbGVhcmVkL0ZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQKKyMJZDI6IHgveC9zY3JhdGNoCisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL1VuY2hhbmdlZAorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL3NyYyBwdHIgZm9yIHNpbnRkbworIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJYTY6IHRlbXAgcG9pbnRlciB0byBGUF9TQ1IxKGE2KSAtIG9yaWcgdmFsdWUgc2F2ZWQgYW5kIHJlc3RvcmVkCisjCWZwMDogWS9ZSU5UCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpZIGFkanVzdGVkIGZvciBpbmV4L1kgd2l0aCBvcmlnaW5hbCBleHBvbmVudAorIwlMX1NDUjE6eC9vcmlnaW5hbCBVU0VSX0ZQQ1IKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExMl9zdDoKKwltb3ZtLmwJJjB4YzBjMCwtKCVzcCkJIyBzYXZlIHJlZ3MgdXNlZCBieSBzaW50ZDAJIHslZDAtJWQxLyVhMC0lYTF9CisJbW92LmwJTF9TQ1IxKCVhNiksLSglc3ApCisJbW92LmwJTF9TQ1IyKCVhNiksLSglc3ApCisKKwlsZWEubAkJRlBfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBGUF9TQ1IxKGE2KQorCWZtb3YueAkJJWZwMCwoJWEwKQkjIG1vdmUgWSB0byBtZW1vcnkgYXQgRlBfU0NSMShhNikKKwl0c3QubAkJTF9TQ1IyKCVhNikJIyB0ZXN0IHNpZ24gb2Ygb3JpZ2luYWwgb3BlcmFuZAorCWJnZS5iCQlkb19maW50MTIJCSMgaWYgcG9zLCB1c2UgWQorCW9yLmwJCSYweDgwMDAwMDAwLCglYTApCSMgaWYgbmVnLCB1c2UgLVkKK2RvX2ZpbnQxMjoKKwltb3YubAlVU0VSX0ZQU1IoJWE2KSwtKCVzcCkKKyMJYnNyCXNpbnRkbwkJIyBzaW50IHJvdXRpbmUgcmV0dXJucyBpbnQgaW4gZnAwCisKKwlmbW92LmwJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92LmwJJjB4MCwlZnBzcgkJCSMgY2xlYXIgdGhlIEFFWEMgYml0cyEhIQorIyMJbW92LmwJCVVTRVJfRlBDUiglYTYpLCVkMAkjIGV4dCBwcmVjL2tlZXAgcm5kIG1vZGUKKyMjCWFuZGkubAkJJjB4MDAwMDAwMzAsJWQwCisjIwlmbW92LmwJCSVkMCwlZnBjcgorCWZpbnQueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBkbyBmaW50KCkKKwlmbW92LmwJJWZwc3IsJWQwCisJb3IudwklZDAsRlBTUl9FWENFUFQoJWE2KQorIyMJZm1vdi5sCQkmMHgwLCVmcGNyCisjIwlmbW92LmwJCSVmcHNyLCVkMAkJIyBkb24ndCBrZWVwIGNjb2RlcworIyMJb3IudwkJJWQwLEZQU1JfRVhDRVBUKCVhNikKKworCW1vdi5iCSglc3ApLFVTRVJfRlBTUiglYTYpCisJYWRkLmwJJjQsJXNwCisKKwltb3YubAkoJXNwKSssTF9TQ1IyKCVhNikKKwltb3YubAkoJXNwKSssTF9TQ1IxKCVhNikKKwltb3ZtLmwJKCVzcCkrLCYweDMwMwkjIHJlc3RvcmUgcmVncyB1c2VkIGJ5IHNpbnQJIHslZDAtJWQxLyVhMC0lYTF9CisKKwltb3YubAlMX1NDUjIoJWE2KSxGUF9TQ1IxKCVhNikJIyByZXN0b3JlIG9yaWdpbmFsIGV4cG9uZW50CisJbW92LmwJTF9TQ1IxKCVhNiksVVNFUl9GUENSKCVhNikJIyByZXN0b3JlIHVzZXIncyBGUENSCisKKyMgQTEzLiBDaGVjayBmb3IgTEVOIGRpZ2l0cy4KKyMgICAgICBJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAorIyAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KKyMgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQorIyAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQorIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90CisjICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKKyMgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KKyMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KKyMKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIHNpemUgc2V0IHRvIGV4dC9zY3JhdGNoIGZpbmFsID0gMAorIwlkMjogeC94CisjCWQzOiB4L3NjcmF0Y2ggZmluYWwgPSB4CisjCWQ0OiBMRU4vTEVOIGFkanVzdGVkCisjCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorIwlkNjogSUxPRy9JTE9HIGFkanVzdGVkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4LzEwXkxFTgorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCisjCUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTNfc3Q6CisJc3dhcAkJJWQ1CQkjIHB1dCBJQ1RSIGluIGxvd2VyIHdvcmQgb2YgZDUKKwl0c3QudwkJJWQ1CQkjIGNoZWNrIGlmIElDVFIgPSAwCisJYm5lCQlub3RfenIJCSMgaWYgbm9uLXplcm8sIGdvIHRvIHNlY29uZCB0ZXN0CisjCisjIENvbXB1dGUgMTBeKExFTi0xKQorIworCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCisJc3VicS5sCQkmMSwlZDAJCSMgZDAgPSBMRU4gLTEKKwljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAorbF9sb29wOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQlsX25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMgkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2xfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3QubAkJJWQwCQkjIHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmUuYgkJbF9sb29wCQkjIGlmIG5vdCwgbG9vcAorIworIyAxMF5MRU4tMSBpcyBjb21wdXRlZCBmb3IgdGhpcyB0ZXN0IGFuZCBBMTQuICBJZiB0aGUgaW5wdXQgd2FzCisjIGRlbm9ybWFsaXplZCwgY2hlY2sgb25seSB0aGUgY2FzZSBpbiB3aGljaCBZSU5UID4gMTBeTEVOLgorIworCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBpZiBpbnB1dCB3YXMgbm9ybQorCWJlcS5iCQlBMTNfY29uCQkjIGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggY2hlY2tpbmcKKwlmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAorCWJyYQkJdGVzdF8yCisjCisjIENvbXBhcmUgYWJzKFlJTlQpIHRvIDEwXihMRU4tMSkgYW5kIDEwXkxFTgorIworQTEzX2NvbjoKKwlmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAorCWZjbXAueAkJJWZwMCwlZnAyCSMgY29tcGFyZSBhYnMoWUlOVCkgd2l0aCAxMF4oTEVOLTEpCisJZmJnZS53CQl0ZXN0XzIJCSMgaWYgZ3JlYXRlciwgZG8gbmV4dCB0ZXN0CisJc3VicS5sCQkmMSwlZDYJCSMgc3VidHJhY3QgMSBmcm9tIElMT0cKKwltb3YudwkJJjEsJWQ1CQkjIHNldCBJQ1RSCisJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IHJtb2RlIHRvIFJNCisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCisJYnJhLncJCUE2X3N0cgkJIyByZXR1cm4gdG8gQTYgYW5kIHJlY29tcHV0ZSBZSU5UCit0ZXN0XzI6CisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCisJZmNtcC54CQklZnAwLCVmcDIJIyBjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXkxFTgorCWZibHQudwkJQTE0X3N0CQkjIGlmIGxlc3MsIGFsbCBpcyBvaywgZ28gdG8gQTE0CisJZmJndC53CQlmaXhfZXgJCSMgaWYgZ3JlYXRlciwgZml4IGFuZCByZWRvCisJZmRpdi5zCQlGVEVOKCVwYyksJWZwMAkjIGlmIGVxdWFsLCBkaXZpZGUgYnkgMTAKKwlhZGRxLmwJCSYxLCVkNgkJIyBhbmQgaW5jIElMT0cKKwlicmEuYgkJQTE0X3N0CQkjIGFuZCBjb250aW51ZSBlbHNld2hlcmUKK2ZpeF9leDoKKwlhZGRxLmwJCSYxLCVkNgkJIyBpbmNyZW1lbnQgSUxPRyBieSAxCisJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgorCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQorCWJyYS53CQlBNl9zdHIJCSMgcmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAorIworIyBTaW5jZSBJQ1RSIDw+IDAsIHdlIGhhdmUgYWxyZWFkeSBiZWVuIHRocm91Z2ggb25lIGFkanVzdG1lbnQsCisjIGFuZCBzaG91bGRuJ3QgaGF2ZSBhbm90aGVyOyB0aGlzIGlzIHRvIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgorIyAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCisjIHZhbHVlIGNhbGN1bGF0ZWQgY2Fubm90IGJlIGluZXhhY3QuCisjCitub3RfenI6CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMgkjIGluaXQgZnAyIHRvIDEuMAorCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAKKwljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAorel9sb29wOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQl6X25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMgkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK3pfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3QubAkJJWQwCQkjIHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmUuYgkJel9sb29wCQkjIGlmIG5vdCwgbG9vcAorCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzKFlJTlQpCisJZmNtcC54CQklZnAwLCVmcDIJIyBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KKwlmYm5lcS53CQlBMTRfc3QJCSMgaWYgbm90LCBza2lwIHRoaXMKKwlmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMAorCWFkZHEubAkJJjEsJWQ2CQkjIGFuZCBpbmMgSUxPRyBieSAxCisJYWRkcS5sCQkmMSwlZDQJCSMgYW5kIGluYyBMRU4KKwlmbXVsLnMJCUZURU4oJXBjKSwlZnAyCSMgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgorCisjIEExNC4gQ29udmVydCB0aGUgbWFudGlzc2EgdG8gYmNkLgorIyAgICAgIFRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAorIyAgICAgIG1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCisjICAgICAgdG8gYmUgYSBmcmFjdGlvbjsgaS5lLiAobWFudGlzc2EpLzEwXkxFTiBhbmQgYWRqdXN0ZWQKKyMgICAgICBzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgorIyAgICAgIFRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4KKyMgICAgICB0aGUgZmluYWwgc3RyaW5nIGFyZWEgaW4gbWVtb3J5LgorIworIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L0xFTiBjYWxsIHRvIGJpbnN0ciAtIGZpbmFsIGlzIDAKKyMJZDE6IHgvMAorIwlkMjogeC9tcyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCisjCWQzOiB4L2xzIDMyLWJpdHMgb2YgbWFudCBvZiBhYnMoWUlOVCkKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIwkgICAgL3B0ciB0byBmaXJzdCBtYW50aXNzYSBieXRlIGluIHJlc3VsdCBzdHJpbmcKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogaW50IHBvcnRpb24gb2YgWS9hYnMoWUlOVCkgYWRqdXN0ZWQKKyMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCisjCWZwMjogMTBeTEVOL1VuY2hhbmdlZAorIwlGX1NDUjE6eC9Xb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdAorIwlGX1NDUjI6WSB3aXRoIG9yaWdpbmFsIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE0X3N0OgorCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIGZvcmNlIHJ6IGZvciBjb252ZXJzaW9uCisJZmRpdi54CQklZnAyLCVmcDAJIyBkaXZpZGUgYWJzKFlJTlQpIGJ5IDEwXkxFTgorCWxlYS5sCQlGUF9TQ1IwKCVhNiksJWEwCisJZm1vdi54CQklZnAwLCglYTApCSMgbW92ZSBhYnMoWUlOVCkvMTBeTEVOIHRvIG1lbW9yeQorCW1vdi5sCQk0KCVhMCksJWQyCSMgbW92ZSAybmQgd29yZCBvZiBGUF9SRVMgdG8gZDIKKwltb3YubAkJOCglYTApLCVkMwkjIG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCisJY2xyLmwJCTQoJWEwKQkJIyB6ZXJvIHdvcmQgMiBvZiBGUF9SRVMKKwljbHIubAkJOCglYTApCQkjIHplcm8gd29yZCAzIG9mIEZQX1JFUworCW1vdi5sCQkoJWEwKSwlZDAJIyBtb3ZlIGV4cG9uZW50IHRvIGQwCisJc3dhcAkJJWQwCQkjIHB1dCBleHBvbmVudCBpbiBsb3dlciB3b3JkCisJYmVxLmIJCW5vX3NmdAkJIyBpZiB6ZXJvLCBkb24ndCBzaGlmdAorCXN1Yi5sCQkmMHgzZmZkLCVkMAkjIHN1YiBiaWFzIGxlc3MgMiB0byBtYWtlIGZyYWN0CisJdHN0LmwJCSVkMAkJIyBjaGVjayBpZiA+IDEKKwliZ3QuYgkJbm9fc2Z0CQkjIGlmIHNvLCBkb24ndCBzaGlmdAorCW5lZy5sCQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKK21fbG9vcDoKKwlsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0LCBhZGQgMHMKKwlyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZi53CQklZDAsbV9sb29wCSMgZ2l2ZW4gaW4gZDAKK25vX3NmdDoKKwl0c3QubAkJJWQyCQkjIGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCisJYm5lLmIJCW5vX3pyCQkjIGlmIG5vdCwgZ28gb24KKwl0c3QubAkJJWQzCQkjIGNvbnRpbnVlIHplcm8gY2hlY2sKKwliZXEuYgkJemVyX20JCSMgaWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCitub196cjoKKwljbHIubAkJJWQxCQkjIHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNworCWFkZHgubAkJJWQxLCVkMgkJIyBjb250aW51ZSBpbmMKKwlhbmQubAkJJjB4ZmZmZmZmODAsJWQzCSMgc3RyaXAgb2ZmIGxzYiBub3QgdXNlZCBieSA4ODIKK3plcl9tOgorCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJYWRkcS5sCQkmMywlYTAJCSMgYTAgcG9pbnRzIHRvIE0xNiBieXRlIGluIHJlc3VsdAorCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgbWFudAorCisKKyMgQTE1LiBDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCisjICAgICAgQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQorIyAgICAgIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBmaW5hbCBzdHJpbmcuCisjCisjICAgICAgRGlnaXRzIGFyZSBzdG9yZWQgaW4gTF9TQ1IxKGE2KSBvbiByZXR1cm4gZnJvbSBCSU5ERUMgYXM6CisjCisjCSAzMiAgICAgICAgICAgICAgIDE2IDE1ICAgICAgICAgICAgICAgIDAKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgMCB8IGUzIHwgZTIgfCBlMSB8IGU0IHwgIFggfCAgWCB8ICBYIHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQW5kIGFyZSBtb3ZlZCBpbnRvIHRoZWlyIHByb3BlciBwbGFjZXMgaW4gRlBfU0NSMC4gIElmIGRpZ2l0IGU0CisjIGlzIG5vbi16ZXJvLCBPUEVSUiBpcyBzaWduYWxlZC4gIEluIGFsbCBjYXNlcywgYWxsIDQgZGlnaXRzIGFyZQorIyB3cml0dGVuIGFzIHNwZWNpZmllZCBpbiB0aGUgODgxLzg4MiBtYW51YWwgZm9yIHBhY2tlZCBkZWNpbWFsLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L0xFTiBjYWxsIHRvIGJpbnN0ciAtIGZpbmFsIGlzIDAKKyMJZDE6IHgvc2NyYXRjaCAoMCk7c2hpZnQgY291bnQgZm9yIGZpbmFsIGV4cG9uZW50IHBhY2tpbmcKKyMJZDI6IHgvbXMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24vc2NyYXRjaAorIwlkMzogeC9scyAzMi1iaXRzIG9mIGV4cCBmcmFjdGlvbgorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIHRvIHJlc3VsdCBzdHJpbmcvcHRyIHRvIExfU0NSMShhNikKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogYWJzKFlJTlQpIGFkanVzdGVkL2Zsb2F0KElMT0cpCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOldvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0L0JDRCByZXN1bHQKKyMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9JTE9HLzEwXjQKKyMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9FeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTVfc3Q6CisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEuYgkJbm90X2Rlbm9ybQorCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybworCWZiZXEudwkJZGVuX3plcm8JIyBpZiB6ZXJvLCB1c2Ugay1mYWN0b3Igb3IgNDkzMworCWZtb3YubAkJJWQ2LCVmcDAJIyBmbG9hdCBJTE9HCisJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRworCWJyYS5iCQljb252cnQKK2Rlbl96ZXJvOgorCXRzdC5sCQklZDcJCSMgY2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKKwlibHQuYgkJdXNlX2lsb2cJIyBpZiBuZWdhdGl2ZSwgdXNlIElMT0cKKwlmbW92LnMJCUY0OTMzKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDQ5MzMKKwlicmEuYgkJY29udnJ0CQkjIGRvIGl0Cit1c2VfaWxvZzoKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKKwlicmEuYgkJY29udnJ0Citub3RfZGVub3JtOgorCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybworCWZibmVxLncJCW5vdF96ZXJvCSMgaWYgemVybywgZm9yY2UgZXhwb25lbnQKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAwCSMgZm9yY2UgZXhwb25lbnQgdG8gMQorCWJyYS5iCQljb252cnQJCSMgZG8gaXQKK25vdF96ZXJvOgorCWZtb3YubAkJJWQ2LCVmcDAJIyBmbG9hdCBJTE9HCisJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRworY29udnJ0OgorCWZkaXYueAkJMjQoJWExKSwlZnAwCSMgY29tcHV0ZSBJTE9HLzEwXjQKKwlmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgc3RvcmUgZnAwIGluIG1lbW9yeQorCW1vdi5sCQk0KCVhMiksJWQyCSMgbW92ZSB3b3JkIDIgdG8gZDIKKwltb3YubAkJOCglYTIpLCVkMwkjIG1vdmUgd29yZCAzIHRvIGQzCisJbW92LncJCSglYTIpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCisJYmVxLmIJCXhfbG9vcF9maW4JIyBpZiB6ZXJvLCBza2lwIHRoZSBzaGlmdAorCXN1Yi53CQkmMHgzZmZkLCVkMAkjIHN1YnRyYWN0IG9mZiBiaWFzCisJbmVnLncJCSVkMAkJIyBtYWtlIGV4cCBwb3NpdGl2ZQoreF9sb29wOgorCWxzci5sCQkmMSwlZDIJCSMgc2hpZnQgZDI6ZDMgcmlnaHQKKwlyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZi53CQklZDAseF9sb29wCSMgZ2l2ZW4gaW4gZDAKK3hfbG9vcF9maW46CisJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAorCWFkZC5sCQkmMHgwMDAwMDA4MCwlZDMJIyBpbmMgYXQgYml0IDYKKwlhZGR4LmwJCSVkMSwlZDIJCSMgY29udGludWUgaW5jCisJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCisJbW92LmwJCSY0LCVkMAkJIyBwdXQgNCBpbiBkMCBmb3IgYmluc3RyIGNhbGwKKwlsZWEubAkJTF9TQ1IxKCVhNiksJWEwCSMgYTAgaXMgcHRyIHRvIExfU0NSMSBmb3IgZXhwIGRpZ2l0cworCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkjIGxvYWQgTF9TQ1IxIGx3b3JkIHRvIGQwCisJbW92LmwJCSYxMiwlZDEJCSMgdXNlIGQxIGZvciBzaGlmdCBjb3VudAorCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCisJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjQ6JjEyfQkjIHB1dCBlMzplMjplMSBpbiBGUF9TQ1IwCisJbHNyLmwJCSVkMSwlZDAJCSMgc2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMTY6JjR9CSMgcHV0IGU0IGluIEZQX1NDUjAKKwl0c3QuYgkJJWQwCQkjIGNoZWNrIGlmIGU0IGlzIHplcm8KKwliZXEuYgkJQTE2X3N0CQkjIGlmIHplcm8sIHNraXAgcmVzdAorCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKKworCisjIEExNi4gV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4KKyMJICAgU2lnbWEgaXMgYml0IDMxIG9mIGluaXRpYWwgdmFsdWU7IFJITyBpcyBiaXQgMzEgb2YgZDYgKElMT0cpLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L3NjcmF0Y2ggLSBmaW5hbCBpcyB4CisjCWQyOiB4L3gKKyMJZDM6IHgveAorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cvSUxPRyBhZGp1c3RlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgdG8gTF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOkJDRCByZXN1bHQgd2l0aCBjb3JyZWN0IHNpZ25zCisjCUZfU0NSMjpJTE9HLzEwXjQKKyMJTF9TQ1IxOkV4cG9uZW50IGRpZ2l0cyBvbiByZXR1cm4gZnJvbSBiaW5zdHIKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExNl9zdDoKKwljbHIubAkJJWQwCQkjIGNsciBkMCBmb3IgY29sbGVjdGlvbiBvZiBzaWducworCWFuZC5iCQkmMHgwZixGUF9TQ1IwKCVhNikJIyBjbGVhciBmaXJzdCBuaWJibGUgb2YgRlBfU0NSMAorCXRzdC5sCQlMX1NDUjIoJWE2KQkjIGNoZWNrIHNpZ24gb2Ygb3JpZ2luYWwgbWFudGlzc2EKKwliZ2UuYgkJbWFudF9wCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNNCisJbW92LmwJCSYyLCVkMAkJIyBtb3ZlIDIgaW4gdG8gZDAgZm9yIFNNCittYW50X3A6CisJdHN0LmwJCSVkNgkJIyBjaGVjayBzaWduIG9mIElMT0cKKwliZ2UuYgkJd3Jfc2duCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNFCisJYWRkcS5sCQkmMSwlZDAJCSMgc2V0IGJpdCAwIGluIGQwIGZvciBTRQord3Jfc2duOgorCWJmaW5zCQklZDAsRlBfU0NSMCglYTYpeyYwOiYyfQkjIGluc2VydCBTTSBhbmQgU0UgaW50byBGUF9TQ1IwCisKKyMgQ2xlYW4gdXAgYW5kIHJlc3RvcmUgYWxsIHJlZ2lzdGVycyB1c2VkLgorCisJZm1vdi5sCQkmMCwlZnBzcgkjIGNsZWFyIHBvc3NpYmxlIGluZXgyL2FpbmV4IGJpdHMKKwlmbW92bS54CQkoJXNwKSssJjB4ZTAJIyAgeyVmcDAtJWZwMn0KKwltb3ZtLmwJCSglc3ApKywmMHg0ZmMJIyAgeyVkMi0lZDcvJWEyfQorCXJ0cworCisJZ2xvYmFsCQlQVEVOUk4KK1BURU5STjoKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCisJZ2xvYmFsCQlQVEVOUlAKK1BURU5SUDoKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ2CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE4CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCisJZ2xvYmFsCQlQVEVOUk0KK1BURU5STToKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlECSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0RGCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RAkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzYJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTQJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QQkjIDEwIF4gNDA5NgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGJpbnN0cigpOiBDb252ZXJ0cyBhIDY0LWJpdCBiaW5hcnkgaW50ZWdlciB0byBiY2QuCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDI6ZDMgPSA2NC1iaXQgYmluYXJ5IGludGVnZXIJCQkJCSMKKyMJZDAgICAgPSBkZXNpcmVkIGxlbmd0aCAoTEVOKQkJCQkJIworIwlhMCAgICA9IHBvaW50ZXIgdG8gc3RhcnQgaW4gbWVtb3J5IGZvciBiY2QgY2hhcmFjdGVycwkJIworIwkJKFRoaXMgcG9pbnRlciBtdXN0IHBvaW50IHRvIGJ5dGUgNCBvZiB0aGUgZmlyc3QJCSMKKyMJCSBsd29yZCBvZiB0aGUgcGFja2VkIGRlY2ltYWwgbWVtb3J5IHN0cmluZy4pCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gTEVOIGJjZCBkaWdpdHMgcmVwcmVzZW50aW5nIHRoZSA2NC1iaXQgaW50ZWdlci4JIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIDY0LWJpdCBiaW5hcnkgaXMgYXNzdW1lZCB0byBoYXZlIGEgZGVjaW1hbCBwb2ludCBiZWZvcmUJIworIwliaXQgNjMuICBUaGUgZnJhY3Rpb24gaXMgbXVsdGlwbGllZCBieSAxMCB1c2luZyBhIG11bCBieSAyCSMKKyMJc2hpZnQgYW5kIGEgbXVsIGJ5IDggc2hpZnQuICBUaGUgYml0cyBzaGlmdGVkIG91dCBvZiB0aGUJIworIwltc2IgZm9ybSBhIGRlY2ltYWwgZGlnaXQuICBUaGlzIHByb2Nlc3MgaXMgaXRlcmF0ZWQgdW50aWwJIworIwlMRU4gZGlnaXRzIGFyZSBmb3JtZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQTEuIEluaXQgZDcgdG8gMS4gIEQ3IGlzIHRoZSBieXRlIGRpZ2l0IGNvdW50ZXIsIGFuZCBpZiAxLCB0aGUJIworIyAgICAgZGlnaXQgZm9ybWVkIHdpbGwgYmUgYXNzdW1lZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQuICBUaGlzIGlzCSMKKyMgICAgIHRvIGZvcmNlIHRoZSBmaXJzdCBieXRlIGZvcm1lZCB0byBoYXZlIGEgMCBpbiB0aGUgdXBwZXIgNCBiaXRzLgkjCisjCQkJCQkJCQkJIworIyBBMi4gQmVnaW5uaW5nIG9mIHRoZSBsb29wOgkJCQkJCSMKKyMgICAgIENvcHkgdGhlIGZyYWN0aW9uIGluIGQyOmQzIHRvIGQ0OmQ1LgkJCQkjCisjCQkJCQkJCQkJIworIyBBMy4gTXVsdGlwbHkgdGhlIGZyYWN0aW9uIGluIGQyOmQzIGJ5IDggdXNpbmcgYml0LWZpZWxkCQkjCisjICAgICBleHRyYWN0cyBhbmQgc2hpZnRzLiAgVGhlIHRocmVlIG1zYnMgZnJvbSBkMiB3aWxsIGdvIGludG8gZDEuCSMKKyMJCQkJCQkJCQkjCisjIEE0LiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDQ6ZDUgYnkgMiB1c2luZyBzaGlmdHMuICBUaGUgbXNiCSMKKyMgICAgIHdpbGwgYmUgY29sbGVjdGVkIGJ5IHRoZSBjYXJyeS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIEE1LiBBZGQgdXNpbmcgdGhlIGNhcnJ5IHRoZSA2NC1iaXQgcXVhbnRpdGllcyBpbiBkMjpkMyBhbmQgZDQ6ZDUJIworIyAgICAgaW50byBkMjpkMy4gIEQxIHdpbGwgY29udGFpbiB0aGUgYmNkIGRpZ2l0IGZvcm1lZC4JCSMKKyMJCQkJCQkJCQkjCisjIEE2LiBUZXN0IGQ3LiAgSWYgemVybywgdGhlIGRpZ2l0IGZvcm1lZCBpcyB0aGUgbXMgZGlnaXQuICBJZiBub24tCSMKKyMgICAgIHplcm8sIGl0IGlzIHRoZSBscyBkaWdpdC4gIFB1dCB0aGUgZGlnaXQgaW4gaXRzIHBsYWNlIGluIHRoZQkjCisjICAgICB1cHBlciB3b3JkIG9mIGQwLiAgSWYgaXQgaXMgdGhlIGxzIGRpZ2l0LCB3cml0ZSB0aGUgd29yZAkJIworIyAgICAgZnJvbSBkMCB0byBtZW1vcnkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIwlJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyMKKyMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgorIworIwkJZDA6IExFTiBjb3VudGVyCisjCQlkMTogdGVtcCB1c2VkIHRvIGZvcm0gdGhlIGRpZ2l0CisjCQlkMjogdXBwZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKKyMJCWQzOiBsb3dlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgOAorIwkJZDQ6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCisjCQlkNTogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDIKKyMJCWQ2OiB0ZW1wIGZvciBiaXQtZmllbGQgZXh0cmFjdHMKKyMJCWQ3OiBieXRlIGRpZ2l0IGZvcm1hdGlvbiB3b3JkO2RpZ2l0IGNvdW50IHswLDF9CisjCQlhMDogcG9pbnRlciBpbnRvIG1lbW9yeSBmb3IgcGFja2VkIGJjZCBzdHJpbmcgZm9ybWF0aW9uCisjCisKKwlnbG9iYWwJCWJpbnN0cgorYmluc3RyOgorCW1vdm0ubAkJJjB4ZmYwMCwtKCVzcCkJIyAgeyVkMC0lZDd9CisKKyMKKyMgQTE6IEluaXQgZDcKKyMKKwltb3YubAkJJjEsJWQ3CQkjIGluaXQgZDcgZm9yIHNlY29uZCBkaWdpdAorCXN1YnEubAkJJjEsJWQwCQkjIGZvciBkYmYgZDAgd291bGQgaGF2ZSBMRU4rMSBwYXNzZXMKKyMKKyMgQTIuIENvcHkgZDI6ZDMgdG8gZDQ6ZDUuICBTdGFydCBsb29wLgorIworbG9vcDoKKwltb3YubAkJJWQyLCVkNAkJIyBjb3B5IHRoZSBmcmFjdGlvbiBiZWZvcmUgbXVscworCW1vdi5sCQklZDMsJWQ1CQkjIHRvIGQ0OmQ1CisjCisjIEEzLiBNdWx0aXBseSBkMjpkMyBieSA4OyBleHRyYWN0IG1zYnMgaW50byBkMS4KKyMKKwliZmV4dHUJCSVkMnsmMDomM30sJWQxCSMgY29weSAzIG1zYnMgb2YgZDIgaW50byBkMQorCWFzbC5sCQkmMywlZDIJCSMgc2hpZnQgZDIgbGVmdCBieSAzIHBsYWNlcworCWJmZXh0dQkJJWQzeyYwOiYzfSwlZDYJIyBjb3B5IDMgbXNicyBvZiBkMyBpbnRvIGQ2CisJYXNsLmwJCSYzLCVkMwkJIyBzaGlmdCBkMyBsZWZ0IGJ5IDMgcGxhY2VzCisJb3IubAkJJWQ2LCVkMgkJIyBvciBpbiBtc2JzIGZyb20gZDMgaW50byBkMgorIworIyBBNC4gTXVsdGlwbHkgZDQ6ZDUgYnkgMjsgYWRkIGNhcnJ5IG91dCB0byBkMS4KKyMKKwlhc2wubAkJJjEsJWQ1CQkjIG11bCBkNSBieSAyCisJcm94bC5sCQkmMSwlZDQJCSMgbXVsIGQ0IGJ5IDIKKwlzd2FwCQklZDYJCSMgcHV0IDAgaW4gZDYgbG93ZXIgd29yZAorCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKKyMKKyMgQTUuIEFkZCBtdWwgYnkgOCB0byBtdWwgYnkgMi4gIEQxIGNvbnRhaW5zIHRoZSBkaWdpdCBmb3JtZWQuCisjCisJYWRkLmwJCSVkNSwlZDMJCSMgYWRkIGxvd2VyIDMyIGJpdHMKKwlub3AJCQkJIyBFUlJBVEEgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHgubAkJJWQ0LCVkMgkJIyBhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cworCW5vcAkJCQkjIEVSUkFUQSBGSVggIzEzIChSZXYuIDEuMiA2LzYvOTApCisJYWRkeC53CQklZDYsJWQxCQkjIGFkZCBpbiBleHRlbmQgZnJvbSBhZGQgdG8gZDEKKwlzd2FwCQklZDYJCSMgd2l0aCBkNiA9IDA7IHB1dCAwIGluIHVwcGVyIHdvcmQKKyMKKyMgQTYuIFRlc3QgZDcgYW5kIGJyYW5jaC4KKyMKKwl0c3QudwkJJWQ3CQkjIGlmIHplcm8sIHN0b3JlIGRpZ2l0ICYgdG8gbG9vcAorCWJlcS5iCQlmaXJzdF9kCQkjIGlmIG5vbi16ZXJvLCBmb3JtIGJ5dGUgJiB3cml0ZQorc2VjX2Q6CisJc3dhcAkJJWQ3CQkjIGJyaW5nIGZpcnN0IGRpZ2l0IHRvIHdvcmQgZDdiCisJYXNsLncJCSY0LCVkNwkJIyBmaXJzdCBkaWdpdCBpbiB1cHBlciA0IGJpdHMgZDdiCisJYWRkLncJCSVkMSwlZDcJCSMgYWRkIGluIGxzIGRpZ2l0IHRvIGQ3YgorCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgZDdiIGJ5dGUgaW4gbWVtb3J5CisJc3dhcAkJJWQ3CQkjIHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWNsci53CQklZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKKwlkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKKwlicmEuYgkJZW5kX2JzdHIJIyBmaW5pc2hlZCwgc28gZXhpdAorZmlyc3RfZDoKKwlzd2FwCQklZDcJCSMgcHV0IGRpZ2l0IHdvcmQgaW4gZDdiCisJbW92LncJCSVkMSwlZDcJCSMgcHV0IG5ldyBkaWdpdCBpbiBkN2IKKwlzd2FwCQklZDcJCSMgcHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCisJYWRkcS53CQkmMSwlZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgZmlyc3QgZGlnaXQgZG9uZQorCWRiZi53CQklZDAsbG9vcAkjIGRvIGxvb3Agc29tZSBtb3JlIQorCXN3YXAJCSVkNwkJIyBwdXQgbGFzdCBkaWdpdCBpbiBzdHJpbmcKKwlsc2wudwkJJjQsJWQ3CQkjIG1vdmUgaXQgdG8gdXBwZXIgNCBiaXRzCisJbW92LmIJCSVkNywoJWEwKSsJIyBzdG9yZSBpdCBpbiBtZW1vcnkgc3RyaW5nCisjCisjIENsZWFuIHVwIGFuZCByZXR1cm4gd2l0aCByZXN1bHQgaW4gZnAwLgorIworZW5kX2JzdHI6CisJbW92bS5sCQkoJXNwKSssJjB4ZmYJIyAgeyVkMC0lZDd9CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFjY19pbl9iKCk6IGRtZW1fcmVhZF9ieXRlIGZhaWxlZAkJCQkjCisjCWZhY2NfaW5fdygpOiBkbWVtX3JlYWRfd29yZCBmYWlsZWQJCQkJIworIwlmYWNjX2luX2woKTogZG1lbV9yZWFkX2xvbmcgZmFpbGVkCQkJCSMKKyMJZmFjY19pbl9kKCk6IGRtZW1fcmVhZCBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCisjCWZhY2NfaW5feCgpOiBkbWVtX3JlYWQgb2YgZXh0IHByZWMgZmFpbGVkCQkJIworIwkJCQkJCQkJCSMKKyMJZmFjY19vdXRfYigpOiBkbWVtX3dyaXRlX2J5dGUgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfdygpOiBkbWVtX3dyaXRlX3dvcmQgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfbCgpOiBkbWVtX3dyaXRlX2xvbmcgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfZCgpOiBkbWVtX3dyaXRlIG9mIGRibCBwcmVjIGZhaWxlZAkJCSMKKyMJZmFjY19vdXRfeCgpOiBkbWVtX3dyaXRlIG9mIGV4dCBwcmVjIGZhaWxlZAkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yZWFsX2FjY2VzcygpIC0gZXhpdCB0aHJvdWdoIGFjY2VzcyBlcnJvciBoYW5kbGVyCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGbG93IGp1bXBzIGhlcmUgd2hlbiBhbiBGUCBkYXRhIGZldGNoIGNhbGwgZ2V0cyBhbiBlcnJvcgkjCisjIHJlc3VsdC4gVGhpcyBtZWFucyB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3YW50cyBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUJIworIyBtYWRlIG91dCBvZiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCQkJIworIwlTbywgd2UgZmlyc3QgY2FsbCByZXN0b3JlKCkgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IGFueSB1cGRhdGVkCSMKKyMgLShhbikrIHJlZ2lzdGVyIGdldHMgcmV0dXJuZWQgdG8gaXRzIHByZS1leGNlcHRpb24gdmFsdWUgYW5kIHRoZW4JIworIyB3ZSBjaGFuZ2UgdGhlIHN0YWNrIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZS4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmYWNjX2luX2I6CisJbW92cS5sCQkmMHgxLCVkMAkJCSMgb25lIGJ5dGUKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxMjEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS53CQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX3c6CisJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTQxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl9sOgorCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxMDEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX2Q6CisJbW92cS5sCQkmMHg4LCVkMAkJCSMgZWlnaHQgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxNjEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX3g6CisJbW92cS5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmYWNjX291dF9iOgorCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X3c6CisJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBjMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X2w6CisJbW92cS5sCQkmMHg0LCVkMAkJCSMgZm91ciBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwODEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF9kOgorCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X3g6CisJbW92LmwJCSYweGMsJWQwCQkJIyB0d2VsdmUgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KKworCW1vdi53CQkmMHgwMGUxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKworIyBoZXJlJ3Mgd2hlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSBhY2Nlc3MgZXJyb3IgZnJhbWUgZnJvbSB0aGUKKyMgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCitmYWNjX2ZpbmlzaDoKKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCW1vdi5sCQkoJXNwKSwtKCVzcCkJCSMgc3RvcmUgU1IsIGhpKFBDKQorCW1vdi5sCQkweDgoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQorCW1vdi5sCQkweGMoJXNwKSwweDgoJXNwKQkjIHN0b3JlIEVBCisJbW92LmwJCSYweDAwMDAwMDAxLDB4Yyglc3ApCSMgc3RvcmUgRlNMVworCW1vdi53CQkweDYoJXNwKSwweGMoJXNwKQkjIGZpeCBGU0xXIChzaXplKQorCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgdm9mZgorCisJYnRzdAkJJjB4NSwoJXNwKQkJIyBzdXBlcnZpc29yIG9yIHVzZXIgbW9kZT8KKwliZXEuYgkJZmFjY19vdXQyCQkjIHVzZXIKKwlic2V0CQkmMHgyLDB4ZCglc3ApCQkjIHNldCBzdXBlcnZpc29yIFRNIGJpdAorCitmYWNjX291dDI6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBpZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMgcHJlZGVjcmVtZW50IG9yIHBvc3RpbmNyZW1lbnQsCisjIHRoZSBlbXVsYXRpb24gaGFzIGFscmVhZHkgY2hhbmdlZCBpdHMgdmFsdWUgdG8gdGhlIGNvcnJlY3QgcG9zdC0KKyMgaW5zdHJ1Y3Rpb24gdmFsdWUuIGJ1dCBzaW5jZSB3ZSdyZSBleGl0aW5nIHRvIHRoZSBhY2Nlc3MgZXJyb3IKKyMgaGFuZGxlciwgdGhlbiBBTiBtdXN0IGJlIHJldHVybmVkIHRvIGl0cyBwcmUtaW5zdHJ1Y3Rpb24gdmFsdWUuCisjIHdlIGRvIHRoYXQgaGVyZS4KK3Jlc3RvcmU6CisJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgZXh0cmFjdCBvcG1vZGUKKwljbXBpLmIJCSVkMSwmMHgxOAkJIyBwb3N0aW5jPworCWJlcS53CQlyZXN0X2luYworCWNtcGkuYgkJJWQxLCYweDIwCQkjIHByZWRlYz8KKwliZXEudwkJcmVzdF9kZWMKKwlydHMKKworcmVzdF9pbmM6CisJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDA3LCVkMQkJIyBmZXRjaCBBbgorCisJbW92LncJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3Jlc3RfaW5jLmIsJXBjLCVkMS53KjEpCisKK3RibF9yZXN0X2luYzoKKwlzaG9ydAkJcmlfYTAgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTEgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTIgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTMgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTQgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTUgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTYgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTcgLSB0YmxfcmVzdF9pbmMKKworcmlfYTA6CisJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikJIyBmaXggc3RhY2tlZCBhMAorCXJ0cworcmlfYTE6CisJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikJIyBmaXggc3RhY2tlZCBhMQorCXJ0cworcmlfYTI6CisJc3ViLmwJCSVkMCwlYTIJCQkjIGZpeCBhMgorCXJ0cworcmlfYTM6CisJc3ViLmwJCSVkMCwlYTMJCQkjIGZpeCBhMworCXJ0cworcmlfYTQ6CisJc3ViLmwJCSVkMCwlYTQJCQkjIGZpeCBhNAorCXJ0cworcmlfYTU6CisJc3ViLmwJCSVkMCwlYTUJCQkjIGZpeCBhNQorCXJ0cworcmlfYTY6CisJc3ViLmwJCSVkMCwoJWE2KQkJIyBmaXggc3RhY2tlZCBhNgorCXJ0cworIyBpZiBpdCdzIGEgZm1vdmUgb3V0IGluc3RydWN0aW9uLCB3ZSBkb24ndCBoYXZlIHRvIGZpeCBhNworIyBiZWNhdXNlIHdlIGhhZG4ndCBjaGFuZ2VkIGl0IHlldC4gaWYgaXQncyBhbiBvcGNsYXNzIHR3bworIyBpbnN0cnVjdGlvbiAoZGF0YSBtb3ZlZCBpbikgYW5kIHRoZSBleGNlcHRpb24gd2FzIGluIHN1cGVydmlzb3IKKyMgbW9kZSwgdGhlbiBhbHNvIGFsc28gd2Fzbid0IHVwZGF0ZWQuIGlmIGl0IHdhcyB1c2VyIG1vZGUsIHRoZW4KKyMgcmVzdG9yZSB0aGUgY29ycmVjdCBhNyB3aGljaCBpcyBpbiB0aGUgVVNQIGN1cnJlbnRseS4KK3JpX2E3OgorCWNtcGkuYgkJRVhDX1ZPRkYoJWE2KSwmMHgzMAkjIG1vdmUgaW4gb3Igb3V0PworCWJuZS5iCQlyaV9hN19kb25lCQkjIG91dAorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUuYgkJcmlfYTdfZG9uZQkJIyBzdXBlcnZpc29yCisJbW92YwkJJXVzcCwlYTAJCSMgcmVzdG9yZSBVU1AKKwlzdWIubAkJJWQwLCVhMAorCW1vdmMJCSVhMCwldXNwCityaV9hN19kb25lOgorCXJ0cworCisjIG5lZWQgdG8gaW52ZXJ0IGFkanVzdG1lbnQgdmFsdWUgaWYgdGhlIDxlYT4gd2FzIHByZWRlYworcmVzdF9kZWM6CisJbmVnLmwJCSVkMAorCWJyYS5iCQlyZXN0X2luYwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mdGVzdC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mdGVzdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZGNiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Z0ZXN0LlMKQEAgLTAsMCArMSwxNDU2IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldAlTUkVHUywJCS02NAorc2V0CUlSRUdTLAkJLTEyOAorc2V0CUlGUFJFR1MsCS0yMjQKK3NldAlTRlBSRUdTLAktMzIwCitzZXQJSUZQQ1JFR1MsCS0zMzIKK3NldAlTRlBDUkVHUywJLTM0NAorc2V0CUlDQ1IsCQktMzQ2CitzZXQJU0NDUiwJCS0zNDgKK3NldAlURVNUQ1RSLAktMzUyCitzZXQJREFUQSwJCS0zODQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitURVNUVE9QOgorCWJyYS5sCQlfMDYwVEVTVFNfCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV8wNjBURVNUU191bmltcAorCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfMDYwVEVTVFNfZW5hYmxlCisJc2hvcnQJCTB4MDAwMAorCitzdGFydF9zdHI6CisJc3RyaW5nCQkiVGVzdGluZyA2ODA2MCBGUFNQIHN0YXJ0ZWQ6XG4iCisKK3N0YXJ0X3N0cl91bmltcDoKKwlzdHJpbmcJCSJUZXN0aW5nIDY4MDYwIEZQU1AgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiBzdGFydGVkOlxuIgorCitzdGFydF9zdHJfZW5hYmxlOgorCXN0cmluZwkJIlRlc3RpbmcgNjgwNjAgRlBTUCBleGNlcHRpb24gZW5hYmxlZCBzdGFydGVkOlxuIgorCitwYXNzX3N0cjoKKwlzdHJpbmcJCSJwYXNzZWRcbiIKKworZmFpbF9zdHI6CisJc3RyaW5nCQkiIGZhaWxlZFxuIgorCisJYWxpZ24JCTB4NAorY2hrX3Rlc3Q6CisJdHN0LmwJCSVkMAorCWJuZS5iCQl0ZXN0X2ZhaWwKK3Rlc3RfcGFzczoKKwlwZWEJCXBhc3Nfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKK3Rlc3RfZmFpbDoKKwltb3YubAkJJWQxLC0oJXNwKQorCWJzci5sCQlfcHJpbnRfbnVtCisJYWRkcS5sCQkmMHg0LCVzcAorCisJcGVhCQlmYWlsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworXzA2MFRFU1RTXzoKKwlsaW5rCQklYTYsJi0zODQKKworCW1vdm0ubAkJJjB4M2YzYywtKCVzcCkKKwlmbW92bS54CQkmMHhmZiwtKCVzcCkKKworCXBlYQkJc3RhcnRfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworIyMjIGVmZmFkZAorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWVmZmFkZF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCWVmZmFkZF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIHVuc3VwcAorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCXVuc3VwcF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCXVuc3VwcF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIG92Zmwgbm9uLW1hc2thYmxlCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJb3ZmbF9ubV9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYnNyLmwJCW92Zmxfbm1fMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyB1bmZsIG5vbi1tYXNrYWJsZQorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCXVuZmxfbm1fc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWJzci5sCQl1bmZsX25tXzAKKworCWJzci5sCQljaGtfdGVzdAorCisJbW92bS5sCQkoJXNwKSssJjB4M2NmYworCWZtb3ZtLngJCSglc3ApKywmMHhmZgorCisJdW5sawkJJWE2CisJcnRzCisKK18wNjBURVNUU191bmltcDoKKwlsaW5rCQklYTYsJi0zODQKKworCW1vdm0ubAkJJjB4M2YzYywtKCVzcCkKKwlmbW92bS54CQkmMHhmZiwtKCVzcCkKKworCXBlYQkJc3RhcnRfc3RyX3VuaW1wKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworIyMjIHVuaW1wCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJdW5pbXBfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQl1bmltcF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworCW1vdm0ubAkJKCVzcCkrLCYweDNjZmMKKwlmbW92bS54CQkoJXNwKSssJjB4ZmYKKworCXVubGsJCSVhNgorCXJ0cworCitfMDYwVEVTVFNfZW5hYmxlOgorCWxpbmsJCSVhNiwmLTM4NAorCisJbW92bS5sCQkmMHgzZjNjLC0oJXNwKQorCWZtb3ZtLngJCSYweGZmLC0oJXNwKQorCisJcGVhCQlzdGFydF9zdHJfZW5hYmxlKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworIyMjIHNuYW4KKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQlzbmFuX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJc25hbl8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIG9wZXJyCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJb3BlcnJfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWJzci5sCQlvcGVycl8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIG92ZmwKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQlvdmZsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJb3ZmbF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIHVuZmwKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQl1bmZsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJdW5mbF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIGR6CisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJZHpfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWJzci5sCQlkel8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIGluZXhhY3QKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQlpbmV4X3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJaW5leF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworCW1vdm0ubAkJKCVzcCkrLCYweDNjZmMKKwlmbW92bS54CQkoJXNwKSssJjB4ZmYKKworCXVubGsJCSVhNgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1bmltcF9zdHI6CisJc3RyaW5nCQkiXHRVbmltcGxlbWVudGVkIEZQIGluc3RydWN0aW9ucy4uLiIKKworCWFsaWduCQkweDQKK3VuaW1wXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDQwMDAwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4YzkwZmRhYTIsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgyMTY4YzIzNSxEQVRBKzB4OCglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuaW1wXzBfcGM6CisJZnNpbi54CQlEQVRBKCVhNiksJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4YmZiZjAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDgwMDAyMDgsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuaW1wXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK3VuaW1wXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDNmZmUwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4YzkwZmRhYTIsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgyMTY4YzIzNSxEQVRBKzB4OCglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuaW1wXzFfcGM6CisJZnRhbi54CQlEQVRBKCVhNiksJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4M2ZmZjAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDAyMDgsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuaW1wXzFfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgZm1vdmVjcgordW5pbXBfMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuaW1wXzJfcGM6CisJZm1vdmNyLngJJjB4MzEsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4NDAwMDAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg5MzVkOGRkZCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGFhYThhYzE3LElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDAyMDgsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuaW1wXzJfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgZnNjYwordW5pbXBfMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwlmbW92LmwJCSYweDBmMDAwMDAwLCVmcHNyCisJbW92LmwJCSYweDAwLCVkNworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmltcF8zX3BjOgorCWZzZ3QJCSVkNworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LmwJCSYweDBmMDA4MDgwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF8zX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIGZkYmNjCit1bmltcF80OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCWZtb3YubAkJJjB4MGYwMDAwMDAsJWZwc3IKKwltb3YubAkJJjB4MiwlZDcKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYwordW5pbXBfNF9wYzoKKwlmZGJndC53CQklZDcsdW5pbXBfNF9wYworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LncJCSYweGZmZmYsSVJFR1MrMjgrMiglYTYpCisJbW92LmwJCSYweDBmMDA4MDgwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF80X3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIGZ0cmFwY2MKK3VuaW1wXzU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJZm1vdi5sCQkmMHgwZjAwMDAwMCwlZnBzcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmltcF81X3BjOgorCWZ0cGd0LmwJCSYweGFiY2RlZjAxCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKwltb3YubAkJJjB4MGYwMDgwODAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuaW1wXzVfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlZmZhZGRfc3RyOgorCXN0cmluZwkJIlx0VW5pbXBsZW1lbnRlZCA8ZWE+Li4uIgorCisJYWxpZ24JCTB4NAorZWZmYWRkXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdi5iCQkmMHgyLCVmcDAKKworCW1vdi53CQkmMHgwMDAwLCVjYworZWZmYWRkXzBfcGM6CisJZm11bC54CQkmMHhjMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4YzAwMTAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDgwMDAwMDAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCWVmZmFkZF8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlZmZhZGRfMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK2VmZmFkZF8xX3BjOgorCWZhYnMucAkJJjB4YzEyMzAwMDEyMzQ1Njc4OTEyMzQ1Njc4LCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDNlNjYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ZDBlZDIzZTgsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhkMTQwMzViYyxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMTA4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQllZmZhZGRfMV9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZm1vdm1sXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdm0ubAkJJjB4ZmZmZmZmZmZmZmZmZmZmZiwlZnBjciwlZnBzcgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDBmZmYwLElGUENSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDBmZmZmZmY4LElGUENSRUdTKzB4NCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2Ztb3ZtbF8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3ZtLmwJCSYweGZmZmZmZmZmZmZmZmZmZmYsJWZwY3IsJWZwaWFyCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMGZmZjAsSUZQQ1JFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmYsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZm1vdm1sXzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdm0ubAkJJjB4ZmZmZmZmZmZmZmZmZmZmZiwlZnBzciwlZnBpYXIKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwZmZmZmZmOCxJRlBDUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZixJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitmbW92bWxfMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwlmbW92bS5sCQkmMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYsJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMGZmZjAsSUZQQ1JFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4MGZmZmZmZjgsSUZQQ1JFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmYsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBmbW92bXggZHluYW1pYworZm1vdm14XzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJZm1vdi5iCQkmMHgxLCVmcDAKKwlmbW92LmIJCSYweDIsJWZwMQorCWZtb3YuYgkJJjB4MywlZnAyCisJZm1vdi5iCQkmMHg0LCVmcDMKKwlmbW92LmIJCSYweDUsJWZwNAorCWZtb3YuYgkJJjB4NiwlZnA1CisJZm1vdi5iCQkmMHg3LCVmcDYKKwlmbW92LmIJCSYweDgsJWZwNworCisJZm1vdi5sCQkmMHgwLCVmcGlhcgorCW1vdi5sCQkmMHhmZmZmZmZhYSwlZDAKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCisKKwlmbW92bS54CQklZDAsLSglc3ApCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwMQorCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwMworCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwNQorCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwNworCisJZm1vdi54CQkoJXNwKSssJWZwMQorCWZtb3YueAkJKCVzcCkrLCVmcDMKKwlmbW92LngJCSglc3ApKywlZnA1CisJZm1vdi54CQkoJXNwKSssJWZwNworCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZm1vdm14XzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJZm1vdi5iCQkmMHgxLCVmcDAKKwlmbW92LmIJCSYweDIsJWZwMQorCWZtb3YuYgkJJjB4MywlZnAyCisJZm1vdi5iCQkmMHg0LCVmcDMKKwlmbW92LmIJCSYweDUsJWZwNAorCWZtb3YuYgkJJjB4NiwlZnA1CisJZm1vdi5iCQkmMHg3LCVmcDYKKwlmbW92LmIJCSYweDgsJWZwNworCisJZm1vdi54CQklZnA2LC0oJXNwKQorCWZtb3YueAkJJWZwNCwtKCVzcCkKKwlmbW92LngJCSVmcDIsLSglc3ApCisJZm1vdi54CQklZnAwLC0oJXNwKQorCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDYKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDQKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDIKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAKKworCWZtb3YubAkJJjB4MCwlZnBpYXIKKwlmbW92LmwJCSYweDAsJWZwc3IKKwltb3YubAkJJjB4ZmZmZmZmYWEsJWQwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYworCisJZm1vdm0ueAkJKCVzcCkrLCVkMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKworCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitmbW92bXhfMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwlmbW92LmIJCSYweDEsJWZwMAorCWZtb3YuYgkJJjB4MiwlZnAxCisJZm1vdi5iCQkmMHgzLCVmcDIKKwlmbW92LmIJCSYweDQsJWZwMworCWZtb3YuYgkJJjB4NSwlZnA0CisJZm1vdi5iCQkmMHg2LCVmcDUKKwlmbW92LmIJCSYweDcsJWZwNgorCWZtb3YuYgkJJjB4OCwlZnA3CisKKwlmbW92LmwJCSYweDAsJWZwaWFyCisJbW92LmwJCSYweGZmZmZmZjAwLCVkMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKKworCWZtb3ZtLngJCSVkMCwtKCVzcCkKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIHRlc3Qgd2lsbCB0YWtlIGEgbm9uLW1hc2thYmxlIG92ZXJmbG93IGRpcmVjdGx5Lgorb3ZmbF9ubV9zdHI6CisJc3RyaW5nCQkiXHROb24tbWFza2FibGUgb3ZlcmZsb3cuLi4iCisKKwlhbGlnbgkJMHg0CitvdmZsX25tXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdi5iCQkmMHgyLCVmcDAKKwltb3YubAkJJjB4N2ZmZTAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYworb3ZmbF9ubV8wX3BjOgorCWZtdWwueAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDdmZmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAyMDAxMDQ4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQlvdmZsX25tXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyB0ZXN0IHdpbGwgdGFrZSBhbiBvdmVyZmxvdyBkaXJlY3RseS4KK292Zmxfc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCBvdmVyZmxvdy4uLiIKKworCWFsaWduCQkweDQKK292ZmxfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3YubAkJJjB4MDAwMDEwMDAsJWZwY3IKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdi5iCQkmMHgyLCVmcDAKKwltb3YubAkJJjB4N2ZmZTAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYworb3ZmbF8wX3BjOgorCWZtdWwueAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDdmZmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAyMDAxMDQ4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQlvdmZsXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgdGVzdCB3aWxsIHRha2UgYW4gdW5kZXJmbG93IGRpcmVjdGx5LgordW5mbF9zdHI6CisJc3RyaW5nCQkiXHRFbmFibGVkIHVuZGVyZmxvdy4uLiIKKworCWFsaWduCQkweDQKK3VuZmxfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3YubAkJJjB4MDAwMDA4MDAsJWZwY3IKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisJZm1vdm0ueAkJREFUQSglYTYpLCYweDgwCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuZmxfMF9wYzoKKwlmZGl2LmIJCSYweDIsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg0MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDA4MDAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuZmxfMF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyB0ZXN0IHdpbGwgdGFrZSBhIG5vbi1tYXNrYWJsZSB1bmRlcmZsb3cgZGlyZWN0bHkuCit1bmZsX25tX3N0cjoKKwlzdHJpbmcJCSJcdE5vbi1tYXNrYWJsZSB1bmRlcmZsb3cuLi4iCisKKwlhbGlnbgkJMHg0Cit1bmZsX25tXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisJZm1vdm0ueAkJREFUQSglYTYpLCYweDgwCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuZmxfbm1fMF9wYzoKKwlmZGl2LmIJCSYweDIsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg0MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDA4MDAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuZmxfbm1fMF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luZXhfc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCBpbmV4YWN0Li4uIgorCisJYWxpZ24JCTB4NAoraW5leF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdi5sCQkmMHgwMDAwMDIwMCwlZnBjcgkJIyBlbmFibGUgaW5leGFjdAorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4NTAwMDAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKwlmbW92bS54CQlEQVRBKCVhNiksJjB4ODAKKworCW1vdi53CQkmMHgwMDAwLCVjYworaW5leF8wX3BjOgorCWZhZGQuYgkJJjB4MiwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg1MDAwMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDIwOCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJaW5leF8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc25hbl9zdHI6CisJc3RyaW5nCQkiXHRFbmFibGVkIFNOQU4uLi4iCisKKwlhbGlnbgkJMHg0CitzbmFuXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92LmwJCSYweDAwMDA0MDAwLCVmcGNyCQkjIGVuYWJsZSBTTkFOCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhmZmZmMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDEsREFUQSsweDgoJWE2KQorCWZtb3ZtLngJCURBVEEoJWE2KSwmMHg4MAorCisJbW92LncJCSYweDAwMDAsJWNjCitzbmFuXzBfcGM6CisJZmFkZC5iCQkmMHgyLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweGZmZmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMSxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDA5MDA0MDgwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQlzbmFuXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitvcGVycl9zdHI6CisJc3RyaW5nCQkiXHRFbmFibGVkIE9QRVJSLi4uIgorCisJYWxpZ24JCTB4NAorb3BlcnJfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3YubAkJJjB4MDAwMDIwMDAsJWZwY3IJCSMgZW5hYmxlIE9QRVJSCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhmZmZmMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsREFUQSsweDgoJWE2KQorCWZtb3ZtLngJCURBVEEoJWE2KSwmMHg4MAorCisJbW92LncJCSYweDAwMDAsJWNjCitvcGVycl8wX3BjOgorCWZhZGQucwkJJjB4N2Y4MDAwMDAsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4ZmZmZjAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDEwMDIwODAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCW9wZXJyXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkel9zdHI6CisJc3RyaW5nCQkiXHRFbmFibGVkIERaLi4uIgorCisJYWxpZ24JCTB4NAorZHpfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3YubAkJJjB4MDAwMDA0MDAsJWZwY3IJCSMgZW5hYmxlIERaCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg0MDAwMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsREFUQSsweDgoJWE2KQorCWZtb3ZtLngJCURBVEEoJWE2KSwmMHg4MAorCisJbW92LncJCSYweDAwMDAsJWNjCitkel8wX3BjOgorCWZkaXYuYgkJJjB4MCwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg0MDAwMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMjAwMDQxMCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJZHpfMF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Vuc3VwcF9zdHI6CisJc3RyaW5nCQkiXHRVbmltcGxlbWVudGVkIGRhdGEgdHlwZS9mb3JtYXQuLi4iCisKKyMgYW4gdW5ub3JtYWxpemVkIG51bWJlcgorCWFsaWduCQkweDQKK3Vuc3VwcF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhjMDNmMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDEsREFUQSsweDgoJWE2KQorCWZtb3YuYgkJJjB4MiwlZnAwCisJbW92LncJCSYweDAwMDAsJWNjCit1bnN1cHBfMF9wYzoKKwlmbXVsLngJCURBVEEoJWE2KSwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhjMDAxMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwODAwMDAwMCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJdW5zdXBwXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyCit1bnN1cHBfMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHgwMTAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKwlmbW92LmwJCSYweDdmZmZmZmZmLCVmcDAKKworCW1vdi53CQkmMHgwMDAwLCVjYwordW5zdXBwXzFfcGM6CisJZm11bC54CQlEQVRBKCVhNiksJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4ODAxNzAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZSxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDgwMDAwMDAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuc3VwcF8xX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIHBhY2tlZAordW5zdXBwXzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweGMxMjMwMDAxLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4MjM0NTY3ODksREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgxMjM0NTY3OCxEQVRBKzB4OCglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3Vuc3VwcF8yX3BjOgorCWZhYnMucAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDNlNjYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ZDBlZDIzZTgsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhkMTQwMzViYyxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMTA4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bnN1cHBfMl9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Noa3JlZ3M6CisJbGVhCQlJUkVHUyglYTYpLCVhMAorCWxlYQkJU1JFR1MoJWE2KSwlYTEKKwltb3YubAkJJjE0LCVkMAorY2hrcmVnc19sb29wOgorCWNtcC5sCQkoJWEwKSssKCVhMSkrCisJYm5lLmwJCWNoa3JlZ3NfZXJyb3IKKwlkYnJhLncJCSVkMCxjaGtyZWdzX2xvb3AKKworCW1vdi53CQlJQ0NSKCVhNiksJWQwCisJbW92LncJCVNDQ1IoJWE2KSwlZDEKKwljbXAudwkJJWQwLCVkMQorCWJuZS5sCQljaGtyZWdzX2Vycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKK2Noa3JlZ3NfZXJyb3I6CisJbW92cS5sCQkmMHgxLCVkMAorCXJ0cworCitlcnJvcjoKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCW1vdnEubAkJJjB4MSwlZDAKKwlydHMKKworY2hrZnByZWdzOgorCWxlYQkJSUZQUkVHUyglYTYpLCVhMAorCWxlYQkJU0ZQUkVHUyglYTYpLCVhMQorCW1vdi5sCQkmMjMsJWQwCitjaGtmcHJlZ3NfbG9vcDoKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtmcHJlZ3NfZXJyb3IKKwlkYnJhLncJCSVkMCxjaGtmcHJlZ3NfbG9vcAorCisJbGVhCQlJRlBDUkVHUyglYTYpLCVhMAorCWxlYQkJU0ZQQ1JFR1MoJWE2KSwlYTEKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtmcHJlZ3NfZXJyb3IKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtmcHJlZ3NfZXJyb3IKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtmcHJlZ3NfZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworY2hrZnByZWdzX2Vycm9yOgorCW1vdnEubAkJJjB4MSwlZDAKKwlydHMKKworREVGX1JFR1M6CisJbG9uZwkJMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYworCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKworCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisKK0RFRl9GUFJFR1M6CisJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKworREVGX0ZQQ1JFR1M6CisJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworX3ByaW50X3N0cjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoVEVTVFRPUC0weDgwKzB4MCwlcGMpLCVkMAorCXBlYQkJKFRFU1RUT1AtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworX3ByaW50X251bToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoVEVTVFRPUC0weDgwKzB4NCwlcGMpLCVkMAorCXBlYQkJKFRFU1RUT1AtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaWxzcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTc0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUwpAQCAtMCwwICsxLDkzMiBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyBsaXRvcC5zOgorIwlUaGlzIGZpbGUgaXMgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUgMDYwRlBMU1AgcGFja2FnZQorIyBhbmQgY29udGFpbnMgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWNrYWdlLiBUaGUgdXNlciwgaW4KKyMgZWZmZWN0LCBicmFuY2hlcyB0byBvbmUgb2YgdGhlIGJyYW5jaCB0YWJsZSBlbnRyaWVzIGxvY2F0ZWQgaGVyZS4KKyMKKworCWJyYS5sCV8wNjBMU1BfX2lkaXZzNjRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9faWRpdnU2NF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV8wNjBMU1BfX2ltdWxzNjRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9faW11bHU2NF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV8wNjBMU1BfX2NtcDJfQWJfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9fY21wMl9Bd18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfMDYwTFNQX19jbXAyX0FsXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV8wNjBMU1BfX2NtcDJfRGJfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9fY21wMl9Ed18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfMDYwTFNQX19jbXAyX0RsXworCXNob3J0CTB4MDAwMAorCisjIGxlYXZlIHJvb20gZm9yIGZ1dHVyZSBwb3NzaWJsZSBhZGl0aW9ucy4KKwlhbGlnbgkweDIwMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV8wNjBMU1BfX2lkaXZ1NjRfKCk6IEVtdWxhdGUgNjQtYml0IHVuc2lnbmVkIGRpdiBpbnN0cnVjdGlvbi4JIworIwlfMDYwTFNQX19pZGl2czY0XygpOiBFbXVsYXRlIDY0LWJpdCBzaWduZWQgZGl2IGluc3RydWN0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGlzIHRoZSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggaXMgYWNjZXNzZWQgYXMgYSBzdWJyb3V0aW5lCSMKKyMJYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCB3b3JrIGV4YWN0bHkgbGlrZSB0aGUgNjgwWDAgZGl2e3MsdX0ubAkjCisjCTY0LWJpdCBkaXZpZGUgaW5zdHJ1Y3Rpb24uCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJMHg0KHNwKSAgPSBkaXZpc29yCQkJCQkJIworIwkweDgoc3ApICA9IGhpKGRpdmlkZW5kKQkJCQkJCSMKKyMJMHhjKHNwKSAgPSBsbyhkaXZpZGVuZCkJCQkJCQkjCisjCTB4MTAoc3ApID0gcG9pbnRlciB0byBsb2NhdGlvbiB0byBwbGFjZSBxdW90aWVudC9yZW1haW5kZXIJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJMHgxMChzcCkgPSBwb2ludHMgdG8gbG9jYXRpb24gb2YgcmVtYWluZGVyL3F1b3RpZW50LgkJIworIwkJICAgcmVtYWluZGVyIGlzIGluIGZpcnN0IGxvbmd3b3JkLCBxdW90aWVudCBpcyBpbiAybmQuCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIHRoZSBvcGVyYW5kcyBhcmUgc2lnbmVkLCBtYWtlIHRoZW0gdW5zaWduZWQgYW5kIHNhdmUgdGhlCSMKKyMgc2lnbiBpbmZvIGZvciBsYXRlci4gU2VwYXJhdGUgb3V0IHNwZWNpYWwgY2FzZXMgbGlrZSBkaXZpZGUtYnktemVybwkjCisjIG9yIDMyLWJpdCBkaXZpZGVzIGlmIHBvc3NpYmxlLiBFbHNlLCB1c2UgYSBzcGVjaWFsIG1hdGggYWxnb3JpdGhtCSMKKyMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQuCQkJCQkJIworIwlSZXN0b3JlIHNpZ24gaW5mbyBpZiBzaWduZWQgaW5zdHJ1Y3Rpb24uIFNldCB0aGUgY29uZGl0aW9uCSMKKyMgY29kZXMgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZpbmFsICJydHMiLiBJZiB0aGUgZGl2aXNvciB3YXMgZXF1YWwgdG8JIworIyB6ZXJvLCB0aGVuIHBlcmZvcm0gYSBkaXZpZGUtYnktemVybyB1c2luZyBhIDE2LWJpdCBpbXBsZW1lbnRlZAkjCisjIGRpdmlkZSBpbnN0cnVjdGlvbi4gVGhpcyB3YXksIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiByZWNvcmQgdGhhdAkjCisjIHRoZSBldmVudCBvY2N1cnJlZCBldmVuIHRob3VnaCBpdCBtYXkgbm90IHBvaW50IHRvIHRoZSBjb3JyZWN0IHBsYWNlLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQJUE9TTkVHLAkJLTEKK3NldAlORElWSVNPUiwJLTIKK3NldAlORElWSURFTkQsCS0zCitzZXQJRERTRUNPTkQsCS00CitzZXQJREROT1JNQUwsCS04CitzZXQJRERRVU9USUVOVCwJLTEyCitzZXQJRElWNjRfQ0MsCS0xNgorCisjIyMjIyMjIyMjCisjIGRpdnMubCAjCisjIyMjIyMjIyMjCisJZ2xvYmFsCQlfMDYwTFNQX19pZGl2czY0XworXzA2MExTUF9faWRpdnM2NF86CisjIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJbGluay53CQklYTYsJi0xNgorCW1vdm0ubAkJJjB4M2YwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNworIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxESVY2NF9DQyglYTYpCisJc3QJCVBPU05FRyglYTYpCQkjIHNpZ25lZCBvcGVyYXRpb24KKwlicmEuYgkJbGRpdjY0X2NvbnQKKworIyMjIyMjIyMjIworIyBkaXZ1LmwgIworIyMjIyMjIyMjIworCWdsb2JhbAkJXzA2MExTUF9faWRpdnU2NF8KK18wNjBMU1BfX2lkaXZ1NjRfOgorIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtMTYKKwltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgZDItZDcKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsRElWNjRfQ0MoJWE2KQorCXNmCQlQT1NORUcoJWE2KQkJIyB1bnNpZ25lZCBvcGVyYXRpb24KKworbGRpdjY0X2NvbnQ6CisJbW92LmwJCTB4OCglYTYpLCVkNwkJIyBmZXRjaCBkaXZpc29yCisKKwliZXEudwkJbGRpdjY0ZXEwCQkjIGRpdmlzb3IgaXMgPSAwISEhCisKKwltb3YubAkJMHhjKCVhNiksICVkNQkJIyBnZXQgZGl2aWRlbmQgaGkKKwltb3YubAkJMHgxMCglYTYpLCAlZDYJCSMgZ2V0IGRpdmlkZW5kIGxvCisKKyMgc2VwYXJhdGUgc2lnbmVkIGFuZCB1bnNpZ25lZCBkaXZpZGUKKwl0c3QuYgkJUE9TTkVHKCVhNikJCSMgc2lnbmVkIG9yIHVuc2lnbmVkPworCWJlcS5iCQlsZHNwZWNpYWxjYXNlcwkJIyB1c2UgcG9zaXRpdmUgZGl2aWRlCisKKyMgc2F2ZSB0aGUgc2lnbiBvZiB0aGUgZGl2aXNvcgorIyBtYWtlIGRpdmlzb3IgdW5zaWduZWQgaWYgaXQncyBuZWdhdGl2ZQorCXRzdC5sCQklZDcJCQkjIGNoayBzaWduIG9mIGRpdmlzb3IKKwlzbHQJCU5ESVZJU09SKCVhNikJCSMgc2F2ZSBzaWduIG9mIGRpdmlzb3IKKwlicGwuYgkJbGRzZ25kaXZpZGVuZAorCW5lZy5sCQklZDcJCQkjIGNvbXBsZW1lbnQgbmVnYXRpdmUgZGl2aXNvcgorCisjIHNhdmUgdGhlIHNpZ24gb2YgdGhlIGRpdmlkZW5kCisjIG1ha2UgZGl2aWRlbmQgdW5zaWduZWQgaWYgaXQncyBuZWdhdGl2ZQorbGRzZ25kaXZpZGVuZDoKKwl0c3QubAkJJWQ1CQkJIyBjaGsgc2lnbiBvZiBoaShkaXZpZGVuZCkKKwlzbHQJCU5ESVZJREVORCglYTYpCQkjIHNhdmUgc2lnbiBvZiBkaXZpZGVuZAorCWJwbC5iCQlsZHNwZWNpYWxjYXNlcworCisJbW92LncJCSYweDAsICVjYwkJIyBjbGVhciAnWCcgY2MgYml0CisJbmVneC5sCQklZDYJCQkjIGNvbXBsZW1lbnQgc2lnbmVkIGRpdmlkZW5kCisJbmVneC5sCQklZDUKKworIyBleHRyYWN0IHNvbWUgc3BlY2lhbCBjYXNlczoKKyMJLSBpcyAoZGl2aWRlbmQgPT0gMCkgPworIwktIGlzIChoaShkaXZpZGVuZCkgPT0gMCAmJiAoZGl2aXNvciA8PSBsbyhkaXZpZGVuZCkpKSA/ICgzMi1iaXQgZGl2KQorbGRzcGVjaWFsY2FzZXM6CisJdHN0LmwJCSVkNQkJCSMgaXMgKGhpKGRpdmlkZW5kKSA9PSAwKQorCWJuZS5iCQlsZG5vcm1hbGRpdmlkZQkJIyBubywgc28gdHJ5IGl0IHRoZSBsb25nIHdheQorCisJdHN0LmwJCSVkNgkJCSMgaXMgKGxvKGRpdmlkZW5kKSA9PSAwKSwgdG9vCisJYmVxLncJCWxkZG9uZQkJCSMgeWVzLCBzbyAoZGl2aWRlbmQgPT0gMCkKKworCWNtcC5sCQklZDcsJWQ2CQkJIyBpcyAoZGl2aXNvciA8PSBsbyhkaXZpZGVuZCkpCisJYmxzLmIJCWxkMzJiaXRkaXZpZGUJCSMgeWVzLCBzbyB1c2UgMzIgYml0IGRpdmlkZQorCisJZXhnCQklZDUsJWQ2CQkJIyBxID0gMCwgciA9IGRpdmlkZW5kCisJYnJhLncJCWxkaXZmaW5pc2gJCSMgY2FuJ3QgZGl2aWRlLCB3ZSdyZSBkb25lLgorCitsZDMyYml0ZGl2aWRlOgorCXRkaXZ1LmwJCSVkNywgJWQ1OiVkNgkJIyBpdCdzIG9ubHkgYSAzMi8zMiBiaXQgZGl2IQorCisJYnJhLmIJCWxkaXZmaW5pc2gKKworbGRub3JtYWxkaXZpZGU6CisjIGxhc3Qgc3BlY2lhbCBjYXNlOgorIwktIGlzIGhpKGRpdmlkZW5kKSA+PSBkaXZpc29yID8gaWYgeWVzLCB0aGVuIG92ZXJmbG93CisJY21wLmwJCSVkNywlZDUKKwlibHMuYgkJbGRkb3ZmCQkJIyBhbnN3ZXIgd29uJ3QgZml0IGluIDMyIGJpdHMKKworIyBwZXJmb3JtIHRoZSBkaXZpZGUgYWxnb3JpdGhtOgorCWJzci5sCQlsZGNsYXNzaWNhbAkJIyBkbyBpbnQgZGl2aWRlCisKKyMgc2VwYXJhdGUgaW50byBzaWduZWQgYW5kIHVuc2lnbmVkIGZpbmlzaGVzLgorbGRpdmZpbmlzaDoKKwl0c3QuYgkJUE9TTkVHKCVhNikJCSMgZG8gZGl2cywgZGl2dSBzZXBhcmF0ZWx5CisJYmVxLmIJCWxkZG9uZQkJCSMgZGl2dSBoYXMgbm8gcHJvY2Vzc2luZyEhIQorCisjIGl0IHdhcyBhIGRpdnMubCwgc28gY2NvZGUgc2V0dGluZyBpcyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLi4uCisJdHN0LmIJCU5ESVZJREVORCglYTYpCQkjIHJlbWFpbmRlciBoYXMgc2FtZSBzaWduCisJYmVxLmIJCWxkY2MJCQkjIGFzIGRpdmlkZW5kLgorCW5lZy5sCQklZDUJCQkjIHNnbihyZW0pID0gc2duKGRpdmlkZW5kKQorbGRjYzoKKwltb3YuYgkJTkRJVklTT1IoJWE2KSwgJWQwCisJZW9yLmIJCSVkMCwgTkRJVklERU5EKCVhNikJIyBjaGsgaWYgcXVvdGllbnQgaXMgbmVnYXRpdmUKKwliZXEuYgkJbGRxcG9zCQkJIyBicmFuY2ggdG8gcXVvdCBwb3NpdGl2ZQorCisjIDB4ODAwMDAwMDAgaXMgdGhlIGxhcmdlc3QgbnVtYmVyIHJlcHJlc2VudGFibGUgYXMgYSAzMi1iaXQgbmVnYXRpdmUKKyMgbnVtYmVyLiB0aGUgbmVnYXRpdmUgb2YgMHg4MDAwMDAwMCBpcyAweDgwMDAwMDAwLgorCWNtcGkubAkJJWQ2LCAmMHg4MDAwMDAwMAkjIHdpbGwgKC1xdW90KSBmaXQgaW4gMzIgYml0cz8KKwliaGkuYgkJbGRkb3ZmCisKKwluZWcubAkJJWQ2CQkJIyBtYWtlICgtcXVvdCkgMidzIGNvbXAKKworCWJyYS5iCQlsZGRvbmUKKworbGRxcG9zOgorCWJ0c3QJCSYweDFmLCAlZDYJCSMgd2lsbCAoK3F1b3QpIGZpdCBpbiAzMiBiaXRzPworCWJuZS5iCQlsZGRvdmYKKworbGRkb25lOgorIyBpZiB0aGUgcmVnaXN0ZXIgbnVtYmVycyBhcmUgdGhlIHNhbWUsIG9ubHkgdGhlIHF1b3RpZW50IGdldHMgc2F2ZWQuCisjIHNvLCBpZiB3ZSBhbHdheXMgc2F2ZSB0aGUgcXVvdGllbnQgc2Vjb25kLCB3ZSBzYXZlIG91cnNlbHZlcyBhIGNtcCZiZXEKKwlhbmRpLncJCSYweDEwLERJVjY0X0NDKCVhNikKKwltb3YudwkJRElWNjRfQ0MoJWE2KSwlY2MKKwl0c3QubAkJJWQ2CQkJIyBtYXkgc2V0ICdOJyBjY29kZSBiaXQKKworIyBoZXJlLCB0aGUgcmVzdWx0IGlzIGluIGQxIGFuZCBkMC4gdGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gc2F2ZQorIyB0aGUgdmFsdWVzIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGEwLgorIyB1c2UgbW92bSBoZXJlIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25kaXRpb24gY29kZXMuCitsZGV4aXQ6CisJbW92bS5sCQkmMHgwMDYwLChbMHgxNCwlYTZdKQkjIHNhdmUgcmVzdWx0CisKKyMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJZm1vdm0ubAkJKCVzcCkrLCYweDAJCSMgcmVzdG9yZSBubyBmcHJlZ3MKKwltb3ZtLmwJCSglc3ApKywmMHgwMGZjCQkjIHJlc3RvcmUgZDItZDcKKwl1bmxrCQklYTYKKyMgRVBJTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXJ0cworCisjIHRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSB1bmNoYW5nZWQgZGl2aWRlbmQKK2xkZG92ZjoKKwltb3YubAkJMHhjKCVhNiksICVkNQkJIyBnZXQgZGl2aWRlbmQgaGkKKwltb3YubAkJMHgxMCglYTYpLCAlZDYJCSMgZ2V0IGRpdmlkZW5kIGxvCisKKwlhbmRpLncJCSYweDFjLERJVjY0X0NDKCVhNikKKwlvcmkudwkJJjB4MDIsRElWNjRfQ0MoJWE2KQkjIHNldCAnVicgY2NvZGUgYml0CisJbW92LncJCURJVjY0X0NDKCVhNiksJWNjCisKKwlicmEuYgkJbGRleGl0CisKK2xkaXY2NGVxMDoKKwltb3YubAkJMHhjKCVhNiksKFsweDE0LCVhNl0pCisJbW92LmwJCTB4MTAoJWE2KSwoWzB4MTQsJWE2XSwweDQpCisKKwltb3YudwkJRElWNjRfQ0MoJWE2KSwlY2MKKworIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncworCW1vdm0ubAkJKCVzcCkrLCYweDAwZmMJCSMgcmVzdG9yZSBkMi1kNworCXVubGsJCSVhNgorIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZGl2dS53CQkmMHgwLCVkMAkJIyBmb3JjZSBhIGRpdmJ5emVybyBleGNlcHRpb24KKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgcm91dGluZSB1c2VzIHRoZSAnY2xhc3NpY2FsJyBBbGdvcml0aG0gRCBmcm9tIERvbmFsZCBLbnV0aCdzCSMKKyMgQXJ0IG9mIENvbXB1dGVyIFByb2dyYW1taW5nLCB2b2wgSUksIFNlbWludW1lcmljYWwgQWxnb3JpdGhtcy4JIworIyBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBiPTIqKjE2LCBhbmQgdGhlIHRhcmdldCBpcyBVMVUyVTNVNC9WMVYyLAkjCisjIHdoZXJlIFUsViBhcmUgd29yZHMgb2YgdGhlIHF1YWR3b3JkIGRpdmlkZW5kIGFuZCBsb25nd29yZCBkaXZpc29yLAkjCisjIGFuZCBVMSwgVjEgYXJlIHRoZSBtb3N0IHNpZ25pZmljYW50IHdvcmRzLgkJCQkjCisjCQkJCQkJCQkJIworIyBUaGUgbW9zdCBzaWcuIGxvbmd3b3JkIG9mIHRoZSA2NCBiaXQgZGl2aWRlbmQgbXVzdCBiZSBpbiAlZDUsIGxlYXN0CSMKKyMgaW4gJWQ2LiBUaGUgZGl2aXNvciBtdXN0IGJlIGluIHRoZSB2YXJpYWJsZSBkZGl2aXNvciwgYW5kIHRoZQkJIworIyBzaWduZWQvdW5zaWduZWQgZmxhZyBkZHVzaWduIG11c3QgYmUgc2V0ICgwPXVuc2lnbmVkLDE9c2lnbmVkKS4JIworIyBUaGUgcXVvdGllbnQgaXMgcmV0dXJuZWQgaW4gJWQ2LCByZW1haW5kZXIgaW4gJWQ1LCB1bmxlc3MgdGhlCQkjCisjIHYgKG92ZXJmbG93KSBiaXQgaXMgc2V0IGluIHRoZSBzYXZlZCAlY2NyLiBJZiBvdmVyZmxvdywgdGhlIGRpdmlkZW5kCSMKKyMgaXMgdW5jaGFuZ2VkLgkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbGRjbGFzc2ljYWw6CisjIGlmIHRoZSBkaXZpc29yIG1zdyBpcyAwLCB1c2Ugc2ltcGxlciBhbGdvcml0aG0gdGhlbiB0aGUgZnVsbCBibG93bgorIyBvbmUgYXQgZGRrbnV0aDoKKworCWNtcGkubAkJJWQ3LCAmMHhmZmZmCisJYmhpLmIJCWxkZGtudXRoCQkjIGdvIHVzZSBELiBLbnV0aCBhbGdvcml0aG0KKworIyBTaW5jZSB0aGUgZGl2aXNvciBpcyBvbmx5IGEgd29yZCAoYW5kIGxhcmdlciB0aGFuIHRoZSBtc2x3IG9mIHRoZSBkaXZpZGVuZCksCisjIGEgc2ltcGxlciBhbGdvcml0aG0gbWF5IGJlIHVzZWQgOgorIyBJbiB0aGUgZ2VuZXJhbCBjYXNlLCBmb3VyIHF1b3RpZW50IHdvcmRzIHdvdWxkIGJlIGNyZWF0ZWQgYnkKKyMgZGl2aWRpbmcgdGhlIGRpdmlzb3Igd29yZCBpbnRvIGVhY2ggZGl2aWRlbmQgd29yZC4gSW4gdGhpcyBjYXNlLAorIyB0aGUgZmlyc3QgdHdvIHF1b3RpZW50IHdvcmRzIG11c3QgYmUgemVybywgb3Igb3ZlcmZsb3cgd291bGQgb2NjdXIuCisjIFNpbmNlIHdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGNhc2UgYWJvdmUsIHdlIGNhbiB0cmVhdCB0aGUgbW9zdCBzaWduaWZpY2FudAorIyBsb25nd29yZCBvZiB0aGUgZGl2aWRlbmQgYXMgKDApIHJlbWFpbmRlciAoc2VlIEtudXRoKSBhbmQgbWVyZWx5IGNvbXBsZXRlCisjIHRoZSBsYXN0IHR3byBkaXZpc2lvbnMgdG8gZ2V0IGEgcXVvdGllbnQgbG9uZ3dvcmQgYW5kIHdvcmQgcmVtYWluZGVyOgorCisJY2xyLmwJCSVkMQorCXN3YXAJCSVkNQkJCSMgc2FtZSBhcyByKmIgaWYgcHJldmlvdXMgc3RlcCBycWQKKwlzd2FwCQklZDYJCQkjIGdldCB1MyB0byBsc3cgcG9zaXRpb24KKwltb3YudwkJJWQ2LCAlZDUJCSMgcmIgKyB1MworCisJZGl2dS53CQklZDcsICVkNQorCisJbW92LncJCSVkNSwgJWQxCQkjIGZpcnN0IHF1b3RpZW50IHdvcmQKKwlzd2FwCQklZDYJCQkjIGdldCB1NAorCW1vdi53CQklZDYsICVkNQkJIyByYiArIHU0CisKKwlkaXZ1LncJCSVkNywgJWQ1CisKKwlzd2FwCQklZDEKKwltb3YudwkJJWQ1LCAlZDEJCSMgMm5kIHF1b3RpZW50ICdkaWdpdCcKKwljbHIudwkJJWQ1CisJc3dhcAkJJWQ1CQkJIyBub3cgcmVtYWluZGVyCisJbW92LmwJCSVkMSwgJWQ2CQkjIGFuZCBxdW90aWVudAorCisJcnRzCisKK2xkZGtudXRoOgorIyBJbiB0aGlzIGFsZ29yaXRobSwgdGhlIGRpdmlzb3IgaXMgdHJlYXRlZCBhcyBhIDIgZGlnaXQgKHdvcmQpIG51bWJlcgorIyB3aGljaCBpcyBkaXZpZGVkIGludG8gYSAzIGRpZ2l0ICh3b3JkKSBkaXZpZGVuZCB0byBnZXQgb25lIHF1b3RpZW50CisjIGRpZ2l0ICh3b3JkKS4gQWZ0ZXIgc3VidHJhY3Rpb24sIHRoZSBkaXZpZGVuZCBpcyBzaGlmdGVkIGFuZCB0aGUKKyMgcHJvY2VzcyByZXBlYXRlZC4gQmVmb3JlIGJlZ2lubmluZywgdGhlIGRpdmlzb3IgYW5kIHF1b3RpZW50IGFyZQorIyAnbm9ybWFsaXplZCcgc28gdGhhdCB0aGUgcHJvY2VzcyBvZiBlc3RpbWF0aW5nIHRoZSBxdW90aWVudCBkaWdpdAorIyB3aWxsIHlpZWxkIHZlcmlmaWFibHkgY29ycmVjdCByZXN1bHRzLi4KKworCWNsci5sCQlERE5PUk1BTCglYTYpCQkjIGNvdW50IG9mIHNoaWZ0cyBmb3Igbm9ybWFsaXphdGlvbgorCWNsci5iCQlERFNFQ09ORCglYTYpCQkjIGNsZWFyIGZsYWcgZm9yIHF1b3RpZW50IGRpZ2l0cworCWNsci5sCQklZDEJCQkjICVkMSB3aWxsIGhvbGQgdHJpYWwgcXVvdGllbnQKK2xkZG5jaGs6CisJYnRzdAkJJjMxLCAlZDcJCSMgbXVzdCB3ZSBub3JtYWxpemU/IGZpcnN0IHdvcmQgb2YKKwlibmUuYgkJbGRkbm9ybWFsaXplZAkJIyBkaXZpc29yIChWMSkgbXVzdCBiZSA+PSA2NTUzNi8yCisJYWRkcS5sCQkmMHgxLCBERE5PUk1BTCglYTYpCSMgY291bnQgbm9ybWFsaXphdGlvbiBzaGlmdHMKKwlsc2wubAkJJjB4MSwgJWQ3CQkjIHNoaWZ0IHRoZSBkaXZpc29yCisJbHNsLmwJCSYweDEsICVkNgkJIyBzaGlmdCB1NCx1MyB3aXRoIG92ZXJmbG93IHRvIHUyCisJcm94bC5sCQkmMHgxLCAlZDUJCSMgc2hpZnQgdTEsdTIKKwlicmEudwkJbGRkbmNoaworbGRkbm9ybWFsaXplZDoKKworIyBOb3cgY2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSBxdW90aWVudCB3b3JkcyAobXN3IGZpcnN0LCB0aGVuIGxzdykuCisjIFRoZSBjb21tZW50cyB1c2Ugc3Vic2NyaXB0cyBmb3IgdGhlIGZpcnN0IHF1b3RpZW50IGRpZ2l0IGRldGVybWluYXRpb24uCisJbW92LmwJCSVkNywgJWQzCQkjIGRpdmlzb3IKKwltb3YubAkJJWQ1LCAlZDIJCSMgZGl2aWRlbmQgbXNsdworCXN3YXAJCSVkMgorCXN3YXAJCSVkMworCWNtcC53CQklZDIsICVkMwkJIyBWMSA9IFUxID8KKwlibmUuYgkJbGRkcWNhbGMxCisJbW92LncJCSYweGZmZmYsICVkMQkJIyB1c2UgbWF4IHRyaWFsIHF1b3RpZW50IHdvcmQKKwlicmEuYgkJbGRkYWRqMAorbGRkcWNhbGMxOgorCW1vdi5sCQklZDUsICVkMQorCisJZGl2dS53CQklZDMsICVkMQkJIyB1c2UgcXVvdGllbnQgb2YgbXNsdy9tc3cKKworCWFuZGkubAkJJjB4MDAwMGZmZmYsICVkMQkjIHplcm8gYW55IHJlbWFpbmRlcgorbGRkYWRqMDoKKworIyBub3cgdGVzdCB0aGUgdHJpYWwgcXVvdGllbnQgYW5kIGFkanVzdC4gVGhpcyBzdGVwIHBsdXMgdGhlCisjIG5vcm1hbGl6YXRpb24gYXNzdXJlcyAoYWNjb3JkaW5nIHRvIEtudXRoKSB0aGF0IHRoZSB0cmlhbAorIyBxdW90aWVudCB3aWxsIGJlIGF0IHdvcnN0IDEgdG9vIGxhcmdlLgorCW1vdi5sCQklZDYsIC0oJXNwKQorCWNsci53CQklZDYJCQkjIHdvcmQgdTMgbGVmdAorCXN3YXAJCSVkNgkJCSMgaW4gbHN3IHBvc2l0aW9uCitsZGRhZGoxOiBtb3YubAkJJWQ3LCAlZDMKKwltb3YubAkJJWQxLCAlZDIKKwltdWx1LncJCSVkNywgJWQyCQkjIFYycQorCXN3YXAJCSVkMworCW11bHUudwkJJWQxLCAlZDMJCSMgVjFxCisJbW92LmwJCSVkNSwgJWQ0CQkjIFUxVTIKKwlzdWIubAkJJWQzLCAlZDQJCSMgVTFVMiAtIFYxcQorCisJc3dhcAkJJWQ0CisKKwltb3YudwkJJWQ0LCVkMAorCW1vdi53CQklZDYsJWQ0CQkJIyBpbnNlcnQgbG93ZXIgd29yZCAoVTMpCisKKwl0c3QudwkJJWQwCQkJIyBpcyB1cHBlciB3b3JkIHNldD8KKwlibmUudwkJbGRkYWRqZDEKKworIwlhZGQubAkJJWQ2LCAlZDQJCSMgKFUxVTIgLSBWMXEpICsgVTMKKworCWNtcC5sCQklZDIsICVkNAorCWJscy5iCQlsZGRhZGpkMQkJIyBpcyBWMnEgPiAoVTFVMi1WMXEpICsgVTMgPworCXN1YnEubAkJJjB4MSwgJWQxCQkjIHllcywgZGVjcmVtZW50IGFuZCByZWNoZWNrCisJYnJhLmIJCWxkZGFkajEKK2xkZGFkamQxOgorIyBub3cgdGVzdCB0aGUgd29yZCBieSBtdWx0aXBseWluZyBpdCBieSB0aGUgZGl2aXNvciAoVjFWMikgYW5kIGNvbXBhcmluZworIyB0aGUgMyBkaWdpdCAod29yZCkgcmVzdWx0IHdpdGggdGhlIGN1cnJlbnQgZGl2aWRlbmQgd29yZHMKKwltb3YubAkJJWQ1LCAtKCVzcCkJCSMgc2F2ZSAlZDUgKCVkNiBhbHJlYWR5IHNhdmVkKQorCW1vdi5sCQklZDEsICVkNgorCXN3YXAJCSVkNgkJCSMgc2hpZnQgYW5zd2VyIHRvIG1zIDMgd29yZHMKKwltb3YubAkJJWQ3LCAlZDUKKwlic3IubAkJbGRtbTIKKwltb3YubAkJJWQ1LCAlZDIJCSMgbm93ICVkMiwlZDMgYXJlIHRyaWFsKmRpdmlzb3IKKwltb3YubAkJJWQ2LCAlZDMKKwltb3YubAkJKCVzcCkrLCAlZDUJCSMgcmVzdG9yZSBkaXZpZGVuZAorCW1vdi5sCQkoJXNwKSssICVkNgorCXN1Yi5sCQklZDMsICVkNgorCXN1YngubAkJJWQyLCAlZDUJCSMgc3VidHJhY3QgZG91YmxlIHByZWNpc2lvbgorCWJjYwkJbGRkMm5kCQkJIyBubyBjYXJyeSwgZG8gbmV4dCBxdW90aWVudCBkaWdpdAorCXN1YnEubAkJJjB4MSwgJWQxCQkjIHEgaXMgb25lIHRvbyBsYXJnZQorIyBuZWVkIHRvIGFkZCBiYWNrIGRpdmlzb3IgbG9uZ3dvcmQgdG8gY3VycmVudCBtcyAzIGRpZ2l0cyBvZiBkaXZpZGVuZAorIyAtIGFjY29yZGluZyB0byBLbnV0aCwgdGhpcyBpcyBkb25lIG9ubHkgMiBvdXQgb2YgNjU1MzYgdGltZXMgZm9yIHJhbmRvbQorIyBkaXZpc29yLCBkaXZpZGVuZCBzZWxlY3Rpb24uCisJY2xyLmwJCSVkMgorCW1vdi5sCQklZDcsICVkMworCXN3YXAJCSVkMworCWNsci53CQklZDMJCQkjICVkMyBub3cgbHMgd29yZCBvZiBkaXZpc29yCisJYWRkLmwJCSVkMywgJWQ2CQkjIGFsaWduZWQgd2l0aCAzcmQgd29yZCBvZiBkaXZpZGVuZAorCWFkZHgubAkJJWQyLCAlZDUKKwltb3YubAkJJWQ3LCAlZDMKKwljbHIudwkJJWQzCQkJIyAlZDMgbm93IG1zIHdvcmQgb2YgZGl2aXNvcgorCXN3YXAJCSVkMwkJCSMgYWxpZ25lZCB3aXRoIDJuZCB3b3JkIG9mIGRpdmlkZW5kCisJYWRkLmwJCSVkMywgJWQ1CitsZGQybmQ6CisJdHN0LmIJCUREU0VDT05EKCVhNikJIyBib3RoIHEgd29yZHMgZG9uZT8KKwlibmUuYgkJbGRkcmVtYWluCisjIGZpcnN0IHF1b3RpZW50IGRpZ2l0IG5vdyBjb3JyZWN0LiBzdG9yZSBkaWdpdCBhbmQgc2hpZnQgdGhlCisjIChzdWJ0cmFjdGVkKSBkaXZpZGVuZAorCW1vdi53CQklZDEsIEREUVVPVElFTlQoJWE2KQorCWNsci5sCQklZDEKKwlzd2FwCQklZDUKKwlzd2FwCQklZDYKKwltb3YudwkJJWQ2LCAlZDUKKwljbHIudwkJJWQ2CisJc3QJCUREU0VDT05EKCVhNikJCSMgc2Vjb25kIGRpZ2l0CisJYnJhLncJCWxkZG5vcm1hbGl6ZWQKK2xkZHJlbWFpbjoKKyMgYWRkIDJuZCB3b3JkIHRvIHF1b3RpZW50LCBnZXQgdGhlIHJlbWFpbmRlci4KKwltb3YudwkJJWQxLCBERFFVT1RJRU5UKzIoJWE2KQorIyBzaGlmdCBkb3duIG9uZSB3b3JkL2RpZ2l0IHRvIHJlbm9ybWFsaXplIHJlbWFpbmRlci4KKwltb3YudwkJJWQ1LCAlZDYKKwlzd2FwCQklZDYKKwlzd2FwCQklZDUKKwltb3YubAkJREROT1JNQUwoJWE2KSwgJWQ3CSMgZ2V0IG5vcm0gc2hpZnQgY291bnQKKwliZXEuYgkJbGRkcm4KKwlzdWJxLmwJCSYweDEsICVkNwkJIyBzZXQgZm9yIGxvb3AgY291bnQKK2xkZG5scDoKKwlsc3IubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IGludG8gJWQ2CisJcm94ci5sCQkmMHgxLCAlZDYKKwlkYmYJCSVkNywgbGRkbmxwCitsZGRybjoKKwltb3YubAkJJWQ2LCAlZDUJCSMgcmVtYWluZGVyCisJbW92LmwJCUREUVVPVElFTlQoJWE2KSwgJWQ2CSMgcXVvdGllbnQKKworCXJ0cworbGRtbTI6CisjIGZhY3RvcnMgZm9yIHRoZSAzMlgzMi0+NjQgbXVsdGlwbGljYXRpb24gYXJlIGluICVkNSBhbmQgJWQ2LgorIyByZXR1cm5zIDY0IGJpdCByZXN1bHQgaW4gJWQ1IChoaSkgJWQ2KGxvKS4KKyMgZGVzdHJveXMgJWQyLCVkMywlZDQuCisKKyMgbXVsdGlwbHkgaGksbG8gd29yZHMgb2YgZWFjaCBmYWN0b3IgdG8gZ2V0IDQgaW50ZXJtZWRpYXRlIHByb2R1Y3RzCisJbW92LmwJCSVkNiwgJWQyCisJbW92LmwJCSVkNiwgJWQzCisJbW92LmwJCSVkNSwgJWQ0CisJc3dhcAkJJWQzCisJc3dhcAkJJWQ0CisJbXVsdS53CQklZDUsICVkNgkJIyAlZDYgPC0gbHN3KmxzdworCW11bHUudwkJJWQzLCAlZDUJCSMgJWQ1IDwtIG1zdy1kZXN0Kmxzdy1zb3VyY2UKKwltdWx1LncJCSVkNCwgJWQyCQkjICVkMiA8LSBtc3ctc291cmNlKmxzdy1kZXN0CisJbXVsdS53CQklZDQsICVkMwkJIyAlZDMgPC0gbXN3Km1zdworIyBub3cgdXNlIHN3YXAgYW5kIGFkZHggdG8gY29uc29saWRhdGUgdG8gdHdvIGxvbmd3b3JkcworCWNsci5sCQklZDQKKwlzd2FwCQklZDYKKwlhZGQudwkJJWQ1LCAlZDYJCSMgYWRkIG1zdyBvZiBsKmwgdG8gbHN3IG9mIG0qbCBwcm9kdWN0CisJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CisJYWRkLncJCSVkMiwgJWQ2CQkjIGFkZCBpbiBsc3cgb2Ygb3RoZXIgbSpsIHByb2R1Y3QKKwlhZGR4LncJCSVkNCwgJWQzCQkjIGFkZCBhbnkgY2FycnkgdG8gbSptIHByb2R1Y3QKKwlzd2FwCQklZDYJCQkjICVkNiBpcyBsb3cgMzIgYml0cyBvZiBmaW5hbCBwcm9kdWN0CisJY2xyLncJCSVkNQorCWNsci53CQklZDIJCQkjIGxzdyBvZiB0d28gbWl4ZWQgcHJvZHVjdHMgdXNlZCwKKwlzd2FwCQklZDUJCQkjIG5vdyB1c2UgbXN3cyBvZiBsb25nd29yZHMKKwlzd2FwCQklZDIKKwlhZGQubAkJJWQyLCAlZDUKKwlhZGQubAkJJWQzLCAlZDUJIyAlZDUgbm93IG1zIDMyIGJpdHMgb2YgZmluYWwgcHJvZHVjdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV8wNjBMU1BfX2ltdWx1NjRfKCk6IEVtdWxhdGUgNjQtYml0IHVuc2lnbmVkIG11bCBpbnN0cnVjdGlvbgkjCisjCV8wNjBMU1BfX2ltdWxzNjRfKCk6IEVtdWxhdGUgNjQtYml0IHNpZ25lZCBtdWwgaW5zdHJ1Y3Rpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaXMgdGhlIGxpYnJhcnkgdmVyc2lvbiB3aGljaCBpcyBhY2Nlc3NlZCBhcyBhIHN1YnJvdXRpbmUJIworIwlhbmQgdGhlcmVmb3JlIGRvZXMgbm90IHdvcmsgZXhhY3RseSBsaWtlIHRoZSA2ODBYMCBtdWx7cyx1fS5sCSMKKyMJNjQtYml0IG11bHRpcGx5IGluc3RydWN0aW9uLgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJMHg0KHNwKSA9IG11bHRpcGxpZXIJCQkJCQkjCisjCTB4OChzcCkgPSBtdWx0aXBsaWNhbmQJCQkJCQkjCisjCTB4YyhzcCkgPSBwb2ludGVyIHRvIGxvY2F0aW9uIHRvIHBsYWNlIDY0LWJpdCByZXN1bHQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCTB4YyhzcCkgPSBwb2ludHMgdG8gbG9jYXRpb24gb2YgNjQtYml0IHJlc3VsdAkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVBlcmZvcm0gdGhlIG11bHRpcGx5IGluIHBpZWNlcyB1c2luZyAxNngxNi0+MzIgdW5zaWduZWQJCSMKKyMgbXVsdGlwbGllcyBhbmQgImFkZCIgaW5zdHJ1Y3Rpb25zLgkJCQkJIworIwlTZXQgdGhlIGNvbmRpdGlvbiBjb2RlcyBhcyBhcHByb3ByaWF0ZSBiZWZvcmUgcGVyZm9ybWluZyBhbgkjCisjICJydHMiLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IE1VTDY0X0NDLCAtNAorCisJZ2xvYmFsCQlfMDYwTFNQX19pbXVsdTY0XworXzA2MExTUF9faW11bHU2NF86CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsTVVMNjRfQ0MoJWE2KQkjIHNhdmUgaW5jb21pbmcgY2NvZGVzCisKKwltb3YubAkJMHg4KCVhNiksJWQwCQkjIHN0b3JlIG11bHRpcGxpZXIgaW4gZDAKKwliZXEudwkJbXVsdTY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQorCisJbW92LmwJCTB4YyglYTYpLCVkMQkJIyBnZXQgbXVsdGlwbGljYW5kIGluIGQxCisJYmVxLncJCW11bHU2NF96ZXJvCQkjIGhhbmRsZSB6ZXJvIHNlcGFyYXRlbHkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwk2MwkJCSAgIDMyCQkJCTAJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJCQkjCisjCXwgaGkobXBsaWVyKSAqIGhpKG1wbGljYW5kKXwJCQkJCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBoaShtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBsbyhtcGxpZXIpICogaGkobXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCS0tfC0tCQkJICAgfCBsbyhtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwl8CWhpKHJlc3VsdCkJICAgfAkgICAgbG8ocmVzdWx0KSAgICAgICAgIHwJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittdWx1NjRfYWxnOgorIyBsb2FkIHRlbXAgcmVnaXN0ZXJzIHdpdGggb3BlcmFuZHMKKwltb3YubAkJJWQwLCVkMgkJCSMgbXIgaW4gZDIKKwltb3YubAkJJWQwLCVkMwkJCSMgbXIgaW4gZDMKKwltb3YubAkJJWQxLCVkNAkJCSMgbWQgaW4gZDQKKwlzd2FwCQklZDMJCQkjIGhpKG1yKSBpbiBsbyBkMworCXN3YXAJCSVkNAkJCSMgaGkobWQpIGluIGxvIGQ0CisKKyMgY29tcGxldGUgbmVjZXNzYXJ5IG11bHRpcGxpZXM6CisJbXVsdS53CQklZDEsJWQwCQkJIyBbMV0gbG8obXIpICogbG8obWQpCisJbXVsdS53CQklZDMsJWQxCQkJIyBbMl0gaGkobXIpICogbG8obWQpCisJbXVsdS53CQklZDQsJWQyCQkJIyBbM10gbG8obXIpICogaGkobWQpCisJbXVsdS53CQklZDQsJWQzCQkJIyBbNF0gaGkobXIpICogaGkobWQpCisKKyMgYWRkIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gdG8gaGkgcG9ydGlvbiBvZiBbMV0uCisjIGFkZCBjYXJyaWVzIHByb2R1Y2VkIGZyb20gdGhlc2UgYWRkcyB0byBbNF0uCisjIGxvKFsxXSkgaXMgdGhlIGZpbmFsIGxvIDE2IGJpdHMgb2YgdGhlIHJlc3VsdC4KKwljbHIubAkJJWQ0CQkJIyBsb2FkIGQ0IHcvIHplcm8gdmFsdWUKKwlzd2FwCQklZDAJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCisJYWRkLncJCSVkMSwlZDAJCQkjIGhpKFsxXSkgKyBsbyhbMl0pCisJYWRkeC5sCQklZDQsJWQzCQkJIyAgICBbNF0gICsgY2FycnkKKwlhZGQudwkJJWQyLCVkMAkJCSMgaGkoWzFdKSArIGxvKFszXSkKKwlhZGR4LmwJCSVkNCwlZDMJCQkjICAgIFs0XSAgKyBjYXJyeQorCXN3YXAJCSVkMAkJCSMgbG8oWzFdKSA8PT0+IGhpKFsxXSkKKworIyBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIGhhdmUgYmVlbiBhZGRlZCBpbiB0byBmaW5hbCByZXN1bHQuCisjIG5vdywgY2xlYXIgbG8sIHB1dCBoaSBpbiBsbyByZWcsIGFuZCBhZGQgdG8gWzRdCisJY2xyLncJCSVkMQkJCSMgY2xlYXIgbG8oWzJdKQorCWNsci53CQklZDIJCQkjIGNsZWFyIGhpKFszXSkKKwlzd2FwCQklZDEJCQkjIGhpKFsyXSkgaW4gbG8gZDEKKwlzd2FwCQklZDIJCQkjIGhpKFszXSkgaW4gbG8gZDIKKwlhZGQubAkJJWQyLCVkMQkJCSMgICAgWzRdICArIGhpKFsyXSkKKwlhZGQubAkJJWQzLCVkMQkJCSMgICAgWzRdICArIGhpKFszXSkKKworIyBub3csIGdyYWIgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gb25seSBvbmUgdGhhdCBjYW4gYmUgc2V0IGlzICdOJy4KKyMgJ04nIENBTiBiZSBzZXQgaWYgdGhlIG9wZXJhdGlvbiBpcyB1bnNpZ25lZCBpZiBiaXQgNjMgaXMgc2V0LgorCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAorCWFuZGkuYgkJJjB4MTAsJWQ0CQkjIGtlZXAgb2xkICdYJyBiaXQKKwl0c3QubAkJJWQxCQkJIyBtYXkgc2V0ICdOJyBiaXQKKwlicGwuYgkJbXVsdTY0X2Rkb25lCisJb3JpLmIJCSYweDgsJWQ0CQkjIHNldCAnTicgYml0CittdWx1NjRfZGRvbmU6CisJbW92LncJCSVkNCwlY2MKKworIyBoZXJlLCB0aGUgcmVzdWx0IGlzIGluIGQxIGFuZCBkMC4gdGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gc2F2ZQorIyB0aGUgdmFsdWVzIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGEwLgorIyB1c2UgbW92bSBoZXJlIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25kaXRpb24gY29kZXMuCittdWx1NjRfZW5kOgorCWV4ZwkJJWQxLCVkMAorCW1vdm0ubAkJJjB4MDAwMywoWzB4MTAsJWE2XSkJCSMgc2F2ZSByZXN1bHQKKworIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncworCW1vdm0ubAkJKCVzcCkrLCYweDAwMWMJCSMgcmVzdG9yZSBkMi1kNAorCXVubGsJCSVhNgorIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJcnRzCisKKyMgb25lIG9yIGJvdGggb2YgdGhlIG9wZXJhbmRzIGlzIHplcm8gc28gdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCisjIHNhdmUgdGhlIHplcm8gcmVzdWx0IHRvIHRoZSByZWdpc3RlciBmaWxlIGFuZCBzZXQgdGhlICdaJyBjY29kZSBiaXQuCittdWx1NjRfemVybzoKKwljbHIubAkJJWQwCisJY2xyLmwJCSVkMQorCisJbW92LncJCU1VTDY0X0NDKCVhNiksJWQ0CisJYW5kaS5iCQkmMHgxMCwlZDQKKwlvcmkuYgkJJjB4NCwlZDQKKwltb3YudwkJJWQ0LCVjYwkJCSMgc2V0ICdaJyBjY29kZSBiaXQKKworCWJyYS5iCQltdWx1NjRfZW5kCisKKyMjIyMjIyMjIyMKKyMgbXVscy5sICMKKyMjIyMjIyMjIyMKKwlnbG9iYWwJCV8wNjBMU1BfX2ltdWxzNjRfCitfMDYwTFNQX19pbXVsczY0XzoKKworIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtNAorCW1vdm0ubAkJJjB4M2MwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNQorIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxNVUw2NF9DQyglYTYpCSMgc2F2ZSBpbmNvbWluZyBjY29kZXMKKworCW1vdi5sCQkweDgoJWE2KSwlZDAJCSMgc3RvcmUgbXVsdGlwbGllciBpbiBkMAorCWJlcS5iCQltdWx1NjRfemVybwkJIyBoYW5kbGUgemVybyBzZXBhcmF0ZWx5CisKKwltb3YubAkJMHhjKCVhNiksJWQxCQkjIGdldCBtdWx0aXBsaWNhbmQgaW4gZDEKKwliZXEuYgkJbXVsdTY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQorCisJY2xyLmIJCSVkNQkJCSMgY2xlYXIgc2lnbiB0YWcKKwl0c3QubAkJJWQwCQkJIyBpcyBtdWx0aXBsaWVyIG5lZ2F0aXZlPworCWJnZS5iCQltdWxzNjRfY2hrX21kX3NnbgkjIG5vCisJbmVnLmwJCSVkMAkJCSMgbWFrZSBtdWx0aXBsaWVyIHBvc2l0aXZlCisKKwlvcmkuYgkJJjB4MSwlZDUJCSMgc2F2ZSBtdWx0aXBsaWVyIHNnbgorCisjIHRoZSByZXN1bHQgc2lnbiBpcyB0aGUgZXhjbHVzaXZlIG9yIG9mIHRoZSBvcGVyYW5kIHNpZ24gYml0cy4KK211bHM2NF9jaGtfbWRfc2duOgorCXRzdC5sCQklZDEJCQkjIGlzIG11bHRpcGxpY2FuZCBuZWdhdGl2ZT8KKwliZ2UuYgkJbXVsczY0X2FsZwkJIyBubworCW5lZy5sCQklZDEJCQkjIG1ha2UgbXVsdGlwbGljYW5kIHBvc2l0aXZlCisKKwllb3JpLmIJCSYweDEsJWQ1CQkjIGNhbGN1bGF0ZSBjb3JyZWN0IHNpZ24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwk2MwkJCSAgIDMyCQkJCTAJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJCQkjCisjCXwgaGkobXBsaWVyKSAqIGhpKG1wbGljYW5kKXwJCQkJCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBoaShtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBsbyhtcGxpZXIpICogaGkobXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCS0tfC0tCQkJICAgfCBsbyhtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwl8CWhpKHJlc3VsdCkJICAgfAkgICAgbG8ocmVzdWx0KSAgICAgICAgIHwJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittdWxzNjRfYWxnOgorIyBsb2FkIHRlbXAgcmVnaXN0ZXJzIHdpdGggb3BlcmFuZHMKKwltb3YubAkJJWQwLCVkMgkJCSMgbXIgaW4gZDIKKwltb3YubAkJJWQwLCVkMwkJCSMgbXIgaW4gZDMKKwltb3YubAkJJWQxLCVkNAkJCSMgbWQgaW4gZDQKKwlzd2FwCQklZDMJCQkjIGhpKG1yKSBpbiBsbyBkMworCXN3YXAJCSVkNAkJCSMgaGkobWQpIGluIGxvIGQ0CisKKyMgY29tcGxldGUgbmVjZXNzYXJ5IG11bHRpcGxpZXM6CisJbXVsdS53CQklZDEsJWQwCQkJIyBbMV0gbG8obXIpICogbG8obWQpCisJbXVsdS53CQklZDMsJWQxCQkJIyBbMl0gaGkobXIpICogbG8obWQpCisJbXVsdS53CQklZDQsJWQyCQkJIyBbM10gbG8obXIpICogaGkobWQpCisJbXVsdS53CQklZDQsJWQzCQkJIyBbNF0gaGkobXIpICogaGkobWQpCisKKyMgYWRkIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gdG8gaGkgcG9ydGlvbiBvZiBbMV0uCisjIGFkZCBjYXJyaWVzIHByb2R1Y2VkIGZyb20gdGhlc2UgYWRkcyB0byBbNF0uCisjIGxvKFsxXSkgaXMgdGhlIGZpbmFsIGxvIDE2IGJpdHMgb2YgdGhlIHJlc3VsdC4KKwljbHIubAkJJWQ0CQkJIyBsb2FkIGQ0IHcvIHplcm8gdmFsdWUKKwlzd2FwCQklZDAJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCisJYWRkLncJCSVkMSwlZDAJCQkjIGhpKFsxXSkgKyBsbyhbMl0pCisJYWRkeC5sCQklZDQsJWQzCQkJIyAgICBbNF0gICsgY2FycnkKKwlhZGQudwkJJWQyLCVkMAkJCSMgaGkoWzFdKSArIGxvKFszXSkKKwlhZGR4LmwJCSVkNCwlZDMJCQkjICAgIFs0XSAgKyBjYXJyeQorCXN3YXAJCSVkMAkJCSMgbG8oWzFdKSA8PT0+IGhpKFsxXSkKKworIyBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIGhhdmUgYmVlbiBhZGRlZCBpbiB0byBmaW5hbCByZXN1bHQuCisjIG5vdywgY2xlYXIgbG8sIHB1dCBoaSBpbiBsbyByZWcsIGFuZCBhZGQgdG8gWzRdCisJY2xyLncJCSVkMQkJCSMgY2xlYXIgbG8oWzJdKQorCWNsci53CQklZDIJCQkjIGNsZWFyIGhpKFszXSkKKwlzd2FwCQklZDEJCQkjIGhpKFsyXSkgaW4gbG8gZDEKKwlzd2FwCQklZDIJCQkjIGhpKFszXSkgaW4gbG8gZDIKKwlhZGQubAkJJWQyLCVkMQkJCSMgICAgWzRdICArIGhpKFsyXSkKKwlhZGQubAkJJWQzLCVkMQkJCSMgICAgWzRdICArIGhpKFszXSkKKworCXRzdC5iCQklZDUJCQkjIHNob3VsZCByZXN1bHQgYmUgc2lnbmVkPworCWJlcS5iCQltdWxzNjRfZG9uZQkJIyBubworCisjIHJlc3VsdCBzaG91bGQgYmUgYSBzaWduZWQgbmVnYXRpdmUgbnVtYmVyLgorIyBjb21wdXRlIDIncyBjb21wbGVtZW50IG9mIHRoZSB1bnNpZ25lZCBudW1iZXI6CisjICAgLW5lZ2F0ZSBhbGwgYml0cyBhbmQgYWRkIDEKK211bHM2NF9uZWc6CisJbm90LmwJCSVkMAkJCSMgbmVnYXRlIGxvKHJlc3VsdCkgYml0cworCW5vdC5sCQklZDEJCQkjIG5lZ2F0ZSBoaShyZXN1bHQpIGJpdHMKKwlhZGRxLmwJCSYxLCVkMAkJCSMgYWRkIDEgdG8gbG8ocmVzdWx0KQorCWFkZHgubAkJJWQ0LCVkMQkJCSMgYWRkIGNhcnJ5IHRvIGhpKHJlc3VsdCkKKworbXVsczY0X2RvbmU6CisJbW92LncJCU1VTDY0X0NDKCVhNiksJWQ0CisJYW5kaS5iCQkmMHgxMCwlZDQJCSMga2VlcCBvbGQgJ1gnIGJpdAorCXRzdC5sCQklZDEJCQkjIG1heSBzZXQgJ04nIGJpdAorCWJwbC5iCQltdWxzNjRfZGRvbmUKKwlvcmkuYgkJJjB4OCwlZDQJCSMgc2V0ICdOJyBiaXQKK211bHM2NF9kZG9uZToKKwltb3YudwkJJWQ0LCVjYworCisjIGhlcmUsIHRoZSByZXN1bHQgaXMgaW4gZDEgYW5kIGQwLiB0aGUgY3VycmVudCBzdHJhdGVneSBpcyB0byBzYXZlCisjIHRoZSB2YWx1ZXMgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYTAuCisjIHVzZSBtb3ZtIGhlcmUgdG8gbm90IGRpc3R1cmIgdGhlIGNvbmRpdGlvbiBjb2Rlcy4KK211bHM2NF9lbmQ6CisJZXhnCQklZDEsJWQwCisJbW92bS5sCQkmMHgwMDAzLChbMHgxMCwlYTZdKQkjIHNhdmUgcmVzdWx0IGF0IChhMCkKKworIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncworCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQorCXVubGsJCSVhNgorIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJcnRzCisKKyMgb25lIG9yIGJvdGggb2YgdGhlIG9wZXJhbmRzIGlzIHplcm8gc28gdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCisjIHNhdmUgdGhlIHplcm8gcmVzdWx0IHRvIHRoZSByZWdpc3RlciBmaWxlIGFuZCBzZXQgdGhlICdaJyBjY29kZSBiaXQuCittdWxzNjRfemVybzoKKwljbHIubAkJJWQwCisJY2xyLmwJCSVkMQorCisJbW92LncJCU1VTDY0X0NDKCVhNiksJWQ0CisJYW5kaS5iCQkmMHgxMCwlZDQKKwlvcmkuYgkJJjB4NCwlZDQKKwltb3YudwkJJWQ0LCVjYwkJCSMgc2V0ICdaJyBjY29kZSBiaXQKKworCWJyYS5iCQltdWxzNjRfZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJXzA2MExTUF9fY21wMl9BYl8oKTogRW11bGF0ZSAiY21wMi5iIEFuLDxlYT4iLgkJCSMKKyMJXzA2MExTUF9fY21wMl9Bd18oKTogRW11bGF0ZSAiY21wMi53IEFuLDxlYT4iLgkJCSMKKyMJXzA2MExTUF9fY21wMl9BbF8oKTogRW11bGF0ZSAiY21wMi5sIEFuLDxlYT4iLgkJCSMKKyMJXzA2MExTUF9fY21wMl9EYl8oKTogRW11bGF0ZSAiY21wMi5iIERuLDxlYT4iLgkJCSMKKyMJXzA2MExTUF9fY21wMl9Ed18oKTogRW11bGF0ZSAiY21wMi53IERuLDxlYT4iLgkJCSMKKyMJXzA2MExTUF9fY21wMl9EbF8oKTogRW11bGF0ZSAiY21wMi5sIERuLDxlYT4iLgkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaXMgdGhlIGxpYnJhcnkgdmVyc2lvbiB3aGljaCBpcyBhY2Nlc3NlZCBhcyBhIHN1YnJvdXRpbmUJIworIwlhbmQgdGhlcmVmb3JlIGRvZXMgbm90IHdvcmsgZXhhY3RseSBsaWtlIHRoZSA2ODBYMCAiY21wMiIJIworIwlpbnN0cnVjdGlvbi4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJMHg0KHNwKSA9IFJuCQkJCQkJCSMKKyMJMHg4KHNwKSA9IHBvaW50ZXIgdG8gYm91bmRhcnkgcGFpcgkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwljYyA9IGNvbmRpdGlvbiBjb2RlcyBhcmUgc2V0IGNvcnJlY3RseQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJbiB0aGUgaW50ZXJlc3Qgb2Ygc2ltcGxpY2l0eSwgYWxsIG9wZXJhbmRzIGFyZSBjb252ZXJ0ZWQgdG8JIworIyBsb25nd29yZCBzaXplIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBieXRlLCB3b3JkLCBvciBsb25nLiBUaGUJIworIyBib3VuZHMgYXJlIHNpZ24gZXh0ZW5kZWQgYWNjb3JkaW5nbHkuIElmIFJuIGlzIGEgZGF0YSByZWdzaXRlciwgUm4gaXMgIworIyBhbHNvIHNpZ24gZXh0ZW5kZWQuIElmIFJuIGlzIGFuIGFkZHJlc3MgcmVnaXN0ZXIsIGl0IG5lZWQgbm90IGJlIHNpZ24gIworIyBleHRlbmRlZCBzaW5jZSB0aGUgZnVsbCByZWdpc3RlciBpcyBhbHdheXMgdXNlZC4JCQkjCisjCVRoZSBjb25kaXRpb24gY29kZXMgYXJlIHNldCBjb3JyZWN0bHkgYmVmb3JlIHRoZSBmaW5hbCAicnRzIi4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CUNNUDJfQ0MsCS00CisKKwlnbG9iYWwJCV8wNjBMU1BfX2NtcDJfQWJfCitfMDYwTFNQX19jbXAyX0FiXzoKKworIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtNAorCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAorIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKKwltb3YubAkJMHg4KCVhNiksICVkMgkJIyBnZXQgcmVndmFsCisKKwltb3YuYgkJKFsweGMsJWE2XSwweDApLCVkMAorCW1vdi5iCQkoWzB4YywlYTZdLDB4MSksJWQxCisKKwlleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCisJZXh0Yi5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgorCisJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0F3XworXzA2MExTUF9fY21wMl9Bd186CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCisJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAorCisJbW92LncJCShbMHhjLCVhNl0sMHgwKSwlZDAKKwltb3YudwkJKFsweGMsJWE2XSwweDIpLCVkMQorCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCisJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgaGkgYm5kCisJYnJhLncJCWxfY21wMl9jbXAJCSMgZ28gZG8gdGhlIGNvbXBhcmUgZW11bGF0aW9uCisKKwlnbG9iYWwJCV8wNjBMU1BfX2NtcDJfQWxfCitfMDYwTFNQX19jbXAyX0FsXzoKKworIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtNAorCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAorIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKKwltb3YubAkJMHg4KCVhNiksICVkMgkJIyBnZXQgcmVndmFsCisKKwltb3YubAkJKFsweGMsJWE2XSwweDApLCVkMAorCW1vdi5sCQkoWzB4YywlYTZdLDB4NCksJWQxCisJYnJhLncJCWxfY21wMl9jbXAJCSMgZ28gZG8gdGhlIGNvbXBhcmUgZW11bGF0aW9uCisKKwlnbG9iYWwJCV8wNjBMU1BfX2NtcDJfRGJfCitfMDYwTFNQX19jbXAyX0RiXzoKKworIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtNAorCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAorIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKKwltb3YubAkJMHg4KCVhNiksICVkMgkJIyBnZXQgcmVndmFsCisKKwltb3YuYgkJKFsweGMsJWE2XSwweDApLCVkMAorCW1vdi5iCQkoWzB4YywlYTZdLDB4MSksJWQxCisKKwlleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCisJZXh0Yi5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCisjIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KKyMgc2lnbiBleHRlbmQgYnl0ZSB0byBsb25nIHNvIHdlIGNhbiBkbyBzaW1wbGUgbG9uZ3dvcmQgY29tcGFyZXMuCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRhdGEgYnl0ZQorCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgorCisJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0R3XworXzA2MExTUF9fY21wMl9Ed186CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCisJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAorCisJbW92LncJCShbMHhjLCVhNl0sMHgwKSwlZDAKKwltb3YudwkJKFsweGMsJWE2XSwweDIpLCVkMQorCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCisJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgaGkgYm5kCisKKyMgb3BlcmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlciBjb21wYXJlLgorIyBzaWduIGV4dGVuZCB3b3JkIHRvIGxvbmcgc28gd2UgY2FuIGRvIHNpbXBsZSBsb25nd29yZCBjb21wYXJlcy4KKwlleHQubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkYXRhIHdvcmQKKwlicmEudwkJbF9jbXAyX2NtcAkJIyBnbyBlbXVsYXRlIGNvbXBhcmUKKworCWdsb2JhbAkJXzA2MExTUF9fY21wMl9EbF8KK18wNjBMU1BfX2NtcDJfRGxfOgorCisjIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJbGluay53CQklYTYsJi00CisJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CisjCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCisjIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQorCW1vdi5sCQkweDgoJWE2KSwgJWQyCQkjIGdldCByZWd2YWwKKworCW1vdi5sCQkoWzB4YywlYTZdLDB4MCksJWQwCisJbW92LmwJCShbMHhjLCVhNl0sMHg0KSwlZDEKKworIworIyBUbyBzZXQgdGhlIGNjb2RlcyBjb3JyZWN0bHk6CisjCSgxKSBzYXZlICdaJyBiaXQgZnJvbSAoUm4gLSBsbykKKyMJKDIpIHNhdmUgJ1onIGFuZCAnTicgYml0cyBmcm9tICgoaGkgLSBsbykgLSAoUm4gLSBoaSkpCisjCSgzKSBrZWVwICdYJywgJ04nLCBhbmQgJ1YnIGZyb20gYmVmb3JlIGluc3RydWN0aW9uCisjCSg0KSBjb21iaW5lIGNjb2RlcworIworbF9jbXAyX2NtcDoKKwlzdWIubAkJJWQwLCAlZDIJCSMgKFJuIC0gbG8pCisJbW92LncJCSVjYywgJWQzCQkjIGZldGNoIHJlc3VsdGluZyBjY29kZXMKKwlhbmRpLmIJCSYweDQsICVkMwkJIyBrZWVwICdaJyBiaXQKKwlzdWIubAkJJWQwLCAlZDEJCSMgKGhpIC0gbG8pCisJY21wLmwJCSVkMSwlZDIJCQkjICgoaGkgLSBsbykgLSAoUm4gLSBoaSkpCisKKwltb3YudwkJJWNjLCAlZDQJCSMgZmV0Y2ggcmVzdWx0aW5nIGNjb2RlcworCW9yLmIJCSVkNCwgJWQzCQkjIGNvbWJpbmUgdy8gZWFybGllciBjY29kZXMKKwlhbmRpLmIJCSYweDUsICVkMwkJIyBrZWVwICdaJyBhbmQgJ04nCisKKwltb3YudwkJQ01QMl9DQyglYTYpLCAlZDQJIyBmZXRjaCBvbGQgY2NvZGVzCisJYW5kaS5iCQkmMHgxYSwgJWQ0CQkjIGtlZXAgJ1gnLCdOJywnVicgYml0cworCW9yLmIJCSVkMywgJWQ0CQkjIGluc2VydCBuZXcgY2NvZGVzCisJbW92LncJCSVkNCwlY2MJCQkjIHNhdmUgbmV3IGNjb2RlcworCisjIEVQSUxPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCWZtb3ZtLmwJCSglc3ApKywmMHgwCQkjIHJlc3RvcmUgbm8gZnByZWdzCisJbW92bS5sCQkoJXNwKSssJjB4MDAxYwkJIyByZXN0b3JlIGQyLWQ0CisJdW5sawkJJWE2CisjIEVQSUxPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlydHMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaXNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lzcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjkwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lzcC5TCkBAIC0wLDAgKzEsNDI5OSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyBpcmVhbC5zOgorIwlUaGlzIGZpbGUgaXMgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUgMDYwSVNQIHBhY2thZ2UKKyMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCisjIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkCisjIGFmdGVyIF8wNjBJU1BfVEFCTEUuCisjCUFsc28sIHN1YnJvdXRpbmUgc3R1YnMgZXhpc3QgaW4gdGhpcyBmaWxlIChfaXNwX2RvbmUgZm9yCisjIGV4YW1wbGUpIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIElTUCBwYWNrYWdlIGl0c2VsZiBpbiBvcmRlcgorIyB0byBjYWxsIGEgZ2l2ZW4gcm91dGluZS4gVGhlIHN0dWIgcm91dGluZSBhY3R1YWxseSBwZXJmb3JtcyB0aGUKKyMgY2FsbG91dC4gVGhlIElTUCBjb2RlIGRvZXMgYSAiYnNyIiB0byB0aGUgc3R1YiByb3V0aW5lLiBUaGlzCisjIGV4dHJhIGxheWVyIG9mIGhpZXJhcmNoeSBhZGRzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIHBlbmFsdHkgYnV0CisjIGl0IG1ha2VzIHRoZSBJU1AgY29kZSBlYXNpZXIgdG8gcmVhZCBhbmQgbW9yZSBtYWluYXRpbmFibGUuCisjCisKK3NldAlfb2ZmX2NoaywJMHgwMAorc2V0CV9vZmZfZGl2Ynl6ZXJvLAkweDA0CitzZXQJX29mZl90cmFjZSwJMHgwOAorc2V0CV9vZmZfYWNjZXNzLAkweDBjCitzZXQJX29mZl9kb25lLAkweDEwCisKK3NldAlfb2ZmX2NhcywJMHgxNAorc2V0CV9vZmZfY2FzMiwJMHgxOAorc2V0CV9vZmZfbG9jaywJMHgxYworc2V0CV9vZmZfdW5sb2NrLAkweDIwCisKK3NldAlfb2ZmX2ltciwJMHg0MAorc2V0CV9vZmZfZG1yLAkweDQ0CitzZXQJX29mZl9kbXcsCTB4NDgKK3NldAlfb2ZmX2lydywJMHg0Yworc2V0CV9vZmZfaXJsLAkweDUwCitzZXQJX29mZl9kcmIsCTB4NTQKK3NldAlfb2ZmX2RydywJMHg1OAorc2V0CV9vZmZfZHJsLAkweDVjCitzZXQJX29mZl9kd2IsCTB4NjAKK3NldAlfb2ZmX2R3dywJMHg2NAorc2V0CV9vZmZfZHdsLAkweDY4CisKK18wNjBJU1BfVEFCTEU6CisKKyMgSGVyZSdzIHRoZSB0YWJsZSBvZiBFTlRSWSBQT0lOVFMgZm9yIHRob3NlIGxpbmtpbmcgdGhlIHBhY2thZ2UuCisJYnJhLmwJCV9pc3BfdW5pbXAKKwlzaG9ydAkJMHgwMDAwCisKKwlicmEubAkJX2lzcF9jYXMKKwlzaG9ydAkJMHgwMDAwCisKKwlicmEubAkJX2lzcF9jYXMyCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzX2ZpbmlzaAorCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfaXNwX2NhczJfZmluaXNoCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzX2lucmFuZ2UKKwlzaG9ydAkJMHgwMDAwCisKKwlicmEubAkJX2lzcF9jYXNfdGVybWluYXRlCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzX3Jlc3RhcnQKKwlzaG9ydAkJMHgwMDAwCisKKwlzcGFjZQkJNjQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfcmVhbF9jaGsKK19yZWFsX2NoazoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfY2hrLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2RpdmJ5emVybworX3JlYWxfZGl2Ynl6ZXJvOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kaXZieXplcm8sJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdHJhY2UKK19yZWFsX3RyYWNlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl90cmFjZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9hY2Nlc3MKK19yZWFsX2FjY2VzczoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfYWNjZXNzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9pc3BfZG9uZQorX2lzcF9kb25lOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kb25lLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfcmVhbF9jYXMKK19yZWFsX2NhczoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfY2FzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2NhczIKK19yZWFsX2NhczI6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2NhczIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfbG9ja19wYWdlCitfcmVhbF9sb2NrX3BhZ2U6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2xvY2ssJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdW5sb2NrX3BhZ2UKK19yZWFsX3VubG9ja19wYWdlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl91bmxvY2ssJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9pbWVtX3JlYWQKK19pbWVtX3JlYWQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2ltciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkCitfZG1lbV9yZWFkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kbXIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGUKK19kbWVtX3dyaXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kbXcsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2ltZW1fcmVhZF93b3JkCitfaW1lbV9yZWFkX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2lydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfaW1lbV9yZWFkX2xvbmcKK19pbWVtX3JlYWRfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfaXJsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfYnl0ZQorX2RtZW1fcmVhZF9ieXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kcmIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF93b3JkCitfZG1lbV9yZWFkX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX2xvbmcKK19kbWVtX3JlYWRfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZHJsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2J5dGUKK19kbWVtX3dyaXRlX2J5dGU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2R3YiwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZV93b3JkCitfZG1lbV93cml0ZV93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kd3csJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGVfbG9uZworX2RtZW1fd3JpdGVfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZHdsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2V0IG9mIGRlZmluZSBzdGF0ZW1lbnRzIGZvciBjb25zdGFudHMKKyMgaW4gb3JlZGVyIHRvIHByb21vdGUgcmVhZGFiaWxpdHkgd2l0aGluIHRoZSBjb3JlIGNvZGUgaXRzZWxmLgorIworCitzZXQgTE9DQUxfU0laRSwJCTk2CQkJIyBzdGFjayBmcmFtZSBzaXplKGJ5dGVzKQorc2V0IExWLAkJCS1MT0NBTF9TSVpFCQkjIHN0YWNrIG9mZnNldAorCitzZXQgRVhDX0lTUiwJCTB4NAkJCSMgc3RhY2sgc3RhdHVzIHJlZ2lzdGVyCitzZXQgRVhDX0lQQywJCTB4NgkJCSMgc3RhY2sgcGMKK3NldCBFWENfSVZPRkYsCQkweGEJCQkjIHN0YWNrZWQgdmVjdG9yIG9mZnNldAorCitzZXQgRVhDX0FSRUdTLAkJTFYrNjQJCQkjIG9mZnNldCBvZiBhbGwgYWRkcmVzcyByZWdzCitzZXQgRVhDX0RSRUdTLAkJTFYrMzIJCQkjIG9mZnNldCBvZiBhbGwgZGF0YSByZWdzCisKK3NldCBFWENfQTcsCQlFWENfQVJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIGE3CitzZXQgRVhDX0E2LAkJRVhDX0FSRUdTKyg2KjQpCQkjIG9mZnNldCBvZiBhNgorc2V0IEVYQ19BNSwJCUVYQ19BUkVHUysoNSo0KQkJIyBvZmZzZXQgb2YgYTUKK3NldCBFWENfQTQsCQlFWENfQVJFR1MrKDQqNCkJCSMgb2Zmc2V0IG9mIGE0CitzZXQgRVhDX0EzLAkJRVhDX0FSRUdTKygzKjQpCQkjIG9mZnNldCBvZiBhMworc2V0IEVYQ19BMiwJCUVYQ19BUkVHUysoMio0KQkJIyBvZmZzZXQgb2YgYTIKK3NldCBFWENfQTEsCQlFWENfQVJFR1MrKDEqNCkJCSMgb2Zmc2V0IG9mIGExCitzZXQgRVhDX0EwLAkJRVhDX0FSRUdTKygwKjQpCQkjIG9mZnNldCBvZiBhMAorc2V0IEVYQ19ENywJCUVYQ19EUkVHUysoNyo0KQkJIyBvZmZzZXQgb2YgZDcKK3NldCBFWENfRDYsCQlFWENfRFJFR1MrKDYqNCkJCSMgb2Zmc2V0IG9mIGQ2CitzZXQgRVhDX0Q1LAkJRVhDX0RSRUdTKyg1KjQpCQkjIG9mZnNldCBvZiBkNQorc2V0IEVYQ19ENCwJCUVYQ19EUkVHUysoNCo0KQkJIyBvZmZzZXQgb2YgZDQKK3NldCBFWENfRDMsCQlFWENfRFJFR1MrKDMqNCkJCSMgb2Zmc2V0IG9mIGQzCitzZXQgRVhDX0QyLAkJRVhDX0RSRUdTKygyKjQpCQkjIG9mZnNldCBvZiBkMgorc2V0IEVYQ19EMSwJCUVYQ19EUkVHUysoMSo0KQkJIyBvZmZzZXQgb2YgZDEKK3NldCBFWENfRDAsCQlFWENfRFJFR1MrKDAqNCkJCSMgb2Zmc2V0IG9mIGQwCisKK3NldCBFWENfVEVNUCwJCUxWKzE2CQkJIyBvZmZzZXQgb2YgdGVtcCBzdGFjayBzcGFjZQorCitzZXQgRVhDX1NBVlZBTCwJCUxWKzEyCQkJIyBvZmZzZXQgb2Ygb2xkIGFyZWcgdmFsdWUKK3NldCBFWENfU0FWUkVHLAkJTFYrMTEJCQkjIG9mZnNldCBvZiBvbGQgYXJlZyBpbmRleAorCitzZXQgU1BDT05EX0ZMRywJCUxWKzEwCQkJIyBvZmZzZXQgb2Ygc3BjIGNvbmRpdGlvbiBmbGcKKworc2V0IEVYQ19DQywJCUxWKzgJCQkjIG9mZnNldCBvZiBjYyByZWdpc3Rlcgorc2V0IEVYQ19FWFRXUFRSLAlMVis0CQkJIyBvZmZzZXQgb2YgY3VycmVudCBQQworc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBvZmZzZXQgb2YgY3VycmVudCBleHQgb3B3b3JkCitzZXQgRVhDX09QV09SRCwJCUxWKzAJCQkjIG9mZnNldCBvZiBjdXJyZW50IG9wd29yZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1BlY2lhbCBDT05EaXRpb24gRkxhR3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgbWlhN19mbGcsCQkweDA0CQkJIyAoYTcpKyBmbGFnCitzZXQgbWRhN19mbGcsCQkweDA4CQkJIyAtKGE3KSBmbGFnCitzZXQgaWNoa19mbGcsCQkweDEwCQkJIyBjaGsgZXhjZXB0aW9uIGZsYWcKK3NldCBpZGJ5el9mbGcsCQkweDIwCQkJIyBkaXZieXplcm8gZmxhZworc2V0IHJlc3RvcmVfZmxnLAkweDQwCQkJIyByZXN0b3JlIC0oYW4pKyBmbGFnCitzZXQgaW1tZWRfZmxnLAkJMHg4MAkJCSMgaW1tZWRpYXRlIGRhdGEgZmxhZworCitzZXQgbWlhN19iaXQsCQkweDIJCQkjIChhNykrIGJpdAorc2V0IG1kYTdfYml0LAkJMHgzCQkJIyAtKGE3KSBiaXQKK3NldCBpY2hrX2JpdCwJCTB4NAkJCSMgY2hrIGV4Y2VwdGlvbiBiaXQKK3NldCBpZGJ5el9iaXQsCQkweDUJCQkjIGRpdmJ5emVybyBiaXQKK3NldCByZXN0b3JlX2JpdCwJMHg2CQkJIyByZXN0b3JlIC0oYTcpKyBiaXQKK3NldCBpbW1lZF9iaXQsCQkweDcJCQkjIGltbWVkaWF0ZSBkYXRhIGJpdAorCisjIyMjIyMjIyMKKyMgTWlzYy4gIworIyMjIyMjIyMjCitzZXQgQllURSwJCTEJCQkjIGxlbihieXRlKSA9PSAxIGJ5dGUKK3NldCBXT1JELAkJMgkJCSMgbGVuKHdvcmQpID09IDIgYnl0ZXMKK3NldCBMT05HLAkJNAkJCSMgbGVuKGxvbmd3b3JkKSA9PSA0IGJ5dGVzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2lzcF91bmltcCgpOiAwNjBJU1AgZW50cnkgcG9pbnQgZm9yIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb24JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwkiVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEluc3RydWN0aW9uIiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nCSMKKyMJc3lzdGVtLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIC0gcmVhZCBpbnN0cnVjdGlvbiB3b3JkL2xvbmd3b3JkCSMKKyMJX211bDY0KCkgLSBlbXVsYXRlIDY0LWJpdCBtdWx0aXBseQkJCQkjCisjCV9kaXY2NCgpIC0gZW11bGF0ZSA2NC1iaXQgZGl2aWRlCQkJCSMKKyMJX21vdmVwZXJpcGhlcmFsKCkgLSBlbXVsYXRlICJtb3ZlcCIJCQkJIworIwlfY29tcGFuZHNldCgpIC0gZW11bGF0ZSBtaXNhbGlnbmVkICJjYXMiCQkJIworIwlfY29tcGFuZHNldDIoKSAtIGVtdWxhdGUgImNhczIiCQkJCQkjCisjCV9jaGsyX2NtcDIoKSAtIGVtdWxhdGUgImNtcDIiIGFuZCAiY2hrMiIJCQkjCisjCV9pc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBub3JtYWwgZmluYWwgZXhpdAkJCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZXhjZXB0aW9uCQkJIworIwlfcmVhbF9jaGsoKSAtICJjYWxsb3V0IiBmb3IgQ2hrIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfZGl2Ynl6ZXJvKCkgLSAiY2FsbG91dCIgZm9yIERaIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfYWNjZXNzKCkgLSAiY2FsbG91dCIgZm9yIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgVW5pbXAgSW50IEluc3RyIHN0YWNrIGZyYW1lCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIFRyYWNlIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjaGFuZ2VkIHRvIGNvbnRhaW4gVHJhY2UgZXhjIHN0YWNrIGZyYW1lCSMKKyMJSWYgQ2hrIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjaGFuZ2VkIHRvIGNvbnRhaW4gQ2hrIGV4YyBzdGFjayBmcmFtZQkjCisjCUlmIERaIGV4Y2VwdGlvbjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjaGFuZ2VkIHRvIGNvbnRhaW4gRFogZXhjIHN0YWNrIGZyYW1lCSMKKyMJSWYgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbjoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNoYW5nZWQgdG8gY29udGFpbiBhY2Nlc3MgZXJyIGV4YyBzdGsgZnJhbWUJIworIwlFbHNlOgkJCQkJCQkJIworIwktIFJlc3VsdHMgc2F2ZWQgYXMgYXBwcm9wcmlhdGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgaGFuZGxlciBmZXRjaGVzIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBsb25nd29yZCBmcm9tCSMKKyMgbWVtb3J5IGFuZCBkZWNvZGVzIGl0IHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdW5pbXBsZW1lbnRlZAkJIworIyBpbnRlZ2VyIGluc3RydWN0aW9ucyBjYXVzZWQgdGhpcyBleGNlcHRpb24uIFRoaXMgaGFuZGxlciB0aGVuIGNhbGxzCSMKKyMgb25lIG9mIF9tdWw2NCgpLCBfZGl2NjQoKSwgX21vdmVwZXJpcGhlcmFsKCksIF9jb21wYW5kc2V0KCksCQkjCisjIF9jb21wYW5kc2V0MigpLCBvciBfY2hrMl9jbXAyKCkgYXMgYXBwcm9wcmlhdGUuCQkJIworIwlTb21lIG9mIHRoZXNlIGluc3RydWN0aW9ucywgYnkgdGhlaXIgbmF0dXJlLCBtYXkgcHJvZHVjZSBvdGhlcgkjCisjIHR5cGVzIG9mIGV4Y2VwdGlvbnMuICJkaXYiIGNhbiBwcm9kdWNlIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLAkjCisjIGFuZCAiY2hrMiIgY2FuIGNhdXNlIGEgIkNoayIgZXhjZXB0aW9uLiBJbiBib3RoIGNhc2VzLCB0aGUgY3VycmVudAkjCisjIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBtdXN0IGJlIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIyBvZiB0aGUgY29ycmVjdCBleGNlcHRpb24gdHlwZSBhbmQgYW4gZXhpdCBtdXN0IGJlIG1hZGUgdGhyb3VnaAkjCisjIF9yZWFsX2RpdmJ5emVybygpIG9yIF9yZWFsX2NoaygpIGFzIGFwcHJvcHJpYXRlLiBJbiBhZGRpdGlvbiwgYWxsCSMKKyMgaW5zdHJ1Y3Rpb25zIG1heSBiZSBleGVjdXRpbmcgd2hpbGUgVHJhY2UgaXMgZW5hYmxlZC4gSWYgc28sIHRoZW4JIworIyBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGFuIGV4aXQgbWFkZQkjCisjIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JCQkJCQkjCisjCU1lYW53aGlsZSwgaWYgYW55IHJlYWQgb3Igd3JpdGUgdG8gbWVtb3J5IHVzaW5nIHRoZQkJIworIyBfbWVtX3tyZWFkLHdyaXRlfSgpICJjYWxsb3V0InMgcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHRoZW4gYW4JIworIyBhY2Nlc3MgZXJyb3IgZnJhbWUgbXVzdCBiZSBjcmVhdGVkIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaAkJIworIyBfcmVhbF9hY2Nlc3MoKS4JCQkJCQkJIworIwlJZiBub25lIG9mIHRoZXNlIG9jY3VyLCB0aGVuIGEgbm9ybWFsIGV4aXQgaXMgbWFkZSB0aHJvdWdoCSMKKyMgX2lzcF9kb25lKCkuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIsIHVwb24gZW50cnksIHNhdmVzIGFsbW9zdCBhbGwgdXNlci12aXNpYmxlCQkjCisjIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWx0aG91Z2ggdGhpcyBtYXkgc2VlbSB0bwkjCisjIGNhdXNlIGV4Y2VzcyBtZW1vcnkgdHJhZmZpYywgaXQgd2FzIGZvdW5kIHRoYXQgZHVlIHRvIGhhdmluZyB0bwkjCisjIGFjY2VzcyB0aGVzZSByZWdpc3RlciBmaWxlcyBmb3IgdGhpbmdzIGxpa2UgZGF0YSByZXRyaWV2YWwgYW5kIDxlYT4JIworIyBjYWxjdWxhdGlvbnMsIGl0IHdhcyBtb3JlIGVmZmljaWVudCB0byBoYXZlIHRoZW0gb24gdGhlIHN0YWNrIHdoZXJlCSMKKyMgdGhleSBjb3VsZCBiZSBhY2Nlc3NlZCBieSBpbmRleGluZyByYXRoZXIgdGhhbiB0byBtYWtlIHN1YnJvdXRpbmUJIworIyBjYWxscyB0byByZXRyaWV2ZSBhIHJlZ2lzdGVyIG9mIGEgcGFydGljdWxhciBpbmRleC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfaXNwX3VuaW1wCitfaXNwX3VuaW1wOgorCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGNyZWF0ZSByb29tIGZvciBzdGFjayBmcmFtZQorCisJbW92bS5sCQkmMHgzZmZmLEVYQ19EUkVHUyglYTYpCSMgc3RvcmUgZDAtZDcvYTAtYTUKKwltb3YubAkJKCVhNiksRVhDX0E2KCVhNikJIyBzdG9yZSBhNgorCisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyBmcm9tIHMgb3IgdSBtb2RlPworCWJuZS5iCQl1aWVoX3MJCQkjIHN1cGVydmlzb3IgbW9kZQordWllaF91OgorCW1vdi5sCQkldXNwLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHN0b3JlIGE3CisJYnJhLmIJCXVpZWhfY29udAordWllaF9zOgorCWxlYQkJMHhjKCVhNiksJWEwCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBjb3JyZWN0ZWQgc3AKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1aWVoX2NvbnQ6CisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciAic3BlY2lhbCBjYXNlIiBmbGFnCisKKwltb3YudwkJRVhDX0lTUiglYTYpLEVYQ19DQyglYTYpICMgc3RvcmUgY2MgY29weSBvbiBzdGFjaworCW1vdi5sCQlFWENfSVBDKCVhNiksRVhDX0VYVFdQVFIoJWE2KSAjIHN0b3JlIGV4dHdwdHIgb24gc3RhY2sKKworIworIyBmZXRjaCB0aGUgb3B3b3JkIGFuZCBmaXJzdCBleHRlbnNpb24gd29yZCBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIHBjCisjIGFuZCBzdG9yZSB0aGVtIHRvIHRoZSBzdGFjayBmb3Igbm93CisjCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIG9wd29yZCAmIGV4dHdvcmQKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIGV4dHdvcmQgb24gc3RhY2sKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG11bHMubAkwMTAwIDExMDAgMDAgfDxlYT58CTAqKiogMTEwMCAwMDAwIDAqKioJCSMKKyMgbXVsdS5sCTAxMDAgMTEwMCAwMCB8PGVhPnwJMCoqKiAwMTAwIDAwMDAgMCoqKgkJIworIwkJCQkJCQkJCSMKKyMgZGl2cy5sCTAxMDAgMTEwMCAwMSB8PGVhPnwJMCoqKiAxMTAwIDAwMDAgMCoqKgkJIworIyBkaXZ1LmwJMDEwMCAxMTAwIDAxIHw8ZWE+fAkwKioqIDAxMDAgMDAwMCAwKioqCQkjCisjCQkJCQkJCQkJIworIyBtb3ZlcC53IG0ycgkwMDAwICoqKjEgMDAgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKKyMgbW92ZXAubCBtMnIJMDAwMCAqKioxIDAxIDAwMSoqKgl8IDxkaXNwbGFjZW1lbnQ+ICB8CQkjCisjIG1vdmVwLncgcjJtCTAwMDAgKioqMSAxMCAwMDEqKioJfCA8ZGlzcGxhY2VtZW50PiAgfAkJIworIyBtb3ZlcC5sIHIybQkwMDAwICoqKjEgMTEgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKKyMJCQkJCQkJCQkjCisjIGNhcy53CQkwMDAwIDExMDAgMTEgfDxlYT58CTAwMDAgMDAwKiAqKjAwIDAqKioJCSMKKyMgY2FzLmwJCTAwMDAgMTExMCAxMSB8PGVhPnwJMDAwMCAwMDAqICoqMDAgMCoqKgkJIworIwkJCQkJCQkJCSMKKyMgY2FzMi53CTAwMDAgMTEwMCAxMSAxMTExMDAJKioqKiAwMDAqICoqMDAgMCoqKgkJIworIwkJCQkJKioqKiAwMDAqICoqMDAgMCoqKgkJIworIyBjYXMyLmwJMDAwMCAxMTEwIDExIDExMTEwMAkqKioqIDAwMCogKiowMCAwKioqCQkjCisjCQkJCQkqKioqIDAwMCogKiowMCAwKioqCQkjCisjCQkJCQkJCQkJIworIyBjaGsyLmIJMDAwMCAwMDAwIDExIHw8ZWE+fAkqKioqIDEwMDAgMDAwMCAwMDAwCQkjCisjIGNoazIudwkwMDAwIDAwMTAgMTEgfDxlYT58CSoqKiogMTAwMCAwMDAwIDAwMDAJCSMKKyMgY2hrMi5sCTAwMDAgMDEwMCAxMSB8PGVhPnwJKioqKiAxMDAwIDAwMDAgMDAwMAkJIworIwkJCQkJCQkJCSMKKyMgY21wMi5iCTAwMDAgMDAwMCAxMSB8PGVhPnwJKioqKiAwMDAwIDAwMDAgMDAwMAkJIworIyBjbXAyLncJMDAwMCAwMDEwIDExIHw8ZWE+fAkqKioqIDAwMDAgMDAwMCAwMDAwCQkjCisjIGNtcDIubAkwMDAwIDAxMDAgMTEgfDxlYT58CSoqKiogMDAwMCAwMDAwIDAwMDAJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB1c2luZyBiaXQgMTQgb2YgdGhlIG9wZXJhdGlvbiB3b3JkLCBzZXBhcmF0ZSBpbnRvIDIgZ3JvdXBzOgorIyAoZ3JvdXAxKSBtdWw2NCwgZGl2NjQKKyMgKGdyb3VwMikgbW92ZXAsIGNoazIsIGNtcDIsIGNhczIsIGNhcworIworCWJ0c3QJCSYweDFlLCVkMAkJIyBncm91cDEgb3IgZ3JvdXAyCisJYmVxLmIJCXVpZWhfZ3JvdXAyCQkjIGdvIGhhbmRsZSBncm91cDIKKworIworIyBub3csIHcvIGdyb3VwMSwgbWFrZSBtdWw2NCdzIGRlY29kZSB0aGUgZmFzdGVzdCBzaW5jZSBpdCB3aWxsCisjIG1vc3QgbGlrZWx5IGJlIHVzZWQgdGhlIG1vc3QuCisjCit1aWVoX2dyb3VwMToKKwlidHN0CQkmMHgxNiwlZDAJCSMgdGVzdCBmb3IgZGl2NjQKKwlibmUuYgkJdWllaF9kaXY2NAkJIyBnbyBoYW5kbGUgZGl2NjQKKwordWllaF9tdWw2NDoKKyMgbXVsNjQoKSBtYXkgdXNlICgpKyBhZGRyZXNzaW5nIGFuZCBtYXksIHRoZXJlZm9yZSwgYWx0ZXIgYTcKKworCWJzci5sCQlfbXVsNjQJCQkjIF9tdWw2NCgpCisKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQkjIHN1cGVydmlzb3IgbW9kZT8KKwliZXEudwkJdWllaF9kb25lCisJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBhNyBjaGFuZ2VkPworCWJlcS53CQl1aWVoX2RvbmUJCSMgbm8KKwlidHN0CQkmMHg3LEVYQ19JU1IoJWE2KQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYm5lLncJCXVpZWhfdHJhY2VfYTcJCSMgeWVzCisJYnJhLncJCXVpZWhfYTcJCQkjIG5vCisKK3VpZWhfZGl2NjQ6CisjIGRpdjY0KCkgbWF5IHVzZSAoKSsgYWRkcmVzc2luZyBhbmQgbWF5LCB0aGVyZWZvcmUsIGFsdGVyIGE3LgorIyBkaXY2NCgpIG1heSB0YWtlIGEgZGl2aWRlIGJ5IHplcm8gZXhjZXB0aW9uLgorCisJYnNyLmwJCV9kaXY2NAkJCSMgX2RpdjY0KCkKKworIyBoZXJlLCB3ZSBzb3J0IG91dCBhbGwgb2YgdGhlIHNwZWNpYWwgY2FzZXMgdGhhdCBtYXkgaGF2ZSBoYXBwZW5lZC4KKwlidHN0CQkmbWlhN19iaXQsU1BDT05EX0ZMRyglYTYpICMgd2FzIGE3IGNoYW5nZWQ/CisJYm5lLmIJCXVpZWhfZGl2NjRfYTcJCSMgeWVzCit1aWVoX2RpdjY0X2RieXo6CisJYnRzdAkJJmlkYnl6X2JpdCxTUENPTkRfRkxHKCVhNikgIyBkaWQgZGl2aWRlLWJ5LXplcm8gb2NjdXI/CisJYm5lLncJCXVpZWhfZGl2Ynl6ZXJvCQkjIHllcworCWJyYS53CQl1aWVoX2RvbmUJCSMgbm8KK3VpZWhfZGl2NjRfYTc6CisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCXVpZWhfZGl2NjRfZGJ5egkJIyBubworIyBoZXJlLCBhNyBoYXMgYmVlbiBpbmNyZW1lbnRlZCBieSA0IGJ5dGVzIGluIHN1cGVydmlzb3IgbW9kZS4gd2Ugc3RpbGwKKyMgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyAzIGNhc2VzOgorIwkoaSkJKGE3KSsKKyMJKGlpKQkoYTcpKzsgdHJhY2UKKyMJKGlpaSkJKGE3KSs7IGRpdmlkZS1ieS16ZXJvCisjCisJYnRzdAkJJmlkYnl6X2JpdCxTUENPTkRfRkxHKCVhNikgIyBkaWQgZGl2aWRlLWJ5LXplcm8gb2NjdXI/CisJYm5lLncJCXVpZWhfZGl2Ynl6ZXJvX2E3CSMgeWVzCisJdHN0LmIJCUVYQ19JU1IoJWE2KQkJIyBubzsgaXMgdHJhY2UgZW5hYmxlZD8KKwlibWkudwkJdWllaF90cmFjZV9hNwkJIyB5ZXMKKwlicmEudwkJdWllaF9hNwkJCSMgbm8KKworIworIyBub3csIHcvIGdyb3VwMiwgbWFrZSBtb3ZlcCdzIGRlY29kZSB0aGUgZmFzdGVzdCBzaW5jZSBpdCB3aWxsCisjIG1vc3QgbGlrZWx5IGJlIHVzZWQgdGhlIG1vc3QuCisjCit1aWVoX2dyb3VwMjoKKwlidHN0CQkmMHgxOCwlZDAJCSMgdGVzdCBmb3Igbm90IG1vdmVwCisJYmVxLmIJCXVpZWhfbm90X21vdmVwCisKKworCWJzci5sCQlfbW92ZXBlcmlwaGVyYWwJCSMgX21vdmVwKCkKKwlicmEudwkJdWllaF9kb25lCisKK3VpZWhfbm90X21vdmVwOgorCWJ0c3QJCSYweDFiLCVkMAkJIyB0ZXN0IGZvciBjaGsyLGNtcDIKKwliZXEuYgkJdWllaF9jaGsyY21wMgkJIyBnbyBoYW5kbGUgY2hrMixjbXAyCisKKwlzd2FwCQklZDAJCQkjIHB1dCBvcHdvcmQgaW4gbG8gd29yZAorCWNtcGkuYgkJJWQwLCYweGZjCQkjIHRlc3QgZm9yIGNhczIKKwliZXEuYgkJdWllaF9jYXMyCQkjIGdvIGhhbmRsZSBjYXMyCisKK3VpZWhfY2FzOgorCisJYnNyLmwJCV9jb21wYW5kc2V0CQkjIF9jYXMoKQorCisjIHRoZSBjYXNlcyBvZiAiY2FzIERjLER1LChhNykrIiBhbmQgImNhcyBEYyxEdSwtKGE3KSIgdXNlZCBmcm9tIHN1cGVydmlzb3IKKyMgbW9kZSBhcmUgc2ltcGx5IG5vdCBjb25zaWRlcmVkIHZhbGlkIGFuZCB0aGVyZWZvcmUgYXJlIG5vdCBoYW5kbGVkLgorCisJYnJhLncJCXVpZWhfZG9uZQorCit1aWVoX2NhczI6CisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgcmVhZCBleHRlbnNpb24gd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS53CQlpc3BfaWFjYwkJIyB5ZXMKKworCWJzci5sCQlfY29tcGFuZHNldDIJCSMgX2NhczIoKQorCWJyYS53CQl1aWVoX2RvbmUKKwordWllaF9jaGsyY21wMjoKKyMgY2hrMiBtYXkgdGFrZSBhIGNoayBleGNlcHRpb24KKworCWJzci5sCQlfY2hrMl9jbXAyCQkjIF9jaGsyX2NtcDIoKQorCisjIGhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIGEgY2hrIHRyYXAgc2hvdWxkIGJlIHRha2VuCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmljaGtfZmxnCisJYm5lLncJCXVpZWhfZG9uZQorCWJyYS5iCQl1aWVoX2Noa190cmFwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSByZXF1aXJlZCBlbXVsYXRpb24gaGFzIGJlZW4gY29tcGxldGVkLiBub3csIGNsZWFuIHVwIHRoZSBuZWNlc3Nhcnkgc3RhY2sKKyMgaW5mbyBhbmQgcHJlcGFyZSBmb3IgcnRlCisjCit1aWVoX2RvbmU6CisJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcworCisjIGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiB1c2VyIG1vZGUsIHRoZW4gd2UgaGF2ZSB0byByZXN0b3JlIGE3IGluIGNhc2UgaXQKKyMgY2hhbmdlZC4gd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGUgYTcgIGZvciBzdXBlcnZpc29yIG1vc2UgYmVjYXVzZSB0aGF0IGNhc2UKKyMgZG9lc24ndCBmbG93IHRocm91Z2ggaGVyZQorCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS5iCQl1aWVoX2ZpbmlzaAkJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsJXVzcAkJIyByZXN0b3JlIGl0CisKK3VpZWhfZmluaXNoOgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKKworCWJ0c3QJCSYweDcsRVhDX0lTUiglYTYpCSMgaXMgdHJhY2UgbW9kZSBvbj8KKwlibmUuYgkJdWllaF90cmFjZQkJIyB5ZXM7Z28gaGFuZGxlIHRyYWNlIG1vZGUKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19JUEMoJWE2KSAjIG5ldyBwYyBvbiBzdGFjayBmcmFtZQorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHByZXBhcmUgbmV3IGE2IGZvciB1bmxpbmsKKwl1bmxrCQklYTYJCQkjIHVubGluayBzdGFjayBmcmFtZQorCWJyYS5sCQlfaXNwX2RvbmUKKworIworIyBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCB3YXMganVzdCBlbXVsYXRlZCB3YXMgYWxzbyBiZWluZyB0cmFjZWQuIFRoZSB0cmFjZQorIyB0cmFwIGZvciB0aGlzIGluc3RydWN0aW9uIHdpbGwgYmUgbG9zdCB1bmxlc3Mgd2UganVtcCB0byB0aGUgdHJhY2UgaGFuZGxlci4KKyMgU28sIGhlcmUgd2UgY3JlYXRlIGEgVHJhY2UgRXhjZXB0aW9uIGZvcm1hdCBudW1iZXIgdHdvIGV4Y2VwdGlvbiBzdGFjaworIyBmcmFtZSBmcm9tIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIgSW50cnVjdGlvbiBFeGNlcHRpb24gc3RhY2sgZnJhbWUKKyMgZm9ybWF0IG51bWJlciB6ZXJvIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGhvb2sgIl9yZWFsX3RyYWNlKCkiLgorIworIwkJICAgVUlFSCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MCAqICAweDBmNAkqCSogICAgQ3VycmVudAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCSAgICAgIC0+KiAgICAgT2xkCSoJKioqKioqKioqKioqKioqKioKKyMgIGZyb20gbGluayAtLT4qICAgICAgQTYJKgkqICAgICAgU1IJKgorIwkgICAgICAgICoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSAgICAgICAvKiAgICAgIEE3CSoJKiAgICAgIE5ldwkqIDwtLSBmb3IgZmluYWwgdW5saW5rCisjCSAgICAgIC8gKgkJKgkqICAgICAgQTYJKgorIyBsaW5rIGZyYW1lIDwgICoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSAgICAgIFwgfgkJfgl+CQl+CisjCSAgICAgICBcKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMKK3VpZWhfdHJhY2U6CisJbW92LmwJCUVYQ19BNiglYTYpLC0weDQoJWE2KQorCW1vdi53CQlFWENfSVNSKCVhNiksMHgwKCVhNikKKwltb3YubAkJRVhDX0lQQyglYTYpLDB4OCglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksMHgyKCVhNikKKwltb3YudwkJJjB4MjAyNCwweDYoJWE2KQorCXN1Yi5sCQkmMHg0LCVhNgorCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjCisjCSAgIFVJRUggRlJBTUUJCSAgICBDSEsgRlJBTUUKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAweDAgKiAgMHgwZjQJKgkqICAgIEN1cnJlbnQJKgorIwkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkqICAgIEN1cnJlbnQJKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgUEMJKgkqIDB4MiAqICAweDAxOAkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCSogICAgIE5leHQJKgorIwkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkgICAgKDQgd29yZHMpCQkqKioqKioqKioqKioqKioqKgorIwkJCQkqICAgICAgU1IJKgorIwkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkgICAgKDYgd29yZHMpCisjCisjIHRoZSBjaGsyIGluc3RydWN0aW9uIHNob3VsZCB0YWtlIGEgY2hrIHRyYXAuIHNvLCBoZXJlIHdlIG11c3QgY3JlYXRlIGEKKyMgY2hrIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBpbnRlZ2VyIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBmcmFtZQorIyBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludCAiX3JlYWxfY2hrKCkiLgorIwordWllaF9jaGtfdHJhcDoKKwltb3YuYgkJRVhDX0NDKzEoJWE2KSxFWENfSVNSKzEoJWE2KSAjIGluc2VydCBuZXcgY2NvZGVzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQorCisJbW92LncJCUVYQ19JU1IoJWE2KSwoJWE2KQkjIHB1dCBuZXcgU1Igb24gc3RhY2sKKwltb3YubAkJRVhDX0lQQyglYTYpLDB4OCglYTYpCSMgcHV0ICJDdXJyZW50IFBDIiBvbiBzdGFjaworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4MiglYTYpICMgcHV0ICJOZXh0IFBDIiBvbiBzdGFjaworCW1vdi53CQkmMHgyMDE4LDB4NiglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKKworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgorCWFkZC5sCQkmTE9DQUxfU0laRSwlc3AJCSMgY2xlYXIgc3RhY2sgZnJhbWUKKworCWJyYS5sCQlfcmVhbF9jaGsKKworIworIwkgICBVSUVIIEZSQU1FCQkgRElWQllaRVJPIEZSQU1FCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgwICogIDB4MGY0CSoJKiAgICBDdXJyZW50CSoKKyMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMTQJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJICAgICg0IHdvcmRzKQkJKioqKioqKioqKioqKioqKioKKyMJCQkJKiAgICAgIFNSCSoKKyMJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJICAgICg2IHdvcmRzKQorIworIyB0aGUgZGl2aWRlIGluc3RydWN0aW9uIHNob3VsZCB0YWtlIGFuIGludGVnZXIgZGl2aWRlIGJ5IHplcm8gdHJhcC4gc28sIGhlcmUKKyMgd2UgbXVzdCBjcmVhdGUgYSBkaXZieXplcm8gc3RhY2sgZnJhbWUgZnJvbSBhbiB1bmltcGxlbWVudGVkIGludGVnZXIKKyMgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGZyYW1lIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGVudHJ5IHBvaW50CisjICJfcmVhbF9kaXZieXplcm8oKSIuCisjCit1aWVoX2RpdmJ5emVybzoKKwltb3YuYgkJRVhDX0NDKzEoJWE2KSxFWENfSVNSKzEoJWE2KSAjIGluc2VydCBuZXcgY2NvZGVzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQorCisJbW92LncJCUVYQ19JU1IoJWE2KSwoJWE2KQkjIHB1dCBuZXcgU1Igb24gc3RhY2sKKwltb3YubAkJRVhDX0lQQyglYTYpLDB4OCglYTYpCSMgcHV0ICJDdXJyZW50IFBDIiBvbiBzdGFjaworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4MiglYTYpICMgcHV0ICJOZXh0IFBDIiBvbiBzdGFjaworCW1vdi53CQkmMHgyMDE0LDB4NiglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKKworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgorCWFkZC5sCQkmTE9DQUxfU0laRSwlc3AJCSMgY2xlYXIgc3RhY2sgZnJhbWUKKworCWJyYS5sCQlfcmVhbF9kaXZieXplcm8KKworIworIwkJCQkgRElWQllaRVJPIEZSQU1FCisjCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCSogICAgQ3VycmVudAkqCisjCSAgIFVJRUggRlJBTUUJCSogICAgICBQQwkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgwICogIDB4MGY0CSoJKiAweDIgKiAweDAxNAkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgQ3VycmVudAkqCSogICAgIE5leHQJKgorIwkqICAgICAgUEMJKgkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkgICAgKDQgd29yZHMpCQkgICAgKDYgd29yZHMpCisjCisjIHRoZSBkaXZpZGUgaW5zdHJ1Y3Rpb24gc2hvdWxkIHRha2UgYW4gaW50ZWdlciBkaXZpZGUgYnkgemVybyB0cmFwLiBzbywgaGVyZQorIyB3ZSBtdXN0IGNyZWF0ZSBhIGRpdmJ5emVybyBzdGFjayBmcmFtZSBmcm9tIGFuIHVuaW1wbGVtZW50ZWQgaW50ZWdlcgorIyBpbnN0cnVjdGlvbiBleGNlcHRpb24gZnJhbWUgYW5kIGp1bXAgdG8gdGhlIHVzZXIgc3VwcGxpZWQgZW50cnkgcG9pbnQKKyMgIl9yZWFsX2RpdmJ5emVybygpIi4KKyMKKyMgSG93ZXZlciwgd2UgbXVzdCBhbHNvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IChhNykrIHdhcyB1c2VkIGZyb20gc3VwZXJ2aXNvcgorIyBtb2RlLCB0aGVyZWJ5IHNoaWZ0aW5nIHRoZSBzdGFjayBmcmFtZSB1cCA0IGJ5dGVzLgorIwordWllaF9kaXZieXplcm9fYTc6CisJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKKworCW1vdi5sCQlFWENfSVBDKCVhNiksMHhjKCVhNikJIyBwdXQgIkN1cnJlbnQgUEMiIG9uIHN0YWNrCisJbW92LncJCSYweDIwMTQsMHhhKCVhNikJIyBwdXQgVmVjdG9yIE9mZnNldCBvbiBzdGFjaworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4NiglYTYpICMgcHV0ICJOZXh0IFBDIiBvbiBzdGFjaworCisJbW92LmwJCUVYQ19BNiglYTYpLCVhNgkJIyByZXN0b3JlIGE2CisJYWRkLmwJCSY0K0xPQ0FMX1NJWkUsJXNwCSMgY2xlYXIgc3RhY2sgZnJhbWUKKworCWJyYS5sCQlfcmVhbF9kaXZieXplcm8KKworIworIwkJCQkgICBUUkFDRSBGUkFNRQorIwkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkqICAgIEN1cnJlbnQJKgorIwkgICBVSUVIIEZSQU1FCQkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqIDB4MCAqICAweDBmNAkqCSogMHgyICogMHgwMjQJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgIEN1cnJlbnQJKgkqICAgICBOZXh0CSoKKyMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJICAgICg0IHdvcmRzKQkJICAgICg2IHdvcmRzKQorIworIworIyBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCB3YXMganVzdCBlbXVsYXRlZCB3YXMgYWxzbyBiZWluZyB0cmFjZWQuIFRoZSB0cmFjZQorIyB0cmFwIGZvciB0aGlzIGluc3RydWN0aW9uIHdpbGwgYmUgbG9zdCB1bmxlc3Mgd2UganVtcCB0byB0aGUgdHJhY2UgaGFuZGxlci4KKyMgU28sIGhlcmUgd2UgY3JlYXRlIGEgVHJhY2UgRXhjZXB0aW9uIGZvcm1hdCBudW1iZXIgdHdvIGV4Y2VwdGlvbiBzdGFjaworIyBmcmFtZSBmcm9tIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIgSW50cnVjdGlvbiBFeGNlcHRpb24gc3RhY2sgZnJhbWUKKyMgZm9ybWF0IG51bWJlciB6ZXJvIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGhvb2sgIl9yZWFsX3RyYWNlKCkiLgorIworIyBIb3dldmVyLCB3ZSBtdXN0IGFsc28gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgKGE3KSsgd2FzIHVzZWQgZnJvbSBzdXBlcnZpc29yCisjIG1vZGUsIHRoZXJlYnkgc2hpZnRpbmcgdGhlIHN0YWNrIGZyYW1lIHVwIDQgYnl0ZXMuCisjCit1aWVoX3RyYWNlX2E3OgorCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CisKKwltb3YubAkJRVhDX0lQQyglYTYpLDB4YyglYTYpCSMgcHV0ICJDdXJyZW50IFBDIiBvbiBzdGFjaworCW1vdi53CQkmMHgyMDI0LDB4YSglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweDYoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKKworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgorCWFkZC5sCQkmNCtMT0NBTF9TSVpFLCVzcAkjIGNsZWFyIHN0YWNrIGZyYW1lCisKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIworIwkJCQkgICBVSUVIIEZSQU1FCisjCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCSogMHgwICogMHgwZjQJKgorIwkgICBVSUVIIEZSQU1FCQkqKioqKioqKioqKioqKioqKgorIwkqKioqKioqKioqKioqKioqKgkqICAgICBOZXh0CSoKKyMJKiAweDAgKiAgMHgwZjQJKgkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgIEN1cnJlbnQJKgkqICAgICAgU1IJKgorIwkqICAgICAgUEMJKgkqKioqKioqKioqKioqKioqKgorIwkqKioqKioqKioqKioqKioqKgkgICAgKDQgd29yZHMpCisjCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCisjCSAgICAoNCB3b3JkcykKK3VpZWhfYTc6CisJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKKworCW1vdi53CQkmMHgwMGY0LDB4ZSglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweGEoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKKwltb3YudwkJRVhDX0lTUiglYTYpLDB4OCglYTYpCSMgcHV0IFNSIG9uIHN0YWNrCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKKwlhZGQubAkJJjgrTE9DQUxfU0laRSwlc3AJIyBjbGVhciBzdGFjayBmcmFtZQorCWJyYS5sCQlfaXNwX2RvbmUKKworIyMjIyMjIyMjIworCisjIHRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgaWYgYSBkYXRhIHJlYWQgb3Igd3JpdGUgZmFpbHMuCisjIGEwID0gZmFpbGluZyBhZGRyZXNzCisjIGQwID0gZnNsdworaXNwX2RhY2M6CisJbW92LmwJCSVhMCwoJWE2KQkJIyBzYXZlIGFkZHJlc3MKKwltb3YubAkJJWQwLC0weDQoJWE2KQkJIyBzYXZlIHBhcnRpYWwgZnNsdworCisJbGVhCQktNjQoJWE2KSwlc3AKKwltb3ZtLmwJCSglc3ApKywmMHg3ZmZmCQkjIHJlc3RvcmUgZDAtZDcvYTAtYTYKKworCW1vdi5sCQkweGMoJXNwKSwtKCVzcCkJCSMgbW92ZSB2b2ZmLGhpKHBjKQorCW1vdi5sCQkweDQoJXNwKSwweDEwKCVzcCkJIyBzdG9yZSBmc2x3CisJbW92LmwJCTB4Yyglc3ApLDB4NCglc3ApCSMgc3RvcmUgc3IsbG8ocGMpCisJbW92LmwJCTB4OCglc3ApLDB4Yyglc3ApCSMgc3RvcmUgYWRkcmVzcworCW1vdi5sCQkoJXNwKSssMHg0KCVzcCkJCSMgc3RvcmUgdm9mZixoaShwYykKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIG5ldyB2b2ZmCisKKwlicmEuYgkJaXNwX2FjY19leGl0CisKKyMgdGhpcyBpcyB0aGUgZXhpdCBwb2ludCBpZiBhbiBpbnN0cnVjdGlvbiB3b3JkIHJlYWQgZmFpbHMuCisjIEZTTFc6CisjCW1pc2FsaWduZWQgPSB0cnVlCisjCXJlYWQgPSB0cnVlCisjCXNpemUgPSB3b3JkCisjCWluc3RydWN0aW9uID0gdHJ1ZQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCitpc3BfaWFjYzoKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CisJdW5sawkJJWE2CQkJIyB1bmxpbmsgZnJhbWUKKwlzdWIudwkJJjB4OCwlc3AJCSMgbWFrZSByb29tIGZvciBhY2MgZnJhbWUKKwltb3YubAkJMHg4KCVzcCksKCVzcCkJCSMgc3RvcmUgc3IsbG8ocGMpCisJbW92LncJCTB4Yyglc3ApLDB4NCglc3ApCSMgc3RvcmUgaGkocGMpCisJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSBuZXcgdm9mZgorCW1vdi5sCQkweDIoJXNwKSwweDgoJXNwKQkjIHN0b3JlIGFkZHJlc3MgKD1wYykKKwltb3YubAkJJjB4MDk0MjgwMDEsMHhjKCVzcCkJIyBzdG9yZSBmc2x3CisKK2lzcF9hY2NfZXhpdDoKKwlidHN0CQkmMHg1LCglc3ApCQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwliZXEuYgkJaXNwX2FjY19leGl0MgkJIyB1c2VyCisJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKK2lzcF9hY2NfZXhpdDI6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCisjIGlmIHRoZSBhZGRyZXNzaW5nIG1vZGUgd2FzIChhbikrIG9yIC0oYW4pLCB0aGUgYWRkcmVzcyByZWdpc3RlciBtdXN0CisjIGJlIHJlc3RvcmVkIHRvIGl0cyBwcmUtZXhjZXB0aW9uIHZhbHVlIGJlZm9yZSBlbnRlcmluZyBfcmVhbF9hY2Nlc3MuCitpc3BfcmVzdG9yZToKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmcmVzdG9yZV9mbGcgIyBkbyB3ZSBuZWVkIGEgcmVzdG9yZT8KKwlibmUuYgkJaXNwX3Jlc3RvcmVfZG9uZQkjIG5vCisJY2xyLmwJCSVkMAorCW1vdi5iCQlFWENfU0FWUkVHKCVhNiksJWQwCSMgcmVnbm8gdG8gcmVzdG9yZQorCW1vdi5sCQlFWENfU0FWVkFMKCVhNiksKEVYQ19BUkVHUywlYTYsJWQwLmwqNCkgIyByZXN0b3JlIHZhbHVlCitpc3BfcmVzdG9yZV9kb25lOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jYWxjX2VhKCk6IHJvdXRpbmUgdG8gY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX3dvcmQoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gd29yZAkJCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlfZG1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgZGF0YSBsb25nd29yZCAoZm9yIG1lbW9yeSBpbmRpcmVjdCkJIworIwlpc3BfaWFjYygpIC0gaGFuZGxlIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKKyMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IG51bWJlciBvZiBieXRlcyByZWxhdGVkIHRvIGVmZmVjdGl2ZSBhZGRyZXNzICh3LGwpCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKKyMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCisjCQlkMCA9IEZTTFcJCQkJCQkjCisjCWVsc2lmIGV4aXRpbmcgdGhvdWdoIGlzcF9pYWNjLi4uCQkJCSMKKyMJCW5vbmUJCQkJCQkJIworIwllbHNlCQkJCQkJCQkjCisjCQlhMCA9IGVmZmVjdGl2ZSBhZGRyZXNzCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgZWZmZWN0aXZlIGFkZHJlc3MgdHlwZSBpcyBkZWNvZGVkIGZyb20gdGhlIG9wd29yZCByZXNpZGluZwkjCisjIG9uIHRoZSBzdGFjay4gQSBqdW1wIHRhYmxlIGlzIHVzZWQgdG8gdmVjdG9yIHRvIGEgcm91dGluZSBmb3IgdGhlCSMKKyMgYXBwcm9wcmlhdGUgbW9kZS4gU2luY2Ugbm9uZSBvZiB0aGUgZW11bGF0ZWQgaW50ZWdlciBpbnN0cnVjdGlvbnMJIworIyB1c2VzIGJ5dGUtc2l6ZWQgb3BlcmFuZHMsIG9ubHkgaGFuZGxlIHdvcmQgYW5kIGxvbmcgb3BlcmF0aW9ucy4JIworIwkJCQkJCQkJCSMKKyMJRG4sQW4JLSBzaG91bGRuJ3QgZW50ZXIgaGVyZQkJCQkJIworIwkoQW4pCS0gZmV0Y2ggQW4gdmFsdWUgZnJvbSBzdGFjawkJCQkjCisjCS0oQW4pCS0gZmV0Y2ggQW4gdmFsdWUgZnJvbSBzdGFjazsgcmV0dXJuIGRlY3IgdmFsdWU7CQkjCisjCQkgIHBsYWNlIGRlY3IgdmFsdWUgb24gc3RhY2s7IHN0b3JlIG9sZCB2YWx1ZSBpbiBjYXNlIG9mCSMKKyMJCSAgZnV0dXJlIGFjY2VzcyBlcnJvcjsgaWYgLShhNyksIHNldCBtZGE3X2ZsZyBpbgkjCisjCQkgIFNQQ09ORF9GTEcJCQkJCQkjCisjCShBbikrCS0gZmV0Y2ggQW4gdmFsdWUgZnJvbSBzdGFjazsgcmV0dXJuIHZhbHVlOwkJIworIwkJICBwbGFjZSBpbmNyIHZhbHVlIG9uIHN0YWNrOyBzdG9yZSBvbGQgdmFsdWUgaW4gY2FzZSBvZgkjCisjCQkgIGZ1dHVyZSBhY2Nlc3MgZXJyb3I7IGlmIChhNykrLCBzZXQgbWlhN19mbGcgaW4JIworIwkJICBTUENPTkRfRkxHCQkJCQkJIworIwkoZDE2LEFuKSAtIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2s7IHJlYWQgZDE2IHVzaW5nCQkjCisjCQkgIF9pbWVtX3JlYWRfd29yZCgpOyBmZXRjaCBtYXkgZmFpbCAtPiBicmFuY2ggdG8JIworIwkJICBpc3BfaWFjYygpCQkJCQkJIworIwkoeHh4KS53LCh4eHgpLmwgLSB1c2UgX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIHRvIGZldGNoCQkjCisjCQkgIGFkZHJlc3M7IGZldGNoIG1heSBmYWlsCQkJCSMKKyMJIzxkYXRhPiAtIHJldHVybiBhZGRyZXNzIG9mIGltbWVkaWF0ZSB2YWx1ZTsgc2V0IGltbWVkX2ZsZwkjCisjCQkgIGluIFNQQ09ORF9GTEcJCQkJCQkjCisjCShkMTYsUEMpIC0gZmV0Y2ggc3RhY2tlZCBQQyB2YWx1ZTsgcmVhZCBkMTYgdXNpbmcJCSMKKyMJCSAgX2ltZW1fcmVhZF93b3JkKCk7IGZldGNoIG1heSBmYWlsIC0+IGJyYW5jaCB0bwkjCisjCQkgIGlzcF9pYWNjKCkJCQkJCQkjCisjCWV2ZXJ5dGhpbmcgZWxzZSAtIHJlYWQgbmVlZGVkIGRpc3BsYWNlbWVudHMgYXMgYXBwcm9wcmlhdGUgdy8JIworIwkJICBfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCk7IHJlYWQgbWF5IGZhaWw7IGlmIG1lbW9yeQkjCisjCQkgIGluZGlyZWN0LCByZWFkIGluZGlyZWN0IGFkZHJlc3MgdXNpbmcJCQkjCisjCQkgIF9kbWVtX3JlYWRfbG9uZygpIHdoaWNoIG1heSBhbHNvIGZhaWwJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfY2FsY19lYQorX2NhbGNfZWE6CisJbW92LmwJCSVkMCwlYTAJCQkjIG1vdmUgIyBieXRlcyB0byBhMAorCisjIE1PREUgYW5kIFJFRyBhcmUgdGFrZW4gZnJvbSB0aGUgRVhDX09QV09SRC4KKwltb3YudwkJRVhDX09QV09SRCglYTYpLCVkMAkjIGZldGNoIG9wY29kZSB3b3JkCisJbW92LncJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CisKKwlhbmRpLncJCSYweDNmLCVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwlhbmRpLmwJCSYweDcsJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAorCisjIGp1bXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gZm9yIGVhY2gge01PREUsUkVHfSBwYWlyLgorCW1vdi53CQkodGJsX2VhX21vZGUuYiwlcGMsJWQwLncqMiksICVkMCAjIGZldGNoIGptcCBkaXN0YW5jZQorCWptcAkJKHRibF9lYV9tb2RlLmIsJXBjLCVkMC53KjEpICMgam1wIHRvIGNvcnJlY3QgZWEgbW9kZQorCisJc3diZWcJCSY2NAordGJsX2VhX21vZGU6CisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCisJc2hvcnQJCWFkZHJfaW5kX2EwCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfYTEJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9hMgktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2EzCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfYTQJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9hNQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2E2CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfYTcJLQl0YmxfZWFfbW9kZQorCisJc2hvcnQJCWFkZHJfaW5kX3BfYTAJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9wX2ExCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfcF9hMgktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX3BfYTMJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9wX2E0CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfcF9hNQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX3BfYTYJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9wX2E3CS0JdGJsX2VhX21vZGUKKworCXNob3J0CQlhZGRyX2luZF9tX2EwCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX21fYTEJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfbV9hMgkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9tX2EzCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX21fYTQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfbV9hNQkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9tX2E2CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX21fYTcJCS0JdGJsX2VhX21vZGUKKworCXNob3J0CQlhZGRyX2luZF9kaXNwX2EwCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hMQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTIJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9kaXNwX2EzCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hNAktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9kaXNwX2E2CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hNwktCXRibF9lYV9tb2RlCisKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCisKKwlzaG9ydAkJYWJzX3Nob3J0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFic19sb25nCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXBjX2luZAkJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJcGNfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlpbW1lZGlhdGUJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJCS0JdGJsX2VhX21vZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdDogKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkcl9pbmRfYTA6CisJbW92LmwJCUVYQ19BMCglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhMAorCXJ0cworCithZGRyX2luZF9hMToKKwltb3YubAkJRVhDX0ExKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGExCisJcnRzCisKK2FkZHJfaW5kX2EyOgorCW1vdi5sCQlFWENfQTIoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTIKKwlydHMKKworYWRkcl9pbmRfYTM6CisJbW92LmwJCUVYQ19BMyglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhMworCXJ0cworCithZGRyX2luZF9hNDoKKwltb3YubAkJRVhDX0E0KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE0CisJcnRzCisKK2FkZHJfaW5kX2E1OgorCW1vdi5sCQlFWENfQTUoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTUKKwlydHMKKworYWRkcl9pbmRfYTY6CisJbW92LmwJCUVYQ19BNiglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNgorCXJ0cworCithZGRyX2luZF9hNzoKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcG9zdGluY3JlbWVudDogKEFuKSsgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZHJfaW5kX3BfYTA6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BMCglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTAoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4MCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTE6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BMSglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTEoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4MSxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTI6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BMiglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTIoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4MixFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTM6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BMyglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTMoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4MyxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTQ6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BNCglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTQoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4NCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTU6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BNSglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTUoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4NSxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTY6CisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BNiglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTYoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisKKwltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwltb3YuYgkJJjB4NixFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX3BfYTc6CisJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZworCisJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKKwlhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTcoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBwcmVkZWNyZW1lbnQ6IC0oQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZHJfaW5kX21fYTA6CisJbW92LmwJCUVYQ19BMCglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMAorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BMCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4MCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTE6CisJbW92LmwJCUVYQ19BMSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMQorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BMSglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4MSxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTI6CisJbW92LmwJCUVYQ19BMiglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMgorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BMiglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4MixFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTM6CisJbW92LmwJCUVYQ19BMyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMworCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BMyglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4MyxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTQ6CisJbW92LmwJCUVYQ19BNCglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNAorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BNCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4NCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTU6CisJbW92LmwJCUVYQ19BNSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNQorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BNSglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4NSxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTY6CisJbW92LmwJCUVYQ19BNiglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgorCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BNiglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisKKwltb3YuYgkJJjB4NixFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KKwltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCisJcnRzCisKK2FkZHJfaW5kX21fYTc6CisJbW92LmIJCSZtZGE3X2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZworCisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNworCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19BNyglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gZGlzcGxhY2VtZW50OiAoZDE2LCBBbikgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZHJfaW5kX2Rpc3BfYTA6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTAoJWE2KSwlYTAJCSMgYTAgKyBkMTYKKwlydHMKKworYWRkcl9pbmRfZGlzcF9hMToKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCUVYQ19BMSglYTYpLCVhMAkJIyBhMSArIGQxNgorCXJ0cworCithZGRyX2luZF9kaXNwX2EyOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJRVhDX0EyKCVhNiksJWEwCQkjIGEyICsgZDE2CisJcnRzCisKK2FkZHJfaW5kX2Rpc3BfYTM6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTMoJWE2KSwlYTAJCSMgYTMgKyBkMTYKKwlydHMKKworYWRkcl9pbmRfZGlzcF9hNDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCUVYQ19BNCglYTYpLCVhMAkJIyBhNCArIGQxNgorCXJ0cworCithZGRyX2luZF9kaXNwX2E1OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJRVhDX0E1KCVhNiksJWEwCQkjIGE1ICsgZDE2CisJcnRzCisKK2FkZHJfaW5kX2Rpc3BfYTY6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTYoJWE2KSwlYTAJCSMgYTYgKyBkMTYKKwlydHMKKworYWRkcl9pbmRfZGlzcF9hNzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCUVYQ19BNyglYTYpLCVhMAkJIyBhNyArIGQxNgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBpbmRleCg4LWJpdCBkaXNwbGFjZW1lbnQpOiAoZG4sIEFuLCBYbikgIworIyAgICAiICAgICAgICIgICAgICAgICAiICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBBbiwgWG4pICAjCisjIE1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgQW5dLCBYbiwgb2QpCQkgICAgICAgIworIyBNZW1vcnkgaW5kaXJlY3QgcHJlaW5kZXhlZDogKFtiZCwgQW4sIFhuXSwgb2QpCQkgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitfYWRkcl9pbmRfZXh0OgorCW1vdi5sCQklZDEsLSglc3ApCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0d29yZCBpbiBkMAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQkoJXNwKSssJWQxCisKKwltb3YubAkJKEVYQ19BUkVHUywlYTYsJWQxLncqNCksJWEwICMgcHV0IGJhc2UgaW4gYTAKKworCWJ0c3QJCSYweDgsJWQwCisJYmVxLmIJCWFkZHJfaW5kX2luZGV4XzhiaXQJIyBmb3IgZXh0IHdvcmQgb3Igbm90PworCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisKKwltb3YubAkJJWQwLCVkNQkJCSMgcHV0IGV4dHdvcmQgaW4gZDUKKwltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKKworCWJyYS5sCQljYWxjX21lbV9pbmQJCSMgY2FsYyBtZW1vcnkgaW5kaXJlY3QKKworYWRkcl9pbmRfaW5kZXhfOGJpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIG9sZCBkMgorCisJbW92LmwJCSVkMCwlZDEKKwlyb2wudwkJJjB4NCwlZDEKKwlhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgaW5kZXggcmVnbm8KKworCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwlZDEgIyBmZXRjaCBpbmRleCByZWcgdmFsdWUKKworCWJ0c3QJCSYweGIsJWQwCQkjIGlzIGl0IHdvcmQgb3IgbG9uZz8KKwlibmUuYgkJYWlpOF9sb25nCisJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleAorYWlpOF9sb25nOgorCW1vdi5sCQklZDAsJWQyCisJcm9sLncJCSYweDcsJWQyCisJYW5kaS5sCQkmMHgzLCVkMgkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCisKKwlsc2wubAkJJWQyLCVkMQkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKKworCWV4dGIubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJJWQxLCVkMAkJCSMgaW5kZXggKyBkaXNwCisJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgb2xkIGQyCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW1tZWRpYXRlOiAjPGRhdGE+ICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgd29yZCwgbG9uZzogPGVhPiBvZiB0aGUgZGF0YSBpcyB0aGUgY3VycmVudCBleHRlbnNpb24gd29yZAkJIworIwlwb2ludGVyIHZhbHVlLiBuZXcgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlciBpcyBzaW1wbHkgdGhlIG9sZAkjCisjCXBsdXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSB0eXBlKDIgb3IgNCkuCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpbW1lZGlhdGU6CisJbW92LmIJCSZpbW1lZF9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGltbWVkaWF0ZSBmbGFnCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBleHRlbnNpb24gd29yZCBwdHIKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIHNob3J0OiAoWFhYKS5XICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWJzX3Nob3J0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzaG9ydCBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIGxvbmc6IChYWFgpLkwgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Fic19sb25nOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBsb25nIGFkZHJlc3MKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLCVhMAkJCSMgcmV0dXJuIDxlYT4gaW4gYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQcm9ncmFtIGNvdW50ZXIgaW5kaXJlY3Qgdy8gZGlzcGxhY2VtZW50OiAoZDE2LCBQQykgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcGNfaW5kOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCB3b3JkIGRpc3BsYWNlbWVudAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBjICsgZDE2CisKKyMgX2ltZW1fcmVhZF93b3JkKCkgaW5jcmVhc2VkIHRoZSBleHR3cHRyIGJ5IDIuIG5lZWQgdG8gYWRqdXN0IGhlcmUuCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgPGVhPgorCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEMgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBQQywgQW4pICMKKyMgIiAgICAgIiAgICAgdy8gICAiICAoYmFzZSBkaXNwbGFjZW1lbnQpOiAoYmQsIFBDLCBBbikgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBQQ10sIFhuLCBvZCkgICAgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIFBDLCBYbl0sIG9kKSAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3BjX2luZF9leHQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIGV4dCB3b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcHV0IGJhc2UgaW4gYTAKKwlzdWJxLmwJCSYweDIsJWEwCQkjIGFkanVzdCBiYXNlCisKKwlidHN0CQkmMHg4LCVkMAkJIyBpcyBkaXNwIG9ubHkgOCBiaXRzPworCWJlcS5iCQlwY19pbmRfaW5kZXhfOGJpdAkjIHllcworCisjIHRoZSBpbmRleGVkIGFkZHJlc3NpbmcgbW9kZSB1c2VzIGEgYmFzZSBkaXNwbGFjZW1lbnQgb2Ygc2l6ZQorIyB3b3JkIG9yIGxvbmcKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKworCW1vdi5sCQklZDAsJWQ1CQkJIyBwdXQgZXh0d29yZCBpbiBkNQorCW1vdi5sCQklYTAsJWQzCQkJIyBwdXQgYmFzZSBpbiBkMworCisJYnJhLmwJCWNhbGNfbWVtX2luZAkJIyBjYWxjIG1lbW9yeSBpbmRpcmVjdAorCitwY19pbmRfaW5kZXhfOGJpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBjcmVhdGUgYSB0ZW1wIHJlZ2lzdGVyCisKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBleHR3b3JkIGNvcHkKKwlyb2wudwkJJjB4NCwlZDEJCSMgcm90YXRlIHJlZyBudW0gaW50byBwbGFjZQorCWFuZGkudwkJJjB4ZiwlZDEJCSMgZXh0cmFjdCByZWdpc3RlciBudW1iZXIKKworCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwlZDEgIyBmZXRjaCBpbmRleCByZWcgdmFsdWUKKworCWJ0c3QJCSYweGIsJWQwCQkjIGlzIGluZGV4IHdvcmQgb3IgbG9uZz8KKwlibmUuYgkJcGlpOF9sb25nCQkjIGxvbmcKKwlleHQubAkJJWQxCQkJIyBzaWduIGV4dGVuZCB3b3JkIGluZGV4CitwaWk4X2xvbmc6CisJbW92LmwJCSVkMCwlZDIJCQkjIG1ha2UgZXh0d29yZCBjb3B5CisJcm9sLncJCSYweDcsJWQyCQkjIHJvdGF0ZSBzY2FsZSB2YWx1ZSBpbnRvIHBsYWNlCisJYW5kaS5sCQkmMHgzLCVkMgkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCisKKwlsc2wubAkJJWQyLCVkMQkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKKworCWV4dGIubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJJWQxLCVkMAkJCSMgaW5kZXggKyBkaXNwCisJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgorCisJcnRzCisKKyMgYTUgPSBleGNfZXh0d3B0cgkoZ2xvYmFsIHRvIHVhZWgpCisjIGE0ID0gZXhjX29wd29yZAkoZ2xvYmFsIHRvIHVhZWgpCisjIGEzID0gZXhjX2RyZWdzCShnbG9iYWwgdG8gdWFlaCkKKworIyBkMiA9IGluZGV4CQkoaW50ZXJuYWwgIiAgICAgIiAgICApCisjIGQzID0gYmFzZQkJKGludGVybmFsICIgICAgICIgICAgKQorIyBkNCA9IG9kCQkoaW50ZXJuYWwgIiAgICAgIiAgICApCisjIGQ1ID0gZXh0d29yZAkJKGludGVybmFsICIgICAgICIgICAgKQorY2FsY19tZW1faW5kOgorCWJ0c3QJCSYweDYsJWQ1CQkjIGlzIHRoZSBpbmRleCBzdXBwcmVzc2VkPworCWJlcS5iCQljYWxjX2luZGV4CisJY2xyLmwJCSVkMgkJCSMgeWVzLCBzbyBpbmRleCA9IDAKKwlicmEuYgkJYmFzZV9zdXBwX2NrCitjYWxjX2luZGV4OgorCWJmZXh0dQkJJWQ1eyYxNjomNH0sJWQyCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMi53KjQpLCVkMgorCWJ0c3QJCSYweGIsJWQ1CQkjIGlzIGluZGV4IHdvcmQgb3IgbG9uZz8KKwlibmUuYgkJbm9fZXh0CisJZXh0LmwJCSVkMgorbm9fZXh0OgorCWJmZXh0dQkJJWQ1eyYyMTomMn0sJWQwCisJbHNsLmwJCSVkMCwlZDIKK2Jhc2Vfc3VwcF9jazoKKwlidHN0CQkmMHg3LCVkNQkJIyBpcyB0aGUgYmQgc3VwcHJlc3NlZD8KKwliZXEuYgkJbm9fYmFzZV9zdXAKKwljbHIubAkJJWQzCitub19iYXNlX3N1cDoKKwliZmV4dHUJCSVkNXsmMjY6JjJ9LCVkMAkjIGdldCBiZCBzaXplCisjCWJlcS5sCQlfZXJyb3IJCQkjIGlmIChzaXplID09IDApIGl0J3MgcmVzZXJ2ZWQKKwljbXBpLmIJCSVkMCwmMgorCWJsdC5iCQlub19iZAorCWJlcS5iCQlnZXRfd29yZF9iZAorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJYnJhLmIJCWNoa19pbmQKK2dldF93b3JkX2JkOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGJkCisKK2Noa19pbmQ6CisJYWRkLmwJCSVkMCwlZDMJCQkjIGJhc2UgKz0gYmQKK25vX2JkOgorCWJmZXh0dQkJJWQ1eyYzMDomMn0sJWQwCQkjIGlzIG9kIHN1cHByZXNzZWQ/CisJYmVxLncJCWFpaV9iZAorCWNtcGkuYgkJJWQwLCYweDIKKwlibHQuYgkJbnVsbF9vZAorCWJlcS5iCQl3b3JkX29kCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwlicmEuYgkJYWRkX3RoZW0KKword29yZF9vZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBvZAorCWJyYS5iCQlhZGRfdGhlbQorCitudWxsX29kOgorCWNsci5sCQklZDAKK2FkZF90aGVtOgorCW1vdi5sCQklZDAsJWQ0CisJYnRzdAkJJjB4MiwlZDUJCSMgcHJlIG9yIHBvc3QgaW5kZXhpbmc/CisJYmVxLmIJCXByZV9pbmRleGVkCisKKwltb3YubAkJJWQzLCVhMAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUuYgkJY2FsY19lYV9lcnIJCSMgeWVzCisKKwlhZGQubAkJJWQyLCVkMAkJCSMgPGVhPiArPSBpbmRleAorCWFkZC5sCQklZDQsJWQwCQkJIyA8ZWE+ICs9IG9kCisJYnJhLmIJCWRvbmVfZWEKKworcHJlX2luZGV4ZWQ6CisJYWRkLmwJCSVkMiwlZDMJCQkjIHByZWluZGV4aW5nCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmIJCWNhbGNfZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkNCwlZDAJCQkjIGVhICs9IG9kCisJYnJhLmIJCWRvbmVfZWEKKworYWlpX2JkOgorCWFkZC5sCQklZDIsJWQzCQkJIyBlYSA9IChiYXNlICsgYmQpICsgaW5kZXgKKwltb3YubAkJJWQzLCVkMAorZG9uZV9lYToKKwltb3YubAkJJWQwLCVhMAorCisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJcnRzCisKKyMgaWYgZG1lbV9yZWFkX2xvbmcoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQorIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CisjIGFuZCB0aGUgZmFpbGluZyBhZGRyZXNzIHRvIHRoZSByb3V0aW5lIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGZyYW1lLgorIyBGU0xXOgorIwlyZWFkID0gdHJ1ZQorIwlzaXplID0gbG9uZ3dvcmQKKyMJVE0gPSBkYXRhCisjCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKK2NhbGNfZWFfZXJyOgorCW1vdi5sCQklZDMsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMTAxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJX21vdmVwZXJpcGhlcmFsKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBtb3ZlcCBpbnN0cnVjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJX2RtZW1fcmVhZF9ieXRlKCkgLSByZWFkIGJ5dGUgZnJvbSBtZW1vcnkJCQkjCisjCV9kbWVtX3dyaXRlX2J5dGUoKSAtIHdyaXRlIGJ5dGUgdG8gbWVtb3J5CQkJIworIwlpc3BfZGFjYygpIC0gaGFuZGxlIGRhdGEgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCUlmIGV4aXRpbmcgdGhyb3VnaCBpc3BfZGFjYy4uLgkJCQkJIworIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJZWxzZQkJCQkJCQkJIworIwkJbm9uZQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlEZWNvZGUgdGhlIG1vdmVwIGluc3RydWN0aW9uIHdvcmRzIHN0b3JlZCBhdCBFWENfT1BXT1JEIGFuZAkjCisjIGVpdGhlciByZWFkIG9yIHdyaXRlIHRoZSByZXF1aXJlZCBieXRlcyBmcm9tL3RvIG1lbW9yeS4gVXNlIHRoZQkjCisjIF9kbWVtX3tyZWFkLHdyaXRlfV9ieXRlKCkgcm91dGluZXMuIElmIG9uZSBvZiB0aGUgbWVtb3J5IHJvdXRpbmVzCSMKKyMgcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHdlIG11c3QgcGFzcyB0aGUgZmFpbGluZyBhZGRyZXNzIGFuZAlhIEZTTFcJIworIyB0byB0aGUgX2lzcF9kYWNjKCkgcm91dGluZS4JCQkJCQkjCisjCVNpbmNlIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgdXNlZCB0byBhY2Nlc3MgcGVyaXBoZXJhbHMsIG1ha2Ugc3VyZQkjCisjIHRvIG9ubHkgYWNjZXNzIHRoZSByZXF1aXJlZCBieXRlcy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC4odyxsKQlEeCwoZCxBeSkgIworIyBtb3ZlcC4odyxsKQkoZCxBeSksRHggIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfbW92ZXBlcmlwaGVyYWwKK19tb3ZlcGVyaXBoZXJhbDoKKwltb3YudwkJRVhDX09QV09SRCglYTYpLCVkMQkjIGZldGNoIHRoZSBvcGNvZGUgd29yZAorCisJbW92LmIJCSVkMSwlZDAKKwlhbmQudwkJJjB4NywlZDAJCSMgZXh0cmFjdCBBeSBmcm9tIG9wY29kZSB3b3JkCisKKwltb3YubAkJKEVYQ19BUkVHUywlYTYsJWQwLncqNCksJWEwICMgZmV0Y2ggYXkKKworCWFkZC53CQlFWENfRVhUV09SRCglYTYpLCVhMAkjIGFkZDogYW4gKyBzZ25fZXh0KGRpc3ApCisKKwlidHN0CQkmMHg3LCVkMQkJIyAocmVnIDIgbWVtKSBvciAobWVtIDIgcmVnKQorCWJlcS53CQltZW0ycmVnCisKKyMgcmVnMm1lbTogZmV0Y2ggZHgsIHRoZW4gd3JpdGUgaXQgdG8gbWVtb3J5CityZWcybWVtOgorCW1vdi53CQklZDEsJWQwCisJcm9sLncJCSYweDcsJWQwCisJYW5kLncJCSYweDcsJWQwCQkjIGV4dHJhY3QgRHggZnJvbSBvcGNvZGUgd29yZAorCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCAlZDAgIyBmZXRjaCBkeAorCisJYnRzdAkJJjB4NiwlZDEJCSMgd29yZCBvciBsb25nIG9wZXJhdGlvbj8KKwliZXEuYgkJcjJtd3RyYW5zCisKKyMgYTAgPSBkc3QgYWRkcgorIyBkMCA9IER4CityMm1sdHJhbnM6CisJbW92LmwJCSVkMCwlZDIJCQkjIHN0b3JlIGRhdGEKKwltb3YubAkJJWEwLCVhMgkJCSMgc3RvcmUgYWRkcgorCXJvbC5sCQkmMHg4LCVkMgorCW1vdi5sCQklZDIsJWQwCisKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGhpCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcworCisJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkcgorCW1vdi5sCQklYTIsJWEwCisJcm9sLmwJCSYweDgsJWQyCisJbW92LmwJCSVkMiwlZDAKKworCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgb3MgIDogd3JpdGUgbG8KKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF93cml0ZV9lcnIJCSMgeWVzCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyCisJbW92LmwJCSVhMiwlYTAKKwlyb2wubAkJJjB4OCwlZDIKKwltb3YubAkJJWQyLCVkMAorCisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBsbworCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKKworCWFkZC53CQkmMHgyLCVhMgkJIyBpbmNyIGFkZHIKKwltb3YubAkJJWEyLCVhMAorCXJvbC5sCQkmMHg4LCVkMgorCW1vdi5sCQklZDIsJWQwCisKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGxvCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcworCisJcnRzCisKKyMgYTAgPSBkc3QgYWRkcgorIyBkMCA9IER4CityMm13dHJhbnM6CisJbW92LmwJCSVkMCwlZDIJCQkjIHN0b3JlIGRhdGEKKwltb3YubAkJJWEwLCVhMgkJCSMgc3RvcmUgYWRkcgorCWxzci53CQkmMHg4LCVkMAorCisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBoaQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKKworCWFkZC53CQkmMHgyLCVhMgorCW1vdi5sCQklYTIsJWEwCisJbW92LmwJCSVkMiwlZDAKKworCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgb3MgIDogd3JpdGUgbG8KKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF93cml0ZV9lcnIJCSMgeWVzCisKKwlydHMKKworIyBtZW0ycmVnOiByZWFkIGJ5dGVzIGZyb20gbWVtb3J5LgorIyBkZXRlcm1pbmVzIHRoZSBkZXN0IHJlZ2lzdGVyLCBhbmQgdGhlbiB3cml0ZXMgdGhlIGJ5dGVzIGludG8gaXQuCittZW0ycmVnOgorCWJ0c3QJCSYweDYsJWQxCQkjIHdvcmQgb3IgbG9uZyBvcGVyYXRpb24/CisJYmVxLmIJCW0ycnd0cmFucworCisjIGEwID0gZHN0IGFkZHIKK20ycmx0cmFuczoKKwltb3YubAkJJWEwLCVhMgkJCSMgc3RvcmUgYWRkcgorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIGZpcnN0IGJ5dGUKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF9yZWFkX2VycgkJIyB5ZXMKKworCW1vdi5sCQklZDAsJWQyCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKKwltb3YubAkJJWEyLCVhMAorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCisKKwlsc2wudwkJJjB4OCwlZDIKKwltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKKwltb3YubAkJJWEyLCVhMAorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCisKKwlsc2wubAkJJjB4OCwlZDIKKwltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKKwltb3YubAkJJWEyLCVhMAorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCisKKwlsc2wubAkJJjB4OCwlZDIKKwltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCisKKwltb3YuYgkJRVhDX09QV09SRCglYTYpLCVkMQorCWxzci5iCQkmMHgxLCVkMQorCWFuZC53CQkmMHg3LCVkMQkJIyBleHRyYWN0IER4IGZyb20gb3Bjb2RlIHdvcmQKKworCW1vdi5sCQklZDIsKEVYQ19EUkVHUywlYTYsJWQxLncqNCkgIyBzdG9yZSBkeAorCisJcnRzCisKKyMgYTAgPSBkc3QgYWRkcgorbTJyd3RyYW5zOgorCW1vdi5sCQklYTAsJWEyCQkJIyBzdG9yZSBhZGRyCisKKwlic3IubAkJX2RtZW1fcmVhZF9ieXRlCQkjIHJlYWQgZmlyc3QgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3JlYWRfZXJyCQkjIHllcworCisJbW92LmwJCSVkMCwlZDIKKworCWFkZC53CQkmMHgyLCVhMgkJIyBpbmNyIGFkZHIgYnkgMiBieXRlcworCW1vdi5sCQklYTIsJWEwCisKKwlic3IubAkJX2RtZW1fcmVhZF9ieXRlCQkjIHJlYWQgc2Vjb25kIGJ5dGUKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF9yZWFkX2VycgkJIyB5ZXMKKworCWxzbC53CQkmMHg4LCVkMgorCW1vdi5iCQklZDAsJWQyCQkJIyBhcHBlbmQgYnl0ZXMKKworCW1vdi5iCQlFWENfT1BXT1JEKCVhNiksJWQxCisJbHNyLmIJCSYweDEsJWQxCisJYW5kLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRHggZnJvbSBvcGNvZGUgd29yZAorCisJbW92LncJCSVkMiwoRVhDX0RSRUdTKzIsJWE2LCVkMS53KjQpICMgc3RvcmUgZHgKKworCXJ0cworCisjIGlmIGRtZW1fe3JlYWQsd3JpdGV9X2J5dGUoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQorIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CisjIGFuZCB0aGUgZmFpbGluZyBhZGRyZXNzIHRvIHRoZSByb3V0aW5lIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGZyYW1lLgorIyBGU0xXOgorIwl3cml0ZSA9IHRydWUKKyMJc2l6ZSA9IGJ5dGUKKyMJVE0gPSBkYXRhCisjCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKK21vdnBfd3JpdGVfZXJyOgorCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMGExMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IGJ5dGUKKyMJVE0gPSBkYXRhCisjCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKK21vdnBfcmVhZF9lcnI6CisJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCisJbW92LmwJCSYweDAxMjEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKKwlicmEubAkJaXNwX2RhY2MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfY2hrMl9jbXAyKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBjaGsyL2NtcDIgaW5zdHJ1Y3Rpb25zCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfY2FsY19lYSgpOiBjYWxjdWxhdGUgZWZmZWN0aXZlIGFkZHJlc3MJCQkJIworIwlfZG1lbV9yZWFkX2xvbmcoKTogcmVhZCBvcGVyYW5kcwkJCQkjCisjCV9kbWVtX3JlYWRfd29yZCgpOiByZWFkIG9wZXJhbmRzCQkJCSMKKyMJaXNwX2RhY2MoKTogaGFuZGxlIGRhdGEgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIGV4aXRpbmcgdGhyb3VnaCBpc3BfZGFjYy4uLgkJCQkJIworIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJZWxzZQkJCQkJCQkJIworIwkJbm9uZQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGaXJzdCwgY2FsY3VsYXRlIHRoZSBlZmZlY3RpdmUgYWRkcmVzcywgdGhlbiBmZXRjaCB0aGUgYnl0ZSwJIworIyB3b3JkLCBvciBsb25nd29yZCBzaXplZCBvcGVyYW5kcy4gVGhlbiwgaW4gdGhlIGludGVyZXN0IG9mCQkjCisjIHNpbXBsaWNpdHksIGFsbCBvcGVyYW5kcyBhcmUgY29udmVydGVkIHRvIGxvbmd3b3JkIHNpemUgd2hldGhlciB0aGUJIworIyBvcGVyYXRpb24gaXMgYnl0ZSwgd29yZCwgb3IgbG9uZy4gVGhlIGJvdW5kcyBhcmUgc2lnbiBleHRlbmRlZAkjCisjIGFjY29yZGluZ2x5LiBJZiBSbiBpcyBhIGRhdGEgcmVnc2l0ZXIsIFJuIGlzIGFsc28gc2lnbiBleHRlbmRlZC4gSWYJIworIyBSbiBpcyBhbiBhZGRyZXNzIHJlZ2lzdGVyLCBpdCBuZWVkIG5vdCBiZSBzaWduIGV4dGVuZGVkIHNpbmNlIHRoZQkjCisjIGZ1bGwgcmVnaXN0ZXIgaXMgYWx3YXlzIHVzZWQuCQkJCQkJIworIwlUaGUgY29tcGFyaXNvbnMgYXJlIG1hZGUgYW5kIHRoZSBjb25kaXRpb24gY29kZXMgY2FsY3VsYXRlZC4JIworIyBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2hrMiBhbmQgdGhlIFJuIHZhbHVlIGlzIG91dC1vZi1ib3VuZHMsIHNldAkjCisjIHRoZSBpY2hrX2ZsZyBpbiBTUENPTkRfRkxHLgkJCQkJCSMKKyMJSWYgdGhlIG1lbW9yeSBmZXRjaCByZXR1cm5zIGEgZmFpbGluZyB2YWx1ZSwgcGFzcyB0aGUgZmFpbGluZwkjCisjIGFkZHJlc3MgYW5kIEZTTFcgdG8gdGhlIGlzcF9kYWNjKCkgcm91dGluZS4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2NoazJfY21wMgorX2NoazJfY21wMjoKKworIyBwYXNzaW5nIHNpemUgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIGNoazIgJiBjbXAyIGNhbid0IGRvCisjIGVpdGhlciBwcmVkZWNyZW1lbnQsIHBvc3RpbmNyZW1lbnQsIG9yIGltbWVkaWF0ZS4KKwlic3IubAkJX2NhbGNfZWEJCSMgY2FsY3VsYXRlIDxlYT4KKworCW1vdi5iCQlFWENfRVhUV09SRCglYTYpLCAlZDAJIyBmZXRjaCBoaSBleHRlbnNpb24gd29yZAorCXJvbC5iCQkmMHg0LCAlZDAJCSMgcm90YXRlIHJlZyBiaXRzIGludG8gbG8KKwlhbmQudwkJJjB4ZiwgJWQwCQkjIGV4dHJhY3QgcmVnIGJpdHMKKworCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwgJWQyICMgZ2V0IHJlZ3ZhbAorCisJY21waS5iCQlFWENfT1BXT1JEKCVhNiksICYweDIJIyB3aGF0IHNpemUgaXMgb3BlcmF0aW9uPworCWJsdC5iCQljaGsyX2NtcDJfYnl0ZQkJIyBzaXplID09IGJ5dGUKKwliZXEuYgkJY2hrMl9jbXAyX3dvcmQJCSMgc2l6ZSA9PSB3b3JkCisKKyMgdGhlIGJvdW5kcyBhcmUgbG9uZ3dvcmQgc2l6ZS4gY2FsbCByb3V0aW5lIHRvIHJlYWQgdGhlIGxvd2VyCisjIGJvdW5kIGludG8gZDAgYW5kIHRoZSBoaWdoZXIgYm91bmQgaW50byBkMS4KK2NoazJfY21wMl9sb25nOgorCW1vdi5sCQklYTAsJWEyCQkJIyBzYXZlIGNvcHkgb2YgPGVhPgorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyBsb3dlciBib3VuZAorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQljaGsyX2NtcDJfZXJyX2wJCSMgeWVzCisKKwltb3YubAkJJWQwLCVkMwkJCSMgc2F2ZSBsb25nIGxvd2VyIGJvdW5kCisJYWRkcS5sCQkmMHg0LCVhMgorCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIDxlYT4gb2YgbG9uZyB1cHBlciBib3VuZAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyB1cHBlciBib3VuZAorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQljaGsyX2NtcDJfZXJyX2wJCSMgeWVzCisKKwltb3YubAkJJWQwLCVkMQkJCSMgbG9uZyB1cHBlciBib3VuZCBpbiBkMQorCW1vdi5sCQklZDMsJWQwCQkJIyBsb25nIGxvd2VyIGJvdW5kIGluIGQwCisJYnJhLncJCWNoazJfY21wMl9jb21wYXJlCSMgZ28gZG8gdGhlIGNvbXBhcmUgZW11bGF0aW9uCisKKyMgdGhlIGJvdW5kcyBhcmUgd29yZCBzaXplLiBmZXRjaCB0aGVtIGluIG9uZSBzdWJyb3V0aW5lIGNhbGwgYnkKKyMgcmVhZGluZyBhIGxvbmd3b3JkLiBzaWduIGV4dGVuZCBib3RoLiBpZiBpdCdzIGEgZGF0YSBvcGVyYXRpb24sCisjIHNpZ24gZXh0ZW5kIFJuIHRvIGxvbmcsIGFsc28uCitjaGsyX2NtcDJfd29yZDoKKwltb3YubAkJJWEwLCVhMgorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggMiB3b3JkIGJvdW5kcworCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQljaGsyX2NtcDJfZXJyX2wJCSMgeWVzCisKKwltb3YudwkJJWQwLCAlZDEJCSMgcGxhY2UgaGkgaW4gJWQxCisJc3dhcAkJJWQwCQkJIyBwbGFjZSBsbyBpbiAlZDAKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dC5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCisJYnRzdAkJJjB4NywgRVhDX0VYVFdPUkQoJWE2KQkjIGFkZHJlc3MgY29tcGFyZT8KKwlibmUudwkJY2hrMl9jbXAyX2NvbXBhcmUJIyB5ZXM7IGRvbid0IHNpZ24gZXh0ZW5kCisKKyMgb3BlcmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlciBjb21wYXJlLgorIyBzaWduIGV4dGVuZCB3b3JkIHRvIGxvbmcgc28gd2UgY2FuIGRvIHNpbXBsZSBsb25nd29yZCBjb21wYXJlcy4KKwlleHQubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkYXRhIHdvcmQKKwlicmEudwkJY2hrMl9jbXAyX2NvbXBhcmUJIyBnbyBlbXVsYXRlIGNvbXBhcmUKKworIyB0aGUgYm91bmRzIGFyZSBieXRlIHNpemUuIGZldGNoIHRoZW0gaW4gb25lIHN1YnJvdXRpbmUgY2FsbCBieQorIyByZWFkaW5nIGEgd29yZC4gc2lnbiBleHRlbmQgYm90aC4gaWYgaXQncyBhIGRhdGEgb3BlcmF0aW9uLAorIyBzaWduIGV4dGVuZCBSbiB0byBsb25nLCBhbHNvLgorY2hrMl9jbXAyX2J5dGU6CisJbW92LmwJCSVhMCwlYTIKKwlic3IubAkJX2RtZW1fcmVhZF93b3JkCQkjIGZldGNoIDIgYnl0ZSBib3VuZHMKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJY2hrMl9jbXAyX2Vycl93CQkjIHllcworCisJbW92LmIJCSVkMCwgJWQxCQkjIHBsYWNlIGhpIGluICVkMQorCWxzci53CQkmMHg4LCAlZDAJCSMgcGxhY2UgbG8gaW4gJWQwCisKKwlleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCisJZXh0Yi5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCisJYnRzdAkJJjB4NywgRVhDX0VYVFdPUkQoJWE2KQkjIGFkZHJlc3MgY29tcGFyZT8KKwlibmUuYgkJY2hrMl9jbXAyX2NvbXBhcmUJIyB5ZXM7IGRvbid0IHNpZ24gZXh0ZW5kCisKKyMgb3BlcmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlciBjb21wYXJlLgorIyBzaWduIGV4dGVuZCBieXRlIHRvIGxvbmcgc28gd2UgY2FuIGRvIHNpbXBsZSBsb25nd29yZCBjb21wYXJlcy4KKwlleHRiLmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGF0YSBieXRlCisKKyMKKyMgVG8gc2V0IHRoZSBjY29kZXMgY29ycmVjdGx5OgorIwkoMSkgc2F2ZSAnWicgYml0IGZyb20gKFJuIC0gbG8pCisjCSgyKSBzYXZlICdaJyBhbmQgJ04nIGJpdHMgZnJvbSAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQorIwkoMykga2VlcCAnWCcsICdOJywgYW5kICdWJyBmcm9tIGJlZm9yZSBpbnN0cnVjdGlvbgorIwkoNCkgY29tYmluZSBjY29kZXMKKyMKK2NoazJfY21wMl9jb21wYXJlOgorCXN1Yi5sCQklZDAsICVkMgkJIyAoUm4gLSBsbykKKwltb3YudwkJJWNjLCAlZDMJCSMgZmV0Y2ggcmVzdWx0aW5nIGNjb2RlcworCWFuZGkuYgkJJjB4NCwgJWQzCQkjIGtlZXAgJ1onIGJpdAorCXN1Yi5sCQklZDAsICVkMQkJIyAoaGkgLSBsbykKKwljbXAubAkJJWQxLCVkMgkJCSMgKChoaSAtIGxvKSAtIChSbiAtIGhpKSkKKworCW1vdi53CQklY2MsICVkNAkJIyBmZXRjaCByZXN1bHRpbmcgY2NvZGVzCisJb3IuYgkJJWQ0LCAlZDMJCSMgY29tYmluZSB3LyBlYXJsaWVyIGNjb2RlcworCWFuZGkuYgkJJjB4NSwgJWQzCQkjIGtlZXAgJ1onIGFuZCAnTicKKworCW1vdi53CQlFWENfQ0MoJWE2KSwgJWQ0CSMgZmV0Y2ggb2xkIGNjb2RlcworCWFuZGkuYgkJJjB4MWEsICVkNAkJIyBrZWVwICdYJywnTicsJ1YnIGJpdHMKKwlvci5iCQklZDMsICVkNAkJIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdi53CQklZDQsIEVYQ19DQyglYTYpCSMgc2F2ZSBuZXcgY2NvZGVzCisKKwlidHN0CQkmMHgzLCBFWENfRVhUV09SRCglYTYpCSMgc2VwYXJhdGUgY2hrMixjbXAyCisJYm5lLmIJCWNoazJfZmluaXNoCQkjIGl0J3MgYSBjaGsyCisKKwlydHMKKworIyB0aGlzIGNvZGUgaGFuZGxlcyB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gY2hrMiBhbmQgY21wMi4gY2hrMiB3b3VsZAorIyBoYXZlIHRyYXBwZWQgb3V0IGlmIHRoZSB2YWx1ZSB3YXMgb3V0IG9mIGJvdW5kcy4gd2UgY2hlY2sgdGhpcyBieSBzZWVpbmcKKyMgaWYgdGhlICdOJyBiaXQgd2FzIHNldCBieSB0aGUgb3BlcmF0aW9uLgorY2hrMl9maW5pc2g6CisJYnRzdAkJJjB4MCwgJWQ0CQkjIGlzICdOJyBiaXQgc2V0PworCWJuZS5iCQljaGsyX3RyYXAJCSMgeWVzO2NoazIgc2hvdWxkIHRyYXAKKwlydHMKK2NoazJfdHJhcDoKKwltb3YuYgkJJmljaGtfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisJcnRzCisKKyMgaWYgZG1lbV9yZWFkX3tsb25nLHdvcmR9KCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKKyMgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lLiBoZXJlLCB3ZSBwYXNzIGEgc2tlbGV0b24gZnNsdworIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IGxvbmd3b3JkCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCitjaGsyX2NtcDJfZXJyX2w6CisJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCisJbW92LmwJCSYweDAxMDEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKKwlicmEubAkJaXNwX2RhY2MKKworIyBGU0xXOgorIwlyZWFkID0gdHJ1ZQorIwlzaXplID0gd29yZAorIwlUTSA9IGRhdGEKKyMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQorY2hrMl9jbXAyX2Vycl93OgorCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMTQxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2RpdjY0KCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBkaXZ7dSxzfS5sIDxlYT4sRHI6RHEJCSMKKyMJCQkJCQkJNjQvMzItPjMycjozMnEJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWEoKSAtIGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJCSMKKyMJaXNwX2lhY2MoKSAtIGhhbmRsZSBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCWlzcF9kYWNjKCkgLSBoYW5kbGUgZGF0YSBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkJIworIwlpc3BfcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBvbiBhY2Nlc3MgZXJyb3Igdy8gLSgpIG9yICgpKwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKKyMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCisjCQlkMCA9IEZTTFcJCQkJCQkjCisjCWVsc2UJCQkJCQkJCSMKKyMJCW5vbmUJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRmlyc3QsIGRlY29kZSB0aGUgb3BlcmFuZCBsb2NhdGlvbi4gSWYgaXQncyBpbiBEbiwgZmV0Y2ggZnJvbQkjCisjIHRoZSBzdGFjay4gSWYgaXQncyBpbiBtZW1vcnksIHVzZSBfY2FsY19lYSgpIHRvIGNhbGN1bGF0ZSB0aGUJCSMKKyMgZWZmZWN0aXZlIGFkZHJlc3MuIFVzZSBfZG1lbV9yZWFkX2xvbmcoKSB0byBmZXRjaCBhdCB0aGF0IGFkZHJlc3MuCSMKKyMgVW5sZXNzIHRoZSBvcGVyYW5kIGlzIGltbWVkaWF0ZSBkYXRhLiBUaGVuIHVzZSBfaW1lbV9yZWFkX2xvbmcoKS4JIworIyBTZW5kIGZhaWx1cmVzIHRvIGlzcF9kYWNjKCkgb3IgaXNwX2lhY2MoKSBhcyBhcHByb3ByaWF0ZS4JCSMKKyMJSWYgdGhlIG9wZXJhbmRzIGFyZSBzaWduZWQsIG1ha2UgdGhlbSB1bnNpZ25lZCBhbmQgc2F2ZQl0aGUJIworIyBzaWduIGluZm8gZm9yIGxhdGVyLiBTZXBhcmF0ZSBvdXQgc3BlY2lhbCBjYXNlcyBsaWtlIGRpdmlkZS1ieS16ZXJvCSMKKyMgb3IgMzItYml0IGRpdmlkZXMgaWYgcG9zc2libGUuIEVsc2UsIHVzZSBhIHNwZWNpYWwgbWF0aCBhbGdvcml0aG0JIworIyB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdC4JCQkJCQkjCisjCVJlc3RvcmUgc2lnbiBpbmZvIGlmIHNpZ25lZCBpbnN0cnVjdGlvbi4gU2V0IHRoZSBjb25kaXRpb24JIworIyBjb2Rlcy4gU2V0IGlkYnl6X2ZsZyBpbiBTUENPTkRfRkxHIGlmIGRpdmlzb3Igd2FzIHplcm8uIFN0b3JlIHRoZQkjCisjIHF1b3RpZW50IGFuZCByZW1haW5kZXIgaW4gdGhlIGFwcHJvcHJpYXRlIGRhdGEgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4jCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQJTkRJVklTT1IsCUVYQ19URU1QKzB4MAorc2V0CU5ESVZJREVORCwJRVhDX1RFTVArMHgxCitzZXQJTkRSU0FWRSwJRVhDX1RFTVArMHgyCitzZXQJTkRRU0FWRSwJRVhDX1RFTVArMHg0CitzZXQJRERTRUNPTkQsCUVYQ19URU1QKzB4Ngorc2V0CUREUVVPVElFTlQsCUVYQ19URU1QKzB4OAorc2V0CURETk9STUFMLAlFWENfVEVNUCsweGMKKworCWdsb2JhbAkJX2RpdjY0CisjIyMjIyMjIyMjIyMjCisjIGRpdih1LHMpbCAjCisjIyMjIyMjIyMjIyMjCitfZGl2NjQ6CisJbW92LmIJCUVYQ19PUFdPUkQrMSglYTYpLCAlZDAKKwlhbmRpLmIJCSYweDM4LCAlZDAJCSMgZXh0cmFjdCBzcmMgbW9kZQorCisJYm5lLncJCWRjb250cm9sbW9kZWxfcwkJIyAlZG4gZGVzdCBvciBjb250cm9sIG1vZGU/CisKKwltb3YuYgkJRVhDX09QV09SRCsxKCVhNiksICVkMAkjIGV4dHJhY3QgRG4gZnJvbSBvcGNvZGUKKwlhbmRpLncJCSYweDcsICVkMAorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwgJWQ3ICMgZmV0Y2ggZGl2aXNvciBmcm9tIHJlZ2lzdGVyCisKK2Rnb3RzcmNsOgorCWJlcS53CQlkaXY2NGVxMAkJIyBkaXZpc29yIGlzID0gMCEhIQorCisJbW92LmIJCUVYQ19FWFRXT1JEKzEoJWE2KSwgJWQwCSMgZXh0cmFjdCBEciBmcm9tIGV4dHdvcmQKKwltb3YuYgkJRVhDX0VYVFdPUkQoJWE2KSwgJWQxCSMgZXh0cmFjdCBEcSBmcm9tIGV4dHdvcmQKKwlhbmQudwkJJjB4NywgJWQwCisJbHNyLmIJCSYweDQsICVkMQorCWFuZC53CQkmMHg3LCAlZDEKKwltb3YudwkJJWQwLCBORFJTQVZFKCVhNikJIyBzYXZlIERyIGZvciBsYXRlcgorCW1vdi53CQklZDEsIE5EUVNBVkUoJWE2KQkjIHNhdmUgRHEgZm9yIGxhdGVyCisKKyMgZmV0Y2ggJWRyIGFuZCAlZHEgZGlyZWN0bHkgb2ZmIHN0YWNrIHNpbmNlIGFsbCByZWdzIGFyZSBzYXZlZCB0aGVyZQorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwgJWQ1ICMgZ2V0IGRpdmlkZW5kIGhpCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCAlZDYgIyBnZXQgZGl2aWRlbmQgbG8KKworIyBzZXBhcmF0ZSBzaWduZWQgYW5kIHVuc2lnbmVkIGRpdmlkZQorCWJ0c3QJCSYweDMsIEVYQ19FWFRXT1JEKCVhNikJIyBzaWduZWQgb3IgdW5zaWduZWQ/CisJYmVxLmIJCWRzcGVjaWFsY2FzZXMJCSMgdXNlIHBvc2l0aXZlIGRpdmlkZQorCisjIHNhdmUgdGhlIHNpZ24gb2YgdGhlIGRpdmlzb3IKKyMgbWFrZSBkaXZpc29yIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKKwl0c3QubAkJJWQ3CQkJIyBjaGsgc2lnbiBvZiBkaXZpc29yCisJc2x0CQlORElWSVNPUiglYTYpCQkjIHNhdmUgc2lnbiBvZiBkaXZpc29yCisJYnBsLmIJCWRzZ25kaXZpZGVuZAorCW5lZy5sCQklZDcJCQkjIGNvbXBsZW1lbnQgbmVnYXRpdmUgZGl2aXNvcgorCisjIHNhdmUgdGhlIHNpZ24gb2YgdGhlIGRpdmlkZW5kCisjIG1ha2UgZGl2aWRlbmQgdW5zaWduZWQgaWYgaXQncyBuZWdhdGl2ZQorZHNnbmRpdmlkZW5kOgorCXRzdC5sCQklZDUJCQkjIGNoayBzaWduIG9mIGhpKGRpdmlkZW5kKQorCXNsdAkJTkRJVklERU5EKCVhNikJCSMgc2F2ZSBzaWduIG9mIGRpdmlkZW5kCisJYnBsLmIJCWRzcGVjaWFsY2FzZXMKKworCW1vdi53CQkmMHgwLCAlY2MJCSMgY2xlYXIgJ1gnIGNjIGJpdAorCW5lZ3gubAkJJWQ2CQkJIyBjb21wbGVtZW50IHNpZ25lZCBkaXZpZGVuZAorCW5lZ3gubAkJJWQ1CisKKyMgZXh0cmFjdCBzb21lIHNwZWNpYWwgY2FzZXM6CisjCS0gaXMgKGRpdmlkZW5kID09IDApID8KKyMJLSBpcyAoaGkoZGl2aWRlbmQpID09IDAgJiYgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKSkgPyAoMzItYml0IGRpdikKK2RzcGVjaWFsY2FzZXM6CisJdHN0LmwJCSVkNQkJCSMgaXMgKGhpKGRpdmlkZW5kKSA9PSAwKQorCWJuZS5iCQlkbm9ybWFsZGl2aWRlCQkjIG5vLCBzbyB0cnkgaXQgdGhlIGxvbmcgd2F5CisKKwl0c3QubAkJJWQ2CQkJIyBpcyAobG8oZGl2aWRlbmQpID09IDApLCB0b28KKwliZXEudwkJZGRvbmUJCQkjIHllcywgc28gKGRpdmlkZW5kID09IDApCisKKwljbXAubAkJJWQ3LCVkNgkJCSMgaXMgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKQorCWJscy5iCQlkMzJiaXRkaXZpZGUJCSMgeWVzLCBzbyB1c2UgMzIgYml0IGRpdmlkZQorCisJZXhnCQklZDUsJWQ2CQkJIyBxID0gMCwgciA9IGRpdmlkZW5kCisJYnJhLncJCWRpdmZpbmlzaAkJIyBjYW4ndCBkaXZpZGUsIHdlJ3JlIGRvbmUuCisKK2QzMmJpdGRpdmlkZToKKwl0ZGl2dS5sCQklZDcsICVkNTolZDYJCSMgaXQncyBvbmx5IGEgMzIvMzIgYml0IGRpdiEKKworCWJyYS5iCQlkaXZmaW5pc2gKKworZG5vcm1hbGRpdmlkZToKKyMgbGFzdCBzcGVjaWFsIGNhc2U6CisjCS0gaXMgaGkoZGl2aWRlbmQpID49IGRpdmlzb3IgPyBpZiB5ZXMsIHRoZW4gb3ZlcmZsb3cKKwljbXAubAkJJWQ3LCVkNQorCWJscy5iCQlkZG92ZgkJCSMgYW5zd2VyIHdvbid0IGZpdCBpbiAzMiBiaXRzCisKKyMgcGVyZm9ybSB0aGUgZGl2aWRlIGFsZ29yaXRobToKKwlic3IubAkJZGNsYXNzaWNhbAkJIyBkbyBpbnQgZGl2aWRlCisKKyMgc2VwYXJhdGUgaW50byBzaWduZWQgYW5kIHVuc2lnbmVkIGZpbmlzaGVzLgorZGl2ZmluaXNoOgorCWJ0c3QJCSYweDMsIEVYQ19FWFRXT1JEKCVhNikJIyBkbyBkaXZzLCBkaXZ1IHNlcGFyYXRlbHkKKwliZXEuYgkJZGRvbmUJCQkjIGRpdnUgaGFzIG5vIHByb2Nlc3NpbmchISEKKworIyBpdCB3YXMgYSBkaXZzLmwsIHNvIGNjb2RlIHNldHRpbmcgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC4uLgorCXRzdC5iCQlORElWSURFTkQoJWE2KQkJIyByZW1haW5kZXIgaGFzIHNhbWUgc2lnbgorCWJlcS5iCQlkY2MJCQkjIGFzIGRpdmlkZW5kLgorCW5lZy5sCQklZDUJCQkjIHNnbihyZW0pID0gc2duKGRpdmlkZW5kKQorZGNjOgorCW1vdi5iCQlORElWSVNPUiglYTYpLCAlZDAKKwllb3IuYgkJJWQwLCBORElWSURFTkQoJWE2KQkjIGNoayBpZiBxdW90aWVudCBpcyBuZWdhdGl2ZQorCWJlcS5iCQlkcXBvcwkJCSMgYnJhbmNoIHRvIHF1b3QgcG9zaXRpdmUKKworIyAweDgwMDAwMDAwIGlzIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNlbnRhYmxlIGFzIGEgMzItYml0IG5lZ2F0aXZlCisjIG51bWJlci4gdGhlIG5lZ2F0aXZlIG9mIDB4ODAwMDAwMDAgaXMgMHg4MDAwMDAwMC4KKwljbXBpLmwJCSVkNiwgJjB4ODAwMDAwMDAJIyB3aWxsICgtcXVvdCkgZml0IGluIDMyIGJpdHM/CisJYmhpLmIJCWRkb3ZmCisKKwluZWcubAkJJWQ2CQkJIyBtYWtlICgtcXVvdCkgMidzIGNvbXAKKworCWJyYS5iCQlkZG9uZQorCitkcXBvczoKKwlidHN0CQkmMHgxZiwgJWQ2CQkjIHdpbGwgKCtxdW90KSBmaXQgaW4gMzIgYml0cz8KKwlibmUuYgkJZGRvdmYKKworZGRvbmU6CisjIGF0IHRoaXMgcG9pbnQsIHJlc3VsdCBpcyBub3JtYWwgc28gY2NvZGVzIGFyZSBzZXQgYmFzZWQgb24gcmVzdWx0LgorCW1vdi53CQlFWENfQ0MoJWE2KSwgJWNjCisJdHN0LmwJCSVkNgkJCSMgc2V0ICVjY29kZSBiaXRzCisJbW92LncJCSVjYywgRVhDX0NDKCVhNikKKworCW1vdi53CQlORFJTQVZFKCVhNiksICVkMAkjIGdldCBEciBvZmYgc3RhY2sKKwltb3YudwkJTkRRU0FWRSglYTYpLCAlZDEJIyBnZXQgRHEgb2ZmIHN0YWNrCisKKyMgaWYgdGhlIHJlZ2lzdGVyIG51bWJlcnMgYXJlIHRoZSBzYW1lLCBvbmx5IHRoZSBxdW90aWVudCBnZXRzIHNhdmVkLgorIyBzbywgaWYgd2UgYWx3YXlzIHNhdmUgdGhlIHF1b3RpZW50IHNlY29uZCwgd2Ugc2F2ZSBvdXJzZWx2ZXMgYSBjbXAmYmVxCisJbW92LmwJCSVkNSwgKEVYQ19EUkVHUywlYTYsJWQwLncqNCkgIyBzYXZlIHJlbWFpbmRlcgorCW1vdi5sCQklZDYsIChFWENfRFJFR1MsJWE2LCVkMS53KjQpICMgc2F2ZSBxdW90aWVudAorCisJcnRzCisKK2Rkb3ZmOgorCWJzZXQJCSYweDEsIEVYQ19DQysxKCVhNikJIyAnVicgc2V0IG9uIG92ZXJmbG93CisJYmNscgkJJjB4MCwgRVhDX0NDKzEoJWE2KQkjICdDJyBjbGVhcmVkIG9uIG92ZXJmbG93CisKKwlydHMKKworZGl2NjRlcTA6CisJYW5kaS5iCQkmMHgxZSwgRVhDX0NDKzEoJWE2KQkjIGNsZWFyICdDJyBiaXQgb24gZGl2Ynl6ZXJvCisJb3JpLmIJCSZpZGJ5el9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgcm91dGluZSB1c2VzIHRoZSAnY2xhc3NpY2FsJyBBbGdvcml0aG0gRCBmcm9tIERvbmFsZCBLbnV0aCdzCSMKKyMgQXJ0IG9mIENvbXB1dGVyIFByb2dyYW1taW5nLCB2b2wgSUksIFNlbWludW1lcmljYWwgQWxnb3JpdGhtcy4JIworIyBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBiPTIqKjE2LCBhbmQgdGhlIHRhcmdldCBpcyBVMVUyVTNVNC9WMVYyLAkjCisjIHdoZXJlIFUsViBhcmUgd29yZHMgb2YgdGhlIHF1YWR3b3JkIGRpdmlkZW5kIGFuZCBsb25nd29yZCBkaXZpc29yLAkjCisjIGFuZCBVMSwgVjEgYXJlIHRoZSBtb3N0IHNpZ25pZmljYW50IHdvcmRzLgkJCQkjCisjCQkJCQkJCQkJIworIyBUaGUgbW9zdCBzaWcuIGxvbmd3b3JkIG9mIHRoZSA2NCBiaXQgZGl2aWRlbmQgbXVzdCBiZSBpbiAlZDUsIGxlYXN0CSMKKyMgaW4gJWQ2LiBUaGUgZGl2aXNvciBtdXN0IGJlIGluIHRoZSB2YXJpYWJsZSBkZGl2aXNvciwgYW5kIHRoZQkJIworIyBzaWduZWQvdW5zaWduZWQgZmxhZyBkZHVzaWduIG11c3QgYmUgc2V0ICgwPXVuc2lnbmVkLDE9c2lnbmVkKS4JIworIyBUaGUgcXVvdGllbnQgaXMgcmV0dXJuZWQgaW4gJWQ2LCByZW1haW5kZXIgaW4gJWQ1LCB1bmxlc3MgdGhlCQkjCisjIHYgKG92ZXJmbG93KSBiaXQgaXMgc2V0IGluIHRoZSBzYXZlZCAlY2NyLiBJZiBvdmVyZmxvdywgdGhlIGRpdmlkZW5kCSMKKyMgaXMgdW5jaGFuZ2VkLgkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGNsYXNzaWNhbDoKKyMgaWYgdGhlIGRpdmlzb3IgbXN3IGlzIDAsIHVzZSBzaW1wbGVyIGFsZ29yaXRobSB0aGVuIHRoZSBmdWxsIGJsb3duCisjIG9uZSBhdCBkZGtudXRoOgorCisJY21waS5sCQklZDcsICYweGZmZmYKKwliaGkuYgkJZGRrbnV0aAkJCSMgZ28gdXNlIEQuIEtudXRoIGFsZ29yaXRobQorCisjIFNpbmNlIHRoZSBkaXZpc29yIGlzIG9ubHkgYSB3b3JkIChhbmQgbGFyZ2VyIHRoYW4gdGhlIG1zbHcgb2YgdGhlIGRpdmlkZW5kKSwKKyMgYSBzaW1wbGVyIGFsZ29yaXRobSBtYXkgYmUgdXNlZCA6CisjIEluIHRoZSBnZW5lcmFsIGNhc2UsIGZvdXIgcXVvdGllbnQgd29yZHMgd291bGQgYmUgY3JlYXRlZCBieQorIyBkaXZpZGluZyB0aGUgZGl2aXNvciB3b3JkIGludG8gZWFjaCBkaXZpZGVuZCB3b3JkLiBJbiB0aGlzIGNhc2UsCisjIHRoZSBmaXJzdCB0d28gcXVvdGllbnQgd29yZHMgbXVzdCBiZSB6ZXJvLCBvciBvdmVyZmxvdyB3b3VsZCBvY2N1ci4KKyMgU2luY2Ugd2UgYWxyZWFkeSBjaGVja2VkIHRoaXMgY2FzZSBhYm92ZSwgd2UgY2FuIHRyZWF0IHRoZSBtb3N0IHNpZ25pZmljYW50CisjIGxvbmd3b3JkIG9mIHRoZSBkaXZpZGVuZCBhcyAoMCkgcmVtYWluZGVyIChzZWUgS251dGgpIGFuZCBtZXJlbHkgY29tcGxldGUKKyMgdGhlIGxhc3QgdHdvIGRpdmlzaW9ucyB0byBnZXQgYSBxdW90aWVudCBsb25nd29yZCBhbmQgd29yZCByZW1haW5kZXI6CisKKwljbHIubAkJJWQxCisJc3dhcAkJJWQ1CQkJIyBzYW1lIGFzIHIqYiBpZiBwcmV2aW91cyBzdGVwIHJxZAorCXN3YXAJCSVkNgkJCSMgZ2V0IHUzIHRvIGxzdyBwb3NpdGlvbgorCW1vdi53CQklZDYsICVkNQkJIyByYiArIHUzCisKKwlkaXZ1LncJCSVkNywgJWQ1CisKKwltb3YudwkJJWQ1LCAlZDEJCSMgZmlyc3QgcXVvdGllbnQgd29yZAorCXN3YXAJCSVkNgkJCSMgZ2V0IHU0CisJbW92LncJCSVkNiwgJWQ1CQkjIHJiICsgdTQKKworCWRpdnUudwkJJWQ3LCAlZDUKKworCXN3YXAJCSVkMQorCW1vdi53CQklZDUsICVkMQkJIyAybmQgcXVvdGllbnQgJ2RpZ2l0JworCWNsci53CQklZDUKKwlzd2FwCQklZDUJCQkjIG5vdyByZW1haW5kZXIKKwltb3YubAkJJWQxLCAlZDYJCSMgYW5kIHF1b3RpZW50CisKKwlydHMKKworZGRrbnV0aDoKKyMgSW4gdGhpcyBhbGdvcml0aG0sIHRoZSBkaXZpc29yIGlzIHRyZWF0ZWQgYXMgYSAyIGRpZ2l0ICh3b3JkKSBudW1iZXIKKyMgd2hpY2ggaXMgZGl2aWRlZCBpbnRvIGEgMyBkaWdpdCAod29yZCkgZGl2aWRlbmQgdG8gZ2V0IG9uZSBxdW90aWVudAorIyBkaWdpdCAod29yZCkuIEFmdGVyIHN1YnRyYWN0aW9uLCB0aGUgZGl2aWRlbmQgaXMgc2hpZnRlZCBhbmQgdGhlCisjIHByb2Nlc3MgcmVwZWF0ZWQuIEJlZm9yZSBiZWdpbm5pbmcsIHRoZSBkaXZpc29yIGFuZCBxdW90aWVudCBhcmUKKyMgJ25vcm1hbGl6ZWQnIHNvIHRoYXQgdGhlIHByb2Nlc3Mgb2YgZXN0aW1hdGluZyB0aGUgcXVvdGllbnQgZGlnaXQKKyMgd2lsbCB5aWVsZCB2ZXJpZmlhYmx5IGNvcnJlY3QgcmVzdWx0cy4uCisKKwljbHIubAkJREROT1JNQUwoJWE2KQkJIyBjb3VudCBvZiBzaGlmdHMgZm9yIG5vcm1hbGl6YXRpb24KKwljbHIuYgkJRERTRUNPTkQoJWE2KQkJIyBjbGVhciBmbGFnIGZvciBxdW90aWVudCBkaWdpdHMKKwljbHIubAkJJWQxCQkJIyAlZDEgd2lsbCBob2xkIHRyaWFsIHF1b3RpZW50CitkZG5jaGs6CisJYnRzdAkJJjMxLCAlZDcJCSMgbXVzdCB3ZSBub3JtYWxpemU/IGZpcnN0IHdvcmQgb2YKKwlibmUuYgkJZGRub3JtYWxpemVkCQkjIGRpdmlzb3IgKFYxKSBtdXN0IGJlID49IDY1NTM2LzIKKwlhZGRxLmwJCSYweDEsIERETk9STUFMKCVhNikJIyBjb3VudCBub3JtYWxpemF0aW9uIHNoaWZ0cworCWxzbC5sCQkmMHgxLCAlZDcJCSMgc2hpZnQgdGhlIGRpdmlzb3IKKwlsc2wubAkJJjB4MSwgJWQ2CQkjIHNoaWZ0IHU0LHUzIHdpdGggb3ZlcmZsb3cgdG8gdTIKKwlyb3hsLmwJCSYweDEsICVkNQkJIyBzaGlmdCB1MSx1MgorCWJyYS53CQlkZG5jaGsKK2Rkbm9ybWFsaXplZDoKKworIyBOb3cgY2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSBxdW90aWVudCB3b3JkcyAobXN3IGZpcnN0LCB0aGVuIGxzdykuCisjIFRoZSBjb21tZW50cyB1c2Ugc3Vic2NyaXB0cyBmb3IgdGhlIGZpcnN0IHF1b3RpZW50IGRpZ2l0IGRldGVybWluYXRpb24uCisJbW92LmwJCSVkNywgJWQzCQkjIGRpdmlzb3IKKwltb3YubAkJJWQ1LCAlZDIJCSMgZGl2aWRlbmQgbXNsdworCXN3YXAJCSVkMgorCXN3YXAJCSVkMworCWNtcC53CQklZDIsICVkMwkJIyBWMSA9IFUxID8KKwlibmUuYgkJZGRxY2FsYzEKKwltb3YudwkJJjB4ZmZmZiwgJWQxCQkjIHVzZSBtYXggdHJpYWwgcXVvdGllbnQgd29yZAorCWJyYS5iCQlkZGFkajAKK2RkcWNhbGMxOgorCW1vdi5sCQklZDUsICVkMQorCisJZGl2dS53CQklZDMsICVkMQkJIyB1c2UgcXVvdGllbnQgb2YgbXNsdy9tc3cKKworCWFuZGkubAkJJjB4MDAwMGZmZmYsICVkMQkjIHplcm8gYW55IHJlbWFpbmRlcgorZGRhZGowOgorCisjIG5vdyB0ZXN0IHRoZSB0cmlhbCBxdW90aWVudCBhbmQgYWRqdXN0LiBUaGlzIHN0ZXAgcGx1cyB0aGUKKyMgbm9ybWFsaXphdGlvbiBhc3N1cmVzIChhY2NvcmRpbmcgdG8gS251dGgpIHRoYXQgdGhlIHRyaWFsCisjIHF1b3RpZW50IHdpbGwgYmUgYXQgd29yc3QgMSB0b28gbGFyZ2UuCisJbW92LmwJCSVkNiwgLSglc3ApCisJY2xyLncJCSVkNgkJCSMgd29yZCB1MyBsZWZ0CisJc3dhcAkJJWQ2CQkJIyBpbiBsc3cgcG9zaXRpb24KK2RkYWRqMTogbW92LmwJCSVkNywgJWQzCisJbW92LmwJCSVkMSwgJWQyCisJbXVsdS53CQklZDcsICVkMgkJIyBWMnEKKwlzd2FwCQklZDMKKwltdWx1LncJCSVkMSwgJWQzCQkjIFYxcQorCW1vdi5sCQklZDUsICVkNAkJIyBVMVUyCisJc3ViLmwJCSVkMywgJWQ0CQkjIFUxVTIgLSBWMXEKKworCXN3YXAJCSVkNAorCisJbW92LncJCSVkNCwlZDAKKwltb3YudwkJJWQ2LCVkNAkJCSMgaW5zZXJ0IGxvd2VyIHdvcmQgKFUzKQorCisJdHN0LncJCSVkMAkJCSMgaXMgdXBwZXIgd29yZCBzZXQ/CisJYm5lLncJCWRkYWRqZDEKKworIwlhZGQubAkJJWQ2LCAlZDQJCSMgKFUxVTIgLSBWMXEpICsgVTMKKworCWNtcC5sCQklZDIsICVkNAorCWJscy5iCQlkZGFkamQxCQkJIyBpcyBWMnEgPiAoVTFVMi1WMXEpICsgVTMgPworCXN1YnEubAkJJjB4MSwgJWQxCQkjIHllcywgZGVjcmVtZW50IGFuZCByZWNoZWNrCisJYnJhLmIJCWRkYWRqMQorZGRhZGpkMToKKyMgbm93IHRlc3QgdGhlIHdvcmQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIGRpdmlzb3IgKFYxVjIpIGFuZCBjb21wYXJpbmcKKyMgdGhlIDMgZGlnaXQgKHdvcmQpIHJlc3VsdCB3aXRoIHRoZSBjdXJyZW50IGRpdmlkZW5kIHdvcmRzCisJbW92LmwJCSVkNSwgLSglc3ApCQkjIHNhdmUgJWQ1ICglZDYgYWxyZWFkeSBzYXZlZCkKKwltb3YubAkJJWQxLCAlZDYKKwlzd2FwCQklZDYJCQkjIHNoaWZ0IGFuc3dlciB0byBtcyAzIHdvcmRzCisJbW92LmwJCSVkNywgJWQ1CisJYnNyLmwJCWRtbTIKKwltb3YubAkJJWQ1LCAlZDIJCSMgbm93ICVkMiwlZDMgYXJlIHRyaWFsKmRpdmlzb3IKKwltb3YubAkJJWQ2LCAlZDMKKwltb3YubAkJKCVzcCkrLCAlZDUJCSMgcmVzdG9yZSBkaXZpZGVuZAorCW1vdi5sCQkoJXNwKSssICVkNgorCXN1Yi5sCQklZDMsICVkNgorCXN1YngubAkJJWQyLCAlZDUJCSMgc3VidHJhY3QgZG91YmxlIHByZWNpc2lvbgorCWJjYwkJZGQybmQJCQkjIG5vIGNhcnJ5LCBkbyBuZXh0IHF1b3RpZW50IGRpZ2l0CisJc3VicS5sCQkmMHgxLCAlZDEJCSMgcSBpcyBvbmUgdG9vIGxhcmdlCisjIG5lZWQgdG8gYWRkIGJhY2sgZGl2aXNvciBsb25nd29yZCB0byBjdXJyZW50IG1zIDMgZGlnaXRzIG9mIGRpdmlkZW5kCisjIC0gYWNjb3JkaW5nIHRvIEtudXRoLCB0aGlzIGlzIGRvbmUgb25seSAyIG91dCBvZiA2NTUzNiB0aW1lcyBmb3IgcmFuZG9tCisjIGRpdmlzb3IsIGRpdmlkZW5kIHNlbGVjdGlvbi4KKwljbHIubAkJJWQyCisJbW92LmwJCSVkNywgJWQzCisJc3dhcAkJJWQzCisJY2xyLncJCSVkMwkJCSMgJWQzIG5vdyBscyB3b3JkIG9mIGRpdmlzb3IKKwlhZGQubAkJJWQzLCAlZDYJCSMgYWxpZ25lZCB3aXRoIDNyZCB3b3JkIG9mIGRpdmlkZW5kCisJYWRkeC5sCQklZDIsICVkNQorCW1vdi5sCQklZDcsICVkMworCWNsci53CQklZDMJCQkjICVkMyBub3cgbXMgd29yZCBvZiBkaXZpc29yCisJc3dhcAkJJWQzCQkJIyBhbGlnbmVkIHdpdGggMm5kIHdvcmQgb2YgZGl2aWRlbmQKKwlhZGQubAkJJWQzLCAlZDUKK2RkMm5kOgorCXRzdC5iCQlERFNFQ09ORCglYTYpCQkjIGJvdGggcSB3b3JkcyBkb25lPworCWJuZS5iCQlkZHJlbWFpbgorIyBmaXJzdCBxdW90aWVudCBkaWdpdCBub3cgY29ycmVjdC4gc3RvcmUgZGlnaXQgYW5kIHNoaWZ0IHRoZQorIyAoc3VidHJhY3RlZCkgZGl2aWRlbmQKKwltb3YudwkJJWQxLCBERFFVT1RJRU5UKCVhNikKKwljbHIubAkJJWQxCisJc3dhcAkJJWQ1CisJc3dhcAkJJWQ2CisJbW92LncJCSVkNiwgJWQ1CisJY2xyLncJCSVkNgorCXN0CQlERFNFQ09ORCglYTYpCQkjIHNlY29uZCBkaWdpdAorCWJyYS53CQlkZG5vcm1hbGl6ZWQKK2RkcmVtYWluOgorIyBhZGQgMm5kIHdvcmQgdG8gcXVvdGllbnQsIGdldCB0aGUgcmVtYWluZGVyLgorCW1vdi53CQklZDEsIEREUVVPVElFTlQrMiglYTYpCisjIHNoaWZ0IGRvd24gb25lIHdvcmQvZGlnaXQgdG8gcmVub3JtYWxpemUgcmVtYWluZGVyLgorCW1vdi53CQklZDUsICVkNgorCXN3YXAJCSVkNgorCXN3YXAJCSVkNQorCW1vdi5sCQlERE5PUk1BTCglYTYpLCAlZDcJIyBnZXQgbm9ybSBzaGlmdCBjb3VudAorCWJlcS5iCQlkZHJuCisJc3VicS5sCQkmMHgxLCAlZDcJCSMgc2V0IGZvciBsb29wIGNvdW50CitkZG5scDoKKwlsc3IubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IGludG8gJWQ2CisJcm94ci5sCQkmMHgxLCAlZDYKKwlkYmYJCSVkNywgZGRubHAKK2Rkcm46CisJbW92LmwJCSVkNiwgJWQ1CQkjIHJlbWFpbmRlcgorCW1vdi5sCQlERFFVT1RJRU5UKCVhNiksICVkNgkjIHF1b3RpZW50CisKKwlydHMKK2RtbTI6CisjIGZhY3RvcnMgZm9yIHRoZSAzMlgzMi0+NjQgbXVsdGlwbGljYXRpb24gYXJlIGluICVkNSBhbmQgJWQ2LgorIyByZXR1cm5zIDY0IGJpdCByZXN1bHQgaW4gJWQ1IChoaSkgJWQ2KGxvKS4KKyMgZGVzdHJveXMgJWQyLCVkMywlZDQuCisKKyMgbXVsdGlwbHkgaGksbG8gd29yZHMgb2YgZWFjaCBmYWN0b3IgdG8gZ2V0IDQgaW50ZXJtZWRpYXRlIHByb2R1Y3RzCisJbW92LmwJCSVkNiwgJWQyCisJbW92LmwJCSVkNiwgJWQzCisJbW92LmwJCSVkNSwgJWQ0CisJc3dhcAkJJWQzCisJc3dhcAkJJWQ0CisJbXVsdS53CQklZDUsICVkNgkJIyAlZDYgPC0gbHN3KmxzdworCW11bHUudwkJJWQzLCAlZDUJCSMgJWQ1IDwtIG1zdy1kZXN0Kmxzdy1zb3VyY2UKKwltdWx1LncJCSVkNCwgJWQyCQkjICVkMiA8LSBtc3ctc291cmNlKmxzdy1kZXN0CisJbXVsdS53CQklZDQsICVkMwkJIyAlZDMgPC0gbXN3Km1zdworIyBub3cgdXNlIHN3YXAgYW5kIGFkZHggdG8gY29uc29saWRhdGUgdG8gdHdvIGxvbmd3b3JkcworCWNsci5sCQklZDQKKwlzd2FwCQklZDYKKwlhZGQudwkJJWQ1LCAlZDYJCSMgYWRkIG1zdyBvZiBsKmwgdG8gbHN3IG9mIG0qbCBwcm9kdWN0CisJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CisJYWRkLncJCSVkMiwgJWQ2CQkjIGFkZCBpbiBsc3cgb2Ygb3RoZXIgbSpsIHByb2R1Y3QKKwlhZGR4LncJCSVkNCwgJWQzCQkjIGFkZCBhbnkgY2FycnkgdG8gbSptIHByb2R1Y3QKKwlzd2FwCQklZDYJCQkjICVkNiBpcyBsb3cgMzIgYml0cyBvZiBmaW5hbCBwcm9kdWN0CisJY2xyLncJCSVkNQorCWNsci53CQklZDIJCQkjIGxzdyBvZiB0d28gbWl4ZWQgcHJvZHVjdHMgdXNlZCwKKwlzd2FwCQklZDUJCQkjIG5vdyB1c2UgbXN3cyBvZiBsb25nd29yZHMKKwlzd2FwCQklZDIKKwlhZGQubAkJJWQyLCAlZDUKKwlhZGQubAkJJWQzLCAlZDUJCSMgJWQ1IG5vdyBtcyAzMiBiaXRzIG9mIGZpbmFsIHByb2R1Y3QKKwlydHMKKworIyMjIyMjIyMjIworZGNvbnRyb2xtb2RlbF9zOgorCW1vdnEubAkJJkxPTkcsJWQwCisJYnNyLmwJCV9jYWxjX2VhCQkjIGNhbGMgPGVhPgorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZyAjIGltbWVkaWF0ZSBhZGRyZXNzaW5nIG1vZGU/CisJYmVxLmIJCWRpbW1lZAkJCSMgeWVzCisKKwltb3YubAkJJWEwLCVhMgorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggZGl2aXNvciBmcm9tIDxlYT4KKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUuYgkJZGl2NjRfZXJyCQkjIHllcworCisJbW92LmwJCSVkMCwgJWQ3CisJYnJhLncJCWRnb3RzcmNsCisKKyMgd2UgaGF2ZSB0byBzcGxpdCBvdXQgaW1tZWRpYXRlIGRhdGEgaGVyZSBiZWNhdXNlIGl0IG11c3QgYmUgcmVhZCB1c2luZworIyBpbWVtX3JlYWQoKSBpbnN0ZWFkIG9mIGRtZW1fcmVhZCgpLiB0aGlzIGJlY29tZXMgZXNwZWNpYWxseSBpbXBvcnRhbnQKKyMgaWYgdGhlIGZldGNoIHJ1bnMgaW50byBzb21lIGRlYWRseSBmYXVsdC4KK2RpbW1lZDoKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgcmVhZCBpbW1lZGlhdGUgdmFsdWUKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLCVkNworCWJyYS53CQlkZ290c3JjbAorCisjIyMjIyMjIyMjCisKKyMgaWYgZG1lbV9yZWFkX2xvbmcoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQorIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CisjIGFuZCB0aGUgZmFpbGluZyBhZGRyZXNzIHRvIHRoZSByb3V0aW5lIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGZyYW1lLgorIyBhbHNvLCB3ZSBjYWxsIGlzcF9yZXN0b3JlIGluIGNhc2UgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzCisjIChhbikrIG9yIC0oYW4pIGluIHdoaWNoIGNhc2UgdGhlIHByZXZpb3VzICJhbiIgdmFsdWUgbXVzdCBiZSByZXN0b3JlZC4KKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IGxvbmd3b3JkCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCitkaXY2NF9lcnI6CisJYnNyLmwJCWlzcF9yZXN0b3JlCQkjIHJlc3RvcmUgYWRkciByZWcKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKKwltb3YubAkJJjB4MDEwMTAwMDEsJWQwCQkjIHBhc3MgZnNsdworCWJyYS5sCQlpc3BfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9tdWw2NCgpOiByb3V0aW5lIHRvIGVtdWxhdGUgbXVse3Usc30ubCA8ZWE+LERoOkRsIDMyeDMyLT42NAkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfY2FsY19lYSgpIC0gY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzCQkJIworIwlpc3BfaWFjYygpIC0gaGFuZGxlIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKKyMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCisjCWlzcF9yZXN0b3JlKCkgLSByZXN0b3JlIEFuIG9uIGFjY2VzcyBlcnJvciB3LyAtKCkgb3IgKCkrCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIGV4aXRpbmcgdGhyb3VnaCBpc3BfZGFjYy4uLgkJCQkJIworIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJZWxzZQkJCQkJCQkJIworIwkJbm9uZQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGaXJzdCwgZGVjb2RlIHRoZSBvcGVyYW5kIGxvY2F0aW9uLiBJZiBpdCdzIGluIERuLCBmZXRjaCBmcm9tCSMKKyMgdGhlIHN0YWNrLiBJZiBpdCdzIGluIG1lbW9yeSwgdXNlIF9jYWxjX2VhKCkgdG8gY2FsY3VsYXRlIHRoZQkJIworIyBlZmZlY3RpdmUgYWRkcmVzcy4gVXNlIF9kbWVtX3JlYWRfbG9uZygpIHRvIGZldGNoIGF0IHRoYXQgYWRkcmVzcy4JIworIyBVbmxlc3MgdGhlIG9wZXJhbmQgaXMgaW1tZWRpYXRlIGRhdGEuIFRoZW4gdXNlIF9pbWVtX3JlYWRfbG9uZygpLgkjCisjIFNlbmQgZmFpbHVyZXMgdG8gaXNwX2RhY2MoKSBvciBpc3BfaWFjYygpIGFzIGFwcHJvcHJpYXRlLgkJIworIwlJZiB0aGUgb3BlcmFuZHMgYXJlIHNpZ25lZCwgbWFrZSB0aGVtIHVuc2lnbmVkIGFuZCBzYXZlIHRoZQkjCisjIHNpZ24gaW5mbyBmb3IgbGF0ZXIuIFBlcmZvcm0gdGhlIG11bHRpcGxpY2F0aW9uIHVzaW5nIDE2eDE2LT4zMgkjCisjIHVuc2lnbmVkIG11bHRpcGxpZXMgYW5kICJhZGQiIGluc3RydWN0aW9ucy4gU3RvcmUgdGhlIGhpZ2ggYW5kIGxvdwkjCisjIHBvcnRpb25zIG9mIHRoZSByZXN1bHQgaW4gdGhlIGFwcHJvcHJpYXRlIGRhdGEgcmVnaXN0ZXJzIG9uIHRoZQkjCisjIHN0YWNrLiBDYWxjdWxhdGUgdGhlIGNvbmRpdGlvbiBjb2RlcywgYWxzby4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIworIyBtdWwodSxzKWwgIworIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX211bDY0CitfbXVsNjQ6CisJbW92LmIJCUVYQ19PUFdPUkQrMSglYTYpLCAlZDAJIyBleHRyYWN0IHNyYyB7bW9kZSxyZWd9CisJY21waS5iCQklZDAsICYweDcJCSMgaXMgc3JjIG1vZGUgRG4gb3Igb3RoZXI/CisJYmd0LncJCW11bDY0X21lbW9wCQkjIHNyYyBpcyBpbiBtZW1vcnkKKworIyBtdWx0aXBsaWVyIG9wZXJhbmQgaW4gdGhlIGRhdGEgcmVnaXN0ZXIgZmlsZS4KKyMgbXVzdCBleHRyYWN0IHRoZSByZWdpc3RlciBudW1iZXIgYW5kIGZldGNoIHRoZSBvcGVyYW5kIGZyb20gdGhlIHN0YWNrLgorbXVsNjRfcmVnb3A6CisJYW5kaS53CQkmMHg3LCAlZDAJCSMgZXh0cmFjdCBEbgorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwgJWQzICMgZmV0Y2ggbXVsdGlwbGllcgorCisjIG11bHRpcGxpZXIgaXMgaW4gJWQzLiBub3csIGV4dHJhY3QgRGwgYW5kIERoIGZpZWxkcyBhbmQgZmV0Y2ggdGhlCisjIG11bHRpcGxpY2FuZCBmcm9tIHRoZSBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBEbC4KK211bDY0X211bHRpcGxpY2FuZDoKKwltb3YudwkJRVhDX0VYVFdPUkQoJWE2KSwgJWQyCSMgZmV0Y2ggZXh0IHdvcmQKKwljbHIudwkJJWQxCQkJIyBjbGVhciBEaCByZWcKKwltb3YuYgkJJWQyLCAlZDEJCSMgZ3JhYiBEaAorCXJvbC53CQkmMHg0LCAlZDIJCSMgYWxpZ24gRGwgYnl0ZQorCWFuZGkudwkJJjB4NywgJWQyCQkjIGV4dHJhY3QgRGwKKworCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSwgJWQ0ICMgZ2V0IG11bHRpcGxpY2FuZAorCisjIGNoZWNrIGZvciB0aGUgY2FzZSBvZiAiemVybyIgcmVzdWx0IGVhcmx5CisJdHN0LmwJCSVkNAkJCSMgdGVzdCBtdWx0aXBsaWNhbmQKKwliZXEudwkJbXVsNjRfemVybwkJIyBoYW5kbGUgemVybyBzZXBhcmF0ZWx5CisJdHN0LmwJCSVkMwkJCSMgdGVzdCBtdWx0aXBsaWVyCisJYmVxLncJCW11bDY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQorCisjIG11bHRpcGxpZXIgaXMgaW4gJWQzIGFuZCBtdWx0aXBsaWNhbmQgaXMgaW4gJWQ0LgorIyBpZiB0aGUgb3BlcmF0aW9uIGlzIHRvIGJlIHNpZ25lZCwgdGhlbiB0aGUgb3BlcmFuZHMgYXJlIGNvbnZlcnRlZAorIyB0byB1bnNpZ25lZCBhbmQgdGhlIHJlc3VsdCBzaWduIGlzIHNhdmVkIGZvciB0aGUgZW5kLgorCWNsci5iCQlFWENfVEVNUCglYTYpCQkjIGNsZWFyIHRlbXAgc3BhY2UKKwlidHN0CQkmMHgzLCBFWENfRVhUV09SRCglYTYpCSMgc2lnbmVkIG9yIHVuc2lnbmVkPworCWJlcS5iCQltdWw2NF9hbGcJCSMgdW5zaWduZWQ7IHNraXAgc2duIGNhbGMKKworCXRzdC5sCQklZDMJCQkjIGlzIG11bHRpcGxpZXIgbmVnYXRpdmU/CisJYmdlLmIJCW11bDY0X2Noa19tZF9zZ24JIyBubworCW5lZy5sCQklZDMJCQkjIG1ha2UgbXVsdGlwbGllciBwb3NpdGl2ZQorCW9yaS5iCQkmMHgxLCBFWENfVEVNUCglYTYpCSMgc2F2ZSBtdWx0aXBsaWVyIHNnbgorCisjIHRoZSByZXN1bHQgc2lnbiBpcyB0aGUgZXhjbHVzaXZlIG9yIG9mIHRoZSBvcGVyYW5kIHNpZ24gYml0cy4KK211bDY0X2Noa19tZF9zZ246CisJdHN0LmwJCSVkNAkJCSMgaXMgbXVsdGlwbGljYW5kIG5lZ2F0aXZlPworCWJnZS5iCQltdWw2NF9hbGcJCSMgbm8KKwluZWcubAkJJWQ0CQkJIyBtYWtlIG11bHRpcGxpY2FuZCBwb3NpdGl2ZQorCWVvcmkuYgkJJjB4MSwgRVhDX1RFTVAoJWE2KQkjIGNhbGN1bGF0ZSBjb3JyZWN0IHNpZ24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwk2MwkJCSAgIDMyCQkJCTAJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJCQkjCisjCXwgaGkobXBsaWVyKSAqIGhpKG1wbGljYW5kKXwJCQkJCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBoaShtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgfCBsbyhtcGxpZXIpICogaGkobXBsaWNhbmQpIHwJCQkjCisjCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCS0tfC0tCQkJICAgfCBsbyhtcGxpZXIpICogbG8obXBsaWNhbmQpIHwJIworIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwl8CWhpKHJlc3VsdCkJICAgfAkgICAgbG8ocmVzdWx0KSAgICAgICAgIHwJIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittdWw2NF9hbGc6CisjIGxvYWQgdGVtcCByZWdpc3RlcnMgd2l0aCBvcGVyYW5kcworCW1vdi5sCQklZDMsICVkNQkJIyBtciBpbiAlZDUKKwltb3YubAkJJWQzLCAlZDYJCSMgbXIgaW4gJWQ2CisJbW92LmwJCSVkNCwgJWQ3CQkjIG1kIGluICVkNworCXN3YXAJCSVkNgkJCSMgaGkobXIpIGluIGxvICVkNgorCXN3YXAJCSVkNwkJCSMgaGkobWQpIGluIGxvICVkNworCisjIGNvbXBsZXRlIG5lY2Vzc2FyeSBtdWx0aXBsaWVzOgorCW11bHUudwkJJWQ0LCAlZDMJCSMgWzFdIGxvKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQ2LCAlZDQJCSMgWzJdIGhpKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQ3LCAlZDUJCSMgWzNdIGxvKG1yKSAqIGhpKG1kKQorCW11bHUudwkJJWQ3LCAlZDYJCSMgWzRdIGhpKG1yKSAqIGhpKG1kKQorCisjIGFkZCBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIHRvIGhpIHBvcnRpb24gb2YgWzFdLgorIyBhZGQgY2FycmllcyBwcm9kdWNlZCBmcm9tIHRoZXNlIGFkZHMgdG8gWzRdLgorIyBsbyhbMV0pIGlzIHRoZSBmaW5hbCBsbyAxNiBiaXRzIG9mIHRoZSByZXN1bHQuCisJY2xyLmwJCSVkNwkJCSMgbG9hZCAlZDcgdy8gemVybyB2YWx1ZQorCXN3YXAJCSVkMwkJCSMgaGkoWzFdKSA8PT0+IGxvKFsxXSkKKwlhZGQudwkJJWQ0LCAlZDMJCSMgaGkoWzFdKSArIGxvKFsyXSkKKwlhZGR4LmwJCSVkNywgJWQ2CQkjICAgIFs0XSAgKyBjYXJyeQorCWFkZC53CQklZDUsICVkMwkJIyBoaShbMV0pICsgbG8oWzNdKQorCWFkZHgubAkJJWQ3LCAlZDYJCSMgICAgWzRdICArIGNhcnJ5CisJc3dhcAkJJWQzCQkJIyBsbyhbMV0pIDw9PT4gaGkoWzFdKQorCisjIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gaGF2ZSBiZWVuIGFkZGVkIGluIHRvIGZpbmFsIHJlc3VsdC4KKyMgbm93LCBjbGVhciBsbywgcHV0IGhpIGluIGxvIHJlZywgYW5kIGFkZCB0byBbNF0KKwljbHIudwkJJWQ0CQkJIyBjbGVhciBsbyhbMl0pCisJY2xyLncJCSVkNQkJCSMgY2xlYXIgaGkoWzNdKQorCXN3YXAJCSVkNAkJCSMgaGkoWzJdKSBpbiBsbyAlZDQKKwlzd2FwCQklZDUJCQkjIGhpKFszXSkgaW4gbG8gJWQ1CisJYWRkLmwJCSVkNSwgJWQ0CQkjICAgIFs0XSAgKyBoaShbMl0pCisJYWRkLmwJCSVkNiwgJWQ0CQkjICAgIFs0XSAgKyBoaShbM10pCisKKyMgdW5zaWduZWQgcmVzdWx0IGlzIG5vdyBpbiB7JWQ0LCVkM30KKwl0c3QuYgkJRVhDX1RFTVAoJWE2KQkJIyBzaG91bGQgcmVzdWx0IGJlIHNpZ25lZD8KKwliZXEuYgkJbXVsNjRfZG9uZQkJIyBubworCisjIHJlc3VsdCBzaG91bGQgYmUgYSBzaWduZWQgbmVnYXRpdmUgbnVtYmVyLgorIyBjb21wdXRlIDIncyBjb21wbGVtZW50IG9mIHRoZSB1bnNpZ25lZCBudW1iZXI6CisjICAgLW5lZ2F0ZSBhbGwgYml0cyBhbmQgYWRkIDEKK211bDY0X25lZzoKKwlub3QubAkJJWQzCQkJIyBuZWdhdGUgbG8ocmVzdWx0KSBiaXRzCisJbm90LmwJCSVkNAkJCSMgbmVnYXRlIGhpKHJlc3VsdCkgYml0cworCWFkZHEubAkJJjEsICVkMwkJCSMgYWRkIDEgdG8gbG8ocmVzdWx0KQorCWFkZHgubAkJJWQ3LCAlZDQJCSMgYWRkIGNhcnJ5IHRvIGhpKHJlc3VsdCkKKworIyB0aGUgcmVzdWx0IGlzIHNhdmVkIHRvIHRoZSByZWdpc3RlciBmaWxlLgorIyBmb3IgJzA0MCBjb21wYXRpYmlsaXR5LCBpZiBEbCA9PSBEaCB0aGVuIG9ubHkgdGhlIGhpKHJlc3VsdCkgaXMKKyMgc2F2ZWQuIHNvLCBzYXZpbmcgaGkgYWZ0ZXIgbG8gYWNjb21wbGlzaGVzIHRoaXMgd2l0aG91dCBuZWVkIHRvCisjIGNoZWNrIERsLERoIGVxdWFsaXR5LgorbXVsNjRfZG9uZToKKwltb3YubAkJJWQzLCAoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSAjIHNhdmUgbG8ocmVzdWx0KQorCW1vdi53CQkmMHgwLCAlY2MKKwltb3YubAkJJWQ0LCAoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSAjIHNhdmUgaGkocmVzdWx0KQorCisjIG5vdywgZ3JhYiB0aGUgY29uZGl0aW9uIGNvZGVzLiBvbmx5IG9uZSB0aGF0IGNhbiBiZSBzZXQgaXMgJ04nLgorIyAnTicgQ0FOIGJlIHNldCBpZiB0aGUgb3BlcmF0aW9uIGlzIHVuc2lnbmVkIGlmIGJpdCA2MyBpcyBzZXQuCisJbW92LncJCSVjYywgJWQ3CQkjIGZldGNoICVjY3IgdG8gc2VlIGlmICdOJyBzZXQKKwlhbmRpLmIJCSYweDgsICVkNwkJIyBleHRyYWN0ICdOJyBiaXQKKworbXVsNjRfY2NvZGVfc2V0OgorCW1vdi5iCQlFWENfQ0MrMSglYTYpLCAlZDYJIyBmZXRjaCBwcmV2aW91cyAlY2NyCisJYW5kaS5iCQkmMHgxMCwgJWQ2CQkjIGFsbCBidXQgJ1gnIGJpdCBjaGFuZ2VzCisKKwlvci5iCQklZDcsICVkNgkJIyBncm91cCAnWCcgYW5kICdOJworCW1vdi5iCQklZDYsIEVYQ19DQysxKCVhNikJIyBzYXZlIG5ldyAlY2NyCisKKwlydHMKKworIyBvbmUgb3IgYm90aCBvZiB0aGUgb3BlcmFuZHMgaXMgemVybyBzbyB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KKyMgc2F2ZSB0aGUgemVybyByZXN1bHQgdG8gdGhlIHJlZ2lzdGVyIGZpbGUgYW5kIHNldCB0aGUgJ1onIGNjb2RlIGJpdC4KK211bDY0X3plcm86CisJY2xyLmwJCShFWENfRFJFR1MsJWE2LCVkMi53KjQpICMgc2F2ZSBsbyhyZXN1bHQpCisJY2xyLmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpICMgc2F2ZSBoaShyZXN1bHQpCisKKwltb3ZxLmwJCSYweDQsICVkNwkJIyBzZXQgJ1onIGNjb2RlIGJpdAorCWJyYS5iCQltdWw2NF9jY29kZV9zZXQJCSMgZmluaXNoIGNjb2RlIHNldAorCisjIyMjIyMjIyMjCisKKyMgbXVsdGlwbGllciBvcGVyYW5kIGlzIGluIG1lbW9yeSBhdCB0aGUgZWZmZWN0aXZlIGFkZHJlc3MuCisjIG11c3QgY2FsY3VsYXRlIHRoZSA8ZWE+IGFuZCBnbyBmZXRjaCB0aGUgMzItYml0IG9wZXJhbmQuCittdWw2NF9tZW1vcDoKKwltb3ZxLmwJCSZMT05HLCAlZDAJCSMgcGFzcyAjIG9mIGJ5dGVzCisJYnNyLmwJCV9jYWxjX2VhCQkjIGNhbGN1bGF0ZSA8ZWE+CisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnICMgaW1tZWRpYXRlIGFkZHJlc3NpbmcgbW9kZT8KKwliZXEuYgkJbXVsNjRfaW1tZWQJCSMgeWVzCisKKwltb3YubAkJJWEwLCVhMgorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIGZyb20gYWRkciAoJWEwKQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltdWw2NF9lcnIJCSMgeWVzCisKKwltb3YubAkJJWQwLCAlZDMJCSMgc3RvcmUgbXVsdGlwbGllciBpbiAlZDMKKworCWJyYS53CQltdWw2NF9tdWx0aXBsaWNhbmQKKworIyB3ZSBoYXZlIHRvIHNwbGl0IG91dCBpbW1lZGlhdGUgZGF0YSBoZXJlIGJlY2F1c2UgaXQgbXVzdCBiZSByZWFkIHVzaW5nCisjIGltZW1fcmVhZCgpIGluc3RlYWQgb2YgZG1lbV9yZWFkKCkuIHRoaXMgYmVjb21lcyBlc3BlY2lhbGx5IGltcG9ydGFudAorIyBpZiB0aGUgZmV0Y2ggcnVucyBpbnRvIHNvbWUgZGVhZGx5IGZhdWx0LgorbXVsNjRfaW1tZWQ6CisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIHJlYWQgaW1tZWRpYXRlIHZhbHVlCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCwlZDMKKwlicmEudwkJbXVsNjRfbXVsdGlwbGljYW5kCisKKyMjIyMjIyMjIyMKKworIyBpZiBkbWVtX3JlYWRfbG9uZygpIHJldHVybnMgYSBmYWlsIG1lc3NhZ2UgaW4gZDEsIHRoZSBwYWNrYWdlCisjIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBmcmFtZS4gaGVyZSwgd2UgcGFzcyBhIHNrZWxldG9uIGZzbHcKKyMgYW5kIHRoZSBmYWlsaW5nIGFkZHJlc3MgdG8gdGhlIHJvdXRpbmUgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZnJhbWUuCisjIGFsc28sIHdlIGNhbGwgaXNwX3Jlc3RvcmUgaW4gY2FzZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMKKyMgKGFuKSsgb3IgLShhbikgaW4gd2hpY2ggY2FzZSB0aGUgcHJldmlvdXMgImFuIiB2YWx1ZSBtdXN0IGJlIHJlc3RvcmVkLgorIyBGU0xXOgorIwlyZWFkID0gdHJ1ZQorIwlzaXplID0gbG9uZ3dvcmQKKyMJVE0gPSBkYXRhCisjCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKK211bDY0X2VycjoKKwlic3IubAkJaXNwX3Jlc3RvcmUJCSMgcmVzdG9yZSBhZGRyIHJlZworCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMTAxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NvbXBhbmRzZXQyKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBjYXMyKCkJCQkjCisjCQkJKGludGVybmFsIHRvIHBhY2thZ2UpCQkJCSMKKyMJCQkJCQkJCQkjCisjCV9pc3BfY2FzMl9maW5pc2goKTogc3RvcmUgY2NvZGVzLCBzdG9yZSBjb21wYXJlIHJlZ3MJCSMKKyMJCQkgICAgKGV4dGVybmFsIHRvIHBhY2thZ2UpCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX3JlYWxfbG9ja19wYWdlKCkgLSAiY2FsbG91dCIgdG8gbG9jayBvcCdzIHBhZ2UgZnJvbSBwYWdlLW91dHMJIworIwlfY2FzX3Rlcm1pbmF0ZTIoKSAtIGFjY2VzcyBlcnJvciBleGl0CQkJCSMKKyMJX3JlYWxfY2FzMigpIC0gImNhbGxvdXQiIHRvIGNvcmUgY2FzMiBlbXVsYXRpb24gY29kZQkJIworIwlfcmVhbF91bmxvY2tfcGFnZSgpIC0gImNhbGxvdXQiIHRvIHVubG9jayBwYWdlCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMgX2NvbXBhbmRzZXQyKCk6CQkJCQkJCSMKKyMJZDAgPSBpbnN0cnVjdGlvbiBleHRlbnNpb24gd29yZAkJCQkJIworIwkJCQkJCQkJCSMKKyMgX2lzcF9jYXMyX2ZpbmlzaCgpOgkJCQkJCQkjCisjCXNlZSBjYXMyIGNvcmUgZW11bGF0aW9uIGNvZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjIF9jb21wYW5kc2V0MigpOgkJCQkJCQkjCisjCXNlZSBjYXMyIGNvcmUgZW11bGF0aW9uIGNvZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIF9pc3BfY2FzX2ZpbmlzaCgpOgkJCQkJCQkjCisjCU5vbmUgKHJlZ2lzdGVyIGZpbGUgb3IgbWVtcm95IGNoYW5nZWQgYXMgYXBwcm9wcmlhdGUpCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIyBjb21wYW5kc2V0MigpOgkJCQkJCQkjCisjCURlY29kZSB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGZldGNoIHRoZSBhcHByb3ByaWF0ZSBVcGRhdGUgYW5kCSMKKyMgQ29tcGFyZSBvcGVyYW5kcy4gVGhlbiBjYWxsIHRoZSAiY2FsbG91dCIgX3JlYWxfbG9ja19wYWdlKCkgZm9yIGVhY2gJIworIyBtZW1vcnkgb3BlcmFuZCBhZGRyZXNzIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGtlZXAgdGhlc2UJIworIyBwYWdlcyBmcm9tIGJlaW5nIHBhZ2VkIG91dC4gSWYgZWl0aGVyIF9yZWFsX2xvY2tfcGFnZSgpIGZhaWxzLCBleGl0CSMKKyMgdGhyb3VnaCBfY2FzX3Rlcm1pbmF0ZTIoKS4gRG9uJ3QgZm9yZ2V0IHRvIHVubG9jayB0aGUgMXN0IGxvY2tlZCBwYWdlCSMKKyMgdXNpbmcgX3JlYWxfdW5sb2NrX3BhZ2VkKCkgaWYgdGhlIDJuZCBsb2NrLXBhZ2UgZmFpbHMuCQkjCisjIEZpbmFsbHksIGJyYW5jaCB0byB0aGUgY29yZSBjYXMyIGVtdWxhdGlvbiBjb2RlIGJ5IGNhbGxpbmcgdGhlCSMKKyMgImNhbGxvdXQiIF9yZWFsX2NhczIoKS4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBfaXNwX2NhczJfZmluaXNoKCk6CQkJCQkJCSMKKyMJUmUtcGVyZm9ybSB0aGUgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb24JIworIyBjb2RlcyB3aGljaCB3ZXJlIHRvbyBtdWNoIHRyb3VibGUgdG8ga2VlcCBhcm91bmQgZHVyaW5nIHRoZSBsb2NrZWQJIworIyBlbXVsYXRpb24uIFRoZW4gdW5sb2NrIGVhY2ggb3BlcmFuZHMgcGFnZSBieSBjYWxsaW5nIHRoZSAiY2FsbG91dCIJIworIyBfcmVhbF91bmxvY2tfcGFnZSgpLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgQUREUjEsCUVYQ19URU1QKzB4Yworc2V0IEFERFIyLAlFWENfVEVNUCsweDAKK3NldCBEQzIsCUVYQ19URU1QKzB4YQorc2V0IERDMSwJRVhDX1RFTVArMHg4CisKKwlnbG9iYWwJCV9jb21wYW5kc2V0MgorX2NvbXBhbmRzZXQyOgorCW1vdi5sCQklZDAsRVhDX1RFTVArMHg0KCVhNikJCSMgc3RvcmUgZm9yIHBvc3NpYmxlIHJlc3RhcnQKKwltb3YubAkJJWQwLCVkMQkJCSMgZXh0ZW5zaW9uIHdvcmQgaW4gZDAKKworCXJvbC53CQkmMHg0LCVkMAorCWFuZGkudwkJJjB4ZiwlZDAJCSMgZXh0cmFjdCBSbjIKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWExICMgZmV0Y2ggQUREUjIKKwltb3YubAkJJWExLEFERFIyKCVhNikKKworCW1vdi5sCQklZDEsJWQwCisKKwlsc3IudwkJJjB4NiwlZDEKKwlhbmRpLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRHUyCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCVkNSAjIGZldGNoIFVwZGF0ZTIgT3AKKworCWFuZGkudwkJJjB4NywlZDAJCSMgZXh0cmFjdCBEYzIKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWQzICMgZmV0Y2ggQ29tcGFyZTIgT3AKKwltb3YudwkJJWQwLERDMiglYTYpCisKKwltb3YudwkJRVhDX0VYVFdPUkQoJWE2KSwlZDAKKwltb3YubAkJJWQwLCVkMQorCisJcm9sLncJCSYweDQsJWQwCisJYW5kaS53CQkmMHhmLCVkMAkJIyBleHRyYWN0IFJuMQorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwlYTAgIyBmZXRjaCBBRERSMQorCW1vdi5sCQklYTAsQUREUjEoJWE2KQorCisJbW92LmwJCSVkMSwlZDAKKworCWxzci53CQkmMHg2LCVkMQorCWFuZGkudwkJJjB4NywlZDEJCSMgZXh0cmFjdCBEdTEKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQ0ICMgZmV0Y2ggVXBkYXRlMSBPcAorCisJYW5kaS53CQkmMHg3LCVkMAkJIyBleHRyYWN0IERjMQorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwlZDIgIyBmZXRjaCBDb21wYXJlMSBPcAorCW1vdi53CQklZDAsREMxKCVhNikKKworCWJ0c3QJCSYweDEsRVhDX09QV09SRCglYTYpCSMgd29yZCBvciBsb25nPworCXNuZQkJJWQ3CisKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlzbmUJCSVkNgorCisJbW92LmwJCSVhMCwlYTIKKwltb3YubAkJJWExLCVhMworCisJbW92LmwJCSVkNywlZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQklZDYsJWQwCQkJIyBwYXNzIG1vZGUKKwlic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQorCW1vdi5sCQklYTIsJWEwCisJdHN0LmwJCSVkMAkJCSMgZXJyb3I/CisJYm5lLmwJCV9jYXNfdGVybWluYXRlMgkJIyB5ZXMKKworCW1vdi5sCQklZDcsJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCisJbW92LmwJCSVhMywlYTAJCQkjIHBhc3MgYWRkcgorCWJzci5sCQlfcmVhbF9sb2NrX3BhZ2UJCSMgbG9jayBwYWdlCisJbW92LmwJCSVhMywlYTAKKwl0c3QubAkJJWQwCQkJIyBlcnJvcj8KKwlibmUuYgkJY2FzX3ByZXRlcm0JCSMgeWVzCisKKwltb3YubAkJJWEyLCVhMAorCW1vdi5sCQklYTMsJWExCisKKwlicmEubAkJX3JlYWxfY2FzMgorCisjIGlmIHRoZSAybmQgbG9jayBhdHRlbXB0IGZhaWxzLCB0aGVuIHdlIG11c3Qgc3RpbGwgdW5sb2NrIHRoZQorIyBmaXJzdCBwYWdlKHMpLgorY2FzX3ByZXRlcm06CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBGU0xXCisJbW92LmwJCSVkNywlZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQklZDYsJWQwCQkJIyBwYXNzIG1vZGUKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBBRERSMQorCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBmaXJzdCBwYWdlKHMpCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBGU0xXCisJbW92LmwJCSVhMywlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyCisJYnJhLmwJCV9jYXNfdGVybWluYXRlMgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9pc3BfY2FzMl9maW5pc2gKK19pc3BfY2FzMl9maW5pc2g6CisJYnRzdAkJJjB4MSxFWENfT1BXT1JEKCVhNikKKwlibmUuYgkJY2FzMl9maW5pc2hfbAorCisJbW92LncJCUVYQ19DQyglYTYpLCVjYwkJIyBsb2FkIG9sZCBjY29kZXMKKwljbXAudwkJJWQwLCVkMgorCWJuZS5iCQljYXMyX2ZpbmlzaF93X3NhdmUKKwljbXAudwkJJWQxLCVkMworY2FzMl9maW5pc2hfd19zYXZlOgorCW1vdi53CQklY2MsRVhDX0NDKCVhNikJCSMgc2F2ZSBuZXcgY2NvZGVzCisKKwl0c3QuYgkJJWQ0CQkJIyB1cGRhdGUgY29tcGFyZSByZWc/CisJYm5lLmIJCWNhczJfZmluaXNoX3dfZG9uZQkjIG5vCisKKwltb3YudwkJREMyKCVhNiksJWQzCQkjIGZldGNoIERjMgorCW1vdi53CQklZDEsKDIrRVhDX0RSRUdTLCVhNiwlZDMudyo0KSAjIHN0b3JlIG5ldyBDb21wYXJlMiBPcAorCisJbW92LncJCURDMSglYTYpLCVkMgkJIyBmZXRjaCBEYzEKKwltb3YudwkJJWQwLCgyK0VYQ19EUkVHUywlYTYsJWQyLncqNCkgIyBzdG9yZSBuZXcgQ29tcGFyZTEgT3AKKworY2FzMl9maW5pc2hfd19kb25lOgorCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCisJc25lCQklZDIKKwltb3YubAkJJWQyLCVkMAkJCSMgcGFzcyBtb2RlCisJc2YJCSVkMQkJCSMgcGFzcyBzaXplCisJbW92LmwJCUFERFIxKCVhNiksJWEwCQkjIHBhc3MgQUREUjEKKwlic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQorCisJbW92LmwJCSVkMiwlZDAJCQkjIHBhc3MgbW9kZQorCXNmCQklZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQlBRERSMiglYTYpLCVhMAkJIyBwYXNzIEFERFIyCisJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKKwlydHMKKworY2FzMl9maW5pc2hfbDoKKwltb3YudwkJRVhDX0NDKCVhNiksJWNjCQkjIGxvYWQgb2xkIGNjb2RlcworCWNtcC5sCQklZDAsJWQyCisJYm5lLmIJCWNhczJfZmluaXNoX2xfc2F2ZQorCWNtcC5sCQklZDEsJWQzCitjYXMyX2ZpbmlzaF9sX3NhdmU6CisJbW92LncJCSVjYyxFWENfQ0MoJWE2KQkJIyBzYXZlIG5ldyBjY29kZXMKKworCXRzdC5iCQklZDQJCQkjIHVwZGF0ZSBjb21wYXJlIHJlZz8KKwlibmUuYgkJY2FzMl9maW5pc2hfbF9kb25lCSMgbm8KKworCW1vdi53CQlEQzIoJWE2KSwlZDMJCSMgZmV0Y2ggRGMyCisJbW92LmwJCSVkMSwoRVhDX0RSRUdTLCVhNiwlZDMudyo0KSAjIHN0b3JlIG5ldyBDb21wYXJlMiBPcAorCisJbW92LncJCURDMSglYTYpLCVkMgkJIyBmZXRjaCBEYzEKKwltb3YubAkJJWQwLChFWENfRFJFR1MsJWE2LCVkMi53KjQpICMgc3RvcmUgbmV3IENvbXBhcmUxIE9wCisKK2NhczJfZmluaXNoX2xfZG9uZToKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQorCXNuZQkJJWQyCisJbW92LmwJCSVkMiwlZDAJCQkjIHBhc3MgbW9kZQorCXN0CQklZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQlBRERSMSglYTYpLCVhMAkJIyBwYXNzIEFERFIxCisJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKKworCW1vdi5sCQklZDIsJWQwCQkJIyBwYXNzIG1vZGUKKwlzdAkJJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJQUREUjIoJWE2KSwlYTAJCSMgcGFzcyBBRERSMgorCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBwYWdlCisJcnRzCisKKyMjIyMjIyMjCisJZ2xvYmFsCQljcl9jYXMyCitjcl9jYXMyOgorCW1vdi5sCQlFWENfVEVNUCsweDQoJWE2KSwlZDAKKwlicmEudwkJX2NvbXBhbmRzZXQyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NvbXBhbmRzZXQoKTogcm91dGluZSB0byBlbXVsYXRlIGNhcyB3LyBtaXNhbGlnbmVkIDxlYT4JIworIwkJICAgICAgIChpbnRlcm5hbCB0byBwYWNrYWdlKQkJCQkjCisjCV9pc3BfY2FzX2ZpbmlzaCgpOiByb3V0aW5lIGNhbGxlZCB3aGVuIGNhcyBlbXVsYXRpb24gY29tcGxldGVzCSMKKyMJCQkgICAoZXh0ZXJuYWwgYW5kIGludGVybmFsIHRvIHBhY2thZ2UpCQkjCisjCV9pc3BfY2FzX3Jlc3RhcnQoKTogcmVzdGFydCBjYXMgZW11bGF0aW9uIGFmdGVyIGEgZmF1bHQJCSMKKyMJCQkgICAgKGV4dGVybmFsIHRvIHBhY2thZ2UpCQkJIworIwlfaXNwX2Nhc190ZXJtaW5hdGUoKTogY3JlYXRlIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBvbiBmYXVsdAkjCisjCQkJICAgICAgKGV4dGVybmFsIGFuZCBpbnRlcm5hbCB0byBwYWNrYWdlKQkjCisjCV9pc3BfY2FzX2lucmFuZ2UoKTogY2hlY2tzIHdoZXRoZXIgaW5zdHIgYWRkZXNzIGlzIHdpdGhpbiByYW5nZQkjCisjCQkJICAgIG9mIGNvcmUgY2FzL2NhczJlbXVsYXRpb24gY29kZQkJIworIwkJCSAgICAoZXh0ZXJuYWwgdG8gcGFja2FnZSkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfY2FsY19lYSgpOiBjYWxjdWxhdGUgZWZmZWN0aXZlIGFkZHJlc3MJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMgY29tcGFuZHNldCgpOgkJCQkJCQkJIworIwlub25lCQkJCQkJCQkjCisjIF9pc3BfY2FzX3Jlc3RhcnQoKToJCQkJCQkJIworIwlkNiA9IHByZXZpb3VzIHNmYy9kZmMJCQkJCQkjCisjIF9pc3BfY2FzX2ZpbmlzaCgpOgkJCQkJCQkjCisjIF9pc3BfY2FzX3Rlcm1pbmF0ZSgpOgkJCQkJCQkjCisjCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkJIworIwlkMCA9IEZTTFcJCQkJCQkJIworIwlkNiA9IHByZXZpb3VzIHNmYy9kZmMJCQkJCQkjCisjIF9pc3BfY2FzX2lucmFuZ2UoKToJCQkJCQkJIworIwlhMCA9IGluc3RydWN0aW9uIGFkZHJlc3MgdG8gYmUgY2hlY2tlZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIyBjb21wYW5kc2V0KCk6CQkJCQkJCQkjCisjCQlub25lCQkJCQkJCSMKKyMgX2lzcF9jYXNfcmVzdGFydCgpOgkJCQkJCQkjCisjCWEwID0gZWZmZWN0aXZlIGFkZHJlc3MJCQkJCQkjCisjCWQ3ID0gd29yZCBvciBsb25nd29yZCBmbGFnCQkJCQkjCisjIF9pc3BfY2FzX2ZpbmlzaCgpOgkJCQkJCQkjCisjCWEwID0gZWZmZWN0aXZlIGFkZHJlc3MJCQkJCQkjCisjIF9pc3BfY2FzX3Rlcm1pbmF0ZSgpOgkJCQkJCQkjCisjCWluaXRpYWwgcmVnaXN0ZXIgc2V0IGJlZm9yZSBlbXVsYXRpb24gZXhjZXB0aW9uCQkJIworIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKKyMJZDAgPSAwID0+IGluIHJhbmdlOyAtMSA9PiBvdXQgb2YgcmFuZ2UJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjIGNvbXBhbmRzZXQoKToJCQkJCQkJCSMKKyMJRmlyc3QsIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MuIFRoZW4sIGRlY29kZSB0aGUJIworIyBpbnN0cnVjdGlvbiB3b3JkIGFuZCBmZXRjaCB0aGUgImNvbXBhcmUiIChEQykgYW5kICJ1cGRhdGUiIChEdSkJIworIyBvcGVyYW5kcy4JCQkJCQkJCSMKKyMJTmV4dCwgY2FsbCB0aGUgZXh0ZXJuYWwgcm91dGluZSBfcmVhbF9sb2NrX3BhZ2UoKSBzbyB0aGF0IHRoZQkjCisjIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGtlZXAgdGhpcyBwYWdlIGZyb20gYmVpbmcgcGFnZWQgb3V0IHdoaWxlIHdlJ3JlCSMKKyMgaW4gdGhpcyByb3V0aW5lLiBJZiB0aGlzIGNhbGwgZmFpbHMsIGp1bXAgdG8gX2Nhc190ZXJtaW5hdGUyKCkuCSMKKyMJVGhlIHJvdXRpbmUgdGhlbiBicmFuY2hlcyB0byBfcmVhbF9jYXMoKS4gVGhpcyBleHRlcm5hbCByb3V0aW5lCSMKKyMgdGhhdCBhY3R1YWxseSBlbXVsYXRlcyBjYXMgY2FuIGJlIHN1cHBsaWVkIGJ5IHRoZSBleHRlcm5hbCBvcyBvcgkjCisjIG1hZGUgdG8gcG9pbnQgZGlyZWN0bHkgYmFjayBpbnRvIHRoZSAwNjBJU1Agd2hpY2ggaGFzIGEgcm91dGluZSBmb3IJIworIyB0aGlzIHB1cnBvc2UuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIworIwlFaXRoZXIgd2F5LCBhZnRlciBlbXVsYXRpb24sIHRoZSBwYWNrYWdlIGlzIHJlLWVudGVyZWQgYXQJIworIyBfaXNwX2Nhc19maW5pc2goKS4gVGhpcyByb3V0aW5lIHJlLWNvbXBhcmVzIHRoZSBvcGVyYW5kcyBpbiBvcmRlciB0bwkjCisjIHNldCB0aGUgY29uZGl0aW9uIGNvZGVzLiBGaW5hbGx5LCB0aGVzZSByb3V0aW5lcyB3aWxsIGNhbGwJCSMKKyMgX3JlYWxfdW5sb2NrX3BhZ2UoKSBpbiBvcmRlciB0byB1bmxvY2sgdGhlIHBhZ2VzIHRoYXQgd2VyZSBwcmV2aW91c2x5CSMKKyMgbG9ja2VkLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgX2lzcF9jYXNfcmVzdGFydCgpOgkJCQkJCQkjCisjCVRoaXMgcm91dGluZSBjYW4gYmUgZW50ZXJlZCBmcm9tIGFuIGFjY2VzcyBlcnJvciBoYW5kbGVyIHdoZXJlCSMKKyMgdGhlIGVtdWxhdGlvbiBzZXF1ZW5jZSBzaG91bGQgYmUgcmUtc3RhcnRlZCBmcm9tIHRoZSBiZWdpbm5pbmcuCSMKKyMJCQkJCQkJCQkjCisjIF9pc3BfY2FzX3Rlcm1pbmF0ZSgpOgkJCQkJCQkjCisjCVRoaXMgcm91dGluZSBjYW4gYmUgZW50ZXJlZCBmcm9tIGFuIGFjY2VzcyBlcnJvciBoYW5kbGVyIHdoZXJlCSMKKyMgYW4gZW11bGF0aW9uIG9wZXJhbmQgYWNjZXNzIGZhaWxlZCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd291bGQJIworIyBsaWtlIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBjcmVhdGVkIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQJIworIyB1bmltcGxlbWVudGVkIGludGVnZXIgaW5zdHJ1Y3Rpb24gZnJhbWUuCQkJCSMKKyMJQWxzbywgdGhlIHBhY2thZ2UgZW50ZXJzIGhlcmUgaWYgYSBjYWxsIHRvIF9yZWFsX2xvY2tfcGFnZSgpCSMKKyMgZmFpbHMuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKKyMJQ2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZSBpbnN0cnVjdGlvbiBhZGRyZXNzIHBhc3NlZCB0byBpdCBpbgkjCisjIGEwIGlzIHdpdGhpbiB0aGUgc29mdHdhcmUgcGFja2FnZSBjYXMvY2FzMiBlbXVsYXRpb24gcm91dGluZXMuIFRoaXMJIworIyBjYW4gYmUgaGVscGZ1bCBmb3IgYW4gb3BlcmF0aW5nIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhY2Nlc3MJIworIyBlcnJvciBkdXJpbmcgZW11bGF0aW9uIHdhcyBkdWUgdG8gYSBjYXMvY2FzMiBlbXVsYXRpb24gYWNjZXNzLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQgREMsCQlFWENfVEVNUCsweDgKK3NldCBBRERSLAlFWENfVEVNUCsweDQKKworCWdsb2JhbAkJX2NvbXBhbmRzZXQKK19jb21wYW5kc2V0OgorCWJ0c3QJCSYweDEsRVhDX09QV09SRCglYTYpCSMgd29yZCBvciBsb25nIG9wZXJhdGlvbj8KKwlibmUuYgkJY29tcGFuZHNldGwJCSMgbG9uZworCitjb21wYW5kc2V0dzoKKwltb3ZxLmwJCSYweDIsJWQwCQkjIHNpemUgPSAyIGJ5dGVzCisJYnNyLmwJCV9jYWxjX2VhCQkjIGEwID0gY2FsY3VsYXRlZCA8ZWE+CisJbW92LmwJCSVhMCxBRERSKCVhNikJCSMgc2F2ZSA8ZWE+IGZvciBwb3NzaWJsZSByZXN0YXJ0CisJc2YJCSVkNwkJCSMgY2xlYXIgZDcgZm9yIHdvcmQgc2l6ZQorCWJyYS5iCQljb21wYW5kc2V0ZmV0Y2gKKworY29tcGFuZHNldGw6CisJbW92cS5sCQkmMHg0LCVkMAkJIyBzaXplID0gNCBieXRlcworCWJzci5sCQlfY2FsY19lYQkJIyBhMCA9IGNhbGN1bGF0ZWQgPGVhPgorCW1vdi5sCQklYTAsQUREUiglYTYpCQkjIHNhdmUgPGVhPiBmb3IgcG9zc2libGUgcmVzdGFydAorCXN0CQklZDcJCQkjIHNldCBkNyBmb3IgbG9uZ3dvcmQgc2l6ZQorCitjb21wYW5kc2V0ZmV0Y2g6CisJbW92LncJCUVYQ19FWFRXT1JEKCVhNiksJWQwCSMgZmV0Y2ggY2FzIGV4dGVuc2lvbiB3b3JkCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CisKKwlsc3IudwkJJjB4NiwlZDAKKwlhbmRpLncJCSYweDcsJWQwCQkjIGV4dHJhY3QgRHUKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWQyICMgZ2V0IHVwZGF0ZSBvcGVyYW5kCisKKwlhbmRpLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRGMKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQ0ICMgZ2V0IGNvbXBhcmUgb3BlcmFuZAorCW1vdi53CQklZDEsREMoJWE2KQkJIyBzYXZlIERjCisKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQkjIHdoaWNoIG1vZGUgZm9yIGV4Y2VwdGlvbj8KKwlzbmUJCSVkNgkJCSMgc2V0IG9uIHN1cGVydmlzb3IgbW9kZQorCisJbW92LmwJCSVhMCwlYTIJCQkjIHNhdmUgdGVtcG9yYXJpbHkKKwltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCisJbW92LmwJCSVkNiwlZDAJCQkjIHBhc3MgbW9kZQorCWJzci5sCQlfcmVhbF9sb2NrX3BhZ2UJCSMgbG9jayBwYWdlCisJdHN0LmwJCSVkMAkJCSMgZGlkIGVycm9yIG9jY3VyPworCWJuZS53CQlfY2FzX3Rlcm1pbmF0ZTIJCSMgeWVzLCBjbGVhbiB1cCB0aGUgbWVzcworCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGFkZHIgaW4gYTAKKworCWJyYS5sCQlfcmVhbF9jYXMKKworIyMjIyMjIyMKKwlnbG9iYWwJCV9pc3BfY2FzX2ZpbmlzaAorX2lzcF9jYXNfZmluaXNoOgorCWJ0c3QJCSYweDEsRVhDX09QV09SRCglYTYpCisJYm5lLmIJCWNhc19maW5pc2hfbAorCisjIGp1c3QgZG8gdGhlIGNvbXBhcmUgYWdhaW4gc2luY2UgaXQncyBmYXN0ZXIgdGhhbiBzYXZpbmcgdGhlIGNjb2RlcworIyBmcm9tIHRoZSBsb2NrZWQgcm91dGluZS4uLgorY2FzX2ZpbmlzaF93OgorCW1vdi53CQlFWENfQ0MoJWE2KSwlY2MJCSMgcmVzdG9yZSBjYworCWNtcC53CQklZDAsJWQ0CQkJIyBkbyB3b3JkIGNvbXBhcmUKKwltb3YudwkJJWNjLEVYQ19DQyglYTYpCQkjIHNhdmUgY2MKKworCXRzdC5iCQklZDEJCQkjIHVwZGF0ZSBjb21wYXJlIHJlZz8KKwlibmUuYgkJY2FzX2ZpbmlzaF93X2RvbmUJIyBubworCisJbW92LncJCURDKCVhNiksJWQzCisJbW92LncJCSVkMCwoRVhDX0RSRUdTKzIsJWE2LCVkMy53KjQpICMgRGMgPSBkZXN0aW5hdGlvbgorCitjYXNfZmluaXNoX3dfZG9uZToKKwltb3YubAkJQUREUiglYTYpLCVhMAkJIyBwYXNzIGFkZHIKKwlzZgkJJWQxCQkJIyBwYXNzIHNpemUKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQorCXNuZQkJJWQwCQkJIyBwYXNzIG1vZGUKKwlic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQorCXJ0cworCisjIGp1c3QgZG8gdGhlIGNvbXBhcmUgYWdhaW4gc2luY2UgaXQncyBmYXN0ZXIgdGhhbiBzYXZpbmcgdGhlIGNjb2RlcworIyBmcm9tIHRoZSBsb2NrZWQgcm91dGluZS4uLgorY2FzX2ZpbmlzaF9sOgorCW1vdi53CQlFWENfQ0MoJWE2KSwlY2MJCSMgcmVzdG9yZSBjYworCWNtcC5sCQklZDAsJWQ0CQkJIyBkbyBsb25nd29yZCBjb21wYXJlCisJbW92LncJCSVjYyxFWENfQ0MoJWE2KQkJIyBzYXZlIGNjCisKKwl0c3QuYgkJJWQxCQkJIyB1cGRhdGUgY29tcGFyZSByZWc/CisJYm5lLmIJCWNhc19maW5pc2hfbF9kb25lCSMgbm8KKworCW1vdi53CQlEQyglYTYpLCVkMworCW1vdi5sCQklZDAsKEVYQ19EUkVHUywlYTYsJWQzLncqNCkgIyBEYyA9IGRlc3RpbmF0aW9uCisKK2Nhc19maW5pc2hfbF9kb25lOgorCW1vdi5sCQlBRERSKCVhNiksJWEwCQkjIHBhc3MgYWRkcgorCXN0CQklZDEJCQkjIHBhc3Mgc2l6ZQorCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCisJc25lCQklZDAJCQkjIHBhc3MgbW9kZQorCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBwYWdlCisJcnRzCisKKyMjIyMjIyMjCisKKwlnbG9iYWwJCV9pc3BfY2FzX3Jlc3RhcnQKK19pc3BfY2FzX3Jlc3RhcnQ6CisJbW92LmwJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgcHJldmlvdXMgc2ZjCisJbW92LmwJCSVkNiwlZGZjCQkjIHJlc3RvcmUgcHJldmlvdXMgZGZjCisKKwljbXBpLmIJCUVYQ19PUFdPUkQrMSglYTYpLCYweGZjCSMgY2FzIG9yIGNhczI/CisJYmVxLmwJCWNyX2NhczIJCQkjIGNhczIKK2NyX2NhczoKKwltb3YubAkJQUREUiglYTYpLCVhMAkJIyBsb2FkIDxlYT4KKwlidHN0CQkmMHgxLEVYQ19PUFdPUkQoJWE2KQkjIHdvcmQgb3IgbG9uZyBvcGVyYXRpb24/CisJc25lCQklZDcJCQkjIHNldCBkNyBhY2NvcmRpbmdseQorCWJyYS53CQljb21wYW5kc2V0ZmV0Y2gKKworIyMjIyMjIyMKKworIyBBdCB0aGlzIHN0YWdlLCBpdCB3b3VsZCBiZSBuaWNlIGlmIGQwIGhlbGQgdGhlIEZTTFcuCisJZ2xvYmFsCQlfaXNwX2Nhc190ZXJtaW5hdGUKK19pc3BfY2FzX3Rlcm1pbmF0ZToKKwltb3YubAkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBwcmV2aW91cyBzZmMKKwltb3YubAkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBwcmV2aW91cyBkZmMKKworCWdsb2JhbAkJX2Nhc190ZXJtaW5hdGUyCitfY2FzX3Rlcm1pbmF0ZTI6CisJbW92LmwJCSVhMCwlYTIJCQkjIGNvcHkgZmFpbGluZyBhZGRyIHRvIGEyCisKKwltb3YubAkJJWQwLC0oJXNwKQorCWJzci5sCQlpc3BfcmVzdG9yZQkJIyByZXN0b3JlIEFuIChpZiAoKSsgb3IgLSgpKQorCW1vdi5sCQkoJXNwKSssJWQwCisKKwlhZGRxLmwJCSYweDQsJXNwCQkjIHJlbW92ZSBzdWIgcmV0dXJuIGFkZHIKKwlzdWJxLmwJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgYmlnZ2VyIHN0YWNrCisJc3VicS5sCQkmMHg4LCVhNgkJIyBzaGlmdCBmcmFtZSBwdHIgZG93biwgdG9vCisJbW92LmwJCSYyNiwlZDEJCQkjIHdhbnQgdG8gbW92ZSA1MSBsb25nd29yZHMKKwlsZWEJCTB4OCglc3ApLCVhMAkJIyBnZXQgYWRkcmVzcyBvZiBvbGQgc3RhY2sKKwlsZWEJCTB4MCglc3ApLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBuZXcgc3RhY2sKK2Nhc190ZXJtX2NvbnQ6CisJbW92LmwJCSglYTApKywoJWExKSsJCSMgbW92ZSBhIGxvbmd3b3JkCisJZGJyYS53CQklZDEsY2FzX3Rlcm1fY29udAkjIGtlZXAgZ29pbmcKKworCW1vdi53CQkmMHg0MDA4LEVYQ19JVk9GRiglYTYpCSMgcHV0IG5ldyBzdGsgZm10LCB2b2ZmCisJbW92LmwJCSVhMixFWENfSVZPRkYrMHgyKCVhNikJIyBwdXQgZmF1bHRpbmcgYWRkciBvbiBzdGFjaworCW1vdi5sCQklZDAsRVhDX0lWT0ZGKzB4NiglYTYpCSMgcHV0IEZTTFcgb24gc3RhY2sKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIHVzZXIgcmVncworCXVubGsJCSVhNgkJCSMgdW5saW5rIHN0YWNrIGZyYW1lCisJYnJhLmwJCV9yZWFsX2FjY2VzcworCisjIyMjIyMjIworCisJZ2xvYmFsCQlfaXNwX2Nhc19pbnJhbmdlCitfaXNwX2Nhc19pbnJhbmdlOgorCWNsci5sCQklZDAJCQkjIGNsZWFyIHJldHVybiByZXN1bHQKKwlsZWEJCV9DQVNISSglcGMpLCVhMQkJIyBsb2FkIGVuZCBvZiBDQVMgY29yZSBjb2RlCisJY21wLmwJCSVhMSwlYTAJCQkjIGlzIFBDIGluIHJhbmdlPworCWJsdC5iCQljaW5fbm8JCQkjIG5vCisJbGVhCQlfQ0FTTE8oJXBjKSwlYTEJCSMgbG9hZCBiZWdpbiBvZiBDQVMgY29yZSBjb2RlCisJY21wLmwJCSVhMCwlYTEJCQkjIGlzIFBDIGluIHJhbmdlPworCWJsdC5iCQljaW5fbm8JCQkjIG5vCisJcnRzCQkJCQkjIHllczsgcmV0dXJuIGQwID0gMAorY2luX25vOgorCW1vdi5sCQkmLTB4MSwlZDAJCSMgb3V0IG9mIHJhbmdlOyByZXR1cm4gZDAgPSAtMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIHRoZSBjYXMgYW5kIGNhczIgImNvcmUiIGVtdWxhdGlvbiBjb2RlLgkjCisjIFRoaXMgaXMgdGhlIHNlY3Rpb24gdGhhdCBtYXkgbmVlZCB0byBiZSByZXBsYWNlZCBieSB0aGUgaG9zdAkjCisjIE9TIGlmIGl0IGlzIHRvbyBvcGVyYXRpbmcgc3lzdGVtLXNwZWNpZmljLgkJCSMKKyMgUGxlYXNlIHJlZmVyIHRvIHRoZSBwYWNrYWdlIGRvY3VtZW50YXRpb24gdG8gc2VlIGhvdyB0bwkjCisjICJyZXBsYWNlIiB0aGlzIHNlY3Rpb24sIGlmIG5lY2Vzc2FyeS4JCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICAgICAgICMjIyMjIyAgICAgICMjICAgICAgIyMjIyMjICAgICAjIyMjCisjICAgICAgICMJICAgIyAgIyAgICAgIyAgICAgICAgICMgICAgIworIwkjCSAgIyMjIyMjICAgICMjIyMjIyAgICAgICAgIworIwkjCSAgIyAgICAjICAgICAgICAgIyAgICAgICMKKyMgICAgICAgIyMjIyMjICAgICMgICAgIyAgICAjIyMjIyMgICAgIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2lzcF9jYXMyKCk6ICJjb3JlIiBlbXVsYXRpb24gY29kZSBmb3IgdGhlIGNhczIgaW5zdHJ1Y3Rpb24JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2lzcF9jYXMyX2ZpbmlzaCgpIC0gb25seSBleGl0IHBvaW50IGZvciB0aGlzIGVtdWxhdGlvbiBjb2RlOwkjCisjCQkJICAgICBkbyBjbGVhbi11cDsgY2FsY3VsYXRlIGNjb2Rlczsgc3RvcmUJIworIwkJCSAgICAgQ29tcGFyZSBPcHMgaWYgYXBwcm9wcmlhdGUuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkqc2VlIGNoYXJ0IGJlbG93KgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCSpzZWUgY2hhcnQgYmVsb3cqCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKDEpIE1ha2Ugc2V2ZXJhbCBjb3BpZXMgb2YgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLgkJIworIwkoMikgU2F2ZSBjdXJyZW50IFNSOyBUaGVuIG1hc2sgb2ZmIGFsbCBtYXNrYWJsZSBpbnRlcnJ1cHRzLgkjCisjCSgzKSBTYXZlIGN1cnJlbnQgU0ZDL0RGQyAoQVNTVU1FRCBUTyBCRSBFUVVBTCEhISk7IFRoZW4gc2V0CSMKKyMJICAgIGFjY29yZGluZyB0byB3aGV0aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiB1c2VyIG9yCQkjCisjCSAgICBzdXBlcnZpc29yIG1vZGUuCQkJCQkJIworIwkoNCkgVXNlICJwbHBhdyIgaW5zdHJ1Y3Rpb24gdG8gcHJlLWxvYWQgQVRDIHdpdGggZWZmZWN0aXZlCSMKKyMJICAgIGFkZHJlc3MgcGFnZXMocykuIFRISVMgU0hPVUxEIE5PVCBGQVVMVCEhISBUaGUgcmVsZXZhbnQJIworIwkgICAgcGFnZShzKSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZSByZXNpZGVudCBwcmlvciB0bwkjCisjCSAgICBlbnRlcmluZyB0aGlzIHJvdXRpbmUuCQkJCQkjCisjCSg1KSBQdXNoIHRoZSBvcGVyYW5kIGxpbmVzIGZyb20gdGhlIGNhY2hlIHcvICJjcHVzaGwiLgkJIworIwkgICAgSW4gdGhlIDY4MDQwLCB0aGlzIHdhcyBkb25lIHdpdGhpbiB0aGUgbG9ja2VkIHJlZ2lvbi4gSW4JIworIwkgICAgdGhlIDY4MDYwLCBpdCBpcyBkb25lIG91dHNpZGUgb2YgdGhlIGxvY2tlZCByZWdpb24uCQkjCisjCSg2KSBVc2UgInBscGFyIiBpbnN0cnVjdGlvbiB0byBkbyBhIHJlLWxvYWQgb2YgQVRDIGVudHJpZXMgZm9yCSMKKyMJICAgIEFERFIxIHNpbmNlIEFERFIyIGVudHJpZXMgbWF5IGhhdmUgcHVzaGVkIEFERFIxIG91dCBvZiB0aGUJIworIwkgICAgQVRDLgkJCQkJCQkjCisjCSg3KSBQcmUtZmV0Y2ggdGhlIGNvcmUgZW11bGF0aW9uIGluc3RydWN0aW9ucyBieSBleGVjdXRpbmcJIworIwkgICAgb25lIGJyYW5jaCB3aXRoaW4gZWFjaCBwaHlzaWNhbCBsaW5lICgxNiBieXRlcykgb2YgdGhlIGNvZGUJIworIwkgICAgYmVmb3JlIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgY29kZS4JCQkJIworIwkoOCkgTG9hZCB0aGUgQlVTQ1Igdy8gdGhlIGJ1cyBsb2NrIHZhbHVlLgkJCSMKKyMJKDkpIEZldGNoIHRoZSBzb3VyY2Ugb3BlcmFuZHMgdXNpbmcgIm1vdmVzIi4JCQkjCisjCSgxMClEbyB0aGUgY29tcGFyZXMuIElmIGJvdGggZXF1YWwsIGdvIHRvIHN0ZXAgKDEzKS4JCSMKKyMJKDExKVVuZXF1YWwuIE5vIHVwZGF0ZSBvY2N1cnMuIEJ1dCwgd2UgZG8gd3JpdGUgdGhlIERTVDEgb3AJIworIwkgICAgYmFjayB0byBpdHNlbGYgKGFzIHcvIHRoZSAnMDQwKSBzbyB3ZSBjYW4gZ3JhY2VmdWxseSB1bmxvY2sJIworIwkgICAgdGhlIGJ1cyAoYW5kIGFzc2VydCBMT0NLRSopIHVzaW5nIEJVU0NSIGFuZCB0aGUgZmluYWwgbW92ZS4JIworIwkoMTIpRXhpdC4JCQkJCQkJIworIwkoMTMpV3JpdGUgdXBkYXRlIG9wZXJhbmQgdG8gdGhlIERTVCBsb2NhdGlvbnMuIFVzZSBCVVNDUiB0bwkjCisjCSAgICBhc3NlcnQgTE9DS0UqIGZvciB0aGUgZmluYWwgd3JpdGUgb3BlcmF0aW9uLgkJIworIwkoMTQpRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhlIGFsZ29yaXRobSBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBzbGlnaHRseSBkaWZmZXJlbnRseQkjCisjIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgb3BlcmF0aW9uIGFuZCB0aGUgbWlzYWxpZ25tZW50IG9mIHRoZQkjCisjIG9wZXJhbmRzLiBBIG1pc2FsaWduZWQgb3BlcmFuZCBtdXN0IGJlIHdyaXR0ZW4gaW4gYWxpZ25lZCBjaHVua3Mgb3IJIworIyBlbHNlIHRoZSBCVVNDUiByZWdpc3RlciBjb250cm9sIGdldHMgY29uZnVzZWQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEhJUyBJUyBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCQkjCisjIEVOVEVSSU5HIF9pc3BfY2FzMigpLgkJCQkJCSMKKyMJCQkJCQkJCSMKKyMgRDAgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQxID0geHh4eHh4eHgJCQkJCQkJIworIyBEMiA9IGNtcCBvcGVyYW5kIDEJCQkJCQkjCisjIEQzID0gY21wIG9wZXJhbmQgMgkJCQkJCSMKKyMgRDQgPSB1cGRhdGUgb3BlciAxCQkJCQkJIworIyBENSA9IHVwZGF0ZSBvcGVyIDIJCQkJCQkjCisjIEQ2ID0gJ3h4eHh4eGZmIGlmIHN1cGVydmlzb3IgbW9kZTsgJ3h4eHh4eDAwIGlmIHVzZXIgbW9kZQkjCisjIEQ3ID0gJ3h4eHh4eGZmIGlmIGxvbmd3b3JkIG9wZXJhdGlvbjsgJ3h4eHh4eDAwIGlmIHdvcmQJIworIyBBMCA9IEFERFIxCQkJCQkJCSMKKyMgQTEgPSBBRERSMgkJCQkJCQkjCisjIEEyID0geHh4eHh4eHgJCQkJCQkJIworIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTQgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE1ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCisjIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMJYWxpZ24JCTB4MTAwMAorIyBiZWdpbm5pbmcgbGFiZWwgdXNlZCBieSBfaXNwX2Nhc19pbnJhbmdlKCkKKwlnbG9iYWwJCV9DQVNMTworX0NBU0xPOgorCisJZ2xvYmFsCQlfaXNwX2NhczIKK19pc3BfY2FzMjoKKwl0c3QuYgkJJWQ2CQkJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KKwlibmUuYgkJY2FzMl9zdXBlcnZpc29yCQkjIHN1cGVydmlzb3IKK2NhczJfdXNlcjoKKwltb3ZxLmwJCSYweDEsJWQwCQkjIGxvYWQgdXNlciBkYXRhIGZjCisJYnJhLmIJCWNhczJfY29udAorY2FzMl9zdXBlcnZpc29yOgorCW1vdnEubAkJJjB4NSwlZDAJCSMgbG9hZCBzdXBlcnZpc29yIGRhdGEgZmMKK2NhczJfY29udDoKKwl0c3QuYgkJJWQ3CQkJIyB3b3JkIG9yIGxvbmd3b3JkPworCWJlcS53CQljYXMydwkJCSMgd29yZAorCisjIyMjCitjYXMybDoKKwltb3YubAkJJWEwLCVhMgkJCSMgY29weSBBRERSMQorCW1vdi5sCQklYTEsJWEzCQkJIyBjb3B5IEFERFIyCisJbW92LmwJCSVhMCwlYTQJCQkjIGNvcHkgQUREUjEKKwltb3YubAkJJWExLCVhNQkJCSMgY29weSBBRERSMgorCisJYWRkcS5sCQkmMHgzLCVhNAkJIyBBRERSMSszCisJYWRkcS5sCQkmMHgzLCVhNQkJIyBBRERSMiszCisJbW92LmwJCSVhMiwlZDEJCQkjIEFERFIxCisKKyMgbWFzayBpbnRlcnJ1cHRzIGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCisJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgorCW9yaS53CQkmMHgwNzAwLCVzcgkJIyBpbmhpYml0IGludGVycnVwdHMKKworIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCW1vdmMJCSVzZmMsJWQ2CQkjIHNhdmUgb2xkIFNGQy9ERkMKKwltb3ZjCQklZDAsJXNmYwkJIyBzdG9yZSBuZXcgU0ZDCisJbW92YwkJJWQwLCVkZmMJCSMgc3RvcmUgbmV3IERGQworCisjIHByZS1sb2FkIHRoZSBvcGVyYW5kIEFUQy4gbm8gcGFnZSBmYXVsdHMgc2hvdWxkIG9jY3VyIGhlcmUgYmVjYXVzZQorIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCisJcGxwYXcJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjEKKwlwbHBhdwkJKCVhNCkJCQkjIGxvYWQgYXRjIGZvciBBRERSMSszCisJcGxwYXcJCSglYTMpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjIKKwlwbHBhdwkJKCVhNSkJCQkjIGxvYWQgYXRjIGZvciBBRERSMiszCisKKyMgcHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgorCWNwdXNobAkJJWRjLCglYTIpCQkjIHB1c2ggbGluZSBmb3IgQUREUjEKKwljcHVzaGwJCSVkYywoJWE0KQkJIyBwdXNoIGxpbmUgZm9yIEFERFIxKzMKKwljcHVzaGwJCSVkYywoJWEzKQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyCisJY3B1c2hsCQklZGMsKCVhNSkJCSMgcHVzaCBsaW5lIGZvciBBRERSMisyCisKKwltb3YubAkJJWQxLCVhMgkJCSMgQUREUjEKKwlhZGRxLmwJCSYweDMsJWQxCisJbW92LmwJCSVkMSwlYTQJCQkjIEFERFIxKzMKKyMgaWYgQUREUjEgd2FzIEFUQyByZXNpZGVudCBiZWZvcmUgdGhlIGFib3ZlICJwbHBhdyIgYW5kIHdhcyBleGVjdXRlZAorIyBhbmQgaXQgd2FzIHRoZSBuZXh0IGVudHJ5IHNjaGVkdWxlZCBmb3IgcmVwbGFjZW1lbnQgYW5kIEFERFIyCisjIHNoYXJlcyB0aGUgc2FtZSBzZXQsIHRoZW4gdGhlICJwbHBhdyIgZm9yIEFERFIyIGNhbiBwdXNoIHRoZSBBRERSMQorIyBlbnRyaWVzIGZyb20gdGhlIEFUQy4gc28sIHdlIGRvIGEgc2Vjb25kIHNldCBvZiAicGxwYSJzLgorCXBscGFyCQkoJWEyKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxCisJcGxwYXIJCSglYTQpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjErMworCisjIGxvYWQgdGhlIEJVU0NSIHZhbHVlcy4KKwltb3YubAkJJjB4ODAwMDAwMDAsJWEyCQkjIGFzc2VydCBMT0NLKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTMJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlYTQJCSMgYnVzY3IgdW5sb2NrIHZhbHVlCisKKyMgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIG1pcy1hbGlnbmVkIGNhc2VzIGZvciBsb25nd29yZCBjYXMuIHRoZXkKKyMgYXJlIHNlcGFyYXRlZCBiZWNhdXNlIHRoZSBmaW5hbCB3cml0ZSB3aGljaCBhc3NlcnRzIExPQ0tFKiBtdXN0CisjIGJlIGFsaWduZWQuCisJbW92LmwJCSVhMCwlZDAJCQkjIGlzIEFERFIxIG1pc2FsaWduZWQ/CisJYW5kaS5iCQkmMHgzLCVkMAorCWJlcS5iCQlDQVMyTF9FTlRFUgkJIyBubworCWNtcGkuYgkJJWQwLCYweDIKKwliZXEudwkJQ0FTMkwyX0VOVEVSCQkjIHllczsgd29yZCBtaXNhbGlnbmVkCisJYnJhLncJCUNBUzJMM19FTlRFUgkJIyB5ZXM7IGJ5dGUgbWlzYWxpZ25lZAorCisjCisjIEQwID0gZHN0IG9wZXJhbmQgMSA8LQorIyBEMSA9IGRzdCBvcGVyYW5kIDIgPC0KKyMgRDIgPSBjbXAgb3BlcmFuZCAxCisjIEQzID0gY21wIG9wZXJhbmQgMgorIyBENCA9IHVwZGF0ZSBvcGVyIDEKKyMgRDUgPSB1cGRhdGUgb3BlciAyCisjIEQ2ID0gb2xkIFNGQy9ERkMKKyMgRDcgPSBvbGQgU1IKKyMgQTAgPSBBRERSMQorIyBBMSA9IEFERFIyCisjIEEyID0gYnVzIExPQ0sqICB2YWx1ZQorIyBBMyA9IGJ1cyBMT0NLRSogdmFsdWUKKyMgQTQgPSBidXMgdW5sb2NrIHZhbHVlCisjIEE1ID0geHh4eHh4eHgKKyMKKwlhbGlnbgkJMHgxMAorQ0FTMkxfU1RBUlQ6CisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKKwltb3ZzLmwJCSglYTEpLCVkMQkJIyBmZXRjaCBEZXN0MlszMTowXQorCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzMxOjBdCisJYnJhLmIJCUNBUzJMX0NPTlQKK0NBUzJMX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBUzJMX0NPTlQ6CisJY21wLmwJCSVkMCwlZDIJCQkjIERlc3QxIC0gQ29tcGFyZTEKKwlibmUuYgkJQ0FTMkxfTk9VUERBVEUKKwljbXAubAkJJWQxLCVkMwkJCSMgRGVzdDIgLSBDb21wYXJlMgorCWJuZS5iCQlDQVMyTF9OT1VQREFURQorCW1vdnMubAkJJWQ1LCglYTEpCQkjIFVwZGF0ZTJbMzE6MF0gLT4gREVTVDIKKwlicmEuYgkJQ0FTMkxfVVBEQVRFCisJYnJhLmIJCX4rMTYKKworQ0FTMkxfVVBEQVRFOgorCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMubAkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbMzE6MF0gLT4gREVTVDEKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLmIJCWNhczJsX3VwZGF0ZV9kb25lCisJYnJhLmIJCX4rMTYKKworQ0FTMkxfTk9VUERBVEU6CisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJbW92cy5sCQklZDAsKCVhMCkJCSMgRGVzdDFbMzE6MF0gLT4gREVTVDEKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLmIJCWNhczJsX25vdXBkYXRlX2RvbmUKKwlicmEuYgkJfisxNgorCitDQVMyTF9GSUxMRVI6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCUNBUzJMX1NUQVJUCisKKyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEhJUyBNVVNUIEJFIFRIRSBTVEFURSBPRiBUSEUgSU5URUdFUiBSRUdJU1RFUiBGSUxFIFVQT04JIworIyBFTlRFUklORyBfaXNwX2NhczIoKS4JCQkJCQkjCisjCQkJCQkJCQkjCisjIEQwID0gZGVzdGluYXRpb25bMzE6MF0gb3BlcmFuZCAxCQkJCSMKKyMgRDEgPSBkZXN0aW5hdGlvblszMTowXSBvcGVyYW5kIDIJCQkJIworIyBEMiA9IGNtcFszMTowXSBvcGVyYW5kIDEJCQkJCSMKKyMgRDMgPSBjbXBbMzE6MF0gb3BlcmFuZCAyCQkJCQkjCisjIEQ0ID0gJ3h4eHh4eDExIC0+IG5vIHJlZyB1cGRhdGU7ICd4eHh4eHgwMCAtPiB1cGRhdGUgcmVxdWlyZWQJIworIyBENSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDYgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ3ID0geHh4eHh4eHgJCQkJCQkJIworIyBBMCA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTEgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEyID0geHh4eHh4eHgJCQkJCQkJIworIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTQgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE1ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCisjIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NhczJsX25vdXBkYXRlX2RvbmU6CisKKyMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgorCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQworCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQworCisjIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzZgkJJWQ0CQkJIyBpbmRpY2F0ZSBubyB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAorCitjYXMybF91cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXN0CQklZDQJCQkjIGluZGljYXRlIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2NhczJfZmluaXNoCisjIyMjCisKKwlhbGlnbgkJMHgxMAorQ0FTMkwyX1NUQVJUOgorCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCisJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KKwltb3ZzLmwJCSglYTApLCVkMAkJIyBmZXRjaCBEZXN0MVszMTowXQorCWJyYS5iCQlDQVMyTDJfQ09OVAorQ0FTMkwyX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBUzJMMl9DT05UOgorCWNtcC5sCQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCisJYm5lLmIJCUNBUzJMMl9OT1VQREFURQorCWNtcC5sCQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCisJYm5lLmIJCUNBUzJMMl9OT1VQREFURQorCW1vdnMubAkJJWQ1LCglYTEpCQkjIFVwZGF0ZTJbMzE6MF0gLT4gRGVzdDIKKwlicmEuYgkJQ0FTMkwyX1VQREFURQorCWJyYS5iCQl+KzE2CisKK0NBUzJMMl9VUERBVEU6CisJc3dhcAkJJWQ0CQkJIyBnZXQgVXBkYXRlMVszMToxNl0KKwltb3ZzLncJCSVkNCwoJWEwKSsJCSMgVXBkYXRlMVszMToxNl0gLT4gREVTVDEKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlzd2FwCQklZDQJCQkjIGdldCBVcGRhdGUxWzE1OjBdCisJYnJhLmIJCUNBUzJMMl9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTMkwyX1VQREFURTI6CisJbW92cy53CQklZDQsKCVhMCkJCSMgVXBkYXRlMVsxNTowXSAtPiBERVNUMSsweDIKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJsX3VwZGF0ZV9kb25lCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMkwyX05PVVBEQVRFOgorCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3QxWzMxOjE2XQorCW1vdnMudwkJJWQwLCglYTApKwkJIyBEZXN0MVszMToxNl0gLT4gREVTVDEKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlzd2FwCQklZDAJCQkjIGdldCBEZXN0MVsxNTowXQorCWJyYS5iCQlDQVMyTDJfTk9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTMkwyX05PVVBEQVRFMjoKKwltb3ZzLncJCSVkMCwoJWEwKQkJIyBEZXN0MVsxNTowXSAtPiBERVNUMSsweDIKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJsX25vdXBkYXRlX2RvbmUKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVMyTDJfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQlDQVMyTDJfU1RBUlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlhbGlnbgkJMHgxMAorQ0FTMkwzX1NUQVJUOgorCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCisJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KKwltb3ZzLmwJCSglYTApLCVkMAkJIyBmZXRjaCBEZXN0MVszMTowXQorCWJyYS5iCQlDQVMyTDNfQ09OVAorQ0FTMkwzX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBUzJMM19DT05UOgorCWNtcC5sCQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCisJYm5lLmIJCUNBUzJMM19OT1VQREFURQorCWNtcC5sCQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCisJYm5lLmIJCUNBUzJMM19OT1VQREFURQorCW1vdnMubAkJJWQ1LCglYTEpCQkjIFVwZGF0ZTJbMzE6MF0gLT4gREVTVDIKKwlicmEuYgkJQ0FTMkwzX1VQREFURQorCWJyYS5iCQl+KzE2CisKK0NBUzJMM19VUERBVEU6CisJcm9sLmwJCSYweDgsJWQ0CQkjIGdldCBVcGRhdGUxWzMxOjI0XQorCW1vdnMuYgkJJWQ0LCglYTApKwkJIyBVcGRhdGUxWzMxOjI0XSAtPiBERVNUMQorCXN3YXAJCSVkNAkJCSMgZ2V0IFVwZGF0ZTFbMjM6OF0KKwltb3ZzLncJCSVkNCwoJWEwKSsJCSMgVXBkYXRlMVsyMzo4XSAtPiBERVNUMSsweDEKKwlicmEuYgkJQ0FTMkwzX1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVMyTDNfVVBEQVRFMjoKKwlyb2wubAkJJjB4OCwlZDQJCSMgZ2V0IFVwZGF0ZTFbNzowXQorCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMuYgkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbNzowXSAtPiBERVNUMSsweDMKKwlicmEuYgkJQ0FTMkwzX1VQREFURTMKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVMyTDNfVVBEQVRFMzoKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJsX3VwZGF0ZV9kb25lCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMkwzX05PVVBEQVRFOgorCXJvbC5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdDFbMzE6MjRdCisJbW92cy5iCQklZDAsKCVhMCkrCQkjIERlc3QxWzMxOjI0XSAtPiBERVNUMQorCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3QxWzIzOjhdCisJbW92cy53CQklZDAsKCVhMCkrCQkjIERlc3QxWzIzOjhdIC0+IERFU1QxKzB4MQorCWJyYS5iCQlDQVMyTDNfTk9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTMkwzX05PVVBEQVRFMjoKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3QxWzc6MF0KKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLmIJCSVkMCwoJWEwKQkJIyBVcGRhdGUxWzc6MF0gLT4gREVTVDErMHgzCisJYnJhLmIJCUNBUzJMM19OT1VQREFURTMKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVMyTDNfTk9VUERBVEUzOgorCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEudwkJY2FzMmxfbm91cGRhdGVfZG9uZQorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQl+KzE0CisKK0NBUzJMM19GSUxMRVI6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLncJCUNBUzJMM19TVEFSVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NhczJ3OgorCW1vdi5sCQklYTAsJWEyCQkJIyBjb3B5IEFERFIxCisJbW92LmwJCSVhMSwlYTMJCQkjIGNvcHkgQUREUjIKKwltb3YubAkJJWEwLCVhNAkJCSMgY29weSBBRERSMQorCW1vdi5sCQklYTEsJWE1CQkJIyBjb3B5IEFERFIyCisKKwlhZGRxLmwJCSYweDEsJWE0CQkjIEFERFIxKzEKKwlhZGRxLmwJCSYweDEsJWE1CQkjIEFERFIyKzEKKwltb3YubAkJJWEyLCVkMQkJCSMgQUREUjEKKworIyBtYXNrIGludGVycnVwdCBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgorCW1vdi53CQklc3IsJWQ3CQkJIyBzYXZlIGN1cnJlbnQgU1IKKwlvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCisKKyMgbG9hZCB0aGUgU0ZDIGFuZCBERkMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKwltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCisJbW92YwkJJWQwLCVzZmMJCSMgc3RvcmUgbmV3IFNGQworCW1vdmMJCSVkMCwlZGZjCQkjIHN0b3JlIG5ldyBERkMKKworIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBiZWNhdXNlCisjIF9yZWFsX2xvY2tfcGFnZSgpIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhpcy4KKwlwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSMQorCXBscGF3CQkoJWE0KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxKzEKKwlwbHBhdwkJKCVhMykJCQkjIGxvYWQgYXRjIGZvciBBRERSMgorCXBscGF3CQkoJWE1KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIyKzEKKworIyBwdXNoIHRoZSBvcGVyYW5kIGNhY2hlIGxpbmVzIGZyb20gdGhlIGNhY2hlIGlmIHRoZXkgZXhpc3QuCisJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBsaW5lIGZvciBBRERSMQorCWNwdXNobAkJJWRjLCglYTQpCQkjIHB1c2ggbGluZSBmb3IgQUREUjErMQorCWNwdXNobAkJJWRjLCglYTMpCQkjIHB1c2ggbGluZSBmb3IgQUREUjIKKwljcHVzaGwJCSVkYywoJWE1KQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyKzEKKworCW1vdi5sCQklZDEsJWEyCQkJIyBBRERSMQorCWFkZHEubAkJJjB4MywlZDEKKwltb3YubAkJJWQxLCVhNAkJCSMgQUREUjErMworIyBpZiBBRERSMSB3YXMgQVRDIHJlc2lkZW50IGJlZm9yZSB0aGUgYWJvdmUgInBscGF3IiBhbmQgd2FzIGV4ZWN1dGVkCisjIGFuZCBpdCB3YXMgdGhlIG5leHQgZW50cnkgc2NoZWR1bGVkIGZvciByZXBsYWNlbWVudCBhbmQgQUREUjIKKyMgc2hhcmVzIHRoZSBzYW1lIHNldCwgdGhlbiB0aGUgInBscGF3IiBmb3IgQUREUjIgY2FuIHB1c2ggdGhlIEFERFIxCisjIGVudHJpZXMgZnJvbSB0aGUgQVRDLiBzbywgd2UgZG8gYSBzZWNvbmQgc2V0IG9mICJwbHBhInMuCisJcGxwYXIJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjEKKwlwbHBhcgkJKCVhNCkJCQkjIGxvYWQgYXRjIGZvciBBRERSMSszCisKKyMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlYTIJCSMgYXNzZXJ0IExPQ0sqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweGEwMDAwMDAwLCVhMwkJIyBhc3NlcnQgTE9DS0UqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweDAwMDAwMDAwLCVhNAkJIyBidXNjciB1bmxvY2sgdmFsdWUKKworIyB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIG1pcy1hbGlnbmVkIGNhc2VzIGZvciB3b3JkIGNhcy4gdGhleQorIyBhcmUgc2VwYXJhdGVkIGJlY2F1c2UgdGhlIGZpbmFsIHdyaXRlIHdoaWNoIGFzc2VydHMgTE9DS0UqIG11c3QKKyMgYmUgYWxpZ25lZC4KKwltb3YubAkJJWEwLCVkMAkJCSMgaXMgQUREUjEgbWlzYWxpZ25lZD8KKwlidHN0CQkmMHgwLCVkMAorCWJuZS53CQlDQVMyVzJfRU5URVIJCSMgeWVzCisJYnJhLmIJCUNBUzJXX0VOVEVSCQkjIG5vCisKKyMKKyMgRDAgPSBkc3Qgb3BlcmFuZCAxIDwtCisjIEQxID0gZHN0IG9wZXJhbmQgMiA8LQorIyBEMiA9IGNtcCBvcGVyYW5kIDEKKyMgRDMgPSBjbXAgb3BlcmFuZCAyCisjIEQ0ID0gdXBkYXRlIG9wZXIgMQorIyBENSA9IHVwZGF0ZSBvcGVyIDIKKyMgRDYgPSBvbGQgU0ZDL0RGQworIyBENyA9IG9sZCBTUgorIyBBMCA9IEFERFIxCisjIEExID0gQUREUjIKKyMgQTIgPSBidXMgTE9DSyogIHZhbHVlCisjIEEzID0gYnVzIExPQ0tFKiB2YWx1ZQorIyBBNCA9IGJ1cyB1bmxvY2sgdmFsdWUKKyMgQTUgPSB4eHh4eHh4eAorIworCWFsaWduCQkweDEwCitDQVMyV19TVEFSVDoKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMudwkJKCVhMSksJWQxCQkjIGZldGNoIERlc3QyWzE1OjBdCisJbW92cy53CQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdDFbMTU6MF0KKwlicmEuYgkJQ0FTMldfQ09OVDIKK0NBUzJXX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBUzJXX0NPTlQyOgorCWNtcC53CQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCisJYm5lLmIJCUNBUzJXX05PVVBEQVRFCisJY21wLncJCSVkMSwlZDMJCQkjIERlc3QyIC0gQ29tcGFyZTIKKwlibmUuYgkJQ0FTMldfTk9VUERBVEUKKwltb3ZzLncJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzE1OjBdIC0+IERFU1QyCisJYnJhLmIJCUNBUzJXX1VQREFURQorCWJyYS5iCQl+KzE2CisKK0NBUzJXX1VQREFURToKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLncJCSVkNCwoJWEwKQkJIyBVcGRhdGUxWzE1OjBdIC0+IERFU1QxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXMyd191cGRhdGVfZG9uZQorCWJyYS5iCQl+KzE2CisKK0NBUzJXX05PVVBEQVRFOgorCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMudwkJJWQwLCglYTApCQkjIERlc3QxWzE1OjBdIC0+IERFU1QxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXMyd19ub3VwZGF0ZV9kb25lCisJYnJhLmIJCX4rMTYKKworQ0FTMldfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQlDQVMyV19TVEFSVAorCisjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRISVMgTVVTVCBCRSBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKKyMgRU5URVJJTkcgX2lzcF9jYXMyKCkuCQkJCQkJIworIwkJCQkJCQkJIworIyBEMCA9IGRlc3RpbmF0aW9uWzE1OjBdIG9wZXJhbmQgMQkJCQkjCisjIEQxID0gZGVzdGluYXRpb25bMTU6MF0gb3BlcmFuZCAyCQkJCSMKKyMgRDIgPSBjbXBbMTU6MF0gb3BlcmFuZCAxCQkJCQkjCisjIEQzID0gY21wWzE1OjBdIG9wZXJhbmQgMgkJCQkJIworIyBENCA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKKyMgRDUgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ2ID0geHh4eHh4eHgJCQkJCQkJIworIyBENyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTAgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEExID0geHh4eHh4eHgJCQkJCQkJIworIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTMgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE0ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkJIworIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjYXMyd19ub3VwZGF0ZV9kb25lOgorCisjIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KKwltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKKwltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKKworIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgorCW1vdi53CQklZDcsJXNyCQkJIyByZXN0b3JlIG9sZCBTUgorCisJc2YJCSVkNAkJCSMgaW5kaWNhdGUgbm8gdXBkYXRlIHdhcyBkb25lCisJYnJhLmwJCV9pc3BfY2FzMl9maW5pc2gKKworY2FzMndfdXBkYXRlX2RvbmU6CisKKyMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgorCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQworCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQworCisjIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzdAkJJWQ0CQkJIyBpbmRpY2F0ZSB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAorIyMjIworCisJYWxpZ24JCTB4MTAKK0NBUzJXMl9TVEFSVDoKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMudwkJKCVhMSksJWQxCQkjIGZldGNoIERlc3QyWzE1OjBdCisJbW92cy53CQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdDFbMTU6MF0KKwlicmEuYgkJQ0FTMlcyX0NPTlQyCitDQVMyVzJfRU5URVI6CisJYnJhLmIJCX4rMTYKKworQ0FTMlcyX0NPTlQyOgorCWNtcC53CQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCisJYm5lLmIJCUNBUzJXMl9OT1VQREFURQorCWNtcC53CQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCisJYm5lLmIJCUNBUzJXMl9OT1VQREFURQorCW1vdnMudwkJJWQ1LCglYTEpCQkjIFVwZGF0ZTJbMTU6MF0gLT4gREVTVDIKKwlicmEuYgkJQ0FTMlcyX1VQREFURQorCWJyYS5iCQl+KzE2CisKK0NBUzJXMl9VUERBVEU6CisJcm9yLmwJCSYweDgsJWQ0CQkjIGdldCBVcGRhdGUxWzE1OjhdCisJbW92cy5iCQklZDQsKCVhMCkrCQkjIFVwZGF0ZTFbMTU6OF0gLT4gREVTVDEKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlyb2wubAkJJjB4OCwlZDQJCSMgZ2V0IFVwZGF0ZTFbNzowXQorCWJyYS5iCQlDQVMyVzJfVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBUzJXMl9VUERBVEUyOgorCW1vdnMuYgkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbNzowXSAtPiBERVNUMSsweDEKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJ3X3VwZGF0ZV9kb25lCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMlcyX05PVVBEQVRFOgorCXJvci5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdDFbMTU6OF0KKwltb3ZzLmIJCSVkMCwoJWEwKSsJCSMgRGVzdDFbMTU6OF0gLT4gREVTVDEKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3QxWzc6MF0KKwlicmEuYgkJQ0FTMlcyX05PVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBUzJXMl9OT1VQREFURTI6CisJbW92cy5iCQklZDAsKCVhMCkJCSMgRGVzdDFbNzowXSAtPiBERVNUMSsweDEKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJ3X25vdXBkYXRlX2RvbmUKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVMyVzJfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQlDQVMyVzJfU1RBUlQKKworIyAgICAgICAjIyMjIyMgICAgICAjIyAgICAgICMjIyMjIworIyAgICAgICAjCSAgICMgICMgICAgICMKKyMJIwkgICMjIyMjIyAgICAjIyMjIyMKKyMJIwkgICMgICAgIyAgICAgICAgICMKKyMgICAgICAgIyMjIyMjICAgICMgICAgIyAgICAjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaXNwX2NhcygpOiAiY29yZSIgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBjYXMgaW5zdHJ1Y3Rpb24JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2lzcF9jYXNfZmluaXNoKCkgLSBvbmx5IGV4aXQgcG9pbnQgZm9yIHRoaXMgZW11bGF0aW9uIGNvZGU7CSMKKyMJCQkgICAgZG8gY2xlYW4tdXAJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCSpzZWUgZW50cnkgY2hhcnQgYmVsb3cqCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKnNlZSBleGl0IGNoYXJ0IGJlbG93KgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCSgxKSBNYWtlIHNldmVyYWwgY29waWVzIG9mIHRoZSBlZmZlY3RpdmUgYWRkcmVzcy4JCSMKKyMJKDIpIFNhdmUgY3VycmVudCBTUjsgVGhlbiBtYXNrIG9mZiBhbGwgbWFza2FibGUgaW50ZXJydXB0cy4JIworIwkoMykgU2F2ZSBjdXJyZW50IERGQy9TRkMgKEFTU1VNRUQgVE8gQkUgRVFVQUwhISEpOyBUaGVuIHNldAkjCisjCSAgICBTRkMvREZDIGFjY29yZGluZyB0byB3aGV0aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiB1c2VyIG9yCSMKKyMJICAgIHN1cGVydmlzb3IgbW9kZS4JCQkJCQkjCisjCSg0KSBVc2UgInBscGF3IiBpbnN0cnVjdGlvbiB0byBwcmUtbG9hZCBBVEMgd2l0aCBlZmVjdGl2ZQkjCisjCSAgICBhZGRyZXNzIHBhZ2UocykuIFRISVMgU0hPVUxEIE5PVCBGQVVMVCEhISBUaGUgcmVsZXZhbnQJIworIwkgICAgcGFnZShzKSBzaG91bGQgaGF2ZSBiZWVuIG1hZGUgcmVzaWRlbnQgcHJpb3IgdG8gZW50ZXJpbmcJIworIwkgICAgdGhpcyByb3V0aW5lLgkJCQkJCSMKKyMJKDUpIFB1c2ggdGhlIG9wZXJhbmQgbGluZXMgZnJvbSB0aGUgY2FjaGUgdy8gImNwdXNobCIuCQkjCisjCSAgICBJbiB0aGUgNjgwNDAsIHRoaXMgd2FzIGRvbmUgd2l0aGluIHRoZSBsb2NrZWQgcmVnaW9uLiBJbgkjCisjCSAgICB0aGUgNjgwNjAsIGl0IGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgbG9ja2VkIHJlZ2lvbi4JCSMKKyMJKDYpIFByZS1mZXRjaCB0aGUgY29yZSBlbXVsYXRpb24gaW5zdHJ1Y3Rpb25zIGJ5IGV4ZWN1dGluZyBvbmUJIworIwkgICAgYnJhbmNoIHdpdGhpbiBlYWNoIHBoeXNpY2FsIGxpbmUgKDE2IGJ5dGVzKSBvZiB0aGUgY29kZQkjCisjCSAgICBiZWZvcmUgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjb2RlLgkJCQkjCisjCSg3KSBMb2FkIHRoZSBCVVNDUiB3aXRoIHRoZSBidXMgbG9jayB2YWx1ZS4JCQkjCisjCSg4KSBGZXRjaCB0aGUgc291cmNlIG9wZXJhbmQuCQkJCQkjCisjCSg5KSBEbyB0aGUgY29tcGFyZS4gSWYgZXF1YWwsIGdvIHRvIHN0ZXAgKDEyKS4JCQkjCisjCSgxMClVbmVxdWFsLiBObyB1cGRhdGUgb2NjdXJzLiBCdXQsIHdlIGRvIHdyaXRlIHRoZSBEU1Qgb3AgYmFjawkjCisjCSAgICB0byBpdHNlbGYgKGFzIHcvIHRoZSAnMDQwKSBzbyB3ZSBjYW4gZ3JhY2VmdWxseSB1bmxvY2sJIworIwkgICAgdGhlIGJ1cyAoYW5kIGFzc2VydCBMT0NLRSopIHVzaW5nIEJVU0NSIGFuZCB0aGUgZmluYWwgbW92ZS4JIworIwkoMTEpRXhpdC4JCQkJCQkJIworIwkoMTIpV3JpdGUgdXBkYXRlIG9wZXJhbmQgdG8gdGhlIERTVCBsb2NhdGlvbi4gVXNlIEJVU0NSIHRvCSMKKyMJICAgIGFzc2VydCBMT0NLRSogZm9yIHRoZSBmaW5hbCB3cml0ZSBvcGVyYXRpb24uCQkjCisjCSgxMylFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlUaGUgYWxnb3JpdGhtIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIHNsaWdodGx5IGRpZmZlcmVudGx5CSMKKyMgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBvcGVyYXRpb24gYW5kIHRoZSBtaXNhbGlnbm1lbnQgb2YgdGhlCSMKKyMgb3BlcmFuZC4gQSBtaXNhbGlnbmVkIG9wZXJhbmQgbXVzdCBiZSB3cml0dGVuIGluIGFsaWduZWQgY2h1bmtzIG9yCSMKKyMgZWxzZSB0aGUgQlVTQ1IgcmVnaXN0ZXIgY29udHJvbCBnZXRzIGNvbmZ1c2VkLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUSElTIElTIFRIRSBTVEFURSBPRiBUSEUgSU5URUdFUiBSRUdJU1RFUiBGSUxFIFVQT04JIworIyBFTlRFUklORyBfaXNwX2NhcygpLgkJCQkJIworIwkJCQkJCQkjCisjIEQwID0geHh4eHh4eHgJCQkJCQkjCisjIEQxID0geHh4eHh4eHgJCQkJCQkjCisjIEQyID0gdXBkYXRlIG9wZXJhbmQJCQkJCSMKKyMgRDMgPSB4eHh4eHh4eAkJCQkJCSMKKyMgRDQgPSBjb21wYXJlIG9wZXJhbmQJCQkJCSMKKyMgRDUgPSB4eHh4eHh4eAkJCQkJCSMKKyMgRDYgPSBzdXBlcnZpc29yICgneHh4eHh4ZmYpIG9yIHVzZXIgbW9kZSAoJ3h4eHh4eDAwKQkjCisjIEQ3ID0gbG9uZ3dvcmQgKCd4eHh4eHhmZikgb3Igd29yZCBzaXplICgneHh4eHh4MDApCSMKKyMgQTAgPSBBRERSCQkJCQkJIworIyBBMSA9IHh4eHh4eHh4CQkJCQkJIworIyBBMiA9IHh4eHh4eHh4CQkJCQkJIworIyBBMyA9IHh4eHh4eHh4CQkJCQkJIworIyBBNCA9IHh4eHh4eHh4CQkJCQkJIworIyBBNSA9IHh4eHh4eHh4CQkJCQkJIworIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCSMKKyMgQTcgPSBzdGFjayBwb2ludGVyCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2lzcF9jYXMKK19pc3BfY2FzOgorCXRzdC5iCQklZDYJCQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPworCWJuZS5iCQljYXNfc3VwZXIJCSMgc3VwZXJ2aXNvcgorY2FzX3VzZXI6CisJbW92cS5sCQkmMHgxLCVkMAkJIyBsb2FkIHVzZXIgZGF0YSBmYworCWJyYS5iCQljYXNfY29udAorY2FzX3N1cGVyOgorCW1vdnEubAkJJjB4NSwlZDAJCSMgbG9hZCBzdXBlcnZpc29yIGRhdGEgZmMKKworY2FzX2NvbnQ6CisJdHN0LmIJCSVkNwkJCSMgd29yZCBvciBsb25nd29yZD8KKwlibmUudwkJY2FzbAkJCSMgbG9uZ3dvcmQKKworIyMjIworY2FzdzoKKwltb3YubAkJJWEwLCVhMQkJCSMgbWFrZSBjb3B5IGZvciBwbHBhdzEKKwltb3YubAkJJWEwLCVhMgkJCSMgbWFrZSBjb3B5IGZvciBwbHBhdzIKKwlhZGRxLmwJCSYweDEsJWEyCQkjIHBscGF3MiBwb2ludHMgdG8gZW5kIG9mIHdvcmQKKworCW1vdi5sCQklZDIsJWQzCQkJIyBkMyA9IHVwZGF0ZVs3OjBdCisJbHNyLncJCSYweDgsJWQyCQkjIGQyID0gdXBkYXRlWzE1OjhdCisKKyMgbWFzayBpbnRlcnJ1cHQgbGV2ZWxzIDAtNi4gc2F2ZSBvbGQgbWFzayB2YWx1ZS4KKwltb3YudwkJJXNyLCVkNwkJCSMgc2F2ZSBjdXJyZW50IFNSCisJb3JpLncJCSYweDA3MDAsJXNyCQkjIGluaGliaXQgaW50ZXJydXB0cworCisjIGxvYWQgdGhlIFNGQyBhbmQgREZDIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUuCisJbW92YwkJJXNmYywlZDYJCSMgc2F2ZSBvbGQgU0ZDL0RGQworCW1vdmMJCSVkMCwlc2ZjCQkjIGxvYWQgbmV3IHNmYworCW1vdmMJCSVkMCwlZGZjCQkjIGxvYWQgbmV3IGRmYworCisjIHByZS1sb2FkIHRoZSBvcGVyYW5kIEFUQy4gbm8gcGFnZSBmYXVsdHMgc2hvdWxkIG9jY3VyIGhlcmUgYmVjYXVzZQorIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCisJcGxwYXcJCSglYTEpCQkJIyBsb2FkIGF0YyBmb3IgQUREUgorCXBscGF3CQkoJWEyKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIrMQorCisjIHB1c2ggdGhlIG9wZXJhbmQgbGluZXMgZnJvbSB0aGUgY2FjaGUgaWYgdGhleSBleGlzdC4KKwljcHVzaGwJCSVkYywoJWExKQkJIyBwdXNoIGRpcnR5IGRhdGEKKwljcHVzaGwJCSVkYywoJWEyKQkJIyBwdXNoIGRpcnR5IGRhdGEKKworIyBsb2FkIHRoZSBCVVNDUiB2YWx1ZXMuCisJbW92LmwJCSYweDgwMDAwMDAwLCVhMQkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4YTAwMDAwMDAsJWEyCQkjIGFzc2VydCBMT0NLRSogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4MDAwMDAwMDAsJWEzCQkjIGJ1c2NyIHVubG9jayB2YWx1ZQorCisjIHByZS1sb2FkIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0uCisjIHRoaXMgd2lsbCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGN5Y2xlcyB0aGF0IExPQ0sqIHdpbGwgYmUgYXNzZXJ0ZWQuCisJYnJhLmIJCUNBU1dfRU5URVIJCSMgc3RhcnQgcHJlLWxvYWRpbmcgaWNhY2hlCisKKyMKKyMgRDAgPSBkc3Qgb3BlcmFuZCA8LQorIyBEMSA9IHVwZGF0ZVsxNTo4XSBvcGVyYW5kCisjIEQyID0gdXBkYXRlWzc6MF0gIG9wZXJhbmQKKyMgRDMgPSB4eHh4eHh4eAorIyBENCA9IGNvbXBhcmVbMTU6MF0gb3BlcmFuZAorIyBENSA9IHh4eHh4eHh4CisjIEQ2ID0gb2xkIFNGQy9ERkMKKyMgRDcgPSBvbGQgU1IKKyMgQTAgPSBBRERSCisjIEExID0gYnVzIExPQ0sqICB2YWx1ZQorIyBBMiA9IGJ1cyBMT0NLRSogdmFsdWUKKyMgQTMgPSBidXMgdW5sb2NrIHZhbHVlCisjIEE0ID0geHh4eHh4eHgKKyMgQTUgPSB4eHh4eHh4eAorIworCWFsaWduCQkweDEwCitDQVNXX1NUQVJUOgorCW1vdmMJCSVhMSwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCisJbW92cy53CQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdFsxNTowXQorCWNtcC53CQklZDAsJWQ0CQkJIyBEZXN0IC0gQ29tcGFyZQorCWJuZS5iCQlDQVNXX05PVVBEQVRFCisJYnJhLmIJCUNBU1dfVVBEQVRFCitDQVNXX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBU1dfVVBEQVRFOgorCW1vdnMuYgkJJWQyLCglYTApKwkJIyBVcGRhdGVbMTU6OF0gLT4gREVTVAorCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMuYgkJJWQzLCglYTApCQkjIFVwZGF0ZVs3OjBdIC0+IERFU1QrMHgxCisJYnJhLmIJCUNBU1dfVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBU1dfVVBEQVRFMjoKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLmIJCWNhc3dfdXBkYXRlX2RvbmUKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNXX05PVVBEQVRFOgorCXJvci5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdFsxNTo4XQorCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0WzE1OjhdIC0+IERFU1QKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3RbNzowXQorCWJyYS5iCQlDQVNXX05PVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBU1dfTk9VUERBVEUyOgorCW1vdnMuYgkJJWQwLCglYTApCQkjIERlc3RbNzowXSAtPiBERVNUKzB4MQorCW1vdmMJCSVhMywlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEuYgkJY2Fzd19ub3VwZGF0ZV9kb25lCisJbm9wCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTV19GSUxMRVI6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCUNBU1dfU1RBUlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEhJUyBNVVNUIEJFIFRIRSBTVEFURSBPRiBUSEUgSU5URUdFUiBSRUdJU1RFUiBGSUxFIFVQT04JIworIyBDQUxMSU5HIF9pc3BfY2FzX2ZpbmlzaCgpLgkJCQkJIworIwkJCQkJCQkJIworIyBEMCA9IGRlc3RpbmF0aW9uWzE1OjBdIG9wZXJhbmQJCQkJIworIyBEMSA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKKyMgRDIgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQzID0geHh4eHh4eHgJCQkJCQkJIworIyBENCA9IGNvbXBhcmVbMTU6MF0gb3BlcmFuZAkJCQkJIworIyBENSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDYgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ3ID0geHh4eHh4eHgJCQkJCQkJIworIyBBMCA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTEgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEyID0geHh4eHh4eHgJCQkJCQkJIworIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTQgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE1ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCisjIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Nhc3dfbm91cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXNmCQklZDEJCQkjIGluZGljYXRlIG5vIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKKworY2Fzd191cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXN0CQklZDEJCQkjIGluZGljYXRlIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIworCisjIHRoZXJlIGFyZSB0d28gcG9zc2libGUgbWlzLWFsaWduZWQgY2FzZXMgZm9yIGxvbmd3b3JkIGNhcy4gdGhleQorIyBhcmUgc2VwYXJhdGVkIGJlY2F1c2UgdGhlIGZpbmFsIHdyaXRlIHdoaWNoIGFzc2VydHMgTE9DS0UqIG11c3QKKyMgYmUgYW4gYWxpZ25lZCB3cml0ZS4KK2Nhc2w6CisJbW92LmwJCSVhMCwlYTEJCQkjIG1ha2UgY29weSBmb3IgcGxwYXcxCisJbW92LmwJCSVhMCwlYTIJCQkjIG1ha2UgY29weSBmb3IgcGxwYXcyCisJYWRkcS5sCQkmMHgzLCVhMgkJIyBwbHBhdzIgcG9pbnRzIHRvIGVuZCBvZiBsb25nd29yZAorCisJbW92LmwJCSVhMCwlZDEJCQkjIGJ5dGUgb3Igd29yZCBtaXNhbGlnbmVkPworCWJ0c3QJCSYweDAsJWQxCisJYm5lLncJCWNhc2wyCQkJIyBieXRlIG1pc2FsaWduZWQKKworCW1vdi5sCQklZDIsJWQzCQkJIyBkMyA9IHVwZGF0ZVsxNTowXQorCXN3YXAJCSVkMgkJCSMgZDIgPSB1cGRhdGVbMzE6MTZdCisKKyMgbWFzayBpbnRlcnJ1cHRzIGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCisJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgorCW9yaS53CQkmMHgwNzAwLCVzcgkJIyBpbmhpYml0IGludGVycnVwdHMKKworIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCW1vdmMJCSVzZmMsJWQ2CQkjIHNhdmUgb2xkIFNGQy9ERkMKKwltb3ZjCQklZDAsJXNmYwkJIyBsb2FkIG5ldyBzZmMKKwltb3ZjCQklZDAsJWRmYwkJIyBsb2FkIG5ldyBkZmMKKworIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKKyMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzLgorCXBscGF3CQkoJWExKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIKKwlwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSKzMKKworIyBwdXNoIHRoZSBvcGVyYW5kIGxpbmVzIGZyb20gdGhlIGNhY2hlIGlmIHRoZXkgZXhpc3QuCisJY3B1c2hsCQklZGMsKCVhMSkJCSMgcHVzaCBkaXJ0eSBkYXRhCisJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBkaXJ0eSBkYXRhCisKKyMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlYTEJCSMgYXNzZXJ0IExPQ0sqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweGEwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DS0UqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweDAwMDAwMDAwLCVhMwkJIyBidXNjciB1bmxvY2sgdmFsdWUKKworCWJyYS5iCQlDQVNMX0VOVEVSCQkjIHN0YXJ0IHByZS1sb2FkaW5nIGljYWNoZQorCisjCisjIEQwID0gZHN0IG9wZXJhbmQgPC0KKyMgRDEgPSB4eHh4eHh4eAorIyBEMiA9IHVwZGF0ZVszMToxNl0gb3BlcmFuZAorIyBEMyA9IHVwZGF0ZVsxNTowXSAgb3BlcmFuZAorIyBENCA9IGNvbXBhcmVbMzE6MF0gb3BlcmFuZAorIyBENSA9IHh4eHh4eHh4CisjIEQ2ID0gb2xkIFNGQy9ERkMKKyMgRDcgPSBvbGQgU1IKKyMgQTAgPSBBRERSCisjIEExID0gYnVzIExPQ0sqICB2YWx1ZQorIyBBMiA9IGJ1cyBMT0NLRSogdmFsdWUKKyMgQTMgPSBidXMgdW5sb2NrIHZhbHVlCisjIEE0ID0geHh4eHh4eHgKKyMgQTUgPSB4eHh4eHh4eAorIworCWFsaWduCQkweDEwCitDQVNMX1NUQVJUOgorCW1vdmMJCSVhMSwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCisJbW92cy5sCQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdFszMTowXQorCWNtcC5sCQklZDAsJWQ0CQkJIyBEZXN0IC0gQ29tcGFyZQorCWJuZS5iCQlDQVNMX05PVVBEQVRFCisJYnJhLmIJCUNBU0xfVVBEQVRFCitDQVNMX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBU0xfVVBEQVRFOgorCW1vdnMudwkJJWQyLCglYTApKwkJIyBVcGRhdGVbMzE6MTZdIC0+IERFU1QKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLncJCSVkMywoJWEwKQkJIyBVcGRhdGVbMTU6MF0gLT4gREVTVCsweDIKKwlicmEuYgkJQ0FTTF9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTTF9VUERBVEUyOgorCW1vdmMJCSVhMywlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEuYgkJY2FzbF91cGRhdGVfZG9uZQorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBU0xfTk9VUERBVEU6CisJc3dhcAkJJWQwCQkJIyBnZXQgRGVzdFszMToxNl0KKwltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdFszMToxNl0gLT4gREVTVAorCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3RbMTU6MF0KKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlicmEuYgkJQ0FTTF9OT1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVNMX05PVVBEQVRFMjoKKwltb3ZzLncJCSVkMCwoJWEwKQkJIyBEZXN0WzE1OjBdIC0+IERFU1QrMHgyCisJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXNsX25vdXBkYXRlX2RvbmUKKwlub3AKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNMX0ZJTExFUjoKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJQ0FTTF9TVEFSVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUSElTIE1VU1QgQkUgVEhFIFNUQVRFIE9GIFRIRSBJTlRFR0VSIFJFR0lTVEVSIEZJTEUgVVBPTgkjCisjIENBTExJTkcgX2lzcF9jYXNfZmluaXNoKCkuCQkJCQkjCisjCQkJCQkJCQkjCisjIEQwID0gZGVzdGluYXRpb25bMzE6MF0gb3BlcmFuZAkJCQkjCisjIEQxID0gJ3h4eHh4eDExIC0+IG5vIHJlZyB1cGRhdGU7ICd4eHh4eHgwMCAtPiB1cGRhdGUgcmVxdWlyZWQJIworIyBEMiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDMgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ0ID0gY29tcGFyZVszMTowXSBvcGVyYW5kCQkJCQkjCisjIEQ1ID0geHh4eHh4eHgJCQkJCQkJIworIyBENiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDcgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEwID0geHh4eHh4eHgJCQkJCQkJIworIyBBMSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTIgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEzID0geHh4eHh4eHgJCQkJCQkJIworIyBBNCA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTUgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE2ID0gZnJhbWUgcG9pbnRlcgkJCQkJCSMKKyMgQTcgPSBzdGFjayBwb2ludGVyCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2FzbF9ub3VwZGF0ZV9kb25lOgorCisjIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KKwltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKKwltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKKworIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgorCW1vdi53CQklZDcsJXNyCQkJIyByZXN0b3JlIG9sZCBTUgorCisJc2YJCSVkMQkJCSMgaW5kaWNhdGUgbm8gdXBkYXRlIHdhcyBkb25lCisJYnJhLmwJCV9pc3BfY2FzX2ZpbmlzaAorCitjYXNsX3VwZGF0ZV9kb25lOgorCisjIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KKwltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKKwltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKKworIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdHMgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXN0CQklZDEJCQkjIGluZGljYXRlIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjYXNsMjoKKwltb3YubAkJJWQyLCVkNQkJCSMgZDUgPSBVcGRhdGVbNzowXQorCWxzci5sCQkmMHg4LCVkMgorCW1vdi5sCQklZDIsJWQzCQkJIyBkMyA9IFVwZGF0ZVsyMzo4XQorCXN3YXAJCSVkMgkJCSMgZDIgPSBVcGRhdGVbMzE6MjRdCisKKyMgbWFzayBpbnRlcnJ1cHRzIGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCisJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgorCW9yaS53CQkmMHgwNzAwLCVzcgkJIyBpbmhpYml0IGludGVycnVwdHMKKworIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCW1vdmMJCSVzZmMsJWQ2CQkjIHNhdmUgb2xkIFNGQy9ERkMKKwltb3ZjCQklZDAsJXNmYwkJIyBsb2FkIG5ldyBzZmMKKwltb3ZjCQklZDAsJWRmYwkJIyBsb2FkIG5ldyBkZmMKKworIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKKyMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzIGFscmVhZHkuCisJcGxwYXcJCSglYTEpCQkJIyBsb2FkIGF0YyBmb3IgQUREUgorCXBscGF3CQkoJWEyKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIrMworCisjIHB1Y2ggdGhlIG9wZXJhbmQgbGluZXMgZnJvbSB0aGUgY2FjaGUgaWYgdGhleSBleGlzdC4KKwljcHVzaGwJCSVkYywoJWExKQkJIyBwdXNoIGRpcnR5IGRhdGEKKwljcHVzaGwJCSVkYywoJWEyKQkJIyBwdXNoIGRpcnR5IGRhdGEKKworIyBsb2FkIHRoZSBCVVNDUiB2YWx1ZXMuCisJbW92LmwJCSYweDgwMDAwMDAwLCVhMQkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4YTAwMDAwMDAsJWEyCQkjIGFzc2VydCBMT0NLRSogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4MDAwMDAwMDAsJWEzCQkjIGJ1c2NyIHVubG9jayB2YWx1ZQorCisjIHByZS1sb2FkIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0uCisjIHRoaXMgd2lsbCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGN5Y2xlcyB0aGF0IExPQ0sqIHdpbGwgYmUgYXNzZXJ0ZWQuCisJYnJhLmIJCUNBU0wyX0VOVEVSCQkjIHN0YXJ0IHByZS1sb2FkaW5nIGljYWNoZQorCisjCisjIEQwID0gZHN0IG9wZXJhbmQgPC0KKyMgRDEgPSB4eHh4eHh4eAorIyBEMiA9IHVwZGF0ZVszMToyNF0gb3BlcmFuZAorIyBEMyA9IHVwZGF0ZVsyMzo4XSAgb3BlcmFuZAorIyBENCA9IGNvbXBhcmVbMzE6MF0gb3BlcmFuZAorIyBENSA9IHVwZGF0ZVs3OjBdICBvcGVyYW5kCisjIEQ2ID0gb2xkIFNGQy9ERkMKKyMgRDcgPSBvbGQgU1IKKyMgQTAgPSBBRERSCisjIEExID0gYnVzIExPQ0sqICB2YWx1ZQorIyBBMiA9IGJ1cyBMT0NLRSogdmFsdWUKKyMgQTMgPSBidXMgdW5sb2NrIHZhbHVlCisjIEE0ID0geHh4eHh4eHgKKyMgQTUgPSB4eHh4eHh4eAorIworCWFsaWduCQkweDEwCitDQVNMMl9TVEFSVDoKKwltb3ZjCQklYTEsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMzE6MF0KKwljbXAubAkJJWQwLCVkNAkJCSMgRGVzdCAtIENvbXBhcmUKKwlibmUuYgkJQ0FTTDJfTk9VUERBVEUKKwlicmEuYgkJQ0FTTDJfVVBEQVRFCitDQVNMMl9FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVNMMl9VUERBVEU6CisJbW92cy5iCQklZDIsKCVhMCkrCQkjIFVwZGF0ZVszMToyNF0gLT4gREVTVAorCW1vdnMudwkJJWQzLCglYTApKwkJIyBVcGRhdGVbMjM6OF0gLT4gREVTVCsweDEKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwlicmEuYgkJQ0FTTDJfVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBU0wyX1VQREFURTI6CisJbW92cy5iCQklZDUsKCVhMCkJCSMgVXBkYXRlWzc6MF0gLT4gREVTVCsweDMKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhc2xfdXBkYXRlX2RvbmUKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNMMl9OT1VQREFURToKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3RbMzE6MjRdCisJbW92cy5iCQklZDAsKCVhMCkrCQkjIERlc3RbMzE6MjRdIC0+IERFU1QKKwlzd2FwCQklZDAJCQkjIGdldCBEZXN0WzIzOjhdCisJbW92cy53CQklZDAsKCVhMCkrCQkjIERlc3RbMjM6OF0gLT4gREVTVCsweDEKKwlicmEuYgkJQ0FTTDJfTk9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTTDJfTk9VUERBVEUyOgorCXJvbC5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdFs3OjBdCisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJbW92cy5iCQklZDAsKCVhMCkJCSMgRGVzdFs3OjBdIC0+IERFU1QrMHgzCisJYnJhLmIJCUNBU0wyX05PVVBEQVRFMworCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBU0wyX05PVVBEQVRFMzoKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhc2xfbm91cGRhdGVfZG9uZQorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBU0wyX0ZJTExFUjoKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJQ0FTTDJfU1RBUlQKKworIyMjIworIyMjIworIyBlbmQgbGFiZWwgdXNlZCBieSBfaXNwX2Nhc19pbnJhbmdlKCkKKwlnbG9iYWwJCV9DQVNISQorX0NBU0hJOgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pdGVzdC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pdGVzdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGEzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2l0ZXN0LlMKQEAgLTAsMCArMSw2Mzg2IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldAlTUkVHUywJCS02NAorc2V0CUlSRUdTLAkJLTEyOAorc2V0CVNDQ1IsCQktMTMwCitzZXQJSUNDUiwJCS0xMzIKK3NldAlURVNUQ1RSLAktMTM2CitzZXQJRUFNRU0sCQktMTQwCitzZXQJRUFTVE9SRSwJLTE0NAorc2V0CURBVEEsCQktMTYwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworVEVTVFRPUDoKKwlicmEubAkJXzA2MFRFU1RTXworCitzdGFydF9zdHI6CisJc3RyaW5nCQkiVGVzdGluZyA2ODA2MCBJU1Agc3RhcnRlZDpcbiIKKworcGFzc19zdHI6CisJc3RyaW5nCQkicGFzc2VkXG4iCitmYWlsX3N0cjoKKwlzdHJpbmcJCSIgZmFpbGVkXG4iCisKKwlhbGlnbgkJMHg0CitjaGtfdGVzdDoKKwl0c3QubAkJJWQwCisJYm5lLmIJCXRlc3RfZmFpbAordGVzdF9wYXNzOgorCXBlYQkJcGFzc19zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cwordGVzdF9mYWlsOgorCW1vdi5sCQklZDEsLSglc3ApCisJYnNyLmwJCV9wcmludF9udW0KKwlhZGRxLmwJCSYweDQsJXNwCisKKwlwZWEJCWZhaWxfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitfMDYwVEVTVFNfOgorCWxpbmsJCSVhNiwmLTE2MAorCisJbW92bS5sCQkmMHgzZjNjLC0oJXNwKQorCisJcGVhCQlzdGFydF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisjIyMgbXVsCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJbXVsdWxfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQltdWx1bF8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIGRpdgorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWRpdnVsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKwlic3IubAkJZGl2dWxfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBjbXAyCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJY21wMl9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCWNtcDJfMQorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBtb3ZwCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJbW92cF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCW1vdnBfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBlYQorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWVhX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKwltb3YubAkJJjB4MixFQU1FTSglYTYpCisJYnNyLmwJCWVhXzAKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgY2FzCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJY2FzX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKwlic3IubAkJY2FzMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBjYXMyCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJY2FzMl9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCWNhczIwCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjCisJbW92bS5sCQkoJXNwKSssJjB4M2NmYworCisJdW5sawkJJWE2CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK211bHVsX3N0cjoKKwlzdHJpbmcJCSJcdDY0LWJpdCBtdWx0aXBseS4uLiIKKworCWFsaWduCQkweDQKK211bHVsXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDEKKwltb3YubAkJJjB4OTk5OTk5OTksJWQyCisJbW92LmwJCSYweDg4ODg4ODg4LCVkMworCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwljbHIubAkJSVJFR1MrMHg4KCVhNikKKwljbHIubAkJSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCittdWx1bF8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4Nzc3Nzc3NzcsJWQxCisJbW92LmwJCSYweDk5OTk5OTk5LCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDMKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJY2xyLmwJCUlSRUdTKzB4OCglYTYpCisJY2xyLmwJCUlSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDAwMDAwMDEwLCVkMQorCW1vdi5sCQkmMHg2NjY2NjY2NiwlZDIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSVkMSwlZDI6JWQyCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA2LElSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDU1NTU1NTU1LCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4MDAwMDAwMDMsJWQzCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZixJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK211bHVsXzQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHg0MDAwMDAwMCwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweDAwMDAwMDA0LCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDEsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCittdWx1bF81OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQxCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHhmZmZmZmZmZiwlZDMKKworCW1vdi53CQkmMHgwMDA4LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweGZmZmZmZmZlLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAxLElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQzCisKKwltb3YudwkJJjB4MDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHMubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCittdWx1bF83OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4ODAwMDAwMDAsJWQxCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMSwlZDMKKworCW1vdi53CQkmMHgwMDA4LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWxzLmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweGZmZmZmZmZmLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDAwMDAwMDAxLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4ODAwMDAwMDAsJWQzCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVscy5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZixJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK21vdnBfc3RyOgorCXN0cmluZwkiXHRtb3ZlcC4uLiIKKworCWFsaWduCTB4NAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSVkMCwoMHgwLCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8wOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YudwkmMHhhYWFhLCVkMAorCWNsci5iCTB4MCglYTApCisJY2xyLmIJMHgyKCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJJWQwLCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCW1vdi5iCTB4MiglYTApLCVkMQorCWxzbC53CSYweDgsJWQxCisJbW92LmIJMHgwKCVhMCksJWQxCisKKwljbXAudwklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJJWQwLCgweDAsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzE6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSsweDQoJWE2KSwlYTAKKwltb3YudwkmMHhhYWFhLCVkMAorCWNsci5sCS0weDQoJWEwKQorCWNsci5sCSglYTApCisJY2xyLmwJMHg0KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJJWQwLCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCXRzdC5sCS0weDQoJWEwKQorCWJuZS5sCWVycm9yCisJdHN0LmwJMHg0KCVhMCkKKwlibmUubAllcnJvcgorCWNtcGkubAkoJWEwKSwmMHhhYTAwYWEwMAorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwklZDAsKDB4MCwlYTApCQkJICAgICMKKyMJLSB0aGlzIHRlc3QgaGFzICVjYyBpbml0aWFsbHkgZXF1YWwgdG8gemVybyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8yOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YudwkmMHhhYWFhLCVkMAorCWNsci5iCTB4MCglYTApCisJY2xyLmIJMHgyKCVhMCkKKworCW1vdi53CSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJJjB4MDAwMCwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJJWQwLCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCW1vdi5iCTB4MiglYTApLCVkMQorCWxzbC53CSYweDgsJWQxCisJbW92LmIJMHgwKCVhMCksJWQxCisKKwljbXAudwklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJKDB4MCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzM6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MCglYTApCisJbW92LmIJJjB4YWEsMHgyKCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJKDB4MCwlYTApLCVkMAorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YudwkmMHhhYWFhLElSRUdTKzB4MiglYTYpCisKKwltb3YudwkmMHhhYWFhLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC5sCSVkMCwoMHgwLCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF80OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YubAkmMHhhYWFhYWFhYSwlZDAKKwljbHIuYgkweDAoJWEwKQorCWNsci5iCTB4MiglYTApCisJY2xyLmIJMHg0KCVhMCkKKwljbHIuYgkweDYoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgwMDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAubAklZDAsKDB4MCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHg2KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDQoJWEwKSwlZDEKKwlsc2wubAkmMHg4LCVkMQorCW1vdi5iCTB4MiglYTApLCVkMQorCWxzbC5sCSYweDgsJWQxCisJbW92LmIJMHgwKCVhMCksJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLmwJJWQwLCgweDAsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzU6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSsweDQoJWE2KSwlYTAKKwltb3YubAkmMHhhYWFhYWFhYSwlZDAKKwljbHIubAktMHg0KCVhMCkKKwljbHIubAkoJWEwKQorCWNsci5sCTB4NCglYTApCisJY2xyLmwJMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJJWQwLCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCXRzdC5sCS0weDQoJWEwKQorCWJuZS5sCWVycm9yCisJdHN0LmwJMHg4KCVhMCkKKwlibmUubAllcnJvcgorCWNtcGkubAkoJWEwKSwmMHhhYTAwYWEwMAorCWJuZS5sCWVycm9yCisJY21waS5sCTB4NCglYTApLCYweGFhMDBhYTAwCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLmwJKDB4MCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzY6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MCglYTApCisJbW92LmIJJjB4YWEsMHgyKCVhMCkKKwltb3YuYgkmMHhhYSwweDQoJWEwKQorCW1vdi5iCSYweGFhLDB4NiglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC5sCSgweDAsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJJjB4YWFhYWFhYWEsSVJFR1MoJWE2KQorCisJbW92LmwJJjB4YWFhYWFhYWEsJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJJWQ3LCgweDAsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzc6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi53CSYweGFhYWEsJWQ3CisJY2xyLmIJMHgwKCVhMCkKKwljbHIuYgkweDIoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgwMDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwklZDcsKDB4MCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHgyKCVhMCksJWQxCisJbHNsLncJJjB4OCwlZDEKKwltb3YuYgkweDAoJWEwKSwlZDEKKworCWNtcC53CSVkNywlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwkoMHgwLCVhMCksJWQ3ICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfODoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LmIJJjB4YWEsMHgwKCVhMCkKKwltb3YuYgkmMHhhYSwweDIoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgwMDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwkoMHgwLCVhMCksJWQ3CisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi53CSYweGFhYWEsSVJFR1MrMzAoJWE2KQorCisJbW92LncJJjB4YWFhYSwlZDEKKworCWNtcC53CSVkNywlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwklZDAsKDB4MCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfOToKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIuYgkweDAoJWEwKQorCWNsci5iCTB4MiglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoMHgwLCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDIoJWEwKSwlZDEKKwlsc2wudwkmMHg4LCVkMQorCW1vdi5iCTB4MCglYTApLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSVkMCwoMHg4LCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xMDoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIuYgkweDArMHg4KCVhMCkKKwljbHIuYgkweDIrMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoMHg4LCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDIrMHg4KCVhMCksJWQxCisJbHNsLncJJjB4OCwlZDEKKwltb3YuYgkweDArMHg4KCVhMCksJWQxCisKKwljbXAudwklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJKDB4OCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzExOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YuYgkmMHhhYSwweDArMHg4KCVhMCkKKwltb3YuYgkmMHhhYSwweDIrMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSgweDgsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LncJJjB4YWFhYSxJUkVHUysweDIoJWE2KQorCisJbW92LncJJjB4YWFhYSwlZDEKKworCWNtcC53CSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAubAklZDAsKDB4OCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMTI6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi5sCSYweGFhYWFhYWFhLCVkMAorCWNsci5iCTB4MCsweDgoJWEwKQorCWNsci5iCTB4MisweDgoJWEwKQorCWNsci5iCTB4NCsweDgoJWEwKQorCWNsci5iCTB4NisweDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJJWQwLCgweDgsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCW1vdi5iCTB4NisweDgoJWEwKSwlZDEKKwlsc2wubAkmMHg4LCVkMQorCW1vdi5iCTB4NCsweDgoJWEwKSwlZDEKKwlsc2wubAkmMHg4LCVkMQorCW1vdi5iCTB4MisweDgoJWEwKSwlZDEKKwlsc2wubAkmMHg4LCVkMQorCW1vdi5iCTB4MCsweDgoJWEwKSwlZDEKKworCWNtcC5sCSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAubAkoMHg4LCVhMCksJWQwICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMTM6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MCsweDgoJWEwKQorCW1vdi5iCSYweGFhLDB4MisweDgoJWEwKQorCW1vdi5iCSYweGFhLDB4NCsweDgoJWEwKQorCW1vdi5iCSYweGFhLDB4NisweDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJKDB4OCwlYTApLCVkMAorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkmMHhhYWFhYWFhYSxJUkVHUyglYTYpCisKKwltb3YubAkmMHhhYWFhYWFhYSwlZDEKKworCWNtcC5sCSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJJWQwLCgtMHg4LCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMTQ6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSsweDgoJWE2KSwlYTAKKwltb3YudwkmMHhhYWFhLCVkMAorCWNsci5iCTB4MC0weDgoJWEwKQorCWNsci5iCTB4Mi0weDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJJWQwLCgtMHg4LCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDItMHg4KCVhMCksJWQxCisJbHNsLncJJjB4OCwlZDEKKwltb3YuYgkweDAtMHg4KCVhMCksJWQxCisKKwljbXAudwklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSgtMHg4LCVhMCksJWQwICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzE1OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEErMHg4KCVhNiksJWEwCisJbW92LmIJJjB4YWEsMHgwLTB4OCglYTApCisJbW92LmIJJjB4YWEsMHgyLTB4OCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwkoLTB4OCwlYTApLCVkMAorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YudwkmMHhhYWFhLElSRUdTKzB4MiglYTYpCisKKwltb3YudwkmMHhhYWFhLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAubAklZDAsKC0weDgsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xNjoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKzB4OCglYTYpLCVhMAorCW1vdi5sCSYweGFhYWFhYWFhLCVkMAorCWNsci5iCTB4MC0weDgoJWEwKQorCWNsci5iCTB4Mi0weDgoJWEwKQorCWNsci5iCTB4NC0weDgoJWEwKQorCWNsci5iCTB4OC0weDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJJWQwLCgtMHg4LCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDYtMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDQtMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDItMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDAtMHg4KCVhMCksJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC5sCSgtMHg4LCVhMCksJWQwICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzE3OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEErMHg4KCVhNiksJWEwCisJbW92LmIJJjB4YWEsMHgwLTB4OCglYTApCisJbW92LmIJJjB4YWEsMHgyLTB4OCglYTApCisJbW92LmIJJjB4YWEsMHg0LTB4OCglYTApCisJbW92LmIJJjB4YWEsMHg4LTB4OCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAubAkoLTB4OCwlYTApLCVkMAorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkmMHhhYWFhYWFhYSxJUkVHUyglYTYpCisKKwltb3YubAkmMHhhYWFhYWFhYSwlZDEKKworCWNtcC5sCSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKwltb3YubAlURVNUQ1RSKCVhNiksJWQxCisJY2xyLmwJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RpdnVsX3N0cjoKKwlzdHJpbmcJCSJcdDY0LWJpdCBkaXZpZGUuLi4iCisKKwlhbGlnbgkJMHg0CitkaXZ1bF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworIwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisjCWNsci5sCQklZDEKKyMJbW92LmwJCSYweDk5OTk5OTk5LCVkMgorIwltb3YubAkJJjB4ODg4ODg4ODgsJWQzCisKKyMJbW92LncJCSYweDAwMWUsSUNDUiglYTYpCisjCW1vdi53CQkmMHgwMDFmLCVjYworIwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisjCWRpdnUubAkJJWQxLCVkMjolZDMKKworIwltb3YudwkJJWNjLFNDQ1IoJWE2KQorIwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisjCWJzci5sCQljaGtyZWdzCisjCXRzdC5iCQklZDAKKyMJYm5lLmwJCWVycm9yCisKK2RpdnVsXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgwMDAwMDAwMSwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMworCisJbW92LncJCSYweDAwMTQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWYsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitkaXZ1bF8yOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4NDQ0NDQ0NDQsJWQxCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHg1NTU1NTU1NSwlZDMKKworCW1vdi53CQkmMHgwMDEwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDFmLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDExMTExMTExLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAxLElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDU1NTU1NTU1LCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4NDQ0NDQ0NDQsJWQzCisKKwltb3YudwkJJjB4MDAxNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxZiwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2dS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHg0NDQ0NDQ0NCxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgxMTExMTExMSwlZDEKKwltb3YubAkJJjB4NDQ0NDQ0NDQsJWQyCisJbW92LmwJCSYweDQ0NDQ0NDQ0LCVkMworCisJbW92LncJCSYweDAwMWUsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWQsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitkaXZ1bF81OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4ZmZmZmZmZmUsJWQxCisJbW92LmwJCSYweDAwMDAwMDAxLCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKworCW1vdi53CQkmMHgwMDFlLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDFkLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZzLmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGZmZmZmZmZlLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMSwlZDIKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQzCisKKwltb3YudwkJJjB4MDAxOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxZCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2cy5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDEsJWQyCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMworCisJbW92LncJCSYweDAwMWUsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWQsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnMubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitkaXZ1bF84OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQxCisJbW92LmwJCSYweGZmZmZmZmZlLCVkMgorCW1vdi5sCQkmMHhmZmZmZmZmZiwlZDMKKworCW1vdi53CQkmMHgwMDA4LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGZmZmZmZmZmLCVkMQorCW1vdi5sCQkmMHhmZmZmZmZmZSwlZDIKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQzCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2dS5sCQkmMHhmZmZmZmZmZiwlZDI6JWQyCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweGZmZmZmZmZmLElSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfMTA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgwMDAwZmZmZiwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDEsJWQyCisJbW92LmwJCSYweDU1NTU1NTU1LCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMGFhYWIsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMTU1NTYsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Nhc19zdHI6CisJc3RyaW5nCQkiXHRjYXMuLi4iCisKKwlhbGlnbgkJMHg0CitjYXMwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgxKCVhNiksJWEwCisKKwltb3YudwkJJjB4YWFhYSwoJWEwKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisKKwltb3YudwkJJjB4MDAxNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzLncJCSVkMSwlZDIsKCVhMCkJCQkjIERjLER1LDxlYT4KKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkMworCW1vdi53CQkmMHhiYmJiLElSRUdTKzB4YysweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCisJbW92LncJCSYweGVlZWUsKCVhMCkKKworCW1vdi53CQkmMHgwMDAwYWFhYSwlZDEKKwltb3YudwkJJjB4MDAwMGJiYmIsJWQyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzLncJCSVkMSwlZDIsKCVhMCkJCQkjIERjLER1LDxlYT4KKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkMworCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4NCsweDIoJWE2KQorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4YysweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MiglYTYpLCVhMAorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhcy5sCQklZDEsJWQyLCglYTApCQkJIyBEYyxEdSw8ZWE+CisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDMKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHhjKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDIoJWE2KSwlYTAKKworCW1vdi5sCQkmMHhlZWVlZWVlZSwoJWEwKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMubAkJJWQxLCVkMiwoJWEwKQkJCSMgRGMsRHUsPGVhPgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQzCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4YyglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXM0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgxKCVhNiksJWEwCisKKwltb3YubAkJJjB4YWFhYWFhYWEsKCVhMCkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzLmwJCSVkMSwlZDIsKCVhMCkJCQkjIERjLER1LDxlYT4KKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkMworCW1vdi5sCQkmMHhiYmJiYmJiYixJUkVHUysweGMoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCisJbW92LmwJCSYweDdmZmZmZmZmLCglYTApCisKKwltb3YubAkJJjB4ODAwMDAwMDAsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCisJbW92LncJCSYweDAwMWIsSUNDUiglYTYpCisJbW92LncJCSYweDAwMTAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhcy5sCQklZDEsJWQyLCglYTApCQkJIyBEYyxEdSw8ZWE+CisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDMKKwltb3YubAkJJjB4N2ZmZmZmZmYsSVJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4N2ZmZmZmZmYsSVJFR1MrMHhjKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2FzMl9zdHI6CisJc3RyaW5nCQkiXHRjYXMyLi4uIgorCisJYWxpZ24JCTB4NAorY2FzMjA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YubAkJJjB4YWFhYWFhYWEsKCVhMCkKKwltb3YubAkJJjB4YmJiYmJiYmIsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDE0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDEwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhjY2NjY2NjYyxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4ZGRkZGRkZGQsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCWxlYQkJREFUQSsweDUoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwoJWEwKQorCW1vdi5sCQkmMHhiYmJiYmJiYiwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMTQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMTAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGNjY2NjY2NjLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHhkZGRkZGRkZCxJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczIyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgyKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NiglYTYpLCVhMQorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisJbW92LmwJCSYweGJiYmJiYmJiLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAxNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4Y2NjY2NjY2MsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweGRkZGRkZGRkLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YubAkJJjB4ZWVlZWVlZWUsKCVhMCkKKwltb3YubAkJJjB4YmJiYmJiYmIsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhiYmJiYmJiYixJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCWxlYQkJREFUQSsweDUoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhlZWVlZWVlZSwoJWEwKQorCW1vdi5sCQkmMHhiYmJiYmJiYiwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGJiYmJiYmJiLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHhiYmJiYmJiYixJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczI1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgyKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NiglYTYpLCVhMQorCisJbW92LmwJCSYweGVlZWVlZWVlLCglYTApCisJbW92LmwJCSYweGJiYmJiYmJiLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweGJiYmJiYmJiLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YubAkJJjB4YWFhYWFhYWEsKCVhMCkKKwltb3YubAkJJjB4ZWVlZWVlZWUsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhhYWFhYWFhYSxJUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHhhYWFhYWFhYSxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCWxlYQkJREFUQSsweDUoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwoJWEwKQorCW1vdi5sCQkmMHhlZWVlZWVlZSwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGFhYWFhYWFhLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweGFhYWFhYWFhLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczI4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgyKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NiglYTYpLCVhMQorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisJbW92LmwJCSYweDdmZmZmZmZmLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwYixJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4YWFhYWFhYWEsSVJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4N2ZmZmZmZmYsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4YWFhYWFhYWEsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweDdmZmZmZmZmLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2FzMjk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YudwkJJjB4YWFhYSwoJWEwKQorCW1vdi53CQkmMHhiYmJiLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4YmJiYiwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDE0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDEwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhjY2NjLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4ZGRkZCxJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMTA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YudwkJJjB4YWFhYSwoJWEwKQorCW1vdi53CQkmMHhiYmJiLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4YmJiYiwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhjY2NjLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4ZGRkZCxJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMTE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YudwkJJjB4ZWVlZSwoJWEwKQorCW1vdi53CQkmMHhiYmJiLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4YmJiYiwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4NCsweDIoJWE2KQorCW1vdi53CQkmMHhiYmJiLElSRUdTKzB4OCsweDIoJWE2KQorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4YmJiYixJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMTI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YudwkJJjB4ZWVlZSwoJWEwKQorCW1vdi53CQkmMHhiYmJiLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4YmJiYiwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4NCsweDIoJWE2KQorCW1vdi53CQkmMHhiYmJiLElSRUdTKzB4OCsweDIoJWE2KQorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4YmJiYixJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMTM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDAoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg0KCVhNiksJWExCisKKwltb3YudwkJJjB4YWFhYSwoJWEwKQorCW1vdi53CQkmMHhlZWVlLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4YmJiYiwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhhYWFhLElSRUdTKzB4NCsweDIoJWE2KQorCW1vdi53CQkmMHhlZWVlLElSRUdTKzB4OCsweDIoJWE2KQorCW1vdi53CQkmMHhhYWFhLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMTQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YudwkJJjB4YWFhYSwoJWEwKQorCW1vdi53CQkmMHg3ZmZmLCglYTEpCisKKwltb3YudwkJJjB4YWFhYSwlZDEKKwltb3YudwkJJjB4ODAwMCwlZDIKKwltb3YudwkJJjB4Y2NjYywlZDMKKwltb3YudwkJJjB4ZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDFiLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDEwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLncJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YudwkJKCVhMCksJWQ1CisJbW92LncJCSglYTEpLCVkNgorCW1vdi53CQkmMHhhYWFhLElSRUdTKzB4NCsweDIoJWE2KQorCW1vdi53CQkmMHg3ZmZmLElSRUdTKzB4OCsweDIoJWE2KQorCW1vdi53CQkmMHhhYWFhLElSRUdTKzB4MTQrMHgyKCVhNikKKwltb3YudwkJJjB4N2ZmZixJUkVHUysweDE4KzB4MiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NtcDJfc3RyOgorCXN0cmluZwkJIlx0Y21wMixjaGsyLi4uIgorCisJYWxpZ24JCTB4NAorIyB1bnNpZ25lZCAtIHNtYWxsLHNtYWxsCitjbXAyXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTEyMCwlZDEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDA0MCwlYTEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTEzMCwlZDEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljaGsyLmIJCURBVEEoJWE2KSwlZDEKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAxMCwlYTEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTE1MCwlZDEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHgyMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDA5MCwlYTEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIHVuc2lnbmVkIC0gc21hbGwsbGFyZ2UKK2NtcDJfNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDIwMDBhMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMjAwMCwlZDEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLncJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgyMDAwYTAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4ZmZmZmEwMDAsJWExCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi53CQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl85OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MjAwMGEwMDAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTEzMDAwLCVkMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNoazIudwkJREFUQSglYTYpLCVkMQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMTA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgyMDAwYTAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4ZmZmZjkwMDAsJWExCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi53CQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8xMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDIwMDBhMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTAwMCwlZDEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLncJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzEyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MjAwMGEwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGZmZmZiMDAwLCVhMQorCisJbW92LncJCSYweDAwMDEsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIudwkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgdW5zaWduZWQgLSBsYXJnZSxsYXJnZQorY21wMl8xMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGEwMDAwMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhjMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweGEwMDAwMDAwLCVkMQorCisJbW92LncJCSYweDAwMGMsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDgsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIubAkJJWQxLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMTQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhhMDAwMDAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4YzAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHhjMDAwMDAwMCwlYTEKKworCW1vdi53CQkmMHgwMDBjLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDA4LCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmwJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzE1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4YTAwMDAwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGMwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4YjAwMDAwMDAsJWQxCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwOCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2hrMi5sCQlEQVRBKCVhNiksJWQxCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8xNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGEwMDAwMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhjMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDEwMDAwMDAwLCVhMQorCisJbW92LncJCSYweDAwMDksSUNDUiglYTYpCisJbW92LncJCSYweDAwMDgsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIubAkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMTc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhhMDAwMDAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4YzAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHg5MDAwMDAwMCwlZDEKKworCW1vdi53CQkmMHgwMDA5LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDA4LCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmwJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzE4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4YTAwMDAwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGMwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4ZDAwMDAwMDAsJWExCisKKwltb3YudwkJJjB4MDAwOSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwOCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5sCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBzaWduZWQgLSBuZWdhdGl2ZSxwb3NpdGl2ZQorY21wMl8xOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwNDAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTExMWEwLCVkMQorCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWQxLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDA0MCwlYTEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljaGsyLmIJCURBVEEoJWE2KSwlYTEKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzIxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExYjAsJWQxCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwNDAsREFUQSglYTYpCisJbW92LmwJCSYweDAwMDAwMDEwLCVhMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTE5MCwlZDEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzI0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwNTAsJWExCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBzaWduZWQgLSBuZWdhdGl2ZSxuZWdhdGl2ZQorY21wMl8yNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwYzAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTExMWEwLCVkMQorCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWQxLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMGMwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZjMCwlYTEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzI3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTBjMCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExYjAsJWQxCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2hrMi5iCQlEQVRBKCVhNiksJWQxCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwYzAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTExMTkwLCVhMQorCisJbW92LncJCSYweDAwMDEsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMGMwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTFkMCwlZDEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzMwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTBjMCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwNTAsJWExCisKKwltb3YudwkJJjB4MDAxYixJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxZiwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCW1vdi5sCQlURVNUQ1RSKCVhNiksJWQxCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlYV9zdHI6CisJc3RyaW5nCQkiXHRFZmZlY3RpdmUgYWRkcmVzc2VzLi4uIgorCisJYWxpZ24JCTB4NAorZWFfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEwKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEwKSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDIwKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJLSglYTApLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDIwKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVhNiksJWEwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAwMCwlYTApLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhMCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisjCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKyMJY2xyLmwJCSVkMgorIwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisKKyMJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisjCW1vdi53CQkmMHgwMDAwLCVjYworIwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisjCW11bHUubAkJRUFNRU0udywlZDI6JWQzCisKKyMJbW92LncJCSVjYyxTQ0NSKCVhNikKKyMJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKyMJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKyMJYnNyLmwJCWNoa3JlZ3MKKyMJdHN0LmIJCSVkMAorIwlibmUubAkJZXJyb3IKKworZWFfNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKyMJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworIwljbHIubAkJJWQyCisjCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKworIwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKyMJbW92LncJCSYweDAwMDAsJWNjCisjCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKyMJbXVsdS5sCQlFQU1FTS5sLCVkMjolZDMKKworIwltb3YudwkJJWNjLFNDQ1IoJWE2KQorIwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorIwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworIwlic3IubAkJY2hrcmVncworIwl0c3QuYgkJJWQwCisjCWJuZS5sCQllcnJvcgorCitlYV83OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJJjB4MDAwMDAwMDIsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzhfbmV4dAorZWFfOF9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfOF9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzhfbWVtLncsJXBjKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCS0oJWExKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgyNCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQktKCVhMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MjgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzExOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJLSglYTMpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDJjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCS0oJWE0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgzMCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHg0KCVhNiksJWE1CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQktKCVhNSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MzQoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE2LCVhMQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4NCglYTEpLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJLSglYTYpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKwlsZWEJCUVBTUVNKCVhMSksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDM4KCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCW1vdi5sCQklYTcsJWEwCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTcKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCS0oJWE3KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSglYTYpLCVhMQorCW1vdi5sCQklYTEsSVJFR1MrMHgzYyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC53KjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTAsJWQ0LncqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQudyo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC53KjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC5sKjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTAsJWQ0LmwqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzIyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQubCo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgyLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTAsJWE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzI1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJjB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgtMHgxMC5iLCVhMCwlYTQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMSwlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMgorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMiwlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMywlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhNAorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhNCwlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhNQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhNSwlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTYsJWExCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWExKSwlYTYKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKDB4MTAuYiwlYTYsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhMSkKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWExKQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWExKQorCisJbW92LmwJCSVhMSwlYTYKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwltb3YubAkJJWE3LCVhMAorCWxlYQkJRUFNRU0oJWE2KSwlYTcKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTcsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJbW92LmwJCSVhMCwlYTcKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzM0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEzKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzM3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTUKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTUpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTEpLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKCVhNiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhMSkKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWExKQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWExKQorCisJbW92LmwJCSVhMSwlYTYKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwltb3YubAkJJWE3LCVhMAorCWxlYQkJRUFNRU0oJWE2KSwlYTcKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTcpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTEpKywlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MjQoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTIpKywlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MjgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTMpKywlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MmMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTQpKywlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MzAoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTUKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTUpKywlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MzQoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE2LCVhMQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhMSksJWE2CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhMSkKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWExKQorCisJbXVsdS5sCQkoJWE2KSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhMSkKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWExKQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWExKQorCWxlYQkJRUFNRU0rMHg0KCVhMSksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDM4KCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNDY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbW92LmwJCSVhNywlYTAKKwlsZWEJCUVBTUVNKCVhNiksJWE3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWE3KSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWExCisJbW92LmwJCSVhMSxJUkVHUysweDNjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWExCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhMyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzUwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzUxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWE1CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMDAwLCVhNSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzUyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE2LCVhMQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTEpLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKDB4MTAwMCwlYTYpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNTM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbW92LmwJCSVhNywlYTAKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhNworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTcpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzU0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVhNiksJWEwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAwMCwlYTApLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81NToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNTVfbmV4dAorCitlYV81NV9kYXRhOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzU1X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNTVfZGF0YS53LCVwYyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzU2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzU3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC53LCVhMywlZDQudyoyKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNTg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC53KjQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81OToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LncqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzYwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LmwqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzYxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC53LCVhMywlZDQubCoyKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC5sKjQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82MzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzY0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJjB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgtMHgxMC53LCVhMywlYTQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmMHgyLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MDAudywlYTMsJXphNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82NjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSVhMywlYTQKKwlhZGQubAkJJjB4MTAsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAudywlemEzLCVhNC5sKjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82NzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYweDIsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAubCwlYTMsJWE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzY4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV82OF9uZXh0CitlYV82OF9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNjhfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV82OF9tZW0rMHgxMC53LCVwYywlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzY5X25leHQKK2VhXzY5X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV82OV9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNjlfbWVtKzB4MTAudywlcGMsJWQ0LncqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzcwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV83MF9uZXh0CitlYV83MF9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzBfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzcwX21lbSsweDEwLncsJXBjLCVkNC53KjQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNzFfbmV4dAorZWFfNzFfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzcxX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83MV9tZW0rMHgxMC53LCVwYywlZDQudyo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzcyX25leHQKK2VhXzcyX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83Ml9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzcyX21lbSsweDEwLncsJXBjLCVkNC5sKjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83MzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNzNfbmV4dAorZWFfNzNfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzczX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83M19tZW0rMHgxMC53LCVwYywlZDQubCoyKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzc0X25leHQKK2VhXzc0X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83NF9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNzRfbWVtKzB4MTAudywlcGMsJWQ0LmwqNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzc1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV83NV9uZXh0CitlYV83NV9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzVfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzc1X21lbSsweDEwLncsJXBjLCVkNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83NjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNzZfbmV4dAorZWFfNzZfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzc2X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83Nl9tZW0rMHgxMC53LCVwYywlYTQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzc3X25leHQKK2VhXzc3X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83N19uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJjB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83N19tZW0rMHgwMC53LCVwYywlemE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzc4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworIwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisjCWNsci5sCQklZDIKKyMJbW92LmwJCSYweDAwMDAwMDAyLCVkMworIwlsZWEJCUVBTUVNLCVhMworIwltb3YubAkJJWEzLCVhNAorIwlhZGQubAkJJjB4MTAsJWE0CisKKyMJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisjCW1vdi53CQkmMHgwMDAwLCVjYworIwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisjCW11bHUubAkJKEVBTUVNLTB4MTAudywlenBjLCVhNC5sKjEpLCVkMjolZDMKKworIwltb3YudwkJJWNjLFNDQ1IoJWE2KQorIwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorIwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworIwlic3IubAkJY2hrcmVncworIwl0c3QuYgkJJWQwCisjCWJuZS5sCQllcnJvcgorCitlYV83OToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLCVhMworCW1vdi5sCQkmMHgyLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzc5X21lbS0weDEwLmwsJXBjLCVhNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJyYS5iCQllYV83OV9uZXh0CitlYV83OV9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzlfbmV4dDoKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODBfbmV4dAorZWFfODBfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzgwX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODBfbWVtKzB4MTAuYiwlcGMsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzgxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84MV9uZXh0CitlYV84MV9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfODFfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzgxX21lbSsweDEwLmIsJXBjLCVkNC53KjIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84MjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODJfbmV4dAorZWFfODJfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzgyX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84Ml9tZW0rMHgxMC5iLCVwYywlZDQudyo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzgzX25leHQKK2VhXzgzX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84M19uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODNfbWVtKzB4MTAuYiwlcGMsJWQ0LncqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84NF9uZXh0CitlYV84NF9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfODRfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84NF9tZW0rMHgxMC5iLCVwYywlZDQubCoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzg1X25leHQKK2VhXzg1X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84NV9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODVfbWVtKzB4MTAuYiwlcGMsJWQ0LmwqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84Nl9uZXh0CitlYV84Nl9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfODZfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzg2X21lbSsweDEwLmIsJXBjLCVkNC5sKjQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84NzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODdfbmV4dAorZWFfODdfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzg3X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84N19tZW0rMHgxMC5iLCVwYywlZDQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84OF9tZW0rMHgxMC5iLCVwYywlZDQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlicmEuYgkJZWFfODhfbmV4dAorZWFfODhfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzg4X25leHQ6CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNCwlZDQudyoxXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzkwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNCwlZDQudyoyXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzkxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNCwlZDQudyo0XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzkyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNCwlZDQudyo4XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzkzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LmwqMV0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85NDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LmwqMl0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85NToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LmwqNF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85NjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LmwqOF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85NzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAubCwlYTQsJWQ0LmwqOF0sMHgxMDAwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85ODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MDAubCwlYTQsJXpkNC5sKjhdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFslYTQsJXpkNC5sKjhdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTAwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisJYWRkLmwJCSVhNCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC5sLCV6YTQsJWQ0LmwqMV0sMHgxMDAwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisjCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKyMJY2xyLmwJCSVkMgorIwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisjCWxlYQkJRUFNRU0oJWE2KSwlYTMKKyMJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisjCW1vdi5sCQklYTMsKCVhNCkKKyMJbW92LmwJCSYtMHgxMCwlZDQKKworIwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKyMJbW92LncJCSYweDAwMDAsJWNjCisjCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKyMJbXVsdS5sCQkoW0VBU1RPUkUubCwlemE0LCV6ZDQubCoxXSksJWQyOiVkMworCisjCW1vdi53CQklY2MsU0NDUiglYTYpCisjCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisjCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisjCWJzci5sCQljaGtyZWdzCisjCXRzdC5iCQklZDAKKyMJYm5lLmwJCWVycm9yCisKK2VhXzEwMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDEwMDAoJWExKSwlYTMKKwlsZWEJCUVBU1RPUkUoJWExKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKFsweDEwLncsJWE0LCVhNi5sKjhdLC0weDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhMSkKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWExKQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWExKQorCisJbW92LmwJCSVhMSwlYTYKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTYsJWExCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVhMSksJWEzCisJbGVhCQlFQVNUT1JFKCVhMSksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmMHgyLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKFstMHgxMC53LCVhNCwlYTYubCo4XSwtMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTA0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0XSwlZDQudyoxLDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0XSwlZDQudyoyLDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0XSwlZDQudyo0LDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0XSwlZDQudyo4LDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LmwqMSwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LncqMiwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LmwqNCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LmwqOCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC5sLCVhNF0sJWQ0LmwqOCwweDEwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDAwLmwsJWE0XSwlemQ0LmwqOCwweDIwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTcsJWEwCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTcKKwltb3YubAkJJWEzLCglYTcpCisJbW92LmwJCSYweDIwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFslYTddLCVkNC5sKjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzExNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKyMJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworIwljbHIubAkJJWQyCisjCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKyMJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisjCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorIwltb3YubAkJJWEzLCglYTQpCisjCW1vdi5sCQkmMHgyLCVkNAorCisjCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorIwltb3YudwkJJjB4MDAwMCwlY2MKKyMJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworIwltdWx1LmwJCShbRUFTVE9SRS5sLCV6YTRdLCV6ZDQubCo4LDB4MjAubCksJWQyOiVkMworCisjCW1vdi53CQklY2MsU0NDUiglYTYpCisjCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisjCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisjCWJzci5sCQljaGtyZWdzCisjCXRzdC5iCQklZDAKKyMJYm5lLmwJCWVycm9yCisKK2VhXzExNjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTEpLCVhMworCWxlYQkJRUFTVE9SRSglYTEpLCVhNgorCW1vdi5sCQklYTMsKCVhNikKKwlhZGQubAkJJjB4MTAsJWE2CisJbW92LmwJCSYtMHgyLCVhNQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKFstMHgxMC53LCVhNl0sJWE1LmwqOCwweDEwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCW1vdi5sCQlURVNUQ1RSKCVhNiksJWQxCisJY2xyLmwJCSVkMAorCXJ0cworCitlYV8xMTc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRSsweDEwLncsJXBjLCVkNC53KjFdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTE4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRSsweDEwLncsJXBjLCVkNC53KjJdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTE5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRSsweDEwLncsJXBjLCVkNC53KjRdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTIwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRSsweDEwLncsJXBjLCVkNC53KjhdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTIxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQubCoxXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQubCoyXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQubCo0XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQubCo4XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCW11bHUubAkJKFtFQVNUT1JFKzB4MTAubCwlcGMsJWQ0LmwqOF0sMHgxMDAwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFKzB4MDAubCwlcGMsJXpkNC5sKjhdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTI3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQklYTQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWyV6cGMsJWQ0LmwqMV0sMHgxMDAwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgxMCwlZDQKKwlhZGQubAkJJWE0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLmwsJXpwYywlZDQubCoxXSwweDEwMDAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS5sLCV6cGMsJXpkNC5sKjFdKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTMwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmMHgyLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLTB4MTAudywlcGMsJWE2LmwqOF0sLTB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTMxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE3LCVhMAorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYweDIsJWE3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUtMHgxMC53LCVwYywlYTcubCo4XSwtMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS53LCVwY10sJWQ0LncqMSwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS53LCVwY10sJWQ0LncqMiwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMzQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS53LCVwY10sJWQ0LncqNCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMzU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS53LCVwY10sJWQ0LncqOCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC5sKjEsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC53KjIsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC5sKjQsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC5sKjgsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTQwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUubCwlcGNdLCVkNC5sKjgsMHgxMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTQxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS5sLCVwY10sJXpkNC5sKjgsMHgyMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTQyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJjB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS5sLCV6cGNdLCVkNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xNDM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTcsJWEwCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE2CisJbW92LmwJCSVhMywoJWE2KQorCWFkZC5sCQkmMHgxMCwlYTYKKwltb3YubAkJJi0weDIsJWE3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVhNy5sKjgsMHgxMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Noa3JlZ3M6CisJbGVhCQlJUkVHUyglYTYpLCVhMAorCWxlYQkJU1JFR1MoJWE2KSwlYTEKKwltb3YubAkJJjE0LCVkMAorY2hrcmVnc19sb29wOgorCWNtcC5sCQkoJWEwKSssKCVhMSkrCisJYm5lLmwJCWNoa3JlZ3NfZXJyb3IKKwlkYnJhLncJCSVkMCxjaGtyZWdzX2xvb3AKKworCW1vdi53CQlJQ0NSKCVhNiksJWQwCisJbW92LncJCVNDQ1IoJWE2KSwlZDEKKwljbXAudwkJJWQwLCVkMQorCWJuZS5sCQljaGtyZWdzX2Vycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKK2Noa3JlZ3NfZXJyb3I6CisJbW92cS5sCQkmMHgxLCVkMAorCXJ0cworCitlcnJvcjoKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCW1vdnEubAkJJjB4MSwlZDAKKwlydHMKKworREVGX1JFR1M6CisJbG9uZwkJMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYworCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKworCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitfcHJpbnRfc3RyOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShURVNUVE9QLTB4ODArMHgwLCVwYyksJWQwCisJcGVhCQkoVEVTVFRPUC0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCitfcHJpbnRfbnVtOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShURVNUVE9QLTB4ODArMHg0LCVwYyksJWQwCisJcGVhCQkoVEVTVFRPUC0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk5N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9wZnBzcC5TCkBAIC0wLDAgKzEsMTQ3NDUgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgZnJlYWwuczoKKyMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MEZQU1AgcGFja2FnZQorIyBhbmQgY29udGFpbnMgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWNrYWdlLiBUaGUgdXNlciwgaW4KKyMgZWZmZWN0LCBicmFuY2hlcyB0byBvbmUgb2YgdGhlIGJyYW5jaCB0YWJsZSBlbnRyaWVzIGxvY2F0ZWQKKyMgYWZ0ZXIgXzA2MEZQU1BfVEFCTEUuCisjCUFsc28sIHN1YnJvdXRpbmUgc3R1YnMgZXhpc3QgaW4gdGhpcyBmaWxlIChfZnBzcF9kb25lIGZvcgorIyBleGFtcGxlKSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBGUFNQIHBhY2thZ2UgaXRzZWxmIGluIG9yZGVyCisjIHRvIGNhbGwgYSBnaXZlbiByb3V0aW5lLiBUaGUgc3R1YiByb3V0aW5lIGFjdHVhbGx5IHBlcmZvcm1zIHRoZQorIyBjYWxsb3V0LiBUaGUgRlBTUCBjb2RlIGRvZXMgYSAiYnNyIiB0byB0aGUgc3R1YiByb3V0aW5lLiBUaGlzCisjIGV4dHJhIGxheWVyIG9mIGhpZXJhcmNoeSBhZGRzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIHBlbmFsdHkgYnV0CisjIGl0IG1ha2VzIHRoZSBGUFNQIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG1vcmUgbWFpbmF0aW5hYmxlLgorIworCitzZXQJX29mZl9ic3VuLAkweDAwCitzZXQJX29mZl9zbmFuLAkweDA0CitzZXQJX29mZl9vcGVyciwJMHgwOAorc2V0CV9vZmZfb3ZmbCwJMHgwYworc2V0CV9vZmZfdW5mbCwJMHgxMAorc2V0CV9vZmZfZHosCTB4MTQKK3NldAlfb2ZmX2luZXgsCTB4MTgKK3NldAlfb2ZmX2ZsaW5lLAkweDFjCitzZXQJX29mZl9mcHVfZGlzLAkweDIwCitzZXQJX29mZl90cmFwLAkweDI0CitzZXQJX29mZl90cmFjZSwJMHgyOAorc2V0CV9vZmZfYWNjZXNzLAkweDJjCitzZXQJX29mZl9kb25lLAkweDMwCisKK3NldAlfb2ZmX2ltciwJMHg0MAorc2V0CV9vZmZfZG1yLAkweDQ0CitzZXQJX29mZl9kbXcsCTB4NDgKK3NldAlfb2ZmX2lydywJMHg0Yworc2V0CV9vZmZfaXJsLAkweDUwCitzZXQJX29mZl9kcmIsCTB4NTQKK3NldAlfb2ZmX2RydywJMHg1OAorc2V0CV9vZmZfZHJsLAkweDVjCitzZXQJX29mZl9kd2IsCTB4NjAKK3NldAlfb2ZmX2R3dywJMHg2NAorc2V0CV9vZmZfZHdsLAkweDY4CisKK18wNjBGUFNQX1RBQkxFOgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBIZXJlJ3MgdGhlIHRhYmxlIG9mIEVOVFJZIFBPSU5UUyBmb3IgdGhvc2UgbGlua2luZyB0aGUgcGFja2FnZS4KKwlicmEubAkJX2Zwc3Bfc25hbgorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3Bfb3BlcnIKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX292ZmwKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX3VuZmwKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX2R6CisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9pbmV4CisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9mbGluZQorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfdW5zdXBwCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9lZmZhZGQKKwlzaG9ydAkJMHgwMDAwCisKKwlzcGFjZQkJNTYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnBzcF9kb25lCitfZnBzcF9kb25lOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG9uZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfb3ZmbAorX3JlYWxfb3ZmbDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX292ZmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3VuZmwKK19yZWFsX3VuZmw6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl91bmZsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9pbmV4CitfcmVhbF9pbmV4OgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaW5leCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfYnN1bgorX3JlYWxfYnN1bjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2JzdW4sJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX29wZXJyCitfcmVhbF9vcGVycjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX29wZXJyLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9zbmFuCitfcmVhbF9zbmFuOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfc25hbiwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfZHoKK19yZWFsX2R6OgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHosJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2ZsaW5lCitfcmVhbF9mbGluZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ZsaW5lLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9mcHVfZGlzYWJsZWQKK19yZWFsX2ZwdV9kaXNhYmxlZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ZwdV9kaXMsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3RyYXAKK19yZWFsX3RyYXA6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl90cmFwLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF90cmFjZQorX3JlYWxfdHJhY2U6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl90cmFjZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfYWNjZXNzCitfcmVhbF9hY2Nlc3M6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9hY2Nlc3MsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfaW1lbV9yZWFkCitfaW1lbV9yZWFkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaW1yLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkCitfZG1lbV9yZWFkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG1yLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZQorX2RtZW1fd3JpdGU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kbXcsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9pbWVtX3JlYWRfd29yZAorX2ltZW1fcmVhZF93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaXJ3LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfaW1lbV9yZWFkX2xvbmcKK19pbWVtX3JlYWRfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2lybCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF9ieXRlCitfZG1lbV9yZWFkX2J5dGU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcmIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfd29yZAorX2RtZW1fcmVhZF93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJ3LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX2xvbmcKK19kbWVtX3JlYWRfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RybCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGVfYnl0ZQorX2RtZW1fd3JpdGVfYnl0ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R3YiwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGVfd29yZAorX2RtZW1fd3JpdGVfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R3dywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGVfbG9uZworX2RtZW1fd3JpdGVfbG9uZzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R3bCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworIworIyBUaGlzIGZpbGUgY29udGFpbnMgYSBzZXQgb2YgZGVmaW5lIHN0YXRlbWVudHMgZm9yIGNvbnN0YW50cworIyBpbiBvcmRlciB0byBwcm9tb3RlIHJlYWRhYmlsaXR5IHdpdGhpbiB0aGUgY29yZWNvZGUgaXRzZWxmLgorIworCitzZXQgTE9DQUxfU0laRSwJCTE5MgkJCSMgc3RhY2sgZnJhbWUgc2l6ZShieXRlcykKK3NldCBMViwJCQktTE9DQUxfU0laRQkJIyBzdGFjayBvZmZzZXQKKworc2V0IEVYQ19TUiwJCTB4NAkJCSMgc3RhY2sgc3RhdHVzIHJlZ2lzdGVyCitzZXQgRVhDX1BDLAkJMHg2CQkJIyBzdGFjayBwYworc2V0IEVYQ19WT0ZGLAkJMHhhCQkJIyBzdGFja2VkIHZlY3RvciBvZmZzZXQKK3NldCBFWENfRUEsCQkweGMJCQkjIHN0YWNrZWQgPGVhPgorCitzZXQgRVhDX0ZQLAkJMHgwCQkJIyBmcmFtZSBwb2ludGVyCisKK3NldCBFWENfQVJFR1MsCQktNjgJCQkjIG9mZnNldCBvZiBhbGwgYWRkcmVzcyByZWdzCitzZXQgRVhDX0RSRUdTLAkJLTEwMAkJCSMgb2Zmc2V0IG9mIGFsbCBkYXRhIHJlZ3MKK3NldCBFWENfRlBSRUdTLAkJLTM2CQkJIyBvZmZzZXQgb2YgYWxsIGZwIHJlZ3MKKworc2V0IEVYQ19BNywJCUVYQ19BUkVHUysoNyo0KQkJIyBvZmZzZXQgb2Ygc2F2ZWQgYTcKK3NldCBPTERfQTcsCQlFWENfQVJFR1MrKDYqNCkJCSMgZXh0cmEgY29weSBvZiBzYXZlZCBhNworc2V0IEVYQ19BNiwJCUVYQ19BUkVHUysoNio0KQkJIyBvZmZzZXQgb2Ygc2F2ZWQgYTYKK3NldCBFWENfQTUsCQlFWENfQVJFR1MrKDUqNCkKK3NldCBFWENfQTQsCQlFWENfQVJFR1MrKDQqNCkKK3NldCBFWENfQTMsCQlFWENfQVJFR1MrKDMqNCkKK3NldCBFWENfQTIsCQlFWENfQVJFR1MrKDIqNCkKK3NldCBFWENfQTEsCQlFWENfQVJFR1MrKDEqNCkKK3NldCBFWENfQTAsCQlFWENfQVJFR1MrKDAqNCkKK3NldCBFWENfRDcsCQlFWENfRFJFR1MrKDcqNCkKK3NldCBFWENfRDYsCQlFWENfRFJFR1MrKDYqNCkKK3NldCBFWENfRDUsCQlFWENfRFJFR1MrKDUqNCkKK3NldCBFWENfRDQsCQlFWENfRFJFR1MrKDQqNCkKK3NldCBFWENfRDMsCQlFWENfRFJFR1MrKDMqNCkKK3NldCBFWENfRDIsCQlFWENfRFJFR1MrKDIqNCkKK3NldCBFWENfRDEsCQlFWENfRFJFR1MrKDEqNCkKK3NldCBFWENfRDAsCQlFWENfRFJFR1MrKDAqNCkKKworc2V0IEVYQ19GUDAsCQlFWENfRlBSRUdTKygwKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDAKK3NldCBFWENfRlAxLAkJRVhDX0ZQUkVHUysoMSoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAxCitzZXQgRVhDX0ZQMiwJCUVYQ19GUFJFR1MrKDIqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMiAobm90IHVzZWQpCisKK3NldCBGUF9TQ1IxLAkJTFYrODAJCQkjIGZwIHNjcmF0Y2ggMQorc2V0IEZQX1NDUjFfRVgsCQlGUF9TQ1IxKzAKK3NldCBGUF9TQ1IxX1NHTiwJRlBfU0NSMSsyCitzZXQgRlBfU0NSMV9ISSwJCUZQX1NDUjErNAorc2V0IEZQX1NDUjFfTE8sCQlGUF9TQ1IxKzgKKworc2V0IEZQX1NDUjAsCQlMVis2OAkJCSMgZnAgc2NyYXRjaCAwCitzZXQgRlBfU0NSMF9FWCwJCUZQX1NDUjArMAorc2V0IEZQX1NDUjBfU0dOLAlGUF9TQ1IwKzIKK3NldCBGUF9TQ1IwX0hJLAkJRlBfU0NSMCs0CitzZXQgRlBfU0NSMF9MTywJCUZQX1NDUjArOAorCitzZXQgRlBfRFNULAkJTFYrNTYJCQkjIGZwIGRlc3RpbmF0aW9uIG9wZXJhbmQKK3NldCBGUF9EU1RfRVgsCQlGUF9EU1QrMAorc2V0IEZQX0RTVF9TR04sCQlGUF9EU1QrMgorc2V0IEZQX0RTVF9ISSwJCUZQX0RTVCs0CitzZXQgRlBfRFNUX0xPLAkJRlBfRFNUKzgKKworc2V0IEZQX1NSQywJCUxWKzQ0CQkJIyBmcCBzb3VyY2Ugb3BlcmFuZAorc2V0IEZQX1NSQ19FWCwJCUZQX1NSQyswCitzZXQgRlBfU1JDX1NHTiwJCUZQX1NSQysyCitzZXQgRlBfU1JDX0hJLAkJRlBfU1JDKzQKK3NldCBGUF9TUkNfTE8sCQlGUF9TUkMrOAorCitzZXQgVVNFUl9GUElBUiwJCUxWKzQwCQkJIyBGUCBpbnN0ciBhZGRyZXNzIHJlZ2lzdGVyCisKK3NldCBVU0VSX0ZQU1IsCQlMViszNgkJCSMgRlAgc3RhdHVzIHJlZ2lzdGVyCitzZXQgRlBTUl9DQywJCVVTRVJfRlBTUiswCQkjIEZQU1IgY29uZGl0aW9uIGNvZGVzCitzZXQgRlBTUl9RQllURSwJCVVTRVJfRlBTUisxCQkjIEZQU1IgcW91dGllbnQgYnl0ZQorc2V0IEZQU1JfRVhDRVBULAlVU0VSX0ZQU1IrMgkJIyBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgYnl0ZQorc2V0IEZQU1JfQUVYQ0VQVCwJVVNFUl9GUFNSKzMJCSMgRlBTUiBhY2NydWVkIGV4Y2VwdGlvbiBieXRlCisKK3NldCBVU0VSX0ZQQ1IsCQlMViszMgkJCSMgRlAgY29udHJvbCByZWdpc3Rlcgorc2V0IEZQQ1JfRU5BQkxFLAlVU0VSX0ZQQ1IrMgkJIyBGUENSIGV4Y2VwdGlvbiBlbmFibGUKK3NldCBGUENSX01PREUsCQlVU0VSX0ZQQ1IrMwkJIyBGUENSIHJvdW5kaW5nIG1vZGUgY29udHJvbAorCitzZXQgTF9TQ1IzLAkJTFYrMjgJCQkjIGludGVnZXIgc2NyYXRjaCAzCitzZXQgTF9TQ1IyLAkJTFYrMjQJCQkjIGludGVnZXIgc2NyYXRjaCAyCitzZXQgTF9TQ1IxLAkJTFYrMjAJCQkjIGludGVnZXIgc2NyYXRjaCAxCisKK3NldCBTVE9SRV9GTEcsCQlMVisxOQkJCSMgZmxhZzogb3BlcmFuZCBzdG9yZSAoaWUuIG5vdCBmY21wL2Z0c3QpCisKK3NldCBFWENfVEVNUDIsCQlMVisyNAkJCSMgdGVtcG9yYXJ5IHNwYWNlCitzZXQgRVhDX1RFTVAsCQlMVisxNgkJCSMgdGVtcG9yYXJ5IHNwYWNlCisKK3NldCBEVEFHLAkJTFYrMTUJCQkjIGRlc3RpbmF0aW9uIG9wZXJhbmQgdHlwZQorc2V0IFNUQUcsCQlMVisxNAkJCSMgc291cmNlIG9wZXJhbmQgdHlwZQorCitzZXQgU1BDT05EX0ZMRywJCUxWKzEwCQkJIyBmbGFnOiBzcGVjaWFsIGNhc2UgKHNlZSBiZWxvdykKKworc2V0IEVYQ19DQywJCUxWKzgJCQkjIHNhdmVkIGNvbmRpdGlvbiBjb2Rlcworc2V0IEVYQ19FWFRXUFRSLAlMVis0CQkJIyBzYXZlZCBjdXJyZW50IFBDIChhY3RpdmUpCitzZXQgRVhDX0VYVFdPUkQsCUxWKzIJCQkjIHNhdmVkIGV4dGVuc2lvbiB3b3JkCitzZXQgRVhDX0NNRFJFRywJCUxWKzIJCQkjIHNhdmVkIGV4dGVuc2lvbiB3b3JkCitzZXQgRVhDX09QV09SRCwJCUxWKzAJCQkjIHNhdmVkIG9wZXJhdGlvbiB3b3JkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSGVscGZ1bCBtYWNyb3MKKworc2V0IEZURU1QLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBGVEVNUF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IEZURU1QX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBGVEVNUF9ISSwJCTQKK3NldCBGVEVNUF9MTywJCTgKK3NldCBGVEVNUF9HUlMsCQkxMgorCitzZXQgTE9DQUwsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IExPQ0FMX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgTE9DQUxfU0dOLAkJMgkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5Lgorc2V0IExPQ0FMX0hJLAkJNAorc2V0IExPQ0FMX0xPLAkJOAorc2V0IExPQ0FMX0dSUywJCTEyCisKK3NldCBEU1QsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IERTVF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IERTVF9ISSwJCTQJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBEU1RfTE8sCQk4CisKK3NldCBTUkMsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IFNSQ19FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IFNSQ19ISSwJCTQJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBTUkNfTE8sCQk4CisKK3NldCBTR0xfTE8sCQkweDNmODEJCQkjIG1pbiBzZ2wgcHJlYyBleHBvbmVudAorc2V0IFNHTF9ISSwJCTB4NDA3ZQkJCSMgbWF4IHNnbCBwcmVjIGV4cG9uZW50CitzZXQgREJMX0xPLAkJMHgzYzAxCQkJIyBtaW4gZGJsIHByZWMgZXhwb25lbnQKK3NldCBEQkxfSEksCQkweDQzZmUJCQkjIG1heCBkYmwgcHJlYyBleHBvbmVudAorc2V0IEVYVF9MTywJCTB4MAkJCSMgbWluIGV4dCBwcmVjIGV4cG9uZW50CitzZXQgRVhUX0hJLAkJMHg3ZmZlCQkJIyBtYXggZXh0IHByZWMgZXhwb25lbnQKKworc2V0IEVYVF9CSUFTLAkJMHgzZmZmCQkJIyBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworc2V0IFNHTF9CSUFTLAkJMHgwMDdmCQkJIyBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKK3NldCBEQkxfQklBUywJCTB4MDNmZgkJCSMgZG91YmxlIHByZWNpc2lvbiBiaWFzCisKK3NldCBOT1JNLAkJMHgwMAkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBaRVJPLAkJMHgwMQkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBJTkYsCQkweDAyCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFFOQU4sCQkweDAzCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IERFTk9STSwJCTB4MDQJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgU05BTiwJCTB4MDUJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgVU5OT1JNLAkJMHgwNgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKKworIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IvRlBDUiBiaXRzICMKKyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IG5lZ19iaXQsCQkweDMJCQkjIG5lZ2F0aXZlIHJlc3VsdAorc2V0IHpfYml0LAkJMHgyCQkJIyB6ZXJvIHJlc3VsdAorc2V0IGluZl9iaXQsCQkweDEJCQkjIGluZmluaXRlIHJlc3VsdAorc2V0IG5hbl9iaXQsCQkweDAJCQkjIE5BTiByZXN1bHQKKworc2V0IHFfc25fYml0LAkJMHg3CQkJIyBzaWduIGJpdCBvZiBxdW90aWVudCBieXRlCisKK3NldCBic3VuX2JpdCwJCTcJCQkjIGJyYW5jaCBvbiB1bm9yZGVyZWQKK3NldCBzbmFuX2JpdCwJCTYJCQkjIHNpZ25hbGxpbmcgTkFOCitzZXQgb3BlcnJfYml0LAkJNQkJCSMgb3BlcmFuZCBlcnJvcgorc2V0IG92ZmxfYml0LAkJNAkJCSMgb3ZlcmZsb3cKK3NldCB1bmZsX2JpdCwJCTMJCQkjIHVuZGVyZmxvdworc2V0IGR6X2JpdCwJCTIJCQkjIGRpdmlkZSBieSB6ZXJvCitzZXQgaW5leDJfYml0LAkJMQkJCSMgaW5leGFjdCByZXN1bHQgMgorc2V0IGluZXgxX2JpdCwJCTAJCQkjIGluZXhhY3QgcmVzdWx0IDEKKworc2V0IGFpb3BfYml0LAkJNwkJCSMgYWNjcnVlZCBpbmV4YWN0IG9wZXJhdGlvbiBiaXQKK3NldCBhb3ZmbF9iaXQsCQk2CQkJIyBhY2NydWVkIG92ZXJmbG93IGJpdAorc2V0IGF1bmZsX2JpdCwJCTUJCQkjIGFjY3J1ZWQgdW5kZXJmbG93IGJpdAorc2V0IGFkel9iaXQsCQk0CQkJIyBhY2NydWVkIGR6IGJpdAorc2V0IGFpbmV4X2JpdCwJCTMJCQkjIGFjY3J1ZWQgaW5leGFjdCBiaXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRlBTUiBpbmRpdmlkdWFsIGJpdCBtYXNrcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IG5lZ19tYXNrLAkJMHgwODAwMDAwMAkJIyBuZWdhdGl2ZSBiaXQgbWFzayAobHcpCitzZXQgaW5mX21hc2ssCQkweDAyMDAwMDAwCQkjIGluZmluaXR5IGJpdCBtYXNrIChsdykKK3NldCB6X21hc2ssCQkweDA0MDAwMDAwCQkjIHplcm8gYml0IG1hc2sgKGx3KQorc2V0IG5hbl9tYXNrLAkJMHgwMTAwMDAwMAkJIyBuYW4gYml0IG1hc2sgKGx3KQorCitzZXQgbmVnX2JtYXNrLAkJMHgwOAkJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGJ5dGUpCitzZXQgaW5mX2JtYXNrLAkJMHgwMgkJCSMgaW5maW5pdHkgYml0IG1hc2sgKGJ5dGUpCitzZXQgel9ibWFzaywJCTB4MDQJCQkjIHplcm8gYml0IG1hc2sgKGJ5dGUpCitzZXQgbmFuX2JtYXNrLAkJMHgwMQkJCSMgbmFuIGJpdCBtYXNrIChieXRlKQorCitzZXQgYnN1bl9tYXNrLAkJMHgwMDAwODAwMAkJIyBic3VuIGV4Y2VwdGlvbiBtYXNrCitzZXQgc25hbl9tYXNrLAkJMHgwMDAwNDAwMAkJIyBzbmFuIGV4Y2VwdGlvbiBtYXNrCitzZXQgb3BlcnJfbWFzaywJCTB4MDAwMDIwMDAJCSMgb3BlcnIgZXhjZXB0aW9uIG1hc2sKK3NldCBvdmZsX21hc2ssCQkweDAwMDAxMDAwCQkjIG92ZXJmbG93IGV4Y2VwdGlvbiBtYXNrCitzZXQgdW5mbF9tYXNrLAkJMHgwMDAwMDgwMAkJIyB1bmRlcmZsb3cgZXhjZXB0aW9uIG1hc2sKK3NldCBkel9tYXNrLAkJMHgwMDAwMDQwMAkJIyBkeiBleGNlcHRpb24gbWFzaworc2V0IGluZXgyX21hc2ssCQkweDAwMDAwMjAwCQkjIGluZXgyIGV4Y2VwdGlvbiBtYXNrCitzZXQgaW5leDFfbWFzaywJCTB4MDAwMDAxMDAJCSMgaW5leDEgZXhjZXB0aW9uIG1hc2sKKworc2V0IGFpb3BfbWFzaywJCTB4MDAwMDAwODAJCSMgYWNjcnVlZCBpbGxlZ2FsIG9wZXJhdGlvbgorc2V0IGFvdmZsX21hc2ssCQkweDAwMDAwMDQwCQkjIGFjY3J1ZWQgb3ZlcmZsb3cKK3NldCBhdW5mbF9tYXNrLAkJMHgwMDAwMDAyMAkJIyBhY2NydWVkIHVuZGVyZmxvdworc2V0IGFkel9tYXNrLAkJMHgwMDAwMDAxMAkJIyBhY2NydWVkIGRpdmlkZSBieSB6ZXJvCitzZXQgYWluZXhfbWFzaywJCTB4MDAwMDAwMDgJCSMgYWNjcnVlZCBpbmV4YWN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IgY29tYmluYXRpb25zIHVzZWQgaW4gdGhlIEZQU1AgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBkemluZl9tYXNrLAkJaW5mX21hc2srZHpfbWFzaythZHpfbWFzaworc2V0IG9wbmFuX21hc2ssCQluYW5fbWFzaytvcGVycl9tYXNrK2Fpb3BfbWFzaworc2V0IG56aV9tYXNrLAkJMHgwMWZmZmZmZgkJI2NsZWFycyBOLCBaLCBhbmQgSQorc2V0IHVuZmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKK3NldCB1bmYyaW54X21hc2ssCXVuZmxfbWFzaytpbmV4Ml9tYXNrK2FpbmV4X21hc2sKK3NldCBvdmZpbnhfbWFzaywJb3ZmbF9tYXNrK2luZXgyX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCitzZXQgaW54MWFfbWFzaywJCWluZXgxX21hc2srYWluZXhfbWFzaworc2V0IGlueDJhX21hc2ssCQlpbmV4Ml9tYXNrK2FpbmV4X21hc2sKK3NldCBzbmFuaW9wX21hc2ssCW5hbl9tYXNrK3NuYW5fbWFzaythaW9wX21hc2sKK3NldCBzbmFuaW9wMl9tYXNrLAlzbmFuX21hc2srYWlvcF9tYXNrCitzZXQgbmFuaW9wX21hc2ssCW5hbl9tYXNrK2Fpb3BfbWFzaworc2V0IG5lZ2luZl9tYXNrLAluZWdfbWFzaytpbmZfbWFzaworc2V0IGluZmFpb3BfbWFzaywJaW5mX21hc2srYWlvcF9tYXNrCitzZXQgbmVnel9tYXNrLAkJbmVnX21hc2srel9tYXNrCitzZXQgb3Bhb3BfbWFzaywJCW9wZXJyX21hc2srYWlvcF9tYXNrCitzZXQgdW5mbF9pbnhfbWFzaywJdW5mbF9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzaworc2V0IG92ZmxfaW54X21hc2ssCW92ZmxfbWFzaythb3ZmbF9tYXNrK2FpbmV4X21hc2sKKworIyMjIyMjIyMjCisjIG1pc2MuICMKKyMjIyMjIyMjIworc2V0IHJuZF9zdGt5X2JpdCwJMjkJCQkjIHN0a3kgYml0IHBvcyBpbiBsb25nd29yZAorCitzZXQgc2lnbl9iaXQsCQkweDcJCQkjIHNpZ24gYml0CitzZXQgc2lnbmFuX2JpdCwJCTB4NgkJCSMgc2lnbmFsbGluZyBuYW4gYml0CisKK3NldCBzZ2xfdGhyZXNoLAkJMHgzZjgxCQkJIyBtaW5pbXVtIHNnbCBleHBvbmVudAorc2V0IGRibF90aHJlc2gsCQkweDNjMDEJCQkjIG1pbmltdW0gZGJsIGV4cG9uZW50CisKK3NldCB4X21vZGUsCQkweDAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IHNfbW9kZSwJCTB4NAkJCSMgc2luZ2xlIHByZWNpc2lvbgorc2V0IGRfbW9kZSwJCTB4OAkJCSMgZG91YmxlIHByZWNpc2lvbgorCitzZXQgcm5fbW9kZSwJCTB4MAkJCSMgcm91bmQtdG8tbmVhcmVzdAorc2V0IHJ6X21vZGUsCQkweDEJCQkjIHJvdW5kLXRvLXplcm8KK3NldCBybV9tb2RlLAkJMHgyCQkJIyByb3VuZC10cC1taW51cy1pbmZpbml0eQorc2V0IHJwX21vZGUsCQkweDMJCQkjIHJvdW5kLXRvLXBsdXMtaW5maW5pdHkKKworc2V0IG1hbnRpc3NhbGVuLAk2NAkJCSMgbGVuZ3RoIG9mIG1hbnRpc3NhIGluIGJpdHMKKworc2V0IEJZVEUsCQkxCQkJIyBsZW4oYnl0ZSkgPT0gMSBieXRlCitzZXQgV09SRCwJCTIJCQkjIGxlbih3b3JkKSA9PSAyIGJ5dGVzCitzZXQgTE9ORywJCTQJCQkjIGxlbihsb25nd29yZCkgPT0gMiBieXRlcworCitzZXQgQlNVTl9WRUMsCQkweGMwCQkJIyBic3VuICAgIHZlY3RvciBvZmZzZXQKK3NldCBJTkVYX1ZFQywJCTB4YzQJCQkjIGluZXhhY3QgdmVjdG9yIG9mZnNldAorc2V0IERaX1ZFQywJCTB4YzgJCQkjIGR6ICAgICAgdmVjdG9yIG9mZnNldAorc2V0IFVORkxfVkVDLAkJMHhjYwkJCSMgdW5mbCAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgT1BFUlJfVkVDLAkJMHhkMAkJCSMgb3BlcnIgICB2ZWN0b3Igb2Zmc2V0CitzZXQgT1ZGTF9WRUMsCQkweGQ0CQkJIyBvdmZsICAgIHZlY3RvciBvZmZzZXQKK3NldCBTTkFOX1ZFQywJCTB4ZDgJCQkjIHNuYW4gICAgdmVjdG9yIG9mZnNldAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1BlY2lhbCBDT05EaXRpb24gRkxhR3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgZnRyYXBjY19mbGcsCTB4MDEJCQkjIGZsYWcgYml0OiBmdHJhcGNjIGV4Y2VwdGlvbgorc2V0IGZic3VuX2ZsZywJCTB4MDIJCQkjIGZsYWcgYml0OiBic3VuIGV4Y2VwdGlvbgorc2V0IG1pYTdfZmxnLAkJMHgwNAkJCSMgZmxhZyBiaXQ6IChhNykrIDxlYT4KK3NldCBtZGE3X2ZsZywJCTB4MDgJCQkjIGZsYWcgYml0OiAtKGE3KSA8ZWE+CitzZXQgZm1vdm1fZmxnLAkJMHg0MAkJCSMgZmxhZyBiaXQ6IGZtb3ZtIGluc3RydWN0aW9uCitzZXQgaW1tZWRfZmxnLAkJMHg4MAkJCSMgZmxhZyBiaXQ6ICY8ZGF0YT4gPGVhPgorCitzZXQgZnRyYXBjY19iaXQsCTB4MAorc2V0IGZic3VuX2JpdCwJCTB4MQorc2V0IG1pYTdfYml0LAkJMHgyCitzZXQgbWRhN19iaXQsCQkweDMKK3NldCBpbW1lZF9iaXQsCQkweDcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUUkFOU0NFTkRFTlRBTCAiTEFTVC1PUCIgRkxBR1MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IEZNVUxfT1AsCQkweDAJCQkjIGZtdWwgaW5zdHIgcGVyZm9ybWVkIGxhc3QKK3NldCBGRElWX09QLAkJMHgxCQkJIyBmZGl2IHBlcmZvcm1lZCBsYXN0CitzZXQgRkFERF9PUCwJCTB4MgkJCSMgZmFkZCBwZXJmb3JtZWQgbGFzdAorc2V0IEZNT1ZfT1AsCQkweDMJCQkjIGZtb3YgcGVyZm9ybWVkIGxhc3QKKworIyMjIyMjIyMjIyMjIworIyBDT05TVEFOVFMgIworIyMjIyMjIyMjIyMjIworVDE6CWxvbmcJCTB4NDBDNjJEMzgsMHhEM0Q2NDYzNAkjIDE2MzgxIExPRzIgTEVBRAorVDI6CWxvbmcJCTB4M0Q2RjkwQUUsMHhCMUU3NUNDNwkjIDE2MzgxIExPRzIgVFJBSUwKKworUEk6CWxvbmcJCTB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCisKK1RXT0JZUEk6CisJbG9uZwkJMHgzRkU0NUYzMCwweDZEQzlDODgzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3Bfb3ZmbCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBPdmVyZmxvdyBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgT3ZlcmZsb3cgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIDA2MEZQU1AgZXhpdCAoYWxsIHdvcmsgZG9uZSEpCSMKKyMJX3JlYWxfb3ZmbCgpIC0gImNhbGxvdXQiIGZvciBPdmVyZmxvdyBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIGZvciBJbmV4YWN0IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBleGNlcHRpb24gY29kZQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBPdmZsIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU92ZXJmbG93IEV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJT3ZlcmZsb3cgRXhjZXB0aW9uIGRpc2FibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlICJleGNlcHRpb24gcHJlc2VudCIgZmxhZyBpbiB0aGUgZnNhdmUgZnJhbWUgaXMgY2xlYXJlZAkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPbiB0aGUgMDYwLCBpZiBhbiBGUCBvdmVyZmxvdyBpcyBwcmVzZW50IGFzIHRoZSByZXN1bHQgb2YgYW55CSMKKyMgaW5zdHJ1Y3Rpb24sIHRoZSAwNjAgd2lsbCB0YWtlIGFuIG92ZXJmbG93IGV4Y2VwdGlvbiB3aGV0aGVyIHRoZQkjCisjIGV4Y2VwdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBGUENSLiBGb3IgdGhlIGRpc2FibGVkIGNhc2UsCSMKKyMgVGhpcyBoYW5kbGVyIGVtdWxhdGVzIHRoZSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY29ycmVjdAkjCisjIGRlZmF1bHQgcmVzdWx0IHNob3VsZCBiZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBkZWZhdWx0IHJlc3VsdCBpcwkjCisjIHRoZW4gc3RvcmVkIGluIGVpdGhlciB0aGUgRlAgcmVnZmlsZSwgZGF0YSByZWdmaWxlLCBvciBtZW1vcnkuCSMKKyMgRmluYWxseSwgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9mcHNwX2RvbmUoKQkJIworIyBkZW5vdGluZyB0aGF0IG5vIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgZXhpc3Qgd2l0aGluIHRoZSBtYWNoaW5lLgkjCisjCUlmIHRoZSBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlbiB0aGlzIGhhbmRsZXIgbXVzdCBjcmVhdGUgdGhlCSMKKyMgZXhjZXB0aW9uYWwgb3BlcmFuZCBhbmQgcGxhdmUgaXQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lLCBhbmQgc3RvcmUJIworIyB0aGUgZGVmYXVsdCByZXN1bHQgKG9ubHkgaWYgdGhlIGluc3RydWN0aW9uIGlzIG9wY2xhc3MgMykuIEZvcgkjCisjIGV4Y2VwdGlvbnMgZW5hYmxlZCwgdGhpcyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIJIworIyBfcmVhbF9vdmZsKCkgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBlbmFibGVkIG92ZXJmbG93IGhhbmRsZXIJIworIyBjYW4gaGFuZGxlIHRoaXMgY2FzZS4JCQkJCQkJIworIwlUd28gb3RoZXIgY29uZGl0aW9ucyBleGlzdC4gRmlyc3QsIGlmIG92ZXJmbG93IHdhcyBkaXNhYmxlZAkjCisjIGJ1dCB0aGUgaW5leGFjdCBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQJCSMKKyMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX2luZXgoKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHJlc3VsdAkjCisjIHdhcyBpbmV4YWN0LgkJCQkJCQkJIworIwlBbHNvLCBpbiB0aGUgY2FzZSBvZiBhbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9uIHdoZXJlCQkjCisjIG92ZXJmbG93IHdhcyBkaXNhYmxlZCBhbmQgdGhlIHRyYWNlIGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCwgdGhpcwkjCisjIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF90cmFjZSgpLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3Bfb3ZmbAorX2Zwc3Bfb3ZmbDoKKworIyQjCXN1Yi5sCQkmMjQsJXNwCQkJIyBtYWtlIHJvb20gZm9yIHNyYy9kc3QKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmb3ZmbF9vdXQKKworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKKyMgc2luY2UsIEkgYmVsaWV2ZSwgb25seSBOT1JNcyBhbmQgREVOT1JNcyBjYW4gY29tZSB0aHJvdWdoIGhlcmUsCisjIG1heWJlIHdlIGNhbiBhdm9pZCB0aGUgc3Vicm91dGluZSBjYWxsLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgbWF5YmUgTk9STSxERU5PUk0KKworIyBiaXQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGVzIHRoZSBtb25hZGljIGFuZCBkeWFkaWMgb3BlcmF0aW9ucworIyB0aGF0IGNhbiBwYXNzIHRocm91Z2ggZnBzcF9vdmZsKCkuIHJlbWVtYmVyIHRoYXQgZmNtcCwgZnRzdCwgYW5kIGZzaW5jb3MKKyMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLgorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZvdmZsX2V4dHJhY3QJCSMgbW9uYWRpYworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmb3ZmbF9vcDJfZG9uZQkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCitmb3ZmbF9vcDJfZG9uZToKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCisKK2ZvdmZsX2V4dHJhY3Q6CisKKyMkIwltb3YubAkJRlBfU1JDX0VYKCVhNiksVFJBUF9TUkNPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0VYKCVhNiksVFJBUF9EU1RPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9ISSglYTYpLFRSQVBfRFNUT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfTE8oJWE2KSxUUkFQX0RTVE9QX0xPKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisjIG1heWJlIHdlIGNhbiBtYWtlIHRoZXNlIGVudHJ5IHBvaW50cyBPTkxZIHRoZSBPVkZMIGVudHJ5IHBvaW50cyBvZiBlYWNoIHJvdXRpbmUuCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIyB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIGVtdWxhdGVkLiB0aGUgcmVzdWx0IGlzIGluIGZwMC4KKyMgdGhlIEVYT1AsIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCwgaXMgaW4gZnAxLgorIyB3ZSBtdXN0IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorIyB0cmFwcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCisJYnNyLmwJCXN0b3JlX2ZwcmVnCisKKyMgdGhlIGV4Y2VwdGlvbmFsIHBvc3NpYmlsaXRpZXMgd2UgaGF2ZSBsZWZ0IG91cnNlbHZlcyB3aXRoIGFyZSBPTkxZIG92ZXJmbG93CisjIGFuZCBpbmV4YWN0LiBhbmQsIHRoZSBpbmV4YWN0IGlzIHN1Y2ggdGhhdCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgd2FzIGRpc2FibGVkCisjIGJ1dCBpbmV4YWN0IHdhcyBlbmFibGVkLgorCWJ0c3QJCSZvdmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWZvdmZsX292Zmxfb24KKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlmb3ZmbF9pbmV4X29uCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisJYnJhLmwJCV9mcHNwX2RvbmUKKworIyBvdmVyZmxvdyBpcyBlbmFibGVkIEFORCBvdmVyZmxvdywgb2YgY291cnNlLCBvY2N1cnJlZC4gc28sIHdlIGhhdmUgdGhlIEVYT1AKKyMgaW4gZnAxLiBub3csIHNpbXBseSBqdW1wIHRvIF9yZWFsX292ZmwoKSEKK2ZvdmZsX292Zmxfb246CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgKGZwMSkgdG8gc3RhY2sKKworCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9vdmZsCisKKyMgb3ZlcmZsb3cgb2NjdXJyZWQgYnV0IGlzIGRpc2FibGVkLiBtZWFud2hpbGUsIGluZXhhY3QgaXMgZW5hYmxlZC4gdGhlcmVmb3JlLAorIyB3ZSBtdXN0IGp1bXAgdG8gcmVhbF9pbmV4KCkuCitmb3ZmbF9pbmV4X29uOgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgKGZwMSkgdG8gc3RhY2sKKworCW1vdi5iCQkmMHhjNCwxK0VYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9pbmV4CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm92Zmxfb3V0OgorCisKKyMkIwltb3YubAkJRlBfU1JDX0VYKCVhNiksVFJBUF9TUkNPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKKworIyB0aGUgc3JjIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhIE5PUk0oISksIHNvIHRhZyBpdCBhcyBzdWNoCisJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwlhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwlic3IubAkJZm91dAorCisJYnRzdAkJJm92ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUudwkJZm92Zmxfb3ZmbF9vbgorCisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZvdmZsX2luZXhfb24KKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisjJCMJYWRkLmwJCSYyNCwlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYmVxLmwJCV9mcHNwX2RvbmUJCSMgbm8KKworCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCSMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfdW5mbCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBVbmRlcmZsb3cgZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuZGVyZmxvdyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCisjCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgMDYwRlBTUCBleGl0IChhbGwgd29yayBkb25lISkJIworIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE92ZXJmbG93IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIworIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgZm9yIEluZXhhY3QgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGV4Y2VwdGlvbiBjb2RlCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIFVuZmwgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVW5kZXJmbG93IEV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJVW5kZXJmbG93IEV4Y2VwdGlvbiBkaXNhYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSAiZXhjZXB0aW9uIHByZXNlbnQiIGZsYWcgaW4gdGhlIGZzYXZlIGZyYW1lIGlzIGNsZWFyZWQJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJT24gdGhlIDA2MCwgaWYgYW4gRlAgdW5kZXJmbG93IGlzIHByZXNlbnQgYXMgdGhlIHJlc3VsdCBvZiBhbnkJIworIyBpbnN0cnVjdGlvbiwgdGhlIDA2MCB3aWxsIHRha2UgYW4gdW5kZXJmbG93IGV4Y2VwdGlvbiB3aGV0aGVyIHRoZQkjCisjIGV4Y2VwdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBGUENSLiBGb3IgdGhlIGRpc2FibGVkIGNhc2UsCSMKKyMgVGhpcyBoYW5kbGVyIGVtdWxhdGVzIHRoZSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY29ycmVjdAkjCisjIGRlZmF1bHQgcmVzdWx0IHNob3VsZCBiZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBkZWZhdWx0IHJlc3VsdCBpcwkjCisjIHRoZW4gc3RvcmVkIGluIGVpdGhlciB0aGUgRlAgcmVnZmlsZSwgZGF0YSByZWdmaWxlLCBvciBtZW1vcnkuCSMKKyMgRmluYWxseSwgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9mcHNwX2RvbmUoKQkJIworIyBkZW5vdGluZyB0aGF0IG5vIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgZXhpc3Qgd2l0aGluIHRoZSBtYWNoaW5lLgkjCisjCUlmIHRoZSBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlbiB0aGlzIGhhbmRsZXIgbXVzdCBjcmVhdGUgdGhlCSMKKyMgZXhjZXB0aW9uYWwgb3BlcmFuZCBhbmQgcGxhdmUgaXQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lLCBhbmQgc3RvcmUJIworIyB0aGUgZGVmYXVsdCByZXN1bHQgKG9ubHkgaWYgdGhlIGluc3RydWN0aW9uIGlzIG9wY2xhc3MgMykuIEZvcgkjCisjIGV4Y2VwdGlvbnMgZW5hYmxlZCwgdGhpcyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIJIworIyBfcmVhbF91bmZsKCkgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBlbmFibGVkIG92ZXJmbG93IGhhbmRsZXIJIworIyBjYW4gaGFuZGxlIHRoaXMgY2FzZS4JCQkJCQkJIworIwlUd28gb3RoZXIgY29uZGl0aW9ucyBleGlzdC4gRmlyc3QsIGlmIHVuZGVyZmxvdyB3YXMgZGlzYWJsZWQJIworIyBidXQgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdhcyBlbmFibGVkIGFuZCB0aGUgcmVzdWx0IHdhcyBpbmV4YWN0LAkjCisjIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX2luZXgoKS4JCSMKKyMgd2FzIGluZXhhY3QuCQkJCQkJCQkjCisjCUFsc28sIGluIHRoZSBjYXNlIG9mIGFuIG9wY2xhc3MgdGhyZWUgaW5zdHJ1Y3Rpb24gd2hlcmUJCSMKKyMgdW5kZXJmbG93IHdhcyBkaXNhYmxlZCBhbmQgdGhlIHRyYWNlIGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCwgdGhpcwkjCisjIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF90cmFjZSgpLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfdW5mbAorX2Zwc3BfdW5mbDoKKworIyQjCXN1Yi5sCQkmMjQsJXNwCQkJIyBtYWtlIHJvb20gZm9yIHNyYy9kc3QKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmdW5mbF9vdXQKKworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dCB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3BfdW5mbCgpLiByZW1lbWJlciB0aGF0IGZjbXAsIGFuZCBmdHN0CisjIHdpbGwgbmV2ZXIgdGFrZSB0aGlzIGV4Y2VwdGlvbi4KKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3AgbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZ1bmZsX2V4dHJhY3QJCSMgbW9uYWRpYworCisjIG5vdywgd2hhdCdzIGxlZnQgdGhhdCdzIG5vdCBkeWFkaWMgaXMgZnNpbmNvcy4gd2UgY2FuIGRpc3Rpbmd1aXNoIGl0CisjIGZyb20gYWxsIGR5YWRpY3MgYnkgdGhlICcwMTEweHh4IHBhdHRlcm4KKwlidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3AgYW4gZnNpbmNvcz8KKwlibmUuYgkJZnVuZmxfZXh0cmFjdAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZnVuZmxfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZnVuZmxfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmdW5mbF9leHRyYWN0OgorCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9FWCglYTYpLFRSQVBfRFNUT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfSEkoJWE2KSxUUkFQX0RTVE9QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0xPKCVhNiksVFJBUF9EU1RPUF9MTyglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KKworCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKyMgbWF5YmUgd2UgY2FuIG1ha2UgdGhlc2UgZW50cnkgcG9pbnRzIE9OTFkgdGhlIE9WRkwgZW50cnkgcG9pbnRzIG9mIGVhY2ggcm91dGluZS4KKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlzdG9yZV9mcHJlZworCisjIFRoZSBgMDYwIEZQVSBtdWx0aXBsaWVyIGhhcmR3YXJlIGlzIHN1Y2ggdGhhdCBpZiB0aGUgcmVzdWx0IG9mIGEKKyMgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBub3JtYWxpemVkIG51bWJlcgorIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCisjIHVuZGVyZmxvdyBleGNlcHRpb24uIFNpbmNlIHRoaXMgaXMgaW5jb3JyZWN0LCB3ZSBuZWVkIHRvIGNoZWNrCisjIGlmIG91ciBlbXVsYXRpb24sIGFmdGVyIHJlLWRvaW5nIHRoZSBvcGVyYXRpb24sIGRlY2lkZWQgdGhhdAorIyBubyB1bmRlcmZsb3cgd2FzIGNhbGxlZCBmb3IuIFdlIGRvIHRoZXNlIGNoZWNrcyBvbmx5IGluCisjIGZ1bmZsX3t1bmZsLGluZXh9X29uKCkgYmVjYXVzZSB3LyBib3RoIGV4Y2VwdGlvbnMgZGlzYWJsZWQsIHRoaXMKKyMgc3BlY2lhbCBjYXNlIHdpbGwgc2ltcGx5IGV4aXQgZ3JhY2VmdWxseSB3aXRoIHRoZSBjb3JyZWN0IHJlc3VsdC4KKworIyB0aGUgZXhjZXB0aW9uYWwgcG9zc2liaWxpdGllcyB3ZSBoYXZlIGxlZnQgb3Vyc2VsdmVzIHdpdGggYXJlIE9OTFkgb3ZlcmZsb3cKKyMgYW5kIGluZXhhY3QuIGFuZCwgdGhlIGluZXhhY3QgaXMgc3VjaCB0aGF0IG92ZXJmbG93IG9jY3VycmVkIGFuZCB3YXMgZGlzYWJsZWQKKyMgYnV0IGluZXhhY3Qgd2FzIGVuYWJsZWQuCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZnVuZmxfdW5mbF9vbgorCitmdW5mbF9jaGtpbmV4OgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlmdW5mbF9pbmV4X29uCisKK2Z1bmZsX2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKyMkIwlhZGQubAkJJjI0LCVzcAorCWJyYS5sCQlfZnBzcF9kb25lCisKKyMgb3ZlcmZsb3cgaXMgZW5hYmxlZCBBTkQgb3ZlcmZsb3csIG9mIGNvdXJzZSwgb2NjdXJyZWQuIHNvLCB3ZSBoYXZlIHRoZSBFWE9QCisjIGluIGZwMSAoZG9uJ3QgZm9yZ2V0IHRvIHNhdmUgZnAwKS4gd2hhdCB0byBkbyBub3c/CisjIHdlbGwsIHdlIHNpbXBseSBoYXZlIHRvIGdldCB0byBnbyB0byBfcmVhbF91bmZsKCkhCitmdW5mbF91bmZsX29uOgorCisjIFRoZSBgMDYwIEZQVSBtdWx0aXBsaWVyIGhhcmR3YXJlIGlzIHN1Y2ggdGhhdCBpZiB0aGUgcmVzdWx0IG9mIGEKKyMgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBub3JtYWxpemVkIG51bWJlcgorIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCisjIHVuZGVyZmxvdyBleGNlcHRpb24uIFNpbmNlIHRoaXMgaXMgaW5jb3JyZWN0LCB3ZSBjaGVjayBoZXJlIHRvIHNlZQorIyBpZiBvdXIgZW11bGF0aW9uLCBhZnRlciByZS1kb2luZyB0aGUgb3BlcmF0aW9uLCBkZWNpZGVkIHRoYXQKKyMgbm8gdW5kZXJmbG93IHdhcyBjYWxsZWQgZm9yLgorCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYmVxLncJCWZ1bmZsX2Noa2luZXgKKworZnVuZmxfdW5mbF9vbjI6CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgKGZwMSkgdG8gc3RhY2sKKworCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF91bmZsCisKKyMgdW5kZWZsb3cgb2NjdXJyZWQgYnV0IGlzIGRpc2FibGVkLiBtZWFud2hpbGUsIGluZXhhY3QgaXMgZW5hYmxlZC4gdGhlcmVmb3JlLAorIyB3ZSBtdXN0IGp1bXAgdG8gcmVhbF9pbmV4KCkuCitmdW5mbF9pbmV4X29uOgorCisjIFRoZSBgMDYwIEZQVSBtdWx0aXBsaWVyIGhhcmR3YXJlIGlzIHN1Y2ggdGhhdCBpZiB0aGUgcmVzdWx0IG9mIGEKKyMgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBub3JtYWxpemVkIG51bWJlcgorIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCisjIHVuZGVyZmxvdyBleGNlcHRpb24uCisjIEJ1dCwgd2hldGhlciBib2d1cyBvciBub3QsIGlmIGluZXhhY3QgaXMgZW5hYmxlZCBBTkQgaXQgb2NjdXJyZWQsCisjIHRoZW4gd2UgaGF2ZSB0byBicmFuY2ggdG8gcmVhbF9pbmV4LgorCisJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYmVxLncJCWZ1bmZsX2V4aXQKKworZnVuZmxfaW5leF9vbjI6CisKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byBzdGFjaworCisJbW92LmIJCSYweGM0LDErRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGM0CisJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX2luZXgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Z1bmZsX291dDoKKworCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisKKyMgdGhlIHNyYyBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYSBOT1JNKCEpLCBzbyB0YWcgaXQgYXMgc3VjaAorCW1vdi5iCQkmTk9STSxTVEFHKCVhNikJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJYnNyLmwJCWZvdXQKKworCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZ1bmZsX3VuZmxfb24yCisKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUudwkJZnVuZmxfaW5leF9vbjIKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisjJCMJYWRkLmwJCSYyNCwlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYmVxLmwJCV9mcHNwX2RvbmUJCSMgbm8KKworCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCSMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfdW5zdXBwKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQICJVbmltcGxlbWVudGVkCSMKKyMJCSAgICAgICAgRGF0YSBUeXBlIiBleGNlcHRpb24uCQkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gd29yZC9sb25nd29yZAkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJbG9hZF9mcG4xKCkgLSBsb2FkIHNyYyBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCisjCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCisjCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIGluZXhhY3QgaGFuZGxlcgkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgZXhpdDsgd29yayBhbGwgZG9uZQkJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBlbmFibGVkIGV4Y2VwdGlvbgkJIworIwlmdW5pbXBfc2tldygpIC0gYWRqdXN0IGZzYXZlIHNyYyBvcHMgdG8gImluY29ycmVjdCIgdmFsdWUJIworIwlfcmVhbF9zbmFuKCkgLSAiY2FsbG91dCIgZm9yIFNOQU4gZXhjZXB0aW9uCQkJIworIwlfcmVhbF9vcGVycigpIC0gImNhbGxvdXQiIGZvciBPUEVSUiBleGNlcHRpb24JCQkjCisjCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT1ZGTCBleGNlcHRpb24JCQkjCisjCV9yZWFsX3VuZmwoKSAtICJjYWxsb3V0IiBmb3IgVU5GTCBleGNlcHRpb24JCQkjCisjCWdldF9wYWNrZWQoKSAtIGZldGNoIHBhY2tlZCBvcGVyYW5kIGZyb20gbWVtb3J5CQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSAiVW5pbXAgRGF0YSBUeXBlIiBzdGsgZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc3NyYyBvcCAoZm9yIFVOTk9STS9ERU5PUk0pCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIEluZXhhY3QgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIEluZXhhY3QgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCisjCUlmIFNOQU4gZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBTTkFOIGV4Y2VwdGlvbiBzdGsgZnJhbWUJIworIwlJZiBPUEVSUiBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIE9QRVJSIGV4Y2VwdGlvbiBzdGsgZnJhbWUJIworIwlJZiBPVkZMIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gT1ZGTCBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgVU5GTCBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIFVORkwgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMJSWYgVHJhY2UgZXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMJRWxzZTogKG5vcm1hbCBjYXNlKQkJCQkJCSMKKyMJLSBDb3JyZWN0IHJlc3VsdCBoYXMgYmVlbiBzdG9yZWQgYXMgYXBwcm9wcmlhdGUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUd28gbWFpbiBpbnN0cnVjdGlvbiB0eXBlcyBjYW4gZW50ZXIgaGVyZTogKDEpIERFTk9STSBvciBVTk5PUk0JIworIyB1bmltcGxlbWVudGVkIGRhdGEgdHlwZXMuIFRoZXNlIGNhbiBiZSBlaXRoZXIgb3BjbGFzcyAwLDIgb3IgMwkjCisjIGluc3RydWN0aW9ucywgYW5kICgyKSBQQUNLRUQgdW5pbXBsZW1lbnRlZCBkYXRhIGZvcm1hdCBpbnN0cnVjdGlvbnMJIworIyBhbHNvIG9mIG9wY2xhc3NlcyAwLDIsIG9yIDMuCQkJCQkJIworIwlGb3IgVU5OT1JNL0RFTk9STSBvcGNsYXNzIDAgYW5kIDIsIHRoZSBoYW5kbGVyIGZldGNoZXMgdGhlIHNyYwkjCisjIG9wZXJhbmQgZnJvbSB0aGUgZnNhdmUgc3RhdGUgZnJhbWUgYW5kIHRoZSBkc3Qgb3BlcmFuZCAoaWYgZHlhZGljKQkjCisjIGZyb20gdGhlIEZQIHJlZ2lzdGVyIGZpbGUuIFRoZSBpbnN0cnVjdGlvbiBpcyB0aGVuIGVtdWxhdGVkIGJ5CSMKKyMgY2hvb3NpbmcgYW4gZW11bGF0aW9uIHJvdXRpbmUgZnJvbSBhIHRhYmxlIG9mIHJvdXRpbmVzIGluZGV4ZWQgYnkJIworIyBpbnN0cnVjdGlvbiB0eXBlLiBPbmNlIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBlbXVsYXRlZCBhbmQgcmVzdWx0CSMKKyMgc2F2ZWQsIHRoZW4gd2UgY2hlY2sgdG8gc2VlIGlmIGFueSBlbmFibGVkIGV4Y2VwdGlvbnMgcmVzdWx0ZWQgZnJvbQkjCisjIGluc3RydWN0aW9uIGVtdWxhdGlvbi4gSWYgbm9uZSwgdGhlbiB3ZSBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IgkjCisjIF9mcHNwX2RvbmUoKS4gSWYgdGhlcmUgaXMgYW4gZW5hYmxlZCBGUCBleGNlcHRpb24sIHRoZW4gd2UgaW5zZXJ0CSMKKyMgdGhpcyBleGNlcHRpb24gaW50byB0aGUgRlBVIGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSBhbmQgdGhlbiBleGl0CSMKKyMgdGhyb3VnaCBfZnBzcF9kb25lKCkuCQkJCQkJCSMKKyMJUEFDS0VEIG9wY2xhc3MgMCBhbmQgMiBpcyBzaW1pbGFyIGluIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gaXMJIworIyBlbXVsYXRlZCBhbmQgZXhjZXB0aW9ucyBoYW5kbGVkLiBUaGUgZGlmZmVyZW5jZXMgb2NjdXIgaW4gaG93IHRoZQkjCisjIGhhbmRsZXIgbG9hZHMgdGhlIHBhY2tlZCBvcCAoYnkgY2FsbGluZyBnZXRfcGFja2VkKCkgcm91dGluZSkgYW5kCSMKKyMgYnkgdGhlIGZhY3QgdGhhdCBhIFRyYWNlIGV4Y2VwdGlvbiBjb3VsZCBiZSBwZW5kaW5nIGZvciBQQUNLRUQgb3BzLgkjCisjIElmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcsIHRoZW4gdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrCSMKKyMgZnJhbWUgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBhbmQgYW4gZXhpdCBpcwkjCisjIG1hZGUgdGhyb3VnaCBfcmVhbF90cmFjZSgpLgkJCQkJCSMKKyMJRm9yIFVOTk9STS9ERU5PUk0gb3BjbGFzcyAzLCB0aGUgYWN0dWFsIG1vdmUgb3V0IHRvIG1lbW9yeSBpcwkjCisjIHBlcmZvcm1lZCBieSBjYWxsaW5nIHRoZSByb3V0aW5lIGZvdXQoKS4gSWYgbm8gZXhjZXB0aW9uIHNob3VsZCBvY2N1cgkjCisjIGFzIHRoZSByZXN1bHQgb2YgZW11bGF0aW9uLCB0aGVuIGFuIGV4aXQgZWl0aGVyIG9jY3VycyB0aHJvdWdoCSMKKyMgX2Zwc3BfZG9uZSgpIG9yIHRocm91Z2ggX3JlYWxfdHJhY2UoKSBpZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nCSMKKyMgKGEgVHJhY2Ugc3RhY2sgZnJhbWUgbXVzdCBiZSBjcmVhdGVkIGhlcmUsIHRvbykuIElmIGFuIEZQIGV4Y2VwdGlvbgkjCisjIHNob3VsZCBvY2N1ciwgdGhlbiB3ZSBtdXN0IGNyZWF0ZSBhbiBleGNlcHRpb24gc3RhY2sgZnJhbWUgb2YgdGhhdAkjCisjIHR5cGUgYW5kIGp1bXAgdG8gZWl0aGVyIF9yZWFsX3NuYW4oKSwgX3JlYWxfb3BlcnIoKSwgX3JlYWxfaW5leCgpLAkjCisjIF9yZWFsX3VuZmwoKSwgb3IgX3JlYWxfb3ZmbCgpIGFzIGFwcHJvcHJpYXRlLiBQQUNLRUQgb3BjbGFzcyAzCSMKKyMgZW11bGF0aW9uIGlzIHBlcmZvcm1lZCBpbiBhIHNpbWlsYXIgbWFubmVyLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjICgxKSBERU5PUk0gYW5kIFVOTk9STSAodW5pbXBsZW1lbnRlZCkgZGF0YSB0eXBlczoKKyMKKyMJCQkJcG9zdC1pbnN0cnVjdGlvbgorIwkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkqICAgICAgRUEJKgorIwkgcHJlLWluc3RydWN0aW9uCSoJCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAweDAgKiAgMHgwZGMgICoJKiAweDMgKiAgMHgwZGMgICoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgTmV4dAkqCSogICAgIE5leHQJKgorIwkqICAgICAgUEMJKgkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIworIyAoMikgUEFDS0VEIGZvcm1hdCAodW5zdXBwb3J0ZWQpIG9wY2xhc3NlcyB0d28gYW5kIHRocmVlOgorIwkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgRUEJKgorIwkqCQkqCisjCSoqKioqKioqKioqKioqKioqCisjCSogMHgyICogIDB4MGRjCSoKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgTmV4dAkqCisjCSogICAgICBQQwkqCisjCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCisjCisJZ2xvYmFsCQlfZnBzcF91bnN1cHAKK19mcHNwX3Vuc3VwcDoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBzYXZlIGZwIHN0YXRlCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KKwlibmUuYgkJZnVfcworZnVfdToKKwltb3YubAkJJXVzcCwlYTAJCSMgZmV0Y2ggdXNlciBzdGFjayBwb2ludGVyCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrCisJYnJhLmIJCWZ1X2NvbnQKKyMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBhbiBvcGNsYXNzIHplcm8gb3IgdHdvIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlCisjIGV4Y2VwdGlvbiwgdGhlbiB0aGUgYTcnIGNhbGN1bGF0ZWQgaGVyZSBpcyB3cm9uZyBzaW5jZSBpdCBkb2Vzbid0CisjIHN0YWNrIGFuIGVhLiBob3dldmVyLCB3ZSBkb24ndCBuZWVkIGFuIGE3JyBmb3IgdGhpcyBjYXNlIGFueXdheXMuCitmdV9zOgorCWxlYQkJMHg0K0VYQ19FQSglYTYpLCVhMAkjIGxvYWQgb2xkIGE3JworCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjaworCitmdV9jb250OgorCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorIyB0aGUgRlBJQVIgc2hvdWxkIGJlIHNldCBjb3JyZWN0bHkgZm9yIEFMTCBleGNlcHRpb25zIHBhc3NpbmcgdGhyb3VnaAorIyB0aGlzIHBvaW50LgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyIHNwZWNpYWwgY29uZGl0aW9uIGZsYWcKKworIyBTZXBhcmF0ZSBvcGNsYXNzIHRocmVlIChmcG4tdG8tbWVtKSBvcHMgc2luY2UgdGhleSBoYXZlIGEgZGlmZmVyZW50CisjIHN0YWNrIGZyYW1lIGFuZCBwcm90b2NvbC4KKwlidHN0CQkmMHg1LEVYQ19DTURSRUcoJWE2KQkjIGlzIGl0IGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZnVfb3V0CQkJIyB5ZXMKKworIyBTZXBhcmF0ZSBwYWNrZWQgb3BjbGFzcyB0d28gaW5zdHJ1Y3Rpb25zLgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYwOiY2fSwlZDAKKwljbXBpLmIJCSVkMCwmMHgxMworCWJlcS53CQlmdV9pbl9wYWNrCisKKworIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCisjIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisjIE9wY2xhc3MgdHdvIHcvIG1lbW9yeS10by1mcG4gb3BlcmF0aW9uIHdpbGwgaGF2ZSBhbiBpbmNvcnJlY3QgZXh0ZW5kZWQKKyMgcHJlY2lzaW9uIGZvcm1hdCBpZiB0aGUgc3JjIGZvcm1hdCB3YXMgc2luZ2xlIG9yIGRvdWJsZSBhbmQgdGhlCisjIHNvdXJjZSBkYXRhIHR5cGUgd2FzIGFuIElORiwgTkFOLCBERU5PUk0sIG9yIFVOTk9STQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIGlucHV0CisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCisKKyMgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBzcmMgb3BlcmFuZCBvciB0aGUgZHN0IG9wZXJhbmQgKG9yIGJvdGgpIGlzIHRoZQorIyBVTk5PUk0gb3IgREVOT1JNLiBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IHRhZ3MgdGhlIG9wZXJhbmQgdHlwZS4gaWYgdGhlCisjIGlucHV0IGlzIGFuIFVOTk9STSwgdGhlbiBjb252ZXJ0IGl0IHRvIGEgTk9STSwgREVOT1JNLCBvciBaRVJPLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZnVfb3AyCQkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCisKK2Z1X29wMjoKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKworIyBiaXQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGVzIHRoZSBtb25hZGljIGFuZCBkeWFkaWMgb3BlcmF0aW9ucworIyBhdCB0aGlzIHBvaW50CisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJZnVfZXh0cmFjdAkJIyBtb25hZGljCisJY21waS5iCQkxK0VYQ19DTURSRUcoJWE2KSwmMHgzYQkjIGlzIG9wZXJhdGlvbiBhbiBmdHN0PworCWJlcS5iCQlmdV9leHRyYWN0CQkjIHllcywgc28gaXQncyBtb25hZGljLCB0b28KKworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZnVfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZnVfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmdV9leHRyYWN0OgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYworCisJYmZleHR1CQkxK0VYQ19DTURSRUcoJWE2KXsmMTomN30sJWQxICMgZXh0cmFjdCBleHRlbnNpb24KKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMKKyMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorIwlCU1VOCTogbm9uZQorIwlTTkFOCTogYWxsIGR5YWRpYyBvcHMKKyMJT1BFUlIJOiBmc3FydCgtTk9STSkKKyMJT1ZGTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCVVORkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlEWgk6IGZkaXYKKyMJSU5FWDIJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlJTkVYMQk6IG5vbmUgKHBhY2tlZCBkb2Vzbid0IGdvIHRocm91Z2ggaGVyZSkKKyMKKworIyB3ZSBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQorIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIHNldAorCWJuZS5iCQlmdV9pbl9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAorCitmdV9pbl9jb250OgorIyBmY21wIGFuZCBmdHN0IGRvIG5vdCBzdG9yZSBhbnkgcmVzdWx0LgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBleHRlbnNpb24KKwlhbmRpLmIJCSYweDM4LCVkMAkJIyBleHRyYWN0IGJpdHMgMy01CisJY21waS5iCQklZDAsJjB4MzgJCSMgaXMgaW5zdHIgZmNtcCBvciBmdHN0PworCWJlcS5iCQlmdV9pbl9leGl0CQkjIHllcworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKKworZnVfaW5fZXhpdDoKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX2Zwc3BfZG9uZQorCitmdV9pbl9lbmE6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlmdV9pbl9leGMJCSMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHNldAorCisjCisjIE5vIGV4Y2VwdGlvbnMgb2NjdXJyZWQgdGhhdCB3ZXJlIGFsc28gZW5hYmxlZC4gTm93OgorIworIwlpZiAoT1ZGTCAmJiBvdmZsX2Rpc2FibGVkICYmIGluZXhhY3RfZW5hYmxlZCkgeworIwkgICAgYnJhbmNoIHRvIF9yZWFsX2luZXgoKSAoZXZlbiBpZiB0aGUgcmVzdWx0IHdhcyBleGFjdCEpOworIwl9IGVsc2UgeworIwkgICAgc2F2ZSB0aGUgcmVzdWx0IGluIHRoZSBwcm9wZXIgZnAgcmVnICh1bmxlc3MgdGhlIG9wIGlzIGZjbXAgb3IgZnRzdCk7CisjCSAgICByZXR1cm47CisjCX0KKyMKKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CisJYmVxLmIJCWZ1X2luX2NvbnQJCSMgbm8KKworZnVfaW5fb3ZmbGNoazoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPworCWJlcS5iCQlmdV9pbl9jb250CQkjIG5vCisJYnJhLncJCWZ1X2luX2V4Y19vdmZsCQkjIGdvIGluc2VydCBvdmVyZmxvdyBmcmFtZQorCisjCisjIEFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQ6CisjCisjCXNoaWZ0IGVuYWJsZWQgZXhjZXB0aW9uIGZpZWxkIGludG8gbG8gYnl0ZSBvZiBkMDsKKyMJaWYgKCgoSU5FWDIgfHwgSU5FWDEpICYmIGluZXhfZW5hYmxlZCAmJiBPVkZMICYmIG92ZmxfZGlzYWJsZWQpIHx8CisjCSAgICAoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgVU5GTCAmJiB1bmZsX2Rpc2FibGVkKSkgeworIwkJLyoKKyMJCSAqIHRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgd2UgbXVzdCBjYWxsIF9yZWFsX2luZXgoKSBub3cgb3IgZWxzZQorIwkJICogdGhlcmUgd2lsbCBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBpdCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZAorIwkJICovCisjCQljYWxsIF9yZWFsX2luZXgoKTsKKyMJfSBlbHNlIHsKKyMJCXJlc3RvcmUgZXhjIHN0YXRlIChTTkFOfHxPUEVSUnx8T1ZGTHx8VU5GTHx8RFp8fElORVgpIGludG8gdGhlIEZQVTsKKyMJfQorIworZnVfaW5fZXhjOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKwljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPyAoNikKKwlibmUuYgkJZnVfaW5fZXhjX2V4aXQJCSMgbm8KKworIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QKKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCB1bmRlcmZsb3cgb2NjdXI/CisJYm5lLncJCWZ1X2luX2V4Y191bmZsCQkjIHllcworCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIG92ZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfb3ZmbAkJIyB5ZXMKKworIyBoZXJlLCB3ZSBpbnNlcnQgdGhlIGNvcnJlY3QgZnNhdmUgc3RhdHVzIHZhbHVlIGludG8gdGhlIGZzYXZlIGZyYW1lIGZvciB0aGUKKyMgY29ycmVzcG9uZGluZyBleGNlcHRpb24uIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBzaG91bGQgYmUgdGhlIG9yaWdpbmFsCisjIHNyYyBvcGVyYW5kLgorZnVfaW5fZXhjX2V4aXQ6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCWJzci5sCQlmdW5pbXBfc2tldwkJIyBza2V3IHNnbCBvciBkYmwgaW5wdXRzCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCisJbW92LncJCSh0YmxfZXhjZXB0LmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikgIyBjcmVhdGUgZXhjIHN0YXR1cworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcAorCisJdW5sawkJJWE2CisKKwlicmEubAkJX2Zwc3BfZG9uZQorCit0YmxfZXhjZXB0OgorCXNob3J0CQkweGUwMDAsMHhlMDA2LDB4ZTAwNCwweGUwMDUKKwlzaG9ydAkJMHhlMDAzLDB4ZTAwMiwweGUwMDEsMHhlMDAxCisKK2Z1X2luX2V4Y191bmZsOgorCW1vdi53CQkmMHg0LCVkMAorCWJyYS5iCQlmdV9pbl9leGNfZXhpdAorZnVfaW5fZXhjX292Zmw6CisJbW92LncJCSYweDAzLCVkMAorCWJyYS5iCQlmdV9pbl9leGNfZXhpdAorCisjIElmIHRoZSBpbnB1dCBvcGVyYW5kIHRvIHRoaXMgb3BlcmF0aW9uIHdhcyBvcGNsYXNzIHR3byBhbmQgYSBzaW5nbGUKKyMgb3IgZG91YmxlIHByZWNpc2lvbiBkZW5vcm0sIGluZiwgb3IgbmFuLCB0aGUgb3BlcmFuZCBuZWVkcyB0byBiZQorIyAiY29ycmVjdGVkIiBpbiBvcmRlciB0byBoYXZlIHRoZSBwcm9wZXIgZXF1aXZhbGVudCBleHRlbmRlZCBwcmVjaXNpb24KKyMgbnVtYmVyLgorCWdsb2JhbAkJZml4X3NrZXdlZF9vcHMKK2ZpeF9za2V3ZWRfb3BzOgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYwOiY2fSwlZDAgIyBleHRyYWN0IG9wY2xhc3Msc3JjIGZtdAorCWNtcGkuYgkJJWQwLCYweDExCQkjIGlzIGNsYXNzID0gMiAmIGZtdCA9IHNnbD8KKwliZXEuYgkJZnNvX3NnbAkJCSMgeWVzCisJY21waS5iCQklZDAsJjB4MTUJCSMgaXMgY2xhc3MgPSAyICYgZm10ID0gZGJsPworCWJlcS5iCQlmc29fZGJsCQkJIyB5ZXMKKwlydHMJCQkJCSMgbm8KKworZnNvX3NnbDoKKwltb3YudwkJTE9DQUxfRVgoJWEwKSwlZDAJIyBmZXRjaCBzcmMgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwljbXBpLncJCSVkMCwmMHgzZjgwCQkjIGlzIHxleHB8ID09ICQzZjgwPworCWJlcS5iCQlmc29fc2dsX2Rucm1femVybwkjIHllcworCWNtcGkudwkJJWQwLCYweDQwN2YJCSMgbm87IGlzIHxleHB8ID09ICQ0MDdmPworCWJlcS5iCQlmc29faW5mbmFuCQkjIHllcworCXJ0cwkJCQkJIyBubworCitmc29fc2dsX2Rucm1femVybzoKKwlhbmRpLmwJCSYweDdmZmZmZmZmLExPQ0FMX0hJKCVhMCkgIyBjbGVhciBqLWJpdAorCWJlcS5iCQlmc29femVybwkJIyBpdCdzIGEgc2tld2VkIHplcm8KK2Zzb19zZ2xfZG5ybToKKyMgaGVyZSwgd2UgY291bnQgb24gbm9ybSBub3QgdG8gYWx0ZXIgYTAuLi4KKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCisJbmVnLncJCSVkMAkJCSMgLXNoZnQgYW10CisJYWRkaS53CQkmMHgzZjgxLCVkMAkJIyBhZGp1c3QgbmV3IGV4cG9uZW50CisJYW5kaS53CQkmMHg4MDAwLExPQ0FMX0VYKCVhMCkJIyBjbGVhciBvbGQgZXhwb25lbnQKKwlvci53CQklZDAsTE9DQUxfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlydHMKKworZnNvX3plcm86CisJYW5kaS53CQkmMHg4MDAwLExPQ0FMX0VYKCVhMCkJIyBjbGVhciBib2d1cyBleHBvbmVudAorCXJ0cworCitmc29faW5mbmFuOgorCWFuZGkuYgkJJjB4N2YsTE9DQUxfSEkoJWEwKQkjIGNsZWFyIGotYml0CisJb3JpLncJCSYweDdmZmYsTE9DQUxfRVgoJWEwKQkjIG1ha2UgZXhwb25lbnQgPSAkN2ZmZgorCXJ0cworCitmc29fZGJsOgorCW1vdi53CQlMT0NBTF9FWCglYTApLCVkMAkjIGZldGNoIHNyYyBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWNtcGkudwkJJWQwLCYweDNjMDAJCSMgaXMgfGV4cHwgPT0gJDNjMDA/CisJYmVxLmIJCWZzb19kYmxfZG5ybV96ZXJvCSMgeWVzCisJY21waS53CQklZDAsJjB4NDNmZgkJIyBubzsgaXMgfGV4cHwgPT0gJDQzZmY/CisJYmVxLmIJCWZzb19pbmZuYW4JCSMgeWVzCisJcnRzCQkJCQkjIG5vCisKK2Zzb19kYmxfZG5ybV96ZXJvOgorCWFuZGkubAkJJjB4N2ZmZmZmZmYsTE9DQUxfSEkoJWEwKSAjIGNsZWFyIGotYml0CisJYm5lLmIJCWZzb19kYmxfZG5ybQkJIyBpdCdzIGEgc2tld2VkIGRlbm9ybQorCXRzdC5sCQlMT0NBTF9MTyglYTApCQkjIGlzIGl0IGEgemVybz8KKwliZXEuYgkJZnNvX3plcm8JCSMgeWVzCitmc29fZGJsX2Rucm06CisjIGhlcmUsIHdlIGNvdW50IG9uIG5vcm0gbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCW5lZy53CQklZDAJCQkjIC1zaGZ0IGFtdAorCWFkZGkudwkJJjB4M2MwMSwlZDAJCSMgYWRqdXN0IG5ldyBleHBvbmVudAorCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgb2xkIGV4cG9uZW50CisJb3IudwkJJWQwLExPQ0FMX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZm1vdmUgb3V0IHRvb2sgYW4gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9uLgorIyB0aGUgc3JjIG9wZXJhbmQgaXMgaW4gRlBfU1JDLiBDYWxsIF9mb3V0KCkgdG8gd3JpdGUgb3V0IHRoZSByZXN1bHQgYW5kCisjIHRvIGRldGVybWluZSB3aGljaCBleGNlcHRpb25zLCBpZiBhbnksIHRvIHRha2UuCitmdV9vdXQ6CisKKyMgU2VwYXJhdGUgcGFja2VkIG1vdmUgb3V0cyBmcm9tIHRoZSBVTk5PUk0gYW5kIERFTk9STSBtb3ZlIG91dHMuCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCVkMAorCWNtcGkuYgkJJWQwLCYweDMKKwliZXEudwkJZnVfb3V0X3BhY2sKKwljbXBpLmIJCSVkMCwmMHg3CisJYmVxLncJCWZ1X291dF9wYWNrCisKKworIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCisjIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkLgorIyBmbW92ZSBvdXQgZG9lc24ndCBhZmZlY3QgY2NvZGVzLgorCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisjIHRoZSBzcmMgY2FuIE9OTFkgYmUgYSBERU5PUk0gb3IgYW4gVU5OT1JNISBzbywgZG9uJ3QgbWFrZSBhbnkgYmlnIHN1YnJvdXRpbmUKKyMgY2FsbCBoZXJlLiBqdXN0IGZpZ3VyZSBvdXQgd2hhdCBpdCBpcy4uLgorCW1vdi53CQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBnZXQgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwliZXEuYgkJZnVfb3V0X2Rlbm9ybQkJIyBpdCdzIGEgREVOT1JNCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgZml4IGl0CisKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCisJYnJhLmIJCWZ1X291dF9jb250CitmdV9vdXRfZGVub3JtOgorCW1vdi5iCQkmREVOT1JNLFNUQUcoJWE2KQorZnVfb3V0X2NvbnQ6CisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksRVhDX0E2KCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZXMKKwlic3IubAkJZm91dAkJCSMgY2FsbCBmbW92ZSBvdXQgcm91dGluZQorCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IG5vbmUKKyMJT1BFUlIJOiBmbW92ZS57Yix3LGx9IG91dCBvZiBsYXJnZSBVTk5PUk0KKyMJT1ZGTAk6IGZtb3ZlLntzLGR9CisjCVVORkwJOiBmbW92ZS57cyxkLHh9CisjCURaCTogbm9uZQorIwlJTkVYMgk6IGFsbAorIwlJTkVYMQk6IG5vbmUgKHBhY2tlZCBkb2Vzbid0IHRyYXZlbCB0aHJvdWdoIGhlcmUpCisKKyMgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLncJCWZ1X291dF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAorCitmdV9vdXRfZG9uZToKKworCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIGluIGNhc2UgYTYgY2hhbmdlZAorCisjIG9uIGV4dGVuZGVkIHByZWNpc2lvbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9ucyB1c2luZyBwcmUtZGVjcmVtZW50IG9yCisjIHBvc3QtaW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZSwgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgaXMgbm90IHVwZGF0ZWQuIGlzIHRoZQorIyBhZGRyZXNzIHJlZ2lzdGVyIHdhcyB0aGUgc3RhY2sgcG9pbnRlciB1c2VkIGZyb20gdXNlciBtb2RlLCB0aGVuIGxldCdzIHVwZGF0ZQorIyBpdCBoZXJlLiBpZiBpdCB3YXMgdXNlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhlbiB3ZSBoYXZlIHRvIGhhbmRsZSB0aGlzCisjIGFzIGEgc3BlY2lhbCBjYXNlLgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUuYgkJZnVfb3V0X2RvbmVfcworCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyByZXN0b3JlIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X291dF9kb25lX2NvbnQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLmIJCWZ1X291dF90cmFjZQkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCisKKyMgaXMgdGhlIGVhIG1vZGUgcHJlLWRlY3JlbWVudCBvZiB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHN1cGVydmlzb3IgbW9kZT8KKyMgKCJmbW92LnggZnBtLC0oYTcpIikgaWYgc28sCitmdV9vdXRfZG9uZV9zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS5iCQlmdV9vdXRfZG9uZV9jb250CisKKyMgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgaXMgc3RpbGwgaW4gZnAwLiBidXQsIHdlIG5lZWQgdG8gc2F2ZSBpdAorIyBzb21ld2hlcmUgb24gdGhlIHN0YWNrIHVudGlsIHdlIGNhbiBjb3B5IGl0IHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlLgorIyBoZXJlLCB3ZSdyZSBjb3VudGluZyBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayB0byBiZSB0aGUgb2xkIHBsYWNlLWhvbGRlcnMKKyMgZm9yIGZwMC9mcDEgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gcmVzdG9yZWQuIHRoYXQgd2F5LCB3ZSBjYW4gd3JpdGUKKyMgb3ZlciB0aG9zZSBkZXN0aW5hdGlvbnMgd2l0aCB0aGUgc2hpZnRlZCBzdGFjayBmcmFtZS4KKwlmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIHB1dCBhbnN3ZXIgb24gc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisKKyMgbm93LCBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIHByb3BlciBwbGFjZSBvbiB0aGUgc3RhY2sKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDAoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0xPKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg4KCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCisJYm5lLmIJCWZ1X291dF90cmFjZQorCisJYnJhLmwJCV9mcHNwX2RvbmUKKworZnVfb3V0X2VuYToKKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkCisJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCisJYm5lLmIJCWZ1X291dF9leGMJCSMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHNldAorCisjIG5vIGV4Y2VwdGlvbnMgd2VyZSBzZXQuCisjIGlmIGEgZGlzYWJsZWQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIGluZXhhY3Qgd2FzIGVuYWJsZWQgYnV0IHRoZSByZXN1bHQKKyMgd2FzIGV4YWN0LCB0aGVuIGEgYnJhbmNoIHRvIF9yZWFsX2luZXgoKSBpcyBtYWRlLgorCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KKwliZXEudwkJZnVfb3V0X2RvbmUJCSMgbm8KKworZnVfb3V0X292ZmxjaGs6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEudwkJZnVfb3V0X2RvbmUJCSMgbm8KKwlicmEudwkJZnVfaW5leAkJCSMgeWVzCisKKyMKKyMgVGhlIGZwIG1vdmUgb3V0IHRoYXQgdG9vayB0aGUgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb24gd2FzCisjIGJlaW5nIHRyYWNlZC4gU2luY2UgdGhlIHN0YWNrIGZyYW1lcyBhcmUgc2ltaWxhciwgZ2V0IHRoZSAiY3VycmVudCIgUEMKKyMgZnJvbSBGUElBUiBhbmQgcHV0IGl0IGluIHRoZSB0cmFjZSBzdGFjayBmcmFtZSB0aGVuIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KKyMKKyMJCSAgVU5TVVBQIEZSQU1FCQkgICBUUkFDRSBGUkFNRQorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBFQQkqCSogICAgQ3VycmVudAkqCisjCQkqCQkqCSogICAgICBQQwkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDMgKiAgMHgwZGMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgTmV4dAkqCSogICAgIE5leHQJKgorIwkJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMKK2Z1X291dF90cmFjZToKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQorCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZC4KK2Z1X291dF9leGM6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCisjIHdlIGRvbid0IG1lc3Mgd2l0aCB0aGUgZXhpc3RpbmcgZnNhdmUgZnJhbWUuIGp1c3QgcmUtaW5zZXJ0IGl0IGFuZAorIyBqdW1wIHRvIHRoZSAiX3JlYWxfe30oKSIgaGFuZGxlci4uLgorCW1vdi53CQkodGJsX2Z1X291dC5iLCVwYywlZDAudyoyKSwlZDAKKwlqbXAJCSh0YmxfZnVfb3V0LmIsJXBjLCVkMC53KjEpCisKKwlzd2JlZwkJJjB4OAordGJsX2Z1X291dDoKKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBCU1VOIGNhbid0IGhhcHBlbgorCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIFNOQU4gY2FuJ3QgaGFwcGVuCisJc2hvcnQJCWZ1X29wZXJyCS0gdGJsX2Z1X291dAkjIE9QRVJSCisJc2hvcnQJCWZ1X292ZmwJCS0gdGJsX2Z1X291dAkjIE9WRkwKKwlzaG9ydAkJZnVfdW5mbAkJLSB0YmxfZnVfb3V0CSMgVU5GTAorCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIERaIGNhbid0IGhhcHBlbgorCXNob3J0CQlmdV9pbmV4CQktIHRibF9mdV9vdXQJIyBJTkVYMgorCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIElORVgxIHdvbid0IG1ha2UgaXQgaGVyZQorCisjIGZvciBzbmFuLG9wZXJyLG92ZmwsdW5mbCwgc3JjIG9wIGlzIHN0aWxsIGluIEZQX1NSQyBzbyBqdXN0CisjIGZyZXN0b3JlIGl0LgorZnVfc25hbjoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGQ4LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkOAorCW1vdi53CQkmMHhlMDA2LDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKworCisJYnJhLmwJCV9yZWFsX3NuYW4KKworZnVfb3BlcnI6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkMCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKKwltb3YudwkJJjB4ZTAwNCwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisKKworCWJyYS5sCQlfcmVhbF9vcGVycgorCitmdV9vdmZsOgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDQKKwltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX292ZmwKKworIyB1bmRlcmZsb3cgY2FuIGhhcHBlbiBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uLiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcworIyB0aHJlZSBpbnN0cnVjdGlvbiBleGNlcHRpb25zIGRvbid0IHVwZGF0ZSB0aGUgc3RhY2sgcG9pbnRlci4gc28sIGlmIHRoZQorIyBleGNlcHRpb24gb2NjdXJyZWQgZnJvbSB1c2VyIG1vZGUsIHRoZW4gc2ltcGx5IHVwZGF0ZSBhNyBhbmQgZXhpdCBub3JtYWxseS4KKyMgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgY2hlY2sgaWYKK2Z1X3VuZmw6CisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS53CQlmdV91bmZsX3MKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgcmVzdG9yZSBhNyB3aGV0aGVyIHdlIG5lZWQKKwltb3YubAkJJWEwLCV1c3AJCSMgdG8gb3Igbm90Li4uCisKK2Z1X3VuZmxfY29udDoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byB0aGUgc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwY2MsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGNjCisJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF91bmZsCisKK2Z1X3VuZmxfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyB3YXMgdGhlIDxlYT4gbW9kZSAtKHNwKT8KKwlibmUuYgkJZnVfdW5mbF9jb250CisKKyMgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgaXMgc3RpbGwgaW4gZnAwLiBidXQsIHdlIG5lZWQgdG8gc2F2ZSBpdAorIyBzb21ld2hlcmUgb24gdGhlIHN0YWNrIHVudGlsIHdlIGNhbiBjb3B5IGl0IHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlCisjICh3aGVyZSB0aGUgZXhjIGZyYW1lIGlzIGN1cnJlbnRseSkuIG1ha2Ugc3VyZSBpdCdzIG5vdCBhdCB0aGUgdG9wIG9mIHRoZQorIyBmcmFtZSBvciBpdCB3aWxsIGdldCBvdmVyd3JpdHRlbiB3aGVuIHRoZSBleGMgc3RhY2sgZnJhbWUgaXMgc2hpZnRlZCAiZG93biIuCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBwdXQgYW5zd2VyIG9uIHN0YWNrCisJZm1vdm0ueAkJJjB4NDAsRlBfRFNUKCVhNikJIyBwdXQgRVhPUCBvbiBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBjYyxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4Y2MKKwltb3YudwkJJjB4ZTAwMywyK0ZQX0RTVCglYTYpCisKKwlmcmVzdG9yZQlGUF9EU1QoJWE2KQkJIyByZXN0b3JlIEVYT1AKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCisKKyMgbm93LCBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIHByb3BlciBwbGFjZSBvbiB0aGUgc3RhY2sKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDAoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0xPKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg4KCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKwlicmEubAkJX3JlYWxfdW5mbAorCisjIGZtb3ZlIGluIGFuZCBvdXQgZW50ZXIgaGVyZS4KK2Z1X2luZXg6CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGM0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAorCisJdW5sawkJJWE2CisKKworCWJyYS5sCQlfcmVhbF9pbmV4CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Z1X2luX3BhY2s6CisKKworIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCisjIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkCisJYW5kaS5sCQkmMHgwZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlic3IubAkJZ2V0X3BhY2tlZAkJIyBmZXRjaCBwYWNrZWQgc3JjIG9wZXJhbmQKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWJzci5sCQlzZXRfdGFnX3gJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCisKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKworIyBiaXQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGVzIHRoZSBtb25hZGljIGFuZCBkeWFkaWMgb3BlcmF0aW9ucworIyBhdCB0aGlzIHBvaW50CisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJZnVfZXh0cmFjdF9wCQkjIG1vbmFkaWMKKwljbXBpLmIJCTErRVhDX0NNRFJFRyglYTYpLCYweDNhCSMgaXMgb3BlcmF0aW9uIGFuIGZ0c3Q/CisJYmVxLmIJCWZ1X2V4dHJhY3RfcAkJIyB5ZXMsIHNvIGl0J3MgbW9uYWRpYywgdG9vCisKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMl9kb25lX3AJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZnVfb3AyX2RvbmVfcDoKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCisKK2Z1X2V4dHJhY3RfcDoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKworCWJmZXh0dQkJMStFWENfQ01EUkVHKCVhNil7JjE6Jjd9LCVkMSAjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IGFsbCBkeWFkaWMgb3BzCisjCU9QRVJSCTogZnNxcnQoLU5PUk0pCisjCU9WRkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlVTkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJRFoJOiBmZGl2CisjCUlORVgyCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJSU5FWDEJOiBhbGwKKyMKKworIyB3ZSBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQorIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKKwlibmUudwkJZnVfaW5fZW5hX3AJCSMgc29tZSBhcmUgZW5hYmxlZAorCitmdV9pbl9jb250X3A6CisjIGZjbXAgYW5kIGZ0c3QgZG8gbm90IHN0b3JlIGFueSByZXN1bHQuCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbgorCWFuZGkuYgkJJjB4MzgsJWQwCQkjIGV4dHJhY3QgYml0cyAzLTUKKwljbXBpLmIJCSVkMCwmMHgzOAkJIyBpcyBpbnN0ciBmY21wIG9yIGZ0c3Q/CisJYmVxLmIJCWZ1X2luX2V4aXRfcAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CisKK2Z1X2luX2V4aXRfcDoKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLncJCWZ1X2luX2V4aXRfc19wCQkjIHN1cGVydmlzb3IKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgdXBkYXRlIHVzZXIgYTcKKwltb3YubAkJJWEwLCV1c3AKKworZnVfaW5fZXhpdF9jb250X3A6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUuIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyMgYWRkcmVzc2luZyBtb2RlIHdhcyAoYTcpKy4gaWYgc28sIHdlJ2xsIG5lZWQgdG8gc2hpZnQgdGhlCisjIHN0YWNrIGZyYW1lICJ1cCIuCitmdV9pbl9leGl0X3NfcDoKKwlidHN0CQkmbWlhN19iaXQsU1BDT05EX0ZMRyglYTYpICMgd2FzIGVhIG1vZGUgKGE3KSsKKwliZXEuYgkJZnVfaW5fZXhpdF9jb250X3AJIyBubworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKKworIyBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgInVwIi4gd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIDxlYT4gZmllbGQuCisJbW92LmwJCTB4NCglc3ApLDB4MTAoJXNwKQorCW1vdi5sCQkweDAoJXNwKSwweGMoJXNwKQorCWFkZC5sCQkmMHhjLCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworZnVfaW5fZW5hX3A6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZCAmIHNldAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlmdV9pbl9leGNfcAkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAorCisjCisjIE5vIGV4Y2VwdGlvbnMgb2NjdXJyZWQgdGhhdCB3ZXJlIGFsc28gZW5hYmxlZC4gTm93OgorIworIwlpZiAoT1ZGTCAmJiBvdmZsX2Rpc2FibGVkICYmIGluZXhhY3RfZW5hYmxlZCkgeworIwkgICAgYnJhbmNoIHRvIF9yZWFsX2luZXgoKSAoZXZlbiBpZiB0aGUgcmVzdWx0IHdhcyBleGFjdCEpOworIwl9IGVsc2UgeworIwkgICAgc2F2ZSB0aGUgcmVzdWx0IGluIHRoZSBwcm9wZXIgZnAgcmVnICh1bmxlc3MgdGhlIG9wIGlzIGZjbXAgb3IgZnRzdCk7CisjCSAgICByZXR1cm47CisjCX0KKyMKKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CisJYmVxLncJCWZ1X2luX2NvbnRfcAkJIyBubworCitmdV9pbl9vdmZsY2hrX3A6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEudwkJZnVfaW5fY29udF9wCQkjIG5vCisJYnJhLncJCWZ1X2luX2V4Y19vdmZsX3AJIyBkbyBfcmVhbF9pbmV4KCkgbm93CisKKyMKKyMgQW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZDoKKyMKKyMJc2hpZnQgZW5hYmxlZCBleGNlcHRpb24gZmllbGQgaW50byBsbyBieXRlIG9mIGQwOworIwlpZiAoKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCkgfHwKKyMJICAgICgoSU5FWDIgfHwgSU5FWDEpICYmIGluZXhfZW5hYmxlZCAmJiBVTkZMICYmIHVuZmxfZGlzYWJsZWQpKSB7CisjCQkvKgorIwkJICogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBtdXN0IGNhbGwgX3JlYWxfaW5leCgpIG5vdyBvciBlbHNlCisjCQkgKiB0aGVyZSB3aWxsIGJlIG5vIG90aGVyIHdheSB0byBwYXNzIGl0IHRoZSBleGNlcHRpb25hbCBvcGVyYW5kCisjCQkgKi8KKyMJCWNhbGwgX3JlYWxfaW5leCgpOworIwl9IGVsc2UgeworIwkJcmVzdG9yZSBleGMgc3RhdGUgKFNOQU58fE9QRVJSfHxPVkZMfHxVTkZMfHxEWnx8SU5FWCkgaW50byB0aGUgRlBVOworIwl9CisjCitmdV9pbl9leGNfcDoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8gKDYgb3IgNykKKwlibHQuYgkJZnVfaW5fZXhjX2V4aXRfcAkjIG5vCisKKyMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0CisJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgdW5kZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfdW5mbF9wCSMgeWVzCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgb3ZlcmZsb3cgb2NjdXI/CisJYm5lLncJCWZ1X2luX2V4Y19vdmZsX3AJIyB5ZXMKKworIyBoZXJlLCB3ZSBpbnNlcnQgdGhlIGNvcnJlY3QgZnNhdmUgc3RhdHVzIHZhbHVlIGludG8gdGhlIGZzYXZlIGZyYW1lIGZvciB0aGUKKyMgY29ycmVzcG9uZGluZyBleGNlcHRpb24uIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBzaG91bGQgYmUgdGhlIG9yaWdpbmFsCisjIHNyYyBvcGVyYW5kLgorIyBhcyBhIHJlbWluZGVyIGZvciBmdXR1cmUgcHJlZGljdGVkIHBhaW4gYW5kIGFnb255LCB3ZSBhcmUgcGFzc2luZyBpbiBmc2F2ZSB0aGUKKyMgIm5vbi1za2V3ZWQiIG9wZXJhbmQgZm9yIGNhc2VzIG9mIHNnbCBhbmQgZGJsIHNyYyBJTkZzLE5BTnMsIGFuZCBERU5PUk1zLgorIyB0aGlzIGlzIElOQ09SUkVDVCBmb3IgZW5hYmxlZCBTTkFOIHdoaWNoIHdvdWxkIGdpdmUgdG8gdGhlIHVzZXIgdGhlIHNrZXdlZCBTTkFOISEhCitmdV9pbl9leGNfZXhpdF9wOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLncJCWZ1X2luX2V4Y19leGl0X3NfcAkjIHN1cGVydmlzb3IKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgdXBkYXRlIHVzZXIgYTcKKwltb3YubAkJJWEwLCV1c3AKKworZnVfaW5fZXhjX2V4aXRfY29udF9wOgorCW1vdi53CQkodGJsX2V4Y2VwdF9wLmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKKworCXVubGsJCSVhNgorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBlbmFibGVkPworCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUKKwordGJsX2V4Y2VwdF9wOgorCXNob3J0CQkweGUwMDAsMHhlMDA2LDB4ZTAwNCwweGUwMDUKKwlzaG9ydAkJMHhlMDAzLDB4ZTAwMiwweGUwMDEsMHhlMDAxCisKK2Z1X2luX2V4Y19vdmZsX3A6CisJbW92LncJCSYweDMsJWQwCisJYnJhLncJCWZ1X2luX2V4Y19leGl0X3AKKworZnVfaW5fZXhjX3VuZmxfcDoKKwltb3YudwkJJjB4NCwlZDAKKwlicmEudwkJZnVfaW5fZXhjX2V4aXRfcAorCitmdV9pbl9leGNfZXhpdF9zX3A6CisJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KQorCWJlcS5iCQlmdV9pbl9leGNfZXhpdF9jb250X3AKKworCW1vdi53CQkodGJsX2V4Y2VwdF9wLmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQorCisjIHNoaWZ0IHN0YWNrIGZyYW1lICJ1cCIuIHdobyBjYXJlcyBhYm91dCA8ZWE+IGZpZWxkLgorCW1vdi5sCQkweDQoJXNwKSwweDEwKCVzcCkKKwltb3YubAkJMHgwKCVzcCksMHhjKCVzcCkKKwlhZGQubAkJJjB4Yywlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLmIJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMKKyMgVGhlIG9wY2xhc3MgdHdvIFBBQ0tFRCBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgYW4gIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIgorIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gTWFrZSB0aGUgImN1cnJlbnQiIFBDIHRoZSBGUElBUiBhbmQgcHV0IGl0IGluIHRoZQorIyB0cmFjZSBzdGFjayBmcmFtZSB0aGVuIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KKyMKKyMJCSAgVU5TVVBQIEZSQU1FCQkgICBUUkFDRSBGUkFNRQorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBFQQkqCSogICAgQ3VycmVudAkqCisjCQkqCQkqCSogICAgICBQQwkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDIgKgkweDBkYwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCisjCQkqICAgICAgUEMJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBTUgkqCSogICAgICBTUgkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorZnVfdHJhY2VfcDoKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQorCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCisKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Z1X291dF9wYWNrOgorCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZC4KKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWZmZWN0IGNjb2Rlcy4KKwlhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKKwlic3IubAkJbG9hZF9mcG4xCisKKyMgdW5saWtlIG90aGVyIG9wY2xhc3MgMywgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9ucywgcGFja2VkIG11c3QgYmUKKyMgYWJsZSB0byBkZXRlY3QgYWxsIG9wZXJhbmQgdHlwZXMuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZnVfb3AyX3AJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworCitmdV9vcDJfcDoKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksRVhDX0E2KCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZXMKKwlic3IubAkJZm91dAkJCSMgY2FsbCBmbW92ZSBvdXQgcm91dGluZQorCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vCisjCVNOQU4JOiB5ZXMKKyMJT1BFUlIJOiBpZiAoKGtfZmFjdG9yID4gKzE3KSB8fCAoZGVjLiBleHAgZXhjZWVkcyAzIGRpZ2l0cykpCisjCU9WRkwJOiBubworIwlVTkZMCTogbm8KKyMJRFoJOiBubworIwlJTkVYMgk6IHllcworIwlJTkVYMQk6IG5vCisKKyMgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLncJCWZ1X291dF9lbmFfcAkJIyBzb21lIGFyZSBlbmFibGVkCisKK2Z1X291dF9leGl0X3A6CisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUuYgkJZnVfb3V0X2V4aXRfc19wCQkjIHN1cGVydmlzb3IKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgdXBkYXRlIHVzZXIgYTcKKwltb3YubAkJJWEwLCV1c3AKKworZnVfb3V0X2V4aXRfY29udF9wOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlLiBjaGVjayB0byBzZWUgaWYgdGhlCisjIGFkZHJlc3NpbmcgbW9kZSB3YXMgLShhNykuIGlmIHNvLCB3ZSdsbCBuZWVkIHRvIHNoaWZ0IHRoZQorIyBzdGFjayBmcmFtZSAiZG93biIuCitmdV9vdXRfZXhpdF9zX3A6CisJYnRzdAkJJm1kYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBlYSBtb2RlIC0oYTcpCisJYmVxLmIJCWZ1X291dF9leGl0X2NvbnRfcAkjIG5vCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCisjIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQorCWJuZS53CQlmdV90cmFjZV9wCisKKwlicmEubAkJX2Zwc3BfZG9uZQorCitmdV9vdXRfZW5hX3A6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJlcS53CQlmdV9vdXRfZXhpdF9wCisKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyByZXN0b3JlIGE2CisKKyMgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZC4KKyMgdGhlIG9ubHkgZXhjZXB0aW9uIHBvc3NpYmxlIG9uIHBhY2tlZCBtb3ZlIG91dCBhcmUgSU5FWCwgT1BFUlIsIGFuZCBTTkFOLgorZnVfb3V0X2V4Y19wOgorCWNtcGkuYgkJJWQwLCYweDFhCisJYmd0LncJCWZ1X2luZXhfcDIKKwliZXEudwkJZnVfb3BlcnJfcAorCitmdV9zbmFuX3A6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS5iCQlmdV9zbmFuX3NfcAorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAorCW1vdi5sCQklYTAsJXVzcAorCWJyYS53CQlmdV9zbmFuCisKK2Z1X3NuYW5fc19wOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS53CQlmdV9zbmFuCisKKyMgdGhlIGluc3RydWN0aW9uIHdhcyAiZm1vdmUucCBmcG4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgorIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKKyMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGQ4LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAorCW1vdi53CQkmMHhlMDA2LDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgd2UgY29weSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gaXRzIHByb3BlciBsb2NhdGlvbgorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRSsweGMoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCisJYnJhLmwJCV9yZWFsX3NuYW4KKworZnVfb3BlcnJfcDoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLncJCWZ1X29wZXJyX3BfcworCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAorCW1vdi5sCQklYTAsJXVzcAorCWJyYS53CQlmdV9vcGVycgorCitmdV9vcGVycl9wX3M6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYm5lLncJCWZ1X29wZXJyCisKKyMgdGhlIGluc3RydWN0aW9uIHdhcyAiZm1vdmUucCBmcG4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgorIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKKyMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGQwLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAorCW1vdi53CQkmMHhlMDA0LDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgd2UgY29weSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gaXRzIHByb3BlciBsb2NhdGlvbgorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRSsweGMoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCisJYnJhLmwJCV9yZWFsX29wZXJyCisKK2Z1X2luZXhfcDI6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS53CQlmdV9pbmV4X3NfcDIKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVfaW5leAorCitmdV9pbmV4X3NfcDI6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYm5lLncJCWZ1X2luZXgKKworIyB0aGUgaW5zdHJ1Y3Rpb24gd2FzICJmbW92ZS5wIGZwbiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisjIHRoZSBzdHJhdGVneSBpcyB0byBtb3ZlIHRoZSBleGNlcHRpb24gZnJhbWUgImRvd24iIDEyIGJ5dGVzLiB0aGVuLCB3ZQorIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwYzQsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGM0CisJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wZXJhbmQKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCisKKyMgbm93LCB3ZSBjb3B5IHRoZSBkZWZhdWx0IHJlc3VsdCB0byBpdHMgcHJvcGVyIGxvY2F0aW9uCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRSsweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFKzB4Yyglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgaWYgd2UncmUgc3R1ZmZpbmcgYSBzb3VyY2Ugb3BlcmFuZCBiYWNrIGludG8gYW4gZnNhdmUgZnJhbWUgdGhlbiB3ZQorIyBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGZvciBzaW5nbGUgb3IgZG91YmxlIHNvdXJjZSBvcGVyYW5kcyB0aGF0IHRoZQorIyBmb3JtYXQgc3R1ZmZlZCBpcyBhcyB3ZWlyZCBhcyB0aGUgaGFyZHdhcmUgdXN1YWxseSBtYWtlcyBpdC4KKyMKKwlnbG9iYWwJCWZ1bmltcF9za2V3CitmdW5pbXBfc2tldzoKKwliZmV4dHUJCUVYQ19FWFRXT1JEKCVhNil7JjM6JjN9LCVkMCAjIGV4dHJhY3Qgc3JjIHNwZWNpZmllcgorCWNtcGkuYgkJJWQwLCYweDEJCSMgd2FzIHNyYyBzZ2w/CisJYmVxLmIJCWZ1bmltcF9za2V3X3NnbAkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHg1CQkjIHdhcyBzcmMgZGJsPworCWJlcS5iCQlmdW5pbXBfc2tld19kYmwJCSMgeWVzCisJcnRzCisKK2Z1bmltcF9za2V3X3NnbDoKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggREVOT1JNIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJYmVxLmIJCWZ1bmltcF9za2V3X3NnbF9ub3QKKwljbXBpLncJCSVkMCwmMHgzZjgwCisJYmd0LmIJCWZ1bmltcF9za2V3X3NnbF9ub3QKKwluZWcudwkJJWQwCQkJIyBtYWtlIGV4cG9uZW50IG5lZ2F0aXZlCisJYWRkaS53CQkmMHgzZjgxLCVkMAkJIyBmaW5kIGFtdCB0byBzaGlmdAorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBmZXRjaCBERU5PUk0gaGkobWFuKQorCWxzci5sCQklZDAsJWQxCQkJIyBzaGlmdCBpdAorCWJzZXQJCSYzMSwlZDEJCQkjIHNldCBqLWJpdAorCW1vdi5sCQklZDEsRlBfU1JDX0hJKCVhNikJIyBpbnNlcnQgbmV3IGhpKG1hbikKKwlhbmRpLncJCSYweDgwMDAsRlBfU1JDX0VYKCVhNikJIyBjbGVhciBvbGQgZXhwb25lbnQKKwlvcmkudwkJJjB4M2Y4MCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBuZXcgInNrZXdlZCIgZXhwb25lbnQKK2Z1bmltcF9za2V3X3NnbF9ub3Q6CisJcnRzCisKK2Z1bmltcF9za2V3X2RibDoKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggREVOT1JNIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJYmVxLmIJCWZ1bmltcF9za2V3X2RibF9ub3QKKwljbXBpLncJCSVkMCwmMHgzYzAwCisJYmd0LmIJCWZ1bmltcF9za2V3X2RibF9ub3QKKworCXRzdC5iCQlGUF9TUkNfRVgoJWE2KQkJIyBtYWtlICJpbnRlcm5hbCBmb3JtYXQiCisJc21pLmIJCTB4MitGUF9TUkMoJWE2KQorCW1vdi53CQklZDAsRlBfU1JDX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQgd2l0aCBjbGVhcmVkIHNpZ24KKwljbHIubAkJJWQwCQkJIyBjbGVhciBnLHIscworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcAorCW1vdi53CQkmMHgzYzAxLCVkMQkJIyBwYXNzIGRlbm9ybSB0aHJlc2hvbGQKKwlic3IubAkJZG5ybV9scAkJCSMgZGVub3JtIGl0CisJbW92LncJCSYweDNjMDAsJWQwCQkjIG5ldyBleHBvbmVudAorCXRzdC5iCQkweDIrRlBfU1JDKCVhNikJCSMgaXMgc2lnbiBzZXQ/CisJYmVxLmIJCWZzc19kYmxfZGVub3JtX2RvbmUJIyBubworCWJzZXQJCSYxNSwlZDAJCQkjIHNldCBzaWduCitmc3NfZGJsX2Rlbm9ybV9kb25lOgorCWJzZXQJCSYweDcsRlBfU1JDX0hJKCVhNikJIyBzZXQgai1iaXQKKwltb3YudwkJJWQwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorZnVuaW1wX3NrZXdfZGJsX25vdDoKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX21lbV93cml0ZTIKK19tZW1fd3JpdGUyOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwliZXEubAkJX2RtZW1fd3JpdGUKKwltb3YubAkJMHgwKCVhMCksRlBfRFNUX0VYKCVhNikKKwltb3YubAkJMHg0KCVhMCksRlBfRFNUX0hJKCVhNikKKwltb3YubAkJMHg4KCVhMCksRlBfRFNUX0xPKCVhNikKKwljbHIubAkJJWQxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfZWZmYWRkKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQICJVbmltcGxlbWVudGVkCSMKKyMJCQllZmZlY3RpdmUgYWRkcmVzcyIgZXhjZXB0aW9uLgkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nCSMKKyMJc3lzdGVtLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCisjCWRlY2JpbigpIC0gY29udmVydCBwYWNrZWQgZGF0YSB0byBGUCBiaW5hcnkgZGF0YQkJIworIwlfcmVhbF9mcHVfZGlzYWJsZWQoKSAtICJjYWxsb3V0IiBmb3IgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uCSMKKyMJX3JlYWxfYWNjZXNzKCkgLSAiY2FsbG91dCIgZm9yIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKKyMJX21lbV9yZWFkKCkgLSByZWFkIGV4dGVuZGVkIGltbWVkaWF0ZSBvcGVyYW5kIGZyb20gbWVtb3J5CSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGVuYWJsZWQgZXhjZXB0aW9uCQkjCisjCWZtb3ZtX2R5bmFtaWMoKSAtIGVtdWxhdGUgZHluYW1pYyBmbW92bSBpbnN0cnVjdGlvbgkJIworIwlmbW92bV9jdHJsKCkgLSBlbXVsYXRlIGZtb3ZtIGNvbnRyb2wgaW5zdHJ1Y3Rpb24JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wbGVtZW50ZWQgPGVhPiIgc3RrIGZyYW1lCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIGFjY2VzcyBlcnJvcjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZQkjCisjCUlmIEZQVSBkaXNhYmxlZDoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIEZQVSBkaXNhYmxlZCBzdGFjayBmcmFtZQkjCisjCUlmIFRyYWNlIGV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCisjCS0gTm9uZSAoY29ycmVjdCByZXN1bHQgaGFzIGJlZW4gc3RvcmVkIGFzIGFwcHJvcHJpYXRlKQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhpcyBleGNlcHRpb24gaGFuZGxlcyAzIHR5cGVzIG9mIG9wZXJhdGlvbnM6CQkJIworIyAoMSkgRlAgSW5zdHJ1Y3Rpb25zIHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBvciBwYWNrZWQgaW1tZWRpYXRlCSMKKyMgICAgIGFkZHJlc3NpbmcgbW9kZS4JCQkJCQkJIworIyAoMikgVGhlICJmbW92bS54IiBpbnN0cnVjdGlvbiB3LyBkeW5hbWljIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24uCSMKKyMgKDMpIFRoZSAiZm1vdm0ubCIgaW5zdHJ1Y3Rpb24gdy8gMiBvciAzIGNvbnRyb2wgcmVnaXN0ZXJzLgkJIworIwkJCQkJCQkJCSMKKyMJRm9yIGltbWVkaWF0ZSBkYXRhIG9wZXJhdGlvbnMsIHRoZSBkYXRhIGlzIHJlYWQgaW4gdy8gYQkJIworIyBfbWVtX3JlYWQoKSAiY2FsbG91dCIsIGNvbnZlcnRlZCB0byBGUCBiaW5hcnkgKGlmIHBhY2tlZCksIGFuZCB1c2VkCSMKKyMgYXMgdGhlIHNvdXJjZSBvcGVyYW5kIHRvIHRoZSBpbnN0cnVjdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGluc3RydWN0aW9uCSMKKyMgd29yZC4gSWYgbm8gRlAgZXhjZXB0aW9uIHNob3VsZCBiZSByZXBvcnRlZCBhZHMgYSByZXN1bHQgb2YgdGhlCSMKKyMgZW11bGF0aW9uLCB0aGVuIHRoZSByZXN1bHQgaXMgc3RvcmVkIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBhbmQJIworIyB0aGUgaGFuZGxlciBleGl0cyB0aHJvdWdoIF9mcHNwX2RvbmUoKS4gSWYgYW4gZW5hYmxlZCBleGMgaGFzIGJlZW4JIworIyBzaWduYWxsZWQgYXMgYSByZXN1bHQgb2YgZW11bGF0aW9uLCB0aGVuIGFuIGZzYXZlIHN0YXRlIGZyYW1lCQkjCisjIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZQIGV4Y2VwdGlvbiB0eXBlIG11c3QgYmUgZW50ZXJlZCBpbnRvIHRoZSAwNjAJIworIyBGUFUgYmVmb3JlIGV4aXRpbmcuIEluIGVpdGhlciB0aGUgZW5hYmxlZCBvciBkaXNhYmxlZCBjYXNlcywgd2UJIworIyBtdXN0IGFsc28gY2hlY2sgaWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZywgaW4gd2hpY2ggY2FzZSwgd2UJIworIyBtdXN0IGNyZWF0ZSBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbgkjCisjIHN0YWNrIGZyYW1lLiBJZiBubyBUcmFjZSBpcyBwZW5kaW5nLCB3ZSBzaW1wbHkgZXhpdCB0aHJvdWdoCQkjCisjIF9mcHNwX2RvbmUoKS4JCQkJCQkJCSMKKyMJRm9yICJmbW92bS54IiwgY2FsbCB0aGUgcm91dGluZSBmbW92bV9keW5hbWljKCkgd2hpY2ggd2lsbAkjCisjIGRlY29kZSBhbmQgZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uIE5vIEZQIGV4Y2VwdGlvbnMgY2FuIGJlIHBlbmRpbmcJIworIyBhcyBhIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbiBlbXVsYXRpb24uIEEgVHJhY2UgZXhjZXB0aW9uIGNhbiBiZQkjCisjIHBlbmRpbmcsIHRob3VnaCwgd2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUgbXVzdCBiZSBjaGFuZ2VkCSMKKyMgdG8gYSBUcmFjZSBzdGFjayBmcmFtZSBhbmQgYW4gZXhpdCBtYWRlIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JIworIyBGb3IgdGhlIGNhc2Ugb2YgImZtb3ZtLnggRG4sLShhNykiLCB3aGVyZSB0aGUgb2ZmZW5kaW5nIGluc3RydWN0aW9uCSMKKyMgd2FzIGV4ZWN1dGVkIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGlzIGhhbmRsZXIgbXVzdCBzdG9yZSB0aGUgRlAJIworIyByZWdpc3RlciBmaWxlIHZhbHVlcyB0byB0aGUgc3lzdGVtIHN0YWNrIGJ5IGl0c2VsZiBzaW5jZQkJIworIyBmbW92bV9keW5hbWljKCkgY2FuJ3QgaGFuZGxlIHRoaXMuIEEgbm9ybWFsIGV4aXQgaXMgbWFkZSB0aHJvdWdoCSMKKyMgZnBzcF9kb25lKCkuCQkJCQkJCQkjCisjCUZvciAiZm1vdm0ubCIsIGZtb3ZtX2N0cmwoKSBpcyB1c2VkIHRvIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLgkjCisjIEFnYWluLCBhIFRyYWNlIGV4Y2VwdGlvbiBtYXkgYmUgcGVuZGluZyBhbmQgYW4gZXhpdCBtYWRlIHRocm91Z2gJIworIyBfcmVhbF90cmFjZSgpLiBFbHNlLCBhIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaCBfZnBzcF9kb25lKCkuCSMKKyMJCQkJCQkJCQkjCisjCUJlZm9yZSBhbnkgb2YgdGhlIGFib3ZlIGlzIGF0dGVtcHRlZCwgaXQgbXVzdCBiZSBjaGVja2VkIHRvCSMKKyMgc2VlIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQuIFNpbmNlIHRoZSAiVW5pbXAgPGVhPiIgZXhjZXB0aW9uIGlzIHRha2VuCSMKKyMgYmVmb3JlIHRoZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24sIGJ1dCB0aGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uCSMKKyMgaGFzIGhpZ2hlciBwcmlvcml0eSwgd2UgY2hlY2sgdGhlIGRpc2FibGVkIGJpdCBpbiB0aGUgUENSLiBJZiBzZXQsCSMKKyMgdGhlbiB3ZSBtdXN0IGNyZWF0ZSBhbiA4IHdvcmQgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMgZnJvbSB0aGUgY3VycmVudCA0IHdvcmQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLiBUaGlzIGluY2x1ZGVzCQkjCisjIHJlcHJvZHVjaW5nIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rpb24gdG8gcHV0IG9uIHRoZQkjCisjIG5ldyBzdGFjayBmcmFtZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJSW4gdGhlIHByb2Nlc3Mgb2YgYWxsIGVtdWxhdGlvbiB3b3JrLCBpZiBhIF9tZW1fcmVhZCgpCQkjCisjICJjYWxsb3V0IiByZXR1cm5zIGEgZmFpbGluZyByZXN1bHQgaW5kaWNhdGluZyBhbiBhY2Nlc3MgZXJyb3IsIHRoZW4JIworIyB3ZSBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBzdGFjawkjCisjIGZyYW1lLiBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzIGEgZmF1bHRpbmcgYWRkcmVzcyBhbmQgYSBmYXVsdC0JIworIyBzdGF0dXMtbG9uZ3dvcmQuIFRoZXNlIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGlzIGhhbmRsZXIuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9lZmZhZGQKK19mcHNwX2VmZmFkZDoKKworIyBUaGlzIGV4Y2VwdGlvbiB0eXBlIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlICJMaW5lIEYgRW11bGF0b3IiCisjIGV4Y2VwdGlvbi4gVGhlcmVmb3JlLCB0aGUgRlBVIGNvdWxkIGJlIGRpc2FibGVkIHdoZW4gZW50ZXJpbmcgaGVyZS4KKyMgU28sIHdlIG11c3QgY2hlY2sgdG8gc2VlIGlmIGl0J3MgZGlzYWJsZWQgYW5kIGhhbmRsZSB0aGF0IGNhc2Ugc2VwYXJhdGVseS4KKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJbW92YwkJJXBjciwlZDAJCSMgbG9hZCBwcm9jIGNyCisJYnRzdAkJJjB4MSwlZDAJCSMgaXMgRlBVIGRpc2FibGVkPworCWJuZS53CQlpZWFfZGlzYWJsZWQJCSMgeWVzCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCisJbGluawkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIFBDIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayB0aGUgZXhjZXB0aW9uIGlzIHRoZSBQQyBpbiB0aGUgZnJhbWUKKwltb3YubAkJRVhDX1BDKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCSMgc3RvcmUgT1BXT1JEIGFuZCBFWFRXT1JECisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXRzdC53CQklZDAJCQkjIGlzIG9wZXJhdGlvbiBmbW92ZW0/CisJYm1pLncJCWllYV9mbW92bQkJIyB5ZXMKKworIworIyBoZXJlLCB3ZSB3aWxsIGhhdmU6CisjCWZhYnMJZmRhYnMJZnNhYnMJCWZhY29zCQlmbW9kCisjCWZhZGQJZmRhZGQJZnNhZGQJCWZhc2luCQlmcmVtCisjCWZjbXAJCQkJZmF0YW4JCWZzY2FsZQorIwlmZGl2CWZkZGl2CWZzZGl2CQlmYXRhbmgJCWZzaW4KKyMJZmludAkJCQlmY29zCQlmc2luY29zCisjCWZpbnRyegkJCQlmY29zaAkJZnNpbmgKKyMJZm1vdmUJZmRtb3ZlCWZzbW92ZQkJZmV0b3gJCWZ0YW4KKyMJZm11bAlmZG11bAlmc211bAkJZmV0b3htMQkJZnRhbmgKKyMJZm5lZwlmZG5lZwlmc25lZwkJZmdldGV4cAkJZnRlbnRveAorIwlmc2dsZGl2CQkJCWZnZXRtYW4JCWZ0d290b3gKKyMJZnNnbG11bAkJCQlmbG9nMTAKKyMJZnNxcnQJCQkJZmxvZzIKKyMJZnN1YglmZHN1Yglmc3N1YgkJZmxvZ24KKyMJZnRzdAkJCQlmbG9nbnAxCisjIHdoaWNoIGNhbiBhbGwgdXNlIGY8b3A+Lnt4LHB9CisjIHNvLCBub3cgaXQncyBpbW1lZGlhdGUgZGF0YSBleHRlbmRlZCBwcmVjaXNpb24gQU5EIFBBQ0tFRCBGT1JNQVQhCisjCitpZWFfb3A6CisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJYnRzdAkJJjB4YSwlZDAJCSMgaXMgc3JjIGZtdCB4IG9yIHA/CisJYm5lLmIJCWllYV9vcF9wYWNrCQkjIHBhY2tlZAorCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gIzxkYXRhPgorCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBhZGRyCisJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IDEyIGJ5dGVzCisJYnNyLmwJCV9pbWVtX3JlYWQJCSMgcmVhZCBleHRlbmRlZCBpbW1lZGlhdGUKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUudwkJaWVhX2lhY2MJCSMgeWVzCisKKwlicmEuYgkJaWVhX29wX3NldHNyYworCitpZWFfb3BfcGFjazoKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byAjPGRhdGE+CisJbGVhCQlGUF9TUkMoJWE2KSwlYTEJCSMgcGFzczogcHRyIHRvIHN1cGVyIGRzdAorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcworCWJzci5sCQlfaW1lbV9yZWFkCQkjIHJlYWQgcGFja2VkIG9wZXJhbmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUudwkJaWVhX2lhY2MJCSMgeWVzCisKKyMgVGhlIHBhY2tlZCBvcGVyYW5kIGlzIGFuIElORiBvciBhIE5BTiBpZiB0aGUgZXhwb25lbnQgZmllbGQgaXMgYWxsIG9uZXMuCisJYmZleHR1CQlGUF9TUkMoJWE2KXsmMTomMTV9LCVkMAkjIGdldCBleHAKKwljbXBpLncJCSVkMCwmMHg3ZmZmCQkjIElORiBvciBOQU4/CisJYmVxLmIJCWllYV9vcF9zZXRzcmMJCSMgb3BlcmFuZCBpcyBhbiBJTkYgb3IgTkFOCisKKyMgVGhlIHBhY2tlZCBvcGVyYW5kIGlzIGEgemVybyBpZiB0aGUgbWFudGlzc2EgaXMgYWxsIHplcm8sIGVsc2UgaXQncworIyBhIG5vcm1hbCBwYWNrZWQgb3AuCisJbW92LmIJCTMrRlBfU1JDKCVhNiksJWQwCSMgZ2V0IGJ5dGUgNAorCWFuZGkuYgkJJjB4MGYsJWQwCQkjIGNsZWFyIGFsbCBidXQgbGFzdCBueWJibGUKKwlibmUuYgkJaWVhX29wX2dwX25vdF9zcGVjCSMgbm90IGEgemVybworCXRzdC5sCQlGUF9TUkNfSEkoJWE2KQkJIyBpcyBsdyAyIHplcm8/CisJYm5lLmIJCWllYV9vcF9ncF9ub3Rfc3BlYwkjIG5vdCBhIHplcm8KKwl0c3QubAkJRlBfU1JDX0xPKCVhNikJCSMgaXMgbHcgMyB6ZXJvPworCWJlcS5iCQlpZWFfb3Bfc2V0c3JjCQkjIG9wZXJhbmQgaXMgYSBaRVJPCitpZWFfb3BfZ3Bfbm90X3NwZWM6CisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAorCWJzci5sCQlkZWNiaW4JCQkjIGNvbnZlcnQgdG8gZXh0ZW5kZWQKKwlmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIG1ha2UgdGhpcyB0aGUgc3Jjb3AKKworaWVhX29wX3NldHNyYzoKKwlhZGRpLmwJCSYweGMsRVhDX0VYVFdQVFIoJWE2KQkjIHVwZGF0ZSBleHRlbnNpb24gd29yZCBwb2ludGVyCisKKyMgRlBfU1JDIG5vdyBob2xkcyB0aGUgc3JjIG9wZXJhbmQuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBjb3VsZCBiZSBBTllUSElORyEhIQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWllYV9vcF9nZXRkc3QJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STS9ERU5PUk0vWkVSTworCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNldCBuZXcgb3B0eXBlIHRhZworaWVhX29wX2dldGRzdDoKKwljbHIuYgkJU1RPUkVfRkxHKCVhNikJCSMgY2xlYXIgInN0b3JlIHJlc3VsdCIgYm9vbGVhbgorCisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJaWVhX29wX2V4dHJhY3QJCSMgbW9uYWRpYworCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZnNpbmNvcyxmdHN0LGZjbXA/CisJYm5lLmIJCWllYV9vcF9zcGVjCQkjIHllcworCitpZWFfb3BfbG9hZGRzdDoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggZHN0IHJlZ25vCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIGNvdWxkIGJlIEFOWVRISU5HISEhCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJaWVhX29wX2V4dHJhY3QJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STS9ERU5PUk0vWkVSTworCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNldCBuZXcgb3B0eXBlIHRhZworCWJyYS5iCQlpZWFfb3BfZXh0cmFjdAorCisjIHRoZSBvcGVyYXRpb24gaXMgZnNpbmNvcywgZnRzdCwgb3IgZmNtcC4gb25seSBmY21wIGlzIGR5YWRpYworaWVhX29wX3NwZWM6CisJYnRzdAkJJjB4MywxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBmc2luY29zPworCWJlcS5iCQlpZWFfb3BfZXh0cmFjdAkJIyB5ZXMKKyMgbm93LCB3ZSdyZSBsZWZ0IHdpdGggZnRzdCBhbmQgZmNtcC4gc28sIGZpcnN0IGxldCdzIHRhZyB0aGVtIHNvIHRoYXQgdGhleSBkb24ndAorIyBzdG9yZSBhIHJlc3VsdC4gdGhlbiwgb25seSBmY21wIHdpbGwgYnJhbmNoIGJhY2sgYW5kIHBpY2sgdXAgYSBkc3Qgb3BlcmFuZC4KKwlzdAkJU1RPUkVfRkxHKCVhNikJCSMgZG9uJ3Qgc3RvcmUgYSBmaW5hbCByZXN1bHQKKwlidHN0CQkmMHgxLDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZjbXA/CisJYmVxLmIJCWllYV9vcF9sb2FkZHN0CQkjIHllcworCitpZWFfb3BfZXh0cmFjdDoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3M6IHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlmbW92LmwJCSYweDAsJWZwY3IKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMKKyMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorIwlCU1VOCTogbm9uZQorIwlTTkFOCTogYWxsIG9wZXJhdGlvbnMKKyMJT1BFUlIJOiBhbGwgcmVnLXJlZyBvciBtZW0tcmVnIG9wZXJhdGlvbnMgdGhhdCBjYW4gbm9ybWFsbHkgb3BlcnIKKyMJT1ZGTAk6IHNhbWUgYXMgT1BFUlIKKyMJVU5GTAk6IHNhbWUgYXMgT1BFUlIKKyMJRFoJOiBzYW1lIGFzIE9QRVJSCisjCUlORVgyCTogc2FtZSBhcyBPUEVSUgorIwlJTkVYMQk6IGFsbCBwYWNrZWQgaW1tZWRpYXRlIG9wZXJhdGlvbnMKKyMKKworIyB3ZSBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQorIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKKwlibmUuYgkJaWVhX29wX2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCisKKyMgbm93LCB3ZSBzYXZlIHRoZSByZXN1bHQsIHVubGVzcywgb2YgY291cnNlLCB0aGUgb3BlcmF0aW9uIHdhcyBmdHN0IG9yIGZjbXAuCisjIHRoZXNlIGRvbid0IHNhdmUgcmVzdWx0cy4KK2llYV9vcF9zYXZlOgorCXRzdC5iCQlTVE9SRV9GTEcoJWE2KQkJIyBkb2VzIHRoaXMgb3Agc3RvcmUgYSByZXN1bHQ/CisJYm5lLmIJCWllYV9vcF9leGl0MQkJIyBleGl0IHdpdGggbm8gZnJlc3RvcmUKKworaWVhX29wX3N0b3JlOgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBmZXRjaCBkc3QgcmVnbm8KKwlic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAorCitpZWFfb3BfZXhpdDE6CisJbW92LmwJCUVYQ19QQyglYTYpLFVTRVJfRlBJQVIoJWE2KSAjIHNldCBGUElBUiB0byAiQ3VycmVudCBQQyIKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCAiTmV4dCBQQyIgaW4gZXhjIGZyYW1lCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLncJCWllYV9vcF90cmFjZQkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworaWVhX29wX2VuYToKKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGUgYW5kIHNldAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlpZWFfb3BfZXhjCQkjIGF0IGxlYXN0IG9uZSB3YXMgc2V0CisKKyMgbm8gZXhjZXB0aW9uIG9jY3VycmVkLiBub3csIGRpZCBhIGRpc2FibGVkLCBleGFjdCBvdmVyZmxvdyBvY2N1ciB3aXRoIGluZXhhY3QKKyMgZW5hYmxlZD8gaWYgc28sIHRoZW4gd2UgaGF2ZSB0byBzdHVmZiBhbiBvdmVyZmxvdyBmcmFtZSBpbnRvIHRoZSBGUFUuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CisJYmVxLmIJCWllYV9vcF9zYXZlCisKK2llYV9vcF9vdmZsOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEuYgkJaWVhX29wX3N0b3JlCQkjIG5vCisJYnJhLmIJCWllYV9vcF9leGNfb3ZmbAkJIyB5ZXMKKworIyBhbiBlbmFibGVkIGV4Y2VwdGlvbiBvY2N1cnJlZC4gd2UgaGF2ZSB0byBpbnNlcnQgdGhlIGV4Y2VwdGlvbiB0eXBlIGJhY2sgaW50bworIyB0aGUgbWFjaGluZS4KK2llYV9vcF9leGM6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/CisJYm5lLmIJCWllYV9vcF9leGNfZm9yY2UJIyBubworCisjIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdC4gc28sIGlmIGl0IG9jY3VycyB3aXRoIGFuIG92ZXJmbG93CisjIG9yIHVuZGVyZmxvdyB0aGF0IHdhcyBkaXNhYmxlZCwgdGhlbiB3ZSBoYXZlIHRvIGZvcmNlIGFuIG92ZXJmbG93IG9yCisjIHVuZGVyZmxvdyBmcmFtZS4KKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBvdmVyZmxvdyBvY2N1cj8KKwlibmUuYgkJaWVhX29wX2V4Y19vdmZsCQkjIHllcworCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIHVuZGVyZmxvdyBvY2N1cj8KKwlibmUuYgkJaWVhX29wX2V4Y191bmZsCQkjIHllcworCitpZWFfb3BfZXhjX2ZvcmNlOgorCW1vdi53CQkodGJsX2llYV9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQorCWJyYS5iCQlpZWFfb3BfZXhpdDIJCSMgZXhpdCB3aXRoIGZyZXN0b3JlCisKK3RibF9pZWFfZXhjZXB0OgorCXNob3J0CQkweGUwMDIsIDB4ZTAwNiwgMHhlMDA0LCAweGUwMDUKKwlzaG9ydAkJMHhlMDAzLCAweGUwMDIsIDB4ZTAwMSwgMHhlMDAxCisKK2llYV9vcF9leGNfb3ZmbDoKKwltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCisJYnJhLmIJCWllYV9vcF9leGl0MgorCitpZWFfb3BfZXhjX3VuZmw6CisJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQorCitpZWFfb3BfZXhpdDI6CisJbW92LmwJCUVYQ19QQyglYTYpLFVTRVJfRlBJQVIoJWE2KSAjIHNldCBGUElBUiB0byAiQ3VycmVudCBQQyIKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCAiTmV4dCBQQyIgaW4gZXhjIGZyYW1lCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgZXhjZXB0aW9uYWwgc3RhdGUKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLmIJCWllYV9vcF90cmFjZQkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIworIyBUaGUgb3BjbGFzcyB0d28gaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIGFuICJVbmltcGxlbWVudGVkIEVmZmVjdGl2ZSBBZGRyZXNzIgorIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gTWFrZSB0aGUgImN1cnJlbnQiIFBDIHRoZSBGUElBUiBhbmQgcHV0IGl0IGluCisjIHRoZSB0cmFjZSBzdGFjayBmcmFtZSB0aGVuIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KKyMKKyMJCSBVTklNUCBFQSBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MCAqICAweDBmMAkqCSogICAgQ3VycmVudAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkJKiAgICAgIFNSCSoKKyMJCQkJCSoqKioqKioqKioqKioqKioqCitpZWFfb3BfdHJhY2U6CisJbW92LmwJCSglc3ApLC0oJXNwKQkJIyBzaGlmdCBzdGFjayBmcmFtZSAiZG93biIKKwltb3YudwkJMHg4KCVzcCksMHg0KCVzcCkKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2llYV9mbW92bToKKwlidHN0CQkmMTQsJWQwCQkJIyBjdHJsIG9yIGRhdGEgcmVnCisJYmVxLncJCWllYV9mbW92bV9jdHJsCisKK2llYV9mbW92bV9kYXRhOgorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlCisJYm5lLmIJCWllYV9mbW92bV9kYXRhX3MKKworaWVhX2Ztb3ZtX2RhdGFfdToKKwltb3YubAkJJXVzcCwlYTAKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHN0b3JlIGN1cnJlbnQgYTcKKwlic3IubAkJZm1vdm1fZHluYW1pYwkJIyBkbyBkeW5hbWljIGZtb3ZtCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBsb2FkIHBvc3NpYmx5IG5ldyBhNworCW1vdi5sCQklYTAsJXVzcAkJIyB1cGRhdGUgdXNwCisJYnJhLncJCWllYV9mbW92bV9leGl0CisKK2llYV9mbW92bV9kYXRhX3M6CisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQorCWxlYQkJMHgyK0VYQ19WT0ZGKCVhNiksJWEwCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQorCWJzci5sCQlmbW92bV9keW5hbWljCQkjIGRvIGR5bmFtaWMgZm1vdm0KKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJlcS53CQlpZWFfZm1vdm1fZGF0YV9wcmVkZWMKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWlhN19mbGcKKwlibmUudwkJaWVhX2Ztb3ZtX2V4aXQKKworIyByaWdodCBub3csIGQwID0gdGhlIHNpemUuCisjIHRoZSBkYXRhIGhhcyBiZWVuIGZldGNoZWQgZnJvbSB0aGUgc3VwZXJ2aXNvciBzdGFjaywgYnV0IHdlIGhhdmUgbm90CisjIGluY3JlbWVudGVkIHRoZSBzdGFjayBwb2ludGVyIGJ5IHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYnl0ZXMuCisjIGRvIGl0IGhlcmUuCitpZWFfZm1vdm1fZGF0YV9wb3N0aW5jOgorCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikKKwlibmUuYgkJaWVhX2Ztb3ZtX2RhdGFfcGlfdHJhY2UKKworCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksKEVYQ19QQywlYTYsJWQwKQorCW1vdi53CQkmMHgwMGYwLChFWENfVk9GRiwlYTYsJWQwKQorCisJbGVhCQkoRVhDX1NSLCVhNiwlZDApLCVhMAorCW1vdi5sCQklYTAsRVhDX1NSKCVhNikKKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisJbW92LmwJCSglc3ApKywlc3AKKwlicmEubAkJX2Zwc3BfZG9uZQorCitpZWFfZm1vdm1fZGF0YV9waV90cmFjZToKKwltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUi0weDQsJWE2LCVkMCkKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwoRVhDX1BDLTB4NCwlYTYsJWQwKQorCW1vdi53CQkmMHgyMDI0LChFWENfVk9GRi0weDQsJWE2LCVkMCkKKwltb3YubAkJRVhDX1BDKCVhNiksKEVYQ19WT0ZGKzB4Mi0weDQsJWE2LCVkMCkKKworCWxlYQkJKEVYQ19TUi0weDQsJWE2LCVkMCksJWEwCisJbW92LmwJCSVhMCxFWENfU1IoJWE2KQorCisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKwltb3YubAkJKCVzcCkrLCVzcAorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIHJpZ2h0IG5vdywgZDEgPSBzaXplIGFuZCBkMCA9IHRoZSBzdHJnLgoraWVhX2Ztb3ZtX2RhdGFfcHJlZGVjOgorCW1vdi5iCQklZDEsRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHN0cmcKKwltb3YuYgkJJWQwLDB4MStFWENfVk9GRiglYTYpCSMgc3RvcmUgc2l6ZQorCisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YubAkJKCVhNiksLSglc3ApCQkjIG1ha2UgYSBjb3B5IG9mIGE2CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgZDEKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwtKCVzcCkJIyBtYWtlIGEgY29weSBvZiBOZXh0IFBDCisKKwljbHIubAkJJWQwCisJbW92LmIJCTB4MStFWENfVk9GRiglYTYpLCVkMAkjIGZldGNoIHNpemUKKwluZWcubAkJJWQwCQkJIyBnZXQgbmVnYXRpdmUgb2Ygc2l6ZQorCisJYnRzdAkJJjB4NyxFWENfU1IoJWE2KQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYmVxLmIJCWllYV9mbW92bV9kYXRhX3AyCisKKwltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUi0weDQsJWE2LCVkMCkKKwltb3YubAkJRVhDX1BDKCVhNiksKEVYQ19WT0ZGLTB4MiwlYTYsJWQwKQorCW1vdi5sCQkoJXNwKSssKEVYQ19QQy0weDQsJWE2LCVkMCkKKwltb3YudwkJJjB4MjAyNCwoRVhDX1ZPRkYtMHg0LCVhNiwlZDApCisKKwlwZWEJCSglYTYsJWQwKQkJIyBjcmVhdGUgZmluYWwgc3AKKwlicmEuYgkJaWVhX2Ztb3ZtX2RhdGFfcDMKKworaWVhX2Ztb3ZtX2RhdGFfcDI6CisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1IsJWE2LCVkMCkKKwltb3YubAkJKCVzcCkrLChFWENfUEMsJWE2LCVkMCkKKwltb3YudwkJJjB4MDBmMCwoRVhDX1ZPRkYsJWE2LCVkMCkKKworCXBlYQkJKDB4NCwlYTYsJWQwKQkJIyBjcmVhdGUgZmluYWwgc3AKKworaWVhX2Ztb3ZtX2RhdGFfcDM6CisJY2xyLmwJCSVkMQorCW1vdi5iCQlFWENfVk9GRiglYTYpLCVkMQkjIGZldGNoIHN0cmcKKworCXRzdC5iCQklZDEKKwlicGwuYgkJZm1fMQorCWZtb3ZtLngJCSYweDgwLCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fMToKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fMgorCWZtb3ZtLngJCSYweDQwLCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fMjoKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fMworCWZtb3ZtLngJCSYweDIwLCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fMzoKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fNAorCWZtb3ZtLngJCSYweDEwLCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fNDoKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fNQorCWZtb3ZtLngJCSYweDA4LCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fNToKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fNgorCWZtb3ZtLngJCSYweDA0LCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fNjoKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fNworCWZtb3ZtLngJCSYweDAyLCgweDQrMHg4LCVhNiwlZDApCisJYWRkaS5sCQkmMHhjLCVkMAorZm1fNzoKKwlsc2wuYgkJJjB4MSwlZDEKKwlicGwuYgkJZm1fZW5kCisJZm1vdm0ueAkJJjB4MDEsKDB4NCsweDgsJWE2LCVkMCkKK2ZtX2VuZDoKKwltb3YubAkJMHg0KCVzcCksJWQxCisJbW92LmwJCTB4OCglc3ApLCVkMAorCW1vdi5sCQkweGMoJXNwKSwlYTYKKwltb3YubAkJKCVzcCkrLCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBlbmFibGVkPworCWJlcS5sCQlfZnBzcF9kb25lCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2llYV9mbW92bV9jdHJsOgorCisJYnNyLmwJCWZtb3ZtX2N0cmwJCSMgbG9hZCBjdHJsIHJlZ3MKKworaWVhX2Ztb3ZtX2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlidHN0CQkmMHg3LEVYQ19TUiglYTYpCSMgaXMgdHJhY2Ugb24/CisJYm5lLmIJCWllYV9mbW92bV90cmFjZQkJIyB5ZXMKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0IE5leHQgUEMKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIworIyBUaGUgY29udHJvbCByZWcgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIGFuICJVbmltcGxlbWVudGVkIEVmZmVjdGl2ZSBBZGRyZXNzIgorIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gVGhlICJDdXJyZW50IFBDIiBmb3IgdGhlIHRyYWNlIGZyYW1lIGlzIHRoZQorIyBQQyBzdGFja2VkIGZvciBVbmltcCBFQS4gVGhlICJOZXh0IFBDIiBpcyBpbiBFWENfRVhUV1BUUi4KKyMgQWZ0ZXIgZml4aW5nIHRoZSBzdGFjayBmcmFtZSwganVtcCB0byBfcmVhbF90cmFjZSgpLgorIworIwkJIFVOSU1QIEVBIEZSQU1FCQkgICBUUkFDRSBGUkFNRQorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgwICogIDB4MGYwCSoJKiAgICBDdXJyZW50CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCQkqICAgIEN1cnJlbnQJKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMjQJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBTUgkqCSogICAgIE5leHQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCQkqICAgICAgU1IJKgorIwkJCQkJKioqKioqKioqKioqKioqKioKKyMgdGhpcyBhaW4ndCBhIHByZXR0eSBzb2x1dGlvbiwgYnV0IGl0IHdvcmtzOgorIyAtcmVzdG9yZSBhNiAobm90IHdpdGggdW5saykKKyMgLXNoaWZ0IHN0YWNrIGZyYW1lIGRvd24gb3ZlciB3aGVyZSBvbGQgYTYgdXNlZCB0byBiZQorIyAtYWRkIExPQ0FMX1NJWkUgdG8gc3RhY2sgcG9pbnRlcgoraWVhX2Ztb3ZtX3RyYWNlOgorCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisJbW92LncJCUVYQ19TUitMT0NBTF9TSVpFKCVzcCksMHgwK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi5sCQlFWENfUEMrTE9DQUxfU0laRSglc3ApLDB4OCtMT0NBTF9TSVpFKCVzcCkKKwltb3YubAkJRVhDX0VYVFdQVFIrTE9DQUxfU0laRSglc3ApLDB4MitMT0NBTF9TSVpFKCVzcCkKKwltb3YudwkJJjB4MjAyNCwweDYrTE9DQUxfU0laRSglc3ApICMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CisJYWRkLmwJCSZMT0NBTF9TSVpFLCVzcAkJIyBjbGVhciBzdGFjayBmcmFtZQorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIEZQVSBpcyBkaXNhYmxlZCBhbmQgc28gd2Ugc2hvdWxkIHJlYWxseSBoYXZlIHRha2VuIHRoZSAiTGluZQorIyBGIEVtdWxhdG9yIiBleGNlcHRpb24uIFNvLCBoZXJlIHdlIGNyZWF0ZSBhbiA4LXdvcmQgc3RhY2sgZnJhbWUKKyMgZnJvbSBvdXIgNC13b3JkIHN0YWNrIGZyYW1lLiBUaGlzIG1lYW5zIHdlIG11c3QgY2FsY3VsYXRlIHRoZSBsZW5ndGgKKyMgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHRvIGdldCB0aGUgIm5leHQgUEMiLiBUaGlzIGlzIHRyaXZpYWwgZm9yCisjIGltbWVkaWF0ZSBvcGVyYW5kcyBidXQgcmVxdWlyZXMgc29tZSBleHRyYSB3b3JrIGZvciBmbW92bSBkeW5hbWljCisjIHdoaWNoIGNhbiB1c2UgbW9zdCBhZGRyZXNzaW5nIG1vZGVzLgoraWVhX2Rpc2FibGVkOgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisKKyMgUEMgb2YgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIHRoZSBleGNlcHRpb24gaXMgdGhlIFBDIGluIHRoZSBmcmFtZQorCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCSMgc3RvcmUgT1BXT1JEIGFuZCBFWFRXT1JECisKKwl0c3QudwkJJWQwCQkJIyBpcyBpbnN0ciBmbW92bT8KKwlibWkuYgkJaWVhX2Rpc19mbW92bQkJIyB5ZXMKKyMgaW5zdHJ1Y3Rpb24gaXMgdXNpbmcgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGltbWVkaWF0ZSBvcGVyYW5kLiB0aGVyZWZvcmUsCisjIHRoZSB0b3RhbCBpbnN0cnVjdGlvbiBsZW5ndGggaXMgMTYgYnl0ZXMuCitpZWFfZGlzX2ltbWVkOgorCW1vdi5sCQkmMHgxMCwlZDAJCSMgMTYgYnl0ZXMgb2YgaW5zdHJ1Y3Rpb24KKwlicmEuYgkJaWVhX2Rpc19jb250CitpZWFfZGlzX2Ztb3ZtOgorCWJ0c3QJCSYweGUsJWQwCQkjIGlzIGluc3RyIGZtb3ZtIGN0cmwKKwlibmUuYgkJaWVhX2Rpc19mbW92bV9kYXRhCSMgbm8KKyMgdGhlIGluc3RydWN0aW9uIGlzIGEgZm1vdm0ubCB3aXRoIDIgb3IgMyByZWdpc3RlcnMuCisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDEKKwltb3YubAkJJjB4YywlZDAKKwljbXBpLmIJCSVkMSwmMHg3CQkjIG1vdmUgYWxsIHJlZ3M/CisJYm5lLmIJCWllYV9kaXNfY29udAorCWFkZHEubAkJJjB4NCwlZDAKKwlicmEuYgkJaWVhX2Rpc19jb250CisjIHRoZSBpbnN0cnVjdGlvbiBpcyBhbiBmbW92bS54IGR5bmFtaWMgd2hpY2ggY2FuIHVzZSBtYW55IGFkZHJlc3NpbmcKKyMgbW9kZXMgYW5kIHRodXMgY2FuIGhhdmUgc2V2ZXJhbCBkaWZmZXJlbnQgdG90YWwgaW5zdHJ1Y3Rpb24gbGVuZ3Rocy4KKyMgY2FsbCBmbW92bV9jYWxjX2VhIHdoaWNoIHdpbGwgZ28gdGhyb3VnaCB0aGUgZWEgY2FsYyBwcm9jZXNzIGFuZCwKKyMgYXMgYSBieS1wcm9kdWN0LCB3aWxsIHRlbGwgdXMgaG93IGxvbmcgdGhlIGluc3RydWN0aW9uIGlzLgoraWVhX2Rpc19mbW92bV9kYXRhOgorCWNsci5sCQklZDAKKwlic3IubAkJZm1vdm1fY2FsY19lYQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVkMAorCXN1Yi5sCQlFWENfUEMoJWE2KSwlZDAKK2llYV9kaXNfY29udDoKKwltb3YudwkJJWQwLEVYQ19WT0ZGKCVhNikJIyBzdG9yZSBzdGFjayBzaGlmdCB2YWx1ZQorCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKyMgaGVyZSwgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSA4LXdvcmQgZnJhbWUgZnJvbSB0aGUgNC13b3JkIGZyYW1lLAorIyB3aXRoIHRoZSAibmV4dCBQQyIgYXMgYWRkaXRpb25hbCBpbmZvLgorIyB0aGUgPGVhPiBmaWVsZCBpcyBsZXQgYXMgdW5kZWZpbmVkLgorCXN1YnEubAkJJjB4OCwlc3AJCSMgbWFrZSByb29tIGZvciBuZXcgc3RhY2sKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJbW92LncJCTB4Yyglc3ApLDB4NCglc3ApCSMgbW92ZSBTUgorCW1vdi5sCQkweGUoJXNwKSwweDYoJXNwKQkjIG1vdmUgQ3VycmVudCBQQworCWNsci5sCQklZDAKKwltb3YudwkJMHgxMiglc3ApLCVkMAorCW1vdi5sCQkweDYoJXNwKSwweDEwKCVzcCkJIyBtb3ZlIEN1cnJlbnQgUEMKKwlhZGQubAkJJWQwLDB4Niglc3ApCQkjIG1ha2UgTmV4dCBQQworCW1vdi53CQkmMHg0MDJjLDB4YSglc3ApCSMgaW5zZXJ0IG9mZnNldCxmcmFtZSBmb3JtYXQKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwlicmEubAkJX3JlYWxfZnB1X2Rpc2FibGVkCisKKyMjIyMjIyMjIyMKKworaWVhX2lhY2M6CisJbW92YwkJJXBjciwlZDAKKwlidHN0CQkmMHgxLCVkMAorCWJuZS5iCQlpZWFfaWFjY19jb250CisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEgb24gc3RhY2sKK2llYV9pYWNjX2NvbnQ6CisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlzdWJxLncJCSYweDgsJXNwCQkjIG1ha2Ugc3RhY2sgZnJhbWUgYmlnZ2VyCisJbW92LmwJCTB4OCglc3ApLCglc3ApCQkjIHN0b3JlIFNSLGhpKFBDKQorCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQorCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgdm9mZgorCW1vdi5sCQkweDIoJXNwKSwweDgoJXNwKQkjIHN0b3JlIGVhCisJbW92LmwJCSYweDA5NDI4MDAxLDB4Yyglc3ApCSMgc3RvcmUgZnNsdworCitpZWFfYWNjX2RvbmU6CisJYnRzdAkJJjB4NSwoJXNwKQkJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KKwliZXEuYgkJaWVhX2FjY19kb25lMgkJIyB1c2VyCisJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKKworaWVhX2FjY19kb25lMjoKKwlicmEubAkJX3JlYWxfYWNjZXNzCisKK2llYV9kYWNjOgorCWxlYQkJLUxPQ0FMX1NJWkUoJWE2KSwlc3AKKworCW1vdmMJCSVwY3IsJWQxCisJYnRzdAkJJjB4MSwlZDEKKwlibmUuYgkJaWVhX2RhY2NfY29udAorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMSBvbiBzdGFjaworCWZtb3ZtLmwJCUxPQ0FMX1NJWkUrVVNFUl9GUENSKCVzcCksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKK2llYV9kYWNjX2NvbnQ6CisJbW92LmwJCSglYTYpLCVhNgorCisJbW92LmwJCTB4NCtMT0NBTF9TSVpFKCVzcCksLTB4OCsweDQrTE9DQUxfU0laRSglc3ApCisJbW92LncJCTB4OCtMT0NBTF9TSVpFKCVzcCksLTB4OCsweDgrTE9DQUxfU0laRSglc3ApCisJbW92LncJCSYweDQwMDgsLTB4OCsweGErTE9DQUxfU0laRSglc3ApCisJbW92LmwJCSVhMCwtMHg4KzB4YytMT0NBTF9TSVpFKCVzcCkKKwltb3YudwkJJWQwLC0weDgrMHgxMCtMT0NBTF9TSVpFKCVzcCkKKwltb3YudwkJJjB4MDAwMSwtMHg4KzB4MTIrTE9DQUxfU0laRSglc3ApCisKKwltb3ZtLmwJCUxPQ0FMX1NJWkUrRVhDX0RSRUdTKCVzcCksJjB4MDMwMyAjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlhZGQudwkJJkxPQ0FMX1NJWkUtMHg0LCVzcAorCisJYnJhLmIJCWllYV9hY2NfZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX29wZXJyKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIE9wZXJyIGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBPcGVyYW5kIEVycm9yIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCV9yZWFsX29wZXJyKCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBvcGVyciBoYW5kbGVyCSMKKyMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gc3RvcmUgZGF0YSB0byBtZW0gKG9wY2xhc3MgMykJIworIwlzdG9yZV9kcmVnX3tiLHcsbH0oKSAtIHN0b3JlIGRhdGEgdG8gZGF0YSByZWdmaWxlIChvcGNsYXNzIDMpCSMKKyMJZmFjY19vdXRfe2IsdyxsfSgpIC0gc3RvcmUgdG8gbWVtb3J5IHRvb2sgYWNjZXNzIGVycm9yIChvcGNsIDMpCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgT3BlcnIgZXhjZXB0aW9uIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm8gYWNjZXNzIGVycm9yOgkJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRlAgT3BlcnIgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsCSMKKyMgaXMgdG8gZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9vcGVycigpLiBCdXQsIG9uIHRoZSAwNjAsCSMKKyMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9uIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKKyMgaW5wdXQgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbWF5IGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcwkjCisjIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0ZWQuIFRoaXMgaGFuZGxlciBjYWxscyBmaXhfc2tld2VkX29wcygpIHRvCSMKKyMgZG8ganVzdCB0aGlzIGFuZCB0aGVuIGV4aXRzIHRocm91Z2ggX3JlYWxfb3BlcnIoKS4JCQkjCisjCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIworIyBvcGVyciByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkjCisjIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJlZm9yZSBmaW5hbGx5IGV4aXRpbmcgdGhyb3VnaAkjCisjIF9yZWFsX2luZXgoKS4gVGhlIG1vdmUgb3V0LCBpZiB0byBtZW1vcnksIGlzIHBlcmZvcm1lZCB1c2luZwkJIworIyBfbWVtX3dyaXRlKCkgImNhbGxvdXQiIHJvdXRpbmVzIHRoYXQgbWF5IHJldHVybiBhIGZhaWxpbmcgcmVzdWx0LgkjCisjIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGUgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCBmYWNjX291dCgpCSMKKyMgd2hpY2ggY3JlYXRlcyBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBvcGVycgkjCisjIHN0YWNrIGZyYW1lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3Bfb3BlcnIKK19mcHNwX29wZXJyOgorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMTMsJWQwCQkJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CisJYm5lLmIJCWZvcGVycl9vdXQJCSMgZm1vdmUgb3V0CisKKworIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgorIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgaW5maW5pdHkgb3IKKyMgZGVub3JtIG9wZXJhbmQgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LiBOQU5zIGFsc28gYmVjb21lIHNrZXdlZCwgYnV0IGNhbid0CisjIGNhdXNlIGFuIG9wZXJyIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZW0gaGVyZS4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworZm9wZXJyX2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisJYnJhLmwJCV9yZWFsX29wZXJyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAorIyBvcGVyYW5kIGVycm9yIGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCisjIHRoZSB1c2VyIG9wZXJhbmQgZXJyb3IgaGFuZGxlci4KKyMKKyMgYnl0ZSwgd29yZCwgYW5kIGxvbmcgZGVzdGluYXRpb24gZm9ybWF0IG9wZXJhdGlvbnMgY2FuIHBhc3MKKyMgdGhyb3VnaCBoZXJlLiB3ZSBzaW1wbHkgbmVlZCB0byB0ZXN0IHRoZSBzaWduIG9mIHRoZSBzcmMKKyMgb3BlcmFuZCBhbmQgc2F2ZSB0aGUgYXBwcm9wcmlhdGUgbWluaW11bSBvciBtYXhpbXVtIGludGVnZXIgdmFsdWUKKyMgdG8gdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGFzIHBvaW50ZWQgdG8gYnkgdGhlIHN0YWNrZWQgZWZmZWN0aXZlIGFkZHJlc3MuCisjCisjIGFsdGhvdWdoIHBhY2tlZCBvcGNsYXNzIHRocmVlIG9wZXJhdGlvbnMgY2FuIHRha2Ugb3BlcmFuZCBlcnJvcgorIyBleGNlcHRpb25zLCB0aGV5IHdvbid0IHBhc3MgdGhyb3VnaCBoZXJlIHNpbmNlIHRoZXkgYXJlIGNhdWdodAorIyBmaXJzdCBieSB0aGUgdW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgZXhjZXB0aW9uIGhhbmRsZXIuIHRoYXQgaGFuZGxlcgorIyBzZW5kcyB0aGVtIGRpcmVjdGx5IHRvIF9yZWFsX29wZXJyKCkgaWYgbmVjZXNzYXJ5LgorIworZm9wZXJyX291dDoKKworCW1vdi53CQlGUF9TUkNfRVgoJWE2KSwlZDEJIyBmZXRjaCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwljbXBpLncJCSVkMSwmMHg3ZmZmCisJYm5lLmIJCWZvcGVycl9vdXRfbm90X3FuYW4KKyMgdGhlIG9wZXJhbmQgaXMgZWl0aGVyIGFuIGluZmluaXR5IG9yIGEgUU5BTi4KKwl0c3QubAkJRlBfU1JDX0xPKCVhNikKKwlibmUuYgkJZm9wZXJyX291dF9xbmFuCisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQorCWFuZGkubAkJJjB4N2ZmZmZmZmYsJWQxCisJYmVxLmIJCWZvcGVycl9vdXRfbm90X3FuYW4KK2ZvcGVycl9vdXRfcW5hbjoKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksTF9TQ1IxKCVhNikKKwlicmEuYgkJZm9wZXJyX291dF9qbXAKKworZm9wZXJyX291dF9ub3RfcW5hbjoKKwltb3YubAkJJjB4N2ZmZmZmZmYsJWQxCisJdHN0LmIJCUZQX1NSQ19FWCglYTYpCisJYnBsLmIJCWZvcGVycl9vdXRfbm90X3FuYW4yCisJYWRkcS5sCQkmMHgxLCVkMQorZm9wZXJyX291dF9ub3RfcW5hbjI6CisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQorCitmb3BlcnJfb3V0X2ptcDoKKwliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBleHRyYWN0IGRzdCBmb3JtYXQgZmllbGQKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCA8ZWE+IG1vZGUscmVnCisJbW92LncJCSh0Ymxfb3BlcnIuYiwlcGMsJWQwLncqMiksJWEwCisJam1wCQkodGJsX29wZXJyLmIsJXBjLCVhMCkKKwordGJsX29wZXJyOgorCXNob3J0CQlmb3BlcnJfb3V0X2wgLSB0Ymxfb3BlcnIgIyBsb25nIHdvcmQgaW50ZWdlcgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBzZ2wgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIGV4dCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJZm9wZXJyX2V4aXQgIC0gdGJsX29wZXJyICMgcGFja2VkIHdvbid0IGVudGVyIGhlcmUKKwlzaG9ydAkJZm9wZXJyX291dF93IC0gdGJsX29wZXJyICMgd29yZCBpbnRlZ2VyCisJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIGRibCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJZm9wZXJyX291dF9iIC0gdGJsX29wZXJyICMgYnl0ZSBpbnRlZ2VyCisJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIHBhY2tlZCB3b24ndCBlbnRlciBoZXJlCisKK2ZvcGVycl9vdXRfYjoKKwltb3YuYgkJTF9TQ1IxKCVhNiksJWQwCQkjIGxvYWQgcG9zaXRpdmUgZGVmYXVsdCByZXN1bHQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmb3BlcnJfb3V0X2Jfc2F2ZV9kbgkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCisKKwlicmEudwkJZm9wZXJyX2V4aXQKK2ZvcGVycl9vdXRfYl9zYXZlX2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19iCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZvcGVycl9leGl0CisKK2ZvcGVycl9vdXRfdzoKKwltb3YudwkJTF9TQ1IxKCVhNiksJWQwCQkjIGxvYWQgcG9zaXRpdmUgZGVmYXVsdCByZXN1bHQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmb3BlcnJfb3V0X3dfc2F2ZV9kbgkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCisKKwlicmEudwkJZm9wZXJyX2V4aXQKK2ZvcGVycl9vdXRfd19zYXZlX2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ193CQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZvcGVycl9leGl0CisKK2ZvcGVycl9vdXRfbDoKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQwCQkjIGxvYWQgcG9zaXRpdmUgZGVmYXVsdCByZXN1bHQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmb3BlcnJfb3V0X2xfc2F2ZV9kbgkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEudwkJZm9wZXJyX2V4aXQKK2ZvcGVycl9vdXRfbF9zYXZlX2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZvcGVycl9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3Bfc25hbigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBTTkFOIGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBTaWduYWxsaW5nIE5BTiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlfcmVhbF9zbmFuKCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBTTkFOIGhhbmRsZXIJIworIwlfZG1lbV93cml0ZV97Ynl0ZSx3b3JkLGxvbmd9KCkgLSBzdG9yZSBkYXRhIHRvIG1lbSAob3BjbGFzcyAzKQkjCisjCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2ZpbGUgKG9wY2xhc3MgMykJIworIwlmYWNjX291dF97Yix3LGwsZCx4fSgpIC0gc3RvcmUgdG8gbWVtIHRvb2sgYWNjIGVycm9yIChvcGNsIDMpCSMKKyMJX2NhbGNfZWFfZm91dCgpIC0gZml4IEFuIGlmIDxlYT4gaXMgLSgpIG9yICgpKzsgYWxzbyBnZXQgPGVhPgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIFNOQU4gZXhjZXB0aW9uIGZyYW1lCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vIGFjY2VzcyBlcnJvcjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIFNOQU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsCSMKKyMgaXMgdG8gZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9zbmFuKCkuIEJ1dCwgb24gdGhlIDA2MCwJIworIyBmb3Igb3BjbGFzcyB6ZXJvIGFuZCB0d28gaW5zdHJ1Y3Rpb25zIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKKyMgaW5wdXQgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbWF5IGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcwkjCisjIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0ZWQuIFRoaXMgaGFuZGxlciBjYWxscyBmaXhfc2tld2VkX29wcygpIHRvCSMKKyMgZG8ganVzdCB0aGlzIGFuZCB0aGVuIGV4aXRzIHRocm91Z2ggX3JlYWxfc25hbigpLgkJCSMKKyMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCisjIFNOQU4gcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JCSMKKyMgVGhpcyBjb2RlIG11c3QgZW11bGF0ZSB0aGUgbW92ZSBvdXQgYmVmb3JlIGZpbmFsbHkgZXhpdGluZyB0aHJvdWdoCSMKKyMgX3JlYWxfc25hbigpLiBUaGUgbW92ZSBvdXQsIGlmIHRvIG1lbW9yeSwgaXMgcGVyZm9ybWVkIHVzaW5nCQkjCisjIF9tZW1fd3JpdGUoKSAiY2FsbG91dCIgcm91dGluZXMgdGhhdCBtYXkgcmV0dXJuIGEgZmFpbGluZyByZXN1bHQuCSMKKyMgSW4gdGhpcyBzcGVjaWFsIGNhc2UsIHRoZSBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIGZhY2Nfb3V0KCkJIworIyB3aGljaCBjcmVhdGVzIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IFNOQU4JIworIyBzdGFjayBmcmFtZS4JCQkJCQkJCSMKKyMJRm9yIHRoZSBjYXNlIG9mIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24sCSMKKyMgaWYgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzIC0oKSBvciAoKSssIHRoZW4gdGhlIGFkZHJlc3MJIworIyByZWdpc3RlciBtdXN0IGdldCB1cGRhdGVkIGJ5IGNhbGxpbmcgX2NhbGNfZWFfZm91dCgpLiBJZiB0aGUgPGVhPgkjCisjIHdhcyAtKGE3KSBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhlbiB0aGUgZXhjZXB0aW9uIGZyYW1lIGN1cnJlbnRseQkjCisjIG9uIHRoZSBzeXN0ZW0gc3RhY2sgbXVzdCBiZSBjYXJlZnVsbHkgbW92ZWQgImRvd24iIHRvIG1ha2Ugcm9vbQkjCisjIGZvciB0aGUgb3BlcmFuZCBiZWluZyBtb3ZlZC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9zbmFuCitfZnBzcF9zbmFuOgorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMTMsJWQwCQkJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZzbmFuX291dAkJIyBmbW92ZSBvdXQKKworCisjIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCisjIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSBpbmZpbml0eSBvcgorIyBkZW5vcm0gb3BlcmFuZCBpbiB0aGUgc2dsIG9yIGRibCBmb3JtYXQuIE5BTnMgYWxzbyBiZWNvbWUgc2tld2VkIGFuZCBtdXN0IGJlCisjIGZpeGVkIGhlcmUuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKK2ZzbmFuX2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisJYnJhLmwJCV9yZWFsX3NuYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIG1lbW9yeSBvbiBlbmFibGVkCisjIHNuYW4gZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KKyMgdGhlIHVzZXIgc25hbiBoYW5kbGVyLgorIworIyBieXRlLCB3b3JkLCBsb25nLCBhbmQgcGFja2VkIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCisjIHRocm91Z2ggaGVyZS4gc2luY2UgcGFja2VkIGZvcm1hdCBvcGVyYXRpb25zIGFscmVhZHkgd2VyZSBoYW5kbGVkIGJ5CisjIGZwc3BfdW5zdXBwKCksIHRoZW4gd2UgbmVlZCB0byBkbyBub3RoaW5nIGVsc2UgZm9yIHRoZW0gaGVyZS4KKyMgZm9yIGJ5dGUsIHdvcmQsIGFuZCBsb25nLCB3ZSBzaW1wbHkgbmVlZCB0byB0ZXN0IHRoZSBzaWduIG9mIHRoZSBzcmMKKyMgb3BlcmFuZCBhbmQgc2F2ZSB0aGUgYXBwcm9wcmlhdGUgbWluaW11bSBvciBtYXhpbXVtIGludGVnZXIgdmFsdWUKKyMgdG8gdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGFzIHBvaW50ZWQgdG8gYnkgdGhlIHN0YWNrZWQgZWZmZWN0aXZlIGFkZHJlc3MuCisjCitmc25hbl9vdXQ6CisKKwliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBleHRyYWN0IGRzdCBmb3JtYXQgZmllbGQKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCA8ZWE+IG1vZGUscmVnCisJbW92LncJCSh0Ymxfc25hbi5iLCVwYywlZDAudyoyKSwlYTAKKwlqbXAJCSh0Ymxfc25hbi5iLCVwYywlYTApCisKK3RibF9zbmFuOgorCXNob3J0CQlmc25hbl9vdXRfbCAtIHRibF9zbmFuICMgbG9uZyB3b3JkIGludGVnZXIKKwlzaG9ydAkJZnNuYW5fb3V0X3MgLSB0Ymxfc25hbiAjIHNnbCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJZnNuYW5fb3V0X3ggLSB0Ymxfc25hbiAjIGV4dCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJdGJsX3NuYW4gICAgLSB0Ymxfc25hbiAjIHBhY2tlZCBuZWVkcyBubyBoZWxwCisJc2hvcnQJCWZzbmFuX291dF93IC0gdGJsX3NuYW4gIyB3b3JkIGludGVnZXIKKwlzaG9ydAkJZnNuYW5fb3V0X2QgLSB0Ymxfc25hbiAjIGRibCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJZnNuYW5fb3V0X2IgLSB0Ymxfc25hbiAjIGJ5dGUgaW50ZWdlcgorCXNob3J0CQl0Ymxfc25hbiAgICAtIHRibF9zbmFuICMgcGFja2VkIG5lZWRzIG5vIGhlbHAKKworZnNuYW5fb3V0X2I6CisJbW92LmIJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgYnl0ZSBvZiBTTkFOCisJYnNldAkJJjYsJWQwCQkJIyBzZXQgU05BTiBiaXQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmc25hbl9vdXRfYl9kbgkJIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKK2ZzbmFuX291dF9iX2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19iCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZzbmFuX2V4aXQKKworZnNuYW5fb3V0X3c6CisJbW92LncJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgd29yZCBvZiBTTkFOCisJYnNldAkJJjE0LCVkMAkJCSMgc2V0IFNOQU4gYml0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X3dfZG4JCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX3dvcmQJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfd19kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfdwkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF9sOgorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIGxvbmd3b3JkIG9mIFNOQU4KKwlic2V0CQkmMzAsJWQwCQkJIyBzZXQgU05BTiBiaXQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmc25hbl9vdXRfbF9kbgkJIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKK2ZzbmFuX291dF9sX2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZzbmFuX2V4aXQKKworZnNuYW5fb3V0X3M6CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X2RfZG4JCSMgeWVzCisJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQwCQkjIGtlZXAgc2lnbgorCW9yaS5sCQkmMHg3ZmMwMDAwMCwlZDAJCSMgaW5zZXJ0IG5ldyBleHBvbmVudCxTTkFOIGJpdAorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIG1hbnRpc3NhCisJbHNyLmwJCSYweDgsJWQxCQkjIHNoaWZ0IG1hbnRpc3NhIGZvciBzZ2wKKwlvci5sCQklZDEsJWQwCQkJIyBjcmVhdGUgc2dsIFNOQU4KKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKK2ZzbmFuX291dF9kX2RuOgorCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KKwlvcmkubAkJJjB4N2ZjMDAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKKwltb3YubAkJJWQxLC0oJXNwKQorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIG1hbnRpc3NhCisJbHNyLmwJCSYweDgsJWQxCQkjIHNoaWZ0IG1hbnRpc3NhIGZvciBzZ2wKKwlvci5sCQklZDEsJWQwCQkJIyBjcmVhdGUgc2dsIFNOQU4KKwltb3YubAkJKCVzcCkrLCVkMQorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZzbmFuX2V4aXQKKworZnNuYW5fb3V0X2Q6CisJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQwCQkjIGtlZXAgc2lnbgorCW9yaS5sCQkmMHg3ZmY4MDAwMCwlZDAJCSMgaW5zZXJ0IG5ldyBleHBvbmVudCxTTkFOIGJpdAorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIGhpIG1hbnRpc3NhCisJbW92LmwJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBzdG9yZSB0byB0ZW1wIHNwYWNlCisJbW92LmwJCSYxMSwlZDAJCQkjIGxvYWQgc2hpZnQgYW10CisJbHNyLmwJCSVkMCwlZDEKKwlvci5sCQklZDEsRlBfU0NSMF9FWCglYTYpCSMgY3JlYXRlIGRibCBoaQorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIGhpIG1hbnRpc3NhCisJYW5kaS5sCQkmMHgwMDAwMDdmZiwlZDEKKwlyb3IubAkJJWQwLCVkMQorCW1vdi5sCQklZDEsRlBfU0NSMF9ISSglYTYpCSMgc3RvcmUgdG8gdGVtcCBzcGFjZQorCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSwlZDEJIyBsb2FkIGxvIG1hbnRpc3NhCisJbHNyLmwJCSVkMCwlZDEKKwlvci5sCQklZDEsRlBfU0NSMF9ISSglYTYpCSMgY3JlYXRlIGRibCBsbworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCW1vdnEubAkJJjB4OCwlZDAJCSMgcGFzczogc2l6ZSBvZiA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKKworIyBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uLCBpZiB0aGUgYWRkcmVzc2luZyBtb2RlIGlzIHByZS1kZWNyZW1lbnQgb3IKKyMgcG9zdC1pbmNyZW1lbnQsIHRoZW4gdGhlIGFkZHJlc3MgcmVnaXN0ZXIgZGlkIG5vdCBnZXQgdXBkYXRlZC4KKyMgaW4gYWRkaXRpb24sIGZvciBwcmUtZGVjcmVtZW50LCB0aGUgc3RhY2tlZCA8ZWE+IGlzIGluY29ycmVjdC4KK2ZzbmFuX291dF94OgorCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgc3BlY2lhbCBjYXNlIGZsYWcKKworCW1vdi53CQlGUF9TUkNfRVgoJWE2KSxGUF9TQ1IwX0VYKCVhNikKKwljbHIudwkJMitGUF9TQ1IwKCVhNikKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQwCisJYnNldAkJJjMwLCVkMAorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCUZQX1NSQ19MTyglYTYpLEZQX1NDUjBfTE8oJWE2KQorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHN1cGVydmlzb3IgbW9kZSBleGNlcHRpb24/CisJYm5lLmIJCWZzbmFuX291dF94X3MJCSMgeWVzCisKKwltb3YubAkJJXVzcCwlYTAJCSMgZmV0Y2ggdXNlciBzdGFjayBwb2ludGVyCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrIGZvciBjYWxjX2VhKCkKKwltb3YubAkJKCVhNiksRVhDX0E2KCVhNikKKworCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZpbmQgdGhlIGNvcnJlY3QgZWEsdXBkYXRlIEFuCisJbW92LmwJCSVhMCwlYTEKKwltb3YubAkJJWEwLEVYQ19FQSglYTYpCQkjIHN0YWNrIGNvcnJlY3QgPGVhPgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAorCW1vdi5sCQklYTAsJXVzcAkJIyByZXN0b3JlIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQorCitmc25hbl9vdXRfeF9zYXZlOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJbW92cS5sCQkmMHhjLCVkMAkJIyBwYXNzOiBzaXplIG9mIGV4dGVuZGVkCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF94CQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKKworZnNuYW5fb3V0X3hfczoKKwltb3YubAkJKCVhNiksRVhDX0E2KCVhNikKKworCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZpbmQgdGhlIGNvcnJlY3QgZWEsdXBkYXRlIEFuCisJbW92LmwJCSVhMCwlYTEKKwltb3YubAkJJWEwLEVYQ19FQSglYTYpCQkjIHN0YWNrIGNvcnJlY3QgPGVhPgorCisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyBpcyA8ZWE+IG1vZGUgLShhNyk/CisJYm5lLmIJCWZzbmFuX291dF94X3NhdmUJIyBubworCisjIHRoZSBvcGVyYXRpb24gd2FzICJmbW92ZS54IFNOQU4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19QQysweDIoJXNwKSxMT0NBTF9TSVpFK0VYQ19QQysweDItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TQ1IwX0hJKCVzcCksTE9DQUxfU0laRStFWENfUEMrMHgyKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TQ1IwX0xPKCVzcCksTE9DQUxfU0laRStFWENfRUEoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCWJyYS5sCQlfcmVhbF9zbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfaW5leCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBJbmV4YWN0IGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBJbmV4YWN0IGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlzbW92Y3IoKSAtIGVtdWxhdGUgYW4gImZtb3ZjciIgaW5zdHJ1Y3Rpb24JCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBpbmV4YWN0IGhhbmRsZXIJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBJbmV4YWN0IGV4Y2VwdGlvbiBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIEluZXhhY3QgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsCSMKKyMgaXMgdG8gZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9pbmV4KCkuIEJ1dCwgb24gdGhlIDA2MCwJIworIyBmb3Igb3BjbGFzcyB6ZXJvIGFuZCB0d28gaW5zdHJ1Y3Rpb24gdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIworIyBoYXJkd2FyZSBkb2Vzbid0IHN0b3JlIHRoZSBjb3JyZWN0IHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gRlAJIworIyByZWdpc3RlciBhcyBkaWQgdGhlICcwNDAgYW5kICc4ODEvMi4gVGhpcyBoYW5kbGVyIG11c3QgZW11bGF0ZSB0aGUJIworIyBpbnN0cnVjdGlvbiBpbiBvcmRlciB0byBnZXQgdGhpcyB2YWx1ZSBhbmQgdGhlbiBzdG9yZSBpdCB0byB0aGUJIworIyBjb3JyZWN0IHJlZ2lzdGVyIGJlZm9yZSBjYWxsaW5nIF9yZWFsX2luZXgoKS4JCQkJIworIwlGb3Igb3BjbGFzcyAzIGluc3RydWN0aW9ucywgdGhlIDA2MCBkb2Vzbid0IHN0b3JlIHRoZSBkZWZhdWx0CSMKKyMgaW5leGFjdCByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkjCisjIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJ5IGNhbGxpbmcgZm91dCgpIGJlZm9yZSBmaW5hbGx5CSMKKyMgZXhpdGluZyB0aHJvdWdoIF9yZWFsX2luZXgoKS4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9pbmV4CitfZnBzcF9pbmV4OgorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMTMsJWQwCQkJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZpbmV4X291dAkJIyBmbW92ZSBvdXQKKworCisjIHRoZSBoYXJkd2FyZSwgZm9yICJmYWJzIiBhbmQgImZuZWciIHcvIGEgbG9uZyBzb3VyY2UgZm9ybWF0LCBwdXRzIHRoZQorIyBsb25nd29yZCBpbnRlZ2VyIGRpcmVjdGx5IGludG8gdGhlIHVwcGVyIGxvbmd3b3JkIG9mIHRoZSBtYW50aXNzYSBhbG9uZworIyB3LyBhbiBleHBvbmVudCB2YWx1ZSBvZiAweDQwMWUuIHdlIGNvbnZlcnQgdGhpcyB0byBleHRlbmRlZCBwcmVjaXNpb24gaGVyZS4KKwliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBmZXRjaCBpbnN0ciBzaXplCisJYm5lLmIJCWZpbmV4X2NvbnQJCSMgaW5zdHIgc2l6ZSBpcyBub3QgbG9uZworCWNtcGkudwkJRlBfU1JDX0VYKCVhNiksJjB4NDAxZQkjIGlzIGV4cG9uZW50IDB4NDAxZT8KKwlibmUuYgkJZmluZXhfY29udAkJIyBubworCWZtb3YubAkJJjB4MCwlZnBjcgorCWZtb3YubAkJRlBfU1JDX0hJKCVhNiksJWZwMAkjIGxvYWQgaW50ZWdlciBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikJIyBzdG9yZSBpbnRlZ2VyIGFzIGV4dGVuZGVkIHByZWNpc2lvbgorCW1vdi53CQkmMHhlMDAxLDB4MitGUF9TUkMoJWE2KQorCitmaW5leF9jb250OgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCisjIEhlcmUsIHdlIHplcm8gdGhlIGNjb2RlIGFuZCBleGNlcHRpb24gYnl0ZSBmaWVsZCBzaW5jZSB3ZSdyZSBnb2luZyB0bworIyBlbXVsYXRlIHRoZSB3aG9sZSBpbnN0cnVjdGlvbi4gTm90aWNlLCB0aG91Z2gsIHRoYXQgd2UgZG9uJ3Qga2lsbCB0aGUKKyMgSU5FWDEgYml0LiBUaGlzIGlzIGJlY2F1c2UgYSBwYWNrZWQgb3AgaGFzIGxvbmcgc2luY2UgYmVlbiBjb252ZXJ0ZWQKKyMgdG8gZXh0ZW5kZWQgYmVmb3JlIGFycml2aW5nIGhlcmUuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byByZXRhaW4gdGhlCisjIElORVgxIGJpdCBmcm9tIHdoZW4gdGhlIG9wZXJhbmQgd2FzIGZpcnN0IGNvbnZlcnRlZC4KKwlhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwliZmV4dHUJCUVYQ19FWFRXT1JEKCVhNil7JjA6JjZ9LCVkMSAjIGV4dHJhY3QgdXBwZXIgNiBvZiBjbWRyZWcKKwljbXBpLmIJCSVkMSwmMHgxNwkJIyBpcyBvcCBhbiBmbW92ZWNyPworCWJlcS53CQlmaW5leF9mbW92Y3IJCSMgeWVzCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCisKKyMgYml0cyBmb3VyIGFuZCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZSB0aGUgbW9uYWRpYyBhbmQgZHlhZGljCisjIG9wZXJhdGlvbnMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3BfaW5leCgpLiByZW1lbWJlciB0aGF0IGZjbXAgYW5kIGZ0c3QKKyMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLCBidXQgZnNpbmNvcyB3aWxsLgorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZpbmV4X2V4dHJhY3QJCSMgbW9uYWRpYworCisJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBhbiBmc2luY29zPworCWJuZS5iCQlmaW5leF9leHRyYWN0CQkjIHllcworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmaW5leF9vcDJfZG9uZQkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCitmaW5leF9vcDJfZG9uZToKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCisKK2ZpbmV4X2V4dHJhY3Q6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjIHRoZSBvcGVyYXRpb24gaGFzIGJlZW4gZW11bGF0ZWQuIHRoZSByZXN1bHQgaXMgaW4gZnAwLgorZmluZXhfc2F2ZToKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCisJYnNyLmwJCXN0b3JlX2ZwcmVnCisKK2ZpbmV4X2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisJYnJhLmwJCV9yZWFsX2luZXgKKworZmluZXhfZm1vdmNyOgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYyxtb2RlCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkubAkJJjB4MDAwMDAwN2YsJWQxCQkjIHBhc3Mgcm9tIG9mZnNldAorCWJzci5sCQlzbW92Y3IKKwlicmEuYgkJZmluZXhfc2F2ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKKyMgaW5leGFjdCBleGNlcHRpb25zLiB3ZSBkbyB0aGlzIGhlcmUgYmVmb3JlIHBhc3NpbmcgY29udHJvbCB0bworIyB0aGUgdXNlciBpbmV4YWN0IGhhbmRsZXIuCisjCisjIGJ5dGUsIHdvcmQsIGFuZCBsb25nIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCisjIHRocm91Z2ggaGVyZS4gc28gY2FuIGRvdWJsZSBhbmQgc2luZ2xlIHByZWNpc2lvbi4KKyMgYWx0aG91Z2ggcGFja2VkIG9wY2xhc3MgdGhyZWUgb3BlcmF0aW9ucyBjYW4gdGFrZSBpbmV4YWN0CisjIGV4Y2VwdGlvbnMsIHRoZXkgd29uJ3QgcGFzcyB0aHJvdWdoIGhlcmUgc2luY2UgdGhleSBhcmUgY2F1Z2h0CisjIGZpcnN0IGJ5IHRoZSB1bnN1cHBvcnRlZCBkYXRhIGZvcm1hdCBleGNlcHRpb24gaGFuZGxlci4gdGhhdCBoYW5kbGVyCisjIHNlbmRzIHRoZW0gZGlyZWN0bHkgdG8gX3JlYWxfaW5leCgpIGlmIG5lY2Vzc2FyeS4KKyMKK2ZpbmV4X291dDoKKworCW1vdi5iCQkmTk9STSxTVEFHKCVhNikJCSMgc3JjIGlzIGEgTk9STQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjLG1vZGUKKworCWFuZGkubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCWJzci5sCQlmb3V0CQkJIyBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCWJyYS5iCQlmaW5leF9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfZHooKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgRFogZXhjZXB0aW9uLgkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZwkjCisjCXRoZSBGUCBEWiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQgZnJvbSBtZW1vcnkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IGZzYXZlIG9wZXJhbmQJCQkJIworIwlfcmVhbF9keigpIC0gImNhbGxvdXQiIGV4aXQgcG9pbnQgZnJvbSBGUCBEWiBoYW5kbGVyCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIERaIGV4Y2VwdGlvbiBzdGFjay4JCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kLgkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgRFogZXhjZXB0aW9uIHN0YWNrLgkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc291cmNlIG9wZXJhbmQuCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRFogZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsIGlzIHRvCSMKKyMgZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9keigpLiBCdXQsIG9uIHRoZSAwNjAsIHdoZW4gdGhlCSMKKyMgZXhjZXB0aW9uIGlzIHRha2VuLCB0aGUgaW5wdXQgb3BlcmFuZCBpbiB0aGUgZnNhdmUgc3RhdGUgZnJhbWUgbWF5CSMKKyMgYmUgaW5jb3JyZWN0IGZvciBzb21lIGNhc2VzIGFuZCBuZWVkIHRvIGJlIGFkanVzdGVkLiBTbywgdGhpcyBwYWNrYWdlCSMKKyMgYWRqdXN0cyB0aGUgb3BlcmFuZCB1c2luZyBmaXhfc2tld2VkX29wcygpIGFuZCB0aGVuIGJyYW5jaGVzIHRvCSMKKyMgX3JlYWxfZHooKS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX2R6CitfZnBzcF9kejoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KKyMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIHplcm8KKyMgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCitmZHpfZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfZHoKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9mbGluZSgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciAiTGluZSBGIGVtdWxhdG9yIgkjCisjCQkgICAgICAgZXhjZXB0aW9uIHdoZW4gdGhlICJyZWR1Y2VkIiB2ZXJzaW9uIG9mIHRoZQkjCisjCQkgICAgICAgRlBTUCBpcyBpbXBsZW1lbnRlZCB0aGF0IGRvZXMgbm90IGVtdWxhdGUJIworIwkJICAgICAgIEZQIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb25zLgkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgYQkjCisjCSJMaW5lIEYgRW11bGF0b3IiIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtIGludGVncmF0aW5nCSMKKyMJdGhlIHJlZHVjZWQgdmVyc2lvbiBvZiAwNjBGUFNQLgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX3JlYWxfZnB1X2Rpc2FibGVkKCkgLSBIYW5kbGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9ucwkJIworIwlfcmVhbF9mbGluZSgpIC0gSGFuZGxlIGFsbCBvdGhlciBjYXNlcyAodHJlYXRlZCBlcXVhbGx5KQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgYSAiTGluZSBGIEVtdWxhdG9yIiBleGNlcHRpb24JIworIwkgIHN0YWNrIGZyYW1lLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkLgkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlXaGVuIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uIG9jY3VycyBpbiBhIHN5c3RlbSB3aGVyZQkjCisjICJGUFUgVW5pbXBsZW1lbnRlZCIgaW5zdHJ1Y3Rpb25zIHdpbGwgbm90IGJlIGVtdWxhdGVkLCB0aGUgZXhjZXB0aW9uCSMKKyMgY2FuIG9jY3VyIGJlY2F1c2UgdGhlbiBGUFUgaXMgZGlzYWJsZWQgb3IgdGhlIGluc3RydWN0aW9uIGlzIHRvIGJlCSMKKyMgY2xhc3NpZmVkIGFzICJMaW5lIEYiLiBUaGlzIG1vZHVsZSBkZXRlcm1pbmVzIHdoaWNoIGNhc2UgZXhpc3RzIGFuZAkjCisjIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSAiY2FsbG91dCIuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9mbGluZQorX2Zwc3BfZmxpbmU6CisKKyMgY2hlY2sgdG8gc2VlIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQuIGlmIHNvLCBqdW1wIHRvIHRoZSBPUyBlbnRyeQorIyBwb2ludCBmb3IgdGhhdCBjb25kaXRpb24uCisJY21waS53CQkweDYoJXNwKSwmMHg0MDJjCisJYmVxLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorCisJYnJhLmwJCV9yZWFsX2ZsaW5lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2RjYWxjX2VhKCk6IGNhbGMgY29ycmVjdCA8ZWE+IGZyb20gPGVhPiBzdGFja2VkIG9uIGV4Y2VwdGlvbgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlpbmNfYXJlZygpIC0gaW5jcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIJCQkjCisjCWRlY19hcmVnKCkgLSBkZWNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlcgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFkanVzdCA8ZWE+IGJ5CQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjICJEdW1teSIgQ0FMQ3VsYXRlIEVmZmVjdGl2ZSBBZGRyZXNzOgkJCQkJIworIwlUaGUgc3RhY2tlZCA8ZWE+IGZvciBGUCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucyBhbmQgb3BjbGFzcwkjCisjCXR3byBwYWNrZWQgaW5zdHJ1Y3Rpb25zIGlzIGNvcnJlY3Qgd2l0aCB0aGUgZXhjZXB0aW9uIG9mLi4uCSMKKyMJCQkJCQkJCQkjCisjCTEpIC0oQW4pICAgOiBUaGUgcmVnaXN0ZXIgaXMgbm90IHVwZGF0ZWQgcmVnYXJkbGVzcyBvZiBzaXplLgkjCisjCQkgICAgIEFsc28sIGZvciBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHBhY2tlZCwgdGhlCSMKKyMJCSAgICAgc3RhY2tlZCA8ZWE+IHZhbHVlIGlzIDggYnl0ZXMgdG9vIGJpZwkJIworIwkyKSAoQW4pKyAgIDogVGhlIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLgkJCSMKKyMJMykgIzxkYXRhPiA6IFRoZSB1cHBlciBsb25nd29yZCBvZiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgaXMJIworIwkJICAgICBzdGFja2VkIGIsdyxsIGFuZCBzIHNpemVzIGFyZSBjb21wbGV0ZWx5IHN0YWNrZWQuCSMKKyMJCSAgICAgZCx4LCBhbmQgcCBhcmUgbm90LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZGNhbGNfZWEKK19kY2FsY19lYToKKwltb3YubAkJJWQwLCAlYTAJCSMgbW92ZSAjIGJ5dGVzIHRvICVhMAorCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCAlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAorCW1vdi5sCQklZDAsICVkMQkJIyBtYWtlIGEgY29weQorCisJYW5kaS53CQkmMHgzOCwgJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywgJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAorCisJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CisJYmVxLmIJCWRjZWFfcGkJCQkjIHllcworCisJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CisJYmVxLmIJCWRjZWFfcGQJCQkjIHllcworCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG1vZGUscmVnCisJY21waS5iCQklZDAsJjB4M2MJCSMgaXMgbW9kZSAjPGRhdGE+PworCisJYmVxLmIJCWRjZWFfaW1tCQkjIHllcworCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyByZXR1cm4gPGVhPgorCXJ0cworCisjIG5lZWQgdG8gc2V0IGltbWVkaWF0ZSBkYXRhIGZsYWcgaGVyZSBzaW5jZSB3ZSdsbCBuZWVkIHRvIGRvCisjIGFuIGltZW1fcmVhZCB0byBmZXRjaCB0aGlzIGxhdGVyLgorZGNlYV9pbW06CisJbW92LmIJCSZpbW1lZF9mbGcsU1BDT05EX0ZMRyglYTYpCisJbGVhCQkoW1VTRVJfRlBJQVIsJWE2XSwweDQpLCVhMCAjIG5vOyByZXR1cm4gPGVhPgorCXJ0cworCisjIGhlcmUsIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5LiBob3dldmVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUKKyMgYWRkcmVzcyByZWdpc3Rlci4uLgorZGNlYV9waToKKwltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyBhbXQgdG8gaW5jIGJ5CisJYnNyLmwJCWluY19hcmVnCQkjIGluYyBhZGRyIHJlZ2lzdGVyCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJcnRzCisKKyMgdGhlIDxlYT4gaXMgc3RhY2tlZCBjb3JyZWN0bHkgZm9yIGFsbCBidXQgZXh0ZW5kZWQgYW5kIHBhY2tlZCB3aGljaAorIyB0aGUgPGVhPnMgYXJlIDggYnl0ZXMgdG9vIGxhcmdlLgorIyBpdCB3b3VsZCBtYWtlIG5vIHNlbnNlIHRvIGhhdmUgYSBwcmUtZGVjcmVtZW50IHRvIGE3IGluIHN1cGVydmlzb3IKKyMgbW9kZSBzbyB3ZSBkb24ndCBldmVuIHdvcnJ5IGFib3V0IHRoaXMgdHJpY2t5IGNhc2UgaGVyZSA6ICkKK2RjZWFfcGQ6CisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgYW10IHRvIGRlYyBieQorCWJzci5sCQlkZWNfYXJlZwkJIyBkZWMgYWRkciByZWdpc3RlcgorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCisJY21waS5iCQklZDAsJjB4YwkJIyBpcyBvcHNpemUgZXh0IG9yIHBhY2tlZD8KKwliZXEuYgkJZGNlYV9wZDIJCSMgeWVzCisJcnRzCitkY2VhX3BkMjoKKwlzdWIubAkJJjB4OCwlYTAJCSMgY29ycmVjdCA8ZWE+CisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBwdXQgY29ycmVjdCA8ZWE+IG9uIHN0YWNrCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWFfZm91dCgpOiBjYWxjdWxhdGUgY29ycmVjdCBzdGFja2VkIDxlYT4gZm9yIGV4dGVuZGVkCSMKKyMJCQkgYW5kIHBhY2tlZCBkYXRhIG9wY2xhc3MgMyBvcGVyYXRpb25zLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSByZXR1cm4gY29ycmVjdCBlZmZlY3RpdmUgYWRkcmVzcwkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGb3Igb3BjbGFzcyAzIGV4dGVuZGVkIGFuZCBwYWNrZWQgZGF0YSBvcGVyYXRpb25zLCB0aGUgPGVhPgkjCisjIHN0YWNrZWQgZm9yIHRoZSBleGNlcHRpb24gaXMgaW5jb3JyZWN0IGZvciAtKGFuKSBhbmQgKGFuKSsgYWRkcmVzc2luZwkjCisjIG1vZGVzLiBBbHNvLCB3aGlsZSB3ZSdyZSBhdCBpdCwgdGhlIGluZGV4IHJlZ2lzdGVyIGl0c2VsZiBtdXN0IGdldAkjCisjIHVwZGF0ZWQuCQkJCQkJCQkjCisjCVNvLCBmb3IgLShhbiksIHdlIG11c3Qgc3VidHJhY3QgOCBvZmYgb2YgdGhlIHN0YWNrZWQgPGVhPiB2YWx1ZQkjCisjIGFuZCByZXR1cm4gdGhhdCB2YWx1ZSBhcyB0aGUgY29ycmVjdCA8ZWE+IGFuZCBzdG9yZSB0aGF0IHZhbHVlIGluIEFuLgkjCisjIEZvciAoYW4pKywgdGhlIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0IGJ1dCB3ZSBtdXN0IGFkanVzdCBBbiBieSArMTIuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyBjYWxjX2VhIGlzIGN1cnJlbnRseSB1c2VkIHRvIHJldHJpZXZlIHRoZSBjb3JyZWN0IDxlYT4KKyMgZm9yIGZtb3ZlIG91dHMgb2YgdHlwZSBleHRlbmRlZCBhbmQgcGFja2VkLgorCWdsb2JhbAkJX2NhbGNfZWFfZm91dAorX2NhbGNfZWFfZm91dDoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4MzgsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCisKKwljbXBpLmIJCSVkMCwmMHgxOAkJIyBpcyBtb2RlIChBbikrID8KKwliZXEuYgkJY2VhZl9waQkJCSMgeWVzCisKKwljbXBpLmIJCSVkMCwmMHgyMAkJIyBpcyBtb2RlIC0oQW4pID8KKwliZXEudwkJY2VhZl9wZAkJCSMgeWVzCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJcnRzCisKKyMgKEFuKSsgOiBleHRlbmRlZCBhbmQgcGFja2VkIGZtb3ZlIG91dAorIwk6IHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisjCTogIkFuIiBub3QgdXBkYXRlZAorY2VhZl9waToKKwltb3YudwkJKHRibF9jZWFmX3BpLmIsJXBjLCVkMS53KjIpLCVkMQorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAKKwlqbXAJCSh0YmxfY2VhZl9waS5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9jZWFmX3BpOgorCXNob3J0CQljZWFmX3BpMCAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGkxIC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTIgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpMyAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk0IC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTUgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNiAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk3IC0gdGJsX2NlYWZfcGkKKworY2VhZl9waTA6CisJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweDgoJWE2KQorCXJ0cworY2VhZl9waTE6CisJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweGMoJWE2KQorCXJ0cworY2VhZl9waTI6CisJYWRkLmwJCSYweGMsJWEyCisJcnRzCitjZWFmX3BpMzoKKwlhZGQubAkJJjB4YywlYTMKKwlydHMKK2NlYWZfcGk0OgorCWFkZC5sCQkmMHhjLCVhNAorCXJ0cworY2VhZl9waTU6CisJYWRkLmwJCSYweGMsJWE1CisJcnRzCitjZWFmX3BpNjoKKwlhZGRpLmwJCSYweGMsRVhDX0E2KCVhNikKKwlydHMKK2NlYWZfcGk3OgorCW1vdi5iCQkmbWlhN19mbGcsU1BDT05EX0ZMRyglYTYpCisJYWRkaS5sCQkmMHhjLEVYQ19BNyglYTYpCisJcnRzCisKKyMgLShBbikgOiBleHRlbmRlZCBhbmQgcGFja2VkIGZtb3ZlIG91dAorIwk6IHN0YWNrZWQgPGVhPiA9IGFjdHVhbCA8ZWE+ICsgOAorIwk6ICJBbiIgbm90IHVwZGF0ZWQKK2NlYWZfcGQ6CisJbW92LncJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoyKSwlZDEKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCisJc3ViLmwJCSYweDgsJWEwCisJc3ViLmwJCSYweDgsRVhDX0VBKCVhNikKKwlqbXAJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9jZWFmX3BkOgorCXNob3J0CQljZWFmX3BkMCAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQxIC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDIgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkMyAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ0IC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDUgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNiAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ3IC0gdGJsX2NlYWZfcGQKKworY2VhZl9wZDA6CisJbW92LmwJCSVhMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2NlYWZfcGQxOgorCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitjZWFmX3BkMjoKKwltb3YubAkJJWEwLCVhMgorCXJ0cworY2VhZl9wZDM6CisJbW92LmwJCSVhMCwlYTMKKwlydHMKK2NlYWZfcGQ0OgorCW1vdi5sCQklYTAsJWE0CisJcnRzCitjZWFmX3BkNToKKwltb3YubAkJJWEwLCVhNQorCXJ0cworY2VhZl9wZDY6CisJbW92LmwJCSVhMCxFWENfQTYoJWE2KQorCXJ0cworY2VhZl9wZDc6CisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQorCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpCisJcnRzCisKKyMKKyMgVGhpcyB0YWJsZSBob2xkcyB0aGUgb2Zmc2V0cyBvZiB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBlYWNoIGluZGl2aWR1YWwKKyMgbWF0aCBvcGVyYXRpb24gcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhpcyB0YWJsZS4gSW5jbHVkZWQgYXJlCisjIHJvdXRpbmVzIGxpa2UgZmFkZC9mbXVsL2ZhYnMuIFRoZSB0cmFuc2NlbmRlbnRhbHMgQVJFIE5PVC4gVGhpcyBpcyBiZWNhdXNlCisjIHRoaXMgdGFibGUgaXMgZm9yIHRoZSB2ZXJzaW9uIGlmIHRoZSAwNjBGUFNQIHdpdGhvdXQgdHJhbnNjZW5kZW50YWxzLgorIyBUaGUgbG9jYXRpb24gd2l0aGluIHRoZSB0YWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBleHRlbnNpb24gYml0cyBvZiB0aGUKKyMgb3BlcmF0aW9uIGxvbmd3b3JkLgorIworCisJc3diZWcJCSYxMDkKK3RibF91bnN1cHA6CisJbG9uZwkJZmluCQktIHRibF91bnN1cHAJIyAwMDogZm1vdmUKKwlsb25nCQlmaW50CQktIHRibF91bnN1cHAJIyAwMTogZmludAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDI6IGZzaW5oCisJbG9uZwkJZmludHJ6CQktIHRibF91bnN1cHAJIyAwMzogZmludHJ6CisJbG9uZwkJZnNxcnQJCS0gdGJsX3Vuc3VwcAkjIDA0OiBmc3FydAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwNjogZmxvZ25wMQorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwODogZmV0b3htMQorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDk6IGZ0YW5oCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwYTogZmF0YW4KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGM6IGZhc2luCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwZDogZmF0YW5oCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAwZTogZnNpbgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGY6IGZ0YW4KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDEwOiBmZXRveAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTE6IGZ0d290b3gKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDEyOiBmdGVudG94CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDE0OiBmbG9nbgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTU6IGZsb2cxMAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTY6IGZsb2cyCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmYWJzCQktIHRibF91bnN1cHAJIyAxODogZmFicworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMTk6IGZjb3NoCisJbG9uZwkJZm5lZwkJLSB0YmxfdW5zdXBwCSMgMWE6IGZuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWM6IGZhY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxZDogZmNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWU6IGZnZXRleHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDFmOiBmZ2V0bWFuCisJbG9uZwkJZmRpdgkJLSB0YmxfdW5zdXBwCSMgMjA6IGZkaXYKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDIxOiBmbW9kCisJbG9uZwkJZmFkZAkJLSB0YmxfdW5zdXBwCSMgMjI6IGZhZGQKKwlsb25nCQlmbXVsCQktIHRibF91bnN1cHAJIyAyMzogZm11bAorCWxvbmcJCWZzZ2xkaXYJCS0gdGJsX3Vuc3VwcAkjIDI0OiBmc2dsZGl2CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAyNTogZnJlbQorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMjY6IGZzY2FsZQorCWxvbmcJCWZzZ2xtdWwJCS0gdGJsX3Vuc3VwcAkjIDI3OiBmc2dsbXVsCisJbG9uZwkJZnN1YgkJLSB0YmxfdW5zdXBwCSMgMjg6IGZzdWIKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzA6IGZzaW5jb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDMxOiBmc2luY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAzMjogZnNpbmNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzM6IGZzaW5jb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDM0OiBmc2luY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAzNTogZnNpbmNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzY6IGZzaW5jb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDM3OiBmc2luY29zCisJbG9uZwkJZmNtcAkJLSB0YmxfdW5zdXBwCSMgMzg6IGZjbXAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZ0c3QJCS0gdGJsX3Vuc3VwcAkjIDNhOiBmdHN0CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzaW4JCS0gdGJsX3Vuc3VwcAkjIDQwOiBmc21vdmUKKwlsb25nCQlmc3NxcnQJCS0gdGJsX3Vuc3VwcAkjIDQxOiBmc3NxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRpbgkJLSB0YmxfdW5zdXBwCSMgNDQ6IGZkbW92ZQorCWxvbmcJCWZkc3FydAkJLSB0YmxfdW5zdXBwCSMgNDU6IGZkc3FydAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzYWJzCQktIHRibF91bnN1cHAJIyA1ODogZnNhYnMKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzbmVnCQktIHRibF91bnN1cHAJIyA1YTogZnNuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkYWJzCQktIHRibF91bnN1cHAJIyA1YzogZmRhYnMKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkbmVnCQktIHRibF91bnN1cHAJIyA1ZTogZmRuZWcKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzZGl2CQktIHRibF91bnN1cHAJIyA2MDogZnNkaXYKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZzYWRkCQktIHRibF91bnN1cHAJIyA2MjogZnNhZGQKKwlsb25nCQlmc211bAkJLSB0YmxfdW5zdXBwCSMgNjM6IGZzbXVsCisJbG9uZwkJZmRkaXYJCS0gdGJsX3Vuc3VwcAkjIDY0OiBmZGRpdgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRhZGQJCS0gdGJsX3Vuc3VwcAkjIDY2OiBmZGFkZAorCWxvbmcJCWZkbXVsCQktIHRibF91bnN1cHAJIyA2NzogZmRtdWwKKwlsb25nCQlmc3N1YgkJLSB0YmxfdW5zdXBwCSMgNjg6IGZzc3ViCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmRzdWIJCS0gdGJsX3Vuc3VwcAkjIDZjOiBmZHN1YgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZCB0aGlzIGhlcmUgc28gbm9uLWZwIG1vZHVsZXMgY2FuIGNvbXBpbGUuCisjIChzbW92Y3IgaXMgY2FsbGVkIGZyb20gZnBzcF9pbmV4LikKKwlnbG9iYWwJCXNtb3Zjcgorc21vdmNyOgorCWJyYS5iCQlzbW92Y3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmbW92bV9keW5hbWljKCk6IGVtdWxhdGUgImZtb3ZtIiBkeW5hbWljIGluc3RydWN0aW9uCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBkYXRhIHJlZ2lzdGVyCQkJCSMKKyMJe2ksZCx9bWVtX3JlYWQoKSAtIGZldGNoIGRhdGEgZnJvbSBtZW1vcnkJCQkjCisjCV9tZW1fd3JpdGUoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5CQkJCSMKKyMJaWVhX2lhY2MoKSAtIGluc3RydWN0aW9uIG1lbW9yeSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJCSMKKyMJaWVhX2RhY2MoKSAtIGRhdGEgbWVtb3J5IGFjY2VzcyBlcnJvciBvY2N1cnJlZAkJCSMKKyMJcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBpbmRleCByZWdzIGlmIGFjY2VzcyBlcnJvciBvY2N1cnJlZAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBpbnN0ciBpcyAiZm1vdm0gRG4sLShBNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkJIworIwkJZDAgPSBzaXplIG9mIGR1bXAJCQkJCSMKKyMJCWQxID0gRG4JCQkJCQkJIworIwlFbHNlIGlmIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciwJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwlFbHNlIGlmIGRhdGEgYWNjZXNzIGVycm9yLAkJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwkJYTAgPSBhZGRyZXNzIG9mIGZhdWx0CQkJCQkjCisjCUVsc2UJCQkJCQkJCSMKKyMJCW5vbmUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSBlZmZlY3RpdmUgYWRkcmVzcyBtdXN0IGJlIGNhbGN1bGF0ZWQgc2luY2UgdGhpcyBpcyBlbnRlcmVkCSMKKyMgZnJvbSBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIgZXhjZXB0aW9uIGhhbmRsZXIuIFNvLCB3ZQkjCisjIGhhdmUgb3VyIG93biBmY2FsY19lYSgpIHJvdXRpbmUgaGVyZS4gSWYgYW4gYWNjZXNzIGVycm9yIGlzIGZsYWdnZWQJIworIyBieSBhIF97aSxkLH1tZW1fcmVhZCgpIGNhbGwsIHdlIG11c3QgZXhpdCB0aHJvdWdoIHRoZSBzcGVjaWFsCQkjCisjIGhhbmRsZXIuCQkJCQkJCQkjCisjCVRoZSBkYXRhIHJlZ2lzdGVyIGlzIGRldGVybWluZWQgYW5kIGl0cyB2YWx1ZSBsb2FkZWQgdG8gZ2V0IHRoZQkjCisjIHN0cmluZyBvZiBGUCByZWdpc3RlcnMgYWZmZWN0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvCSMKKyMgYSBsb29rdXAgdGFibGUgc3VjaCB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBieXRlcwkJIworIyBpbnZvbHZlZC4JCQkJCQkJCSMKKyMJSWYgdGhlIGluc3RydWN0aW9uIGlzICJmbW92bS54IDxlYT4sRG4iLCBhIF9tZW1fcmVhZCgpIGlzIHVzZWQJIworIyB0byByZWFkIGluIGFsbCBGUCB2YWx1ZXMuIEFnYWluLCBfbWVtX3JlYWQoKSBtYXkgZmFpbCBhbmQgcmVxdWlyZSBhCSMKKyMgc3BlY2lhbCBleGl0LgkJCQkJCQkJIworIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sPGVhPiIsIGEgX21lbV93cml0ZSgpIGlzIHVzZWQJIworIyB0byB3cml0ZSBhbGwgRlAgdmFsdWVzLiBfbWVtX3dyaXRlKCkgbWF5IGFsc28gZmFpbC4JCQkjCisjCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCBETiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUsCSMKKyMgdGhlbiB3ZSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGR1bXAgYW5kIHRoZSBzdHJpbmcgdG8gdGhlIGNhbGxlcgkjCisjIHNvIHRoYXQgdGhlIG1vdmUgY2FuIG9jY3VyIG91dHNpZGUgb2YgdGhpcyByb3V0aW5lLiBUaGlzIHNwZWNpYWwJIworIyBjYXNlIGlzIHJlcXVpcmVkIHNvIHRoYXQgbW92ZXMgdG8gdGhlIHN5c3RlbSBzdGFjayBhcmUgaGFuZGxlZAkjCisjIGNvcnJlY3RseS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIERZTkFNSUM6CQkJCQkJCQkjCisjCWZtb3ZtLngJZG4sIDxlYT4JCQkJCQkjCisjCWZtb3ZtLngJPGVhPiwgZG4JCQkJCQkjCisjCQkJCQkJCQkJIworIwkgICAgICA8V09SRCAxPgkJICAgICAgPFdPUkQyPgkJCQkjCisjCTExMTEgMDAxMCAwMCB8PGVhPnwJMTFAJiAxMDAwIDAkJCQgMDAwMAkJCSMKKyMJCQkJCQkJCQkjCisjCSYgPSAoMCk6IHByZWRlY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUJCQkJIworIwkgICAgKDEpOiBwb3N0aW5jcmVtZW50IG9yIGNvbnRyb2wgYWRkcmVzc2luZyBtb2RlCQkjCisjCUAgPSAoMCk6IG1vdmUgbGlzdGVkIHJlZ3MgZnJvbSBtZW1vcnkgdG8gdGhlIEZQVQkJIworIwkgICAgKDEpOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gdGhlIEZQVSB0byBtZW1vcnkJCSMKKyMJJCQkICAgIDogaW5kZXggb2YgZGF0YSByZWdpc3RlciBob2xkaW5nIHJlZyBzZWxlY3QgbWFzawkJIworIwkJCQkJCQkJCSMKKyMgTk9URVM6CQkJCQkJCQkjCisjCUlmIHRoZSBkYXRhIHJlZ2lzdGVyIGhvbGRzIGEgemVybywgdGhlbiB0aGUJCQkjCisjCWluc3RydWN0aW9uIGlzIGEgbm9wLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZtb3ZtX2R5bmFtaWMKK2Ztb3ZtX2R5bmFtaWM6CisKKyMgZXh0cmFjdCB0aGUgZGF0YSByZWdpc3RlciBpbiB3aGljaCB0aGUgYml0IHN0cmluZyByZXNpZGVzLi4uCisJbW92LmIJCTErRVhDX0VYVFdPUkQoJWE2KSwlZDEJIyBmZXRjaCBleHR3b3JkCisJYW5kaS53CQkmMHg3MCwlZDEJCSMgZXh0cmFjdCByZWcgYml0cworCWxzci5iCQkmMHg0LCVkMQkJIyBzaGlmdCBpbnRvIGxvIGJpdHMKKworIyBmZXRjaCB0aGUgYml0IHN0cmluZyBpbnRvIGQwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggcmVnIHN0cmluZworCisJYW5kaS5sCQkmMHgwMDAwMDBmZiwlZDAJCSMga2VlcCBvbmx5IGxvIGJ5dGUKKworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc3RyZworCW1vdi5iCQkodGJsX2Ztb3ZtX3NpemUudywlcGMsJWQwKSwlZDAKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNpemUKKwlic3IubAkJZm1vdm1fY2FsY19lYQkJIyBjYWxjdWxhdGUgPGVhPgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgc2l6ZQorCW1vdi5sCQkoJXNwKSssJWQxCQkjIHJlc3RvcmUgc3RyZworCisjIGlmIHRoZSBiaXQgc3RyaW5nIGlzIGEgemVybywgdGhlbiB0aGUgb3BlcmF0aW9uIGlzIGEgbm8tb3AKKyMgYnV0LCBtYWtlIHN1cmUgdGhhdCB3ZSd2ZSBjYWxjdWxhdGVkIGVhIGFuZCBhZHZhbmNlZCB0aGUgb3B3b3JkIHBvaW50ZXIKKwliZXEudwkJZm1vdm1fZGF0YV9kb25lCisKKyMgc2VwYXJhdGUgbW92ZSBpbnMgZnJvbSBtb3ZlIG91dHMuLi4KKwlidHN0CQkmMHg1LEVYQ19FWFRXT1JEKCVhNikJIyBpcyBpdCBhIG1vdmUgaW4gb3Igb3V0PworCWJlcS53CQlmbW92bV9kYXRhX2luCQkjIGl0J3MgYSBtb3ZlIG91dAorCisjIyMjIyMjIyMjIyMjCisjIE1PVkUgT1VUOiAjCisjIyMjIyMjIyMjIyMjCitmbW92bV9kYXRhX291dDoKKwlidHN0CQkmMHg0LEVYQ19FWFRXT1JEKCVhNikJIyBjb250cm9sIG9yIHByZWRlY3JlbWVudD8KKwlibmUudwkJZm1vdm1fb3V0X2N0cmwJCSMgY29udHJvbAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9vdXRfcHJlZGVjOgorIyBmb3IgcHJlZGVjcmVtZW50IG1vZGUsIHRoZSBiaXQgc3RyaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiBib3RoIGNvbnRyb2wKKyMgb3BlcmF0aW9ucyBhbmQgcG9zdGluY3JlbWVudCBtb2RlLiAoYml0NyA9IEZQNyAuLi4gYml0MCA9IEZQMCkKKyMgaGVyZSwgd2UgY29udmVydCBpdCB0byBiZSBqdXN0IGxpa2UgdGhlIG90aGVycy4uLgorCW1vdi5iCQkodGJsX2Ztb3ZtX2NvbnZlcnQudywlcGMsJWQxLncqMSksJWQxCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCWZtb3ZtX291dF9jdHJsCQkjIHVzZXIKKworZm1vdm1fb3V0X3ByZWRlY19zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIGlzIDxlYT4gbW9kZSAtKGE3KT8KKwlibmUuYgkJZm1vdm1fb3V0X2N0cmwKKworIyB0aGUgb3BlcmF0aW9uIHdhcyB1bmZvcnR1bmF0ZWx5IGFuOiBmbW92bS54IGRuLC0oc3ApCisjIGNhbGxlZCBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgd2UncmUgYWxzbyBwYXNzaW5nICJzaXplIiBhbmQgInN0cmciIGJhY2sgdG8gdGhlIGNhbGxpbmcgcm91dGluZQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9vdXRfY3RybDoKKwltb3YubAkJJWEwLCVhMQkJCSMgbW92ZSA8ZWE+IHRvIGExCisKKwlzdWIubAkJJWQwLCVzcAkJCSMgc3VidHJhY3Qgc2l6ZSBvZiBkdW1wCisJbGVhCQkoJXNwKSwlYTAKKworCXRzdC5iCQklZDEJCQkjIHNob3VsZCBGUDAgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMQkjIG5vCisKKwltb3YubAkJMHgwK0VYQ19GUDAoJWE2KSwoJWEwKSsJIyB5ZXMKKwltb3YubAkJMHg0K0VYQ19GUDAoJWE2KSwoJWEwKSsKKwltb3YubAkJMHg4K0VYQ19GUDAoJWE2KSwoJWEwKSsKKworZm1vdm1fb3V0X2N0cmxfZnAxOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAxIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDIJIyBubworCisJbW92LmwJCTB4MCtFWENfRlAxKCVhNiksKCVhMCkrCSMgeWVzCisJbW92LmwJCTB4NCtFWENfRlAxKCVhNiksKCVhMCkrCisJbW92LmwJCTB4OCtFWENfRlAxKCVhNiksKCVhMCkrCisKK2Ztb3ZtX291dF9jdHJsX2ZwMjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAzCSMgbm8KKworCWZtb3ZtLngJCSYweDIwLCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDM6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDMgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNAkjIG5vCisKKwlmbW92bS54CQkmMHgxMCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA0OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA0IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDUJIyBubworCisJZm1vdm0ueAkJJjB4MDgsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA2CSMgbm8KKworCWZtb3ZtLngJCSYweDA0LCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDY6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDYgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNwkjIG5vCisKKwlmbW92bS54CQkmMHgwMiwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA3OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA3IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9kb25lCSMgbm8KKworCWZtb3ZtLngJCSYweDAxLCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9kb25lOgorCW1vdi5sCQklYTEsTF9TQ1IxKCVhNikKKworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3M6IHN1cGVydmlzb3Igc3JjCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzaXplCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIGNvcHkgZGF0YSB0byB1c2VyIG1lbQorCisJbW92LmwJCSglc3ApKywlZDAKKwlhZGQubAkJJWQwLCVzcAkJCSMgY2xlYXIgZnByZWcgZGF0YSBmcm9tIHN0YWNrCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGVycj8KKwlibmUudwkJZm1vdm1fb3V0X2VycgkJIyB5ZXMKKworCXJ0cworCisjIyMjIyMjIyMjIyMKKyMgTU9WRSBJTjogIworIyMjIyMjIyMjIyMjCitmbW92bV9kYXRhX2luOgorCW1vdi5sCQklYTAsTF9TQ1IxKCVhNikKKworCXN1Yi5sCQklZDAsJXNwCQkJIyBtYWtlIHJvb20gZm9yIGZwcmVncworCWxlYQkJKCVzcCksJWExCisKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGJpdCBzdHJpbmcgZm9yIGxhdGVyCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSAjIG9mIGJ5dGVzCisKKwlic3IubAkJX2RtZW1fcmVhZAkJIyBjb3B5IGRhdGEgZnJvbSB1c2VyIG1lbQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0cmlldmUgIyBvZiBieXRlcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS53CQlmbW92bV9pbl9lcnIJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVkMQkJIyBsb2FkIGJpdCBzdHJpbmcKKworCWxlYQkJKCVzcCksJWEwCQkjIGFkZHIgb2Ygc3RhY2sKKworCXRzdC5iCQklZDEJCQkjIHNob3VsZCBGUDAgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX2RhdGFfaW5fZnAxCSMgbm8KKworCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDAoJWE2KQkjIHllcworCW1vdi5sCQkoJWEwKSssMHg0K0VYQ19GUDAoJWE2KQorCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDAoJWE2KQorCitmbW92bV9kYXRhX2luX2ZwMToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDIJIyBubworCisJbW92LmwJCSglYTApKywweDArRVhDX0ZQMSglYTYpCSMgeWVzCisJbW92LmwJCSglYTApKywweDQrRVhDX0ZQMSglYTYpCisJbW92LmwJCSglYTApKywweDgrRVhDX0ZQMSglYTYpCisKK2Ztb3ZtX2RhdGFfaW5fZnAyOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAyIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMwkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MjAJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnAzOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAzIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNAkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MTAJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA0OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA0IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNQkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDgJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA1OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA1IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNgkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDQJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA2OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA2IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwNwkjIG5vCisKKwlmbW92bS54CQkoJWEwKSssJjB4MDIJCSMgeWVzCisKK2Ztb3ZtX2RhdGFfaW5fZnA3OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA3IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2RvbmUJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDAxCQkjIHllcworCitmbW92bV9kYXRhX2luX2RvbmU6CisJYWRkLmwJCSVkMCwlc3AJCQkjIHJlbW92ZSBmcHJlZ3MgZnJvbSBzdGFjaworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Ztb3ZtX2RhdGFfZG9uZToKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGFibGUgaW5kZXhlZCBieSB0aGUgb3BlcmF0aW9uJ3MgYml0IHN0cmluZyB0aGF0IGdpdmVzIHRoZSBudW1iZXIKKyMgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlIG1vdmVkLgorIworIyBudW1iZXIgb2YgYnl0ZXMgPSAoIyBvZiAxJ3MgaW4gYml0IHN0cmluZykgKiAxMihieXRlcy9mcHJlZykKKyMKK3RibF9mbW92bV9zaXplOgorCWJ5dGUJMHgwMCwweDBjLDB4MGMsMHgxOCwweDBjLDB4MTgsMHgxOCwweDI0CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CisJYnl0ZQkweDNjLDB4NDgsMHg0OCwweDU0LDB4NDgsMHg1NCwweDU0LDB4NjAKKworIworIyB0YWJsZSB0byBjb252ZXJ0IGEgcHJlLWRlY3JlbWVudCBiaXQgc3RyaW5nIGludG8gYSBwb3N0LWluY3JlbWVudAorIyBvciBjb250cm9sIGJpdCBzdHJpbmcuCisjIGV4OgkweDAwCT09PgkweDAwCisjCTB4MDEJPT0+CTB4ODAKKyMJMHgwMgk9PT4JMHg0MAorIwkJLgorIwkJLgorIwkweGZkCT09PgkweGJmCisjCTB4ZmUJPT0+CTB4N2YKKyMJMHhmZgk9PT4JMHhmZgorIwordGJsX2Ztb3ZtX2NvbnZlcnQ6CisJYnl0ZQkweDAwLDB4ODAsMHg0MCwweGMwLDB4MjAsMHhhMCwweDYwLDB4ZTAKKwlieXRlCTB4MTAsMHg5MCwweDUwLDB4ZDAsMHgzMCwweGIwLDB4NzAsMHhmMAorCWJ5dGUJMHgwOCwweDg4LDB4NDgsMHhjOCwweDI4LDB4YTgsMHg2OCwweGU4CisJYnl0ZQkweDE4LDB4OTgsMHg1OCwweGQ4LDB4MzgsMHhiOCwweDc4LDB4ZjgKKwlieXRlCTB4MDQsMHg4NCwweDQ0LDB4YzQsMHgyNCwweGE0LDB4NjQsMHhlNAorCWJ5dGUJMHgxNCwweDk0LDB4NTQsMHhkNCwweDM0LDB4YjQsMHg3NCwweGY0CisJYnl0ZQkweDBjLDB4OGMsMHg0YywweGNjLDB4MmMsMHhhYywweDZjLDB4ZWMKKwlieXRlCTB4MWMsMHg5YywweDVjLDB4ZGMsMHgzYywweGJjLDB4N2MsMHhmYworCWJ5dGUJMHgwMiwweDgyLDB4NDIsMHhjMiwweDIyLDB4YTIsMHg2MiwweGUyCisJYnl0ZQkweDEyLDB4OTIsMHg1MiwweGQyLDB4MzIsMHhiMiwweDcyLDB4ZjIKKwlieXRlCTB4MGEsMHg4YSwweDRhLDB4Y2EsMHgyYSwweGFhLDB4NmEsMHhlYQorCWJ5dGUJMHgxYSwweDlhLDB4NWEsMHhkYSwweDNhLDB4YmEsMHg3YSwweGZhCisJYnl0ZQkweDA2LDB4ODYsMHg0NiwweGM2LDB4MjYsMHhhNiwweDY2LDB4ZTYKKwlieXRlCTB4MTYsMHg5NiwweDU2LDB4ZDYsMHgzNiwweGI2LDB4NzYsMHhmNgorCWJ5dGUJMHgwZSwweDhlLDB4NGUsMHhjZSwweDJlLDB4YWUsMHg2ZSwweGVlCisJYnl0ZQkweDFlLDB4OWUsMHg1ZSwweGRlLDB4M2UsMHhiZSwweDdlLDB4ZmUKKwlieXRlCTB4MDEsMHg4MSwweDQxLDB4YzEsMHgyMSwweGExLDB4NjEsMHhlMQorCWJ5dGUJMHgxMSwweDkxLDB4NTEsMHhkMSwweDMxLDB4YjEsMHg3MSwweGYxCisJYnl0ZQkweDA5LDB4ODksMHg0OSwweGM5LDB4MjksMHhhOSwweDY5LDB4ZTkKKwlieXRlCTB4MTksMHg5OSwweDU5LDB4ZDksMHgzOSwweGI5LDB4NzksMHhmOQorCWJ5dGUJMHgwNSwweDg1LDB4NDUsMHhjNSwweDI1LDB4YTUsMHg2NSwweGU1CisJYnl0ZQkweDE1LDB4OTUsMHg1NSwweGQ1LDB4MzUsMHhiNSwweDc1LDB4ZjUKKwlieXRlCTB4MGQsMHg4ZCwweDRkLDB4Y2QsMHgyZCwweGFkLDB4NmQsMHhlZAorCWJ5dGUJMHgxZCwweDlkLDB4NWQsMHhkZCwweDNkLDB4YmQsMHg3ZCwweGZkCisJYnl0ZQkweDAzLDB4ODMsMHg0MywweGMzLDB4MjMsMHhhMywweDYzLDB4ZTMKKwlieXRlCTB4MTMsMHg5MywweDUzLDB4ZDMsMHgzMywweGIzLDB4NzMsMHhmMworCWJ5dGUJMHgwYiwweDhiLDB4NGIsMHhjYiwweDJiLDB4YWIsMHg2YiwweGViCisJYnl0ZQkweDFiLDB4OWIsMHg1YiwweGRiLDB4M2IsMHhiYiwweDdiLDB4ZmIKKwlieXRlCTB4MDcsMHg4NywweDQ3LDB4YzcsMHgyNywweGE3LDB4NjcsMHhlNworCWJ5dGUJMHgxNywweDk3LDB4NTcsMHhkNywweDM3LDB4YjcsMHg3NywweGY3CisJYnl0ZQkweDBmLDB4OGYsMHg0ZiwweGNmLDB4MmYsMHhhZiwweDZmLDB4ZWYKKwlieXRlCTB4MWYsMHg5ZiwweDVmLDB4ZGYsMHgzZiwweGJmLDB4N2YsMHhmZgorCisJZ2xvYmFsCQlmbW92bV9jYWxjX2VhCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBfZm1vdm1fY2FsY19lYTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmbW92bV9jYWxjX2VhOgorCW1vdi5sCQklZDAsJWEwCQkJIyBtb3ZlICMgYnl0ZXMgdG8gYTAKKworIyBjdXJyZW50bHksIE1PREUgYW5kIFJFRyBhcmUgdGFrZW4gZnJvbSB0aGUgRVhDX09QV09SRC4gdGhpcyBjb3VsZCBiZQorIyBlYXNpbHkgY2hhbmdlZCBpZiB0aGV5IHdlcmUgaW5wdXRzIHBhc3NlZCBpbiByZWdpc3RlcnMuCisJbW92LncJCUVYQ19PUFdPUkQoJWE2KSwlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAorCW1vdi53CQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQorCisJYW5kaS53CQkmMHgzZiwlZDAJCSMgZXh0cmFjdCBtb2RlIGZpZWxkCisJYW5kaS5sCQkmMHg3LCVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKKworIyBqdW1wIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZvciBlYWNoIHtNT0RFLFJFR30gcGFpci4KKwltb3YudwkJKHRibF9mZWFfbW9kZS5iLCVwYywlZDAudyoyKSwlZDAgIyBmZXRjaCBqbXAgZGlzdGFuY2UKKwlqbXAJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMSkgIyBqbXAgdG8gY29ycmVjdCBlYSBtb2RlCisKKwlzd2JlZwkJJjY0Cit0YmxfZmVhX21vZGU6CisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9wX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2ExCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9wX2E3CS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTAJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTMJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTYJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX21fYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhYnNfc2hvcnQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFic19sb25nCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZwY19pbmQJCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZwY19pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0OiAoQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfYTA6CisJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMAorCXJ0cworCitmYWRkcl9pbmRfYTE6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMQorCXJ0cworCitmYWRkcl9pbmRfYTI6CisJbW92LmwJCSVhMiwlYTAJCQkjIEdldCBjdXJyZW50IGEyCisJcnRzCisKK2ZhZGRyX2luZF9hMzoKKwltb3YubAkJJWEzLCVhMAkJCSMgR2V0IGN1cnJlbnQgYTMKKwlydHMKKworZmFkZHJfaW5kX2E0OgorCW1vdi5sCQklYTQsJWEwCQkJIyBHZXQgY3VycmVudCBhNAorCXJ0cworCitmYWRkcl9pbmRfYTU6CisJbW92LmwJCSVhNSwlYTAJCQkjIEdldCBjdXJyZW50IGE1CisJcnRzCisKK2ZhZGRyX2luZF9hNjoKKwltb3YubAkJKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE2CisJcnRzCisKK2ZhZGRyX2luZF9hNzoKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcG9zdGluY3JlbWVudDogKEFuKSsgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZhZGRyX2luZF9wX2EwOgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTAKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLEVYQ19EUkVHUysweDgoJWE2KQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLEVYQ19EUkVHUysweGMoJWE2KQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2EyOgorCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWEyCQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMzoKKwltb3YubAkJJWEzLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTMKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhMwkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTQ6CisJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwlYTQJCQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2E1OgorCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWE1CQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNjoKKwltb3YubAkJKCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE2CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwoJWE2KQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNzoKKwltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfQTcoJWE2KQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcHJlZGVjcmVtZW50OiAtKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfbV9hMDoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAkjIEdldCBjdXJyZW50IGEwCisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTE6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMQorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweGMoJWE2KQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2EyOgorCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhMgkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTM6CisJbW92LmwJCSVhMywlZDAJCQkjIEdldCBjdXJyZW50IGEzCisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsJWEzCQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNDoKKwltb3YubAkJJWE0LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTQKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTQJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E1OgorCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhNQkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTY6CisJbW92LmwJCSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E3OgorCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTcKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTcoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfZGlzcF9hMDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVhMAkjIGEwICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2ExOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWEwCSMgYTEgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTI6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhMiwlYTAJCQkjIGEyICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2EzOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTMsJWEwCQkJIyBhMyArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hNDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJJWE0LCVhMAkJCSMgYTQgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTU6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhNSwlYTAJCQkjIGE1ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E2OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQkoJWE2KSwlYTAJCSMgYTYgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19BNyglYTYpLCVhMAkJIyBhNyArIGQxNgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBpbmRleCg4LWJpdCBkaXNwbGFjZW1lbnQpOiAoZDgsIEFuLCBYbikgIworIyAgICAiICAgICAgICIgICAgICAgICAiICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBBbiwgWG4pICAjCisjIE1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgQW5dLCBYbiwgb2QpCQkgICAgICAgIworIyBNZW1vcnkgaW5kaXJlY3QgcHJlaW5kZXhlZDogKFtiZCwgQW4sIFhuXSwgb2QpCQkgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfZXh0OgorCWFkZHEubAkJJjB4OCwlZDEKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBiYXNlIGFyZWcKKwltb3YubAkJJWQwLC0oJXNwKQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIGV4dHdvcmQgaW4gZDAKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVhMAorCisJYnRzdAkJJjB4OCwlZDAKKwlibmUudwkJZmNhbGNfbWVtX2luZAorCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBob2xkIG9wd29yZAorCisJbW92LmwJCSVkMCwlZDEKKwlyb2wudwkJJjB4NCwlZDEKKwlhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgaW5kZXggcmVnbm8KKworIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggaW5kZXgKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQyCQkjIGZldGNoIG9wd29yZAorCisJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaXQgd29yZCBvciBsb25nPworCWJuZS5iCQlmYWlpOF9sb25nCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleAorZmFpaThfbG9uZzoKKwltb3YubAkJJWQyLCVkMQorCXJvbC53CQkmMHg3LCVkMQorCWFuZGkubAkJJjB4MywlZDEJCSMgZXh0cmFjdCBzY2FsZSB2YWx1ZQorCisJbHNsLmwJCSVkMSwlZDAJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCisKKwlleHRiLmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCSVkMiwlZDAJCQkjIGluZGV4ICsgZGlzcAorCWFkZC5sCQklZDAsJWEwCQkJIyBBbiArIChpbmRleCArIGRpc3ApCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIG9sZCBkMgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWJzb2x1dGUgc2hvcnQ6IChYWFgpLlcgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWJzX3Nob3J0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzaG9ydCBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIGxvbmc6IChYWFgpLkwgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZhYnNfbG9uZzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJvZ3JhbSBjb3VudGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgUEMpICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZwY19pbmQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHdvcmQgZGlzcGxhY2VtZW50CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGMgKyBkMTYKKworIyBfaW1lbV9yZWFkX3dvcmQoKSBpbmNyZWFzZWQgdGhlIGV4dHdwdHIgYnkgMi4gbmVlZCB0byBhZGp1c3QgaGVyZS4KKwlzdWJxLmwJCSYweDIsJWEwCQkjIGFkanVzdCA8ZWE+CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEMgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBQQywgQW4pICMKKyMgIiAgICAgIiAgICAgdy8gICAiICAoYmFzZSBkaXNwbGFjZW1lbnQpOiAoYmQsIFBDLCBBbikgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBQQ10sIFhuLCBvZCkgICAgICMKKyMgUEMgbWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIFBDLCBYbl0sIG9kKSAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZwY19pbmRfZXh0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHQgd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHB1dCBiYXNlIGluIGEwCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgYmFzZQorCisJYnRzdAkJJjB4OCwlZDAJCSMgaXMgZGlzcCBvbmx5IDggYml0cz8KKwlibmUudwkJZmNhbGNfbWVtX2luZAkJIyBjYWxjIG1lbW9yeSBpbmRpcmVjdAorCisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzdG9yZSBvcHdvcmQKKworCW1vdi5sCQklZDAsJWQxCQkJIyBtYWtlIGV4dHdvcmQgY29weQorCXJvbC53CQkmMHg0LCVkMQkJIyByb3RhdGUgcmVnIG51bSBpbnRvIHBsYWNlCisJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IHJlZ2lzdGVyIG51bWJlcgorCisjIGNvdW50IG9uIGZldGNoX2RyZWcoKSBub3QgdG8gYWx0ZXIgYTAuLi4KKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBpbmRleAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDIJCSMgZmV0Y2ggb3B3b3JkCisKKwlidHN0CQkmMHhiLCVkMgkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCWZwaWk4X2xvbmcJCSMgbG9uZworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKK2ZwaWk4X2xvbmc6CisJbW92LmwJCSVkMiwlZDEKKwlyb2wudwkJJjB4NywlZDEJCSMgcm90YXRlIHNjYWxlIHZhbHVlIGludG8gcGxhY2UKKwlhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKKworCWxzbC5sCQklZDEsJWQwCQkJIyBzaGlmdCBpbmRleCBieSBzY2FsZQorCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQklZDIsJWQwCQkJIyBkaXNwICsgaW5kZXgKKwlhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCisJcnRzCisKKyMgZDIgPSBpbmRleAorIyBkMyA9IGJhc2UKKyMgZDQgPSBvZAorIyBkNSA9IGV4dHdvcmQKK2ZjYWxjX21lbV9pbmQ6CisJYnRzdAkJJjB4NiwlZDAJCSMgaXMgdGhlIGluZGV4IHN1cHByZXNzZWQ/CisJYmVxLmIJCWZjYWxjX2luZGV4CisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKworCW1vdi5sCQklZDAsJWQ1CQkJIyBwdXQgZXh0d29yZCBpbiBkNQorCW1vdi5sCQklYTAsJWQzCQkJIyBwdXQgYmFzZSBpbiBkMworCisJY2xyLmwJCSVkMgkJCSMgeWVzLCBzbyBpbmRleCA9IDAKKwlicmEuYgkJZmJhc2Vfc3VwcF9jaworCisjIGluZGV4OgorZmNhbGNfaW5kZXg6CisJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzYXZlIGQwIChvcHdvcmQpCisJYmZleHR1CQklZDB7JjE2OiY0fSwlZDEJCSMgZmV0Y2ggZHJlZyBpbmRleAorCWJzci5sCQlmZXRjaF9kcmVnCisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKwltb3YubAkJJWQwLCVkMgkJCSMgcHV0IGluZGV4IGluIGQyCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNQorCW1vdi5sCQklYTAsJWQzCisKKwlidHN0CQkmMHhiLCVkNQkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCWZub19leHQKKwlleHQubAkJJWQyCisKK2Zub19leHQ6CisJYmZleHR1CQklZDV7JjIxOiYyfSwlZDAKKwlsc2wubAkJJWQwLCVkMgorCisjIGJhc2UgYWRkcmVzcyAocGFzc2VkIGFzIHBhcmFtZXRlciBpbiBkMyk6CisjIHdlIGNsZWFyIHRoZSB2YWx1ZSBoZXJlIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBzdXBwcmVzc2VkLgorZmJhc2Vfc3VwcF9jazoKKwlidHN0CQkmMHg3LCVkNQkJIyBpcyB0aGUgYmQgc3VwcHJlc3NlZD8KKwliZXEuYgkJZm5vX2Jhc2Vfc3VwCisJY2xyLmwJCSVkMworCisjIGJhc2UgZGlzcGxhY2VtZW50OgorZm5vX2Jhc2Vfc3VwOgorCWJmZXh0dQkJJWQ1eyYyNjomMn0sJWQwCQkjIGdldCBiZCBzaXplCisjCWJlcS5sCQlmbW92bV9lcnJvcgkJIyBpZiAoc2l6ZSA9PSAwKSBpdCdzIHJlc2VydmVkCisKKwljbXBpLmIJCSVkMCwmMHgyCisJYmx0LmIJCWZub19iZAorCWJlcS5iCQlmZ2V0X3dvcmRfYmQKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCisKKwlicmEuYgkJZmNoa19pbmQKKworZmdldF93b3JkX2JkOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBiZAorCitmY2hrX2luZDoKKwlhZGQubAkJJWQwLCVkMwkJCSMgYmFzZSArPSBiZAorCisjIG91dGVyIGRpc3BsYWNlbWVudDoKK2Zub19iZDoKKwliZmV4dHUJCSVkNXsmMzA6JjJ9LCVkMAkJIyBpcyBvZCBzdXBwcmVzc2VkPworCWJlcS53CQlmYWlpX2JkCisKKwljbXBpLmIJCSVkMCwmMHgyCisJYmx0LmIJCWZudWxsX29kCisJYmVxLmIJCWZ3b3JkX29kCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWZhZGRfdGhlbQorCitmd29yZF9vZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgb2QKKwlicmEuYgkJZmFkZF90aGVtCisKK2ZudWxsX29kOgorCWNsci5sCQklZDAKKworZmFkZF90aGVtOgorCW1vdi5sCQklZDAsJWQ0CisKKwlidHN0CQkmMHgyLCVkNQkJIyBwcmUgb3IgcG9zdCBpbmRleGluZz8KKwliZXEuYgkJZnByZV9pbmRleGVkCisKKwltb3YubAkJJWQzLCVhMAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZmNlYV9lcnIJCSMgeWVzCisKKwlhZGQubAkJJWQyLCVkMAkJCSMgPGVhPiArPSBpbmRleAorCWFkZC5sCQklZDQsJWQwCQkJIyA8ZWE+ICs9IG9kCisJYnJhLmIJCWZkb25lX2VhCisKK2ZwcmVfaW5kZXhlZDoKKwlhZGQubAkJJWQyLCVkMwkJCSMgcHJlaW5kZXhpbmcKKwltb3YubAkJJWQzLCVhMAorCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZmNlYV9lcnIJCSMgeWVzCisKKwlhZGQubAkJJWQ0LCVkMAkJCSMgZWEgKz0gb2QKKwlicmEuYgkJZmRvbmVfZWEKKworZmFpaV9iZDoKKwlhZGQubAkJJWQyLCVkMwkJCSMgZWEgPSAoYmFzZSArIGJkKSArIGluZGV4CisJbW92LmwJCSVkMywlZDAKK2Zkb25lX2VhOgorCW1vdi5sCQklZDAsJWEwCisKKwltb3ZtLmwJCSglc3ApKywmMHgwMDNjCQkjIHJlc3RvcmUgZDItZDUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmY2VhX2VycjoKKwltb3YubAkJJWQzLCVhMAorCisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJbW92LncJCSYweDAxMDEsJWQwCisJYnJhLmwJCWllYV9kYWNjCisKK2ZjZWFfaWFjYzoKKwltb3ZtLmwJCSglc3ApKywmMHgwMDNjCQkjIHJlc3RvcmUgZDItZDUKKwlicmEubAkJaWVhX2lhY2MKKworZm1vdm1fb3V0X2VycjoKKwlic3IubAkJcmVzdG9yZQorCW1vdi53CQkmMHgwMGUxLCVkMAorCWJyYS5iCQlmbW92bV9lcnIKKworZm1vdm1faW5fZXJyOgorCWJzci5sCQlyZXN0b3JlCisJbW92LncJCSYweDAxNjEsJWQwCisKK2Ztb3ZtX2VycjoKKwltb3YubAkJTF9TQ1IxKCVhNiksJWEwCisJYnJhLmwJCWllYV9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm1vdm1fY3RybCgpOiBlbXVsYXRlIGZtb3ZtLmwgb2YgY29udHJvbCByZWdpc3RlcnMgaW5zdHIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGxvbmd3b3JkIGZyb20gbWVtb3J5CQkJIworIwlpZWFfaWFjYygpIC0gX2ltZW1fcmVhZF9sb25nKCkgZmFpbGVkOyBlcnJvciByZWNvdmVyeQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgX2ltZW1fcmVhZF9sb25nKCkgZG9lc24ndCBmYWlsOgkJCQkjCisjCQlVU0VSX0ZQQ1IoYTYpICA9IG5ldyBGUENSIHZhbHVlCQkJCSMKKyMJCVVTRVJfRlBTUihhNikgID0gbmV3IEZQU1IgdmFsdWUJCQkJIworIwkJVVNFUl9GUElBUihhNikgPSBuZXcgRlBJQVIgdmFsdWUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlEZWNvZGUgdGhlIGluc3RydWN0aW9uIHR5cGUgYnkgbG9va2luZyBhdCB0aGUgZXh0ZW5zaW9uIHdvcmQJIworIyBpbiBvcmRlciB0byBzZWUgaG93IG1hbnkgY29udHJvbCByZWdpc3RlcnMgdG8gZmV0Y2ggZnJvbSBtZW1vcnkuCSMKKyMgRmV0Y2ggdGhlbSB1c2luZyBfaW1lbV9yZWFkX2xvbmcoKS4gSWYgdGhpcyBmZXRjaCBmYWlscywgZXhpdCB0aHJvdWdoCSMKKyMgdGhlIHNwZWNpYWwgYWNjZXNzIGVycm9yIGV4aXQgaGFuZGxlciBpZWFfaWFjYygpLgkJCSMKKyMJCQkJCQkJCQkjCisjIEluc3RydWN0aW9uIHdvcmQgZGVjb2Rpbmc6CQkJCQkJIworIwkJCQkJCQkJCSMKKyMJZm1vdmVtLmwgIzxkYXRhPiwge0ZQSUFSJnxGUENSJnxGUFNSfQkJCQkjCisjCQkJCQkJCQkJIworIwkJV09SRDEJCQlXT1JEMgkJCQkjCisjCTExMTEgMDAxMCAwMCAxMTExMDAJMTAwJCAkJDAwIDAwMDAgMDAwMAkJCSMKKyMJCQkJCQkJCQkjCisjCSQkJCAoMTAwKTogRlBDUgkJCQkJCQkjCisjCSAgICAoMDEwKTogRlBTUgkJCQkJCQkjCisjCSAgICAoMDAxKTogRlBJQVIJCQkJCQkjCisjCSAgICAoMDAwKTogRlBJQVIJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmbW92bV9jdHJsCitmbW92bV9jdHJsOgorCW1vdi5iCQlFWENfRVhUV09SRCglYTYpLCVkMAkjIGZldGNoIHJlZyBzZWxlY3QgYml0cworCWNtcGkuYgkJJWQwLCYweDljCQkjIGZwY3IgJiBmcHNyICYgZnBpYXIgPworCWJlcS53CQlmY3RybF9pbl83CQkjIHllcworCWNtcGkuYgkJJWQwLCYweDk4CQkjIGZwY3IgJiBmcHNyID8KKwliZXEudwkJZmN0cmxfaW5fNgkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHg5NAkJIyBmcGNyICYgZnBpYXIgPworCWJlcS5iCQlmY3RybF9pbl81CQkjIHllcworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwc3IvZnBpYXIKK2ZjdHJsX2luXzM6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjaworCXJ0cworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBpYXIKK2ZjdHJsX2luXzU6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjaworCXJ0cworCisjIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBzcgorZmN0cmxfaW5fNjoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBDUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUENSKCVhNikJIyBzdG9yZSBuZXcgRlBDUiB0byBtZW0KKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBTUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBuZXcgRlBTUiB0byBtZW0KKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2Zwc3IvZnBpYXIKK2ZjdHJsX2luXzc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gbWVtCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKTogc2NhbGUgaW5wdXRzIHRvIGZhZGQvZnN1YiBzdWNoIHRoYXQgbm8JIworIwkJCSAgT1ZGTC9VTkZMIGV4Y2VwdGlvbnMgd2lsbCByZXN1bHQJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBtYW50aXNzYSBhZnRlciBhZGp1c3RpbmcgZXhwb25lbnQJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBmcCBvcDEoc3JjKQkJCQkJIworIwlGUF9EU1QoYTYpID0gZnAgb3AyKGRzdCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBmcCBvcDEgc2NhbGVkKHNyYykJCQkJCSMKKyMJRlBfRFNUKGE2KSA9IGZwIG9wMiBzY2FsZWQoZHN0KQkJCQkJIworIwlkMCAgICAgICAgID0gc2NhbGUgYW1vdW50CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiB0aGUgRFNUIGV4cG9uZW50IGlzID4gdGhlIFNSQyBleHBvbmVudCwgc2V0IHRoZSBEU1QgZXhwb25lbnQJIworIyBlcXVhbCB0byAweDNmZmYgYW5kIHNjYWxlIHRoZSBTUkMgZXhwb25lbnQgYnkgdGhlIHZhbHVlIHRoYXQgdGhlCSMKKyMgRFNUIGV4cG9uZW50IHdhcyBzY2FsZWQgYnkuIElmIHRoZSBTUkMgZXhwb25lbnQgaXMgZ3JlYXRlciBvciBlcXVhbCwJIworIyBkbyB0aGUgb3Bwb3NpdGUuIFJldHVybiB0aGlzIHNjYWxlIGZhY3RvciBpbiBkMC4JCQkjCisjCUlmIHRoZSB0d28gZXhwb25lbnRzIGRpZmZlciBieSA+IHRoZSBudW1iZXIgb2YgbWFudGlzc2EgYml0cwkjCisjIHBsdXMgdHdvLCB0aGVuIHNldCB0aGUgc21hbGxlc3QgZXhwb25lbnQgdG8gYSB2ZXJ5IHNtYWxsIHZhbHVlIGFzIGEJIworIyBxdWljayBzaG9ydGN1dC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJYWRkc3ViX3NjYWxlcjIKK2FkZHN1Yl9zY2FsZXIyOgorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJbW92LncJCURTVF9FWCglYTEpLCVkMQorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKKworCWFuZGkudwkJJjB4N2ZmZiwlZDAKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBzdG9yZSBzcmMgZXhwb25lbnQKKwltb3YudwkJJWQxLDIrTF9TQ1IxKCVhNikJIyBzdG9yZSBkc3QgZXhwb25lbnQKKworCWNtcC53CQklZDAsICVkMQkJIyBpcyBzcmMgZXhwID49IGRzdCBleHA/CisJYmdlLmwJCXNyY19leHBfZ2UyCisKKyMgZHN0IGV4cCBpcyA+ICBzcmMgZXhwOyBzY2FsZSBkc3QgdG8gZXhwID0gMHgzZmZmCitkc3RfZXhwX2d0MjoKKwlic3IubAkJc2NhbGVfdG9femVyb19kc3QKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CisJYm5lLmIJCWNtcGV4cDEyCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBkZW5vcm07IHJlc3VsdCBpcyBuZXcgZXhwCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCisJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBpbnNldCBuZXcgZXhwCisKK2NtcGV4cDEyOgorCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAorCXN1YmkudwkJJm1hbnRpc3NhbGVuKzIsJWQwCSMgc3VidHJhY3QgbWFudGlzc2FsZW4rMiBmcm9tIGxhcmdlciBleHAKKworCWNtcC53CQklZDAsTF9TQ1IxKCVhNikJCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CisJYmdlLmIJCXF1aWNrX3NjYWxlMTIKKworCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKKwlhZGQudwkJMHgyKCVzcCksJWQwCQkjIHNjYWxlIHNyYyBleHBvbmVudCBieSBzY2FsZSBmYWN0b3IKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQorCWFuZC53CQkmMHg4MDAwLCVkMQorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCitxdWlja19zY2FsZTEyOgorCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyB6ZXJvIHNyYyBleHBvbmVudAorCWJzZXQJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBzZXQgZXhwID0gMQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCisjIHNyYyBleHAgaXMgPj0gZHN0IGV4cDsgc2NhbGUgc3JjIHRvIGV4cCA9IDB4M2ZmZgorc3JjX2V4cF9nZTI6CisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkuYgkJRFRBRyglYTYpLCZERU5PUk0JIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJuZS5iCQljbXBleHAyMgorCWxlYQkJRlBfU0NSMSglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIGRlbm9ybTsgcmVzdWx0IGlzIG5ldyBleHAKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IHZhbCkKKwltb3YudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpbnNldCBuZXcgZXhwCisKK2NtcGV4cDIyOgorCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKKwlzdWJpLncJCSZtYW50aXNzYWxlbisyLCVkMAkjIHN1YnRyYWN0IG1hbnRpc3NhbGVuKzIgZnJvbSBsYXJnZXIgZXhwCisKKwljbXAudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpcyBkaWZmZXJlbmNlID49IGxlbihtYW50aXNzYSkrMj8KKwliZ2UuYgkJcXVpY2tfc2NhbGUyMgorCisJbW92LncJCTIrTF9TQ1IxKCVhNiksJWQwCisJYWRkLncJCTB4Miglc3ApLCVkMAkJIyBzY2FsZSBkc3QgZXhwb25lbnQgYnkgc2NhbGUgZmFjdG9yCisJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQxCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IHtzZ24sbmV3IGV4cH0KKwltb3YudwkJJWQwLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZHN0IGV4cG9uZW50CisKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCisJcnRzCisKK3F1aWNrX3NjYWxlMjI6CisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjFfRVgoJWE2KQkjIHplcm8gZHN0IGV4cG9uZW50CisJYnNldAkJJjB4MCwxK0ZQX1NDUjFfRVgoJWE2KQkjIHNldCBleHAgPSAxCisKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQkJICAgICB2YWx1ZSBhdCBGUF9TQ1IwKGE2KS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGlmIHRoZSBvcGVyYW5kIHdhcyBhIERFTk9STQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kIHRvIGJlIHNjYWxlZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBzY2FsZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQJCQkjCisjCWQwCSAgICA9IHNjYWxlIHZhbHVlCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTZXQgdGhlIGV4cG9uZW50IG9mIHRoZSBpbnB1dCBvcGVyYW5kIHRvIDB4M2ZmZi4gU2F2ZSB0aGUgdmFsdWUJIworIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCisjIG5vcm1hbGl6ZSB0aGUgb3BlcmFuZCBpZiBpdCB3YXMgYSBERU5PUk0uIEFkZCB0aGlzIG5vcm1hbGl6YXRpb24JIworIyB2YWx1ZSB0byB0aGUgcHJldmlvdXMgdmFsdWUuIFJldHVybiB0aGUgcmVzdWx0LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNjYWxlX3RvX3plcm9fc3JjCitzY2FsZV90b196ZXJvX3NyYzoKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQorCisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAorCisJYW5kaS53CQkmMHg4MDAwLCVkMAkJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KKwlvci53CQkmMHgzZmZmLCVkMAkJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IGJpYXNlZCBleHBvbmVudAorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwliZXEuYgkJc3R6c19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworc3R6c19ub3JtOgorCW1vdi5sCQkmMHgzZmZmLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKworCXJ0cworCitzdHpzX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJbW92LmwJCSVkMCwlZDEJCQkjIHByZXBhcmUgZm9yIG9wX25vcm0gY2FsbAorCWJyYS5iCQlzdHpzX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKKworIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfc3FydCgpOiBzY2FsZSB0aGUgaW5wdXQgb3BlcmFuZCBleHBvbmVudCBzbyBhIHN1YnNlcXVlbnQJIworIwkJICAgICAgZnNxcnQgb3BlcmF0aW9uIHdvbid0IHRha2UgYW4gZXhjZXB0aW9uLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgdGhlIGlucHV0IG9wZXJhbmQgaXMgYSBERU5PUk0sIG5vcm1hbGl6ZSBpdC4JCQkjCisjCUlmIHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBldmVuLCBzZXQgdGhlIGV4cG9uZW50CSMKKyMgdG8gMHgzZmZlIGFuZCByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZlKS8yIi4gSWYgdGhlCSMKKyMgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgb2ZmLCBzZXQgdGhlIGV4cG9uZW50IHRvIG94M2ZmZiBhbmQJIworIyByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZmKS8yIi4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2NhbGVfc3FydAorc2NhbGVfc3FydDoKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJlcS5iCQlzc19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZXh0cmFjdCBvcGVyYW5kJ3Mge3NnbixleHB9CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAorCisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjBfRVgoJWE2KQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgorCisJYnRzdAkJJjB4MCwlZDEJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPworCWJlcS5iCQlzc19ub3JtX2V2ZW4KKworCW9yaS53CQkmMHgzZmZmLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LmwJCSYweDNmZmYsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3Nfbm9ybV9ldmVuOgorCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LmwJCSYweDNmZmUsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3NfZGVub3JtOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIHNyYyBvcAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCisKKwlidHN0CQkmMHgwLCVkMAkJIyBpcyBleHAgZXZlbiBvciBvZGQ/CisJYmVxLmIJCXNzX2Rlbm9ybV9ldmVuCisKKwlvcmkudwkJJjB4M2ZmZixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCWFkZC5sCQkmMHgzZmZmLCVkMAorCWFzci5sCQkmMHgxLCVkMAkJIyBkaXZpZGUgc2NhbGUgZmFjdG9yIGJ5IDIKKwlydHMKKworc3NfZGVub3JtX2V2ZW46CisJb3JpLncJCSYweDNmZmUsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwlhZGQubAkJJjB4M2ZmZSwlZDAKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKKyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCk6IHNjYWxlIHRoZSBleHBvbmVudCBvZiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCSAgICAgdmFsdWUgYXQgRlBfU0NSMShhNikuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMShhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjEoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKKyMgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgYW5kIG5ldyBleHBvbmVudC4gVGhlbiwJIworIyBub3JtYWxpemUgdGhlIG9wZXJhbmQgaWYgaXQgd2FzIGEgREVOT1JNLiBBZGQgdGhpcyBub3JtYWxpemF0aW9uCSMKKyMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzY2FsZV90b196ZXJvX2RzdAorc2NhbGVfdG9femVyb19kc3Q6CisJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCwlZDAJCSMgZXh0cmFjdCBvcGVyYW5kJ3Mgc2duCisJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwltb3YudwkJJWQwLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBiaWFzZWQgZXhwb25lbnQKKworCWNtcGkuYgkJRFRBRyglYTYpLCZERU5PUk0JIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYmVxLmIJCXN0emRfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK3N0emRfbm9ybToKKwltb3YubAkJJjB4M2ZmZiwlZDAKKwlzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCisJcnRzCisKK3N0emRfZGVub3JtOgorCWxlYQkJRlBfU0NSMSglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIGRzdCBvcAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCisJbmVnLmwJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwltb3YubAkJJWQwLCVkMQkJCSMgcHJlcGFyZSBmb3Igb3Bfbm9ybSBjYWxsCisJYnJhLmIJCXN0emRfbm9ybQkJIyBmaW5pc2ggc2NhbGluZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19xbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBRTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCisjCXJlc19zbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCisjCXJlc19xbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKKyMJcmVzX3NuYW5fMW9wKCk6IHJldHVybiBkZmx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIG1vbmFkaWMJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU1JDKGE2KSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNyYyBvcGVyYW5kCQkjCisjCUZQX0RTVChhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkc3Qgb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBlaXRoZXIgb3BlcmFuZCAoYnV0IG5vdCBib3RoIG9wZXJhbmRzKSBvZiBhbiBvcGVyYXRpb24gaXMgYQkjCisjIG5vbnNpZ25hbGxpbmcgTkFOLCB0aGVuIHRoYXQgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuIElmIGJvdGgJIworIyBvcGVyYW5kcyBhcmUgbm9uc2lnbmFsbGluZyBOQU5zLCB0aGVuIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuCQkJCSMKKyMJSWYgZWl0aGVyIG9wZXJhbmQgdG8gYW4gb3BlcmF0aW9uIGlzIGEgc2lnbmFsbGluZyBOQU4gKFNOQU4pLAkjCisjIHRoZW4sIHRoZSBTTkFOIGJpdCBpcyBzZXQgaW4gdGhlIEZQU1IgRVhDIGJ5dGUuIElmIHRoZSBTTkFOIHRyYXAJIworIyBlbmFibGUgYml0IGlzIHNldCBpbiB0aGUgRlBDUiwgdGhlbiB0aGUgdHJhcCBpcyB0YWtlbiBhbmQgdGhlCQkjCisjIGRlc3RpbmF0aW9uIGlzIG5vdCBtb2RpZmllZC4gSWYgdGhlIFNOQU4gdHJhcCBlbmFibGUgYml0IGlzIG5vdCBzZXQsCSMKKyMgdGhlbiB0aGUgU05BTiBpcyBjb252ZXJ0ZWQgdG8gYSBub25zaWduYWxsaW5nIE5BTiAoYnkgc2V0dGluZyB0aGUJIworIyBTTkFOIGJpdCBpbiB0aGUgb3BlcmFuZCB0byBvbmUpLCBhbmQgdGhlIG9wZXJhdGlvbiBjb250aW51ZXMgYXMJIworIyBkZXNjcmliZWQgaW4gdGhlIHByZWNlZGluZyBwYXJhZ3JhcGgsIGZvciBub25zaWduYWxsaW5nIE5BTnMuCQkjCisjCU1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgRlBTUiBiaXRzIGFyZSBzZXQgYmVmb3JlIGV4aXRpbmcuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXJlc19xbmFuCisJZ2xvYmFsCQlyZXNfc25hbgorcmVzX3FuYW46CityZXNfc25hbjoKKwljbXAuYgkJRFRBRyglYTYpLCAmU05BTgkjIGlzIHRoZSBkc3QgYW4gU05BTj8KKwliZXEuYgkJZHN0X3NuYW4yCisJY21wLmIJCURUQUcoJWE2KSwgJlFOQU4JIyBpcyB0aGUgZHN0IGEgIFFOQU4/CisJYmVxLmIJCWRzdF9xbmFuMgorc3JjX25hbjoKKwljbXAuYgkJU1RBRyglYTYpLCAmUU5BTgorCWJlcS5iCQlzcmNfcW5hbjIKKwlnbG9iYWwJCXJlc19zbmFuXzFvcAorcmVzX3NuYW5fMW9wOgorc3JjX3NuYW4yOgorCWJzZXQJCSYweDYsIEZQX1NSQ19ISSglYTYpCSMgc2V0IFNOQU4gYml0CisJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCisJZ2xvYmFsCQlyZXNfcW5hbl8xb3AKK3Jlc19xbmFuXzFvcDoKK3NyY19xbmFuMjoKKwlvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCitkc3Rfc25hbjI6CisJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCisJYnNldAkJJjB4NiwgRlBfRFNUX0hJKCVhNikJIyBzZXQgU05BTiBiaXQKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlicmEuYgkJbmFuX2NvbXAKK2RzdF9xbmFuMjoKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwljbXAuYgkJU1RBRyglYTYpLCAmU05BTgorCWJuZQkJbmFuX2RvbmUKKwlvci5sCQkmYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9kb25lOgorCW9yLmwJCSZuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9jb21wOgorCWJ0c3QJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBpcyBOQU4gbmVnPworCWJlcS5iCQluYW5fbm90X25lZworCW9yLmwJCSZuZWdfbWFzaywgVVNFUl9GUFNSKCVhNikKK25hbl9ub3RfbmVnOgorCWZtb3ZtLngJCSglYTApLCAmMHg4MAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19vcGVycigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgZHVyaW5nIG9wZXJhbmQgZXJyb3IJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgb3BlcmFuZCBlcnJvciByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQW4gbm9uc2lnbmFsbGluZyBOQU4gaXMgcmV0dXJuZWQgYXMgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZW4JIworIyBhbiBvcGVyYW5kIGVycm9yIG9jY3VycyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoJCQkjCisjCQkJCQkJCQkJIworIwlNdWx0aXBseTogKEluZmluaXR5IHggWmVybykJCQkJCSMKKyMJRGl2aWRlICA6IChaZXJvIC8gWmVybykgfHwgKEluZmluaXR5IC8gSW5maW5pdHkpCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlyZXNfb3BlcnIKK3Jlc19vcGVycjoKKwlvci5sCQkmbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpCisJZm1vdm0ueAkJbmFuX3JldHVybiglcGMpLCAmMHg4MAorCXJ0cworCituYW5fcmV0dXJuOgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZGVub3JtKCk6IGRlbm9ybWFsaXplIGFuIGludGVybWVkaWF0ZSByZXN1bHQJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50cyB0byB0aGUgb3BlcmFuZCB0byBiZSBkZW5vcm1hbGl6ZWQJCQkjCisjCQkoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkJCQkjCisjCQkJCQkJCQkJIworIwlkMCA9IHJvdW5kaW5nIHByZWNpc2lvbgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byB0aGUgZGVub3JtYWxpemVkIHJlc3VsdAkJCQkjCisjCQkoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkJCQkjCisjCQkJCQkJCQkJIworIwlkMCA9IGd1YXJkLHJvdW5kLHN0aWNreQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgZXhwb25lbnQgdW5kZXJmbG93IHRocmVzaG9sZCBmb3IgdGhlIGdpdmVuCSMKKyMgcHJlY2lzaW9uLCBzaGlmdCB0aGUgbWFudGlzc2EgYml0cyB0byB0aGUgcmlnaHQgaW4gb3JkZXIgcmFpc2UgdGhlCSMKKyMgZXhwb25lbnQgb2YgdGhlIG9wZXJhbmQgdG8gdGhlIHRocmVzaG9sZCB2YWx1ZS4gV2hpbGUgc2hpZnRpbmcgdGhlCSMKKyMgbWFudGlzc2EgYml0cyByaWdodCwgbWFpbnRhaW4gdGhlIHZhbHVlIG9mIHRoZSBndWFyZCwgcm91bmQsIGFuZAkjCisjIHN0aWNreSBiaXRzLgkJCQkJCQkJIworIyBvdGhlciBub3RlczoJCQkJCQkJCSMKKyMJKDEpIF9kZW5vcm0oKSBpcyBjYWxsZWQgYnkgdGhlIHVuZGVyZmxvdyByb3V0aW5lcwkJIworIwkoMikgX2Rlbm9ybSgpIGRvZXMgTk9UIGFmZmVjdCB0aGUgc3RhdHVzIHJlZ2lzdGVyCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRhYmxlIG9mIGV4cG9uZW50IHRocmVzaG9sZCB2YWx1ZXMgZm9yIGVhY2ggcHJlY2lzaW9uCisjCit0YmxfdGhyZXNoOgorCXNob3J0CQkweDAKKwlzaG9ydAkJc2dsX3RocmVzaAorCXNob3J0CQlkYmxfdGhyZXNoCisKKwlnbG9iYWwJCV9kZW5vcm0KK19kZW5vcm06CisjCisjIExvYWQgdGhlIGV4cG9uZW50IHRocmVzaG9sZCBmb3IgdGhlIHByZWNpc2lvbiBzZWxlY3RlZCBhbmQgY2hlY2sKKyMgdG8gc2VlIGlmICh0aHJlc2hvbGQgLSBleHBvbmVudCkgaXMgPiA2NSBpbiB3aGljaCBjYXNlIHdlIGNhbgorIyBzaW1wbHkgY2FsY3VsYXRlIHRoZSBzdGlja3kgYml0IGFuZCB6ZXJvIHRoZSBtYW50aXNzYS4gb3RoZXJ3aXNlCisjIHdlIGhhdmUgdG8gY2FsbCB0aGUgZGVub3JtYWxpemF0aW9uIHJvdXRpbmUuCisjCisJbHNyLmIJCSYweDIsICVkMAkJIyBzaGlmdCBwcmVjIHRvIGxvIGJpdHMKKwltb3YudwkJKHRibF90aHJlc2guYiwlcGMsJWQwLncqMiksICVkMSAjIGxvYWQgcHJlYyB0aHJlc2hvbGQKKwltb3YudwkJJWQxLCAlZDAJCSMgY29weSBkMSBpbnRvIGQwCisJc3ViLncJCUZURU1QX0VYKCVhMCksICVkMAkjIGRpZmYgPSB0aHJlc2hvbGQgLSBleHAKKwljbXBpLncJCSVkMCwgJjY2CQkjIGlzIGRpZmYgPiA2NT8gKG1hbnQgKyBnLHIgYml0cykKKwlicGwuYgkJZGVub3JtX3NldF9zdGt5CQkjIHllczsganVzdCBjYWxjIHN0aWNreQorCisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKKwlidHN0CQkmaW5leDJfYml0LCBGUFNSX0VYQ0VQVCglYTYpICMgeWVzOyB3YXMgSU5FWDIgc2V0PworCWJlcS5iCQlkZW5vcm1fY2FsbAkJIyBubzsgZG9uJ3QgY2hhbmdlIGFueXRoaW5nCisJYnNldAkJJjI5LCAlZDAJCSMgeWVzOyBzZXQgc3RpY2t5IGJpdAorCitkZW5vcm1fY2FsbDoKKwlic3IubAkJZG5ybV9scAkJCSMgZGVub3JtYWxpemUgdGhlIG51bWJlcgorCXJ0cworCisjCisjIGFsbCBiaXQgd291bGQgaGF2ZSBiZWVuIHNoaWZ0ZWQgb2ZmIGR1cmluZyB0aGUgZGVub3JtIHNvIHNpbXBseQorIyBjYWxjdWxhdGUgaWYgdGhlIHN0aWNreSBzaG91bGQgYmUgc2V0IGFuZCBjbGVhciB0aGUgZW50aXJlIG1hbnRpc3NhLgorIworZGVub3JtX3NldF9zdGt5OgorCW1vdi5sCQkmMHgyMDAwMDAwMCwgJWQwCSMgc2V0IHN0aWNreSBiaXQgaW4gcmV0dXJuIHZhbHVlCisJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGxvYWQgZXhwIHdpdGggdGhyZXNob2xkCisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgc2V0IGQxID0gMCAobXMgbWFudGlzc2EpCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgc2V0IGQyID0gMCAobXMgbWFudGlzc2EpCisJcnRzCisKKyMJCQkJCQkJCQkjCisjIGRucm1fbHAoKTogbm9ybWFsaXplIGV4cG9uZW50L21hbnRpc3NhIHRvIHNwZWNpZmllZCB0aHJlc2hob2xkCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUOgkJCQkJCQkJIworIwklYTAJICAgOiBwb2ludHMgdG8gdGhlIG9wZXJhbmQgdG8gYmUgZGVub3JtYWxpemVkCQkjCisjCSVkMHszMToyOX0gOiBpbml0aWFsIGd1YXJkLHJvdW5kLHN0aWNreQkJCQkjCisjCSVkMXsxNTowfSAgOiBkZW5vcm1hbGl6YXRpb24gdGhyZXNob2xkCQkJCSMKKyMgT1VUUFVUOgkJCQkJCQkJIworIwklYTAJICAgOiBwb2ludHMgdG8gdGhlIGRlbm9ybWFsaXplZCBvcGVyYW5kCQkJIworIwklZDB7MzE6Mjl9IDogZmluYWwgZ3VhcmQscm91bmQsc3RpY2t5CQkJCSMKKyMJCQkJCQkJCQkjCisKKyMgKioqIExvY2FsIEVxdWF0ZXMgKioqICMKK3NldAlHUlMsCQlMX1NDUjIJCQkjIGcscixzIHRlbXAgc3RvcmFnZQorc2V0CUZURU1QX0xPMiwJTF9TQ1IxCQkJIyBGVEVNUF9MTyBjb3B5CisKKwlnbG9iYWwJCWRucm1fbHAKK2Rucm1fbHA6CisKKyMKKyMgbWFrZSBhIGNvcHkgb2YgRlRFTVBfTE8gYW5kIHBsYWNlIHRoZSBnLHIscyBiaXRzIGRpcmVjdGx5IGFmdGVyIGl0CisjIGluIG1lbW9yeSBzbyBhcyB0byBtYWtlIHRoZSBiaXRmaWVsZCBleHRyYWN0aW9uIGZvciBkZW5vcm1hbGl6YXRpb24gZWFzaWVyLgorIworCW1vdi5sCQlGVEVNUF9MTyglYTApLCBGVEVNUF9MTzIoJWE2KSAjIG1ha2UgRlRFTVBfTE8gY29weQorCW1vdi5sCQklZDAsIEdSUyglYTYpCQkjIHBsYWNlIGcscixzIGFmdGVyIGl0CisKKyMKKyMgY2hlY2sgdG8gc2VlIGhvdyBtdWNoIGxlc3MgdGhhbiB0aGUgdW5kZXJmbG93IHRocmVzaG9sZCB0aGUgb3BlcmFuZAorIyBleHBvbmVudCBpcy4KKyMKKwltb3YubAkJJWQxLCAlZDAJCSMgY29weSB0aGUgZGVub3JtIHRocmVzaG9sZAorCXN1Yi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBkMSA9IHRocmVzaG9sZCAtIHVucyBleHBvbmVudAorCWJsZS5iCQlkbnJtX25vX2xwCQkjIGQxIDw9IDAKKwljbXBpLncJCSVkMSwgJjB4MjAJCSMgaXMgKCAwIDw9IGQxIDwgMzIpID8KKwlibHQuYgkJY2FzZV8xCQkJIyB5ZXMKKwljbXBpLncJCSVkMSwgJjB4NDAJCSMgaXMgKDMyIDw9IGQxIDwgNjQpID8KKwlibHQuYgkJY2FzZV8yCQkJIyB5ZXMKKwlicmEudwkJY2FzZV8zCQkJIyAoZDEgPj0gNjQpCisKKyMKKyMgTm8gbm9ybWFsaXphdGlvbiBuZWNlc3NhcnkKKyMKK2Rucm1fbm9fbHA6CisJbW92LmwJCUdSUyglYTYpLCAlZDAJCSMgcmVzdG9yZSBvcmlnaW5hbCBnLHIscworCXJ0cworCisjCisjIGNhc2UgKDA8ZDE8MzIpCisjCisjICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKKyMgJWQxID0gIm4iID0gYW10IHRvIHNoaWZ0CisjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwk8LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT4KKyMJXAkgICBcCQkgICAgICBcCQkJIFwKKyMJIFwJICAgIFwJCSAgICAgICBcCQkgIFwKKyMJICBcCSAgICAgXAkJCVwJCSAgIFwKKyMJICAgXAkgICAgICBcCQkJIFwJCSAgICBcCisjCSAgICBcCSAgICAgICBcCQkgIFwJCSAgICAgXAorIwkgICAgIFwJCVwJCSAgIFwJCSAgICAgIFwKKyMJICAgICAgXAkJIFwJCSAgICBcCQkgICAgICAgXAorIwkgICAgICAgXAkgIFwJCSAgICAgXAkJCVwKKyMJPC0obiktPjwtKDMyIC0gbiktPjwtLS0tLS0oMzIpLS0tLS0tLT48LS0tLS0tKDMyKS0tLS0tLS0+CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8MC4uLi4uMHwgTkVXX0hJICB8ICBORVdfRlRFTVBfTE8gICAgIHxncnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlXzE6CisJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSB0ZW1wIHN0b3JhZ2UKKworCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKKwltb3YubAkJJjMyLCAlZDAKKwlzdWIudwkJJWQxLCAlZDAJCSMgJWQwID0gMzIgLSAlZDEKKworCWNtcGkudwkJJWQxLCAmMjkJCSMgaXMgc2hmdCBhbXQgPj0gMjkKKwlibHQuYgkJY2FzZTFfZXh0cmFjdAkJIyBubzsgbm8gZml4IG5lZWRlZAorCW1vdi5iCQlHUlMoJWE2KSwgJWQyCisJb3IuYgkJJWQyLCAzK0ZURU1QX0xPMiglYTYpCisKK2Nhc2UxX2V4dHJhY3Q6CisJYmZleHR1CQlGVEVNUF9ISSglYTApeyYwOiVkMH0sICVkMiAjICVkMiA9IG5ldyBGVEVNUF9ISQorCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXslZDA6JjMyfSwgJWQxICMgJWQxID0gbmV3IEZURU1QX0xPCisJYmZleHR1CQlGVEVNUF9MTzIoJWE2KXslZDA6JjMyfSwgJWQwICMgJWQwID0gbmV3IEcsUixTCisKKwltb3YubAkJJWQyLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IEZURU1QX0hJCisJbW92LmwJCSVkMSwgRlRFTVBfTE8oJWEwKQkjIHN0b3JlIG5ldyBGVEVNUF9MTworCisJYmZ0c3QJCSVkMHsmMjomMzB9CQkjIHdlcmUgYml0cyBzaGlmdGVkIG9mZj8KKwliZXEuYgkJY2FzZTFfc3RpY2t5X2NsZWFyCSMgbm87IGdvIGZpbmlzaAorCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMAkjIHllczsgc2V0IHN0aWNreSBiaXQKKworY2FzZTFfc3RpY2t5X2NsZWFyOgorCWFuZC5sCQkmMHhlMDAwMDAwMCwgJWQwCSMgY2xlYXIgYWxsIGJ1dCBHLFIsUworCW1vdi5sCQkoJXNwKSssICVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKKwlydHMKKworIworIyBjYXNlICgzMjw9ZDE8NjQpCisjCisjICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKKyMgJWQxID0gIm4iID0gYW10IHRvIHNoaWZ0CisjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwk8LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT4KKyMJXAkgICBcCQkgICAgICBcCisjCSBcCSAgICBcCQkgICAgICAgXAorIwkgIFwJICAgICBcCQkJLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkgICBcCSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICBcCisjCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCQkgIFwJCSAgICBcCisjCQkJICAgICAgIFwJICAgXAkJICAgICBcCisjCQkJCVwJICAgIFwJCSAgICAgIFwKKyMJCQkJIFwJICAgICBcCQkgICAgICAgXAorIwk8LS0tLS0tLSgzMiktLS0tLS0+PC0obiktPjwtKDMyIC0gbiktPjwtLS0tLS0oMzIpLS0tLS0tLT4KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwwLi4uLi4uLi4uLi4uLi4uMHwwLi4uLjB8IE5FV19MTyAgICAgfGdycwkJfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK2Nhc2VfMjoKKwltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHRlbXAgc3RvcmFnZQorCisJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGV4cG9uZW50ID0gZGVub3JtIHRocmVzaG9sZAorCXN1YmkudwkJJjB4MjAsICVkMQkJIyAlZDEgbm93IGJldHdlZW4gMCBhbmQgMzIKKwltb3YubAkJJjB4MjAsICVkMAorCXN1Yi53CQklZDEsICVkMAkJIyAlZDAgPSAzMiAtICVkMQorCisjIHN1YnRsZSBzdGVwIGhlcmU7IG9yIGluIHRoZSBnLHIscyBhdCB0aGUgYm90dG9tIG9mIEZURU1QX0xPIHRvIG1pbmltaXplCisjIHRoZSBudW1iZXIgb2YgYml0cyB0byBjaGVjayBmb3IgdGhlIHN0aWNreSBkZXRlY3QuCisjIGl0IG9ubHkgcGxheXMgYSByb2xlIGluIHNoaWZ0IGFtb3VudHMgb2YgNjEtNjMuCisJbW92LmIJCUdSUyglYTYpLCAlZDIKKwlvci5iCQklZDIsIDMrRlRFTVBfTE8yKCVhNikKKworCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXsmMDolZDB9LCAlZDIgIyAlZDIgPSBuZXcgRlRFTVBfTE8KKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQwOiYzMn0sICVkMSAjICVkMSA9IG5ldyBHLFIsUworCisJYmZ0c3QJCSVkMXsmMjomMzB9CQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CisJYm5lLmIJCWNhc2UyX3NldF9zdGlja3kJIyB5ZXM7IHNldCBzdGlja3kgYml0CisJYmZ0c3QJCUZURU1QX0xPMiglYTYpeyVkMDomMzF9CSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTJfc2V0X3N0aWNreQkjIHllczsgc2V0IHN0aWNreSBiaXQKKworCW1vdi5sCQklZDEsICVkMAkJIyBtb3ZlIG5ldyBHLFIsUyB0byAlZDAKKwlicmEuYgkJY2FzZTJfZW5kCisKK2Nhc2UyX3NldF9zdGlja3k6CisJbW92LmwJCSVkMSwgJWQwCQkjIG1vdmUgbmV3IEcsUixTIHRvICVkMAorCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMAkjIHNldCBzdGlja3kgYml0CisKK2Nhc2UyX2VuZDoKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBzdG9yZSBGVEVNUF9ISSA9IDAKKwltb3YubAkJJWQyLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgRlRFTVBfTE8KKwlhbmQubAkJJjB4ZTAwMDAwMDAsICVkMAkjIGNsZWFyIGFsbCBidXQgRyxSLFMKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgorCXJ0cworCisjCisjIGNhc2UgKGQxPj02NCkKKyMKKyMgJWQwID0gZGVub3JtIHRocmVzaG9sZAorIyAlZDEgPSBhbXQgdG8gc2hpZnQKKyMKK2Nhc2VfMzoKKwltb3YudwkJJWQwLCBGVEVNUF9FWCglYTApCSMgaW5zZXJ0IGRlbm9ybSB0aHJlc2hvbGQKKworCWNtcGkudwkJJWQxLCAmNjUJCSMgaXMgc2hpZnQgYW10ID4gNjU/CisJYmx0LmIJCWNhc2UzXzY0CQkjIG5vOyBpdCdzID09IDY0CisJYmVxLmIJCWNhc2UzXzY1CQkjIG5vOyBpdCdzID09IDY1CisKKyMKKyMgY2FzZSAoZDE+NjUpCisjCisjIFNoaWZ0IHZhbHVlIGlzID4gNjUgYW5kIG91dCBvZiByYW5nZS4gQWxsIGJpdHMgYXJlIHNoaWZ0ZWQgb2ZmLgorIyBSZXR1cm4gYSB6ZXJvIG1hbnRpc3NhIHdpdGggdGhlIHN0aWNreSBiaXQgc2V0CisjCisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgY2xlYXIgaGkobWFudGlzc2EpCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCisJbW92LmwJCSYweDIwMDAwMDAwLCAlZDAJIyBzZXQgc3RpY2t5IGJpdAorCXJ0cworCisjCisjIGNhc2UgKGQxID09IDY0KQorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0tLS0tLS0oMzIpLS0tLS0tPgorIwlcCQkgICBcCisjCSBcCQkgICAgXAorIwkgIFwJCSAgICAgXAorIwkgICBcCQkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgICBcCisjCQkJCQkgICBcCQkgICAgIFwKKyMJCQkJCSAgICBcCQkgICAgICBcCisjCQkJCQkgICAgIFwJCSAgICAgICBcCisjCQkJCQkgICAgICA8LS0tLS0tLSgzMiktLS0tLS0+CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4uLi4uLi4uLi4uLi4wfGdycwkJfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK2Nhc2UzXzY0OgorCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBmZXRjaCBoaShtYW50aXNzYSkKKwltb3YubAkJJWQwLCAlZDEJCSMgbWFrZSBhIGNvcHkKKwlhbmQubAkJJjB4YzAwMDAwMDAsICVkMAkjIGV4dHJhY3QgRyxSCisJYW5kLmwJCSYweDNmZmZmZmZmLCAlZDEJIyBleHRyYWN0IG90aGVyIGJpdHMKKworCWJyYS5iCQljYXNlM19jb21wbGV0ZQorCisjCisjIGNhc2UgKGQxID09IDY1KQorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0tLS0tLS0oMzIpLS0tLS0tPgorIwlcCQkgICBcCisjCSBcCQkgICAgXAorIwkgIFwJCSAgICAgXAorIwkgICBcCQkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICAgXAorIwkJCQkJICAgIFwJCSAgICAgXAorIwkJCQkJICAgICBcCQkgICAgICBcCisjCQkJCQkgICAgICBcCQkgICAgICAgXAorIwkJCQkJICAgICAgIDwtLS0tLS0tKDMxKS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uLi4uLi4uLi4uLi4uMHwwcnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlM182NToKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgZmV0Y2ggaGkobWFudGlzc2EpCisJYW5kLmwJCSYweDgwMDAwMDAwLCAlZDAJIyBleHRyYWN0IFIgYml0CisJbHNyLmwJCSYweDEsICVkMAkJIyBzaGlmdCBoaWdoIGJpdCBpbnRvIFIgYml0CisJYW5kLmwJCSYweDdmZmZmZmZmLCAlZDEJIyBleHRyYWN0IG90aGVyIGJpdHMKKworY2FzZTNfY29tcGxldGU6CisjIGxhc3Qgb3BlcmF0aW9uIGRvbmUgd2FzIGFuICJhbmQiIG9mIHRoZSBiaXRzIHNoaWZ0ZWQgb2ZmIHNvIHRoZSBjb25kaXRpb24KKyMgY29kZXMgYXJlIGFscmVhZHkgc2V0IHNvIGJyYW5jaCBhY2NvcmRpbmdseS4KKwlibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJuZS5iCQljYXNlM19zZXRfc3RpY2t5CSMgeWVzOyBnbyBzZXQgbmV3IHN0aWNreQorCXRzdC5iCQlHUlMoJWE2KQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJuZS5iCQljYXNlM19zZXRfc3RpY2t5CSMgeWVzOyBnbyBzZXQgbmV3IHN0aWNreQorCisjCisjIG5vIGJpdHMgd2VyZSBzaGlmdGVkIG9mZiBzbyBkb24ndCBzZXQgdGhlIHN0aWNreSBiaXQuCisjIHRoZSBndWFyZCBhbmQKKyMgdGhlIGVudGlyZSBtYW50aXNzYSBpcyB6ZXJvLgorIworCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQorCXJ0cworCisjCisjIHNvbWUgYml0cyB3ZXJlIHNoaWZ0ZWQgb2ZmIHNvIHNldCB0aGUgc3RpY2t5IGJpdC4KKyMgdGhlIGVudGlyZSBtYW50aXNzYSBpcyB6ZXJvLgorIworY2FzZTNfc2V0X3N0aWNreToKKwlic2V0CQkmcm5kX3N0a3lfYml0LCVkMAkjIHNldCBuZXcgc3RpY2t5IGJpdAorCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yb3VuZCgpOiByb3VuZCByZXN1bHQgYWNjb3JkaW5nIHRvIHByZWNpc2lvbi9tb2RlCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMAkgID0gcHRyIHRvIGlucHV0IG9wZXJhbmQgaW4gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0CSMKKyMJZDEoaGkpICAgID0gY29udGFpbnMgcm91bmRpbmcgcHJlY2lzaW9uOgkJCSMKKyMJCQlleHQgPSAkMDAwMHh4eHgJCQkJCSMKKyMJCQlzZ2wgPSAkMDAwNHh4eHgJCQkJCSMKKyMJCQlkYmwgPSAkMDAwOHh4eHgJCQkJCSMKKyMJZDEobG8pCSAgPSBjb250YWlucyByb3VuZGluZyBtb2RlOgkJCQkjCisjCQkJUk4gID0gJHh4eHgwMDAwCQkJCQkjCisjCQkJUlogID0gJHh4eHgwMDAxCQkJCQkjCisjCQkJUk0gID0gJHh4eHgwMDAyCQkJCQkjCisjCQkJUlAgID0gJHh4eHgwMDAzCQkJCQkjCisjCWQwezMxOjI5fSA9IGNvbnRhaW5zIHRoZSBnLHIscyBiaXRzIChleHRlbmRlZCkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gcm91bmRlZCByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU9uIHJldHVybiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBhMCBpcyBjb3JyZWN0bHkgcm91bmRlZCwJIworIwlhMCBpcyBwcmVzZXJ2ZWQgYW5kIHRoZSBnLXItcyBiaXRzIGluIGQwIGFyZSBjbGVhcmVkLgkJIworIwlUaGUgcmVzdWx0IGlzIG5vdCB0eXBlZCAtIHRoZSB0YWcgZmllbGQgaXMgaW52YWxpZC4gIFRoZQkjCisjCXJlc3VsdCBpcyBzdGlsbCBpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0LgkJIworIwkJCQkJCQkJCSMKKyMJVGhlIElORVggYml0IG9mIFVTRVJfRlBTUiB3aWxsIGJlIHNldCBpZiB0aGUgcm91bmRlZCByZXN1bHQgd2FzCSMKKyMJaW5leGFjdCAoaS5lLiBpZiBhbnkgb2YgdGhlIGctci1zIGJpdHMgd2VyZSBzZXQpLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX3JvdW5kCitfcm91bmQ6CisjCisjIGV4dF9ncnMoKSBsb29rcyBhdCB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIGFuZCBzZXRzIHRoZSBhcHByb3ByaWF0ZQorIyBHLFIsUyBiaXRzLgorIyBJZiAoRyxSLFMgPT0gMCkgdGhlbiByZXN1bHQgaXMgZXhhY3QgYW5kIHJvdW5kIGlzIGRvbmUsIGVsc2Ugc2V0CisjIHRoZSBpbmV4IGZsYWcgaW4gc3RhdHVzIHJlZyBhbmQgY29udGludWUuCisjCisJYnNyLmwJCWV4dF9ncnMJCQkjIGV4dHJhY3QgRyxSLFMKKworCXRzdC5sCQklZDAJCQkjIGFyZSBHLFIsUyB6ZXJvPworCWJlcS53CQl0cnVuY2F0ZQkJIyB5ZXM7IHJvdW5kIGlzIGNvbXBsZXRlCisKKwlvci53CQkmaW54MmFfbWFzaywgMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBpbmV4Mi9haW5leAorCisjCisjIFVzZSByb3VuZGluZyBtb2RlIGFzIGFuIGluZGV4IGludG8gYSBqdW1wIHRhYmxlIGZvciB0aGVzZSBtb2Rlcy4KKyMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgYXNzdW1lcyBncnMgIT0gMC4KKyMKKwltb3YudwkJKHRibF9tb2RlLmIsJXBjLCVkMS53KjIpLCAlYTEgIyBsb2FkIGp1bXAgb2Zmc2V0CisJam1wCQkodGJsX21vZGUuYiwlcGMsJWExKQkjIGptcCB0byBybmQgbW9kZSBoYW5kbGVyCisKK3RibF9tb2RlOgorCXNob3J0CQlybmRfbmVhciAtIHRibF9tb2RlCisJc2hvcnQJCXRydW5jYXRlIC0gdGJsX21vZGUJIyBSWiBhbHdheXMgdHJ1bmNhdGVzCisJc2hvcnQJCXJuZF9tbnVzIC0gdGJsX21vZGUKKwlzaG9ydAkJcm5kX3BsdXMgLSB0YmxfbW9kZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlST1VORCBQTFVTIElORklOSVRZCQkJCQkjCisjCQkJCQkJCQkjCisjCUlmIHNpZ24gb2YgZnAgbnVtYmVyID0gMCAocG9zaXRpdmUpLCB0aGVuIGFkZCAxIHRvIGwuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitybmRfcGx1czoKKwl0c3QuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2hlY2sgZm9yIHNpZ24KKwlibWkudwkJdHJ1bmNhdGUJCSMgaWYgcG9zaXRpdmUgdGhlbiB0cnVuY2F0ZQorCisJbW92LmwJCSYweGZmZmZmZmZmLCAlZDAJIyBmb3JjZSBnLHIscyB0byBiZSBhbGwgZidzCisJc3dhcAkJJWQxCQkJIyBzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjID0gc2dsPworCWJlcS53CQlhZGRfc2dsCQkJIyB5ZXMKKwliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCisJYnJhLncJCWFkZF9leHQJCQkjIG5vOyBpdCdzIGV4dAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlST1VORCBNSU5VUyBJTkZJTklUWQkJCQkJIworIwkJCQkJCQkJIworIwlJZiBzaWduIG9mIGZwIG51bWJlciA9IDEgKG5lZ2F0aXZlKSwgdGhlbiBhZGQgMSB0byBsLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcm5kX21udXM6CisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGNoZWNrIGZvciBzaWduCisJYnBsLncJCXRydW5jYXRlCQkjIGlmIG5lZ2F0aXZlIHRoZW4gdHJ1bmNhdGUKKworCW1vdi5sCQkmMHhmZmZmZmZmZiwgJWQwCSMgZm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncworCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyA9IHNnbD8KKwliZXEudwkJYWRkX3NnbAkJCSMgeWVzCisJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAorCWJyYS53CQlhZGRfZXh0CQkJIyBubzsgaXQncyBleHQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJUk9VTkQgTkVBUkVTVAkJCQkJCSMKKyMJCQkJCQkJCSMKKyMJSWYgKGc9MSksIHRoZW4gYWRkIDEgdG8gbCBhbmQgaWYgKHI9cz0wKSwgdGhlbiBjbGVhciBsCSMKKyMJTm90ZSB0aGF0IHRoaXMgd2lsbCByb3VuZCB0byBldmVuIGluIGNhc2Ugb2YgYSB0aWUuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitybmRfbmVhcjoKKwlhc2wubAkJJjB4MSwgJWQwCQkjIHNoaWZ0IGctYml0IHRvIGMtYml0CisJYmNjLncJCXRydW5jYXRlCQkjIGlmIChnPTEpIHRoZW4KKworCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyA9IHNnbD8KKwliZXEudwkJYWRkX3NnbAkJCSMgeWVzCisJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAorCWJyYS53CQlhZGRfZXh0CQkJIyBubzsgaXQncyBleHQKKworIyAqKiogTE9DQUwgRVFVQVRFUyAqKioKK3NldAlhZF8xX3NnbCwJMHgwMDAwMDEwMAkjIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIHNnbCBwcmVjCitzZXQJYWRfMV9kYmwsCTB4MDAwMDA4MDAJIyBjb25zdGFudCB0byBhZGQgMSB0byBsLWJpdCBpbiBkYmwgcHJlYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCUFERCBTSU5HTEUJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkX3NnbDoKKwlhZGQubAkJJmFkXzFfc2dsLCBGVEVNUF9ISSglYTApCisJYmNjLmIJCXNjY19jbHIJCQkjIG5vIG1hbnRpc3NhIG92ZXJmbG93CisJcm94ci53CQlGVEVNUF9ISSglYTApCQkjIHNoaWZ0IHYtYml0IGJhY2sgaW4KKwlyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBzaGlmdCB2LWJpdCBiYWNrIGluCisJYWRkLncJCSYweDEsIEZURU1QX0VYKCVhMCkJIyBhbmQgaW5jciBleHBvbmVudAorc2NjX2NscjoKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IGZvciBycyA9IDAKKwlibmUuYgkJc2dsX2RvbmUKKwlhbmQudwkJJjB4ZmUwMCwgRlRFTVBfSEkrMiglYTApICMgY2xlYXIgdGhlIGwtYml0CitzZ2xfZG9uZToKKwlhbmQubAkJJjB4ZmZmZmZmMDAsIEZURU1QX0hJKCVhMCkgIyB0cnVuY2F0ZSBiaXRzIGJleW9uZCBzZ2wgbGltaXQKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBkMgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCUFERCBFWFRFTkRFRAkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRfZXh0OgorCWFkZHEubAkJJjEsRlRFTVBfTE8oJWEwKQkjIGFkZCAxIHRvIGwtYml0CisJYmNjLmIJCXhjY19jbHIJCQkjIHRlc3QgZm9yIGNhcnJ5IG91dAorCWFkZHEubAkJJjEsRlRFTVBfSEkoJWEwKQkjIHByb3BhZ2F0ZSBjYXJyeQorCWJjYy5iCQl4Y2NfY2xyCisJcm94ci53CQlGVEVNUF9ISSglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0CisJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hyLncJCUZURU1QX0xPKCVhMCkKKwlyb3hyLncJCUZURU1QX0xPKzIoJWEwKQorCWFkZC53CQkmMHgxLEZURU1QX0VYKCVhMCkJIyBhbmQgaW5jIGV4cAoreGNjX2NscjoKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IHJzID0gMAorCWJuZS5iCQlhZGRfZXh0X2RvbmUKKwlhbmQuYgkJJjB4ZmUsRlRFTVBfTE8rMyglYTApCSMgY2xlYXIgdGhlIGwgYml0CithZGRfZXh0X2RvbmU6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJQUREIERPVUJMRQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRfZGJsOgorCWFkZC5sCQkmYWRfMV9kYmwsIEZURU1QX0xPKCVhMCkgIyBhZGQgMSB0byBsc2IKKwliY2MuYgkJZGNjX2NscgkJCSMgbm8gY2FycnkKKwlhZGRxLmwJCSYweDEsIEZURU1QX0hJKCVhMCkJIyBwcm9wYWdhdGUgY2FycnkKKwliY2MuYgkJZGNjX2NscgkJCSMgbm8gY2FycnkKKworCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfSEkrMiglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0CisJcm94ci53CQlGVEVNUF9MTyglYTApCisJcm94ci53CQlGVEVNUF9MTysyKCVhMCkKKwlhZGRxLncJCSYweDEsIEZURU1QX0VYKCVhMCkJIyBpbmNyIGV4cG9uZW50CitkY2NfY2xyOgorCXRzdC5sCQklZDAJCQkjIHRlc3QgZm9yIHJzID0gMAorCWJuZS5iCQlkYmxfZG9uZQorCWFuZC53CQkmMHhmMDAwLCBGVEVNUF9MTysyKCVhMCkgIyBjbGVhciB0aGUgbC1iaXQKKworZGJsX2RvbmU6CisJYW5kLmwJCSYweGZmZmZmODAwLEZURU1QX0xPKCVhMCkgIyB0cnVuY2F0ZSBiaXRzIGJleW9uZCBkYmwgbGltaXQKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRydW5jYXRlIGFsbCBvdGhlciBiaXRzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordHJ1bmNhdGU6CisJc3dhcAkJJWQxCQkJIyBzZWxlY3Qgcm5kIHByZWMKKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgc2dsPworCWJlcS53CQlzZ2xfZG9uZQkJIyB5ZXMKKwliZ3QuYgkJZGJsX2RvbmUJCSMgbm87IGl0J3MgZGJsCisJcnRzCQkJCQkjIG5vOyBpdCdzIGV4dAorCisKKyMKKyMgZXh0X2dycygpOiBleHRyYWN0IGd1YXJkLCByb3VuZCBhbmQgc3RpY2t5IGJpdHMgYWNjb3JkaW5nIHRvCisjCSAgICAgcm91bmRpbmcgcHJlY2lzaW9uLgorIworIyBJTlBVVAorIwlkMAkgICA9IGV4dGVuZGVkIHByZWNpc2lvbiBnLHIscyAoaW4gZDB7MzE6Mjl9KQorIwlkMQkgICA9IHtQUkVDLFJPVU5EfQorIyBPVVRQVVQKKyMJZDB7MzE6Mjl9ICA9IGd1YXJkLCByb3VuZCwgc3RpY2t5CisjCisjIFRoZSBleHRfZ3JzIGV4dHJhY3QgdGhlIGd1YXJkL3JvdW5kL3N0aWNreSBiaXRzIGFjY29yZGluZyB0byB0aGUKKyMgc2VsZWN0ZWQgcm91bmRpbmcgcHJlY2lzaW9uLiBJdCBpcyBjYWxsZWQgYnkgdGhlIHJvdW5kIHN1YnJvdXRpbmUKKyMgb25seS4gIEFsbCByZWdpc3RlcnMgZXhjZXB0IGQwIGFyZSBrZXB0IGludGFjdC4gZDAgYmVjb21lcyBhbgorIyB1cGRhdGVkIGd1YXJkLHJvdW5kLHN0aWNreSBpbiBkMHszMToyOX0KKyMKKyMgTm90ZXM6IHRoZSBleHRfZ3JzIHVzZXMgdGhlIHJvdW5kIFBSRUMsIGFuZCB0aGVyZWZvcmUgaGFzIHRvIHN3YXAgZDEKKyMJIHByaW9yIHRvIHVzYWdlLCBhbmQgbmVlZHMgdG8gcmVzdG9yZSBkMSB0byBvcmlnaW5hbC4gdGhpcworIwkgcm91dGluZSBpcyB0aWdodGx5IHRpZWQgdG8gdGhlIHJvdW5kIHJvdXRpbmUgYW5kIG5vdCBtZWFudCB0bworIwkgdXBob2xkIHN0YW5kYXJkIHN1YnJvdXRpbmUgY2FsbGluZyBwcmFjdGljZXMuCisjCisKK2V4dF9ncnM6CisJc3dhcAkJJWQxCQkJIyBoYXZlIGQxLncgcG9pbnQgdG8gcm91bmQgcHJlY2lzaW9uCisJdHN0LmIJCSVkMQkJCSMgaXMgcm5kIHByZWMgPSBleHRlbmRlZD8KKwlibmUuYgkJZXh0X2dyc19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisjCisjICVkMCBhY3R1YWxseSBhbHJlYWR5IGhvbGQgZyxyLHMgc2luY2UgX3JvdW5kKCkgaGFkIGl0IGJlZm9yZSBjYWxsaW5nCisjIHRoaXMgZnVuY3Rpb24uIHNvLCBhcyBsb25nIGFzIHdlIGRvbid0IGRpc3R1cmIgaXQsIHdlIGFyZSAicmV0dXJuaW5nIiBpdC4KKyMKK2V4dF9ncnNfZXh0OgorCXN3YXAJCSVkMQkJCSMgeWVzOyByZXR1cm4gdG8gY29ycmVjdCBwb3NpdGlvbnMKKwlydHMKKworZXh0X2dyc19ub3RfZXh0OgorCW1vdm0ubAkJJjB4MzAwMCwgLSglc3ApCQkjIG1ha2Ugc29tZSB0ZW1wIHJlZ2lzdGVycyB7ZDIvZDN9CisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBybmQgcHJlYyA9IHNnbD8KKwlibmUuYgkJZXh0X2dyc19kYmwJCSMgbm87IGdvIGhhbmRsZSBkYmwKKworIworIyBzZ2w6CisjCTk2CQk2NAkgIDQwCTMyCQkwCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgRVhQCXxYWFhYWFhYfAkgIHx4eAl8CQl8Z3JzfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkJCTwtLSgyNCktLS0+bm5cCQkJICAgLworIwkJCQkgICBlZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJCQkJICAgd3cJCXwKKyMJCQkJCQl2CisjCQkJCSAgIGdyCSAgIG5ldyBzdGlja3kKKyMKK2V4dF9ncnNfc2dsOgorCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXsmMjQ6JjJ9LCAlZDMgIyBzZ2wgcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKKwltb3YubAkJJjMwLCAlZDIJCSMgb2YgdGhlIHNnbCBwcmVjLiBsaW1pdHMKKwlsc2wubAkJJWQyLCAlZDMJCSMgc2hpZnQgZy1yIGJpdHMgdG8gTVNCIG9mIGQzCisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMgkjIGdldCB3b3JkIDIgZm9yIHMtYml0IHRlc3QKKwlhbmQubAkJJjB4MDAwMDAwM2YsICVkMgkjIHMgYml0IGlzIHRoZSBvciBvZiBhbGwgb3RoZXIKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgorCXRzdC5sCQlGVEVNUF9MTyglYTApCQkjIHRlc3QgbG93ZXIgbWFudGlzc2EKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBvcmlnaW5hbCBnLHIscworCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgaWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKKwlicmEuYgkJZXh0X2dyc19lbmRfc2QJCSMgaWYgd29yZHMgMyBhbmQgNCBhcmUgY2xyLCBleGl0CisKKyMKKyMgZGJsOgorIwk5NgkJNjQJCTMyCSAxMQkwCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgRVhQCXxYWFhYWFhYfAkJfAkgfHh4CXxncnN8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCQkJCQkJICBublwJICAgIC8KKyMJCQkJCQkgIGVlIC0tLS0tLS0KKyMJCQkJCQkgIHd3CXwKKyMJCQkJCQkJdgorIwkJCQkJCSAgZ3IJbmV3IHN0aWNreQorIworZXh0X2dyc19kYmw6CisJYmZleHR1CQlGVEVNUF9MTyglYTApeyYyMTomMn0sICVkMyAjIGRibC1wcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAorCW1vdi5sCQkmMzAsICVkMgkJIyBvZiB0aGUgZGJsIHByZWMuIGxpbWl0cworCWxzbC5sCQklZDIsICVkMwkJIyBzaGlmdCBnLXIgYml0cyB0byB0aGUgTVNCIG9mIGQzCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMgkjIGdldCBsb3dlciBtYW50aXNzYSAgZm9yIHMtYml0IHRlc3QKKwlhbmQubAkJJjB4MDAwMDAxZmYsICVkMgkjIHMgYml0IGlzIHRoZSBvci1pbmcgb2YgYWxsCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBvdGhlciBiaXRzIHRvIHRoZSByaWdodCBvZiBnLXIKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IHdvcmQgb3JpZ2luYWwgZyxyLHMKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CisJYnJhLmIJCWV4dF9ncnNfZW5kX3NkCQkjIGlmIGNsZWFyLCBleGl0CisKK2V4dF9ncnNfc3Rfc3RreToKKwlic2V0CQkmcm5kX3N0a3lfYml0LCAlZDMJIyBzZXQgc3RpY2t5IGJpdAorZXh0X2dyc19lbmRfc2Q6CisJbW92LmwJCSVkMywgJWQwCQkjIHJldHVybiBncnMgdG8gZDAKKworCW1vdm0ubAkJKCVzcCkrLCAmMHhjCQkjIHJlc3RvcmUgc2NyYXRjaCByZWdpc3RlcnMge2QyL2QzfQorCisJc3dhcAkJJWQxCQkJIyByZXN0b3JlIGQxIHRvIG9yaWdpbmFsCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbm9ybSgpOiBub3JtYWxpemUgdGhlIG1hbnRpc3NhIG9mIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dC4gdGhlCSMKKyMJICBpbnB1dCBvcGVyYW5kIHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBhbHJlYWR5LgkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgZnAgZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gbm9ybWFsaXplCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlkMCA9IG51bWJlciBvZiBiaXQgcG9zaXRpb25zIHRoZSBtYW50aXNzYSB3YXMgc2hpZnRlZAkJIworIwlhMCA9IHRoZSBpbnB1dCBvcGVyYW5kJ3MgbWFudGlzc2EgaXMgbm9ybWFsaXplZDsgdGhlIGV4cG9uZW50CSMKKyMJICAgICBpcyB1bmNoYW5nZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCW5vcm0KK25vcm06CisJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSBzb21lIHRlbXAgcmVncworCW1vdi5sCQklZDMsIC0oJXNwKQorCisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGxvYWQgaGkobWFudGlzc2EpCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMQkjIGxvYWQgbG8obWFudGlzc2EpCisKKwliZmZmbwkJJWQweyYwOiYzMn0sICVkMgkjIGhvdyBtYW55IHBsYWNlcyB0byBzaGlmdD8KKwliZXEuYgkJbm9ybV9sbwkJCSMgaGkobWFuKSBpcyBhbGwgemVyb2VzIQorCitub3JtX2hpOgorCWxzbC5sCQklZDIsICVkMAkJIyBsZWZ0IHNoaWZ0IGhpKG1hbikKKwliZmV4dHUJCSVkMXsmMDolZDJ9LCAlZDMJIyBleHRyYWN0IGxvIGJpdHMKKworCW9yLmwJCSVkMywgJWQwCQkjIGNyZWF0ZSBoaShtYW4pCisJbHNsLmwJCSVkMiwgJWQxCQkjIGNyZWF0ZSBsbyhtYW4pCisKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKKwltb3YubAkJJWQxLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgbmV3IGxvKG1hbikKKworCW1vdi5sCQklZDIsICVkMAkJIyByZXR1cm4gc2hpZnQgYW1vdW50CisKKwltb3YubAkJKCVzcCkrLCAlZDMJCSMgcmVzdG9yZSB0ZW1wIHJlZ3MKKwltb3YubAkJKCVzcCkrLCAlZDIKKworCXJ0cworCitub3JtX2xvOgorCWJmZmZvCQklZDF7JjA6JjMyfSwgJWQyCSMgaG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0PworCWxzbC5sCQklZDIsICVkMQkJIyBzaGlmdCBsbyhtYW4pCisJYWRkLmwJCSYzMiwgJWQyCQkjIGFkZCAzMiB0byBzaGZ0IGFtb3VudAorCisJbW92LmwJCSVkMSwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIGhpKG1hbikKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBsbyhtYW4pIGlzIG5vdyB6ZXJvCisKKwltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAorCisJbW92LmwJCSglc3ApKywgJWQzCQkjIHJlc3RvcmUgdGVtcCByZWdzCisJbW92LmwJCSglc3ApKywgJWQyCisKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB1bm5vcm1fZml4KCk6IC0gY2hhbmdlcyBhbiBVTk5PUk0gdG8gb25lIG9mIE5PUk0sIERFTk9STSwgb3IgWkVSTwkjCisjCQktIHJldHVybnMgY29ycmVzcG9uZGluZyBvcHR5cGUgdGFnCQkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdW5ub3JtX2ZpeCgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byB1bm5vcm1hbGl6ZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlcgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDAgPSBvcHR5cGUgdGFnIC0gaXMgY29ycmVjdGVkIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIworIwlhMCA9IGlucHV0IG9wZXJhbmQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgbm9ybSwgZGVub3JtLCBvcgkjCisjCSAgICAgemVybzsgYm90aCB0aGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhIGFyZSBjaGFuZ2VkLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdW5ub3JtX2ZpeAordW5ub3JtX2ZpeDoKKwliZmZmbwkJRlRFTVBfSEkoJWEwKXsmMDomMzJ9LCAlZDAgIyBob3cgbWFueSBzaGlmdHMgYXJlIG5lZWRlZD8KKwlibmUuYgkJdW5ub3JtX3NoaWZ0CQkjIGhpKG1hbikgaXMgbm90IGFsbCB6ZXJvZXMKKworIworIyBoaShtYW4pIGlzIGFsbCB6ZXJvZXMgc28gc2VlIGlmIGFueSBiaXRzIGluIGxvKG1hbikgYXJlIHNldAorIwordW5ub3JtX2Noa19sbzoKKwliZmZmbwkJRlRFTVBfTE8oJWEwKXsmMDomMzJ9LCAlZDAgIyBpcyBvcGVyYW5kIHJlYWxseSBhIHplcm8/CisJYmVxLncJCXVubm9ybV96ZXJvCQkjIHllcworCisJYWRkLncJCSYzMiwgJWQwCQkjIG5vOyBmaXggc2hpZnQgZGlzdGFuY2UKKworIworIyBkMCA9ICMgc2hpZnRzIG5lZWRlZCBmb3IgY29tcGxldGUgbm9ybWFsaXphdGlvbgorIwordW5ub3JtX3NoaWZ0OgorCWNsci5sCQklZDEJCQkjIGNsZWFyIHRvcCB3b3JkCisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmQudwkJJjB4N2ZmZiwgJWQxCQkjIHN0cmlwIG9mZiBzZ24KKworCWNtcC53CQklZDAsICVkMQkJIyB3aWxsIGRlbm9ybSBwdXNoIGV4cCA8IDA/CisJYmd0LmIJCXVubm9ybV9ucm1femVybwkJIyB5ZXM7IGRlbm9ybSBvbmx5IHVudGlsIGV4cCA9IDAKKworIworIyBleHBvbmVudCB3b3VsZCBub3QgZ28gPCAwLiB0aGVyZWZvcmUsIG51bWJlciBzdGF5cyBub3JtYWxpemVkCisjCisJc3ViLncJCSVkMCwgJWQxCQkjIHNoaWZ0IGV4cG9uZW50IHZhbHVlCisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMAkjIGxvYWQgb2xkIGV4cG9uZW50CisJYW5kLncJCSYweDgwMDAsICVkMAkJIyBzYXZlIG9sZCBzaWduCisJb3IudwkJJWQwLCAlZDEJCSMge3NnbixuZXcgZXhwfQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIFVOTk9STQorCisJbW92LmIJCSZOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgZXhwb25lbnQgd291bGQgZ28gPCAwLCBzbyBvbmx5IGRlbm9ybWFsaXplIHVudGlsIGV4cCA9IDAKKyMKK3Vubm9ybV9ucm1femVybzoKKwljbXAuYgkJJWQxLCAmMzIJCSMgaXMgZXhwIDw9IDMyPworCWJndC5iCQl1bm5vcm1fbnJtX3plcm9fbHJnCSMgbm87IGdvIGhhbmRsZSBsYXJnZSBleHBvbmVudAorCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMTomMzJ9LCAlZDAgIyBleHRyYWN0IG5ldyBoaShtYW4pCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHNhdmUgbmV3IGhpKG1hbikKKworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQorCWxzbC5sCQklZDEsICVkMAkJIyBleHRyYWN0IG5ldyBsbyhtYW4pCisJbW92LmwJCSVkMCwgRlRFTVBfTE8oJWEwKQkjIHNhdmUgbmV3IGxvKG1hbikKKworCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgc2V0IGV4cCA9IDAKKworCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgb25seSBtYW50aXNzYSBiaXRzIHNldCBhcmUgaW4gbG8obWFuKQorIwordW5ub3JtX25ybV96ZXJvX2xyZzoKKwlzdWIudwkJJjMyLCAlZDEJCSMgYWRqdXN0IHNoZnQgYW10IGJ5IDMyCisKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQwCSMgZmV0Y2ggb2xkIGxvKG1hbikKKwlsc2wubAkJJWQxLCAlZDAJCSMgbGVmdCBzaGlmdCBsbyhtYW4pCisKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBsbyhtYW4pID0gMAorCisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAorCisJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyB3aG9sZSBtYW50aXNzYSBpcyB6ZXJvIHNvIHRoaXMgVU5OT1JNIGlzIGFjdHVhbGx5IGEgemVybworIwordW5ub3JtX3plcm86CisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBmb3JjZSBleHBvbmVudCB0byB6ZXJvCisKKwltb3YuYgkJJlpFUk8sICVkMAkJIyBmaXggb3B0eXBlIHRhZworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNldF90YWdfeCgpOiByZXR1cm4gdGhlIG9wdHlwZSBvZiB0aGUgaW5wdXQgZXh0IGZwIG51bWJlcgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHR5cGUgdGFnCQkJCQkJIworIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgVU5OT1JNLCBaRVJPCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKKyMgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG9wZXJhbmQuCQkJCQkjCisjCUlmIGl0J3MgYW4gdW5ub3JtYWxpemVkIHplcm8sIGFsdGVyIHRoZSBvcGVyYW5kIGFuZCBmb3JjZSBpdAkjCisjIHRvIGJlIGEgbm9ybWFsIHplcm8uCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNldF90YWdfeAorc2V0X3RhZ194OgorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCAlZDAJCSMgc3RyaXAgb2ZmIHNpZ24KKwljbXBpLncJCSVkMCwgJjB4N2ZmZgkJIyBpcyAoRVhQID09IE1BWCk/CisJYmVxLmIJCWluZl9vcl9uYW5feAorbm90X2luZl9vcl9uYW5feDoKKwlidHN0CQkmMHg3LEZURU1QX0hJKCVhMCkKKwliZXEuYgkJbm90X25vcm1feAoraXNfbm9ybV94OgorCW1vdi5iCQkmTk9STSwgJWQwCisJcnRzCitub3Rfbm9ybV94OgorCXRzdC53CQklZDAJCQkjIGlzIGV4cG9uZW50ID0gMD8KKwlibmUuYgkJaXNfdW5ub3JtX3gKK25vdF91bm5vcm1feDoKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQorCWJuZS5iCQlpc19kZW5vcm1feAorCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCWlzX2Rlbm9ybV94Citpc196ZXJvX3g6CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX2Rlbm9ybV94OgorCW1vdi5iCQkmREVOT1JNLCAlZDAKKwlydHMKKyMgbXVzdCBkaXN0aW5ndWlzaCBub3cgIlVubm9ybWFsaXplZCB6ZXJvZXMiIHdoaWNoIHdlCisjIG11c3QgY29udmVydCB0byB6ZXJvLgoraXNfdW5ub3JtX3g6CisJdHN0LmwJCUZURU1QX0hJKCVhMCkKKwlibmUuYgkJaXNfdW5ub3JtX3JlZ194CisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJaXNfdW5ub3JtX3JlZ194CisjIGl0J3MgYW4gInVubm9ybWFsaXplZCB6ZXJvIi4gbGV0J3MgY29udmVydCBpdCB0byBhbiBhY3R1YWwgemVyby4uLgorCWFuZGkudwkJJjB4ODAwMCxGVEVNUF9FWCglYTApCSMgY2xlYXIgZXhwb25lbnQKKwltb3YuYgkJJlpFUk8sICVkMAorCXJ0cworaXNfdW5ub3JtX3JlZ194OgorCW1vdi5iCQkmVU5OT1JNLCAlZDAKKwlydHMKK2luZl9vcl9uYW5feDoKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc19uYW5feAorCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAKKwlhbmQubAkJJjB4N2ZmZmZmZmYsICVkMAkjIG1zYiBpcyBhIGRvbid0IGNhcmUhCisJYm5lLmIJCWlzX25hbl94Citpc19pbmZfeDoKKwltb3YuYgkJJklORiwgJWQwCisJcnRzCitpc19uYW5feDoKKwlidHN0CQkmMHg2LCBGVEVNUF9ISSglYTApCisJYmVxLmIJCWlzX3NuYW5feAorCW1vdi5iCQkmUU5BTiwgJWQwCisJcnRzCitpc19zbmFuX3g6CisJbW92LmIJCSZTTkFOLCAlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzZXRfdGFnX2QoKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGRibCBmcCBudW1iZXIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludHMgdG8gZG91YmxlIHByZWNpc2lvbiBvcGVyYW5kCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCisjCQlvbmUgb2Y6IE5PUk0sIElORiwgUU5BTiwgU05BTiwgREVOT1JNLCBaRVJPCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCisjIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2V0X3RhZ19kCitzZXRfdGFnX2Q6CisJbW92LmwJCUZURU1QKCVhMCksICVkMAorCW1vdi5sCQklZDAsICVkMQorCisJYW5kaS5sCQkmMHg3ZmYwMDAwMCwgJWQwCisJYmVxLmIJCXplcm9fb3JfZGVub3JtX2QKKworCWNtcGkubAkJJWQwLCAmMHg3ZmYwMDAwMAorCWJlcS5iCQlpbmZfb3JfbmFuX2QKKworaXNfbm9ybV9kOgorCW1vdi5iCQkmTk9STSwgJWQwCisJcnRzCit6ZXJvX29yX2Rlbm9ybV9kOgorCWFuZC5sCQkmMHgwMDBmZmZmZiwgJWQxCisJYm5lCQlpc19kZW5vcm1fZAorCXRzdC5sCQk0K0ZURU1QKCVhMCkKKwlibmUJCWlzX2Rlbm9ybV9kCitpc196ZXJvX2Q6CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX2Rlbm9ybV9kOgorCW1vdi5iCQkmREVOT1JNLCAlZDAKKwlydHMKK2luZl9vcl9uYW5fZDoKKwlhbmQubAkJJjB4MDAwZmZmZmYsICVkMQorCWJuZQkJaXNfbmFuX2QKKwl0c3QubAkJNCtGVEVNUCglYTApCisJYm5lCQlpc19uYW5fZAoraXNfaW5mX2Q6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX2Q6CisJYnRzdAkJJjE5LCAlZDEKKwlibmUJCWlzX3FuYW5fZAoraXNfc25hbl9kOgorCW1vdi5iCQkmU05BTiwgJWQwCisJcnRzCitpc19xbmFuX2Q6CisJbW92LmIJCSZRTkFOLCAlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzZXRfdGFnX3MoKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IHNnbCBmcCBudW1iZXIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHNpbmdsZSBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCisjCQlvbmUgb2Y6IE5PUk0sIElORiwgUU5BTiwgU05BTiwgREVOT1JNLCBaRVJPCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCisjIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2V0X3RhZ19zCitzZXRfdGFnX3M6CisJbW92LmwJCUZURU1QKCVhMCksICVkMAorCW1vdi5sCQklZDAsICVkMQorCisJYW5kaS5sCQkmMHg3ZjgwMDAwMCwgJWQwCisJYmVxLmIJCXplcm9fb3JfZGVub3JtX3MKKworCWNtcGkubAkJJWQwLCAmMHg3ZjgwMDAwMAorCWJlcS5iCQlpbmZfb3JfbmFuX3MKKworaXNfbm9ybV9zOgorCW1vdi5iCQkmTk9STSwgJWQwCisJcnRzCit6ZXJvX29yX2Rlbm9ybV9zOgorCWFuZC5sCQkmMHgwMDdmZmZmZiwgJWQxCisJYm5lCQlpc19kZW5vcm1fcworaXNfemVyb19zOgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1fczoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX3M6CisJYW5kLmwJCSYweDAwN2ZmZmZmLCAlZDEKKwlibmUJCWlzX25hbl9zCitpc19pbmZfczoKKwltb3YuYgkJJklORiwgJWQwCisJcnRzCitpc19uYW5fczoKKwlidHN0CQkmMjIsICVkMQorCWJuZQkJaXNfcW5hbl9zCitpc19zbmFuX3M6CisJbW92LmIJCSZTTkFOLCAlZDAKKwlydHMKK2lzX3FuYW5fczoKKwltb3YuYgkJJlFOQU4sICVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXVuZl9yZXMoKTogcm91dGluZSB0byBwcm9kdWNlIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBvZiBhCSMKKyMJCSAgIHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyOyB0aGlzIGlzIHVzZWQgYnkJIworIwkJICAgZmFkZC9mZGl2L2ZtdWwvZXRjLiBlbXVsYXRpb24gcm91dGluZXMuCQkjCisjCXVuZl9yZXM0KCk6IHNhbWUgYXMgYWJvdmUgYnV0IGZvciBmc2dsbXVsL2ZzZ2xkaXYgd2hpY2ggdXNlCSMKKyMJCSAgICBzaW5nbGUgcm91bmQgcHJlYyBhbmQgZXh0ZW5kZWQgcHJlYyBtb2RlLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Rlbm9ybSgpIC0gZGVub3JtYWxpemUgYWNjb3JkaW5nIHRvIHNjYWxlIGZhY3RvcgkJIworIwlfcm91bmQoKSAtIHJvdW5kIGRlbm9ybWFsaXplZCBudW1iZXIgYWNjb3JkaW5nIHRvIHJuZCBwcmVjCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNvbiBvcGVyYW5kCQkJIworIwlkMCA9IHNjYWxlIGZhY3RvcgkJCQkJCSMKKyMJZDEgPSByb3VuZGluZyBwcmVjaXNpb24vbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBpbiBleHRlbmRlZCBwcmVjaXNpb24JIworIwlkMC5iID0gcmVzdWx0IEZQU1JfY2Mgd2hpY2ggY2FsbGVyIG1heSBvciBtYXkgbm90IHdhbnQgdG8gc2F2ZQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlDb252ZXJ0IHRoZSBpbnB1dCBvcGVyYW5kIHRvICJpbnRlcm5hbCBmb3JtYXQiIHdoaWNoIG1lYW5zIHRoZQkjCisjIGV4cG9uZW50IGlzIGV4dGVuZGVkIHRvIDE2IGJpdHMgYW5kIHRoZSBzaWduIGlzIHN0b3JlZCBpbiB0aGUgdW51c2VkCSMKKyMgcG9ydGlvbiBvZiB0aGUgZXh0ZW5kZWQgcHJlY2lzb24gb3BlcmFuZC4gRGVub3JtYWxpemUgdGhlIG51bWJlcgkjCisjIGFjY29yZGluZyB0byB0aGUgc2NhbGUgZmFjdG9yIHBhc3NlZCBpbiBkMC4gVGhlbiwgcm91bmQgdGhlCQkjCisjIGRlbm9ybWFsaXplZCByZXN1bHQuCQkJCQkJCSMKKyMJU2V0IHRoZSBGUFNSX2V4YyBiaXRzIGFzIGFwcHJvcHJpYXRlIGJ1dCByZXR1cm4gdGhlIGNjIGJpdHMgaW4JIworIyBkMCBpbiBjYXNlIHRoZSBjYWxsZXIgZG9lc24ndCB3YW50IHRvIHNhdmUgdGhlbSAoYXMgaXMgdGhlIGNhc2UgZm9yCSMKKyMgZm1vdmUgb3V0KS4JCQkJCQkJCSMKKyMJdW5mX3JlczQoKSBmb3IgZnNnbG11bC9mc2dsZGl2IGZvcmNlcyB0aGUgZGVub3JtIHRvIGV4dGVuZGVkCSMKKyMgcHJlY2lzaW9uIGFuZCB0aGUgcm91bmRpbmcgbW9kZSB0byBzaW5nbGUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQl1bmZfcmVzCit1bmZfcmVzOgorCW1vdi5sCQklZDEsIC0oJXNwKQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKKworCWJ0c3QJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBtYWtlICJpbnRlcm5hbCIgZm9ybWF0CisJc25lCQlGVEVNUF9TR04oJWEwKQorCisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmQudwkJJjB4N2ZmZiwgJWQxCisJc3ViLncJCSVkMCwgJWQxCisJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCAxNiBiaXQgZXhwb25lbnQKKworCW1vdi5sCQklYTAsIC0oJXNwKQkJIyBzYXZlIG9wZXJhbmQgcHRyIGR1cmluZyBjYWxscworCisJbW92LmwJCTB4NCglc3ApLCVkMAkJIyBwYXNzIHJuZCBwcmVjLgorCWFuZGkudwkJJjB4MDBjMCwlZDAKKwlsc3IudwkJJjB4NCwlZDAKKwlic3IubAkJX2Rlbm9ybQkJCSMgZGVub3JtIHJlc3VsdAorCisJbW92LmwJCSglc3ApLCVhMAorCW1vdi53CQkweDYoJXNwKSwlZDEJCSMgbG9hZCBwcmVjOm1vZGUgaW50byAlZDEKKwlhbmRpLncJCSYweGMwLCVkMQkJIyBleHRyYWN0IHJuZCBwcmVjCisJbHNyLncJCSYweDQsJWQxCisJc3dhcAkJJWQxCisJbW92LncJCTB4Niglc3ApLCVkMQorCWFuZGkudwkJJjB4MzAsJWQxCisJbHNyLncJCSYweDQsJWQxCisJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIGRlbm9ybQorCisJbW92LmwJCSglc3ApKywgJWEwCisKKyMgcmVzdWx0IGlzIG5vdyByb3VuZGVkIHByb3Blcmx5LiBjb252ZXJ0IGJhY2sgdG8gbm9ybWFsIGZvcm1hdAorCWJjbHIJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBjbGVhciBzZ24gZmlyc3Q7IG1heSBoYXZlIHJlc2lkdWUKKwl0c3QuYgkJRlRFTVBfU0dOKCVhMCkJCSMgaXMgImludGVybmFsIHJlc3VsdCIgc2lnbiBzZXQ/CisJYmVxLmIJCXVuZl9yZXNfY2hraWZ6ZXJvCSMgbm87IHJlc3VsdCBpcyBwb3NpdGl2ZQorCWJzZXQJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBzZXQgcmVzdWx0IHNnbgorCWNsci5iCQlGVEVNUF9TR04oJWEwKQkJIyBjbGVhciB0ZW1wIHNpZ24KKworIyB0aGUgbnVtYmVyIG1heSBoYXZlIGJlY29tZSB6ZXJvIGFmdGVyIHJvdW5kaW5nLiBzZXQgY2NvZGVzIGFjY29yZGluZ2x5LgordW5mX3Jlc19jaGtpZnplcm86CisJY2xyLmwJCSVkMAorCXRzdC5sCQlGVEVNUF9ISSglYTApCQkjIGlzIHZhbHVlIG5vdyBhIHplcm8/CisJYm5lLmIJCXVuZl9yZXNfY29udAkJIyBubworCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCXVuZl9yZXNfY29udAkJIyBubworIwlic2V0CQkmel9iaXQsIEZQU1JfQ0MoJWE2KQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisJYnNldAkJJnpfYml0LCAlZDAJCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKKwordW5mX3Jlc19jb250OgorCisjCisjIGNhbiBpbmV4MSBhbHNvIGJlIHNldCBhbG9uZyB3aXRoIHVuZmwgYW5kIGluZXgyPz8/CisjCisjIHdlIGtub3cgdGhhdCB1bmRlcmZsb3cgaGFzIG9jY3VycmVkLiBhdW5mbCBzaG91bGQgYmUgc2V0IGlmIElORVgyIGlzIGFsc28gc2V0LgorIworCWJ0c3QJCSZpbmV4Ml9iaXQsIEZQU1JfRVhDRVBUKCVhNikgIyBpcyBJTkVYMiBzZXQ/CisJYmVxLmIJCXVuZl9yZXNfZW5kCQkjIG5vCisJYnNldAkJJmF1bmZsX2JpdCwgRlBTUl9BRVhDRVBUKCVhNikgIyB5ZXM7IHNldCBhdW5mbAorCit1bmZfcmVzX2VuZDoKKwlhZGQubAkJJjB4NCwgJXNwCQkjIGNsZWFyIHN0YWNrCisJcnRzCisKKyMgdW5mX3JlcygpIGZvciBmc2dsbXVsKCkgYW5kIGZzZ2xkaXYoKS4KKwlnbG9iYWwJCXVuZl9yZXM0Cit1bmZfcmVzNDoKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKKworCWJ0c3QJCSYweDcsRlRFTVBfRVgoJWEwKQkjIG1ha2UgImludGVybmFsIiBmb3JtYXQKKwlzbmUJCUZURU1QX1NHTiglYTApCisKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDEJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kLncJCSYweDdmZmYsJWQxCisJc3ViLncJCSVkMCwlZDEKKwltb3YudwkJJWQxLEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgMTYgYml0IGV4cG9uZW50CisKKwltb3YubAkJJWEwLC0oJXNwKQkJIyBzYXZlIG9wZXJhbmQgcHRyIGR1cmluZyBjYWxscworCisJY2xyLmwJCSVkMAkJCSMgZm9yY2Ugcm5kIHByZWMgPSBleHQKKwlic3IubAkJX2Rlbm9ybQkJCSMgZGVub3JtIHJlc3VsdAorCisJbW92LmwJCSglc3ApLCVhMAorCW1vdi53CQkmc19tb2RlLCVkMQkJIyBmb3JjZSBybmQgcHJlYyA9IHNnbAorCXN3YXAJCSVkMQorCW1vdi53CQkweDYoJXNwKSwlZDEJCSMgbG9hZCBybmQgbW9kZQorCWFuZGkudwkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIHByZWMKKwlsc3IudwkJJjB4NCwlZDEKKwlic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgZGVub3JtCisKKwltb3YubAkJKCVzcCkrLCVhMAorCisjIHJlc3VsdCBpcyBub3cgcm91bmRlZCBwcm9wZXJseS4gY29udmVydCBiYWNrIHRvIG5vcm1hbCBmb3JtYXQKKwliY2xyCQkmMHg3LEZURU1QX0VYKCVhMCkJIyBjbGVhciBzZ24gZmlyc3Q7IG1heSBoYXZlIHJlc2lkdWUKKwl0c3QuYgkJRlRFTVBfU0dOKCVhMCkJCSMgaXMgImludGVybmFsIHJlc3VsdCIgc2lnbiBzZXQ/CisJYmVxLmIJCXVuZl9yZXM0X2Noa2lmemVybwkjIG5vOyByZXN1bHQgaXMgcG9zaXRpdmUKKwlic2V0CQkmMHg3LEZURU1QX0VYKCVhMCkJIyBzZXQgcmVzdWx0IHNnbgorCWNsci5iCQlGVEVNUF9TR04oJWEwKQkJIyBjbGVhciB0ZW1wIHNpZ24KKworIyB0aGUgbnVtYmVyIG1heSBoYXZlIGJlY29tZSB6ZXJvIGFmdGVyIHJvdW5kaW5nLiBzZXQgY2NvZGVzIGFjY29yZGluZ2x5LgordW5mX3JlczRfY2hraWZ6ZXJvOgorCWNsci5sCQklZDAKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQkJIyBpcyB2YWx1ZSBub3cgYSB6ZXJvPworCWJuZS5iCQl1bmZfcmVzNF9jb250CQkjIG5vCisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJdW5mX3JlczRfY29udAkJIyBubworIwlic2V0CQkmel9iaXQsRlBTUl9DQyglYTYpCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKKwlic2V0CQkmel9iaXQsJWQwCQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisKK3VuZl9yZXM0X2NvbnQ6CisKKyMKKyMgY2FuIGluZXgxIGFsc28gYmUgc2V0IGFsb25nIHdpdGggdW5mbCBhbmQgaW5leDI/Pz8KKyMKKyMgd2Uga25vdyB0aGF0IHVuZGVyZmxvdyBoYXMgb2NjdXJyZWQuIGF1bmZsIHNob3VsZCBiZSBzZXQgaWYgSU5FWDIgaXMgYWxzbyBzZXQuCisjCisJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PworCWJlcS5iCQl1bmZfcmVzNF9lbmQJCSMgbm8KKwlic2V0CQkmYXVuZmxfYml0LEZQU1JfQUVYQ0VQVCglYTYpICMgeWVzOyBzZXQgYXVuZmwKKwordW5mX3JlczRfZW5kOgorCWFkZC5sCQkmMHg0LCVzcAkJIyBjbGVhciBzdGFjaworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW92Zl9yZXMoKTogcm91dGluZSB0byBwcm9kdWNlIHRoZSBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdCBvZgkjCisjCQkgICBhbiBvdmVyZmxvd2luZyBudW1iZXIuCQkJCSMKKyMJb3ZmX3JlczIoKTogc2FtZSBhcyBhYm92ZSBidXQgdGhlIHJuZCBtb2RlL3ByZWMgYXJlIHBhc3NlZAkjCisjCQkgICAgZGlmZmVyZW50bHkuCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMS5iCT0gJy0xJyA9PiAoLSk7ICcwJyA9PiAoKykJCQkJIworIyAgIG92Zl9yZXMoKToJCQkJCQkJCSMKKyMJZDAJPSBybmQgbW9kZS9wcmVjCQkJCQkJIworIyAgIG92Zl9yZXMyKCk6CQkJCQkJCQkjCisjCWhpKGQwKQk9IHJuZCBwcmVjCQkJCQkJIworIwlsbyhkMCkJPSBybmQgbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwCT0gcG9pbnRzIHRvIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQJCQkjCisjCWQwLmIJPSBjb25kaXRpb24gY29kZSBiaXRzCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHNpZ24gb2YJIworIyB0aGUgcmVzdWx0IGFuZCB0aGUgcm91bmRpbmcgbW9kZS9wcmVjIGluIGVmZmVjdC4gVGhlc2UgYml0cyBhcmUJIworIyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdG8gY3JlYXRlIGFuIGluZGV4IGludG8gdGhlIGRlZmF1bHQgcmVzdWx0CSMKKyMgdGFibGUuIEEgcG9pbnRlciB0byB0aGUgY29ycmVjdCByZXN1bHQgaXMgcmV0dXJuZWQgaW4gYTAuIFRoZQkJIworIyByZXN1bHRpbmcgY29uZGl0aW9uIGNvZGVzIGFyZSByZXR1cm5lZCBpbiBkMCBpbiBjYXNlIHRoZSBjYWxsZXIJIworIyBkb2Vzbid0IHdhbnQgRlBTUl9jYyBhbHRlcmVkIChhcyBpcyB0aGUgY2FzZSBmb3IgZm1vdmUgb3V0KS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCW92Zl9yZXMKK292Zl9yZXM6CisJYW5kaS53CQkmMHgxMCwlZDEJCSMga2VlcCByZXN1bHQgc2lnbgorCWxzci5iCQkmMHg0LCVkMAkJIyBzaGlmdCBwcmVjL21vZGUKKwlvci5iCQklZDAsJWQxCQkJIyBjb25jYXQgdGhlIHR3bworCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQorCWxzbC5iCQkmMHgxLCVkMQkJIyBtdWx0aXBseSBkMSBieSAyCisJYnJhLmIJCW92Zl9yZXNfbG9hZAorCisJZ2xvYmFsCQlvdmZfcmVzMgorb3ZmX3JlczI6CisJYW5kLncJCSYweDEwLCAlZDEJCSMga2VlcCByZXN1bHQgc2lnbgorCW9yLmIJCSVkMCwgJWQxCQkjIGluc2VydCBybmQgbW9kZQorCXN3YXAJCSVkMAorCW9yLmIJCSVkMCwgJWQxCQkjIGluc2VydCBybmQgcHJlYworCW1vdi53CQklZDEsICVkMAkJIyBtYWtlIGEgY29weQorCWxzbC5iCQkmMHgxLCAlZDEJCSMgc2hpZnQgbGVmdCBieSAxCisKKyMKKyMgdXNlIHRoZSByb3VuZGluZyBtb2RlLCBwcmVjaXNpb24sIGFuZCByZXN1bHQgc2lnbiBhcyBpbiBpbmRleCBpbnRvIHRoZQorIyB0d28gdGFibGVzIGJlbG93IHRvIGZldGNoIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgdGhlIHJlc3VsdCBjY29kZXMuCisjCitvdmZfcmVzX2xvYWQ6CisJbW92LmIJCSh0Ymxfb3ZmbF9jYy5iLCVwYywlZDAudyoxKSwgJWQwICMgZmV0Y2ggcmVzdWx0IGNjb2RlcworCWxlYQkJKHRibF9vdmZsX3Jlc3VsdC5iLCVwYywlZDEudyo4KSwgJWEwICMgcmV0dXJuIHJlc3VsdCBwdHIKKworCXJ0cworCit0Ymxfb3ZmbF9jYzoKKwlieXRlCQkweDIsIDB4MCwgMHgwLCAweDIKKwlieXRlCQkweDIsIDB4MCwgMHgwLCAweDIKKwlieXRlCQkweDIsIDB4MCwgMHgwLCAweDIKKwlieXRlCQkweDAsIDB4MCwgMHgwLCAweDAKKwlieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAorCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4CisJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKKwordGJsX292ZmxfcmVzdWx0OgorCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgorCWxvbmcJCTB4N2ZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyArRVhUOyBSWgorCWxvbmcJCTB4N2ZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyArRVhUOyBSTQorCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAorCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJOCisJbG9uZwkJMHg0MDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtTR0w7IFJaCisJbG9uZwkJMHg0MDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtTR0w7IFJNCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJQCisKKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KKwlsb25nCQkweDQzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgK0RCTDsgUloKKwlsb25nCQkweDQzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgK0RCTDsgUk0KKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKKworCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTgorCWxvbmcJCTB4ZmZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyAtRVhUOyBSWgorCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQorCWxvbmcJCTB4ZmZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyAtRVhUOyBSUAorCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCisJbG9uZwkJMHhjMDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1TR0w7IFJaCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCisJbG9uZwkJMHhjMDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1TR0w7IFJQCisKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KKwlsb25nCQkweGMzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgLURCTDsgUloKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk0KKwlsb25nCQkweGMzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgLURCTDsgUlAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmb3V0KCk6IG1vdmUgZnJvbSBmcCByZWdpc3RlciB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlcgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcm91bmQoKSAtIG5lZWRlZCB0byBjcmVhdGUgRVhPUCBmb3Igc2dsL2RibCBwcmVjaXNpb24JCSMKKyMJbm9ybSgpIC0gbmVlZGVkIHRvIGNyZWF0ZSBFWE9QIGZvciBleHRlbmRlZCBwcmVjaXNpb24JCSMKKyMJb3ZmX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWNpc2lvbiMKKyMJdW5mX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsL2RibCBwcmVjLgkjCisjCWRzdF9kYmwoKSAtIGNyZWF0ZSByb3VuZGVkIGRibCBwcmVjaXNpb24gcmVzdWx0LgkJIworIwlkc3Rfc2dsKCkgLSBjcmVhdGUgcm91bmRlZCBzZ2wgcHJlY2lzaW9uIHJlc3VsdC4JCSMKKyMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggZHluYW1pYyBrLWZhY3RvciByZWcgZm9yIHBhY2tlZC4JCSMKKyMJYmluZGVjKCkgLSBjb252ZXJ0IEZQIGJpbmFyeSBudW1iZXIgdG8gcGFja2VkIG51bWJlci4JCSMKKyMJX21lbV93cml0ZSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkJCSMKKyMJX21lbV93cml0ZTIoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5IHVubGVzcyBzdXB2IG1vZGUgLShhNykgZXhjLiMKKyMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkjCisjCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2lzdGVyIGZpbGUuCSMKKyMJZmFjY19vdXRfe2IsdyxsLGQseH0oKSAtIGRhdGEgYWNjZXNzIGVycm9yIG9jY3VycmVkLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA6IGludGVybWVkaWF0ZSB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgcmVzdWx0IGlmCQkjCisjCSAgICAgIE9WRkwvVU5GTCBvY2N1cnJlZCBmb3IgYSBzZ2wgb3IgZGJsIG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgcm91dGluZSBpcyBhY2Nlc3NlZCBieSBtYW55IGhhbmRsZXJzIHRoYXQgbmVlZCB0byBkbyBhbgkjCisjIG9wY2xhc3MgdGhyZWUgbW92ZSBvZiBhbiBvcGVyYW5kIG91dCB0byBtZW1vcnkuCQkJIworIwlEZWNvZGUgYW4gZm1vdmUgb3V0IChvcGNsYXNzIDMpIGluc3RydWN0aW9uIHRvIGRldGVybWluZSBpZgkjCisjIGl0J3MgYix3LGwscyxkLHgsIG9yIHAgaW4gc2l6ZS4gYix3LGwgY2FuIGJlIHN0b3JlZCB0byBlaXRoZXIgYSBkYXRhCSMKKyMgcmVnaXN0ZXIgb3IgbWVtb3J5LiBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzdGFuZGFyZCAiZm1vdmUiIHRvIGNyZWF0ZQkjCisjIHRoZSByb3VuZGVkIHJlc3VsdC4gQWxzbywgc2luY2UgZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQsIHRoaXMgYWxzbwkjCisjIGNyZWF0ZSB0aGUgY29ycmVjdCBPUEVSUiBkZWZhdWx0IHJlc3VsdCBpZiBhcHByb3ByaWF0ZS4JCSMKKyMJRm9yIHNnbCBvciBkYmwgcHJlY2lzaW9uLCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgY2FuIG9jY3VyLiBJZgkjCisjIGVpdGhlciBvY2N1cnMgYW5kIGlzIGVuYWJsZWQsIHRoZSBFWE9QLgkJCQkjCisjCUZvciBleHRlbmRlZCBwcmVjaXNpb24sIHRoZSBzdGFja2VkIDxlYT4gbXVzdCBiZSBmaXhlZCBhbG9uZwkjCisjIHcvIHRoZSBhZGRyZXNzIGluZGV4IHJlZ2lzdGVyIGFzIGFwcHJvcHJpYXRlIHcvIF9jYWxjX2VhX2ZvdXQoKS4gSWYJIworIyB0aGUgc291cmNlIGlzIGEgZGVub3JtIGFuZCBpZiB1bmRlcmZsb3cgaXMgZW5hYmxlZCwgYW4gRVhPUCBtdXN0IGJlCSMKKyMgY3JlYXRlZC4JCQkJCQkJCSMKKyMJRm9yIHBhY2tlZCwgdGhlIGstZmFjdG9yIG11c3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBpbnN0cnVjdGlvbgkjCisjIHdvcmQgb3IgYSBkYXRhIHJlZ2lzdGVyLiBUaGUgPGVhPiBtdXN0IGJlIGZpeGVkIGFzIHcvIGV4dGVuZGVkCSMKKyMgcHJlY2lzaW9uLiBUaGVuLCBiaW5kZWMoKSBpcyBjYWxsZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZQkJIworIyBwYWNrZWQgcmVzdWx0LgkJCQkJCQkjCisjCUlmIGF0IGFueSB0aW1lIGFuIGFjY2VzcyBlcnJvciBpcyBmbGFnZ2VkIGJ5IG9uZSBvZiB0aGUgbW92ZS0JIworIyB0by1tZW1vcnkgcm91dGluZXMsIHRoZW4gYSBzcGVjaWFsIGV4aXQgbXVzdCBiZSBtYWRlIHNvIHRoYXQgdGhlCSMKKyMgYWNjZXNzIGVycm9yIGNhbiBiZSBoYW5kbGVkIHByb3Blcmx5LgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZm91dAorZm91dDoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMzomM30sJWQxICMgZXh0cmFjdCBkc3QgZm10CisJbW92LncJCSh0YmxfZm91dC5iLCVwYywlZDEudyoyKSwlYTEgIyB1c2UgYXMgaW5kZXgKKwlqbXAJCSh0YmxfZm91dC5iLCVwYywlYTEpCSMganVtcCB0byByb3V0aW5lCisKKwlzd2JlZwkJJjB4OAordGJsX2ZvdXQ6CisJc2hvcnQJCWZvdXRfbG9uZwktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfc2dsCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9leHQJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3BhY2sJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3dvcmQJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X2RibAktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfYnl0ZQktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfcGFjawktCXRibF9mb3V0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLmIgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF9ieXRlOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2J5dGVfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF9ieXRlX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjLG1vZGUKKworCWZtb3YuYgkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfYnl0ZV9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCisKKwlydHMKKworZm91dF9ieXRlX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2IKKwlydHMKKworZm91dF9ieXRlX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfYnl0ZV9ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLncgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF93b3JkOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X3dvcmRfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF93b3JkX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKKworCWZtb3YudwkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfd29yZF9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX3dvcmQJIyB3cml0ZSB3b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCisKKwlydHMKKworZm91dF93b3JkX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX3cKKwlydHMKKworZm91dF93b3JkX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfd29yZF9ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLmwgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF9sb25nOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2xvbmdfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF9sb25nX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKKworCWZtb3YubAkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworZm91dF9sb25nX3dyaXRlOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfbG9uZ19kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlydHMKKworZm91dF9sb25nX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKwlydHMKKworZm91dF9sb25nX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfbG9uZ19ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLnggb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorIyBUaGUgREVOT1JNIGNhdXNlcyBhbiBVbmRlcmZsb3cgZXhjZXB0aW9uLgorZm91dF9leHQ6CisKKyMgd2UgY29weSB0aGUgZXh0ZW5kZWQgcHJlY2lzaW9uIHJlc3VsdCB0byBGUF9TQ1IwIHNvIHRoYXQgdGhlIHJlc2VydmVkCisjIDE2LWJpdCBmaWVsZCBnZXRzIHplcm9lZC4gd2UgZG8gdGhpcyBzaW5jZSB3ZSBwcm9taXNlIG5vdCB0byBkaXN0dXJiCisjIHdoYXQncyBhdCBTUkMoYTApLgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwljbHIudwkJMitGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciByZXNlcnZlZCBmaWVsZAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0CisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaXggc3RhY2tlZCA8ZWE+CisKKwltb3YubAkJJWEwLCVhMQkJCSMgcGFzczogZHN0IGFkZHIKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgMTIgYnl0ZXMKKworIyB3ZSBtdXN0IG5vdCB5ZXQgd3JpdGUgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiBkYXRhIHRvIHRoZSBzdGFjaworIyBpbiB0aGUgcHJlLWRlY3JlbWVudCBjYXNlIGZyb20gc3VwZXJ2aXNvciBtb2RlIG9yIGVsc2Ugd2UnbGwgY29ycnVwdAorIyB0aGUgc3RhY2sgZnJhbWUuIHNvLCBsZWF2ZSBpdCBpbiBGUF9TUkMgZm9yIG5vdyBhbmQgZGVhbCB3aXRoIGl0IGxhdGVyLi4uCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYmVxLmIJCWZvdXRfZXh0X2E3CisKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF9leHRfZGVub3JtCQkjIG5vCisJcnRzCisKKyMgdGhlIG51bWJlciBpcyBhIERFTk9STS4gbXVzdCBzZXQgdGhlIHVuZGVyZmxvdyBleGNlcHRpb24gYml0Citmb3V0X2V4dF9kZW5vcm06CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5kZXJmbG93IGV4YyBiaXQKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAorCWFuZGkuYgkJJjB4MGEsJWQwCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmb3V0X2V4dF9leGMJCSMgeWVzCisJcnRzCisKKyMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKKyMgc28gX21lbV93cml0ZTIoKSBoYW5kbGVzIHRoaXMgZm9yIHVzLgorZm91dF9leHRfYTc6CisJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfZXh0X2Rlbm9ybQkJIyBubworCXJ0cworCitmb3V0X2V4dF9leGM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjBfRVgoJWE2KQkjIGtlZXAgb25seSBvbGQgc2lnbgorCW9yLncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKK2ZvdXRfZXh0X2VycjoKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBmaXggc3RhY2tlZCBhNgorCWJyYS5sCQlmYWNjX291dF94CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUucyBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdXRfc2dsOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjaworCisjCisjIG9wZXJhbmQgaXMgYSBub3JtYWxpemVkIG51bWJlci4gZmlyc3QsIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgbW92ZSBvdXQKKyMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKKyMgc2VwYXJhdGVseS4gb3RoZXJ3aXNlLCBzZXQgdGhlIEZQQ1IgdG8gdGhlIHByb3BlciByb3VuZGluZyBtb2RlIGFuZAorIyBleGVjdXRlIHRoZSBtb3ZlLgorIworCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCisJY21waS53CQklZDAsJlNHTF9ISQkJIyB3aWxsIG9wZXJhbmQgb3ZlcmZsb3c/CisJYmd0LncJCWZvdXRfc2dsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgT1ZGTAorCWJlcS53CQlmb3V0X3NnbF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAorCWNtcGkudwkJJWQwLCZTR0xfTE8JCSMgd2lsbCBvcGVyYW5kIHVuZGVyZmxvdz8KKwlibHQudwkJZm91dF9zZ2xfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworIworIyBOT1JNcyhpbiByYW5nZSkgY2FuIGJlIHN0b3JlZCBvdXQgYnkgYSBzaW1wbGUgImZtb3YucyIKKyMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCisjCitmb3V0X3NnbF9leGc6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbW92LnMJCSVmcDAsJWQwCQkjIHN0b3JlIGRvZXMgY29udmVydCBhbmQgcm91bmQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNldCBwb3NzaWJsZSBpbmV4Mi9haW5leAorCitmb3V0X3NnbF9leGdfd3JpdGU6CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9zZ2xfZXhnX3dyaXRlX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJcnRzCisKK2ZvdXRfc2dsX2V4Z193cml0ZV9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisJcnRzCisKKyMKKyMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIHNpbmdsZSBwcmVjLAorIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBzaW5nbGUgcm91dGluZSB0bworIyB3cml0ZSB0aGUgdmFsdWUgdG8gbWVtb3J5LgorIworZm91dF9zZ2xfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCBVTkZMCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJJWEwLC0oJXNwKQorCisJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS5iCQlmb3V0X3NnbF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitmb3V0X3NnbF91bmZsX2NvbnQ6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsYyBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKKwlic3IubAkJZHN0X3NnbAkJCSMgY29udmVydCB0byBzaW5nbGUgcHJlYworCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9zZ2xfdW5mbF9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS5iCQlmb3V0X3NnbF91bmZsX2Noa2V4YworCitmb3V0X3NnbF91bmZsX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKworZm91dF9zZ2xfdW5mbF9jaGtleGM6CisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX3VuZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgaXQncyBkZWZpbml0ZWx5IGFuIG92ZXJmbG93IHNvIGNhbGwgb3ZmX3JlcyB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyCisjCitmb3V0X3NnbF9vdmZsOgorCXRzdC5iCQkzK1NSQ19ISSglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PworCWJuZS5iCQlmb3V0X3NnbF9vdmZsX2luZXgyCisJdHN0LmwJCVNSQ19MTyglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PworCWJuZS5iCQlmb3V0X3NnbF9vdmZsX2luZXgyCisJb3JpLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCWJyYS5iCQlmb3V0X3NnbF9vdmZsX2NvbnQKK2ZvdXRfc2dsX292ZmxfaW5leDI6CisJb3JpLncJCSZvdmZpbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgvaW5leDIKKworZm91dF9zZ2xfb3ZmbF9jb250OgorCW1vdi5sCQklYTAsLSglc3ApCisKKyMgY2FsbCBvdmZfcmVzKCkgdy8gc2dsIHByZWMgYW5kIHRoZSBjb3JyZWN0IHJuZCBtb2RlIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdAorIyBvdmVyZmxvdyByZXN1bHQuIERPTidUIHNhdmUgdGhlIHJldHVybmVkIGNjb2RlcyBmcm9tIG92Zl9yZXMoKSBzaW5jZQorIyBmbW92ZSBvdXQgZG9lc24ndCBhbHRlciB0aGVtLgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCXNtaQkJJWQxCQkJIyBzZXQgaWYgc28KKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHNnbCBwcmVjLHJuZCBtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGMgT1ZGTCByZXN1bHQKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CisJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSB0byBzaW5nbGUKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfc2dsX292ZmxfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEuYgkJZm91dF9zZ2xfb3ZmbF9jaGtleGMKKworZm91dF9zZ2xfb3ZmbF9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisKK2ZvdXRfc2dsX292ZmxfY2hrZXhjOgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS53CQlmb3V0X3NkX2V4Y19vdmZsCSMgeWVzCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjCisjIG1vdmUgb3V0IE1BWSBvdmVyZmxvdzoKKyMgKDEpIGZvcmNlIHRoZSBleHAgdG8gMHgzZmZmCisjICgyKSBkbyBhIG1vdmUgdy8gYXBwcm9wcmlhdGUgcm5kIG1vZGUKKyMgKDMpIGlmIGV4cCBzdGlsbCBlcXVhbHMgemVybywgdGhlbiBpbnNlcnQgb3JpZ2luYWwgZXhwb25lbnQKKyMJZm9yIHRoZSBjb3JyZWN0IHJlc3VsdC4KKyMgICAgIGlmIGV4cCBub3cgZXF1YWxzIG9uZSwgdGhlbiBpdCBvdmVyZmxvd2VkIHNvIGNhbGwgb3ZmX3Jlcy4KKyMKK2ZvdXRfc2dsX21heV9vdmZsOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDEJCSMgZmV0Y2ggY3VycmVudCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIGl0LGNsZWFyIGV4cAorCW9yaS53CQkmMHgzZmZmLCVkMQkJIyBpbnNlcnQgZXhwID0gMAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IHNjYWxlZCBleHAKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSBoaShtYW4pCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgbG8obWFuKQorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZm9yY2UgZm9wIHRvIGJlIHJvdW5kZWQKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZmFicy54CQklZnAwCQkJIyBuZWVkIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAwLCYweDIJCSMgZGlkIGV4cG9uZW50IGluY3JlYXNlPworCWZibHQudwkJZm91dF9zZ2xfZXhnCQkjIG5vOyBnbyBmaW5pc2ggTk9STQorCWJyYS53CQlmb3V0X3NnbF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMKKworZm91dF9zZF9leGNfdW5mbDoKKwltb3YubAkJKCVzcCkrLCVhMAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgd2FzIHNyYyBhIERFTk9STT8KKwlibmUuYgkJZm91dF9zZF9leGNfY29udAkjIG5vCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQorCW5lZy5sCQklZDAKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYmZpbnMJCSVkMCxGUF9TQ1IwX0VYKCVhNil7JjE6JjE1fQorCWJyYS5iCQlmb3V0X3NkX2V4Y19jb250CisKK2ZvdXRfc2RfZXhjOgorZm91dF9zZF9leGNfb3ZmbDoKKwltb3YubAkJKCVzcCkrLCVhMAkJIyByZXN0b3JlIGEwCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworZm91dF9zZF9leGNfY29udDoKKwliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGNsZWFyIHNpZ24gYml0CisJc25lLmIJCTIrRlBfU0NSMF9FWCglYTYpCSMgc2V0IGludGVybmFsIHNpZ24gYml0CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIERFTk9STQorCisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJbHNyLmIJCSYweDQsJWQxCisJYW5kaS53CQkmMHgwYywlZDEKKwlzd2FwCQklZDEKKwltb3YuYgkJMytMX1NDUjMoJWE2KSwlZDEKKwlsc3IuYgkJJjB4NCwlZDEKKwlhbmRpLncJCSYweDAzLCVkMQorCWNsci5sCQklZDAJCQkjIHBhc3M6IHplcm8gZyxyLHMKKwlic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgREVOT1JNCisKKwl0c3QuYgkJMitGUF9TQ1IwX0VYKCVhNikJIyBpcyBFWE9QIG5lZ2F0aXZlPworCWJlcS5iCQlmb3V0X3NkX2V4Y19kb25lCSMgbm8KKwlic2V0CQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIHllcworCitmb3V0X3NkX2V4Y19kb25lOgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS5kIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmb3V0X2RibDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKKworIworIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CisjIHdvdWxkIGNhdXNlIGVpdGhlciBhbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkCisjIHNlcGFyYXRlbHkuIG90aGVyd2lzZSwgc2V0IHRoZSBGUENSIHRvIHRoZSBwcm9wZXIgcm91bmRpbmcgbW9kZSBhbmQKKyMgZXhlY3V0ZSB0aGUgbW92ZS4KKyMKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKworCWNtcGkudwkJJWQwLCZEQkxfSEkJCSMgd2lsbCBvcGVyYW5kIG92ZXJmbG93PworCWJndC53CQlmb3V0X2RibF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKKwliZXEudwkJZm91dF9kYmxfbWF5X292ZmwJIyBtYXliZTsgZ28gaGFuZGxlIHBvc3NpYmxlIE9WRkwKKwljbXBpLncJCSVkMCwmREJMX0xPCQkjIHdpbGwgb3BlcmFuZCB1bmRlcmZsb3c/CisJYmx0LncJCWZvdXRfZGJsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisKKyMKKyMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LmQiCisjIFVubm9ybWFsaXplZCBpbnB1dHMgY2FuIGNvbWUgdGhyb3VnaCB0aGlzIHBvaW50LgorIworZm91dF9kYmxfZXhnOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGZldGNoIGZvcCBmcm9tIHN0YWNrCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm1vdi5kCQklZnAwLExfU0NSMSglYTYpCSMgc3RvcmUgZG9lcyBjb252ZXJ0IGFuZCByb3VuZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKworCW9yLncJCSVkMCwyK1VTRVJfRlBTUiglYTYpCSMgc2V0IHBvc3NpYmxlIGluZXgyL2FpbmV4CisKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlMX1NDUjEoJWE2KSwlYTAJCSMgcGFzczogc3JjIGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwlydHMJCQkJCSMgbm87IHNvIHdlJ3JlIGZpbmlzaGVkCisKKyMKKyMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIGRvdWJsZSBwcmVjLAorIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBkb3VibGUgcm91dGluZSB0bworIyB3cml0ZSB0aGUgdmFsdWUgdG8gbWVtb3J5LgorIworZm91dF9kYmxfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCBVTkZMCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJJWEwLC0oJXNwKQorCisJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS5iCQlmb3V0X2RibF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitmb3V0X2RibF91bmZsX2NvbnQ6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsYyBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKKwlic3IubAkJZHN0X2RibAkJCSMgY29udmVydCB0byBzaW5nbGUgcHJlYworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikKKwltb3YubAkJJWQxLExfU0NSMiglYTYpCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlMX1NDUjEoJWE2KSwlYTAJCSMgcGFzczogc3JjIGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUudwkJZm91dF9zZF9leGNfdW5mbAkjIHllcworCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIworIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKKyMKK2ZvdXRfZGJsX292Zmw6CisJbW92LncJCTIrU1JDX0xPKCVhMCksJWQwCisJYW5kaS53CQkmMHg3ZmYsJWQwCisJYm5lLmIJCWZvdXRfZGJsX292ZmxfaW5leDIKKworCW9yaS53CQkmb3ZmbF9pbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKwlicmEuYgkJZm91dF9kYmxfb3ZmbF9jb250Citmb3V0X2RibF9vdmZsX2luZXgyOgorCW9yaS53CQkmb3ZmaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4L2luZXgyCisKK2ZvdXRfZGJsX292ZmxfY29udDoKKwltb3YubAkJJWEwLC0oJXNwKQorCisjIGNhbGwgb3ZmX3JlcygpIHcvIGRibCBwcmVjIGFuZCB0aGUgY29ycmVjdCBybmQgbW9kZSB0byBjcmVhdGUgdGhlIGRlZmF1bHQKKyMgb3ZlcmZsb3cgcmVzdWx0LiBET04nVCBzYXZlIHRoZSByZXR1cm5lZCBjY29kZXMgZnJvbSBvdmZfcmVzKCkgc2luY2UKKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWx0ZXIgdGhlbS4KKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlzbWkJCSVkMQkJCSMgc2V0IGlmIHNvCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBkYmwgcHJlYyxybmQgbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIE9WRkwgcmVzdWx0CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAorCWZtb3YuZAkJJWZwMCxMX1NDUjEoJWE2KQkjIHN0b3JlIHRvIGRvdWJsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCisJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyBzdG9yZSBkYmwgZm9wIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcworCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX292ZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgbW92ZSBvdXQgTUFZIG92ZXJmbG93OgorIyAoMSkgZm9yY2UgdGhlIGV4cCB0byAweDNmZmYKKyMgKDIpIGRvIGEgbW92ZSB3LyBhcHByb3ByaWF0ZSBybmQgbW9kZQorIyAoMykgaWYgZXhwIHN0aWxsIGVxdWFscyB6ZXJvLCB0aGVuIGluc2VydCBvcmlnaW5hbCBleHBvbmVudAorIwlmb3IgdGhlIGNvcnJlY3QgcmVzdWx0LgorIyAgICAgaWYgZXhwIG5vdyBlcXVhbHMgb25lLCB0aGVuIGl0IG92ZXJmbG93ZWQgc28gY2FsbCBvdmZfcmVzLgorIworZm91dF9kYmxfbWF5X292Zmw6CisJbW92LncJCVNSQ19FWCglYTApLCVkMQkJIyBmZXRjaCBjdXJyZW50IHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgaXQsY2xlYXIgZXhwCisJb3JpLncJCSYweDNmZmYsJWQxCQkjIGluc2VydCBleHAgPSAwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgc2NhbGVkIGV4cAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBjb3B5IGhpKG1hbikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSBsbyhtYW4pCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBmb3JjZSBmb3AgdG8gYmUgcm91bmRlZAorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIG5lZWQgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDAsJjB4MgkJIyBkaWQgZXhwb25lbnQgaW5jcmVhc2U/CisJZmJsdC53CQlmb3V0X2RibF9leGcJCSMgbm87IGdvIGZpbmlzaCBOT1JNCisJYnJhLncJCWZvdXRfZGJsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkc3RfZGJsKCk6IGNyZWF0ZSBkb3VibGUgcHJlY2lzaW9uIHZhbHVlIGZyb20gZXh0ZW5kZWQgcHJlYy4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHNvdXJjZSBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBoaShkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCkJCQkJIworIwlkMSA9IGxvKGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0KQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMgIENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIyAgTm90ZTogbm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHJvdW5kIHRoZSBleHRlbmRlZCB2YWx1ZSB0byBkb3VibGUuCSMKKyMJZGJsX3NpZ24gPSBleHRfc2lnbgkJCQkJCSMKKyMJZGJsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2ZmKGRibCBiaWFzKQkJIworIwlnZXQgcmlkIG9mIGV4dCBpbnRlZ2VyIGJpdAkJCQkJIworIwlkYmxfbWFudCA9IGV4dF9tYW50ezYyOjEyfQkJCQkJIworIwkJCQkJCQkJCSMKKyMJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0JIworIyAgZXh0ZW5kZWQgLT4gIHxzfCAgICBleHAgICAgfCAgIHwxfCBtcyBtYW50ICAgfCAgICB8IGxzIG1hbnQgICAgIHwJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjCQkgOTUJICAgIDY0ICAgIDYzIDYyCSAgICAgIDMyICAgICAgMzEgICAgIDExCSAgMAkjCisjCQkJCSAgICAgfAkJCSAgICAgfAkJIworIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKKyMJCQkJICAgICB8CQkJICAgICB8CQkjCisjCQkJICAgICAgICAgICAgIHYJCQkgICAgIHYJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKKyMgIGRvdWJsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwgICB8ICBtYW50ICAgICAgIHwJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKKyMJCQkgICAgICA2MyAgICAgNTEgICAzMiAgIDMxCSAgICAgICAwCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RzdF9kYmw6CisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZDAKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKKwlzdWJpLncJCSZFWFRfQklBUywlZDAJCSMgc3VidHJhY3QgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKKwlhZGRpLncJCSZEQkxfQklBUywlZDAJCSMgYWRkIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KKwlibWkuYgkJZHN0X2dldF9kdXBwZXIJCSMgbm8KKwlzdWJxLncJCSYweDEsJWQwCQkjIHllczsgZGVub3JtIGJpYXMgPSBEQkxfQklBUyAtIDEKK2RzdF9nZXRfZHVwcGVyOgorCXN3YXAJCSVkMAkJCSMgZDAgbm93IGluIHVwcGVyIHdvcmQKKwlsc2wubAkJJjB4NCwlZDAJCSMgZDAgaW4gcHJvcGVyIHBsYWNlIGZvciBkYmwgcHJlYyBleHAKKwl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KKwlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc3RpdmUsIGdvIHByb2Nlc3MgbWFudGlzc2EKKwlic2V0CQkmMHgxZiwlZDAJCSMgaWYgbmVnYXRpdmUsIHNldCBzaWduCitkc3RfZ2V0X2RtYW46CisJbW92LmwJCUZURU1QX0hJKCVhMCksJWQxCSMgZ2V0IG1zIG1hbnRpc3NhCisJYmZleHR1CQklZDF7JjE6JjIwfSwlZDEJCSMgZ2V0IHVwcGVyIDIwIGJpdHMgb2YgbXMKKwlvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIGRvdWJsZQorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgcHV0IHRoZSBuZXcgZXhwIGJhY2sgb24gdGhlIHN0YWNrCisJbW92LmwJCUZURU1QX0hJKCVhMCksJWQxCSMgZ2V0IG1zIG1hbnRpc3NhCisJbW92LmwJCSYyMSwlZDAJCQkjIGxvYWQgc2hpZnQgY291bnQKKwlsc2wubAkJJWQwLCVkMQkJCSMgcHV0IGxvd2VyIDExIGJpdHMgaW4gdXBwZXIgYml0cworCW1vdi5sCQklZDEsTF9TQ1IyKCVhNikJCSMgYnVpbGQgbG93ZXIgbHdvcmQgaW4gbWVtb3J5CisJbW92LmwJCUZURU1QX0xPKCVhMCksJWQxCSMgZ2V0IGxzIG1hbnRpc3NhCisJYmZleHR1CQklZDF7JjA6JjIxfSwlZDAJCSMgZ2V0IGxzIDIxIGJpdHMgb2YgZG91YmxlCisJbW92LmwJCUxfU0NSMiglYTYpLCVkMQorCW9yLmwJCSVkMCwlZDEJCQkjIHB1dCB0aGVtIGluIGRvdWJsZSByZXN1bHQKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZHN0X3NnbCgpOiBjcmVhdGUgc2luZ2xlIHByZWNpc2lvbiB2YWx1ZSBmcm9tIGV4dGVuZGVkIHByZWMJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBzb3VyY2Ugb3BlcmFuZCBpbiBleHRlbmRlZCBwcmVjaXNpb24JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gc2luZ2xlIHByZWNpc2lvbiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyBDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBzaW5nbGUgcHJlY2lzaW9uLgkJCSMKKyMJc2dsX3NpZ24gPSBleHRfc2lnbgkJCQkJCSMKKyMJc2dsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2Yoc2dsIGJpYXMpCQkjCisjCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCisjCXNnbF9tYW50ID0gZXh0X21hbnR7NjI6MTJ9CQkJCQkjCisjCQkJCQkJCQkJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjICBleHRlbmRlZCAtPiAgfHN8ICAgIGV4cCAgICB8ICAgfDF8IG1zIG1hbnQgICB8ICAgIHwgbHMgbWFudCAgICAgfAkjCisjCQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCSMKKyMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgNDAgMzIgICAgICAzMSAgICAgMTIJICAwCSMKKyMJCQkJICAgICB8CSAgIHwJCQkJIworIwkJCQkgICAgIHwJICAgfAkJCQkjCisjCQkJCSAgICAgfAkgICB8CQkJCSMKKyMJCQkgICAgICAgICAgICAgdiAgICAgdgkJCQkjCisjCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tCQkJCSMKKyMgIHNpbmdsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwJCQkJIworIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQkJCQkjCisjCQkJICAgICAgMzEgICAgIDIyICAgICAwCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RzdF9zZ2w6CisJY2xyLmwJCSVkMAorCW1vdi53CQlGVEVNUF9FWCglYTApLCVkMAkjIGdldCBleHBvbmVudAorCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworCWFkZGkudwkJJlNHTF9CSUFTLCVkMAkJIyBhZGQgc2luZ2xlIHByZWNpc2lvbiBiaWFzCisJdHN0LmIJCUZURU1QX0hJKCVhMCkJCSMgaXMgbnVtYmVyIGEgZGVub3JtPworCWJtaS5iCQlkc3RfZ2V0X3N1cHBlcgkJIyBubworCXN1YnEudwkJJjB4MSwlZDAJCSMgeWVzOyBkZW5vcm0gYmlhcyA9IFNHTF9CSUFTIC0gMQorZHN0X2dldF9zdXBwZXI6CisJc3dhcAkJJWQwCQkJIyBwdXQgZXhwIGluIHVwcGVyIHdvcmQgb2YgZDAKKwlsc2wubAkJJjB4NywlZDAJCSMgc2hpZnQgaXQgaW50byBzaW5nbGUgZXhwIGJpdHMKKwl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KKwlicGwuYgkJZHN0X2dldF9zbWFuCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQorCWJzZXQJCSYweDFmLCVkMAkJIyBpZiBuZWdhdGl2ZSwgcHV0IGluIHNpZ24gZmlyc3QKK2RzdF9nZXRfc21hbjoKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKKwlhbmRpLmwJCSYweDdmZmZmZjAwLCVkMQkJIyBnZXQgdXBwZXIgMjMgYml0cyBvZiBtcworCWxzci5sCQkmMHg4LCVkMQkJIyBhbmQgcHV0IHRoZW0gZmx1c2ggcmlnaHQKKwlvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIHNpbmdsZQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdXRfcGFjazoKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmZXRjaCB0aGUgPGVhPgorCW1vdi5sCQklYTAsLSglc3ApCisKKwltb3YuYgkJU1RBRyglYTYpLCVkMAkJIyBmZXRjaCBpbnB1dCB0eXBlCisJYm5lLncJCWZvdXRfcGFja19ub3Rfbm9ybQkjIGlucHV0IGlzIG5vdCBOT1JNCisKK2ZvdXRfcGFja19ub3JtOgorCWJ0c3QJCSYweDQsRVhDX0NNRFJFRyglYTYpCSMgc3RhdGljIG9yIGR5bmFtaWM/CisJYmVxLmIJCWZvdXRfcGFja19zCQkjIHN0YXRpYworCitmb3V0X3BhY2tfZDoKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCSMgZmV0Y2ggZHluYW1pYyByZWcKKwlsc3IuYgkJJjB4NCwlZDEKKwlhbmRpLncJCSYweDcsJWQxCisKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBEbiB3LyBrLWZhY3RvcgorCisJYnJhLmIJCWZvdXRfcGFja190eXBlCitmb3V0X3BhY2tfczoKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggc3RhdGljIGZpZWxkCisKK2ZvdXRfcGFja190eXBlOgorCWJmZXh0cwkJJWQweyYyNTomN30sJWQwCQkjIGV4dHJhY3Qgay1mYWN0b3IKKwltb3YubAklZDAsLSglc3ApCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gaW5wdXQKKworIyBiaW5kZWMgaXMgY3VycmVudGx5IHNjcmFtYmxpbmcgRlBfU1JDIGZvciBkZW5vcm0gaW5wdXRzLgorIyB3ZSdsbCBoYXZlIHRvIGNoYW5nZSB0aGlzLCBidXQgZm9yIG5vdywgdG91Z2ggbHVjayEhIQorCWJzci5sCQliaW5kZWMJCQkjIGNvbnZlcnQgeHByZWMgdG8gcGFja2VkCisKKyMJYW5kaS5sCQkmMHhjZmZmMDAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCisJYW5kaS5sCQkmMHhjZmZmZjAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCisKKwltb3YubAkoJXNwKSssJWQwCisKKwl0c3QuYgkJMytGUF9TQ1IwX0VYKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCXRzdC5sCQlGUF9TQ1IwX0hJKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCXRzdC5sCQlGUF9TQ1IwX0xPKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCisjIGFkZCB0aGUgZXh0cmEgY29uZGl0aW9uIHRoYXQgb25seSBpZiB0aGUgay1mYWN0b3Igd2FzIHplcm8sIHRvbywgc2hvdWxkCisjIHdlIHplcm8gdGhlIGV4cG9uZW50CisJdHN0LmwJCSVkMAorCWJuZS5iCQlmb3V0X3BhY2tfc2V0CisjICJtYW50aXNzYSIgaXMgYWxsIHplcm8gd2hpY2ggbWVhbnMgdGhhdCB0aGUgYW5zd2VyIGlzIHplcm8uIGJ1dCwgdGhlICcwNDAKKyMgYWxnb3JpdGhtIGFsbG93cyB0aGUgZXhwb25lbnQgdG8gYmUgbm9uLXplcm8uIHRoZSA4ODEvMiBkbyBub3QuIHRoZXJlZm9yZSwKKyMgaWYgdGhlIG1hbnRpc3NhIGlzIHplcm8sIEkgd2lsbCB6ZXJvIHRoZSBleHBvbmVudCwgdG9vLgorIyB0aGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIGV4cG9uZW50cyBzaWduIGJpdCBpcyBhbGxvd2VkIHRvIGJlIG5vbi16ZXJvCisjIGZvciBhIHplcm8sIGFsc28uLi4KKwlhbmRpLncJCSYweGYwMDAsRlBfU0NSMCglYTYpCisKK2ZvdXRfcGFja19zZXQ6CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgorCitmb3V0X3BhY2tfd3JpdGU6CisJbW92LmwJCSglc3ApKywlYTEJCSMgcGFzczogZHN0IGFkZHIKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogb3BzaXplIGlzIDEyIGJ5dGVzCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwliZXEuYgkJZm91dF9wYWNrX2E3CisKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwlydHMKKworIyB3ZSBkb24ndCB3YW50IHRvIGRvIHRoZSB3cml0ZSBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZQorIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCitmb3V0X3BhY2tfYTc6CisJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJcnRzCisKK2ZvdXRfcGFja19ub3Rfbm9ybToKKwljbXBpLmIJCSVkMCwmREVOT1JNCQkjIGlzIGl0IGEgREVOT1JNPworCWJlcS53CQlmb3V0X3BhY2tfbm9ybQkJIyB5ZXMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWNsci53CQkyK0ZQX1NSQ19FWCglYTYpCisJY21waS5iCQklZDAsJlNOQU4JCSMgaXMgaXQgYW4gU05BTj8KKwliZXEuYgkJZm91dF9wYWNrX3NuYW4JCSMgeWVzCisJYnJhLmIJCWZvdXRfcGFja193cml0ZQkJIyBubworCitmb3V0X3BhY2tfc25hbjoKKwlvcmkudwkJJnNuYW5pb3AyX21hc2ssRlBTUl9FWENFUFQoJWE2KSAjIHNldCBTTkFOL0FJT1AKKwlic2V0CQkmMHg2LEZQX1NSQ19ISSglYTYpCSMgc2V0IHNuYW4gYml0CisJYnJhLmIJCWZvdXRfcGFja193cml0ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZtdWwoKTogZW11bGF0ZXMgdGhlIGZtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc211bCgpOiBlbXVsYXRlcyB0aGUgZnNtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZG11bCgpOiBlbXVsYXRlcyB0aGUgZmRtdWwgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgbXVsdGlwbHkJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmbXVsIHRvCQkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWFsaWduCQkweDEwCit0YmxfZm11bF9vdmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHRfbWF4CisJbG9uZwkJMHgzZmZmIC0gMHg0MDdlCQkjIHNnbF9tYXgKKwlsb25nCQkweDNmZmYgLSAweDQzZmUJCSMgZGJsX21heAordGJsX2ZtdWxfdW5mbDoKKwlsb25nCQkweDNmZmYgKyAweDAwMDEJCSMgZXh0X3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNmODAJCSMgc2dsX3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNjMDAJCSMgZGJsX3VuZmwKKworCWdsb2JhbAkJZnNtdWwKK2ZzbXVsOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZm11bAorCisJZ2xvYmFsCQlmZG11bAorZmRtdWw6CisJYW5kaS5iCQkmMHgzMCwlZDAKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmbXVsCitmbXVsOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCWJuZS53CQlmbXVsX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKK2ZtdWxfbm9ybToKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgc3JjIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwlhZGQubAkJJWQwLCglc3ApCQkjIFNDQUxFX0ZBQ1RPUiA9IHNjYWxlMSArIHNjYWxlMgorCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCisJbHNyLmIJCSYweDYsJWQxCQkjIHNoaWZ0IHRvIGxvIGJpdHMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyBsb2FkIFMuRi4KKwljbXAubAkJJWQwLCh0YmxfZm11bF9vdmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IG92Zmw/CisJYmVxLncJCWZtdWxfbWF5X292ZmwJCSMgcmVzdWx0IG1heSBybmQgdG8gb3ZlcmZsb3cKKwlibHQudwkJZm11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXAubAkJJWQwLCh0YmxfZm11bF91bmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IHVuZmw/CisJYmVxLncJCWZtdWxfbWF5X3VuZmwJCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAorCWJndC53CQlmbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CisKKyMKKyMgTk9STUFMOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiB3aWxsIG5laXRoZXIgb3ZlcmZsb3cgbm9yIHVuZGVyZmxvdy4KKyMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUuCisjIC0gc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCB1c2luZyB0aGUgc2NhbGUgZmFjdG9yLiBpZiBib3RoIG9wZXJhbmRzIHdlcmUKKyMgbm9ybWFsaXplZCB0aGVuIHdlIHJlYWxseSBkb24ndCBuZWVkIHRvIGdvIHRocm91Z2ggdGhpcyBzY2FsaW5nLiBidXQgZm9yIG5vdywKKyMgdGhpcyB3aWxsIGRvLgorIworZm11bF9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm11bF9ub3JtYWxfZXhpdDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkVSRkxPVzoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gb3ZlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjIC0gaWYgb3ZlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB3ZSBuZWVkIGEgbXVsdGlwbHkgcmVzdWx0IHJvdW5kZWQgdG8KKyMgZXh0ZW5kZWQgcHJlY2lzaW9uLiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoaXMKKyMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKKyMgbXVsdGlwbHkgdXNpbmcgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlLiB0aGUgcmVzdWx0CisjIG9mIHRoaXMgb3BlcmF0aW9uIHRoZW4gaGFzIGl0cyBleHBvbmVudCBzY2FsZWQgYnkgLTB4NjAwMCB0byBjcmVhdGUgdGhlCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCisjCitmbXVsX292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworIyBzYXZlIHNldHRpbmcgdGhpcyB1bnRpbCBub3cgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGZtdWxfbWF5X292ZmwgbWF5IGp1bXAgaW4KK2ZtdWxfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZtdWxfb3ZmbF9lbmEJCSMgeWVzCisKKyMgY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorZm11bF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHJuZCBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZDsgQ3JlYXRlIEVYT1A6CisjIC0gaWYgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLCB0aGVuIHdlIGhhdmUgdGhlIEVYT1AuIHNpbXBseSBiaWFzIHRoZSBleHBvbmVudAorIyB3aXRoIGFuIGV4dHJhIC0weDYwMDAuIGlmIHRoZSBwcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgbmVlZCB0bworIyBjYWxjdWxhdGUgYSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmbXVsX292ZmxfZW5hOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyB0ZXN0IHRoZSBybmQgcHJlYworCWJuZS5iCQlmbXVsX292ZmxfZW5hX3NkCSMgaXQncyBzZ2wgb3IgZGJsCisKK2ZtdWxfb3ZmbF9lbmFfY29udDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHNpZ24gYml0CisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZtdWxfb3ZmbF9kaXMKKworZm11bF9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZSBvbmx5CisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWJyYS5iCQlmbXVsX292ZmxfZW5hX2NvbnQKKworIworIyBtYXkgT1ZFUkZMT1c6CisjIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIE1BWSBvdmVyZmxvdy4KKyMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KKyMgc2V0IHRoZSBpbmV4YWN0IGJpdHMuCisjIC0gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgcmV0dXJuIGl0IGluIGZwMC4KKyMKK2ZtdWxfbWF5X292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmbXVsX292ZmxfdHN0CQkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmbXVsX25vcm1hbF9leGl0CisKKyMKKyMgVU5ERVJGTE9XOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBpcyBhbiB1bmRlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjIC0gaWYgb3ZlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB3ZSBuZWVkIGEgbXVsdGlwbHkgcmVzdWx0IHJvdW5kZWQgdG8KKyMgZXh0ZW5kZWQgcHJlY2lzaW9uLiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoaXMKKyMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKKyMgbXVsdGlwbHkgdXNpbmcgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlLiB0aGUgcmVzdWx0CisjIG9mIHRoaXMgb3BlcmF0aW9uIHRoZW4gaGFzIGl0cyBleHBvbmVudCBzY2FsZWQgYnkgLTB4NjAwMCB0byBjcmVhdGUgdGhlCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCisjCitmbXVsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKyMgZm9yIGZ1biwgbGV0J3MgdXNlIG9ubHkgZXh0ZW5kZWQgcHJlY2lzaW9uLCByb3VuZCB0byB6ZXJvLiB0aGVuLCBsZXQKKyMgdGhlIHVuZl9yZXMoKSByb3V0aW5lIGZpZ3VyZSBvdXQgYWxsIHRoZSByZXN0LgorIyB3aWxsIHdlIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZtdWxfdW5mbF9lbmEJCSMgeWVzCisKK2ZtdWxfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMyIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgVU5GTCBpcyBlbmFibGVkLgorIworZm11bF91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCisKKyMgaWYgdGhlIHJuZCBtb2RlIGlzIGFueXRoaW5nIGJ1dCBSWiwgdGhlbiB3ZSBoYXZlIHRvIHJlLWRvIHRoZSBhYm92ZQorIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZm11bF91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmbXVsX3VuZmxfZGlzCisKK2ZtdWxfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmbXVsX3VuZmxfZW5hX2NvbnQKKworIyBNQVkgVU5ERVJGTE9XOgorIyAtdXNlIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gdGhpcyBjb2RlIGZhdm9ycyBvcGVyYXRpb25zCisjIHRoYXQgZG8gbm90IHVuZGVyZmxvdy4KK2ZtdWxfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID4gMi5iPworCWZiZ3QudwkJZm11bF9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlmYmx0LncJCWZtdWxfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAyLiBidXQsCisjIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDIgb3IKKyMgYSBub3JtYWxpemVkIG51bWJlciB0aGF0IHJvdW5kZWQgZG93biB0byBhIDIuIHNvLCByZWRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uCisjIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZCByZXN1bHQgaXMuCisjIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA8IDIuYj8KKwlmYmdlLncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmbXVsX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZm11bF9vcDoKKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggUU5BTgorCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgWkVSTyB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggUU5BTgorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfaW5mX2RzdAktIHRibF9mbXVsX29wICMgSU5GIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgSU5GIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBRTkFOCisJc2hvcnQJCWZtdWxfaW5mX2RzdAktIHRibF9mbXVsX29wICMgSU5GIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBaRVJPCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IFFOQU4KKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggU05BTgorCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisKKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggUU5BTgorCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBaRVJPCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IFFOQU4KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggU05BTgorCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisKK2ZtdWxfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZtdWxfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmbXVsX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorCisjCisjIE11bHRpcGx5OiAoWmVybyB4IFplcm8pIHx8IChaZXJvIHggbm9ybSkgfHwgKFplcm8geCBkZW5vcm0pCisjCisJZ2xvYmFsCQlmbXVsX3plcm8JCSMgZ2xvYmFsIGZvciBmc2dsbXVsCitmbXVsX3plcm86CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZtdWxfemVyb19wCQkjIHJlc3VsdCBaRVJPIGlzIHBvcy4KK2ZtdWxfemVyb19uOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBaL04KKwlydHMKK2ZtdWxfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGxvYWQgK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyBNdWx0aXBseTogKGluZiB4IGluZikgfHwgKGluZiB4IG5vcm0pIHx8IChpbmYgeCBkZW5vcm0pCisjCisjIE5vdGU6IFRoZSBqLWJpdCBmb3IgYW4gaW5maW5pdHkgaXMgYSBkb24ndC1jYXJlLiBIb3dldmVyLCB0byBiZQorIyBzdHJpY3RseSBjb21wYXRpYmxlIHcvIHRoZSA2ODg4MS84ODIsIHdlIG1ha2Ugc3VyZSB0byByZXR1cm4gYW4KKyMgSU5GIHcvIHRoZSBqLWJpdCBzZXQgaWYgdGhlIGlucHV0IElORiBqLWJpdCB3YXMgc2V0LiBEZXN0aW5hdGlvbgorIyBJTkZzIHRha2UgcHJpb3JpdHkuCisjCisJZ2xvYmFsCQlmbXVsX2luZl9kc3QJCSMgZ2xvYmFsIGZvciBmc2dsbXVsCitmbXVsX2luZl9kc3Q6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIElORiByZXN1bHQgaW4gZnAwCisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZtdWxfaW5mX2RzdF9wCQkjIHJlc3VsdCBJTkYgaXMgcG9zLgorZm11bF9pbmZfZHN0X246CisJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgorCWZuZWcueAkJJWZwMAkJCSMgc2V0IHJlc3VsdCBzaWduCisJbW92LmIJCSZpbmZfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTgorCXJ0cworZm11bF9pbmZfZHN0X3A6CisJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworCWdsb2JhbAkJZm11bF9pbmZfc3JjCQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBJTkYgcmVzdWx0IGluIGZwMAorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KKwlicmEuYgkJZm11bF9pbmZfZHN0X24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmaW4oKTogZW11bGF0ZXMgdGhlIGZtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJZnNpbigpOiBlbXVsYXRlcyB0aGUgZnNtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJZmRpbigpOiBlbXVsYXRlcyB0aGUgZmRtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBtYW50aXNzYSBmb3IgRVhPUCBvbiBkZW5vcm0JCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuXzFvcCgpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCSMKKyMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWMvbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCU5vcm1zIGNhbiBiZSBlbXVsYXRlZCB3LyBhIHJlZ3VsYXIgZm1vdmUgaW5zdHJ1Y3Rpb24uIEZvcgkjCisjIHNnbC9kYmwsIG11c3Qgc2NhbGUgZXhwb25lbnQgYW5kIHBlcmZvcm0gYW4gImZtb3ZlIi4gQ2hlY2sgdG8gc2VlCSMKKyMgaWYgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIG92ZXJmbG93ZWQvdW5kZXJmbG93ZWQuIElmIHNvLCB1c2UgdW5mX3JlcygpCSMKKyMgb3Igb3ZmX3JlcygpIHRvIHJldHVybiB0aGUgZGVmYXVsdCByZXN1bHQuIEFsc28gcmV0dXJuIEVYT1AgaWYJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZC4gSWYgbm8gZXhjZXB0aW9uLCByZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0LgkjCisjCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzaW4KK2ZzaW46CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlY2lzaW9uCisJYnJhLmIJCWZpbgorCisJZ2xvYmFsCQlmZGluCitmZGluOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWNpc2lvbgorCisJZ2xvYmFsCQlmaW4KK2ZpbjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwltb3YuYgkJU1RBRyglYTYpLCVkMQkJIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS53CQlmaW5fbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBGUCBNT1ZFIElOOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQorIworZmluX25vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS53CQlmaW5fbm90X2V4dAkJIyBubywgc28gZ28gaGFuZGxlIGRibCBvciBzZ2wKKworIworIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2Fubm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyB0aGUgb3BlcmFuZCBuZWdhdGl2ZT8KKwlicGwuYgkJZmluX25vcm1fZG9uZQkJIyBubworCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKK2Zpbl9ub3JtX2RvbmU6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmaW5fZGVub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZmluX25vdF9leHQJCSMgbm8sIHNvIGdvIGhhbmRsZSBkYmwgb3Igc2dsCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgdGhlIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9kZW5vcm1fZG9uZQkJIyBubworCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKK2Zpbl9kZW5vcm1fZG9uZToKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmaW5fZGVub3JtX3VuZmxfZW5hCSMgeWVzCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2Zpbl9kZW5vcm1fdW5mbF9lbmE6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHJlc3VsdAorCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJYWRkaS53CQkmMHg2MDAwLCVkMAkJIyBhZGQgbmV3IGJpYXMgdG8gZXhwb25lbnQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIG9sZCBzaWduLGV4cAorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgY2xlYXIgc2lnbiBwb3NpdGlvbgorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBuZXcgZXhvLG9sZCBzaWduCisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBvciBkb3VibGUgcHJlY2lzaW9uCisjCitmaW5fbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZmluX2RibAorCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCisjCitmaW5fc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZmluX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZmluX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIworIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGludG8gdGhlIGZwIHJlZyBmaWxlCisjCitmaW5fc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBtb3ZlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2Zpbl9zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwb25lbnQKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbgorIworZmluX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLncJCWZpbl9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmaW5fc2RfbWF5X292ZmwJCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZpbl9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisJYnJhLncJCWZpbl9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmaW5fc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCXRzdC5iCQlGUF9TQ1IwX0VYKCVhNikJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlicGwuYgkJZmluX3NkX3VuZmxfdHN0CisJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB0aGVuIGdvIGNhbGN1bGF0ZSB0aGUgRVhPUCBmaXJzdC4KK2Zpbl9zZF91bmZsX3RzdDoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmluX3NkX3VuZmxfZW5hCQkjIHllcworCitmaW5fc2RfdW5mbF9kaXM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMgbWF5IGhhdmUgc2V0ICdaJworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmaW5fc2RfdW5mbF9lbmE6CisJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMgZXh0cmFjdCBvbGQgc2lnbgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmaW5fc2RfdW5mbF9kaXMKKworIworIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCisjCitmaW5fc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbW92ZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmaW5fc2Rfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZpbl9zZF9vdmZsX2VuYQkJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2Zpbl9zZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZC4KKyMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KKyMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgorIworZmluX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZmluX3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIG92ZXJmbG93LiBzby4uLgorIworZmluX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSB0aGUgbW92ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmaW5fc2Rfb3ZmbF90c3QJCSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZpbl9zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIG9wZXJhbmQgaXMgbm90IGEgTk9STTogY2hlY2sgaXRzIG9wdHlwZSBhbmQgYnJhbmNoIGFjY29yZGluZ2x5CisjCitmaW5fbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZmluX2Rlbm9ybQorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU5zCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU5zCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIGRvIHRoZSBmbW92ZSBpbjsgYXQgdGhpcyBwb2ludCwgb25seSBwb3NzaWJsZSBvcHMgYXJlIFpFUk8gYW5kIElORi4KKyMgdXNlIGZtb3YgdG8gZGV0ZXJtaW5lIGNjb2Rlcy4KKyMgcHJlYzptb2RlIHNob3VsZCBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQgYnV0IGl0IHdvbid0IGFmZmVjdCBhbnN3ZXIgYW55d2F5cy4KKyMKKwlmbW92LngJCVNSQyglYTApLCVmcDAJCSMgZG8gZm1vdmUgaW4KKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBubyBleGNlcHRpb25zIHBvc3NpYmxlCisJcm9sLmwJCSYweDgsJWQwCQkjIHB1dCBjY29kZXMgaW4gbG8gYnl0ZQorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmRpdigpOiBlbXVsYXRlcyB0aGUgZmRpdiBpbnN0cnVjdGlvbgkJCQkjCisjCWZzZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2RpdiBpbnN0cnVjdGlvbgkJCQkjCisjCWZkZGl2KCk6IGVtdWxhdGVzIHRoZSBmZGRpdiBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBkaXZpZGUJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmZGl2IHRvCQkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWFsaWduCQkweDEwCit0YmxfZmRpdl91bmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4MDAwMAkJIyBleHRfdW5mbAorCWxvbmcJCTB4M2ZmZiAtIDB4M2Y4MQkJIyBzZ2xfdW5mbAorCWxvbmcJCTB4M2ZmZiAtIDB4M2MwMQkJIyBkYmxfdW5mbAorCit0YmxfZmRpdl9vdmZsOgorCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHQgb3ZlcmZsb3cgZXhwb25lbnQKKwlsb25nCQkweDNmZmYgLSAweDQwN2UJCSMgc2dsIG92ZXJmbG93IGV4cG9uZW50CisJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibCBvdmVyZmxvdyBleHBvbmVudAorCisJZ2xvYmFsCQlmc2RpdgorZnNkaXY6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYworCWJyYS5iCQlmZGl2CisKKwlnbG9iYWwJCWZkZGl2CitmZGRpdjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZkaXYKK2ZkaXY6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZmRpdl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIERJVklERTogTk9STXMgYW5kIERFTk9STXMgT05MWSEKKyMKK2ZkaXZfbm9ybToKKwltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgc3JjIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwluZWcubAkJKCVzcCkJCQkjIFNDQUxFIEZBQ1RPUiA9IHNjYWxlMSAtIHNjYWxlMgorCWFkZC5sCQklZDAsKCVzcCkKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbgorCWxzci5iCQkmMHg2LCVkMQkJIyBzaGlmdCB0byBsbyBiaXRzCisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfb3ZmbC5iLCVwYywlZDEudyo0KSAjIHdpbGwgcmVzdWx0IG92ZXJmbG93PworCWJsZS53CQlmZGl2X21heV9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXAubAkJJWQwLCh0YmxfZmRpdl91bmZsLncsJXBjLCVkMS53KjQpICMgd2lsbCByZXN1bHQgdW5kZXJmbG93PworCWJlcS53CQlmZGl2X21heV91bmZsCQkjIG1heWJlCisJYmd0LncJCWZkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworZmRpdl9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzYXZlIEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZkaXZfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IG9uIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc3RvcmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCit0YmxfZmRpdl9vdmZsMjoKKwlsb25nCQkweDdmZmYKKwlsb25nCQkweDQwN2YKKwlsb25nCQkweDQzZmYKKworZmRpdl9ub19vdmZsOgorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgc2NhbGUgZmFjdG9yCisJYnJhLmIJCWZkaXZfbm9ybWFsX2V4aXQKKworZmRpdl9tYXlfb3ZmbDoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCWZtb3YubAkJJjB4MCwlZnBjcgorCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KKworCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQkoJXNwKSwlZDAJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIHJlc3VsdCBmcm9tIHN0YWNrCisJYW5kaS5sCQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSglc3ApLCVkMAkJIyBhZGQgc2NhbGUgZmFjdG9yCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfb3ZmbDIuYiwlcGMsJWQxLncqNCkKKwlibHQuYgkJZmRpdl9ub19vdmZsCisJbW92LmwJCSglc3ApKywlZDAKKworZmRpdl9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmRpdl9vdmZsX2VuYQkJIyB5ZXMKKworZmRpdl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZkaXZfb3ZmbF9lbmE6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmRpdl9vdmZsX2VuYV9zZAkjIG5vLCBkbyBzZ2wgb3IgZGJsCisKK2ZkaXZfb3ZmbF9lbmFfY29udDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHNpZ24gYml0CisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZkaXZfb3ZmbF9kaXMKKworZmRpdl9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJYnJhLmIJCWZkaXZfb3ZmbF9lbmFfY29udAorCitmZGl2X3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmZGl2X3VuZmxfZW5hCQkjIHllcworCitmZGl2X3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgVU5GTCBpcyBlbmFibGVkLgorIworZmRpdl91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmRpdl91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZmRpdl91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9lcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmZGl2X3VuZmxfZGlzCisKK2ZkaXZfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmZGl2X3VuZmxfZW5hX2NvbnQKKworIworIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgorIworZmRpdl9tYXlfdW5mbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+IDEuYj8KKwlmYmd0LncJCWZkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAxCisjIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCisjIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKKyMgcmVzdWx0IGlzLiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKKworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA8IDEuYj8KKwlmYmdlLncJCWZkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgRGl2aWRlOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmZGl2X25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mZGl2X29wOgorCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBaRVJPCisJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBRTkFOCisJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgTk9STSAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX29wZXJyCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gUU5BTgorCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9pbmZfZHN0CS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gWkVSTworCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgSU5GIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIElORiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9pbmZfZHN0CS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgSU5GIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIE5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gUU5BTgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKworCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIE5PUk0KKwlzaG9ydAkJZmRpdl9pbmZfbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gSU5GCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFFOQU4KKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIE5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gUU5BTgorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKworZmRpdl9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZkaXZfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmZGl2X3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCisKKwlnbG9iYWwJCWZkaXZfemVyb19sb2FkCQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl96ZXJvX2xvYWQ6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyByZXN1bHQgc2lnbiBpcyBleGNsdXNpdmUKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCQkjIG9yIG9mIGlucHV0IHNpZ25zLgorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZkaXZfemVyb19sb2FkX3AJIyByZXN1bHQgaXMgcG9zaXRpdmUKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyBsb2FkIGEgLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL04KKwlydHMKK2ZkaXZfemVyb19sb2FkX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCBhICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgVGhlIGRlc3RpbmF0aW9uIHdhcyBJbiBSYW5nZSBhbmQgdGhlIHNvdXJjZSB3YXMgYSBaRVJPLiBUaGUgcmVzdWx0LAorIyB0aGVyZWZvcmUsIGlzIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCisjIFNvLCBkZXRlcm1pbmUgdGhlIHNpZ24gYW5kIHJldHVybiBhIG5ldyBJTkYgKHcvIHRoZSBqLWJpdCBjbGVhcmVkKS4KKyMKKwlnbG9iYWwJCWZkaXZfaW5mX2xvYWQJCSMgZ2xvYmFsIGZvciBmc2dsZGl2CitmZGl2X2luZl9sb2FkOgorCW9yaS53CQkmZHpfbWFzaythZHpfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgbm87IHNldCBEWi9BRFoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGxvYWQgYm90aCBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X2luZl9sb2FkX3AJCSMgcmVzdWx0IGlzIHBvc2l0aXZlCisJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgLUlORgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KKwlydHMKK2ZkaXZfaW5mX2xvYWRfcDoKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyBtYWtlIHJlc3VsdCArSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgorCXJ0cworCisjCisjIFRoZSBkZXN0aW5hdGlvbiB3YXMgYW4gSU5GIHcvIGFuIEluIFJhbmdlIG9yIFpFUk8gc291cmNlLCB0aGUgcmVzdWx0IGlzCisjIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCisjIFRoZSA2ODg4MS84ODIgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gSU5GIHcvIHRoZSBuZXcgc2lnbihpZiB0aGUgai1iaXQgb2YgdGhlCisjIGRzdCBJTkYgaXMgc2V0LCB0aGVuIHRoZW4gai1iaXQgb2YgdGhlIHJlc3VsdCBJTkYgaXMgYWxzbyBzZXQpLgorIworCWdsb2JhbAkJZmRpdl9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl9pbmZfZHN0OgorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDAJCSMgbG9hZCBib3RoIHNpZ25zCisJbW92LmIJCVNSQ19FWCglYTApLCVkMQorCWVvci5iCQklZDAsJWQxCisJYnBsLmIJCWZkaXZfaW5mX2RzdF9wCQkjIHJlc3VsdCBpcyBwb3NpdGl2ZQorCisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlmYWJzLngJCSVmcDAJCQkjIGNsZWFyIHNpZ24gYml0CisJZm5lZy54CQklZnAwCQkJIyBzZXQgc2lnbiBiaXQKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZmRpdl9pbmZfZHN0X3A6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlmYWJzLngJCSVmcDAJCQkjIHJldHVybiBwb3NpdGl2ZSBJTkYKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm5lZygpOiBlbXVsYXRlcyB0aGUgZm5lZyBpbnN0cnVjdGlvbgkJCQkjCisjCWZzbmVnKCk6IGVtdWxhdGVzIHRoZSBmc25lZyBpbnN0cnVjdGlvbgkJCQkjCisjCWZkbmVnKCk6IGVtdWxhdGVzIHRoZSBmZG5lZyBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgYSBkZW5vcm0gdG8gcHJvdmlkZSBFWE9QCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc2dsL2RibCBzb3VyY2UgZXhwb25lbnQJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCisjCXJlc19zbmFuXzFvcCgpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgemVyb2VzLCBhbmQgaW5maW5pdGllcyBhcyBzcGVjaWFsIGNhc2VzLiBTZXBhcmF0ZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb25zLiBFeHRlbmRlZCBwcmVjaXNpb24gY2FuIGJlCSMKKyMgZW11bGF0ZWQgYnkgc2ltcGx5IHNldHRpbmcgc2lnbiBiaXQuIFNnbC9kYmwgb3BlcmFuZHMgbXVzdCBiZSBzY2FsZWQJIworIyBhbmQgYW4gYWN0dWFsIGZuZWcgcGVyZm9ybWVkIHRvIHNlZSBpZiBvdmVyZmxvdy91bmRlcmZsb3cgd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93L292ZXJmbG93IHJlc3VsdC4gRWxzZSwJIworIyBzY2FsZSB0aGUgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4gcmVzdWx0LiBGUFNSIGdldHMgc2V0IGJhc2VkIG9uCSMKKyMgdGhlIHJlc3VsdCB2YWx1ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNuZWcKK2ZzbmVnOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmbmVnCisKKwlnbG9iYWwJCWZkbmVnCitmZG5lZzoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZuZWcKK2ZuZWc6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZuZWdfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBORUdBVEUgU0lHTiA6IG5vcm1zIGFuZCBkZW5vcm1zIE9OTFkhCisjCitmbmVnX25vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS53CQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKyMKKyMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbiBub3QgZ2V0IGFuIHVuZGVyZmxvdworIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KKyMgc2tpcCB0aGUgc2NhbGluZyBhbmQgdW5zY2FsaW5nLi4uCisjCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgorCWJwbC5iCQlmbmVnX25vcm1fbG9hZAkJIyBzaWduIGlzIHBvc2l0aXZlCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKK2ZuZWdfbm9ybV9sb2FkOgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmbmVnX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZuZWdfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCisJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgorCWJwbC5iCQlmbmVnX2Rlbm9ybV9kb25lCSMgbm8KKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyB5ZXMsIHNldCAnTicgY2NvZGUgYml0CitmbmVnX2Rlbm9ybV9kb25lOgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CisJYm5lLmIJCWZuZWdfZXh0X3VuZmxfZW5hCSMgeWVzCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2ZuZWdfZXh0X3VuZmxfZW5hOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZuZWdfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZm5lZ19kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZm5lZ19zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmbmVnX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZm5lZ19zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnIGZpbGUKKyMKK2ZuZWdfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmbmVnX3NkX25vcm1hbF9leGl0OgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKKwltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2ZuZWdfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UuYgkJZm5lZ19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmbmVnX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZuZWdfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmbmVnX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIworIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKKyMKK2ZuZWdfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWVvcmkuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19zZF91bmZsX3RzdAorCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCitmbmVnX3NkX3VuZmxfdHN0OgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbmVnX3NkX3VuZmxfZW5hCSMgeWVzCisKK2ZuZWdfc2RfdW5mbF9kaXM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMgbWF5IGhhdmUgc2V0ICdaJworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZm5lZ19zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmbmVnX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZm5lZ19zZF9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmbmVnX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbmVnX3NkX292ZmxfZW5hCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmbmVnX3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmbmVnX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZm5lZ19zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCisjCitmbmVnX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbmVnLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBuZWdhdGlvbgorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmbmVnX3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZuZWdfc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZuZWdfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZm5lZ19kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU4KKwliZXEubAkJcmVzX3FuYW5fMW9wCisKKyMKKyMgZG8gdGhlIGZuZWc7IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCisjIHVzZSBmbmVnIHRvIGRldGVybWluZSBjY29kZXMuCisjIHByZWM6bW9kZSBzaG91bGQgYmUgemVybyBhdCB0aGlzIHBvaW50IGJ1dCBpdCB3b24ndCBhZmZlY3QgYW5zd2VyIGFueXdheXMuCisjCisJZm5lZy54CQlTUkNfRVgoJWEwKSwlZnAwCSMgZG8gZm5lZworCWZtb3YubAkJJWZwc3IsJWQwCisJcm9sLmwJCSYweDgsJWQwCQkjIHB1dCBjY29kZXMgaW4gbG8gYnl0ZQorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnRzdCgpOiBlbXVsYXRlcyB0aGUgZnRlc3QgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVze3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBpbnN0cnVjdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlDaGVjayB0aGUgc291cmNlIG9wZXJhbmQgdGFnIChTVEFHKSBhbmQgc2V0IHRoZSBGUENSIGFjY29yZGluZwkjCisjIHRvIHRoZSBvcGVyYW5kIHR5cGUgYW5kIHNpZ24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnRzdAorZnRzdDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmdHN0X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTm9ybToKKyMKK2Z0c3Rfbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF9ub3JtX20JCSMgeWVzCisJcnRzCitmdHN0X25vcm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZnRzdF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZ0c3RfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZ0c3RfaW5mCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIERlbm9ybToKKyMKK2Z0c3RfZGVub3JtOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5iCQlmdHN0X2Rlbm9ybV9tCQkjIHllcworCXJ0cworZnRzdF9kZW5vcm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisjCisjIEluZmluaXR5OgorIworZnRzdF9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3RfaW5mX20JCSMgeWVzCitmdHN0X2luZl9wOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCitmdHN0X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ0knLCdOJyBjY29kZSBiaXRzCisJcnRzCisKKyMKKyMgWmVybzoKKyMKK2Z0c3RfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF96ZXJvX20JCSMgeWVzCitmdHN0X3plcm9fcDoKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKK2Z0c3RfemVyb19tOgorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZpbnQoKTogZW11bGF0ZXMgdGhlIGZpbnQgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKKyMgaGVyZS4gRm9yIG5vcm1zLCBsb2FkIHRoZSByb3VuZGluZyBtb2RlL3ByZWMsIGV4ZWN1dGUgYSAiZmludCIsIHRoZW4JIworIyBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKKyMJRm9yIGRlbm9ybXMsIGZvcmNlIHRoZSBqLWJpdCB0byBhIG9uZSBhbmQgZG8gdGhlIHNhbWUgYXMgZm9yCSMKKyMgbm9ybXMuIERlbm9ybXMgYXJlIHNvIGxvdyB0aGF0IHRoZSBhbnN3ZXIgd2lsbCBlaXRoZXIgYmUgYSB6ZXJvIG9yIGEJIworIyBvbmUuCQkJCQkJCQkJIworIwlGb3IgemVyb2VzL2luZnMvTkFOcywgcmV0dXJuIHRoZSBzYW1lIHdoaWxlIHNldHRpbmcgdGhlIEZQU1IJIworIyBhcyBhcHByb3ByaWF0ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZmludAorZmludDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmaW50X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTm9ybToKKyMKK2ZpbnRfbm9ybToKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBzZXQgcHJlYyA9IGV4dAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmludC54CQlTUkMoJWEwKSwlZnAwCQkjIGV4ZWN1dGUgZmludAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzZXQgZXhjZXB0aW9uIGJpdHMKKworCXJ0cworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZmludF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZpbnRfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZpbnRfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEuYgkJZmludF9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AJCSMgd2VlZCBvdXQgUU5BTgorCisjCisjIERlbm9ybToKKyMKKyMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSBlaXRoZXIgKCsvLSlaRVJPIG9yICgrLy0pMS4KKyMgYWxzbywgdGhlIElORVgyIGFuZCBBSU5FWCBleGNlcHRpb24gYml0cyB3aWxsIGJlIHNldC4KKyMgc28sIHdlIGNvdWxkIGVpdGhlciBzZXQgdGhlc2UgbWFudWFsbHkgb3IgZm9yY2UgdGhlIERFTk9STQorIyB0byBhIHZlcnkgc21hbGwgTk9STSBhbmQgc2hpcCBpdCB0byB0aGUgTk9STSByb3V0aW5lLgorIyBJIGRvIHRoZSBsYXR0ZXIuCisjCitmaW50X2Rlbm9ybToKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpICMgY29weSBzaWduLCB6ZXJvIGV4cAorCW1vdi5iCQkmMHg4MCxGUF9TQ1IwX0hJKCVhNikJIyBmb3JjZSBERU5PUk0gPT0+IHNtYWxsIE5PUk0KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEuYgkJZmludF9ub3JtCisKKyMKKyMgWmVybzoKKyMKK2ZpbnRfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBuZWdhdGl2ZT8KKwlibWkuYgkJZmludF96ZXJvX20JCSMgeWVzCitmaW50X3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmaW50X3plcm9fbToKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gLVpFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCisJcnRzCisKKyMKKyMgSW5maW5pdHk6CisjCitmaW50X2luZjoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRfaW5mX20JCSMgeWVzCitmaW50X2luZl9wOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCitmaW50X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmludHJ6KCk6IGVtdWxhdGVzIHRoZSBmaW50cnogaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfe3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBvcGVyYXRpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbi9tb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2VwYXJhdGUgYWNjb3JkaW5nIHRvIG9wZXJhbmQgdHlwZS4gVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2gJIworIyBoZXJlLiBGb3Igbm9ybXMsIGxvYWQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYywgZXhlY3V0ZSBhICJmaW50cnoiLAkjCisjIHRoZW4gc3RvcmUgdGhlIHJlc3VsdGluZyBGUFNSIGJpdHMuCQkJCQkjCisjCUZvciBkZW5vcm1zLCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUgYW5kIGRvIHRoZSBzYW1lIGFzIGZvcgkjCisjIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKKyMgb25lLgkJCQkJCQkJCSMKKyMJRm9yIHplcm9lcy9pbmZzL05BTnMsIHJldHVybiB0aGUgc2FtZSB3aGlsZSBzZXR0aW5nIHRoZSBGUFNSCSMKKyMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZpbnRyegorZmludHJ6OgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLmIJCWZpbnRyel9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmaW50cnpfbm9ybToKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmludHJ6LngJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnRyegorCisJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCisKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZpbnRyel9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZpbnRyel96ZXJvCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZmludHJ6X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLmIJCWZpbnRyel9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AJCSMgd2VlZCBvdXQgUU5BTgorCisjCisjIERlbm9ybToKKyMKKyMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSAoKy8tKVpFUk8uCisjIGFsc28sIHRoZSBJTkVYMiBhbmQgQUlORVggZXhjZXB0aW9uIGJpdHMgd2lsbCBiZSBzZXQuCisjIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KKyMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KKyMgSSBkbyB0aGUgbGF0dGVyLgorIworZmludHJ6X2Rlbm9ybToKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpICMgY29weSBzaWduLCB6ZXJvIGV4cAorCW1vdi5iCQkmMHg4MCxGUF9TQ1IwX0hJKCVhNikJIyBmb3JjZSBERU5PUk0gPT0+IHNtYWxsIE5PUk0KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEuYgkJZmludHJ6X25vcm0KKworIworIyBaZXJvOgorIworZmludHJ6X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRyel96ZXJvX20JCSMgeWVzCitmaW50cnpfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTyBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKK2ZpbnRyel96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIEluZmluaXR5OgorIworZmludHJ6X2luZjoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRyel9pbmZfbQkJIyB5ZXMKK2ZpbnRyel9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZmludHJ6X2luZl9tOgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFicygpOiAgZW11bGF0ZXMgdGhlIGZhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc2FicygpOiBlbXVsYXRlcyB0aGUgZnNhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGFicygpOiBlbXVsYXRlcyB0aGUgZmRhYnMgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIGRlbm9ybSBtYW50aXNzYSB0byBwcm92aWRlIEVYT1AJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIG1ha2UgZXhwb25lbnQuID0gMDsgZ2V0IHNjYWxlIGZhY3RvcgkjCisjCXVuZl9yZXMoKSAtIGNhbGN1bGF0ZSB1bmRlcmZsb3cgcmVzdWx0CQkJCSMKKyMJb3ZmX3JlcygpIC0gY2FsY3VsYXRlIG92ZXJmbG93IHJlc3VsdAkJCQkjCisjCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm5kIHByZWNpc2lvbi9tb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJU2ltcGx5IGNsZWFyIHNpZ24gZm9yIGV4dGVuZGVkIHByZWNpc2lvbiBub3JtLiBFeHQgcHJlYyBkZW5vcm0JIworIyBnZXRzIGFuIEVYT1AgY3JlYXRlZCBmb3IgaXQgc2luY2UgaXQncyBhbiB1bmRlcmZsb3cuCQkJIworIwlEb3VibGUgYW5kIHNpbmdsZSBwcmVjaXNpb24gY2FuIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cuIEZpcnN0LAkjCisjIHNjYWxlIHRoZSBvcGVyYW5kIHN1Y2ggdGhhdCB0aGUgZXhwb25lbnQgaXMgemVyby4gUGVyZm9ybSBhbiAiZmFicyIJIworIyB1c2luZyB0aGUgY29ycmVjdCBybmQgbW9kZS9wcmVjLiBDaGVjayB0byBzZWUgaWYgdGhlIG9yaWdpbmFsCQkjCisjIGV4cG9uZW50IHdvdWxkIHRha2UgYW4gZXhjZXB0aW9uLiBJZiBzbywgdXNlIHVuZl9yZXMoKSBvciBvdmZfcmVzKCkJIworIyB0byBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0LiBBbHNvLCBjcmVhdGUgdGhlIEVYT1AgZm9yIHRoZQkjCisjIGV4Y2VwdGlvbmFsIGNhc2UuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIsIGluc2VydCB0aGUgY29ycmVjdAkjCisjIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLgkJCQkJCSMKKyMJVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2ggaGVyZS4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNhYnMKK2ZzYWJzOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmYWJzCisKKwlnbG9iYWwJCWZkYWJzCitmZGFiczoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZmFicworZmFiczoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUudwkJZmFic19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIEFCU09MVVRFIFZBTFVFOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQorIworZmFic19ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFic19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisjCisjIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMQorCWJjbHIJCSYxNSwlZDEJCQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIGZvciBhbiBleHRlbmRlZCBwcmVjaXNpb24gREVOT1JNLCB0aGUgVU5GTCBleGNlcHRpb24gYml0IGlzIHNldAorIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKKyMKK2ZhYnNfZGVub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFic19ub3RfZXh0CQkjIG5vCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWJjbHIJCSYxNSwlZDAJCQkjIGNsZWFyIHNpZ24KKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudAorCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfZXh0X3VuZmxfZW5hCisJcnRzCisKKyMKKyMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCisjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgYW5kIGFkZCB0aGUgYmlhcyBvZiAweDYwMDAgdG8gdGhlIHJlc3VsdGluZyBuZWdhdGl2ZQorIyBleHBvbmVudCBhbmQgaW5zZXJ0IGJhY2sgaW50byB0aGUgb3BlcmFuZC4KKyMKK2ZhYnNfZXh0X3VuZmxfZW5hOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZhYnNfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUuYgkJZmFic19kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZmFic19zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmYWJzX3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2UJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZmFic19zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnIGZpbGUKKyMKK2ZhYnNfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmYWJzX3NkX25vcm1hbF9leGl0OgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2ZhYnNfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UuYgkJZmFic19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmYWJzX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZhYnNfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmYWJzX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIworIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKKyMKK2ZhYnNfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWJjbHIJCSYweDcsRlBfU0NSMF9FWCglYTYpCSMgZm9yY2UgYWJzb2x1dGUgdmFsdWUKKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCBnbyBjYWxjdWxhdGUgRVhPUCBmaXJzdC4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFic19zZF91bmZsX2VuYQkjIHllcworCitmYWJzX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgcG9zc2libGUgJ1onIGNjb2RlCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmYWJzX3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZhYnNfc2RfdW5mbF9kaXMKKworIworIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCisjCitmYWJzX3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZhYnNfc2Rfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfc2Rfb3ZmbF9lbmEJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2ZhYnNfc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2ZhYnNfc2Rfb3ZmbF9lbmE6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmYWJzX3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KKyMKK2ZhYnNfc2RfbWF5X292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KKwlmYmdlLncJCWZhYnNfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZmFic19zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZmFic19ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS53CQlmYWJzX2Rlbm9ybQorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU4KKwliZXEubAkJcmVzX3NuYW5fMW9wCisJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgorCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworCWZhYnMueAkJU1JDKCVhMCksJWZwMAkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQorCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZmFic19pbmYKK2ZhYnNfemVybzoKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKK2ZhYnNfaW5mOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmNtcCgpOiBmcCBjb21wYXJlIG9wIHJvdXRpbmUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjL21vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcyBhbmQgZGVub3JtcyBhcyBzcGVjaWFsIGNhc2VzLiBGb3IgZXZlcnl0aGluZyBlbHNlLAkjCisjIGp1c3QgdXNlIHRoZSBhY3R1YWwgZmNtcCBpbnN0cnVjdGlvbiB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbgkjCisjIGNvZGVzLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZmNtcAorZmNtcDoKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCisJYm5lLmIJCWZjbXBfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBDT01QQVJFIEZQIE9QcyA6IE5PUk1zLCBaRVJPcywgSU5GcywgYW5kICJjb3JyZWN0ZWQiIERFTk9STXMKKyMKK2ZjbXBfbm9ybToKKwlmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyBsb2FkIGRzdCBvcAorCisJZmNtcC54CQklZnAwLFNSQyglYTApCQkjIGRvIGNvbXBhcmUKKworCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgorCXJvbC5sCQkmMHg4LCVkMAkJIyBleHRyYWN0IGNjb2RlIGJpdHMKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBjY29kZSBiaXRzKG5vIGV4YyBiaXRzIGFyZSBzZXQpCisKKwlydHMKKworIworIyBmY21wOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmY21wX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZjbXBfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZjbXBfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mY21wX29wOgorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBOT1JNCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZjbXBfbnJtX2Rucm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIE5PUk0KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gWkVSTworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3MJLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gTk9STQorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIElORiAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgSU5GIC0gUU5BTgorCXNob3J0CQlmY21wX2Rucm1fcwktIHRibF9mY21wX29wICMgSU5GIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIElORiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBaRVJPCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKwlzaG9ydAkJZmNtcF9kbnJtX25ybQktIHRibF9mY21wX29wICMgREVOT1JNIC0gTk9STQorCXNob3J0CQlmY21wX2Rucm1fZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gWkVSTworCXNob3J0CQlmY21wX2Rucm1fZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3NkCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgREVOT1JNIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIE5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIFpFUk8KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIElORgorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gUU5BTgorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworIyB1bmxpa2UgYWxsIG90aGVyIGZ1bmN0aW9ucyBmb3IgUU5BTiBhbmQgU05BTiwgZmNtcCBkb2VzIE5PVCBzZXQgdGhlCisjICdOJyBiaXQgZm9yIGEgbmVnYXRpdmUgUU5BTiBvciBTTkFOIGlucHV0IHNvIHdlIG11c3Qgc3F1ZWxjaCBpdCBoZXJlLgorZmNtcF9yZXNfcW5hbjoKKwlic3IubAkJcmVzX3FuYW4KKwlhbmRpLmIJCSYweGY3LEZQU1JfQ0MoJWE2KQorCXJ0cworZmNtcF9yZXNfc25hbjoKKwlic3IubAkJcmVzX3NuYW4KKwlhbmRpLmIJCSYweGY3LEZQU1JfQ0MoJWE2KQorCXJ0cworCisjCisjIERFTk9STXMgYXJlIGEgbGl0dGxlIG1vcmUgZGlmZmljdWx0LgorIyBJZiB5b3UgaGF2ZSBhIDIgREVOT1JNcywgdGhlbiB5b3UgY2FuIGp1c3QgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lCisjIGFuZCB1c2UgdGhlIGZjbXBfbm9ybSByb3V0aW5lLgorIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYW4gSU5GIG9yIFpFUk8sIGp1c3QgZm9yY2UgdGhlIERFTk9STSdzIGotYml0IHRvIGEgb25lCisjIGFuZCB1c2UgdGhlIGZjbXBfbm9ybSByb3V0aW5lLgorIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYSBOT1JNIHdpdGggb3Bwb3NpdGUgc2lnbnMsIHRoZW4gdXNlIGZjbXBfbm9ybSwgYWxzby4KKyMgQnV0IHdpdGggYSBERU5PUk0gYW5kIGEgTk9STSBvZiB0aGUgc2FtZSBzaWduLCB0aGUgbmVnIGJpdCBpcyBzZXQgaWYgdGhlCisjICgxKSBzaWducyBhcmUgKCspIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBkc3Qgb3IKKyMgKDIpIHNpZ25zIGFyZSAoLSkgYW5kIHRoZSBERU5PUk0gaXMgdGhlIHNyYworIworCitmY21wX2Rucm1fczoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBzcmM7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX2Rucm1fZDoKKwltb3YubAkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBzcmM7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWExCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX2Rucm1fc2Q6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksJWQwCisJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KKwltb3YubAkJJWQwLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gZHN0OyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTEKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlicmEudwkJZmNtcF9ub3JtCisKK2ZjbXBfbnJtX2Rucm06CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJtaS53CQlmY21wX2Rucm1fcworCisjIHNpZ25zIGFyZSB0aGUgc2FtZSwgc28gbXVzdCBkZXRlcm1pbmUgdGhlIGFuc3dlciBvdXJzZWx2ZXMuCisJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPworCWJtaS5iCQlmY21wX25ybV9kbnJtX20JCSMgeWVzCisJcnRzCitmY21wX25ybV9kbnJtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKKworZmNtcF9kbnJtX25ybToKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGRldGVybWluZSBpZiBsaWtlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYm1pLncJCWZjbXBfZG5ybV9kCisKKyMgc2lnbnMgYXJlIHRoZSBzYW1lLCBzbyBtdXN0IGRldGVybWluZSB0aGUgYW5zd2VyIG91cnNlbHZlcy4KKwl0c3QuYgkJJWQwCQkJIyBpcyBzcmMgb3AgbmVnYXRpdmU/CisJYnBsLmIJCWZjbXBfZG5ybV9ucm1fbQkJIyBubworCXJ0cworZmNtcF9kbnJtX25ybV9tOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnNnbG11bCgpOiBlbXVsYXRlcyB0aGUgZnNnbG11bCBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKKyMJdW5mX3JlczQoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgZm9yIHNnbG9wCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzZ2xtdWwgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzZ2xtdWwKK2ZzZ2xtdWw6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQorCisJYm5lLncJCWZzZ2xtdWxfbm90X25vcm0JIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCitmc2dsbXVsX25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIGV4cG9uZW50CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQorCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgZHN0IGV4cG9uZW50CisKKwlhZGQubAkJKCVzcCkrLCVkMAkJIyBTQ0FMRV9GQUNUT1IgPSBzY2FsZTEgKyBzY2FsZTIKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCSMgd291bGQgcmVzdWx0IG92Zmw/CisJYmVxLncJCWZzZ2xtdWxfbWF5X292ZmwJIyByZXN1bHQgbWF5IHJuZCB0byBvdmVyZmxvdworCWJsdC53CQlmc2dsbXVsX292ZmwJCSMgcmVzdWx0IHdpbGwgb3ZlcmZsb3cKKworCWNtcGkubAkJJWQwLCYweDNmZmYrMHgwMDAxCSMgd291bGQgcmVzdWx0IHVuZmw/CisJYmVxLncJCWZzZ2xtdWxfbWF5X3VuZmwJIyByZXN1bHQgbWF5IHJuZCB0byBubyB1bmZsCisJYmd0LncJCWZzZ2xtdWxfdW5mbAkJIyByZXN1bHQgd2lsbCB1bmRlcmZsb3cKKworZnNnbG11bF9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xtdWxfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsbXVsX292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xtdWxfb3ZmbF90c3Q6CisKKyMgc2F2ZSBzZXR0aW5nIHRoaXMgdW50aWwgbm93IGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBmc2dsbXVsX21heV9vdmZsIG1heSBqdW1wIGluCisJb3IubAkJJm92ZmxfaW54X21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc2dsbXVsX292ZmxfZW5hCSMgeWVzCisKK2ZzZ2xtdWxfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGZvcmNlIHByZWMgPSBleHQKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsbXVsX292ZmxfZW5hOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIG1vdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnNnbG11bF9vdmZsX2RpcworCitmc2dsbXVsX21heV9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZnNnbG11bF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmc2dsbXVsX25vcm1hbF9leGl0CisKK2ZzZ2xtdWxfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbG11bF91bmZsX2VuYQkjIHllcworCitmc2dsbXVsX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXM0CQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZzZ2xtdWxfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmc2dsbXVsX3VuZmxfZGlzCisKK2ZzZ2xtdWxfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+IDIuYj8KKwlmYmd0LncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmc2dsbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAyIG9yCisjIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgorIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgorIyB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKKworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8IDwgMi5iPworCWZiZ2UudwkJZnNnbG11bF9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlicmEudwkJZnNnbG11bF91bmZsCQkjIHllcywgdW5kZXJmbG93IG9jY3VycmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIFNpbmdsZSBQcmVjaXNpb24gTXVsdGlwbHk6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZzZ2xtdWxfbm90X25vcm06CisJbW92LncJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZzZ2xtdWxfb3A6CisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggWkVSTworCXNob3J0CQlmc2dsbXVsX3Jlc19vcGVycgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfb3BlcnIJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggWkVSTworCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKK2ZzZ2xtdWxfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZzZ2xtdWxfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmc2dsbXVsX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnNnbG11bF96ZXJvOgorCWJyYS5sCQlmbXVsX3plcm8KK2ZzZ2xtdWxfaW5mX3NyYzoKKwlicmEubAkJZm11bF9pbmZfc3JjCitmc2dsbXVsX2luZl9kc3Q6CisJYnJhLmwJCWZtdWxfaW5mX2RzdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzZ2xkaXYoKTogZW11bGF0ZXMgdGhlIGZzZ2xkaXYgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbGRpdiB0bwkjCisjIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIworIyBhbiBleGNlcHRpb24uIElmIHNvLCByZXR1cm4gdGhlIGRlZmF1bHQgb3ZlcmZsb3cvdW5kZXJmbG93IHJlc3VsdAkjCisjIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKKyMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNnbGRpdgorZnNnbGRpdjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKworCWJuZS53CQlmc2dsZGl2X25vdF9ub3JtCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBESVZJREU6IE5PUk1zIGFuZCBERU5PUk1zIE9OTFkhCisjCitmc2dsZGl2X25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IgMQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IgMgorCisJbmVnLmwJCSglc3ApCQkJIyBTLkYuID0gc2NhbGUxIC0gc2NhbGUyCisJYWRkLmwJCSVkMCwoJXNwKQorCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uLG1vZGUKKwlsc3IuYgkJJjB4NiwlZDEKKwltb3YubAkJKCVzcCkrLCVkMAorCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCisJYmxlLncJCWZzZ2xkaXZfbWF5X292ZmwKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgwMDAwCSMgd2lsbCByZXN1bHQgdW5kZXJmbG93PworCWJlcS53CQlmc2dsZGl2X21heV91bmZsCSMgbWF5YmUKKwliZ3QudwkJZnNnbGRpdl91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCitmc2dsZGl2X25vcm1hbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNhdmUgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZnNnbGRpdl9ub3JtYWxfZXhpdDoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbGRpdl9tYXlfb3ZmbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIHNldCBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEKKwlmbW92LmwJCSYweDAsJWZwY3IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciByZXN1bHQKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWNtcC5sCQklZDEsJjB4N2ZmZgkJIyBkaWQgZGl2aWRlIG92ZXJmbG93PworCWJsdC5iCQlmc2dsZGl2X25vcm1hbF9leGl0CisKK2ZzZ2xkaXZfb3ZmbF90c3Q6CisJb3IudwkJJm92ZmxfaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbGRpdl9vdmZsX2VuYQkjIHllcworCitmc2dsZGl2X292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZQorCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGtpbGwgcHJlY2lzaW9uCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZzZ2xkaXZfb3ZmbF9lbmE6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgbXMgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xkaXZfb3ZmbF9kaXMKKworZnNnbGRpdl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbGRpdl91bmZsX2VuYQkjIHllcworCitmc2dsZGl2X3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXM0CQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZzZ2xkaXZfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbiwgbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnNnbGRpdl91bmZsX2RpcworCisjCisjIHRoZSBkaXZpZGUgb3BlcmF0aW9uIE1BWSB1bmRlcmZsb3c6CisjCitmc2dsZGl2X21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID4gMS5iPworCWZiZ3QudwkJZnNnbGRpdl9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlmYmx0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAxLiBidXQsCisjIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDEKKyMgb3IgYSBub3JtYWxpemVkIG51bWJlciB0aGF0IHJvdW5kZWQgZG93biB0byBhIDEuIHNvLCByZWRvIHRoZSBlbnRpcmUKKyMgb3BlcmF0aW9uIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZAorIyByZXN1bHQgaXMuIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gJWZwMQorCisJY2xyLmwJCSVkMQkJCSMgY2xlYXIgc2NyYXRjaCByZWdpc3RlcgorCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGZvcmNlIFJaIHJuZCBtb2RlCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CisJZmJnZS53CQlmc2dsZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmc2dsZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZnNnbGRpdl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mc2dsZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mc2dsZGl2X29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZnNnbGRpdl9vcDoKKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfbG9hZAktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfZHN0CQktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3Jlc19vcGVycgktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9pbmZfZHN0CQktIHRibF9mc2dsZGl2X29wICMgSU5GIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9pbmZfbG9hZAktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgREVOT1JNIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIE5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gREVOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCitmc2dsZGl2X3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnNnbGRpdl9yZXNfc25hbjoKKwlicmEubAkJcmVzX3NuYW4KK2ZzZ2xkaXZfcmVzX29wZXJyOgorCWJyYS5sCQlyZXNfb3BlcnIKK2ZzZ2xkaXZfaW5mX2xvYWQ6CisJYnJhLmwJCWZkaXZfaW5mX2xvYWQKK2ZzZ2xkaXZfemVyb19sb2FkOgorCWJyYS5sCQlmZGl2X3plcm9fbG9hZAorZnNnbGRpdl9pbmZfZHN0OgorCWJyYS5sCQlmZGl2X2luZl9kc3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJZnNhZGQoKTogZW11bGF0ZXMgdGhlIGZhZGQgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGFkZCgpOiBlbXVsYXRlcyB0aGUgZmRhZGQgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKKyMJcmVzX29wZXJyKCkgLSBzZXQgT1BFUlIgcmVzdWx0CQkJCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJRG8gYWRkaXRpb24gYWZ0ZXIgc2NhbGluZyBleHBvbmVudHMgc3VjaCB0aGF0IGV4Y2VwdGlvbiB3b24ndAkjCisjIG9jY3VyLiBUaGVuLCBjaGVjayByZXN1bHQgZXhwb25lbnQgdG8gc2VlIGlmIGV4Y2VwdGlvbiB3b3VsZCBoYXZlCSMKKyMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCByZXN1bHQgYW5kIG1heWJlIEVYT1AuIEVsc2UsIGluc2VydAkjCisjIHRoZSBjb3JyZWN0IHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLiBTZXQgRlBTUiBiaXRzIGFzIGFwcHJvcHJpYXRlLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2FkZAorZnNhZGQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYworCWJyYS5iCQlmYWRkCisKKwlnbG9iYWwJCWZkYWRkCitmZGFkZDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisKKwlnbG9iYWwJCWZhZGQKK2ZhZGQ6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZmFkZF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIEFERDogbm9ybXMgYW5kIGRlbm9ybXMKKyMKK2ZhZGRfbm9ybToKKwlic3IubAkJYWRkc3ViX3NjYWxlcjIJCSMgc2NhbGUgZXhwb25lbnRzCisKK2ZhZGRfemVyb19lbnRyeToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMixOLFoKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCisKKwlmYmVxLncJCWZhZGRfemVyb19leGl0CQkjIGlmIHJlc3VsdCBpcyB6ZXJvLCBlbmQgbm93CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg2LCVkMQorCisJbW92LncJCSglc3ApLCVkMgkJIyBmZXRjaCBuZXcgc2lnbiwgZXhwCisJYW5kaS5sCQkmMHg3ZmZmLCVkMgkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDIJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKworCWNtcC5sCQklZDIsKHRibF9mYWRkX292ZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiBvdmVyZmxvdz8KKwliZ2UuYgkJZmFkZF9vdmZsCQkjIHllcworCisJY21wLmwJCSVkMiwodGJsX2ZhZGRfdW5mbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIHVuZGVyZmxvdz8KKwlibHQudwkJZmFkZF91bmZsCQkjIHllcworCWJlcS53CQlmYWRkX21heV91bmZsCQkjIG1heWJlOyBnbyBmaW5kIG91dAorCitmYWRkX25vcm1hbDoKKwltb3YudwkJKCVzcCksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIHNpZ24KKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF96ZXJvX2V4aXQ6CisjCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiB6ZXJvIGluIGZwMAorCXJ0cworCit0YmxfZmFkZF9vdmZsOgorCWxvbmcJCTB4N2ZmZgkJCSMgZXh0IG92ZmwKKwlsb25nCQkweDQwN2YJCQkjIHNnbCBvdmZsCisJbG9uZwkJMHg0M2ZmCQkJIyBkYmwgb3ZmbAorCit0YmxfZmFkZF91bmZsOgorCWxvbmcJICAgICAgICAweDAwMDAJCQkjIGV4dCB1bmZsCisJbG9uZwkJMHgzZjgxCQkJIyBzZ2wgdW5mbAorCWxvbmcJCTB4M2MwMQkJCSMgZGJsIHVuZmwKKworZmFkZF9vdmZsOgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWRkX292ZmxfZW5hCQkjIHllcworCisJYWRkLmwJCSYweGMsJXNwCitmYWRkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF9vdmZsX2VuYToKKwltb3YuYgkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmYWRkX292ZmxfZW5hX3NkCSMgbm87IHByZWMgPSBzZ2wgb3IgZGJsCisKK2ZhZGRfb3ZmbF9lbmFfY29udDoKKwltb3YudwkJKCVzcCksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIHNpZ24KKwlzdWJpLmwJCSYweDYwMDAsJWQyCQkjIGFkZCBleHRyYSBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZmFkZF9vdmZsX2RpcworCitmYWRkX292ZmxfZW5hX3NkOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlhZGQubAkJJjB4Yywlc3AKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkKKwlicmEuYgkJZmFkZF9vdmZsX2VuYV9jb250CisKK2ZhZGRfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWFkZC5sCQkmMHhjLCVzcAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWRkX3VuZmxfZW5hCQkjIHllcworCitmYWRkX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlydHMKKworZmFkZF91bmZsX2VuYToKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFkZF91bmZsX2VuYV9zZAkjIG5vOyBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZmFkZF91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmYWRkX3VuZmxfZGlzCisKK2ZhZGRfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmYWRkX3VuZmxfZW5hX2NvbnQKKworIworIyByZXN1bHQgaXMgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24KKyMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCisjIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAuCisjCitmYWRkX21heV91bmZsOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQorCWJlcS53CQlmYWRkX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJbW92LmwJCTB4NCglc3ApLCVkMQkJIyBleHRyYWN0IGhpKG1hbikKKwljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KKwlibmUudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CisJYm5lLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIG9rLCBzbyBub3cgdGhlIHJlc3VsdCBoYXMgYSBleHBvbmVudCBlcXVhbCB0byB0aGUgc21hbGxlc3Qgbm9ybWFsaXplZAorIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCisjIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCisjIGcscixzLgorIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CisjIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgorIyBzbywgd2UgZG8gdGhpcyBiZSByZS1leGVjdXRpbmcgdGhlIGFkZCB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKyMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gZnAxCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGFkZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZhYnMueAkJJWZwMAkJCSMgY29tcGFyZSBhYnNvbHV0ZSB2YWx1ZXMKKwlmYWJzLngJCSVmcDEKKwlmY21wLngJCSVmcDAsJWZwMQkJIyBpcyBmaXJzdCByZXN1bHQgPiBzZWNvbmQ/CisKKwlmYmd0LncJCWZhZGRfdW5mbAkJIyB5ZXM7IGl0J3MgYW4gdW5kZXJmbG93CisJYnJhLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBpdCdzIG5vdCBhbiB1bmRlcmZsb3cKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBBZGQ6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZhZGRfbm90X25vcm06CisJbW92LncJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZhZGRfb3A6CisJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgTk9STSArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvX3NyYwktIHRibF9mYWRkX29wICMgTk9STSArIFpFUk8KKwlzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgSU5GCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCisJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgTk9STSArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvXzIJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgWkVSTyArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX3plcm9fZHN0CS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworCXNob3J0CQlmYWRkX2luZl9kc3QJLSB0YmxfZmFkZF9vcCAjIElORiArIE5PUk0KKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mXzIJLSB0YmxfZmFkZF9vcCAjIElORiArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX2luZl9kc3QJLSB0YmxfZmFkZF9vcCAjIElORiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIE5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIFpFUk8KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgUU5BTgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIE5PUk0KKwlzaG9ydAkJZmFkZF96ZXJvX3NyYwktIHRibF9mYWRkX29wICMgREVOT1JNICsgWkVSTworCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIE5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIFpFUk8KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIElORgorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgUU5BTgorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgREVOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBTTkFOCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKworZmFkZF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZhZGRfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCisKKyMKKyMgYm90aCBvcGVyYW5kcyBhcmUgWkVST2VzCisjCitmYWRkX3plcm9fMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGFyZSB0aGUgc2lnbnMgb3Bwb3NpdGUKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlibWkudwkJZmFkZF96ZXJvXzJfY2hrX3JtCSMgd2VlZCBvdXQgKC1aRVJPKSsoK1pFUk8pCisKKyMgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZS4gc28gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUKKyMgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGVseSBzaWduZWQgemVyby4KKwl0c3QuYgkJJWQwCQkJIyBhcmUgWkVST2VzIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJtaS5iCQlmYWRkX3plcm9fcm0JCSMgbmVnYXRpdmUKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyB0aGUgWkVST2VzIGhhdmUgb3Bwb3NpdGUgc2lnbnM6CisjIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGVzIGFyZSBSTixSWiwgb3IgUlAuCisjIC0gLVpFUk8gaXMgcmV0dXJuZWQgaW4gdGhlIGNhc2Ugb2YgUk0uCisjCitmYWRkX3plcm9fMl9jaGtfcm06CisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQorCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9PSBSTT8KKwliZXEuYgkJZmFkZF96ZXJvX3JtCQkjIHllcworCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCitmYWRkX3plcm9fcm06CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCisJbW92LmIJCSZuZWdfYm1hc2srel9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgTkVHL1oKKwlydHMKKworIworIyBvbmUgb3BlcmFuZCBpcyBhIFpFUk8gYW5kIHRoZSBvdGhlciBpcyBhIERFTk9STSBvciBOT1JNLiBzY2FsZQorIyB0aGUgREVOT1JNIG9yIE5PUk0gYW5kIGp1bXAgdG8gdGhlIHJlZ3VsYXIgZmFkZCByb3V0aW5lLgorIworZmFkZF96ZXJvX2RzdDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSB0aGUgb3BlcmFuZAorCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKKwljbHIubAkJRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCisKK2ZhZGRfemVyb19zcmM6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMF9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKwlicmEudwkJZmFkZF96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZmFkZAorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUKKyMgZGlmZmVyZW50IHNpZ25zLiBlbHNlLCBhbiBJTkYgb2YgdGhlIHNhbWUgc2lnbiBpcyByZXR1cm5lZAorIworZmFkZF9pbmZfMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlibWkubAkJcmVzX29wZXJyCQkjIHdlZWQgb3V0ICgtSU5GKSsoK0lORikKKworIyBvaywgc28gaXQncyBub3QgYW4gT1BFUlIuIGJ1dCwgd2UgZG8gaGF2ZSB0byByZW1lbWJlciB0byByZXR1cm4gdGhlCisjIHNyYyBJTkYgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSA4ODEvODgyIGdldHMgdGhlIGotYml0IGZyb20uLi4KKworIworIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQorIworZmFkZF9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBzcmMgSU5GCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZT8KKwlicGwuYgkJZmFkZF9pbmZfZG9uZQkJIyB5ZXM7IHdlJ3JlIGRvbmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworIworIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQorIworZmFkZF9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGlzIElORiBwb3NpdGl2ZT8KKwlicGwuYgkJZmFkZF9pbmZfZG9uZQkJIyB5ZXM7IHdlJ3JlIGRvbmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZmFkZF9pbmZfZG9uZToKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnN1YigpOiBlbXVsYXRlcyB0aGUgZnN1YiBpbnN0cnVjdGlvbgkJCQkjCisjCWZzc3ViKCk6IGVtdWxhdGVzIHRoZSBmc3N1YiBpbnN0cnVjdGlvbgkJCQkjCisjCWZkc3ViKCk6IGVtdWxhdGVzIHRoZSBmZHN1YiBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhZGRzdWJfc2NhbGVyMigpIC0gc2NhbGUgdGhlIG9wZXJhbmRzIHNvIHRoZXkgd29uJ3QgdGFrZSBleGMJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSBzZXQgUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHNldCBTTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfb3BlcnIoKSAtIHNldCBPUEVSUiByZXN1bHQJCQkJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNldCBzcmMgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNldCBkc3Qgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIwlEbyBzdWJ0cmFjdGlvbiBhZnRlciBzY2FsaW5nIGV4cG9uZW50cyBzdWNoIHRoYXQgZXhjZXB0aW9uIHdvbid0IworIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIworIyB0aGUgY29ycmVjdCByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4gU2V0IEZQU1IgYml0cyBhcyBhcHByb3ByaWF0ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNzdWIKK2Zzc3ViOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZnN1YgorCisJZ2xvYmFsCQlmZHN1YgorZmRzdWI6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmc3ViCitmc3ViOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZzdWJfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBTVUI6IG5vcm1zIGFuZCBkZW5vcm1zCisjCitmc3ViX25vcm06CisJYnNyLmwJCWFkZHN1Yl9zY2FsZXIyCQkjIHNjYWxlIGV4cG9uZW50cworCitmc3ViX3plcm9fZW50cnk6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMiwgTiwgWgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBleGMgYW5kIGNjb2RlIGJpdHMKKworCWZiZXEudwkJZnN1Yl96ZXJvX2V4aXQJCSMgaWYgcmVzdWx0IHplcm8sIGVuZCBub3cKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKworCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCisJbHNyLmIJCSYweDYsJWQxCisKKwltb3YudwkJKCVzcCksJWQyCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisKKwljbXAubAkJJWQyLCh0YmxfZnN1Yl9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CisJYmdlLmIJCWZzdWJfb3ZmbAkJIyB5ZXMKKworCWNtcC5sCQklZDIsKHRibF9mc3ViX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CisJYmx0LncJCWZzdWJfdW5mbAkJIyB5ZXMKKwliZXEudwkJZnN1Yl9tYXlfdW5mbAkJIyBtYXliZTsgZ28gZmluZCBvdXQKKworZnN1Yl9ub3JtYWw6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfemVyb19leGl0OgorIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKKwlydHMKKwordGJsX2ZzdWJfb3ZmbDoKKwlsb25nCQkweDdmZmYJCQkjIGV4dCBvdmZsCisJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAorCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKKwordGJsX2ZzdWJfdW5mbDoKKwlsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAorCWxvbmcJCTB4M2Y4MQkJCSMgc2dsIHVuZmwKKwlsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCisKK2ZzdWJfb3ZmbDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnN1Yl9vdmZsX2VuYQkJIyB5ZXMKKworCWFkZC5sCQkmMHhjLCVzcAorZnN1Yl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfb3ZmbF9lbmE6CisJbW92LmIJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnN1Yl9vdmZsX2VuYV9zZAkjIG5vCisKK2ZzdWJfb3ZmbF9lbmFfY29udDoKKwltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIHtzZ24sZXhwfQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBzdWJ0cmFjdCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDIJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmc3ViX292ZmxfZGlzCisKK2ZzdWJfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWFkZC5sCQkmMHhjLCVzcAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQorCWJyYS5iCQlmc3ViX292ZmxfZW5hX2NvbnQKKworZnN1Yl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJYWRkLmwJCSYweGMsJXNwCisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzdWJfdW5mbF9lbmEJCSMgeWVzCisKK2ZzdWJfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjICdaJyBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZzdWJfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmc3ViX3VuZmxfZW5hX3NkCSMgbm8KKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCitmc3ViX3VuZmxfZW5hX2NvbnQ6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2duLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS53CQlmc3ViX3VuZmxfZGlzCisKK2ZzdWJfdW5mbF9lbmFfc2Q6CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGNsZWFyIHJuZCBwcmVjCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKworCWJyYS5iCQlmc3ViX3VuZmxfZW5hX2NvbnQKKworIworIyByZXN1bHQgaXMgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24KKyMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCisjIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAuCisjCitmc3ViX21heV91bmZsOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBmZXRjaCBybmQgcHJlYworCWJlcS53CQlmc3ViX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJbW92LmwJCTB4NCglc3ApLCVkMQorCWNtcGkubAkJJWQxLCYweDgwMDAwMDAwCQkjIGlzIGhpKG1hbikgPSAweDgwMDAwMDAwPworCWJuZS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKwl0c3QubAkJMHg4KCVzcCkJCSMgaXMgbG8obWFuKSA9IDB4MD8KKwlibmUudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PworCWJlcS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgb2ssIHNvIG5vdyB0aGUgcmVzdWx0IGhhcyBhIGV4cG9uZW50IGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkCisjIGV4cG9uZW50IGZvciB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uLiBhbHNvLCB0aGUgbWFudGlzc2EgaXMgZXF1YWwgdG8KKyMgMHg4MDAwMDAwMDAwMDAwMDAwIGFuZCB0aGlzIG1hbnRpc3NhIGlzIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgbm9uLXplcm8KKyMgZyxyLHMuCisjIG5vdywgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cKKyMgcm91bmRlZCAidXAiIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgcm91bmRlZCAiZG93biIuCisjIHNvLCB3ZSBkbyB0aGlzIGJlIHJlLWV4ZWN1dGluZyB0aGUgYWRkIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIGFuZAorIyBzZWVpbmcgaWYgdGhlIG5ldyByZXN1bHQgaXMgc21hbGxlciBvciBlcXVhbCB0byB0aGUgY3VycmVudCByZXN1bHQuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IHJuZCBtb2RlCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIGNvbXBhcmUgYWJzb2x1dGUgdmFsdWVzCisJZmFicy54CQklZnAxCisJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPworCisJZmJndC53CQlmc3ViX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdworCWJyYS53CQlmc3ViX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgU3ViOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmc3ViX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mc3ViX29wOgorCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb19zcmMJLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBaRVJPCisJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgTk9STSAtIElORgorCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgorCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb18yCS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl96ZXJvX2RzdAktIHRibF9mc3ViX29wICMgWkVSTyAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKKwlzaG9ydAkJZnN1Yl9pbmZfZHN0CS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBOT1JNCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl8yCS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9pbmZfZHN0CS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBaRVJPCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBOT1JNCisJc2hvcnQJCWZzdWJfemVyb19zcmMJLSB0YmxfZnN1Yl9vcCAjIERFTk9STSAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBaRVJPCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIERFTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisKK2ZzdWJfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmc3ViX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIFpFUk9lcworIworZnN1Yl96ZXJvXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQxLCVkMAorCWJwbC5iCQlmc3ViX3plcm9fMl9jaGtfcm0KKworIyB0aGUgc2lnbnMgYXJlIG9wcG9zaXRlLCBzbywgcmV0dXJuIGEgWkVSTyB3LyB0aGUgc2lnbiBvZiB0aGUgZHN0IFpFUk8KKwl0c3QuYgkJJWQwCQkJIyBpcyBkc3QgbmVnYXRpdmU/CisJYm1pLmIJCWZzdWJfemVyb18yX3JtCQkjIHllcworCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIG5vOyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworIworIyB0aGUgWkVST2VzIGhhdmUgdGhlIHNhbWUgc2lnbnM6CisjIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk4sUlosIG9yIFJQCisjIC0gLVpFUk8gaXMgcmV0dXJuZWQgaW4gdGhlIGNhc2Ugb2YgUk0uCisjCitmc3ViX3plcm9fMl9jaGtfcm06CisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQorCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9IFJNPworCWJlcS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBubzsgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKK2ZzdWJfemVyb18yX3JtOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFovTkVHCisJcnRzCisKKyMKKyMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgYSBOT1JNLgorIyBzY2FsZSB0aGUgREVOT1JNIG9yIE5PUk0gYW5kIGp1bXAgdG8gdGhlIHJlZ3VsYXIgZnN1YiByb3V0aW5lLgorIworZnN1Yl96ZXJvX2RzdDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSB0aGUgb3BlcmFuZAorCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKKwljbHIubAkJRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCWJyYS53CQlmc3ViX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmc3ViCisKK2ZzdWJfemVyb19zcmM6CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMF9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKKwlicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUgdGhlCisjIHNhbWUgc2lnbnMuIGVsc2UsCisjCitmc3ViX2luZl8yOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQxLCVkMAorCWJwbC5sCQlyZXNfb3BlcnIJCSMgd2VlZCBvdXQgKC1JTkYpKygrSU5GKQorCisjIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0IHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuCisjIHRoZSBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdC4KKworZnN1Yl9pbmZfc3JjOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiBzcmMgSU5GCisJZm5lZy54CQklZnAwCQkJIyBpbnZlcnQgc2lnbgorCWZiZ2UudwkJZnN1Yl9pbmZfZG9uZQkJIyBzaWduIGlzIG5vdyBwb3NpdGl2ZQorCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRworCXJ0cworCitmc3ViX2luZl9kc3Q6CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIGRzdCBJTkYKKwl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJwbC5iCQlmc3ViX2luZl9kb25lCQkjIG5vCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZzdWJfaW5mX2RvbmU6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzcXJ0KCk6IGVtdWxhdGVzIHRoZSBmc3FydCBpbnN0cnVjdGlvbgkJCQkjCisjCWZzc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNzcXJ0IGluc3RydWN0aW9uCQkJIworIwlmZHNxcnQoKTogZW11bGF0ZXMgdGhlIGZkc3FydCBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3NxcnQoKSAtIHNjYWxlIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCQkjCisjCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW5fMW9wKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJIworIwlyZXNfc25hbl8xb3AoKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIHNxcnQJCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNxcnQgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzc3FydAorZnNzcXJ0OgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmc3FydAorCisJZ2xvYmFsCQlmZHNxcnQKK2Zkc3FydDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZnNxcnQKK2ZzcXJ0OgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKwljbHIudwkJJWQxCisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUudwkJZnNxcnRfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBTUVVBUkUgUk9PVDogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKKyMKK2ZzcXJ0X25vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmwJCXJlc19vcGVycgkJIyB5ZXMKKworCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnNxcnRfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc3FydC54CQkoJWEwKSwlZnAwCQkjIGV4ZWN1dGUgc3F1YXJlIHJvb3QKKworCWZtb3YubAkJJWZwc3IsJWQxCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2V0IE4sSU5FWAorCisJcnRzCisKK2ZzcXJ0X2Rlbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkubAkJcmVzX29wZXJyCQkjIHllcworCisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmc3FydF9ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwlicmEudwkJZnNxcnRfc2Rfbm9ybWFsCisKKyMKKyMgb3BlcmFuZCBpcyBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZQorIworZnNxcnRfbm90X2V4dDoKKwljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKKwlibmUudwkJZnNxcnRfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZzcXJ0X3NnbDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV9zcXJ0CQkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgxCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZXEudwkJZnNxcnRfc2RfbWF5X3VuZmwKKwliZ3QudwkJZnNxcnRfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDA3ZgkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZnNxcnRfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKKwlibHQudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmc3FydF9zZF9ub3JtYWw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc3FydF9zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmc3FydF9kYmw6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMQkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCisJYmd0LmIJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQzZmYJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZnNxcnRfc2Rfbm9ybWFsCQkjIG5vOyBobyBoYW5kbGUgbm9ybWFsaXplZCBvcAorCisjIHdlJ3JlIG9uIHRoZSBsaW5lIGhlcmUgYW5kIHRoZSBkaXN0aW5ndWlzaW5nIGNoYXJhY3RlcmlzdGljIGlzIHdoZXRoZXIKKyMgdGhlIGV4cG9uZW50IGlzIDNmZmYgb3IgM2ZmZS4gaWYgaXQncyAzZmZlLCB0aGVuIGl0J3MgYSBzYWZlIG51bWJlcgorIyBlbHNld2lzZSBmYWxsIHRocm91Z2ggdG8gdW5kZXJmbG93LgorZnNxcnRfc2RfbWF5X3VuZmw6CisJYnRzdAkJJjB4MCwxK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIGV4cG9uZW50IDB4M2ZmZj8KKwlibmUudwkJZnNxcnRfc2Rfbm9ybWFsCQkjIHllcywgc28gbm8gdW5kZXJmbG93CisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmc3FydF9zZF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNxdWFyZSByb290CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCBnbyBjYWxjdWxhdGUgRVhPUCBmaXJzdC4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNxcnRfc2RfdW5mbF9lbmEJIyB5ZXMKKworZnNxcnRfc2RfdW5mbF9kaXM6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBwb3NzaWJsZSAnWicgY2NvZGUKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCisjIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KKyMKK2ZzcXJ0X3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZzcXJ0X3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZnNxcnRfc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHNxdWFyZSByb290CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzcXJ0X3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc3FydF9zZF9vdmZsX2VuYQkjIHllcworCisjCisjIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CisjIGNhbGxpbmcgb3ZmX3JlcygpLgorIworZnNxcnRfc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2ZzcXJ0X3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZnNxcnRfc2Rfb3ZmbF9kaXMKKworIworIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgorIworZnNxcnRfc2RfbWF5X292Zmw6CisJYnRzdAkJJjB4MCwxK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIGV4cG9uZW50IDB4M2ZmZj8KKwlibmUudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXMsIHNvIG92ZXJmbG93CisKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnNxcnQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZtb3YueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID49IDEuYj8KKwlmYmdlLncJCWZzcXJ0X3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbF9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmc3FydF9ub3Rfbm9ybToKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS53CQlmc3FydF9kZW5vcm0KKwljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCisJYmVxLmIJCWZzcXJ0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmc3FydF9pbmYKKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWJyYS5sCQlyZXNfcW5hbl8xb3AKKworIworIwlmc3FydCgrMCkgPSArMAorIwlmc3FydCgtMCkgPSAtMAorIwlmc3FydCgrSU5GKSA9ICtJTkYKKyMJZnNxcnQoLUlORikgPSBPUEVSUgorIworZnNxcnRfemVybzoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkuYgkJZnNxcnRfemVyb19tCQkjIG5lZ2F0aXZlCitmc3FydF96ZXJvX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmc3FydF96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCisJcnRzCisKK2ZzcXJ0X2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJtaS5sCQlyZXNfb3BlcnIJCSMgbmVnYXRpdmUKK2ZzcXJ0X2luZl9wOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiArSU5GIGluIGZwMAorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmV0Y2hfZHJlZygpOiBmZXRjaCByZWdpc3RlciBhY2NvcmRpbmcgdG8gaW5kZXggaW4gZDEJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHJlZ2lzdGVyIGZldGNoZWQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEgd2hpY2ggY2FuIHJhbmdlIGZyb20gemVybwkjCisjIHRvIGZpZnRlZW4sIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmlsZSB2YWx1ZSAod2hlcmUJCSMKKyMgYWRkcmVzcyByZWdpc3RlciBpbmRleGVzIHN0YXJ0IGF0IDgpLiBEMC9EMS9BMC9BMS9BNi9BNyBhcmUgb24gdGhlCSMKKyMgc3RhY2suIFRoZSByZXN0IHNob3VsZCBzdGlsbCBiZSBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHRoaXMgcm91dGluZSBsZWF2ZXMgZDEgaW50YWN0IGZvciBzdWJzZXF1ZW50IHN0b3JlX2RyZWcgY2FsbHMuCisJZ2xvYmFsCQlmZXRjaF9kcmVnCitmZXRjaF9kcmVnOgorCW1vdi53CQkodGJsX2ZkcmVnLmIsJXBjLCVkMS53KjIpLCVkMAorCWptcAkJKHRibF9mZHJlZy5iLCVwYywlZDAudyoxKQorCit0YmxfZmRyZWc6CisJc2hvcnQJCWZkcmVnMCAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzEgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWcyIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnMyAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzQgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc1IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnNiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzcgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc4IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnOSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2EgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdiIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnYyAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2QgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdlIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnZiAtIHRibF9mZHJlZworCitmZHJlZzA6CisJbW92LmwJCUVYQ19EUkVHUysweDAoJWE2KSwlZDAKKwlydHMKK2ZkcmVnMToKKwltb3YubAkJRVhDX0RSRUdTKzB4NCglYTYpLCVkMAorCXJ0cworZmRyZWcyOgorCW1vdi5sCQklZDIsJWQwCisJcnRzCitmZHJlZzM6CisJbW92LmwJCSVkMywlZDAKKwlydHMKK2ZkcmVnNDoKKwltb3YubAkJJWQ0LCVkMAorCXJ0cworZmRyZWc1OgorCW1vdi5sCQklZDUsJWQwCisJcnRzCitmZHJlZzY6CisJbW92LmwJCSVkNiwlZDAKKwlydHMKK2ZkcmVnNzoKKwltb3YubAkJJWQ3LCVkMAorCXJ0cworZmRyZWc4OgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWQwCisJcnRzCitmZHJlZzk6CisJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlZDAKKwlydHMKK2ZkcmVnYToKKwltb3YubAkJJWEyLCVkMAorCXJ0cworZmRyZWdiOgorCW1vdi5sCQklYTMsJWQwCisJcnRzCitmZHJlZ2M6CisJbW92LmwJCSVhNCwlZDAKKwlydHMKK2ZkcmVnZDoKKwltb3YubAkJJWE1LCVkMAorCXJ0cworZmRyZWdlOgorCW1vdi5sCQkoJWE2KSwlZDAKKwlydHMKK2ZkcmVnZjoKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc3RvcmVfZHJlZ19sKCk6IHN0b3JlIGxvbmd3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gbG9uZ293cmQgdmFsdWUgdG8gc3RvcmUJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiByZWdpc3RlciB0byBmZXRjaCBmcm9tCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShkYXRhIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxLCBzdG9yZSB0aGUgbG9uZ3dvcmQgdmFsdWUJIworIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKKyMgd2hpbGUgdGhlIHJlc3QgYXJlIGluIHRoZWlyIGluaXRpYWwgcGxhY2VzLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9kcmVnX2wKK3N0b3JlX2RyZWdfbDoKKwltb3YudwkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3NkcmVnbC5iLCVwYywlZDEudyoxKQorCit0Ymxfc2RyZWdsOgorCXNob3J0CQlzZHJlZ2wwIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wxIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wyIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2wzIC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w0IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w1IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w2IC0gdGJsX3NkcmVnbAorCXNob3J0CQlzZHJlZ2w3IC0gdGJsX3NkcmVnbAorCitzZHJlZ2wwOgorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ2wxOgorCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4NCglYTYpCisJcnRzCitzZHJlZ2wyOgorCW1vdi5sCQklZDAsJWQyCisJcnRzCitzZHJlZ2wzOgorCW1vdi5sCQklZDAsJWQzCisJcnRzCitzZHJlZ2w0OgorCW1vdi5sCQklZDAsJWQ0CisJcnRzCitzZHJlZ2w1OgorCW1vdi5sCQklZDAsJWQ1CisJcnRzCitzZHJlZ2w2OgorCW1vdi5sCQklZDAsJWQ2CisJcnRzCitzZHJlZ2w3OgorCW1vdi5sCQklZDAsJWQ3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc3RvcmVfZHJlZ193KCk6IHN0b3JlIHdvcmQgdG8gZGF0YSByZWdpc3RlciBzcGVjaWZpZWQgYnkgZDEJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB3b3JkIHZhbHVlIHRvIHN0b3JlCQkJCQkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIHdvcmQgdmFsdWUJIworIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKKyMgd2hpbGUgdGhlIHJlc3QgYXJlIGluIHRoZWlyIGluaXRpYWwgcGxhY2VzLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9kcmVnX3cKK3N0b3JlX2RyZWdfdzoKKwltb3YudwkJKHRibF9zZHJlZ3cuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3NkcmVndy5iLCVwYywlZDEudyoxKQorCit0Ymxfc2RyZWd3OgorCXNob3J0CQlzZHJlZ3cwIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3cxIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3cyIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3czIC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c0IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c1IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c2IC0gdGJsX3NkcmVndworCXNob3J0CQlzZHJlZ3c3IC0gdGJsX3NkcmVndworCitzZHJlZ3cwOgorCW1vdi53CQklZDAsMitFWENfRFJFR1MrMHgwKCVhNikKKwlydHMKK3NkcmVndzE6CisJbW92LncJCSVkMCwyK0VYQ19EUkVHUysweDQoJWE2KQorCXJ0cworc2RyZWd3MjoKKwltb3YudwkJJWQwLCVkMgorCXJ0cworc2RyZWd3MzoKKwltb3YudwkJJWQwLCVkMworCXJ0cworc2RyZWd3NDoKKwltb3YudwkJJWQwLCVkNAorCXJ0cworc2RyZWd3NToKKwltb3YudwkJJWQwLCVkNQorCXJ0cworc2RyZWd3NjoKKwltb3YudwkJJWQwLCVkNgorCXJ0cworc2RyZWd3NzoKKwltb3YudwkJJWQwLCVkNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfYigpOiBzdG9yZSBieXRlIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYnl0ZSB2YWx1ZSB0byBzdG9yZQkJCQkJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSBieXRlIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ19iCitzdG9yZV9kcmVnX2I6CisJbW92LncJCSh0Ymxfc2RyZWdiLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ2IuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVnYjoKKwlzaG9ydAkJc2RyZWdiMCAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMSAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMiAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiMyAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNCAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNSAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNiAtIHRibF9zZHJlZ2IKKwlzaG9ydAkJc2RyZWdiNyAtIHRibF9zZHJlZ2IKKworc2RyZWdiMDoKKwltb3YuYgkJJWQwLDMrRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ2IxOgorCW1vdi5iCQklZDAsMytFWENfRFJFR1MrMHg0KCVhNikKKwlydHMKK3NkcmVnYjI6CisJbW92LmIJCSVkMCwlZDIKKwlydHMKK3NkcmVnYjM6CisJbW92LmIJCSVkMCwlZDMKKwlydHMKK3NkcmVnYjQ6CisJbW92LmIJCSVkMCwlZDQKKwlydHMKK3NkcmVnYjU6CisJbW92LmIJCSVkMCwlZDUKKwlydHMKK3NkcmVnYjY6CisJbW92LmIJCSVkMCwlZDYKKwlydHMKK3NkcmVnYjc6CisJbW92LmIJCSVkMCwlZDcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlpbmNfYXJlZygpOiBpbmNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlciBieSB0aGUgdmFsdWUgaW4gZDAJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBhbW91bnQgdG8gaW5jcmVtZW50IGJ5CQkJCQkjCisjCWQxID0gaW5kZXggb2YgYWRkcmVzcyByZWdpc3RlciB0byBpbmNyZW1lbnQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoYWRkcmVzcyByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVHlwaWNhbGx5IHVzZWQgZm9yIGFuIGluc3RydWN0aW9uIHcvIGEgcG9zdC1pbmNyZW1lbnQgPGVhPiwJIworIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgaW5jcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKKyMgc3BlY2lmaWVkIGJ5IGQxLiBBMC9BMS9BNi9BNyByZXNpZGUgb24gdGhlIHN0YWNrLiBUaGUgcmVzdCByZXNpZGUJIworIyBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkJCQkJIworIwlGb3IgYTcsIGlmIHRoZSBpbmNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCisjIGluY3JlbWVudCBieSB0d28uIEZvciBhbnkgYTcgdXBkYXRlLCBzZXQgdGhlIG1pYTdfZmxhZyBzbyB0aGF0IGlmCSMKKyMgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBvY2N1cnMgbGF0ZXIgaW4gZW11bGF0aW9uLCB0aGlzIGFkZHJlc3MJIworIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWluY19hcmVnCitpbmNfYXJlZzoKKwltb3YudwkJKHRibF9pYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMSkKKwordGJsX2lhcmVnOgorCXNob3J0CQlpYXJlZzAgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWcxIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnMiAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzMgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc0IC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNSAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzYgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc3IC0gdGJsX2lhcmVnCisKK2lhcmVnMDoJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2lhcmVnMToJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2lhcmVnMjoJYWRkLmwJCSVkMCwlYTIKKwlydHMKK2lhcmVnMzoJYWRkLmwJCSVkMCwlYTMKKwlydHMKK2lhcmVnNDoJYWRkLmwJCSVkMCwlYTQKKwlydHMKK2lhcmVnNToJYWRkLmwJCSVkMCwlYTUKKwlydHMKK2lhcmVnNjoJYWRkLmwJCSVkMCwoJWE2KQorCXJ0cworaWFyZWc3Ogltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWNtcGkuYgkJJWQwLCYweDEKKwliZXEuYgkJaWFyZWc3YgorCWFkZC5sCQklZDAsRVhDX0E3KCVhNikKKwlydHMKK2lhcmVnN2I6CisJYWRkcS5sCQkmMHgyLEVYQ19BNyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZGVjX2FyZWcoKTogZGVjcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIgYnkgdGhlIHZhbHVlIGluIGQwCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYW1vdW50IHRvIGRlY3JlbWVudCBieQkJCQkJIworIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZGVjcmVtZW50CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHByZS1kZWNyZW1lbnQgPGVhPiwJIworIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgZGVjcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKKyMgc3BlY2lmaWVkIGJ5IGQxLiBBMC9BMS9BNi9BNyByZXNpZGUgb24gdGhlIHN0YWNrLiBUaGUgcmVzdCByZXNpZGUJIworIyBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkJCQkJIworIwlGb3IgYTcsIGlmIHRoZSBkZWNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCisjIGRlY3JlbWVudCBieSB0d28uIEZvciBhbnkgYTcgdXBkYXRlLCBzZXQgdGhlIG1kYTdfZmxhZyBzbyB0aGF0IGlmCSMKKyMgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBvY2N1cnMgbGF0ZXIgaW4gZW11bGF0aW9uLCB0aGlzIGFkZHJlc3MJIworIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWRlY19hcmVnCitkZWNfYXJlZzoKKwltb3YudwkJKHRibF9kYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZGFyZWcuYiwlcGMsJWQxLncqMSkKKwordGJsX2RhcmVnOgorCXNob3J0CQlkYXJlZzAgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWcxIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnMiAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzMgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc0IC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNSAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzYgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc3IC0gdGJsX2RhcmVnCisKK2RhcmVnMDoJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2RhcmVnMToJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2RhcmVnMjoJc3ViLmwJCSVkMCwlYTIKKwlydHMKK2RhcmVnMzoJc3ViLmwJCSVkMCwlYTMKKwlydHMKK2RhcmVnNDoJc3ViLmwJCSVkMCwlYTQKKwlydHMKK2RhcmVnNToJc3ViLmwJCSVkMCwlYTUKKwlydHMKK2RhcmVnNjoJc3ViLmwJCSVkMCwoJWE2KQorCXJ0cworZGFyZWc3Ogltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWNtcGkuYgkJJWQwLCYweDEKKwliZXEuYgkJZGFyZWc3YgorCXN1Yi5sCQklZDAsRVhDX0E3KCVhNikKKwlydHMKK2RhcmVnN2I6CisJc3VicS5sCQkmMHgyLEVYQ19BNyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWxvYWRfZnBuMSgpOiBsb2FkIEZQIHJlZ2lzdGVyIHZhbHVlIGludG8gRlBfU1JDKGE2KS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gaW5kZXggb2YgRlAgcmVnaXN0ZXIgdG8gbG9hZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gdmFsdWUgbG9hZGVkIGZyb20gRlAgcmVnaXN0ZXIgZmlsZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVzaW5nIHRoZSBpbmRleCBpbiBkMCwgbG9hZCBGUF9TUkMoYTYpIHdpdGggYSBudW1iZXIgZnJvbSB0aGUJIworIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlsb2FkX2ZwbjEKK2xvYWRfZnBuMToKKwltb3YudwkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMSkKKwordGJsX2xvYWRfZnBuMToKKwlzaG9ydAkJbG9hZF9mcG4xXzAgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV8xIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfMiAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzMgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV80IC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNSAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzYgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV83IC0gdGJsX2xvYWRfZnBuMQorCitsb2FkX2ZwbjFfMDoKKwltb3YubAkJMCtFWENfRlAwKCVhNiksIDArRlBfU1JDKCVhNikKKwltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfU1JDKCVhNikKKwltb3YubAkJOCtFWENfRlAwKCVhNiksIDgrRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV8xOgorCW1vdi5sCQkwK0VYQ19GUDEoJWE2KSwgMCtGUF9TUkMoJWE2KQorCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9TUkMoJWE2KQorCW1vdi5sCQk4K0VYQ19GUDEoJWE2KSwgOCtGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzI6CisJZm1vdm0ueAkJJjB4MjAsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfMzoKKwlmbW92bS54CQkmMHgxMCwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV80OgorCWZtb3ZtLngJCSYweDA4LCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzU6CisJZm1vdm0ueAkJJjB4MDQsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNjoKKwlmbW92bS54CQkmMHgwMiwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV83OgorCWZtb3ZtLngJCSYweDAxLCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWxvYWRfZnBuMigpOiBsb2FkIEZQIHJlZ2lzdGVyIHZhbHVlIGludG8gRlBfRFNUKGE2KS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gaW5kZXggb2YgRlAgcmVnaXN0ZXIgdG8gbG9hZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9EU1QoYTYpID0gdmFsdWUgbG9hZGVkIGZyb20gRlAgcmVnaXN0ZXIgZmlsZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVzaW5nIHRoZSBpbmRleCBpbiBkMCwgbG9hZCBGUF9EU1QoYTYpIHdpdGggYSBudW1iZXIgZnJvbSB0aGUJIworIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlsb2FkX2ZwbjIKK2xvYWRfZnBuMjoKKwltb3YudwkJKHRibF9sb2FkX2ZwbjIuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9sb2FkX2ZwbjIuYiwlcGMsJWQwLncqMSkKKwordGJsX2xvYWRfZnBuMjoKKwlzaG9ydAkJbG9hZF9mcG4yXzAgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl8xIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfMiAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzMgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl80IC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNSAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzYgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl83IC0gdGJsX2xvYWRfZnBuMgorCitsb2FkX2ZwbjJfMDoKKwltb3YubAkJMCtFWENfRlAwKCVhNiksIDArRlBfRFNUKCVhNikKKwltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfRFNUKCVhNikKKwltb3YubAkJOCtFWENfRlAwKCVhNiksIDgrRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl8xOgorCW1vdi5sCQkwK0VYQ19GUDEoJWE2KSwgMCtGUF9EU1QoJWE2KQorCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9EU1QoJWE2KQorCW1vdi5sCQk4K0VYQ19GUDEoJWE2KSwgOCtGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzI6CisJZm1vdm0ueAkJJjB4MjAsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfMzoKKwlmbW92bS54CQkmMHgxMCwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl80OgorCWZtb3ZtLngJCSYweDA4LCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzU6CisJZm1vdm0ueAkJJjB4MDQsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNjoKKwlmbW92bS54CQkmMHgwMiwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl83OgorCWZtb3ZtLngJCSYweDAxLCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2ZwcmVnKCk6IHN0b3JlIGFuIGZwIHZhbHVlIHRvIHRoZSBmcHJlZyBkZXNpZ25hdGVkIGQwLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBleHRlbmRlZCBwcmVjaXNpb24gdmFsdWUgdG8gc3RvcmUJCQkJIworIwlkMCAgPSBpbmRleCBvZiBmbG9hdGluZy1wb2ludCByZWdpc3RlcgkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTdG9yZSB0aGUgdmFsdWUgaW4gZnAwIHRvIHRoZSBGUCByZWdpc3RlciBkZXNpZ25hdGVkIGJ5IHRoZQkjCisjIHZhbHVlIGluIGQwLiBUaGUgRlAgbnVtYmVyIGNhbiBiZSBERU5PUk0gb3IgU05BTiBzbyB3ZSBoYXZlIHRvIGJlCSMKKyMgY2FyZWZ1bCB0aGF0IHdlIGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXN0b3JlX2ZwcmVnCitzdG9yZV9mcHJlZzoKKwltb3YudwkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoyKSwgJWQwCisJam1wCQkodGJsX3N0b3JlX2ZwcmVnLmIsJXBjLCVkMC53KjEpCisKK3RibF9zdG9yZV9mcHJlZzoKKwlzaG9ydAkJc3RvcmVfZnByZWdfMCAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ18xIC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzIgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfMyAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ180IC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzUgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNiAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ183IC0gdGJsX3N0b3JlX2ZwcmVnCisKK3N0b3JlX2ZwcmVnXzA6CisJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDAoJWE2KQorCXJ0cworc3RvcmVfZnByZWdfMToKKwlmbW92bS54CQkmMHg4MCwgRVhDX0ZQMSglYTYpCisJcnRzCitzdG9yZV9mcHJlZ18yOgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDIwCisJcnRzCitzdG9yZV9mcHJlZ18zOgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDEwCisJcnRzCitzdG9yZV9mcHJlZ180OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDA4CisJcnRzCitzdG9yZV9mcHJlZ181OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDA0CisJcnRzCitzdG9yZV9mcHJlZ182OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDAyCisJcnRzCitzdG9yZV9mcHJlZ183OgorCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKKwlmbW92bS54CQkoJXNwKSssICYweDAxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZ2V0X3BhY2tlZCgpOiBmZXRjaCBhIHBhY2tlZCBvcGVyYW5kIGZyb20gbWVtb3J5IGFuZCB0aGVuCSMKKyMJCSAgICAgIGNvbnZlcnQgaXQgdG8gYSBmbG9hdGluZy1wb2ludCBiaW5hcnkgbnVtYmVyLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZGNhbGNfZWEoKSAtIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCA8ZWE+CQkJIworIwlfbWVtX3JlYWQoKSAtIGZldGNoIHRoZSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJIworIwlmYWNjX2luX3goKSAtIHRoZSBmZXRjaCBmYWlsZWQgc28ganVtcCB0byBzcGVjaWFsIGV4aXQgY29kZQkjCisjCWRlY2JpbigpICAgIC0gY29udmVydCBwYWNrZWQgdG8gYmluYXJ5IGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBubyBmYWlsdXJlIG9uIF9tZW1fcmVhZCgpOgkJCQkJIworIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIworIyBmcmFtZSB3LyBtYXliZSBhIGNvcnJlY3Rpb24gZmFjdG9yIGlmIHRoZSA8ZWE+IGlzIC0oYW4pIG9yIChhbikrLgkjCisjIFRoZW4sIGZldGNoIHRoZSBvcGVyYW5kIGZyb20gbWVtb3J5LiBJZiB0aGUgZmV0Y2ggZmFpbHMsIGV4aXQJCSMKKyMgdGhyb3VnaCBmYWNjX2luX3goKS4JCQkJCQkJIworIwlJZiB0aGUgcGFja2VkIG9wZXJhbmQgaXMgYSBaRVJPLE5BTiwgb3IgSU5GLCBjb252ZXJ0IGl0IHRvCSMKKyMgaXRzIGJpbmFyeSByZXByZXNlbnRhdGlvbiBoZXJlLiBFbHNlLCBjYWxsIGRlY2JpbigpIHdoaWNoIHdpbGwJIworIyBjb252ZXJ0IHRoZSBwYWNrZWQgdmFsdWUgdG8gYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGJpbmFyeSB2YWx1ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGUgc3RhY2tlZCA8ZWE+IGZvciBwYWNrZWQgaXMgY29ycmVjdCBleGNlcHQgZm9yIC0oQW4pLgorIyB0aGUgYmFzZSByZWcgbXVzdCBiZSB1cGRhdGVkIGZvciBib3RoIC0oQW4pIGFuZCAoQW4pKy4KKwlnbG9iYWwJCWdldF9wYWNrZWQKK2dldF9wYWNrZWQ6CisJbW92LmwJCSYweGMsJWQwCQkjIHBhY2tlZCBpcyAxMiBieXRlcworCWJzci5sCQlfZGNhbGNfZWEJCSMgZmV0Y2ggPGVhPjsgY29ycmVjdCBBbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTEJCSMgcGFzczogcHRyIHRvIHN1cGVyIGRzdAorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcworCWJzci5sCQlfZG1lbV9yZWFkCQkjIHJlYWQgcGFja2VkIG9wZXJhbmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUubAkJZmFjY19pbl94CQkjIHllcworCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgorCWJmZXh0dQkJRlBfU1JDKCVhNil7JjE6JjE1fSwlZDAJIyBnZXQgZXhwCisJY21waS53CQklZDAsJjB4N2ZmZgkJIyBJTkYgb3IgTkFOPworCWJuZS5iCQlncF90cnlfemVybwkJIyBubworCXJ0cwkJCQkJIyBvcGVyYW5kIGlzIGFuIElORiBvciBOQU4KKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCisjIGEgbm9ybWFsIHBhY2tlZCBvcC4KK2dwX3RyeV96ZXJvOgorCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKKwlhbmRpLmIJCSYweDBmLCVkMAkJIyBjbGVhciBhbGwgYnV0IGxhc3QgbnliYmxlCisJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KKwl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPworCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCQkjIGlzIGx3IDMgemVybz8KKwlibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybworCXJ0cwkJCQkJIyBvcGVyYW5kIGlzIGEgWkVSTworZ3Bfbm90X3NwZWM6CisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAorCWJzci5sCQlkZWNiaW4JCQkjIGNvbnZlcnQgdG8gZXh0ZW5kZWQKKwlmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIG1ha2UgdGhpcyB0aGUgc3Jjb3AKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkZWNiaW4oKTogQ29udmVydHMgbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIJIworIwkgICAgYTAgdG8gZXh0ZW5kZWQtcHJlY2lzaW9uIHZhbHVlIGluIGZwMC4JCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZXhhY3QgZnAgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhY2tlZCBiY2QgdmFsdWUuCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlFeHBlY3RlZCBpcyBhIG5vcm1hbCBiY2QgKGkuZS4gbm9uLWV4Y2VwdGlvbmFsOyBhbGwgaW5mLCB6ZXJvLAkjCisjCWFuZCBOYU4gb3BlcmFuZHMgYXJlIGRpc3BhdGNoZWQgd2l0aG91dCBlbnRlcmluZyB0aGlzIHJvdXRpbmUpCSMKKyMJdmFsdWUgaW4gNjg4ODEvODgyIGZvcm1hdCBhdCBsb2NhdGlvbiAoYTApLgkJCSMKKyMJCQkJCQkJCQkjCisjCUExLiBDb252ZXJ0IHRoZSBiY2QgZXhwb25lbnQgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUgYWRkcyBhbmQJIworIwltdWxzLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCSMKKyMJZm9yIHRoZSBtYW50aXNzYSB3aGljaCBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyAxNyBpbnRlZ2VyCSMKKyMJZGlnaXRzLCByYXRoZXIgdGhhbiAxIGludGVnZXIgYW5kIDE2IGZyYWN0aW9uIGRpZ2l0cy4JCSMKKyMJTm90ZTogdGhpcyBvcGVyYXRpb24gY2FuIG5ldmVyIG92ZXJmbG93LgkJCSMKKyMJCQkJCQkJCQkjCisjCUEyLiBDb252ZXJ0IHRoZSBiY2QgbWFudGlzc2EgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUJCSMKKyMJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCQkjCisjCVRoZSBtYW50aXNzYSBkaWdpdHMgd2lsbCBiZSBjb252ZXJ0ZWQgd2l0aCB0aGUgZGVjaW1hbCBwb2ludAkjCisjCWFzc3VtZWQgZm9sbG93aW5nIHRoZSBsZWFzdC1zaWduaWZpY2FudCBkaWdpdC4JCQkjCisjCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCisjCQkJCQkJCQkJIworIwlBMy4gQ291bnQgdGhlIG51bWJlciBvZiBsZWFkaW5nL3RyYWlsaW5nIHplcm9zIGluIHRoZQkJIworIwliY2Qgc3RyaW5nLiAgSWYgU0UgaXMgcG9zaXRpdmUsIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zOwkjCisjCWlmIG5lZ2F0aXZlLCBjb3VudCB0aGUgdHJhaWxpbmcgemVyb3MuICBTZXQgdGhlIGFkanVzdGVkCSMKKyMJZXhwb25lbnQgZXF1YWwgdG8gdGhlIGV4cG9uZW50IGZyb20gQTEgYW5kIHRoZSB6ZXJvIGNvdW50CSMKKyMJYWRkZWQgaWYgU00gPSAxIGFuZCBzdWJ0cmFjdGVkIGlmIFNNID0gMC4gIFNjYWxlIHRoZQkJIworIwltYW50aXNzYSB0aGUgZXF1aXZhbGVudCBvZiBmb3JjaW5nIGluIHRoZSBiY2QgdmFsdWU6CQkjCisjCQkJCQkJCQkJIworIwlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgkJIworIwlTTSA9IDEJYSBub24temVybyBkaWdpdCBpbiBNYW50MCwgbHNkIG9mIHRoZSBmcmFjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMJdGhpcyB3aWxsIGluc3VyZSB0aGF0IGFueSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiBpdHMJCSMKKyMJcmVwcmVzZW50YXRpb24gKGV4LiAwLjFFMiwgMUUxLCAxMEUwLCAxMDBFLTEpLCBpcyBjb252ZXJ0ZWQJIworIwljb25zaXN0ZW50bHkuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE0LiBDYWxjdWxhdGUgdGhlIGZhY3RvciAxMF5leHAgaW4gRlAxIHVzaW5nIGEgdGFibGUgb2YJCSMKKyMJMTBeKDJebikgdmFsdWVzLiAgVG8gcmVkdWNlIHRoZSBlcnJvciBpbiBmb3JtaW5nIGZhY3RvcnMJIworIwlncmVhdGVyIHRoYW4gMTBeMjcsIGEgZGlyZWN0ZWQgcm91bmRpbmcgc2NoZW1lIGlzIHVzZWQgd2l0aAkjCisjCXRhYmxlcyByb3VuZGVkIHRvIFJOLCBSTSwgYW5kIFJQLCBhY2NvcmRpbmcgdG8gdGhlIHRhYmxlCSMKKyMJaW4gdGhlIGNvbW1lbnRzIG9mIHRoZSBwd3J0ZW4gc2VjdGlvbi4JCQkJIworIwkJCQkJCQkJCSMKKyMJQTUuIEZvcm0gdGhlIGZpbmFsIGJpbmFyeSBudW1iZXIgYnkgc2NhbGluZyB0aGUgbWFudGlzc2EgYnkJIworIwl0aGUgZXhwb25lbnQgZmFjdG9yLiAgVGhpcyBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIHRoZQkJIworIwltYW50aXNzYSBpbiBGUDAgYnkgdGhlIGZhY3RvciBpbiBGUDEgaWYgdGhlIGFkanVzdGVkCQkjCisjCWV4cG9uZW50IHNpZ24gaXMgcG9zaXRpdmUsIGFuZCBkaXZpZGluZyBGUDAgYnkgRlAxIGlmCQkjCisjCWl0IGlzIG5lZ2F0aXZlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlDbGVhbiB1cCBhbmQgcmV0dXJuLiBDaGVjayBpZiB0aGUgZmluYWwgbXVsIG9yIGRpdiB3YXMgaW5leGFjdC4JIworIwlJZiBzbywgc2V0IElORVgxIGluIFVTRVJfRlBTUi4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMJUFRFTlJOLCBQVEVOUk0sIGFuZCBQVEVOUlAgYXJlIGFycmF5cyBvZiBwb3dlcnMgb2YgMTAgcm91bmRlZAorIwl0byBuZWFyZXN0LCBtaW51cywgYW5kIHBsdXMsIHJlc3BlY3RpdmVseS4gIFRoZSB0YWJsZXMgaW5jbHVkZQorIwkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKKyMJaXMgcmVxdWlyZWQgdW50aWwgdGhlIHBvd2VyIGlzIGdyZWF0ZXIgdGhhbiAyNywgaG93ZXZlciwgYWxsCisjCXRhYmxlcyBpbmNsdWRlIHRoZSBmaXJzdCA1IGZvciBlYXNlIG9mIGluZGV4aW5nLgorIworUlRBQkxFOgorCWJ5dGUJCTAsMCwwLDAKKwlieXRlCQkyLDMsMiwzCisJYnl0ZQkJMiwzLDMsMgorCWJ5dGUJCTMsMiwyLDMKKworCXNldAkJRk5JQlMsNworCXNldAkJRlNUUlQsMAorCisJc2V0CQlFU1RSVCw0CisJc2V0CQlFRElHSVRTLDIKKworCWdsb2JhbAkJZGVjYmluCitkZWNiaW46CisJbW92LmwJCTB4MCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5IG9mIGlucHV0CisJbW92LmwJCTB4NCglYTApLEZQX1NDUjBfSEkoJWE2KSAjIHNvIHdlIGRvbid0IGFsdGVyIGl0CisJbW92LmwJCTB4OCglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKwlmbW92bS54CQkmMHgxLC0oJXNwKQkJIyBzYXZlIGZwMQorIworIyBDYWxjdWxhdGUgZXhwb25lbnQ6CisjICAxLiBDb3B5IGJjZCB2YWx1ZSBpbiBtZW1vcnkgZm9yIHVzZSBhcyBhIHdvcmtpbmcgY29weS4KKyMgIDIuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBleHBvbmVudCBpbiBkMSBieSBtdWwgYW5kIGFkZC4KKyMgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCisjICA0LiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlIGZvciBpbnRlcnByZXRpbmcgdGhlIG1hbnQgYXMgYWxsIGludGVnZXIgZGlnaXRzLgorIyAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBjYWxjX2U6CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiBhY2N1bXVsYXRvciBmb3IgYmluYXJ5IGV4cG9uZW50CisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKKyMJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCopICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKKyMKK2NhbGNfZToKKwltb3YubAkJJkVESUdJVFMsJWQyCQkjICMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0CisJbW92LmwJCSZFU1RSVCwlZDMJCSMgY291bnRlciB0byBwaWNrIHVwIGRpZ2l0cworCW1vdi5sCQkoJWEwKSwlZDQJCSMgZ2V0IGZpcnN0IHdvcmQgb2YgYmNkCisJY2xyLmwJCSVkMQkJCSMgemVybyBkMSBmb3IgYWNjdW11bGF0b3IKK2VfZ2Q6CisJbXVsdS5sCQkmMHhhLCVkMQkJIyBtdWwgcGFydGlhbCBwcm9kdWN0IGJ5IG9uZSBkaWdpdCBwbGFjZQorCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kIGludG8gZDAKKwlhZGQubAkJJWQwLCVkMQkJCSMgZDEgPSBkMSArIGQwCisJYWRkcS5iCQkmNCwlZDMJCQkjIGFkdmFuY2UgZDMgdG8gdGhlIG5leHQgZGlnaXQKKwlkYmYudwkJJWQyLGVfZ2QJCSMgaWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCisJYnRzdAkJJjMwLCVkNAkJCSMgZ2V0IFNFCisJYmVxLmIJCWVfcG9zCQkJIyBkb24ndCBuZWdhdGUgaWYgcG9zCisJbmVnLmwJCSVkMQkJCSMgbmVnYXRlIGJlZm9yZSBzdWJ0cmFjdGluZworZV9wb3M6CisJc3ViLmwJCSYxNiwlZDEJCQkjIHN1YiB0byBjb21wZW5zYXRlIGZvciBzaGlmdCBvZiBtYW50CisJYmdlLmIJCWVfc2F2ZQkJCSMgaWYgc3RpbGwgcG9zLCBkbyBub3QgbmVnCisJbmVnLmwJCSVkMQkJCSMgbm93IG5lZ2F0aXZlLCBtYWtlIHBvcyBhbmQgc2V0IFNFCisJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIHNldCBTRSBpbiBkNCwKKwlvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiB3b3JraW5nIGJjZAorZV9zYXZlOgorCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgZXhwIG9uIHN0YWNrCisjCisjCisjIENhbGN1bGF0ZSBtYW50aXNzYToKKyMgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCisjICAyLiBDb3JyZWN0IGZvciBtYW50aXNzYSBzaWduLgorIyAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBjYWxjX206CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiBsd29yZCBjb3VudGVyCisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IHdvcmRzIDIgYW5kIDMgb2YgYmNkCisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKKyMJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKKyMJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCisjCSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKKyMKK2NhbGNfbToKKwltb3YubAkJJjEsJWQxCQkJIyB3b3JkIGNvdW50ZXIsIGluaXQgdG8gMQorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGFjY3VtdWxhdG9yCisjCisjCisjICBTaW5jZSB0aGUgcGFja2VkIG51bWJlciBoYXMgYSBsb25nIHdvcmQgYmV0d2VlbiB0aGUgZmlyc3QgJiBzZWNvbmQgcGFydHMsCisjICBnZXQgdGhlIGludGVnZXIgZGlnaXQgdGhlbiBza2lwIGRvd24gJiBnZXQgdGhlIHJlc3Qgb2YgdGhlCisjICBtYW50aXNzYS4gIFdlIHdpbGwgdW5yb2xsIHRoZSBsb29wIG9uY2UuCisjCisJYmZleHR1CQkoJWEwKXsmMjg6JjR9LCVkMAkjIGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKKwlmYWRkLmIJCSVkMCwlZnAwCQkjIGFkZCBkaWdpdCB0byBzdW0gaW4gZnAwCisjCisjCisjICBHZXQgdGhlIHJlc3Qgb2YgdGhlIG1hbnRpc3NhLgorIworbG9hZGx3OgorCW1vdi5sCQkoJWEwLCVkMS5MKjQpLCVkNAkjIGxvYWQgbWFudGlzc2EgbG9ucXdvcmQgaW50byBkNAorCW1vdi5sCQkmRlNUUlQsJWQzCQkjIGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwltb3YubAkJJkZOSUJTLCVkMgkJIyByZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKK21kMmI6CisJZm11bC5zCQkmMHg0MTIwMDAwMCwlZnAwCSMgZnAwID0gZnAwICogMTAKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZAorCWZhZGQuYgkJJWQwLCVmcDAJCSMgZnAwID0gZnAwICsgZGlnaXQKKyMKKyMKKyMgIElmIGFsbCB0aGUgZGlnaXRzICg4KSBpbiB0aGF0IGxvbmcgd29yZCBoYXZlIGJlZW4gY29udmVydGVkIChkMj0wKSwKKyMgIHRoZW4gaW5jIGQxICg9MikgdG8gcG9pbnQgdG8gdGhlIG5leHQgbG9uZyB3b3JkIGFuZCByZXNldCBkMyB0byAwCisjICB0byBpbml0aWFsaXplIHRoZSBkaWdpdCBvZmZzZXQsIGFuZCBzZXQgZDIgdG8gNyBmb3IgdGhlIGRpZ2l0IGNvdW50OworIyAgZWxzZSBjb250aW51ZSB3aXRoIHRoaXMgbG9uZyB3b3JkLgorIworCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmLncJCSVkMixtZDJiCQkjIGNoZWNrIGZvciBsYXN0IGRpZ2l0IGluIHRoaXMgbHcKK25leHRsdzoKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGx3IHBvaW50ZXIgaW4gbWFudGlzc2EKKwljbXAubAkJJWQxLCYyCQkJIyB0ZXN0IGZvciBsYXN0IGx3CisJYmxlLmIJCWxvYWRsdwkJCSMgaWYgbm90LCBnZXQgbGFzdCBvbmUKKyMKKyMgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBtYW50IGFuZCBtYWtlIHRoZSB2YWx1ZSBpbiBmcDAgdGhlIHNhbWUgc2lnbi4KKyMKK21fc2lnbjoKKwlidHN0CQkmMzEsKCVhMCkJCSMgdGVzdCBzaWduIG9mIHRoZSBtYW50aXNzYQorCWJlcS5iCQlhcF9zdF96CQkJIyBpZiBjbGVhciwgZ28gdG8gYXBwZW5kL3N0cmlwIHplcm9zCisJZm5lZy54CQklZnAwCQkJIyBpZiBzZXQsIG5lZ2F0ZSBmcDAKKyMKKyMgQXBwZW5kL3N0cmlwIHplcm9zOgorIworIyAgRm9yIGFkanVzdGVkIGV4cG9uZW50cyB3aGljaCBoYXZlIGFuIGFic29sdXRlIHZhbHVlIGdyZWF0ZXIgdGhhbiAyNyosCisjICB0aGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgYW1vdW50IG5lZWRlZCB0byBub3JtYWxpemUgdGhlIG1hbnRpc3NhCisjICBmb3IgdGhlIGFkanVzdGVkIGV4cG9uZW50LiAgVGhhdCBudW1iZXIgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBleHAKKyMgIGlmIHRoZSBleHAgd2FzIHBvc2l0aXZlLCBhbmQgYWRkZWQgaWYgaXQgd2FzIG5lZ2F0aXZlLiAgVGhlIHB1cnBvc2UKKyMgIG9mIHRoaXMgaXMgdG8gcmVkdWNlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQgYW5kIHRoZSBwb3NzaWJpbGl0eQorIyAgb2YgZXJyb3IgaW4gY2FsY3VsYXRpb24gb2YgcHdydGVuLgorIworIyAgMS4gQnJhbmNoIG9uIHRoZSBzaWduIG9mIHRoZSBhZGp1c3RlZCBleHBvbmVudC4KKyMgIDJwLihwb3NpdGl2ZSBleHApCisjICAgMi4gQ2hlY2sgTTE2IGFuZCB0aGUgZGlnaXRzIGluIGx3b3JkcyAyIGFuZCAzIGluIGRlY2VuZGluZyBvcmRlci4KKyMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KKyMgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgorIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgbWFrZSB0aGUgZXhwIGFicworIwkgICBhbmQgc2V0IFNFLgorIwk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgorIyAgMm4uKG5lZ2F0aXZlIGV4cCkKKyMgICAyLiBDaGVjayB0aGUgZGlnaXRzIGluIGx3b3JkcyAzIGFuZCAyIGluIGRlY2VuZGluZyBvcmRlci4KKyMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KKyMgICA0LiBBZGQgdGhlIGNvdW50IHRvIHRoZSBleHAuCisjICAgNS4gQ2hlY2sgaWYgdGhlIGV4cCBoYXMgY3Jvc3NlZCB6ZXJvIGluICMzIGFib3ZlOyBjbGVhciBTRS4KKyMgICA2LiBEaXZpZGUgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KKyMKKyMgICpXaHkgMjc/ICBJZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgaXMgd2l0aGluIC0yOCA8IGV4cEEgPCAyOCwgdGhhbgorIyAgIGFueSBhZGp1c3RtZW50IGR1ZSB0byBhcHBlbmQvc3RyaXAgemVyb3Mgd2lsbCBkcml2ZSB0aGUgcmVzdWx0YW5lCisjICAgZXhwb25lbnQgdG93YXJkcyB6ZXJvLiAgU2luY2UgYWxsIHB3cnRlbiBjb25zdGFudHMgd2l0aCBhIHBvd2VyCisjICAgb2YgMjcgb3IgbGVzcyBhcmUgZXhhY3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHRoaXMgcm91dGluZSB0bworIyAgIGF0dGVtcHQgdG8gbGVzc2VuIHRoZSByZXN1bHRhbnQgZXhwb25lbnQuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgYXBfc3RfejoKKyMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCisjCSgqKSAgZDE6IHplcm8gY291bnQKKyMJKCopICBkMjogZGlnaXQgY291bnQKKyMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKKyMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKKyMJKCopICBkNTogbHdvcmQgY291bnRlcgorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoICkgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCisjCisjIEZpcnN0IGNoZWNrIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQgdG8gc2VlIGlmIHRoaXMKKyMgcm91dGluZSBpcyBuZWNlc3NhcnkuICBJZiBzbywgdGhlbiBjaGVjayB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKKyMgYW5kIGRvIGFwcGVuZCAoKykgb3Igc3RyaXAgKC0pIHplcm9zIGFjY29yZGluZ2x5LgorIyBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIHBvc2l0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorIworYXBfc3RfejoKKwltb3YubAkJKCVzcCksJWQxCQkjIGxvYWQgZXhwQSBmb3IgcmFuZ2UgdGVzdAorCWNtcC5sCQklZDEsJjI3CQkJIyB0ZXN0IGlzIHdpdGggMjcKKwlibGUudwkJcHdydGVuCQkJIyBpZiBhYnMoZXhwQSkgPDI4LCBza2lwIGFwL3N0IHplcm9zCisJYnRzdAkJJjMwLCglYTApCQkjIGNoZWNrIHNpZ24gb2YgZXhwCisJYm5lLmIJCWFwX3N0X24JCQkjIGlmIG5lZywgZ28gdG8gbmVnIHNpZGUKKwljbHIubAkJJWQxCQkJIyB6ZXJvIGNvdW50IHJlZworCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJYmZleHR1CQklZDR7JjI4OiY0fSwlZDAJCSMgZ2V0IE0xNiBpbiBkMAorCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBNMTYgaXMgbm9uLXplcm8sIGdvIGZpeCBleHAKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIHplcm8gY291bnQKKwltb3YubAkJJjEsJWQ1CQkJIyBpbml0IGx3b3JkIGNvdW50ZXIKKwltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMiB0byBkNAorCWJuZS5iCQlhcF9wX2NsCQkJIyBpZiBsdyAyIGlzIHplcm8sIHNraXAgaXQKKwlhZGRxLmwJCSY4LCVkMQkJCSMgYW5kIGluYyBjb3VudCBieSA4CisJYWRkcS5sCQkmMSwlZDUJCQkjIGluYyBsd29yZCBjb3VudGVyCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMgdG8gZDQKK2FwX3BfY2w6CisJY2xyLmwJCSVkMwkJCSMgaW5pdCBvZmZzZXQgcmVnCisJbW92LmwJCSY3LCVkMgkJCSMgaW5pdCBkaWdpdCBjb3VudGVyCithcF9wX2dkOgorCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCBkaWdpdAorCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBub24temVybywgZ28gdG8gZml4IGV4cAorCWFkZHEubAkJJjQsJWQzCQkJIyBwb2ludCB0byBuZXh0IGRpZ2l0CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCisJZGJmLncJCSVkMixhcF9wX2dkCQkjIGdldCBuZXh0IGRpZ2l0CithcF9wX2Z4OgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDIKKwltb3YubAkJKCVzcCksJWQxCQkjIGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ2UuYgkJYXBfcF9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyB0byBwd3J0ZW4KKwluZWcubAkJJWQxCQkJIyBub3cgaXRzIG5lZzsgZ2V0IGFicworCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIGFuZCBzZXQgU0UgaW4gZDQKKwlvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiBtZW1vcnkKKyMKKyMgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgorIyB6ZXJvcyBmcm9tIHRoZSBtYW50aXNzYS4KKyMKK2FwX3BfZm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBwb3dlci1vZi10ZW4gdGFibGUKKwljbHIubAkJJWQzCQkJIyBpbml0IHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCW1vdi5sCQkmMywlZDIJCQkjIGluaXQgZDIgdG8gY291bnQgYml0cyBpbiBjb3VudGVyCithcF9wX2VsOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CisJYmNjLmIJCWFwX3BfZW4JCQkjIGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQorYXBfcF9lbjoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQlhcF9wX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAorCWZtdWwueAkJJWZwMSwlZnAwCQkjIG11bCBtYW50aXNzYSBieSAxMCoqKG5vX2JpdHNfc2hpZnRlZCkKKwlicmEuYgkJcHdydGVuCQkJIyBnbyBjYWxjIHB3cnRlbgorIworIyBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIG5lZ2F0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorIworYXBfc3RfbjoKKwljbHIubAkJJWQxCQkJIyBjbHIgY291bnRlcgorCW1vdi5sCQkmMiwlZDUJCQkjIHNldCB1cCBkNSB0byBwb2ludCB0byBsd29yZCAzCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMKKwlibmUuYgkJYXBfbl9jbAkJCSMgaWYgbm90IHplcm8sIGNoZWNrIGRpZ2l0cworCXN1Yi5sCQkmMSwlZDUJCQkjIGRlYyBkNSB0byBwb2ludCB0byBsd29yZCAyCisJYWRkcS5sCQkmOCwlZDEJCQkjIGluYyBjb3VudGVyIGJ5IDgKKwltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMgorYXBfbl9jbDoKKwltb3YubAkJJjI4LCVkMwkJCSMgcG9pbnQgdG8gbGFzdCBkaWdpdAorCW1vdi5sCQkmNywlZDIJCQkjIGluaXQgZGlnaXQgY291bnRlcgorYXBfbl9nZDoKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKKwlibmUuYgkJYXBfbl9meAkJCSMgaWYgbm9uLXplcm8sIGdvIHRvIGV4cCBmaXgKKwlzdWJxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gcHJldmlvdXMgZGlnaXQKKwlhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGRpZ2l0IGNvdW50ZXIKKwlkYmYudwkJJWQyLGFwX25fZ2QJCSMgZ2V0IG5leHQgZGlnaXQKK2FwX25fZng6CisJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgY291bnRlciB0byBkMAorCW1vdi5sCQkoJXNwKSwlZDEJCSMgZ2V0IGFkanVzdGVkIGV4cCBmcm9tIG1lbW9yeQorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBjb3VudCBmcm9tIGV4cAorCWJndC5iCQlhcF9uX2ZtCQkJIyBpZiBzdGlsbCBwb3MsIGdvIGZpeCBtYW50aXNzYQorCW5lZy5sCQklZDEJCQkjIHRha2UgYWJzIG9mIGV4cCBhbmQgY2xyIFNFCisJbW92LmwJCSglYTApLCVkNAkJIyBsb2FkIGx3b3JkIDEgdG8gZDQKKwlhbmQubAkJJjB4YmZmZmZmZmYsJWQ0CQkjIGFuZCBjbHIgU0UgaW4gZDQKKwlhbmQubAkJJjB4YmZmZmZmZmYsKCVhMCkJIyBhbmQgaW4gbWVtb3J5CisjCisjIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCisjIHplcm9zIHRvIHRoZSBtYW50aXNzYS4KKyMKK2FwX25fZm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBwb3dlci1vZi10ZW4gdGFibGUKKwljbHIubAkJJWQzCQkJIyBpbml0IHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCW1vdi5sCQkmMywlZDIJCQkjIGluaXQgZDIgdG8gY291bnQgYml0cyBpbiBjb3VudGVyCithcF9uX2VsOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CisJYmNjLmIJCWFwX25fZW4JCQkjIGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQorYXBfbl9lbjoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQlhcF9uX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAorCWZkaXYueAkJJWZwMSwlZnAwCQkjIGRpdiBtYW50aXNzYSBieSAxMCoqKG5vX2JpdHNfc2hpZnRlZCkKKyMKKyMKKyMgQ2FsY3VsYXRlIHBvd2VyLW9mLXRlbiBmYWN0b3IgZnJvbSBhZGp1c3RlZCBhbmQgc2hpZnRlZCBleHBvbmVudC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCisjICBwd3J0ZW46CisjCSgqKSAgZDA6IHRlbXAKKyMJKCApICBkMTogZXhwb25lbnQKKyMJKCopICBkMjoge0ZQQ1JbNjo1XSxTTSxTRX0gYXMgaW5kZXggaW4gUlRBQkxFOyB0ZW1wCisjCSgqKSAgZDM6IEZQQ1Igd29yayBjb3B5CisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSgqKSAgYTE6IFJUQUJMRSBwb2ludGVyCisjICBjYWxjX3A6CisjCSgqKSAgZDA6IHRlbXAKKyMJKCApICBkMTogZXhwb25lbnQKKyMJKCopICBkMzogUFdSVHh4IHRhYmxlIGluZGV4CisjCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBjb3B5IG9mIGJjZAorIwkoKikgIGExOiBQV1JUeHggcG9pbnRlcgorIwkoKikgZnAxOiBwb3dlci1vZi10ZW4gYWNjdW11bGF0b3IKKyMKKyMgUHdydGVuIGNhbGN1bGF0ZXMgdGhlIGV4cG9uZW50IGZhY3RvciBpbiB0aGUgc2VsZWN0ZWQgcm91bmRpbmcgbW9kZQorIyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZToKKyMKKyMJU2lnbiBvZiBNYW50ICBTaWduIG9mIEV4cCAgUm91bmRpbmcgTW9kZSAgUFdSVEVOIFJvdW5kaW5nIE1vZGUKKyMKKyMJQU5ZCSAgQU5ZCVJOCVJOCisjCisjCSArCSAgICsJUlAJUlAKKyMJIC0JICAgKwlSUAlSTQorIwkgKwkgICAtCVJQCVJNCisjCSAtCSAgIC0JUlAJUlAKKyMKKyMJICsJICAgKwlSTQlSTQorIwkgLQkgICArCVJNCVJQCisjCSArCSAgIC0JUk0JUlAKKyMJIC0JICAgLQlSTQlSTQorIworIwkgKwkgICArCVJaCVJNCisjCSAtCSAgICsJUloJUk0KKyMJICsJICAgLQlSWglSUAorIwkgLQkgICAtCVJaCVJQCisjCisjCitwd3J0ZW46CisJbW92LmwJCVVTRVJfRlBDUiglYTYpLCVkMwkjIGdldCB1c2VyJ3MgRlBDUgorCWJmZXh0dQkJJWQzeyYyNjomMn0sJWQyCQkjIGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCisJbW92LmwJCSglYTApLCVkNAkJIyByZWxvYWQgMXN0IGJjZCB3b3JkIHRvIGQ0CisJYXNsLmwJCSYyLCVkMgkJCSMgZm9ybWF0IGQyIHRvIGJlCisJYmZleHR1CQklZDR7JjA6JjJ9LCVkMAkJIyB7RlBDUls2XSxGUENSWzVdLFNNLFNFfQorCWFkZC5sCQklZDAsJWQyCQkJIyBpbiBkMiBhcyBpbmRleCBpbnRvIFJUQUJMRQorCWxlYS5sCQlSVEFCTEUoJXBjKSwlYTEJCSMgbG9hZCBydGFibGUgYmFzZQorCW1vdi5iCQkoJWExLCVkMiksJWQwCQkjIGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQorCWNsci5sCQklZDMJCQkjIGNsZWFyIGQzIHRvIGZvcmNlIG5vIGV4YyBhbmQgZXh0ZW5kZWQKKwliZmlucwkJJWQwLCVkM3smMjY6JjJ9CQkjIHN0dWZmIG5ldyByb3VuZGluZyBiaXRzIGluIEZQQ1IKKwlmbW92LmwJCSVkMywlZnBjcgkJIyB3cml0ZSBuZXcgRlBDUgorCWFzci5sCQkmMSwlZDAJCQkjIHdyaXRlIGNvcnJlY3QgUFRFTnh4IHRhYmxlCisJYmNjLmIJCW5vdF9ycAkJCSMgdG8gYTEKKwlsZWEubAkJUFRFTlJQKCVwYyksJWExCQkjIGl0IGlzIFJQCisJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCitub3RfcnA6CisJYXNyLmwJCSYxLCVkMAkJCSMga2VlcCBjaGVja2luZworCWJjYy5iCQlub3Rfcm0KKwlsZWEubAkJUFRFTlJNKCVwYyksJWExCQkjIGl0IGlzIFJNCisJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCitub3Rfcm06CisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkJIyBpdCBpcyBSTgorY2FsY19wOgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGV4cCB0byBkMDt1c2UgZDAKKwlicGwuYgkJbm9fbmVnCQkJIyBpZiBleHAgaXMgbmVnYXRpdmUsCisJbmVnLmwJCSVkMAkJCSMgaW52ZXJ0IGl0CisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgc2V0IFNFIGJpdAorbm9fbmVnOgorCWNsci5sCQklZDMJCQkjIHRhYmxlIGluZGV4CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQorZV9sb29wOgorCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJZV9uZXh0CQkJIyBpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJCSMgaW5jIGQzIHRvIG5leHQgcnRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJCSMgY2hlY2sgaWYgZDAgaXMgemVybworCWJuZS5iCQllX2xvb3AJCQkjIG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZworIworIworIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQorIyAgc2FtZSBzaWduLiBJZiB0aGUgZXhwIHdhcyBwb3MgdGhlbiBtdWx0aXBseSBmcDEqZnAwOworIyAgZWxzZSBkaXZpZGUgZnAwL2ZwMS4KKyMKKyMgUmVnaXN0ZXIgVXNhZ2U6CisjICBub3JtOgorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCisjCSggKSBmcDE6IHNjYWxpbmcgZmFjdG9yIC0gMTAqKihhYnMoZXhwKSkKKyMKK3Bub3JtOgorCWJ0c3QJCSYzMCwoJWEwKQkJIyB0ZXN0IHRoZSBzaWduIG9mIHRoZSBleHBvbmVudAorCWJlcS5iCQltdWwJCQkjIGlmIGNsZWFyLCBnbyB0byBtdWx0aXBseQorZGl2OgorCWZkaXYueAkJJWZwMSwlZnAwCQkjIGV4cCBpcyBuZWdhdGl2ZSwgc28gZGl2aWRlIG1hbnQgYnkgZXhwCisJYnJhLmIJCWVuZF9kZWMKK211bDoKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBleHAgaXMgcG9zaXRpdmUsIHNvIG11bHRpcGx5IGJ5IGV4cAorIworIworIyBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KKyMKKyMgSWYgdGhlIGZpbmFsIG11bC9kaXYgaW4gZGVjYmluIGluY3VycmVkIGFuIGluZXggZXhjZXB0aW9uLAorIyBpdCB3aWxsIGJlIGluZXgyLCBidXQgd2lsbCBiZSByZXBvcnRlZCBhcyBpbmV4MSBieSBnZXRfb3AuCisjCitlbmRfZGVjOgorCWZtb3YubAkJJWZwc3IsJWQwCQkjIGdldCBzdGF0dXMgcmVnaXN0ZXIKKwliY2xyCQkmaW5leDJfYml0KzgsJWQwCSMgdGVzdCBmb3IgaW5leDIgYW5kIGNsZWFyIGl0CisJYmVxLmIJCW5vX2V4YwkJCSMgc2tpcCB0aGlzIGlmIG5vIGV4YworCW9yaS53CQkmaW54MWFfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IElORVgxL0FJTkVYCitub19leGM6CisJYWRkLmwJCSYweDQsJXNwCQkjIGNsZWFyIDEgbHcgcGFyYW0KKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmVzdG9yZSBmcDEKKwltb3ZtLmwJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIGQyLWQ1CisJZm1vdi5sCQkmMHgwLCVmcGNyCisJZm1vdi5sCQkmMHgwLCVmcHNyCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgYmluZGVjKCk6IENvbnZlcnRzIGFuIGlucHV0IGluIGV4dGVuZGVkIHByZWNpc2lvbiBmb3JtYXQgdG8gYmNkIGZvcm1hdCMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIGluIG1lbW9yeS4JIworIwkgICAgIHRoZSBpbnB1dCBtYXkgYmUgZWl0aGVyIG5vcm1hbGl6ZWQsIHVubm9ybWFsaXplZCwgb3IJIworIwkgICAgIGRlbm9ybWFsaXplZC4JCQkJCQkjCisjCWQwID0gY29udGFpbnMgdGhlIGstZmFjdG9yIHNpZ24tZXh0ZW5kZWQgdG8gMzItYml0cy4JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gYmNkIGZvcm1hdCByZXN1bHQgb24gdGhlIHN0YWNrLgkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlBMS4JU2V0IFJNIGFuZCBzaXplIGV4dDsgIFNldCBTSUdNQSA9IHNpZ24gb2YgaW5wdXQuCSMKKyMJCVRoZSBrLWZhY3RvciBpcyBzYXZlZCBmb3IgdXNlIGluIGQ3LiBDbGVhciB0aGUJCSMKKyMJCUJJTkRFQ19GTEcgZm9yIHNlcGFyYXRpbmcgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQJIworIwkJaW5wdXQuICBJZiBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQgb3IgZGVub3JtYWxpemVkLAkjCisjCQlub3JtYWxpemUgaXQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTIuCVNldCBYID0gYWJzKGlucHV0KS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCUEzLglDb21wdXRlIElMT0cuCQkJCQkJIworIwkJSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMJIworIwkJYXBwcm94aW1hdGVkIGJ5IGFkZGluZyBlICsgMC5mIHdoZW4gdGhlIG9yaWdpbmFsCSMKKyMJCXZhbHVlIGlzIHZpZXdlZCBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4JIworIwkJVGhpcyB2YWx1ZSBpcyBzdG9yZWQgaW4gZDYuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE0LglDbHIgSU5FWCBiaXQuCQkJCQkJIworIwkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCQkjCisjCQkJCQkJCQkJIworIwlBNS4JU2V0IElDVFIgPSAwOwkJCQkJCSMKKyMJCUlDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQkjCisjCQlsb29wIGVudHJ5IEE2LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE2LglDYWxjdWxhdGUgTEVOLgkJCQkJCSMKKyMJCUxFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUJIworIwkJay1mYWN0b3IgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLAkjCisjCQlpZiBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciwgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMJIworIwkJYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCSMKKyMJCXNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgkjCisjCQlJZiBMRU4gaXMgY29tcHV0ZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDE3LCBzZXQgT1BFUlIgaW4JIworIwkJVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4JCQkjCisjCQkJCQkJCQkJIworIwlBNy4JQ2FsY3VsYXRlIFNDQUxFLgkJCQkJIworIwkJU0NBTEUgaXMgZXF1YWwgdG8gMTBeSVNDQUxFLCB3aGVyZSBJU0NBTEUgaXMgdGhlIG51bWJlcgkjCisjCQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cwkjCisjCQlpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZQkjCisjCQlzaWduIG9mIElTQ0FMRSwgdXNlZCBpbiBBOS4gRnAxIGNvbnRhaW5zCQkjCisjCQkxMF5eKGFicyhJU0NBTEUpKSB1c2luZyBhIHJvdW5kaW5nIG1vZGUgd2hpY2ggaXMgYQkjCisjCQlmdW5jdGlvbiBvZiB0aGUgb3JpZ2luYWwgcm91bmRpbmcgbW9kZSBhbmQgdGhlIHNpZ25zCSMKKyMJCW9mIElTQ0FMRSBhbmQgWC4gIEEgdGFibGUgaXMgZ2l2ZW4gaW4gdGhlIGNvZGUuCQkjCisjCQkJCQkJCQkJIworIwlBOC4JQ2xyIElORVg7IEZvcmNlIFJaLgkJCQkJIworIwkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCQkjCisjCQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQkjCisjCQlvbmx5IG9uZSByb3VuZGluZyBlcnJvci4gIFRoZSBncnMgYml0cyBhcmUgY29sbGVjdGVkIGluICMKKyMJCXRoZSBJTkVYIGZsYWcgZm9yIHVzZSBpbiBBMTAuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE5LglTY2FsZSBYIC0+IFkuCQkJCQkJIworIwkJVGhlIG1hbnRpc3NhIGlzIHNjYWxlZCB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2YJCSMKKyMJCXNpZ25pZmljYW50IGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQJIworIwkJaW4gSU5FWDIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTEwLglPciBpbiBJTkVYLgkJCQkJCSMKKyMJCUlmIElORVggaXMgc2V0LCByb3VuZCBlcnJvciBvY2N1cnJlZC4gIFRoaXMgaXMJCSMKKyMJCWNvbXBlbnNhdGVkIGZvciBieSAnb3ItaW5nJyBpbiB0aGUgSU5FWDIgZmxhZyB0bwkjCisjCQl0aGUgbHNiIG9mIFkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTExLglSZXN0b3JlIG9yaWdpbmFsIEZQQ1I7IHNldCBzaXplIGV4dC4JCQkjCisjCQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4JIworIwkJS2VlcCB0aGUgc2l6ZSB0byBleHRlbmRlZC4JCQkJIworIwkJCQkJCQkJCSMKKyMJQTEyLglDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZwkjCisjCQltb2RlLiAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQJIworIwkJaXMgaW4gZnAwLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMy4JQ2hlY2sgZm9yIExFTiBkaWdpdHMuCQkJCQkjCisjCQlJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAkjCisjCQlvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCSMKKyMJCUE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCSMKKyMJCXJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQkjCisjCQl0aGUgbWFudGlzc2EgYnkgMTAuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTQuCUNvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4JCQkJIworIwkJVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0CSMKKyMJCW1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCSMKKyMJCXRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCSMKKyMJCXN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCSMKKyMJCVRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4JIworIwkJdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4JCQkjCisjCQkJCQkJCQkJIworIwlBMTUuCUNvbnZlcnQgdGhlIGV4cG9uZW50IHRvIGJjZC4JCQkJIworIwkJQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQkjCisjCQlkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgkJCSMKKyMJCVRlc3QgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgZXhwb25lbnQgc3RyaW5nLiAgSWYgdGhlCSMKKyMJCWxlbmd0aCBpcyA0LCBzZXQgb3BlcnIuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTYuCVdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CUJJTkRFQ19GTEcsCUVYQ19URU1QCSMgREVOT1JNIGZsYWcKKworIyBDb25zdGFudHMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCitQTE9HMjoKKwlsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OCwweDAwMDAwMDAwCitQTE9HMlVQMToKKwlsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OSwweDAwMDAwMDAwCisKKyMgQ29uc3RhbnRzIGluIHNpbmdsZSBwcmVjaXNpb24KK0ZPTkU6CisJbG9uZwkJMHgzRjgwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorRlRXTzoKKwlsb25nCQkweDQwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVEVOOgorCWxvbmcJCTB4NDEyMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0Y0OTMzOgorCWxvbmcJCTB4NDU5QTI4MDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworUkJEVEJMOgorCWJ5dGUJCTAsMCwwLDAKKwlieXRlCQkzLDMsMiwyCisJYnl0ZQkJMywyLDIsMworCWJ5dGUJCTIsMywzLDIKKworIwlJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyMKKyMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgorIworIwkJZDA6IHNjcmF0Y2g7IExFTiBpbnB1dCB0byBiaW5zdHIKKyMJCWQxOiBzY3JhdGNoCisjCQlkMjogdXBwZXIgMzItYml0cyBvZiBtYW50aXNzYSBmb3IgYmluc3RyCisjCQlkMzogc2NyYXRjaDtsb3dlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKKyMJCWQ0OiBMRU4KKyMJCWQ1OiBMQU1CREEvSUNUUgorIwkJZDY6IElMT0cKKyMJCWQ3OiBrLWZhY3RvcgorIwkJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJCWExOiBzY3JhdGNoIHBvaW50ZXIKKyMJCWEyOiBwb2ludGVyIHRvIEZQX1g7IGFicyhvcmlnaW5hbCB2YWx1ZSkgaW4gZXh0CisjCQlmcDA6IHNjcmF0Y2gKKyMJCWZwMTogc2NyYXRjaAorIwkJZnAyOiBzY3JhdGNoCisjCQlGX1NDUjE6CisjCQlGX1NDUjI6CisjCQlMX1NDUjE6CisjCQlMX1NDUjI6CisKKwlnbG9iYWwJCWJpbmRlYworYmluZGVjOgorCW1vdm0ubAkJJjB4M2YyMCwtKCVzcCkJIyAgeyVkMi0lZDcvJWEyfQorCWZtb3ZtLngJCSYweDcsLSglc3ApCSMgIHslZnAwLSVmcDJ9CisKKyMgQTEuIFNldCBSTSBhbmQgc2l6ZSBleHQuIFNldCBTSUdNQSA9IHNpZ24gaW5wdXQ7CisjICAgICBUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gIENsZWFyIEJJTkRFQ19GTEcgZm9yCisjICAgICBzZXBhcmF0aW5nICBub3JtYWxpemVkL2Rlbm9ybWFsaXplZCBpbnB1dC4gIElmIHRoZSBpbnB1dAorIyAgICAgaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLCBzZXQgdGhlIEJJTkRFQ19GTEcgbWVtb3J5IHdvcmQKKyMgICAgIHRvIHNpZ25hbCBkZW5vcm0uICBJZiB0aGUgaW5wdXQgaXMgdW5ub3JtYWxpemVkLCBub3JtYWxpemUKKyMgICAgIHRoZSBpbnB1dCBhbmQgdGVzdCBmb3IgZGVub3JtYWxpemVkIHJlc3VsdC4KKyMKKwlmbW92LmwJCSZybV9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUk0gYW5kIGV4dAorCW1vdi5sCQkoJWEwKSxMX1NDUjIoJWE2KQkjIHNhdmUgZXhwb25lbnQgZm9yIHNpZ24gY2hlY2sKKwltb3YubAkJJWQwLCVkNwkJIyBtb3ZlIGstZmFjdG9yIHRvIGQ3CisKKwljbHIuYgkJQklOREVDX0ZMRyglYTYpCSMgY2xyIG5vcm0vZGVub3JtIGZsYWcKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNICMgaXMgaW5wdXQgYSBERU5PUk0/CisJYm5lLncJCUEyX3N0cgkJIyBubzsgaW5wdXQgaXMgYSBOT1JNCisKKyMKKyMgTm9ybWFsaXplIHRoZSBkZW5vcm0KKyMKK3VuX2RlX25vcm06CisJbW92LncJCSglYTApLCVkMAorCWFuZC53CQkmMHg3ZmZmLCVkMAkjIHN0cmlwIHNpZ24gb2Ygbm9ybWFsaXplZCBleHAKKwltb3YubAkJNCglYTApLCVkMQorCW1vdi5sCQk4KCVhMCksJWQyCitub3JtX2xvb3A6CisJc3ViLncJCSYxLCVkMAorCWxzbC5sCQkmMSwlZDIKKwlyb3hsLmwJCSYxLCVkMQorCXRzdC5sCQklZDEKKwliZ2UuYgkJbm9ybV9sb29wCisjCisjIFRlc3QgaWYgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgaXMgZGVub3JtYWxpemVkCisjCisJdHN0LncJCSVkMAorCWJndC5iCQlwb3NfZXhwCQkjIGlmIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCBpcyBhIG5vcm0KKwlzdAkJQklOREVDX0ZMRyglYTYpCSMgc2V0IGZsYWcgZm9yIGRlbm9ybQorcG9zX2V4cDoKKwlhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92LncJCSVkMCwoJWEwKQorCW1vdi5sCQklZDEsNCglYTApCisJbW92LmwJCSVkMiw4KCVhMCkKKworIyBBMi4gU2V0IFggPSBhYnMoaW5wdXQpLgorIworQTJfc3RyOgorCW1vdi5sCQkoJWEwKSxGUF9TQ1IxKCVhNikJIyBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3YubAkJNCglYTApLEZQX1NDUjErNCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCisJbW92LmwJCTgoJWEwKSxGUF9TQ1IxKzgoJWE2KQkjIG1vdmUgaW5wdXQgdG8gd29yayBzcGFjZQorCWFuZC5sCQkmMHg3ZmZmZmZmZixGUF9TQ1IxKCVhNikJIyBjcmVhdGUgYWJzKFgpCisKKyMgQTMuIENvbXB1dGUgSUxPRy4KKyMgICAgIElMT0cgaXMgdGhlIGxvZyBiYXNlIDEwIG9mIHRoZSBpbnB1dCB2YWx1ZS4gIEl0IGlzIGFwcHJveC0KKyMgICAgIGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyB2aWV3ZWQKKyMgICAgIGFzIDJeXmUgKiAxLmYgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLiAgVGhpcyB2YWx1ZSBpcyBzdG9yZWQKKyMgICAgIGluIGQ2LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBrLWZhY3Rvci9leHBvbmVudAorIwlkMjogeC94CisjCWQzOiB4L3gKKyMJZDQ6IHgveAorIwlkNTogeC94CisjCWQ2OiB4L0lMT0cKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogeC94CisjCWEyOiB4L3gKKyMJZnAwOiB4L2Zsb2F0KElMT0cpCisjCWZwMTogeC94CisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKS9BYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEuYgkJQTNfY29udAkJIyBpZiBjbHIsIGNvbnRpbnVlIHdpdGggbm9ybQorCW1vdi5sCQkmLTQ5MzMsJWQ2CSMgZm9yY2UgSUxPRyA9IC00OTMzCisJYnJhLmIJCUE0X3N0cgorQTNfY29udDoKKwltb3YudwkJRlBfU0NSMSglYTYpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCisJbW92LncJCSYweDNmZmYsRlBfU0NSMSglYTYpCSMgcmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgorCWZtb3YueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBub3cgZnAwIGhhcyAxLmYKKwlzdWIudwkJJjB4M2ZmZiwlZDAJIyBzdHJpcCBvZmYgYmlhcworCWZhZGQudwkJJWQwLCVmcDAJIyBhZGQgaW4gZXhwCisJZnN1Yi5zCQlGT05FKCVwYyksJWZwMAkjIHN1YnRyYWN0IG9mZiAxLjAKKwlmYmdlLncJCXBvc19yZXMJCSMgaWYgcG9zLCBicmFuY2gKKwlmbXVsLngJCVBMT0cyVVAxKCVwYyksJWZwMAkjIGlmIG5lZywgbXVsIGJ5IExPRzJVUDEKKwlmbW92LmwJCSVmcDAsJWQ2CSMgcHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCWJyYS5iCQlBNF9zdHIJCSMgZ28gbW92ZSBvdXQgSUxPRworcG9zX3JlczoKKwlmbXVsLngJCVBMT0cyKCVwYyksJWZwMAkjIGlmIHBvcywgbXVsIGJ5IExPRzIKKwlmbW92LmwJCSVmcDAsJWQ2CSMgcHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCisKKyMgQTQuIENsciBJTkVYIGJpdC4KKyMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorCitBNF9zdHI6CisJZm1vdi5sCQkmMCwlZnBzcgkjIHplcm8gYWxsIG9mIGZwc3IgLSBub3RoaW5nIG5lZWRlZAorCisKKyMgQTUuIFNldCBJQ1RSID0gMDsKKyMgICAgIElDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQorIyAgICAgbG9vcCBlbnRyeSBBNi4gVGhlIGxvd2VyIHdvcmQgb2YgZDUgaXMgdXNlZCBmb3IgSUNUUi4KKworCWNsci53CQklZDUJCSMgY2xlYXIgSUNUUgorCisjIEE2LiBDYWxjdWxhdGUgTEVOLgorIyAgICAgTEVOIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGJlIGRpc3BsYXllZC4gIFRoZSBrLWZhY3RvcgorIyAgICAgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLCBpZiBpdCBpcworIyAgICAgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQorIyAgICAgb3JpZ2luYWwgZGVjaW1hbCBwb2ludCB3aGljaCBhcmUgdG8gYmUgaW5jbHVkZWQgYXMKKyMgICAgIHNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgorIyAgICAgSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCisjICAgICBVU0VSX0ZQU1IuICBMRU4gaXMgc3RvcmVkIGluIGQ0LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBleHBvbmVudC9VbmNoYW5nZWQKKyMJZDI6IHgveC9zY3JhdGNoCisjCWQzOiB4L3gKKyMJZDQ6IGV4YyBwaWN0dXJlL0xFTgorIwlkNTogSUNUUi9VbmNoYW5nZWQKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHgveAorIwlhMjogeC94CisjCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCisjCWZwMTogeC94CisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBNl9zdHI6CisJdHN0LmwJCSVkNwkJIyBicmFuY2ggb24gc2lnbiBvZiBrCisJYmxlLmIJCWtfbmVnCQkjIGlmIGsgPD0gMCwgTEVOID0gSUxPRyArIDEgLSBrCisJbW92LmwJCSVkNywlZDQJCSMgaWYgayA+IDAsIExFTiA9IGsKKwlicmEuYgkJbGVuX2NrCQkjIHNraXAgdG8gTEVOIGNoZWNrCitrX25lZzoKKwltb3YubAkJJWQ2LCVkNAkJIyBmaXJzdCBsb2FkIElMT0cgdG8gZDQKKwlzdWIubAkJJWQ3LCVkNAkJIyBzdWJ0cmFjdCBvZmYgaworCWFkZHEubAkJJjEsJWQ0CQkjIGFkZCBpbiB0aGUgMQorbGVuX2NrOgorCXRzdC5sCQklZDQJCSMgTEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KKwlibGUuYgkJTEVOX25nCQkjIGlmIG5lZywgc2V0IExFTiA9IDEKKwljbXAubAkJJWQ0LCYxNwkJIyB0ZXN0IGlmIExFTiA+IDE3CisJYmxlLmIJCUE3X3N0cgkJIyBpZiBub3QsIGZvcmdldCBpdAorCW1vdi5sCQkmMTcsJWQ0CQkjIHNldCBtYXggTEVOID0gMTcKKwl0c3QubAkJJWQ3CQkjIGlmIG5lZ2F0aXZlLCBuZXZlciBzZXQgT1BFUlIKKwlibGUuYgkJQTdfc3RyCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQorCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKKwlicmEuYgkJQTdfc3RyCQkjIGZpbmlzaGVkIGhlcmUKK0xFTl9uZzoKKwltb3YubAkJJjEsJWQ0CQkjIG1pbiBMRU4gaXMgMQorCisKKyMgQTcuIENhbGN1bGF0ZSBTQ0FMRS4KKyMgICAgIFNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIKKyMgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCisjICAgICBpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZSBzaWduCisjICAgICBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuICBGcDEgY29udGFpbnMgMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcKKyMgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQorIyAgICAgQ29vbmVuLCBwLiA3LjIzIGFzIHJlZi47IGhvd2V2ZXIsIHRoZSBTQ0FMRSB2YXJpYWJsZSBpcworIyAgICAgb2Ygb3Bwb3NpdGUgc2lnbiBpbiBiaW5kZWMuc2EgZnJvbSBDb29uZW4pLgorIworIwlJbml0aWFsCQkJCQlVU0UKKyMJRlBDUls2OjVdCUxBTUJEQQlTSUdOKFgpCQlGUENSWzY6NV0KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkgUk4JMDAJICAgMAkgICAwCQkwMC8wCVJOCisjCSBSTgkwMAkgICAwCSAgIDEJCTAwLzAJUk4KKyMJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgorIwkgUk4JMDAJICAgMQkgICAxCQkwMC8wCVJOCisjCSBSWgkwMQkgICAwCSAgIDAJCTExLzMJUlAKKyMJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAorIwkgUloJMDEJICAgMQkgICAwCQkxMC8yCVJNCisjCSBSWgkwMQkgICAxCSAgIDEJCTEwLzIJUk0KKyMJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAorIwkgUk0JMTAJICAgMAkgICAxCQkxMC8yCVJNCisjCSBSTQkxMAkgICAxCSAgIDAJCTEwLzIJUk0KKyMJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAorIwkgUlAJMTEJICAgMAkgICAwCQkxMC8yCVJNCisjCSBSUAkxMQkgICAwCSAgIDEJCTExLzMJUlAKKyMJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAorIwkgUlAJMTEJICAgMQkgICAxCQkxMC8yCVJNCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IGV4cG9uZW50L3NjcmF0Y2ggLSBmaW5hbCBpcyAwCisjCWQyOiB4LzAgb3IgMjQgZm9yIEE5CisjCWQzOiB4L3NjcmF0Y2ggLSBvZmZzZXQgcHRyIGludG8gUFRFTlJNIGFycmF5CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiAwL0lDVFI6TEFNQkRBCisjCWQ2OiBJTE9HL0lMT0cgb3IgayBpZiAoKGs8PTApJihJTE9HPGspKQorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiB4L3B0ciB0byBQVEVOUk0gYXJyYXkKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IHgvMTBeSVNDQUxFCisjCWZwMjogeC94CisjCUZfU0NSMTp4L3gKKyMJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6eC94CisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBN19zdHI6CisJdHN0LmwJCSVkNwkJIyB0ZXN0IHNpZ24gb2YgaworCWJndC5iCQlrX3BvcwkJIyBpZiBwb3MgYW5kID4gMCwgc2tpcCB0aGlzCisJY21wLmwJCSVkNywlZDYJCSMgdGVzdCBrIC0gSUxPRworCWJsdC5iCQlrX3BvcwkJIyBpZiBJTE9HID49IGssIHNraXAgdGhpcworCW1vdi5sCQklZDcsJWQ2CQkjIGlmICgoazwwKSAmIChJTE9HIDwgaykpIElMT0cgPSBrCitrX3BvczoKKwltb3YubAkJJWQ2LCVkMAkJIyBjYWxjIElMT0cgKyAxIC0gTEVOIGluIGQwCisJYWRkcS5sCQkmMSwlZDAJCSMgYWRkIHRoZSAxCisJc3ViLmwJCSVkNCwlZDAJCSMgc3ViIG9mZiBMRU4KKwlzd2FwCQklZDUJCSMgdXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQorCWNsci53CQklZDUJCSMgc2V0IGl0IHplcm8gaW5pdGlhbGx5CisJY2xyLncJCSVkMgkJIyBzZXQgdXAgZDIgZm9yIHZlcnkgc21hbGwgY2FzZQorCXRzdC5sCQklZDAJCSMgdGVzdCBzaWduIG9mIElTQ0FMRQorCWJnZS5iCQlpc2NhbGUJCSMgaWYgcG9zLCBza2lwIG5leHQgaW5zdAorCWFkZHEudwkJJjEsJWQ1CQkjIGlmIG5lZywgc2V0IExBTUJEQSB0cnVlCisJY21wLmwJCSVkMCwmMHhmZmZmZWNkNAkjIHRlc3QgaXNjYWxlIDw9IC00OTA4CisJYmd0LmIJCW5vX2luZgkJIyBpZiBmYWxzZSwgc2tpcCByZXN0CisJYWRkLmwJCSYyNCwlZDAJCSMgYWRkIGluIDI0IHRvIGlzY2FsZQorCW1vdi5sCQkmMjQsJWQyCQkjIHB1dCAyNCBpbiBkMiBmb3IgQTkKK25vX2luZjoKKwluZWcubAkJJWQwCQkjIGFuZCB0YWtlIGFicyBvZiBJU0NBTEUKK2lzY2FsZToKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAxCSMgaW5pdCBmcDEgdG8gMQorCWJmZXh0dQkJVVNFUl9GUENSKCVhNil7JjI2OiYyfSwlZDEJIyBnZXQgaW5pdGlhbCBybW9kZSBiaXRzCisJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDI6MQorCWFkZC53CQklZDUsJWQxCQkjIGFkZCBpbiBMQU1CREEKKwlsc2wudwkJJjEsJWQxCQkjIHB1dCB0aGVtIGluIGJpdHMgMzoxCisJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIHgKKwliZ2UuYgkJeF9wb3MJCSMgaWYgcG9zLCBkb24ndCBzZXQgYml0IDAKKwlhZGRxLmwJCSYxLCVkMQkJIyBpZiBuZWcsIHNldCBiaXQgMAoreF9wb3M6CisJbGVhLmwJCVJCRFRCTCglcGMpLCVhMgkjIGxvYWQgcmJkdGJsIGJhc2UKKwltb3YuYgkJKCVhMiwlZDEpLCVkMwkjIGxvYWQgZDMgd2l0aCBuZXcgcm1vZGUKKwlsc2wubAkJJjQsJWQzCQkjIHB1dCBiaXRzIGluIHByb3BlciBwb3NpdGlvbgorCWZtb3YubAkJJWQzLCVmcGNyCSMgbG9hZCBiaXRzIGludG8gZnB1CisJbHNyLmwJCSY0LCVkMwkJIyBwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwl0c3QuYgkJJWQzCQkjIGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKKwlibmUuYgkJbm90X3JuCQkjIGlmIHplcm8sIGl0IGlzIFJOCisJbGVhLmwJCVBURU5STiglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSTiB0YWJsZSBiYXNlCisJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCitub3Rfcm46CisJbHNyLmIJCSYxLCVkMwkJIyBnZXQgbHNiIGluIGNhcnJ5CisJYmNjLmIJCW5vdF9ycDIJCSMgaWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCisJbGVhLmwJCVBURU5SUCglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSUCB0YWJsZSBiYXNlCisJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCitub3RfcnAyOgorCWxlYS5sCQlQVEVOUk0oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk0gdGFibGUgYmFzZQorcm1vZGU6CisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK2VfbG9vcDI6CisJbHNyLmwJCSYxLCVkMAkJIyBzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjLmIJCWVfbmV4dDIJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDI6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIElTQ0FMRSBpcyB6ZXJvCisJYm5lLmIJCWVfbG9vcDIJCSMgaWYgbm90LCBsb29wCisKKyMgQTguIENsciBJTkVYOyBGb3JjZSBSWi4KKyMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorIyAgICAgUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUKKyMgICAgIG9ubHkgb25lIHJvdW5kaW5nIGVycm9yLiAgVGhlIGdycyBiaXRzIGFyZSBjb2xsZWN0ZWQgaW4KKyMgICAgIHRoZSBJTkVYIGZsYWcgZm9yIHVzZSBpbiBBMTAuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKworCWZtb3YubAkJJjAsJWZwc3IJIyBjbHIgSU5FWAorCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBSWiByb3VuZGluZyBtb2RlCisKKyMgQTkuIFNjYWxlIFggLT4gWS4KKyMgICAgIFRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNpZ25pZmljYW50CisjICAgICBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkIGluIElORVgyLiBJZiBtdWwsCisjICAgICBDaGVjayBkMiBmb3IgZXhjZXNzIDEwIGV4cG9uZW50aWFsIHZhbHVlLiAgSWYgbm90IHplcm8sCisjICAgICB0aGUgaXNjYWxlIHZhbHVlIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBwd3J0ZW4gY2FsY3VsYXRpb24KKyMgICAgIHRvIG92ZXJmbG93LiAgT25seSBhIG5lZ2F0aXZlIGlzY2FsZSBjYW4gY2F1c2UgdGhpcywgc28KKyMgICAgIG11bHRpcGx5IGJ5IDEwXihkMiksIHdoaWNoIGlzIG5vdyBvbmx5IGFsbG93ZWQgdG8gYmUgMjQsCisjICAgICB3aXRoIGEgbXVsdGlwbHkgYnkgMTBeOCBhbmQgMTBeMTYsIHdoaWNoIGlzIGV4YWN0IHNpbmNlCisjICAgICAxMF4yNCBpcyBleGFjdC4gIElmIHRoZSBpbnB1dCB3YXMgZGVub3JtYWxpemVkLCB3ZSBtdXN0CisjICAgICBjcmVhdGUgYSBidXN5IHN0YWNrIGZyYW1lIHdpdGggdGhlIG11bCBjb21tYW5kIGFuZCB0aGUKKyMgICAgIHR3byBvcGVyYW5kcywgYW5kIGFsbG93IHRoZSBmcHUgdG8gY29tcGxldGUgdGhlIG11bHRpcGx5LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUENSIHdpdGggUlogbW9kZS9VbmNoYW5nZWQKKyMJZDI6IDAgb3IgMjQvdW5jaGFuZ2VkCisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBCisjCWQ2OiBJTE9HL1VuY2hhbmdlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiBwdHIgdG8gUFRFTlJNIGFycmF5L1VuY2hhbmdlZAorIwlhMjogeC94CisjCWZwMDogZmxvYXQoSUxPRykvWCBhZGp1c3RlZCBmb3IgU0NBTEUgKFkpCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTlfc3RyOgorCWZtb3YueAkJKCVhMCksJWZwMAkjIGxvYWQgWCBmcm9tIG1lbW9yeQorCWZhYnMueAkJJWZwMAkJIyB1c2UgYWJzKFgpCisJdHN0LncJCSVkNQkJIyBMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQorCWJuZS5iCQlzY19tdWwJCSMgaWYgbmVnIChMQU1CREEgPSAxKSwgc2NhbGUgYnkgbXVsCisJZmRpdi54CQklZnAxLCVmcDAJIyBjYWxjdWxhdGUgWCAvIFNDQUxFIC0+IFkgdG8gZnAwCisJYnJhLncJCUExMF9zdAkJIyBicmFuY2ggdG8gQTEwCisKK3NjX211bDoKKwl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQorCWJlcS53CQlBOV9ub3JtCQkjIGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggbXVsCisKKyMgZm9yIERFTk9STSwgd2UgbXVzdCBjYWxjdWxhdGU6CisjCWZwMCA9IGlucHV0X29wICogMTBeSVNDQUxFICogMTBeMjQKKyMgc2luY2UgdGhlIGlucHV0IG9wZXJhbmQgaXMgYSBERU5PUk0sIHdlIGNhbid0IG11bHRpcGx5IGl0IGRpcmVjdGx5LgorIyBzbywgd2UgZG8gdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBleHBvbmVudHMgYW5kIG1hbnRpc3NhcyBzZXBhcmF0ZWx5LgorIyBpbiB0aGlzIHdheSwgd2UgYXZvaWQgdW5kZXJmbG93IG9uIGludGVybWVkaWF0ZSBzdGFnZXMgb2YgdGhlCisjIG11bHRpcGxpY2F0aW9uIGFuZCBndWFyYW50ZWUgYSByZXN1bHQgd2l0aG91dCBleGNlcHRpb24uCisJZm1vdm0ueAkJJjB4MiwtKCVzcCkJIyBzYXZlIDEwXklTQ0FMRSB0byBzdGFjaworCisJbW92LncJCSglc3ApLCVkMwkjIGdyYWIgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQzCSMgY2xlYXIgc2lnbgorCW9yaS53CQkmMHg4MDAwLCglYTApCSMgbWFrZSBERU5PUk0gZXhwIG5lZ2F0aXZlCisJYWRkLncJCSglYTApLCVkMwkjIGFkZCBERU5PUk0gZXhwIHRvIDEwXklTQ0FMRSBleHAKKwlzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUworCWFkZC53CQkzNiglYTEpLCVkMworCXN1YmkudwkJJjB4M2ZmZiwlZDMJIyBzdWJ0cmFjdCBCSUFTCisJYWRkLncJCTQ4KCVhMSksJWQzCisJc3ViaS53CQkmMHgzZmZmLCVkMwkjIHN1YnRyYWN0IEJJQVMKKworCWJtaS53CQlzY19tdWxfZXJyCSMgaXMgcmVzdWx0IGlzIERFTk9STSwgcHVudCEhIQorCisJYW5kaS53CQkmMHg4MDAwLCglc3ApCSMga2VlcCBzaWduCisJb3IudwkJJWQzLCglc3ApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwoJWEwKQkjIGNsZWFyIHNpZ24gYml0IG9uIERFTk9STSBhZ2FpbgorCW1vdi5sCQkweDgoJWEwKSwtKCVzcCkgIyBwdXQgaW5wdXQgb3AgbWFudGlzc2Egb24gc3RrCisJbW92LmwJCTB4NCglYTApLC0oJXNwKQorCW1vdi5sCQkmMHgzZmZmMDAwMCwtKCVzcCkgIyBmb3JjZSBleHAgdG8gemVybworCWZtb3ZtLngJCSglc3ApKywmMHg4MAkjIGxvYWQgbm9ybWFsaXplZCBERU5PUk0gaW50byBmcDAKKwlmbXVsLngJCSglc3ApKywlZnAwCisKKyMJZm11bC54CTM2KCVhMSksJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF44CisjCWZtdWwueAk0OCglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeMTYKKwltb3YubAkJMzYrOCglYTEpLC0oJXNwKSAjIGdldCAxMF44IG1hbnRpc3NhCisJbW92LmwJCTM2KzQoJWExKSwtKCVzcCkKKwltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KKwltb3YubAkJNDgrOCglYTEpLC0oJXNwKSAjIGdldCAxMF4xNiBtYW50aXNzYQorCW1vdi5sCQk0OCs0KCVhMSksLSglc3ApCisJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSMgZm9yY2UgZXhwIHRvIHplcm8KKwlmbXVsLngJCSglc3ApKywlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVsLngJCSglc3ApKywlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CisJYnJhLmIJCUExMF9zdAorCitzY19tdWxfZXJyOgorCWJyYS5iCQlzY19tdWxfZXJyCisKK0E5X25vcm06CisJdHN0LncJCSVkMgkJIyB0ZXN0IGZvciBzbWFsbCBleHAgY2FzZQorCWJlcS5iCQlBOV9jb24JCSMgaWYgemVybywgY29udGludWUgYXMgbm9ybWFsCisJZm11bC54CQkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAorCWZtdWwueAkJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CitBOV9jb246CisJZm11bC54CQklZnAxLCVmcDAJIyBjYWxjdWxhdGUgWCAqIFNDQUxFIC0+IFkgdG8gZnAwCisKKyMgQTEwLiBPciBpbiBJTkVYLgorIyAgICAgIElmIElORVggaXMgc2V0LCByb3VuZCBlcnJvciBvY2N1cnJlZC4gIFRoaXMgaXMgY29tcGVuc2F0ZWQKKyMgICAgICBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8gdGhlIGxzYiBvZiBZLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUENSIHdpdGggUlogbW9kZS9GUFNSIHdpdGggSU5FWDIgaXNvbGF0ZWQKKyMJZDI6IHgveAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHgvcHRyIHRvIEZQX1NDUjEoYTYpCisjCWZwMDogWS9ZIHdpdGggbHNiIGFkanVzdGVkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorCitBMTBfc3Q6CisJZm1vdi5sCQklZnBzciwlZDAJIyBnZXQgRlBTUgorCWZtb3YueAkJJWZwMCxGUF9TQ1IxKCVhNikJIyBtb3ZlIFkgdG8gbWVtb3J5CisJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTIJIyBsb2FkIGEyIHdpdGggcHRyIHRvIEZQX1NDUjEKKwlidHN0CQkmOSwlZDAJCSMgY2hlY2sgaWYgSU5FWDIgc2V0CisJYmVxLmIJCUExMV9zdAkJIyBpZiBjbGVhciwgc2tpcCByZXN0CisJb3IubAkJJjEsOCglYTIpCSMgb3IgaW4gMSB0byBsc2Igb2YgbWFudGlzc2EKKwlmbW92LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgd3JpdGUgYWRqdXN0ZWQgWSBiYWNrIHRvIGZwdQorCisKKyMgQTExLiBSZXN0b3JlIG9yaWdpbmFsIEZQQ1I7IHNldCBzaXplIGV4dC4KKyMgICAgICBQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4gIEtlZXAKKyMgICAgICB0aGUgc2l6ZSB0byBleHRlbmRlZC4gIFRoZSBzaW50ZG8gZW50cnkgcG9pbnQgaW4gdGhlIHNpbnQKKyMgICAgICByb3V0aW5lIGV4cGVjdHMgdGhlIEZQQ1IgdmFsdWUgdG8gYmUgaW4gVVNFUl9GUENSIGZvcgorIyAgICAgIG1vZGUgYW5kIHByZWNpc2lvbi4gIFRoZSBvcmlnaW5hbCBGUENSIGlzIHNhdmVkIGluIExfU0NSMS4KKworQTExX3N0OgorCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSxMX1NDUjEoJWE2KQkjIHNhdmUgaXQgZm9yIGxhdGVyCisJYW5kLmwJCSYweDAwMDAwMDMwLFVTRVJfRlBDUiglYTYpCSMgc2V0IHNpemUgdG8gZXh0LAorIwkJCQkJO2Jsb2NrIGV4Y2VwdGlvbnMKKworCisjIEExMi4gQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4KKyMgICAgICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dCBpcyBpbiBmcDAuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IEZQU1Igd2l0aCBBSU5FWCBjbGVhcmVkL0ZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQKKyMJZDI6IHgveC9zY3JhdGNoCisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL1VuY2hhbmdlZAorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL3NyYyBwdHIgZm9yIHNpbnRkbworIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJYTY6IHRlbXAgcG9pbnRlciB0byBGUF9TQ1IxKGE2KSAtIG9yaWcgdmFsdWUgc2F2ZWQgYW5kIHJlc3RvcmVkCisjCWZwMDogWS9ZSU5UCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpZIGFkanVzdGVkIGZvciBpbmV4L1kgd2l0aCBvcmlnaW5hbCBleHBvbmVudAorIwlMX1NDUjE6eC9vcmlnaW5hbCBVU0VSX0ZQQ1IKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExMl9zdDoKKwltb3ZtLmwJJjB4YzBjMCwtKCVzcCkJIyBzYXZlIHJlZ3MgdXNlZCBieSBzaW50ZDAJIHslZDAtJWQxLyVhMC0lYTF9CisJbW92LmwJTF9TQ1IxKCVhNiksLSglc3ApCisJbW92LmwJTF9TQ1IyKCVhNiksLSglc3ApCisKKwlsZWEubAkJRlBfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBGUF9TQ1IxKGE2KQorCWZtb3YueAkJJWZwMCwoJWEwKQkjIG1vdmUgWSB0byBtZW1vcnkgYXQgRlBfU0NSMShhNikKKwl0c3QubAkJTF9TQ1IyKCVhNikJIyB0ZXN0IHNpZ24gb2Ygb3JpZ2luYWwgb3BlcmFuZAorCWJnZS5iCQlkb19maW50MTIJCSMgaWYgcG9zLCB1c2UgWQorCW9yLmwJCSYweDgwMDAwMDAwLCglYTApCSMgaWYgbmVnLCB1c2UgLVkKK2RvX2ZpbnQxMjoKKwltb3YubAlVU0VSX0ZQU1IoJWE2KSwtKCVzcCkKKyMJYnNyCXNpbnRkbwkJIyBzaW50IHJvdXRpbmUgcmV0dXJucyBpbnQgaW4gZnAwCisKKwlmbW92LmwJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92LmwJJjB4MCwlZnBzcgkJCSMgY2xlYXIgdGhlIEFFWEMgYml0cyEhIQorIyMJbW92LmwJCVVTRVJfRlBDUiglYTYpLCVkMAkjIGV4dCBwcmVjL2tlZXAgcm5kIG1vZGUKKyMjCWFuZGkubAkJJjB4MDAwMDAwMzAsJWQwCisjIwlmbW92LmwJCSVkMCwlZnBjcgorCWZpbnQueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBkbyBmaW50KCkKKwlmbW92LmwJJWZwc3IsJWQwCisJb3IudwklZDAsRlBTUl9FWENFUFQoJWE2KQorIyMJZm1vdi5sCQkmMHgwLCVmcGNyCisjIwlmbW92LmwJCSVmcHNyLCVkMAkJIyBkb24ndCBrZWVwIGNjb2RlcworIyMJb3IudwkJJWQwLEZQU1JfRVhDRVBUKCVhNikKKworCW1vdi5iCSglc3ApLFVTRVJfRlBTUiglYTYpCisJYWRkLmwJJjQsJXNwCisKKwltb3YubAkoJXNwKSssTF9TQ1IyKCVhNikKKwltb3YubAkoJXNwKSssTF9TQ1IxKCVhNikKKwltb3ZtLmwJKCVzcCkrLCYweDMwMwkjIHJlc3RvcmUgcmVncyB1c2VkIGJ5IHNpbnQJIHslZDAtJWQxLyVhMC0lYTF9CisKKwltb3YubAlMX1NDUjIoJWE2KSxGUF9TQ1IxKCVhNikJIyByZXN0b3JlIG9yaWdpbmFsIGV4cG9uZW50CisJbW92LmwJTF9TQ1IxKCVhNiksVVNFUl9GUENSKCVhNikJIyByZXN0b3JlIHVzZXIncyBGUENSCisKKyMgQTEzLiBDaGVjayBmb3IgTEVOIGRpZ2l0cy4KKyMgICAgICBJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAorIyAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KKyMgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQorIyAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQorIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90CisjICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKKyMgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KKyMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KKyMKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIHNpemUgc2V0IHRvIGV4dC9zY3JhdGNoIGZpbmFsID0gMAorIwlkMjogeC94CisjCWQzOiB4L3NjcmF0Y2ggZmluYWwgPSB4CisjCWQ0OiBMRU4vTEVOIGFkanVzdGVkCisjCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorIwlkNjogSUxPRy9JTE9HIGFkanVzdGVkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4LzEwXkxFTgorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCisjCUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTNfc3Q6CisJc3dhcAkJJWQ1CQkjIHB1dCBJQ1RSIGluIGxvd2VyIHdvcmQgb2YgZDUKKwl0c3QudwkJJWQ1CQkjIGNoZWNrIGlmIElDVFIgPSAwCisJYm5lCQlub3RfenIJCSMgaWYgbm9uLXplcm8sIGdvIHRvIHNlY29uZCB0ZXN0CisjCisjIENvbXB1dGUgMTBeKExFTi0xKQorIworCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCisJc3VicS5sCQkmMSwlZDAJCSMgZDAgPSBMRU4gLTEKKwljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAorbF9sb29wOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQlsX25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMgkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2xfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3QubAkJJWQwCQkjIHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmUuYgkJbF9sb29wCQkjIGlmIG5vdCwgbG9vcAorIworIyAxMF5MRU4tMSBpcyBjb21wdXRlZCBmb3IgdGhpcyB0ZXN0IGFuZCBBMTQuICBJZiB0aGUgaW5wdXQgd2FzCisjIGRlbm9ybWFsaXplZCwgY2hlY2sgb25seSB0aGUgY2FzZSBpbiB3aGljaCBZSU5UID4gMTBeTEVOLgorIworCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBpZiBpbnB1dCB3YXMgbm9ybQorCWJlcS5iCQlBMTNfY29uCQkjIGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggY2hlY2tpbmcKKwlmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAorCWJyYQkJdGVzdF8yCisjCisjIENvbXBhcmUgYWJzKFlJTlQpIHRvIDEwXihMRU4tMSkgYW5kIDEwXkxFTgorIworQTEzX2NvbjoKKwlmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAorCWZjbXAueAkJJWZwMCwlZnAyCSMgY29tcGFyZSBhYnMoWUlOVCkgd2l0aCAxMF4oTEVOLTEpCisJZmJnZS53CQl0ZXN0XzIJCSMgaWYgZ3JlYXRlciwgZG8gbmV4dCB0ZXN0CisJc3VicS5sCQkmMSwlZDYJCSMgc3VidHJhY3QgMSBmcm9tIElMT0cKKwltb3YudwkJJjEsJWQ1CQkjIHNldCBJQ1RSCisJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IHJtb2RlIHRvIFJNCisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCisJYnJhLncJCUE2X3N0cgkJIyByZXR1cm4gdG8gQTYgYW5kIHJlY29tcHV0ZSBZSU5UCit0ZXN0XzI6CisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCisJZmNtcC54CQklZnAwLCVmcDIJIyBjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXkxFTgorCWZibHQudwkJQTE0X3N0CQkjIGlmIGxlc3MsIGFsbCBpcyBvaywgZ28gdG8gQTE0CisJZmJndC53CQlmaXhfZXgJCSMgaWYgZ3JlYXRlciwgZml4IGFuZCByZWRvCisJZmRpdi5zCQlGVEVOKCVwYyksJWZwMAkjIGlmIGVxdWFsLCBkaXZpZGUgYnkgMTAKKwlhZGRxLmwJCSYxLCVkNgkJIyBhbmQgaW5jIElMT0cKKwlicmEuYgkJQTE0X3N0CQkjIGFuZCBjb250aW51ZSBlbHNld2hlcmUKK2ZpeF9leDoKKwlhZGRxLmwJCSYxLCVkNgkJIyBpbmNyZW1lbnQgSUxPRyBieSAxCisJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgorCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQorCWJyYS53CQlBNl9zdHIJCSMgcmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAorIworIyBTaW5jZSBJQ1RSIDw+IDAsIHdlIGhhdmUgYWxyZWFkeSBiZWVuIHRocm91Z2ggb25lIGFkanVzdG1lbnQsCisjIGFuZCBzaG91bGRuJ3QgaGF2ZSBhbm90aGVyOyB0aGlzIGlzIHRvIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgorIyAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCisjIHZhbHVlIGNhbGN1bGF0ZWQgY2Fubm90IGJlIGluZXhhY3QuCisjCitub3RfenI6CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMgkjIGluaXQgZnAyIHRvIDEuMAorCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAKKwljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAorel9sb29wOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQl6X25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMgkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK3pfbmV4dDoKKwlhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3QubAkJJWQwCQkjIHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmUuYgkJel9sb29wCQkjIGlmIG5vdCwgbG9vcAorCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzKFlJTlQpCisJZmNtcC54CQklZnAwLCVmcDIJIyBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KKwlmYm5lcS53CQlBMTRfc3QJCSMgaWYgbm90LCBza2lwIHRoaXMKKwlmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMAorCWFkZHEubAkJJjEsJWQ2CQkjIGFuZCBpbmMgSUxPRyBieSAxCisJYWRkcS5sCQkmMSwlZDQJCSMgYW5kIGluYyBMRU4KKwlmbXVsLnMJCUZURU4oJXBjKSwlZnAyCSMgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgorCisjIEExNC4gQ29udmVydCB0aGUgbWFudGlzc2EgdG8gYmNkLgorIyAgICAgIFRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAorIyAgICAgIG1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCisjICAgICAgdG8gYmUgYSBmcmFjdGlvbjsgaS5lLiAobWFudGlzc2EpLzEwXkxFTiBhbmQgYWRqdXN0ZWQKKyMgICAgICBzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgorIyAgICAgIFRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4KKyMgICAgICB0aGUgZmluYWwgc3RyaW5nIGFyZWEgaW4gbWVtb3J5LgorIworIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L0xFTiBjYWxsIHRvIGJpbnN0ciAtIGZpbmFsIGlzIDAKKyMJZDE6IHgvMAorIwlkMjogeC9tcyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCisjCWQzOiB4L2xzIDMyLWJpdHMgb2YgbWFudCBvZiBhYnMoWUlOVCkKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIwkgICAgL3B0ciB0byBmaXJzdCBtYW50aXNzYSBieXRlIGluIHJlc3VsdCBzdHJpbmcKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogaW50IHBvcnRpb24gb2YgWS9hYnMoWUlOVCkgYWRqdXN0ZWQKKyMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCisjCWZwMjogMTBeTEVOL1VuY2hhbmdlZAorIwlGX1NDUjE6eC9Xb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdAorIwlGX1NDUjI6WSB3aXRoIG9yaWdpbmFsIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE0X3N0OgorCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIGZvcmNlIHJ6IGZvciBjb252ZXJzaW9uCisJZmRpdi54CQklZnAyLCVmcDAJIyBkaXZpZGUgYWJzKFlJTlQpIGJ5IDEwXkxFTgorCWxlYS5sCQlGUF9TQ1IwKCVhNiksJWEwCisJZm1vdi54CQklZnAwLCglYTApCSMgbW92ZSBhYnMoWUlOVCkvMTBeTEVOIHRvIG1lbW9yeQorCW1vdi5sCQk0KCVhMCksJWQyCSMgbW92ZSAybmQgd29yZCBvZiBGUF9SRVMgdG8gZDIKKwltb3YubAkJOCglYTApLCVkMwkjIG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCisJY2xyLmwJCTQoJWEwKQkJIyB6ZXJvIHdvcmQgMiBvZiBGUF9SRVMKKwljbHIubAkJOCglYTApCQkjIHplcm8gd29yZCAzIG9mIEZQX1JFUworCW1vdi5sCQkoJWEwKSwlZDAJIyBtb3ZlIGV4cG9uZW50IHRvIGQwCisJc3dhcAkJJWQwCQkjIHB1dCBleHBvbmVudCBpbiBsb3dlciB3b3JkCisJYmVxLmIJCW5vX3NmdAkJIyBpZiB6ZXJvLCBkb24ndCBzaGlmdAorCXN1Yi5sCQkmMHgzZmZkLCVkMAkjIHN1YiBiaWFzIGxlc3MgMiB0byBtYWtlIGZyYWN0CisJdHN0LmwJCSVkMAkJIyBjaGVjayBpZiA+IDEKKwliZ3QuYgkJbm9fc2Z0CQkjIGlmIHNvLCBkb24ndCBzaGlmdAorCW5lZy5sCQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKK21fbG9vcDoKKwlsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0LCBhZGQgMHMKKwlyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZi53CQklZDAsbV9sb29wCSMgZ2l2ZW4gaW4gZDAKK25vX3NmdDoKKwl0c3QubAkJJWQyCQkjIGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCisJYm5lLmIJCW5vX3pyCQkjIGlmIG5vdCwgZ28gb24KKwl0c3QubAkJJWQzCQkjIGNvbnRpbnVlIHplcm8gY2hlY2sKKwliZXEuYgkJemVyX20JCSMgaWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCitub196cjoKKwljbHIubAkJJWQxCQkjIHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNworCWFkZHgubAkJJWQxLCVkMgkJIyBjb250aW51ZSBpbmMKKwlhbmQubAkJJjB4ZmZmZmZmODAsJWQzCSMgc3RyaXAgb2ZmIGxzYiBub3QgdXNlZCBieSA4ODIKK3plcl9tOgorCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJYWRkcS5sCQkmMywlYTAJCSMgYTAgcG9pbnRzIHRvIE0xNiBieXRlIGluIHJlc3VsdAorCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgbWFudAorCisKKyMgQTE1LiBDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCisjICAgICAgQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQorIyAgICAgIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBmaW5hbCBzdHJpbmcuCisjCisjICAgICAgRGlnaXRzIGFyZSBzdG9yZWQgaW4gTF9TQ1IxKGE2KSBvbiByZXR1cm4gZnJvbSBCSU5ERUMgYXM6CisjCisjCSAzMiAgICAgICAgICAgICAgIDE2IDE1ICAgICAgICAgICAgICAgIDAKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgMCB8IGUzIHwgZTIgfCBlMSB8IGU0IHwgIFggfCAgWCB8ICBYIHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQW5kIGFyZSBtb3ZlZCBpbnRvIHRoZWlyIHByb3BlciBwbGFjZXMgaW4gRlBfU0NSMC4gIElmIGRpZ2l0IGU0CisjIGlzIG5vbi16ZXJvLCBPUEVSUiBpcyBzaWduYWxlZC4gIEluIGFsbCBjYXNlcywgYWxsIDQgZGlnaXRzIGFyZQorIyB3cml0dGVuIGFzIHNwZWNpZmllZCBpbiB0aGUgODgxLzg4MiBtYW51YWwgZm9yIHBhY2tlZCBkZWNpbWFsLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L0xFTiBjYWxsIHRvIGJpbnN0ciAtIGZpbmFsIGlzIDAKKyMJZDE6IHgvc2NyYXRjaCAoMCk7c2hpZnQgY291bnQgZm9yIGZpbmFsIGV4cG9uZW50IHBhY2tpbmcKKyMJZDI6IHgvbXMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24vc2NyYXRjaAorIwlkMzogeC9scyAzMi1iaXRzIG9mIGV4cCBmcmFjdGlvbgorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIHRvIHJlc3VsdCBzdHJpbmcvcHRyIHRvIExfU0NSMShhNikKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogYWJzKFlJTlQpIGFkanVzdGVkL2Zsb2F0KElMT0cpCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOldvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0L0JDRCByZXN1bHQKKyMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9JTE9HLzEwXjQKKyMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9FeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTVfc3Q6CisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEuYgkJbm90X2Rlbm9ybQorCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybworCWZiZXEudwkJZGVuX3plcm8JIyBpZiB6ZXJvLCB1c2Ugay1mYWN0b3Igb3IgNDkzMworCWZtb3YubAkJJWQ2LCVmcDAJIyBmbG9hdCBJTE9HCisJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRworCWJyYS5iCQljb252cnQKK2Rlbl96ZXJvOgorCXRzdC5sCQklZDcJCSMgY2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKKwlibHQuYgkJdXNlX2lsb2cJIyBpZiBuZWdhdGl2ZSwgdXNlIElMT0cKKwlmbW92LnMJCUY0OTMzKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDQ5MzMKKwlicmEuYgkJY29udnJ0CQkjIGRvIGl0Cit1c2VfaWxvZzoKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKKwlicmEuYgkJY29udnJ0Citub3RfZGVub3JtOgorCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybworCWZibmVxLncJCW5vdF96ZXJvCSMgaWYgemVybywgZm9yY2UgZXhwb25lbnQKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAwCSMgZm9yY2UgZXhwb25lbnQgdG8gMQorCWJyYS5iCQljb252cnQJCSMgZG8gaXQKK25vdF96ZXJvOgorCWZtb3YubAkJJWQ2LCVmcDAJIyBmbG9hdCBJTE9HCisJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRworY29udnJ0OgorCWZkaXYueAkJMjQoJWExKSwlZnAwCSMgY29tcHV0ZSBJTE9HLzEwXjQKKwlmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgc3RvcmUgZnAwIGluIG1lbW9yeQorCW1vdi5sCQk0KCVhMiksJWQyCSMgbW92ZSB3b3JkIDIgdG8gZDIKKwltb3YubAkJOCglYTIpLCVkMwkjIG1vdmUgd29yZCAzIHRvIGQzCisJbW92LncJCSglYTIpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCisJYmVxLmIJCXhfbG9vcF9maW4JIyBpZiB6ZXJvLCBza2lwIHRoZSBzaGlmdAorCXN1Yi53CQkmMHgzZmZkLCVkMAkjIHN1YnRyYWN0IG9mZiBiaWFzCisJbmVnLncJCSVkMAkJIyBtYWtlIGV4cCBwb3NpdGl2ZQoreF9sb29wOgorCWxzci5sCQkmMSwlZDIJCSMgc2hpZnQgZDI6ZDMgcmlnaHQKKwlyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZi53CQklZDAseF9sb29wCSMgZ2l2ZW4gaW4gZDAKK3hfbG9vcF9maW46CisJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAorCWFkZC5sCQkmMHgwMDAwMDA4MCwlZDMJIyBpbmMgYXQgYml0IDYKKwlhZGR4LmwJCSVkMSwlZDIJCSMgY29udGludWUgaW5jCisJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCisJbW92LmwJCSY0LCVkMAkJIyBwdXQgNCBpbiBkMCBmb3IgYmluc3RyIGNhbGwKKwlsZWEubAkJTF9TQ1IxKCVhNiksJWEwCSMgYTAgaXMgcHRyIHRvIExfU0NSMSBmb3IgZXhwIGRpZ2l0cworCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkjIGxvYWQgTF9TQ1IxIGx3b3JkIHRvIGQwCisJbW92LmwJCSYxMiwlZDEJCSMgdXNlIGQxIGZvciBzaGlmdCBjb3VudAorCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCisJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjQ6JjEyfQkjIHB1dCBlMzplMjplMSBpbiBGUF9TQ1IwCisJbHNyLmwJCSVkMSwlZDAJCSMgc2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMTY6JjR9CSMgcHV0IGU0IGluIEZQX1NDUjAKKwl0c3QuYgkJJWQwCQkjIGNoZWNrIGlmIGU0IGlzIHplcm8KKwliZXEuYgkJQTE2X3N0CQkjIGlmIHplcm8sIHNraXAgcmVzdAorCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKKworCisjIEExNi4gV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4KKyMJICAgU2lnbWEgaXMgYml0IDMxIG9mIGluaXRpYWwgdmFsdWU7IFJITyBpcyBiaXQgMzEgb2YgZDYgKElMT0cpLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiB4L3NjcmF0Y2ggLSBmaW5hbCBpcyB4CisjCWQyOiB4L3gKKyMJZDM6IHgveAorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cvSUxPRyBhZGp1c3RlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgdG8gTF9TQ1IxKGE2KS9VbmNoYW5nZWQKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOkJDRCByZXN1bHQgd2l0aCBjb3JyZWN0IHNpZ25zCisjCUZfU0NSMjpJTE9HLzEwXjQKKyMJTF9TQ1IxOkV4cG9uZW50IGRpZ2l0cyBvbiByZXR1cm4gZnJvbSBiaW5zdHIKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExNl9zdDoKKwljbHIubAkJJWQwCQkjIGNsciBkMCBmb3IgY29sbGVjdGlvbiBvZiBzaWducworCWFuZC5iCQkmMHgwZixGUF9TQ1IwKCVhNikJIyBjbGVhciBmaXJzdCBuaWJibGUgb2YgRlBfU0NSMAorCXRzdC5sCQlMX1NDUjIoJWE2KQkjIGNoZWNrIHNpZ24gb2Ygb3JpZ2luYWwgbWFudGlzc2EKKwliZ2UuYgkJbWFudF9wCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNNCisJbW92LmwJCSYyLCVkMAkJIyBtb3ZlIDIgaW4gdG8gZDAgZm9yIFNNCittYW50X3A6CisJdHN0LmwJCSVkNgkJIyBjaGVjayBzaWduIG9mIElMT0cKKwliZ2UuYgkJd3Jfc2duCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNFCisJYWRkcS5sCQkmMSwlZDAJCSMgc2V0IGJpdCAwIGluIGQwIGZvciBTRQord3Jfc2duOgorCWJmaW5zCQklZDAsRlBfU0NSMCglYTYpeyYwOiYyfQkjIGluc2VydCBTTSBhbmQgU0UgaW50byBGUF9TQ1IwCisKKyMgQ2xlYW4gdXAgYW5kIHJlc3RvcmUgYWxsIHJlZ2lzdGVycyB1c2VkLgorCisJZm1vdi5sCQkmMCwlZnBzcgkjIGNsZWFyIHBvc3NpYmxlIGluZXgyL2FpbmV4IGJpdHMKKwlmbW92bS54CQkoJXNwKSssJjB4ZTAJIyAgeyVmcDAtJWZwMn0KKwltb3ZtLmwJCSglc3ApKywmMHg0ZmMJIyAgeyVkMi0lZDcvJWEyfQorCXJ0cworCisJZ2xvYmFsCQlQVEVOUk4KK1BURU5STjoKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCisJZ2xvYmFsCQlQVEVOUlAKK1BURU5SUDoKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ2CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE4CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCisJZ2xvYmFsCQlQVEVOUk0KK1BURU5STToKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlECSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0RGCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RAkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzYJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTQJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QQkjIDEwIF4gNDA5NgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGJpbnN0cigpOiBDb252ZXJ0cyBhIDY0LWJpdCBiaW5hcnkgaW50ZWdlciB0byBiY2QuCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDI6ZDMgPSA2NC1iaXQgYmluYXJ5IGludGVnZXIJCQkJCSMKKyMJZDAgICAgPSBkZXNpcmVkIGxlbmd0aCAoTEVOKQkJCQkJIworIwlhMCAgICA9IHBvaW50ZXIgdG8gc3RhcnQgaW4gbWVtb3J5IGZvciBiY2QgY2hhcmFjdGVycwkJIworIwkJKFRoaXMgcG9pbnRlciBtdXN0IHBvaW50IHRvIGJ5dGUgNCBvZiB0aGUgZmlyc3QJCSMKKyMJCSBsd29yZCBvZiB0aGUgcGFja2VkIGRlY2ltYWwgbWVtb3J5IHN0cmluZy4pCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gTEVOIGJjZCBkaWdpdHMgcmVwcmVzZW50aW5nIHRoZSA2NC1iaXQgaW50ZWdlci4JIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIDY0LWJpdCBiaW5hcnkgaXMgYXNzdW1lZCB0byBoYXZlIGEgZGVjaW1hbCBwb2ludCBiZWZvcmUJIworIwliaXQgNjMuICBUaGUgZnJhY3Rpb24gaXMgbXVsdGlwbGllZCBieSAxMCB1c2luZyBhIG11bCBieSAyCSMKKyMJc2hpZnQgYW5kIGEgbXVsIGJ5IDggc2hpZnQuICBUaGUgYml0cyBzaGlmdGVkIG91dCBvZiB0aGUJIworIwltc2IgZm9ybSBhIGRlY2ltYWwgZGlnaXQuICBUaGlzIHByb2Nlc3MgaXMgaXRlcmF0ZWQgdW50aWwJIworIwlMRU4gZGlnaXRzIGFyZSBmb3JtZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQTEuIEluaXQgZDcgdG8gMS4gIEQ3IGlzIHRoZSBieXRlIGRpZ2l0IGNvdW50ZXIsIGFuZCBpZiAxLCB0aGUJIworIyAgICAgZGlnaXQgZm9ybWVkIHdpbGwgYmUgYXNzdW1lZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQuICBUaGlzIGlzCSMKKyMgICAgIHRvIGZvcmNlIHRoZSBmaXJzdCBieXRlIGZvcm1lZCB0byBoYXZlIGEgMCBpbiB0aGUgdXBwZXIgNCBiaXRzLgkjCisjCQkJCQkJCQkJIworIyBBMi4gQmVnaW5uaW5nIG9mIHRoZSBsb29wOgkJCQkJCSMKKyMgICAgIENvcHkgdGhlIGZyYWN0aW9uIGluIGQyOmQzIHRvIGQ0OmQ1LgkJCQkjCisjCQkJCQkJCQkJIworIyBBMy4gTXVsdGlwbHkgdGhlIGZyYWN0aW9uIGluIGQyOmQzIGJ5IDggdXNpbmcgYml0LWZpZWxkCQkjCisjICAgICBleHRyYWN0cyBhbmQgc2hpZnRzLiAgVGhlIHRocmVlIG1zYnMgZnJvbSBkMiB3aWxsIGdvIGludG8gZDEuCSMKKyMJCQkJCQkJCQkjCisjIEE0LiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDQ6ZDUgYnkgMiB1c2luZyBzaGlmdHMuICBUaGUgbXNiCSMKKyMgICAgIHdpbGwgYmUgY29sbGVjdGVkIGJ5IHRoZSBjYXJyeS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIEE1LiBBZGQgdXNpbmcgdGhlIGNhcnJ5IHRoZSA2NC1iaXQgcXVhbnRpdGllcyBpbiBkMjpkMyBhbmQgZDQ6ZDUJIworIyAgICAgaW50byBkMjpkMy4gIEQxIHdpbGwgY29udGFpbiB0aGUgYmNkIGRpZ2l0IGZvcm1lZC4JCSMKKyMJCQkJCQkJCQkjCisjIEE2LiBUZXN0IGQ3LiAgSWYgemVybywgdGhlIGRpZ2l0IGZvcm1lZCBpcyB0aGUgbXMgZGlnaXQuICBJZiBub24tCSMKKyMgICAgIHplcm8sIGl0IGlzIHRoZSBscyBkaWdpdC4gIFB1dCB0aGUgZGlnaXQgaW4gaXRzIHBsYWNlIGluIHRoZQkjCisjICAgICB1cHBlciB3b3JkIG9mIGQwLiAgSWYgaXQgaXMgdGhlIGxzIGRpZ2l0LCB3cml0ZSB0aGUgd29yZAkJIworIyAgICAgZnJvbSBkMCB0byBtZW1vcnkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIwlJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyMKKyMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgorIworIwkJZDA6IExFTiBjb3VudGVyCisjCQlkMTogdGVtcCB1c2VkIHRvIGZvcm0gdGhlIGRpZ2l0CisjCQlkMjogdXBwZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKKyMJCWQzOiBsb3dlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgOAorIwkJZDQ6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCisjCQlkNTogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDIKKyMJCWQ2OiB0ZW1wIGZvciBiaXQtZmllbGQgZXh0cmFjdHMKKyMJCWQ3OiBieXRlIGRpZ2l0IGZvcm1hdGlvbiB3b3JkO2RpZ2l0IGNvdW50IHswLDF9CisjCQlhMDogcG9pbnRlciBpbnRvIG1lbW9yeSBmb3IgcGFja2VkIGJjZCBzdHJpbmcgZm9ybWF0aW9uCisjCisKKwlnbG9iYWwJCWJpbnN0cgorYmluc3RyOgorCW1vdm0ubAkJJjB4ZmYwMCwtKCVzcCkJIyAgeyVkMC0lZDd9CisKKyMKKyMgQTE6IEluaXQgZDcKKyMKKwltb3YubAkJJjEsJWQ3CQkjIGluaXQgZDcgZm9yIHNlY29uZCBkaWdpdAorCXN1YnEubAkJJjEsJWQwCQkjIGZvciBkYmYgZDAgd291bGQgaGF2ZSBMRU4rMSBwYXNzZXMKKyMKKyMgQTIuIENvcHkgZDI6ZDMgdG8gZDQ6ZDUuICBTdGFydCBsb29wLgorIworbG9vcDoKKwltb3YubAkJJWQyLCVkNAkJIyBjb3B5IHRoZSBmcmFjdGlvbiBiZWZvcmUgbXVscworCW1vdi5sCQklZDMsJWQ1CQkjIHRvIGQ0OmQ1CisjCisjIEEzLiBNdWx0aXBseSBkMjpkMyBieSA4OyBleHRyYWN0IG1zYnMgaW50byBkMS4KKyMKKwliZmV4dHUJCSVkMnsmMDomM30sJWQxCSMgY29weSAzIG1zYnMgb2YgZDIgaW50byBkMQorCWFzbC5sCQkmMywlZDIJCSMgc2hpZnQgZDIgbGVmdCBieSAzIHBsYWNlcworCWJmZXh0dQkJJWQzeyYwOiYzfSwlZDYJIyBjb3B5IDMgbXNicyBvZiBkMyBpbnRvIGQ2CisJYXNsLmwJCSYzLCVkMwkJIyBzaGlmdCBkMyBsZWZ0IGJ5IDMgcGxhY2VzCisJb3IubAkJJWQ2LCVkMgkJIyBvciBpbiBtc2JzIGZyb20gZDMgaW50byBkMgorIworIyBBNC4gTXVsdGlwbHkgZDQ6ZDUgYnkgMjsgYWRkIGNhcnJ5IG91dCB0byBkMS4KKyMKKwlhc2wubAkJJjEsJWQ1CQkjIG11bCBkNSBieSAyCisJcm94bC5sCQkmMSwlZDQJCSMgbXVsIGQ0IGJ5IDIKKwlzd2FwCQklZDYJCSMgcHV0IDAgaW4gZDYgbG93ZXIgd29yZAorCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKKyMKKyMgQTUuIEFkZCBtdWwgYnkgOCB0byBtdWwgYnkgMi4gIEQxIGNvbnRhaW5zIHRoZSBkaWdpdCBmb3JtZWQuCisjCisJYWRkLmwJCSVkNSwlZDMJCSMgYWRkIGxvd2VyIDMyIGJpdHMKKwlub3AJCQkJIyBFUlJBVEEgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHgubAkJJWQ0LCVkMgkJIyBhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cworCW5vcAkJCQkjIEVSUkFUQSBGSVggIzEzIChSZXYuIDEuMiA2LzYvOTApCisJYWRkeC53CQklZDYsJWQxCQkjIGFkZCBpbiBleHRlbmQgZnJvbSBhZGQgdG8gZDEKKwlzd2FwCQklZDYJCSMgd2l0aCBkNiA9IDA7IHB1dCAwIGluIHVwcGVyIHdvcmQKKyMKKyMgQTYuIFRlc3QgZDcgYW5kIGJyYW5jaC4KKyMKKwl0c3QudwkJJWQ3CQkjIGlmIHplcm8sIHN0b3JlIGRpZ2l0ICYgdG8gbG9vcAorCWJlcS5iCQlmaXJzdF9kCQkjIGlmIG5vbi16ZXJvLCBmb3JtIGJ5dGUgJiB3cml0ZQorc2VjX2Q6CisJc3dhcAkJJWQ3CQkjIGJyaW5nIGZpcnN0IGRpZ2l0IHRvIHdvcmQgZDdiCisJYXNsLncJCSY0LCVkNwkJIyBmaXJzdCBkaWdpdCBpbiB1cHBlciA0IGJpdHMgZDdiCisJYWRkLncJCSVkMSwlZDcJCSMgYWRkIGluIGxzIGRpZ2l0IHRvIGQ3YgorCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgZDdiIGJ5dGUgaW4gbWVtb3J5CisJc3dhcAkJJWQ3CQkjIHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWNsci53CQklZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKKwlkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKKwlicmEuYgkJZW5kX2JzdHIJIyBmaW5pc2hlZCwgc28gZXhpdAorZmlyc3RfZDoKKwlzd2FwCQklZDcJCSMgcHV0IGRpZ2l0IHdvcmQgaW4gZDdiCisJbW92LncJCSVkMSwlZDcJCSMgcHV0IG5ldyBkaWdpdCBpbiBkN2IKKwlzd2FwCQklZDcJCSMgcHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCisJYWRkcS53CQkmMSwlZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgZmlyc3QgZGlnaXQgZG9uZQorCWRiZi53CQklZDAsbG9vcAkjIGRvIGxvb3Agc29tZSBtb3JlIQorCXN3YXAJCSVkNwkJIyBwdXQgbGFzdCBkaWdpdCBpbiBzdHJpbmcKKwlsc2wudwkJJjQsJWQ3CQkjIG1vdmUgaXQgdG8gdXBwZXIgNCBiaXRzCisJbW92LmIJCSVkNywoJWEwKSsJIyBzdG9yZSBpdCBpbiBtZW1vcnkgc3RyaW5nCisjCisjIENsZWFuIHVwIGFuZCByZXR1cm4gd2l0aCByZXN1bHQgaW4gZnAwLgorIworZW5kX2JzdHI6CisJbW92bS5sCQkoJXNwKSssJjB4ZmYJIyAgeyVkMC0lZDd9CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFjY19pbl9iKCk6IGRtZW1fcmVhZF9ieXRlIGZhaWxlZAkJCQkjCisjCWZhY2NfaW5fdygpOiBkbWVtX3JlYWRfd29yZCBmYWlsZWQJCQkJIworIwlmYWNjX2luX2woKTogZG1lbV9yZWFkX2xvbmcgZmFpbGVkCQkJCSMKKyMJZmFjY19pbl9kKCk6IGRtZW1fcmVhZCBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCisjCWZhY2NfaW5feCgpOiBkbWVtX3JlYWQgb2YgZXh0IHByZWMgZmFpbGVkCQkJIworIwkJCQkJCQkJCSMKKyMJZmFjY19vdXRfYigpOiBkbWVtX3dyaXRlX2J5dGUgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfdygpOiBkbWVtX3dyaXRlX3dvcmQgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfbCgpOiBkbWVtX3dyaXRlX2xvbmcgZmFpbGVkCQkJCSMKKyMJZmFjY19vdXRfZCgpOiBkbWVtX3dyaXRlIG9mIGRibCBwcmVjIGZhaWxlZAkJCSMKKyMJZmFjY19vdXRfeCgpOiBkbWVtX3dyaXRlIG9mIGV4dCBwcmVjIGZhaWxlZAkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yZWFsX2FjY2VzcygpIC0gZXhpdCB0aHJvdWdoIGFjY2VzcyBlcnJvciBoYW5kbGVyCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGbG93IGp1bXBzIGhlcmUgd2hlbiBhbiBGUCBkYXRhIGZldGNoIGNhbGwgZ2V0cyBhbiBlcnJvcgkjCisjIHJlc3VsdC4gVGhpcyBtZWFucyB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3YW50cyBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUJIworIyBtYWRlIG91dCBvZiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCQkJIworIwlTbywgd2UgZmlyc3QgY2FsbCByZXN0b3JlKCkgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IGFueSB1cGRhdGVkCSMKKyMgLShhbikrIHJlZ2lzdGVyIGdldHMgcmV0dXJuZWQgdG8gaXRzIHByZS1leGNlcHRpb24gdmFsdWUgYW5kIHRoZW4JIworIyB3ZSBjaGFuZ2UgdGhlIHN0YWNrIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZS4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmYWNjX2luX2I6CisJbW92cS5sCQkmMHgxLCVkMAkJCSMgb25lIGJ5dGUKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxMjEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS53CQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX3c6CisJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTQxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl9sOgorCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxMDEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX2Q6CisJbW92cS5sCQkmMHg4LCVkMAkJCSMgZWlnaHQgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgorCisJbW92LncJCSYweDAxNjEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX2luX3g6CisJbW92cS5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmYWNjX291dF9iOgorCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X3c6CisJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBjMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X2w6CisJbW92cS5sCQkmMHg0LCVkMAkJCSMgZm91ciBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwODEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF9kOgorCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2Nfb3V0X3g6CisJbW92LmwJCSYweGMsJWQwCQkJIyB0d2VsdmUgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KKworCW1vdi53CQkmMHgwMGUxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKworIyBoZXJlJ3Mgd2hlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSBhY2Nlc3MgZXJyb3IgZnJhbWUgZnJvbSB0aGUKKyMgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCitmYWNjX2ZpbmlzaDoKKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCW1vdi5sCQkoJXNwKSwtKCVzcCkJCSMgc3RvcmUgU1IsIGhpKFBDKQorCW1vdi5sCQkweDgoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQorCW1vdi5sCQkweGMoJXNwKSwweDgoJXNwKQkjIHN0b3JlIEVBCisJbW92LmwJCSYweDAwMDAwMDAxLDB4Yyglc3ApCSMgc3RvcmUgRlNMVworCW1vdi53CQkweDYoJXNwKSwweGMoJXNwKQkjIGZpeCBGU0xXIChzaXplKQorCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgdm9mZgorCisJYnRzdAkJJjB4NSwoJXNwKQkJIyBzdXBlcnZpc29yIG9yIHVzZXIgbW9kZT8KKwliZXEuYgkJZmFjY19vdXQyCQkjIHVzZXIKKwlic2V0CQkmMHgyLDB4ZCglc3ApCQkjIHNldCBzdXBlcnZpc29yIFRNIGJpdAorCitmYWNjX291dDI6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBpZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMgcHJlZGVjcmVtZW50IG9yIHBvc3RpbmNyZW1lbnQsCisjIHRoZSBlbXVsYXRpb24gaGFzIGFscmVhZHkgY2hhbmdlZCBpdHMgdmFsdWUgdG8gdGhlIGNvcnJlY3QgcG9zdC0KKyMgaW5zdHJ1Y3Rpb24gdmFsdWUuIGJ1dCBzaW5jZSB3ZSdyZSBleGl0aW5nIHRvIHRoZSBhY2Nlc3MgZXJyb3IKKyMgaGFuZGxlciwgdGhlbiBBTiBtdXN0IGJlIHJldHVybmVkIHRvIGl0cyBwcmUtaW5zdHJ1Y3Rpb24gdmFsdWUuCisjIHdlIGRvIHRoYXQgaGVyZS4KK3Jlc3RvcmU6CisJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgZXh0cmFjdCBvcG1vZGUKKwljbXBpLmIJCSVkMSwmMHgxOAkJIyBwb3N0aW5jPworCWJlcS53CQlyZXN0X2luYworCWNtcGkuYgkJJWQxLCYweDIwCQkjIHByZWRlYz8KKwliZXEudwkJcmVzdF9kZWMKKwlydHMKKworcmVzdF9pbmM6CisJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDA3LCVkMQkJIyBmZXRjaCBBbgorCisJbW92LncJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX3Jlc3RfaW5jLmIsJXBjLCVkMS53KjEpCisKK3RibF9yZXN0X2luYzoKKwlzaG9ydAkJcmlfYTAgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTEgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTIgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTMgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTQgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTUgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTYgLSB0YmxfcmVzdF9pbmMKKwlzaG9ydAkJcmlfYTcgLSB0YmxfcmVzdF9pbmMKKworcmlfYTA6CisJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHg4KCVhNikJIyBmaXggc3RhY2tlZCBhMAorCXJ0cworcmlfYTE6CisJc3ViLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikJIyBmaXggc3RhY2tlZCBhMQorCXJ0cworcmlfYTI6CisJc3ViLmwJCSVkMCwlYTIJCQkjIGZpeCBhMgorCXJ0cworcmlfYTM6CisJc3ViLmwJCSVkMCwlYTMJCQkjIGZpeCBhMworCXJ0cworcmlfYTQ6CisJc3ViLmwJCSVkMCwlYTQJCQkjIGZpeCBhNAorCXJ0cworcmlfYTU6CisJc3ViLmwJCSVkMCwlYTUJCQkjIGZpeCBhNQorCXJ0cworcmlfYTY6CisJc3ViLmwJCSVkMCwoJWE2KQkJIyBmaXggc3RhY2tlZCBhNgorCXJ0cworIyBpZiBpdCdzIGEgZm1vdmUgb3V0IGluc3RydWN0aW9uLCB3ZSBkb24ndCBoYXZlIHRvIGZpeCBhNworIyBiZWNhdXNlIHdlIGhhZG4ndCBjaGFuZ2VkIGl0IHlldC4gaWYgaXQncyBhbiBvcGNsYXNzIHR3bworIyBpbnN0cnVjdGlvbiAoZGF0YSBtb3ZlZCBpbikgYW5kIHRoZSBleGNlcHRpb24gd2FzIGluIHN1cGVydmlzb3IKKyMgbW9kZSwgdGhlbiBhbHNvIGFsc28gd2Fzbid0IHVwZGF0ZWQuIGlmIGl0IHdhcyB1c2VyIG1vZGUsIHRoZW4KKyMgcmVzdG9yZSB0aGUgY29ycmVjdCBhNyB3aGljaCBpcyBpbiB0aGUgVVNQIGN1cnJlbnRseS4KK3JpX2E3OgorCWNtcGkuYgkJRVhDX1ZPRkYoJWE2KSwmMHgzMAkjIG1vdmUgaW4gb3Igb3V0PworCWJuZS5iCQlyaV9hN19kb25lCQkjIG91dAorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUuYgkJcmlfYTdfZG9uZQkJIyBzdXBlcnZpc29yCisJbW92YwkJJXVzcCwlYTAJCSMgcmVzdG9yZSBVU1AKKwlzdWIubAkJJWQwLCVhMAorCW1vdmMJCSVhMCwldXNwCityaV9hN19kb25lOgorCXJ0cworCisjIG5lZWQgdG8gaW52ZXJ0IGFkanVzdG1lbnQgdmFsdWUgaWYgdGhlIDxlYT4gd2FzIHByZWRlYworcmVzdF9kZWM6CisJbmVnLmwJCSVkMAorCWJyYS5iCQlyZXN0X2luYwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OTI1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKQEAgLTAsMCArMSwxOCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworaWZuZGVmIENPTkZJR19TVU4zCisgIGV4dHJhLXkgOj0gaGVhZC5vCitlbHNlCisgIGV4dHJhLXkgOj0gc3VuMy1oZWFkLm8KK2VuZGlmCitleHRyYS15CSs9IHZtbGludXgubGRzCisKK29iai15CQk6PSBlbnRyeS5vIHByb2Nlc3MubyB0cmFwcy5vIGludHMubyBzaWduYWwubyBwdHJhY2UubyBcCisJCQlzeXNfbTY4ay5vIHRpbWUubyBzZW1hcGhvcmUubyBzZXR1cC5vIG02OGtfa3N5bXMubworCitvYmotJChDT05GSUdfUENJKQkrPSBiaW9zMzIubworb2JqLSQoQ09ORklHX01PRFVMRVMpCSs9IG1vZHVsZS5vCisKK0VYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvYXNtLW9mZnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWUzMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZ2VuZXJhdGUgZGVmaW5pdGlvbnMgbmVlZGVkIGJ5CisgKiBhc3NlbWJseSBsYW5ndWFnZSBtb2R1bGVzLgorICoKKyAqIFdlIHVzZSB0aGUgdGVjaG5pcXVlIHVzZWQgaW4gdGhlIE9TRiBNYWNoIGtlcm5lbCBjb2RlOgorICogZ2VuZXJhdGUgYXNtIHN0YXRlbWVudHMgY29udGFpbmluZyAjZGVmaW5lcywKKyAqIGNvbXBpbGUgdGhpcyBmaWxlIHRvIGFzc2VtYmxlciwgYW5kIHRoZW4gZXh0cmFjdCB0aGUKKyAqICNkZWZpbmVzIGZyb20gdGhlIGFzc2VtYmx5LWxhbmd1YWdlIG91dHB1dC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2Fody5oPgorI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KKworI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKKwlhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBvZmZzZXRzIGludG8gdGhlIHRhc2sgc3RydWN0ICovCisJREVGSU5FKFRBU0tfU1RBVEUsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhdGUpKTsKKwlERUZJTkUoVEFTS19GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBmbGFncykpOworCURFRklORShUQVNLX1BUUkFDRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKKwlERUZJTkUoVEFTS19XT1JLLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC53b3JrKSk7CisJREVGSU5FKFRBU0tfTkVFRFJFU0NIRUQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLndvcmsubmVlZF9yZXNjaGVkKSk7CisJREVGSU5FKFRBU0tfU1lTQ0FMTF9UUkFDRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQud29yay5zeXNjYWxsX3RyYWNlKSk7CisJREVGSU5FKFRBU0tfU0lHUEVORElORywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQud29yay5zaWdwZW5kaW5nKSk7CisJREVGSU5FKFRBU0tfTk9USUZZX1JFU1VNRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQud29yay5ub3RpZnlfcmVzdW1lKSk7CisJREVGSU5FKFRBU0tfVEhSRUFELCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZCkpOworCURFRklORShUQVNLX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKSk7CisJREVGSU5FKFRBU0tfQUNUSVZFX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOworCisJLyogb2Zmc2V0cyBpbnRvIHRoZSB0aHJlYWQgc3RydWN0ICovCisJREVGSU5FKFRIUkVBRF9LU1AsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBrc3ApKTsKKwlERUZJTkUoVEhSRUFEX1VTUCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIHVzcCkpOworCURFRklORShUSFJFQURfU1IsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBzcikpOworCURFRklORShUSFJFQURfRlMsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcykpOworCURFRklORShUSFJFQURfQ1JQLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgY3JwKSk7CisJREVGSU5FKFRIUkVBRF9FU1AwLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZXNwMCkpOworCURFRklORShUSFJFQURfRlBSRUcsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcCkpOworCURFRklORShUSFJFQURfRlBDTlRMLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZnBjbnRsKSk7CisJREVGSU5FKFRIUkVBRF9GUFNUQVRFLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZnBzdGF0ZSkpOworCisJLyogb2Zmc2V0cyBpbnRvIHRoZSBwdF9yZWdzICovCisJREVGSU5FKFBUX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApKTsKKwlERUZJTkUoUFRfT1JJR19EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfZDApKTsKKwlERUZJTkUoUFRfRDEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMSkpOworCURFRklORShQVF9EMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQyKSk7CisJREVGSU5FKFBUX0QzLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDMpKTsKKwlERUZJTkUoUFRfRDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNCkpOworCURFRklORShQVF9ENSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSk7CisJREVGSU5FKFBUX0EwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTApKTsKKwlERUZJTkUoUFRfQTEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMSkpOworCURFRklORShQVF9BMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSk7CisJREVGSU5FKFBUX1BDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKKwlERUZJTkUoUFRfU1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikpOworCS8qIGJpdGZpZWxkcyBhcmUgYSBiaXQgZGlmZmljdWx0ICovCisJREVGSU5FKFBUX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOworCisJLyogb2Zmc2V0cyBpbnRvIHRoZSBpcnFfaGFuZGxlciBzdHJ1Y3QgKi8KKwlERUZJTkUoSVJRX0hBTkRMRVIsIG9mZnNldG9mKHN0cnVjdCBpcnFfbm9kZSwgaGFuZGxlcikpOworCURFRklORShJUlFfREVWSUQsIG9mZnNldG9mKHN0cnVjdCBpcnFfbm9kZSwgZGV2X2lkKSk7CisJREVGSU5FKElSUV9ORVhULCBvZmZzZXRvZihzdHJ1Y3QgaXJxX25vZGUsIG5leHQpKTsKKworCS8qIG9mZnNldHMgaW50byB0aGUga2VybmVsX3N0YXQgc3RydWN0ICovCisJREVGSU5FKFNUQVRfSVJRLCBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3N0YXQsIGlycXMpKTsKKworCS8qIG9mZnNldHMgaW50byB0aGUgaXJxX2NwdXN0YXRfdCBzdHJ1Y3QgKi8KKwlERUZJTkUoQ1BVU1RBVF9TT0ZUSVJRX1BFTkRJTkcsIG9mZnNldG9mKGlycV9jcHVzdGF0X3QsIF9fc29mdGlycV9wZW5kaW5nKSk7CisKKwkvKiBvZmZzZXRzIGludG8gdGhlIGJpX3JlY29yZCBzdHJ1Y3QgKi8KKwlERUZJTkUoQklSX1RBRywgb2Zmc2V0b2Yoc3RydWN0IGJpX3JlY29yZCwgdGFnKSk7CisJREVGSU5FKEJJUl9TSVpFLCBvZmZzZXRvZihzdHJ1Y3QgYmlfcmVjb3JkLCBzaXplKSk7CisJREVGSU5FKEJJUl9EQVRBLCBvZmZzZXRvZihzdHJ1Y3QgYmlfcmVjb3JkLCBkYXRhKSk7CisKKwkvKiBvZmZzZXRzIGludG8gZm9udF9kZXNjIChkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udC5oKSAqLworCURFRklORShGT05UX0RFU0NfSURYLCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCBpZHgpKTsKKwlERUZJTkUoRk9OVF9ERVNDX05BTUUsIG9mZnNldG9mKHN0cnVjdCBmb250X2Rlc2MsIG5hbWUpKTsKKwlERUZJTkUoRk9OVF9ERVNDX1dJRFRILCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCB3aWR0aCkpOworCURFRklORShGT05UX0RFU0NfSEVJR0hULCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCBoZWlnaHQpKTsKKwlERUZJTkUoRk9OVF9ERVNDX0RBVEEsIG9mZnNldG9mKHN0cnVjdCBmb250X2Rlc2MsIGRhdGEpKTsKKwlERUZJTkUoRk9OVF9ERVNDX1BSRUYsIG9mZnNldG9mKHN0cnVjdCBmb250X2Rlc2MsIHByZWYpKTsKKworCS8qIHNpZ25hbCBkZWZpbmVzICovCisJREVGSU5FKFNJR1NFR1YsIFNJR1NFR1YpOworCURFRklORShTRUdWX01BUEVSUiwgU0VHVl9NQVBFUlIpOworCURFRklORShTSUdUUkFQLCBTSUdUUkFQKTsKKwlERUZJTkUoVFJBUF9UUkFDRSwgVFJBUF9UUkFDRSk7CisKKwkvKiBvZmZzZXRzIGludG8gdGhlIGN1c3RvbSBzdHJ1Y3QgKi8KKwlERUZJTkUoQ1VTVE9NQkFTRSwgJmN1c3RvbSk7CisJREVGSU5FKENfSU5URU5BUiwgb2Zmc2V0b2Yoc3RydWN0IENVU1RPTSwgaW50ZW5hcikpOworCURFRklORShDX0lOVFJFUVIsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIGludHJlcXIpKTsKKwlERUZJTkUoQ19JTlRFTkEsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIGludGVuYSkpOworCURFRklORShDX0lOVFJFUSwgb2Zmc2V0b2Yoc3RydWN0IENVU1RPTSwgaW50cmVxKSk7CisJREVGSU5FKENfU0VSREFUUiwgb2Zmc2V0b2Yoc3RydWN0IENVU1RPTSwgc2VyZGF0cikpOworCURFRklORShDX1NFUkRBVCwgb2Zmc2V0b2Yoc3RydWN0IENVU1RPTSwgc2VyZGF0KSk7CisJREVGSU5FKENfU0VSUEVSLCBvZmZzZXRvZihzdHJ1Y3QgQ1VTVE9NLCBzZXJwZXIpKTsKKwlERUZJTkUoQ0lBQUJBU0UsICZjaWFhKTsKKwlERUZJTkUoQ0lBQkJBU0UsICZjaWFiKTsKKwlERUZJTkUoQ19QUkEsIG9mZnNldG9mKHN0cnVjdCBDSUEsIHByYSkpOworCURFRklORShaVFdPQkFTRSwgelR3b0Jhc2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTAxNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYwpAQCAtMCwwICsxLDUxNSBAQAorLyoKKyAqIGJpb3MzMi5jIC0gUENJIEJJT1MgZnVuY3Rpb25zIGZvciBtNjhrIHN5c3RlbXMuCisgKgorICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KKyAqCisgKiBCYXNlZCBvbiB0aGUgREVDIEFscGhhIGJpb3MzMi5jIGJ5IERhdmUgUnVzbGluZyBhbmQgRGF2aWQgTW9zYmVyZ2VyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpZiAwCisjIGRlZmluZSBEQkdfREVWUyhhcmdzKQkJcHJpbnRrIGFyZ3MKKyNlbHNlCisjIGRlZmluZSBEQkdfREVWUyhhcmdzKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUENJCisKKy8qCisgKiBQQ0kgc3VwcG9ydCBmb3IgTGludXgvbTY4ay4gQ3VycmVudGx5IG9ubHkgdGhlIEhhZGVzIGlzIHN1cHBvcnRlZC4KKyAqCisgKiBUaGUgc3VwcG9ydCBmb3IgUENJIGJyaWRnZXMgaW4gdGhlIERFQyBBbHBoYSB2ZXJzaW9uIGhhcworICogYmVlbiByZW1vdmVkIGluIHRoaXMgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGNpLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBLQgkJMTAyNAorI2RlZmluZSBNQgkJKDEwMjQqS0IpCisjZGVmaW5lIEdCCQkoMTAyNCpNQikKKworI2RlZmluZSBNQUpPUl9SRVYJMAorI2RlZmluZSBNSU5PUl9SRVYJNQorCisvKgorICogQWxpZ24gVkFMIHRvIEFMSUdOLCB3aGljaCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorICovCisKKyNkZWZpbmUgQUxJR04odmFsLGFsaWduKQkoKCh2YWwpICsgKChhbGlnbikgLSAxKSkgJiB+KChhbGlnbikgLSAxKSkKKworLyoKKyAqIE9mZnNldHMgcmVsYXRpdmUgdG8gdGhlIEkvTyBhbmQgbWVtb3J5IGJhc2UgYWRkcmVzc2VzIGZyb20gd2hlcmUgcmVzb3VyY2VzCisgKiBhcmUgYWxsb2NhdGVkLgorICovCisKKyNkZWZpbmUgSU9fQUxMT0NfT0ZGU0VUCQkweDAwMDA0MDAwCisjZGVmaW5lIE1FTV9BTExPQ19PRkZTRVQJMHgwNDAwMDAwMAorCisvKgorICogRGVjbGFyYXRpb25zIG9mIGhhcmR3YXJlIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucy4KKyAqLworCitleHRlcm4gc3RydWN0IHBjaV9idXNfaW5mbyAqaW5pdF9oYWRlc19wY2kodm9pZCk7CisKKy8qCisgKiBCdXMgaW5mbyBzdHJ1Y3R1cmUgb2YgdGhlIFBDSSBidXMuIEEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSBpcworICogcHV0IGluIHRoZSBzeXNkYXRhIG1lbWJlciBvZiB0aGUgcGNpX2J1cyBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBwY2lfYnVzX2luZm8gKmJ1c19pbmZvOworCitzdGF0aWMgaW50IHBjaV9tb2RpZnkgPSAxOwkJLyogSWYgc2V0LCBsYXlvdXQgdGhlIFBDSSBidXMgb3Vyc2VsZi4gKi8KK3N0YXRpYyBpbnQgc2tpcF92Z2E7CQkJLyogSWYgc2V0IGRvIG5vdCBtb2RpZnkgYmFzZSBhZGRyZXNzZXMKKwkJCQkJICAgb2YgdmdhIGNhcmRzLiovCitzdGF0aWMgaW50IGRpc2FibGVfcGNpX2J1cnN0OwkJLyogSWYgc2V0IGRvIG5vdCBhbGxvdyBQQ0kgYnVyc3RzLiAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGlvX2Jhc2U7CitzdGF0aWMgdW5zaWduZWQgaW50IG1lbV9iYXNlOworCisvKgorICogc3RhdGljIHZvaWQgZGlzYWJsZV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKKyAqCisgKiBEaXNhYmxlIFBDSSBkZXZpY2UgREVWIHNvIHRoYXQgaXQgZG9lcyBub3QgcmVzcG9uZCB0byBJL08gb3IgbWVtb3J5CisgKiBhY2Nlc3Nlcy4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGRldgktIGRldmljZSB0byBkaXNhYmxlLgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXNhYmxlX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIHNob3J0IGNtZDsKKworCWlmICgoKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBKSB8fAorCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHx8CisJICAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkpICYmIHNraXBfdmdhKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKworCWNtZCAmPSAoflBDSV9DT01NQU5EX0lPICYgflBDSV9DT01NQU5EX01FTU9SWSAmIH5QQ0lfQ09NTUFORF9NQVNURVIpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworfQorCisvKgorICogc3RhdGljIHZvaWQgbGF5b3V0X2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQorICoKKyAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IgYSBkZXZpY2UuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBkZXZpY2UJLSBkZXZpY2UgdG8gbGF5b3V0IG1lbW9yeSBhbmQgSS9PIGZvci4KKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbGF5b3V0X2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIHNob3J0IGNtZDsKKwl1bnNpZ25lZCBpbnQgYmFzZSwgbWFzaywgc2l6ZSwgcmVnOworCXVuc2lnbmVkIGludCBhbGlnbnRvOworCWludCBpOworCisJLyoKKwkgKiBTa2lwIHZpZGVvIGNhcmRzIGlmIHJlcXVlc3RlZC4KKwkgKi8KKworCWlmICgoKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBKSB8fAorCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHx8CisJICAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkpICYmIHNraXBfdmdhKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKworCWZvciAocmVnID0gUENJX0JBU0VfQUREUkVTU18wLCBpID0gMDsgcmVnIDw9IFBDSV9CQVNFX0FERFJFU1NfNTsgcmVnICs9IDQsIGkrKykKKwl7CisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3BhY2UgYW5kIG9mIHdoYXQgdHlwZSB0aGlzCisJCSAqIGRldmljZSB3YW50cy4KKwkJICovCisKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgMHhmZmZmZmZmZik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHJlZywgJmJhc2UpOworCisJCWlmICghYmFzZSkKKwkJeworCQkJLyogdGhpcyBiYXNlLWFkZHJlc3MgcmVnaXN0ZXIgaXMgdW51c2VkICovCisJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gMDsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBXZSd2ZSByZWFkIHRoZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgYmFjayBhZnRlcgorCQkgKiB3cml0aW5nIGFsbCBvbmVzIGFuZCBzbyBub3cgd2UgbXVzdCBkZWNvZGUgaXQuCisJCSAqLworCisJCWlmIChiYXNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykKKwkJeworCQkJLyoKKwkJCSAqIEkvTyBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuCisJCQkgKi8KKworCQkJY21kIHw9IFBDSV9DT01NQU5EX0lPOworCisJCQliYXNlICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKKwkJCW1hc2sgPSAofmJhc2UgPDwgMSkgfCAweDE7CisJCQlzaXplID0gKG1hc2sgJiBiYXNlKSAmIDB4ZmZmZmZmZmY7CisKKwkJCS8qCisJCQkgKiBBbGlnbiB0byBtdWx0aXBsZSBvZiBzaXplIG9mIG1pbmltdW0gYmFzZS4KKwkJCSAqLworCisJCQlhbGlnbnRvID0gbWF4X3QodW5zaWduZWQgaW50LCAweDA0MCwgc2l6ZSk7CisJCQliYXNlID0gQUxJR04oaW9fYmFzZSwgYWxpZ250byk7CisJCQlpb19iYXNlID0gYmFzZSArIHNpemU7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCBiYXNlIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTyk7CisKKwkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSBiYXNlOworCQkJZGV2LT5yZXNvdXJjZVtpXS5lbmQgPSBkZXYtPnJlc291cmNlW2ldLnN0YXJ0ICsgc2l6ZSAtIDE7CisJCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU87CisKKwkJCURCR19ERVZTKCgibGF5b3V0X2RldjogSU8gYWRkcmVzczogJWxYXG4iLCBiYXNlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQl1bnNpZ25lZCBpbnQgdHlwZTsKKworCQkJLyoKKwkJCSAqIE1lbW9yeSBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuCisJCQkgKi8KKworCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJCXR5cGUgPSBiYXNlICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLOworCQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOworCQkJbWFzayA9ICh+YmFzZSA8PCAxKSB8IDB4MTsKKwkJCXNpemUgPSAobWFzayAmIGJhc2UpICYgMHhmZmZmZmZmZjsKKwkJCXN3aXRjaCAodHlwZSkKKwkJCXsKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKKwkJCQlicmVhazsKKworCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOgorCQkJCXByaW50aygiYmlvczMyIFdBUk5JTkc6IHNsb3QgJWQsIGZ1bmN0aW9uICVkICIKKwkJCQkgICAgICAgInJlcXVlc3RzIG1lbW9yeSBiZWxvdyAxTUItLS1kb24ndCAiCisJCQkJICAgICAgICJrbm93IGhvdyB0byBkbyB0aGF0LlxuIiwKKwkJCQkgICAgICAgUENJX1NMT1QoZGV2LT5kZXZmbiksCisJCQkJICAgICAgIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEFsaWduIHRvIG11bHRpcGxlIG9mIHNpemUgb2YgbWluaW11bSBiYXNlLgorCQkJICovCisKKwkJCWFsaWdudG8gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIDB4MTAwMCwgc2l6ZSk7CisJCQliYXNlID0gQUxJR04obWVtX2Jhc2UsIGFsaWdudG8pOworCQkJbWVtX2Jhc2UgPSBiYXNlICsgc2l6ZTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIGJhc2UpOworCisJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOworCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJCQlpZiAodHlwZSA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQorCQkJeworCQkJCS8qCisJCQkJICogNjQtYml0IGFkZHJlc3MsIHNldCB0aGUgaGlnaGVzdCAzMiBiaXRzCisJCQkJICogdG8gemVyby4KKwkJCQkgKi8KKworCQkJCXJlZyArPSA0OworCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIDApOworCisJCQkJaSsrOworCQkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAwOworCQkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gMDsKKwkJCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogRW5hYmxlIGRldmljZToKKwkgKi8KKworCWlmIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEIHx8CisJICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBIHx8CisJICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgfHwKKwkgICAgZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkKKwl7CisJCS8qCisJCSAqIEFsbCBvZiB0aGVzZSAobWF5KSBoYXZlIEkvTyBzY2F0dGVyZWQgYWxsIGFyb3VuZAorCQkgKiBhbmQgbWF5IG5vdCB1c2UgaS9vLWJhc2UgYWRkcmVzcyByZWdpc3RlcnMgYXQgYWxsLgorCQkgKiBTbyB3ZSBqdXN0IGhhdmUgdG8gYWx3YXlzIGVuYWJsZSBJL08gdG8gdGhlc2UKKwkJICogZGV2aWNlcy4KKwkJICovCisJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAoZGlzYWJsZV9wY2lfYnVyc3QpID8gMCA6IDMyKTsKKworCWlmIChidXNfaW5mbyAhPSBOVUxMKQorCQlidXNfaW5mby0+Y29uZl9kZXZpY2UoZGV2KTsJLyogTWFjaGluZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbi4gKi8KKworCURCR19ERVZTKCgibGF5b3V0X2RldjogYnVzICVkICBzbG90IDB4JXggIFZJRCAweCV4ICBESUQgMHgleCAgY2xhc3MgMHgleFxuIiwKKwkJICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBkZXYtPmNsYXNzKSk7Cit9CisKKy8qCisgKiBzdGF0aWMgdm9pZCBsYXlvdXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCisgKgorICogTGF5b3V0IG1lbW9yeSBhbmQgSS9PIGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgZ2l2ZW4gYnVzLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogYnVzCS0gYnVzLgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBsYXlvdXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJdW5zaWduZWQgaW50IGJpbywgYm1lbTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJREJHX0RFVlMoKCJsYXlvdXRfYnVzOiBzdGFydGluZyBidXMgJWRcbiIsIGJ1cy0+bnVtYmVyKSk7CisKKwlpZiAoIWJ1cy0+ZGV2aWNlcyAmJiAhYnVzLT5jaGlsZHJlbikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbGlnbiB0aGUgY3VycmVudCBiYXNlcyBvbiBhcHByb3ByaWF0ZSBib3VuZGFyaWVzICg0SyBmb3IKKwkgKiBJTyBhbmQgMU1CIGZvciBtZW1vcnkpLgorCSAqLworCisJYmlvID0gaW9fYmFzZSA9IEFMSUdOKGlvX2Jhc2UsIDQqS0IpOworCWJtZW0gPSBtZW1fYmFzZSA9IEFMSUdOKG1lbV9iYXNlLCAxKk1CKTsKKworCS8qCisJICogUENJIGRldmljZXMgbWlnaHQgaGF2ZSBiZWVuIHNldHVwIGJ5IGEgUENJIEJJT1MgZW11bGF0aW9uCisJICogcnVubmluZyB1bmRlciBUT1MuIEluIHRoZXNlIGNhc2VzIHRoZXJlIGlzIGEKKwkgKiB3aW5kb3cgZHVyaW5nIHdoaWNoIHR3byBkZXZpY2VzIG1heSBoYXZlIGFuIG92ZXJsYXBwaW5nCisJICogYWRkcmVzcyByYW5nZS4gVG8gYXZvaWQgdGhpcyBjYXVzaW5nIHRyb3VibGUsIHdlIGZpcnN0CisJICogdHVybiBvZmYgdGhlIEkvTyBhbmQgbWVtb3J5IGFkZHJlc3MgZGVjb2RlcnMgZm9yIGFsbCBQQ0kKKwkgKiBkZXZpY2VzLiAgVGhleSdsbCBiZSByZS1lbmFibGVkIG9ubHkgb25jZSBhbGwgYWRkcmVzcworCSAqIGRlY29kZXJzIGFyZSBwcm9ncmFtbWVkIGNvbnNpc3RlbnRseS4KKwkgKi8KKworCURCR19ERVZTKCgibGF5b3V0X2J1czogZGlzYWJsZV9kZXYgZm9yIGJ1cyAlZFxuIiwgYnVzLT5udW1iZXIpKTsKKworCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyBkZXY7IGRldiA9IGRldi0+c2libGluZykKKwl7CisJCWlmICgoZGV2LT5jbGFzcyA+PiAxNiAhPSBQQ0lfQkFTRV9DTEFTU19CUklER0UpIHx8CisJCSAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19CUklER0VfUENNQ0lBKSkKKwkJCWRpc2FibGVfZGV2KGRldik7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBzcGFjZSB0byBlYWNoIGRldmljZToKKwkgKi8KKworCURCR19ERVZTKCgibGF5b3V0X2J1czogc3RhcnRpbmcgYnVzICVkIGRldmljZXNcbiIsIGJ1cy0+bnVtYmVyKSk7CisKKwlmb3IgKGRldiA9IGJ1cy0+ZGV2aWNlczsgZGV2OyBkZXYgPSBkZXYtPnNpYmxpbmcpCisJeworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYgIT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKSB8fAorCQkgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDTUNJQSkpCisJCQlsYXlvdXRfZGV2KGRldik7CisJfQorCisJREJHX0RFVlMoKCJsYXlvdXRfYnVzOiBidXMgJWQgZmluaXNoZWRcbiIsIGJ1cy0+bnVtYmVyKSk7Cit9CisKKy8qCisgKiBzdGF0aWMgdm9pZCBwY2liaW9zX2ZpeHVwKHZvaWQpCisgKgorICogTGF5b3V0IG1lbW9yeSBhbmQgSS9PIG9mIGFsbCBkZXZpY2VzIG9uIHRoZSBQQ0kgYnVzIGlmICdwY2lfbW9kaWZ5JyBpcworICogdHJ1ZS4gVGhpcyBtaWdodCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBub3QgZXZlcnkgbTY4ayBtYWNoaW5lIHdpdGggYSBQQ0kKKyAqIGJ1cyBoYXMgYSBQQ0kgQklPUy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHJpZ2h0IGFmdGVyCisgKiBwY2lfc2Nhbl9idXMoKSBpbiBwY2liaW9zX2luaXQoKS4KKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cCh2b2lkKQoreworCWlmIChwY2lfbW9kaWZ5KQorCXsKKwkJLyoKKwkJICogU2V0IGJhc2UgYWRkcmVzc2VzIGZvciBhbGxvY2F0aW9uIG9mIEkvTyBhbmQgbWVtb3J5IHNwYWNlLgorCQkgKi8KKworCQlpb19iYXNlID0gYnVzX2luZm8tPmlvX3NwYWNlLnN0YXJ0ICsgSU9fQUxMT0NfT0ZGU0VUOworCQltZW1fYmFzZSA9IGJ1c19pbmZvLT5tZW1fc3BhY2Uuc3RhcnQgKyBNRU1fQUxMT0NfT0ZGU0VUOworCisJCS8qCisJCSAqIFNjYW4gdGhlIHRyZWUsIGFsbG9jYXRpbmcgUENJIG1lbW9yeSBhbmQgSS9PIHNwYWNlLgorCQkgKi8KKworCQlsYXlvdXRfYnVzKHBjaV9idXNfYihwY2lfcm9vdC5uZXh0KSk7CisJfQorCisJLyoKKwkgKiBGaXggaW50ZXJydXB0IGFzc2lnbm1lbnRzLCBldGMuCisJICovCisKKwlidXNfaW5mby0+Zml4dXAocGNpX21vZGlmeSk7Cit9CisKKy8qCisgKiBzdGF0aWMgdm9pZCBwY2liaW9zX2NsYWltX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorICoKKyAqIENsYWltIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gZGV2aWNlcyBvbiB0aGUgZ2l2ZW4gYnVzLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogYnVzCS0gYnVzLgorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY2liaW9zX2NsYWltX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGk7CisKKwl3aGlsZSAoYnVzKQorCXsKKwkJZm9yIChkZXYgPSBidXMtPmRldmljZXM7IChkZXYgIT0gTlVMTCk7IGRldiA9IGRldi0+c2libGluZykKKwkJeworCQkJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspCisJCQl7CisJCQkJc3RydWN0IHJlc291cmNlICpyID0gJmRldi0+cmVzb3VyY2VbaV07CisJCQkJc3RydWN0IHJlc291cmNlICpwcjsKKwkJCQlzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXNfaW5mbyA9IChzdHJ1Y3QgcGNpX2J1c19pbmZvICopIGRldi0+c3lzZGF0YTsKKworCQkJCWlmICgoci0+c3RhcnQgPT0gMCkgfHwgKHItPnBhcmVudCAhPSBOVUxMKSkKKwkJCQkJY29udGludWU7CisjaWYgMQorCQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCQkJCXByID0gJmJ1c19pbmZvLT5pb19zcGFjZTsKKwkJCQllbHNlCisJCQkJCXByID0gJmJ1c19pbmZvLT5tZW1fc3BhY2U7CisjZWxzZQorCQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCQkJCXByID0gJmlvcG9ydF9yZXNvdXJjZTsKKwkJCQllbHNlCisJCQkJCXByID0gJmlvbWVtX3Jlc291cmNlOworI2VuZGlmCisJCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UocHIsIHIpIDwgMCkKKwkJCQl7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBBZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiByZWdpb24gJWQgb2YgZGV2aWNlICVzXG4iLCBpLCBkZXYtPm5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChidXMtPmNoaWxkcmVuKQorCQkJcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoYnVzLT5jaGlsZHJlbik7CisKKwkJYnVzID0gYnVzLT5uZXh0OworCX0KK30KKworLyoKKyAqIGludCBwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkKKyAqCisgKiBBc3NpZ24gYSBuZXcgYWRkcmVzcyB0byBhIFBDSSByZXNvdXJjZS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGRldgktIGRldmljZS4KKyAqIGkJLSByZXNvdXJjZS4KKyAqCisgKiBSZXN1bHQ6IDAgaWYgc3VjY2Vzc2Z1bC4KKyAqLworCitpbnQgX19pbml0IHBjaWJpb3NfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpKQoreworCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2ldOworCXN0cnVjdCByZXNvdXJjZSAqcHIgPSBwY2lfZmluZF9wYXJlbnRfcmVzb3VyY2UoZGV2LCByKTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSByLT5lbmQgKyAxOworCisJaWYgKCFwcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCXsKKwkJaWYgKHNpemUgPiAweDEwMCkKKwkJCXJldHVybiAtRUZCSUc7CisKKwkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKHByLCByLCBzaXplLCBidXNfaW5mby0+aW9fc3BhY2Uuc3RhcnQgKworCQkJCSAgICAgIElPX0FMTE9DX09GRlNFVCwgIGJ1c19pbmZvLT5pb19zcGFjZS5lbmQsIDEwMjQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKHByLCByLCBzaXplLCBidXNfaW5mby0+bWVtX3NwYWNlLnN0YXJ0ICsKKwkJCQkgICAgICBNRU1fQUxMT0NfT0ZGU0VULCBidXNfaW5mby0+bWVtX3NwYWNlLmVuZCwgc2l6ZSkpCisJCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChpIDwgNikKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCArIDQgKiBpLCByLT5zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXZvaWQgKnN5c2RhdGE7CisKKwlzeXNkYXRhID0gKGJ1cy0+cGFyZW50KSA/IGJ1cy0+cGFyZW50LT5zeXNkYXRhIDogYnVzLT5zeXNkYXRhOworCisJZm9yIChkZXYgPSBidXMtPmRldmljZXM7IChkZXYgIT0gTlVMTCk7IGRldiA9IGRldi0+c2libGluZykKKwkJZGV2LT5zeXNkYXRhID0gc3lzZGF0YTsKK30KKwordm9pZCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCit7CisJcHJpbnRrKCJMaW51eC9tNjhrIFBDSSBCSU9TMzIgcmV2aXNpb24gJXguJTAyeFxuIiwgTUFKT1JfUkVWLCBNSU5PUl9SRVYpOworCisJYnVzX2luZm8gPSBOVUxMOworI2lmZGVmIENPTkZJR19IQURFUworCWlmIChNQUNIX0lTX0hBREVTKQorCQlidXNfaW5mbyA9IGluaXRfaGFkZXNfcGNpKCk7CisjZW5kaWYKKwlpZiAoYnVzX2luZm8gIT0gTlVMTCkKKwl7CisJCXByaW50aygiUENJOiBQcm9iaW5nIFBDSSBoYXJkd2FyZVxuIik7CisJCXBjaV9zY2FuX2J1cygwLCBidXNfaW5mby0+bTY4a19wY2lfb3BzLCBidXNfaW5mbyk7CisJCXBjaWJpb3NfZml4dXAoKTsKKwkJcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMocGNpX3Jvb3QpOworCX0KKwllbHNlCisJCXByaW50aygiUENJOiBObyBQQ0kgYnVzIGRldGVjdGVkXG4iKTsKK30KKworY2hhciAqIF9faW5pdCBwY2liaW9zX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cmNtcChzdHIsICJub21vZGlmeSIpKQorCXsKKwkJcGNpX21vZGlmeSA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmICghc3RyY21wKHN0ciwgInNraXB2Z2EiKSkKKwl7CisJCXNraXBfdmdhID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9idXJzdCIpKQorCXsKKwkJZGlzYWJsZV9wY2lfYnVyc3QgPSAxOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gc3RyOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTY0MDE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCkBAIC0wLDAgKzEsNzEyIEBACisvKiAtKi0gbW9kZTogYXNtIC0qLQorICoKKyAqICBsaW51eC9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogNjgwNjAgZml4ZXMgYnkgSmVzcGVyIFNrb3YKKyAqCisgKi8KKworLyoKKyAqIGVudHJ5LlMgIGNvbnRhaW5zIHRoZSBzeXN0ZW0tY2FsbCBhbmQgZmF1bHQgbG93LWxldmVsIGhhbmRsaW5nIHJvdXRpbmVzLgorICogVGhpcyBhbHNvIGNvbnRhaW5zIHRoZSB0aW1lci1pbnRlcnJ1cHQgaGFuZGxlciwgYXMgd2VsbCBhcyBhbGwgaW50ZXJydXB0cworICogYW5kIGZhdWx0cyB0aGF0IGNhbiByZXN1bHQgaW4gYSB0YXNrLXN3aXRjaC4KKyAqCisgKiBOT1RFOiBUaGlzIGNvZGUgaGFuZGxlcyBzaWduYWwtcmVjb2duaXRpb24sIHdoaWNoIGhhcHBlbnMgZXZlcnkgdGltZQorICogYWZ0ZXIgYSB0aW1lci1pbnRlcnJ1cHQgYW5kIGFmdGVyIGVhY2ggc3lzdGVtIGNhbGwuCisgKgorICovCisKKy8qCisgKiAxMi8wMy85NiBKZXM6IEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgbTY4ayBzaW5nbGUtY3B1IHN5c3RlbXMsIHNvCisgKiAgICAgICAgICAgICAgIGFsbCBwb2ludGVycyB0aGF0IHVzZWQgdG8gYmUgJ2N1cnJlbnQnIGFyZSBub3cgZW50cnkKKyAqICAgICAgICAgICAgICAgbnVtYmVyIDAgaW4gdGhlICdjdXJyZW50X3NldCcgbGlzdC4KKyAqCisgKiAgNi8wNS8wMCBSWjoJIGFkZGVkZCB3cml0ZWJhY2sgY29tcGxldGlvbiBhZnRlciByZXR1cm4gZnJvbSBzaWdoYW5kbGVyCisgKgkJIGZvciA2ODA0MAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpbmNsdWRlIDxhc20vb2Zmc2V0cy5oPgorCisuZ2xvYmwgc3lzdGVtX2NhbGwsIGJ1c2VyciwgdHJhcAorLmdsb2JsIHJlc3VtZSwgcmV0X2Zyb21fZXhjZXB0aW9uCisuZ2xvYmwgcmV0X2Zyb21fc2lnbmFsCisuZ2xvYmwgaW50aGFuZGxlciwgc3lzX2NhbGxfdGFibGUKKy5nbG9ibCBzeXNfZm9yaywgc3lzX2Nsb25lLCBzeXNfdmZvcmsKKy5nbG9ibCByZXRfZnJvbV9pbnRlcnJ1cHQsIGJhZF9pbnRlcnJ1cHQKKworLnRleHQKK0VOVFJZKGJ1c2VycikKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCWJ1c2Vycl9jCisJYWRkcWwJIzQsJXNwCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorCitFTlRSWSh0cmFwKQorCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwltb3ZlbAklc3AsJXNwQC0JCXwgc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudAorCWJzcmwJdHJhcF9jCisJYWRkcWwJIzQsJXNwCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorCisJfCBBZnRlciBhIGZvcmsgd2UganVtcCBoZXJlIGRpcmVjdGx5IGZyb20gcmVzdW1lLAorCXwgc28gdGhhdCAlZDEgY29udGFpbnMgdGhlIHByZXZpb3VzIHRhc2sKKwl8IHNjaGVkdWxlX3RhaWwgbm93IHVzZWQgcmVnYXJkbGVzcyBvZiBDT05GSUdfU01QCitFTlRSWShyZXRfZnJvbV9mb3JrKQorCW1vdmVsCSVkMSwlc3BALQorCWpzcglzY2hlZHVsZV90YWlsCisJYWRkcWwJIzQsJXNwCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorCitiYWRzeXM6CisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkKKwlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCisKK2RvX3RyYWNlOgorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCXwgbmVlZGVkIGZvciBzdHJhY2UKKwlzdWJxbAkjNCwlc3AKKwlTQVZFX1NXSVRDSF9TVEFDSworCWpic3IJc3lzY2FsbF90cmFjZQorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJYWRkcWwJIzQsJXNwCisJbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDEKKwltb3ZlbAkjLUVOT1NZUywlZDAKKwljbXBsCSNOUl9zeXNjYWxscywlZDEKKwlqY2MJMWYKKwlqYnNyCUAoc3lzX2NhbGxfdGFibGUsJWQxOmw6NClAKDApCisxOgltb3ZlbAklZDAsJXNwQChQVF9EMCkJCXwgc2F2ZSB0aGUgcmV0dXJuIHZhbHVlCisJc3VicWwJIzQsJXNwCQkJfCBkdW1teSByZXR1cm4gYWRkcmVzcworCVNBVkVfU1dJVENIX1NUQUNLCisJamJzcglzeXNjYWxsX3RyYWNlCisKK3JldF9mcm9tX3NpZ25hbDoKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWFkZHFsCSM0LCVzcAorLyogb24gNjgwNDAgY29tcGxldGUgcGVuZGluZyB3cml0ZWJhY2tzIGlmIGFueSAqLworI2lmZGVmIENPTkZJR19NNjgwNDAKKwliZmV4dHUJJXNwQChQVF9WRUNUT1IpeyMwLCM0fSwlZDAKKwlzdWJxbAkjNywlZDAJCQkJfCBidXMgZXJyb3IgZnJhbWUgPworCWpibmUJMWYKKwltb3ZlbAklc3AsJXNwQC0KKwlqYnNyCWJlcnJfMDQwY2xlYW51cAorCWFkZHFsCSM0LCVzcAorMToKKyNlbmRpZgorCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworRU5UUlkoc3lzdGVtX2NhbGwpCisJU0FWRV9BTExfU1lTCisKKwlHRVRfQ1VSUkVOVCglZDEpCisJfCBzYXZlIHRvcCBvZiBmcmFtZQorCW1vdmVsCSVzcCwlY3VycHRyQChUQVNLX1RIUkVBRCtUSFJFQURfRVNQMCkKKworCXRzdGIJJWN1cnB0ckAoVEFTS19TWVNDQUxMX1RSQUNFKQorCWpuZQlkb190cmFjZQorCWNtcGwJI05SX3N5c2NhbGxzLCVkMAorCWpjYwliYWRzeXMKKwlqYnNyCUAoc3lzX2NhbGxfdGFibGUsJWQwOmw6NClAKDApCisJbW92ZWwJJWQwLCVzcEAoUFRfRDApCQl8IHNhdmUgdGhlIHJldHVybiB2YWx1ZQorCisJfG9yaXcJIzB4MDcwMCwlc3IKKwltb3ZlbAklY3VycHRyQChUQVNLX1dPUkspLCVkMAorCWpuZQlzeXNjYWxsX2V4aXRfd29yaworMToJUkVTVE9SRV9BTEwKKworc3lzY2FsbF9leGl0X3dvcms6CisJYnRzdAkjNSwlc3BAKFBUX1NSKQkJfCBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsCisJYm5lcwkxYgkJCXwgaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscworCXRzdHcJJWQwCisJamVxCWRvX3NpZ25hbF9yZXR1cm4KKwl0c3RiCSVkMAorCWpuZQlkb19kZWxheWVkX3RyYWNlCisKKwlwZWEJcmVzdW1lX3VzZXJzcGFjZQorCWptcAlzY2hlZHVsZQorCityZXRfZnJvbV9leGNlcHRpb246CisJYnRzdAkjNSwlc3BAKFBUX1NSKQkJfCBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsCisJYm5lcwkxZgkJCXwgaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscworCXwgb25seSBhbGxvdyBpbnRlcnJ1cHRzIHdoZW4gd2UgYXJlIHJlYWxseSB0aGUgbGFzdCBvbmUgb24gdGhlCisJfCBrZXJuZWwgc3RhY2ssIG90aGVyd2lzZSBzdGFjayBvdmVyZmxvdyBjYW4gb2NjdXIgZHVyaW5nCisJfCBoZWF2eSBpbnRlcnJ1cHQgbG9hZAorCWFuZHcJI0FMTE9XSU5ULCVzcgorCityZXN1bWVfdXNlcnNwYWNlOgorCW1vdmVsCSVjdXJwdHJAKFRBU0tfV09SSyksJWQwCisJbHNybAkjOCwlZDAKKwlqbmUJZXhpdF93b3JrCisxOglSRVNUT1JFX0FMTAorCitleGl0X3dvcms6CisJfCBzYXZlIHRvcCBvZiBmcmFtZQorCW1vdmVsCSVzcCwlY3VycHRyQChUQVNLX1RIUkVBRCtUSFJFQURfRVNQMCkKKwl0c3RiCSVkMAorCWplcQlkb19zaWduYWxfcmV0dXJuCisKKwlwZWEJcmVzdW1lX3VzZXJzcGFjZQorCWptcAlzY2hlZHVsZQorCitkb19zaWduYWxfcmV0dXJuOgorCXxhbmR3CSNBTExPV0lOVCwlc3IKKwlzdWJxbAkjNCwlc3AJCQl8IGR1bW15IHJldHVybiBhZGRyZXNzCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlwZWEJJXNwQChTV0lUQ0hfU1RBQ0tfU0laRSkKKwljbHJsCSVzcEAtCisJYnNybAlkb19zaWduYWwKKwlhZGRxbAkjOCwlc3AKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWFkZHFsCSM0LCVzcAorCWpicmEJcmVzdW1lX3VzZXJzcGFjZQorCitkb19kZWxheWVkX3RyYWNlOgorCWJjbHIJIzcsJXNwQChQVF9TUikJCXwgY2xlYXIgdHJhY2UgYml0IGluIFNSCisJcGVhCTEJCQl8IHNlbmQgU0lHVFJBUAorCW1vdmVsCSVjdXJwdHIsJXNwQC0KKwlwZWEJTFNJR1RSQVAKKwlqYnNyCXNlbmRfc2lnCisJYWRkcWwJIzgsJXNwCisJYWRkcWwJIzQsJXNwCisJamJyYQlyZXN1bWVfdXNlcnNwYWNlCisKKworI2lmIDAKKyNpZmRlZiBDT05GSUdfQU1JR0EKK2FtaV9pbnRoYW5kbGVyOgorCWFkZHFsCSMxLGlycV9zdGF0K0NQVVNUQVRfTE9DQUxfSVJRX0NPVU5UCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCisJYmZleHR1CSVzcEAoUFRfVkVDVE9SKXsjNCwjMTJ9LCVkMAorCW1vdmVsCSVkMCwlYTAKKwlhZGRxbAkjMSwlYTBAKGtzdGF0K1NUQVRfSVJRLVZFQ09GRihWRUNfU1BVUikpCisJbW92ZWwJJWEwQChhdXRvaXJxX2xpc3QtVkVDT0ZGKFZFQ19TUFVSKSksJWEwCisKK3wgYW1pZ2EgdmVjdG9yIGludCBoYW5kbGVyIGdldCB0aGUgcmVxIG1hc2sgaW5zdGVhZCBvZiBpcnEgdmVjdG9yCisJbGVhCUNVU1RPTUJBU0UsJWExCisJbW92ZXcJJWExQChDX0lOVFJFUVIpLCVkMAorCWFuZHcJJWExQChDX0lOVEVOQVIpLCVkMAorCit8IHByZXBhcmUgc3RhY2sgKHB1c2ggZnJhbWUgcG9pbnRlciwgZGV2X2lkICYgcmVxIG1hc2spCisJcGVhCSVzcEAKKwltb3ZlbAklYTBAKElSUV9ERVZJRCksJXNwQC0KKwltb3ZlbAklZDAsJXNwQC0KKwlwZWEJJXBjQChyZXRfZnJvbV9pbnRlcnJ1cHQ6dykKKwlqYnJhCUAoSVJRX0hBTkRMRVIsJWEwKUAoMCkKKworRU5UUlkobm1pX2hhbmRsZXIpCisJcnRlCisjZW5kaWYKKyNlbmRpZgorCisvKgorKiogVGhpcyBpcyB0aGUgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciwgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgcHJvY2Vzc19pbnQoKQorKi8KK2ludGhhbmRsZXI6CisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCWFkZHFiCSMxLCVjdXJwdHJAKFRBU0tfSU5GTytUSU5GT19QUkVFTVBUKzIpCisJCQkJCXwgIHB1dCBleGNlcHRpb24gIyBpbiBkMAorCWJmZXh0dSAlc3BAKFBUX1ZFQ1RPUil7IzQsIzEwfSwlZDAKKworCW1vdmVsCSVzcCwlc3BALQorCW1vdmVsCSVkMCwlc3BALQkJfCAgcHV0IHZlY3RvciAjIG9uIHN0YWNrCisjaWYgZGVmaW5lZChNQUNIX1E0MF9PTkxZKSAmJiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0ZEKQorCWJ0c3RiCSM0LDB4ZmYwMDAwMDAJCXwgUTQwIGZsb3BweSBuZWVkcyB2ZXJ5IHNwZWNpYWwgdHJlYXRtZW50IC4uLgorCWpiZXEJMWYKKwlidHN0YgkjMywweGZmMDAwMDA0CisJamJlcQkxZgorCWpic3IJZmxvcHB5X2hhcmRpbnQKKwlqYnJhCTNmCisxOgorI2VuZGlmCisJamJzcglwcm9jZXNzX2ludAkJfCAgcHJvY2VzcyB0aGUgSVJRCiszOglhZGRxbAkjOCwlc3AJCQl8ICBwb3AgcGFyYW1ldGVycyBvZmYgc3RhY2sKKworcmV0X2Zyb21faW50ZXJydXB0OgorCXN1YnFiCSMxLCVjdXJwdHJAKFRBU0tfSU5GTytUSU5GT19QUkVFTVBUKzIpCisJamVxCTFmCisyOgorCVJFU1RPUkVfQUxMCisxOgorCW1vdmVxCSMofkFMTE9XSU5UPj44KSYweGZmLCVkMAorCWFuZGIJJXNwQChQVF9TUiksJWQwCisJam5lCTJiCisKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIHNvZnR3YXJlIGludGVycnVwdHMgKi8KKwl0c3RsCWlycV9zdGF0K0NQVVNUQVRfU09GVElSUV9QRU5ESU5HCisJamVxCXJldF9mcm9tX2V4Y2VwdGlvbgorCXBlYQlyZXRfZnJvbV9leGNlcHRpb24KKwlqcmEJZG9fc29mdGlycQorCisKKy8qIEhhbmRsZXIgZm9yIHVuaW5pdGlhbGl6ZWQgYW5kIHNwdXJpb3VzIGludGVycnVwdHMgKi8KKworYmFkX2ludGVycnVwdDoKKwlhZGRxbAkjMSxudW1fc3B1cmlvdXMKKwlydGUKKworRU5UUlkoc3lzX2ZvcmspCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlwZWEJJXNwQChTV0lUQ0hfU1RBQ0tfU0laRSkKKwlqYnNyCW02OGtfZm9yaworCWFkZHFsCSM0LCVzcAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJcnRzCisKK0VOVFJZKHN5c19jbG9uZSkKKwlTQVZFX1NXSVRDSF9TVEFDSworCXBlYQklc3BAKFNXSVRDSF9TVEFDS19TSVpFKQorCWpic3IJbTY4a19jbG9uZQorCWFkZHFsCSM0LCVzcAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJcnRzCisKK0VOVFJZKHN5c192Zm9yaykKKwlTQVZFX1NXSVRDSF9TVEFDSworCXBlYQklc3BAKFNXSVRDSF9TVEFDS19TSVpFKQorCWpic3IJbTY4a192Zm9yaworCWFkZHFsCSM0LCVzcAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJcnRzCisKK0VOVFJZKHN5c19zaWdzdXNwZW5kKQorCVNBVkVfU1dJVENIX1NUQUNLCisJcGVhCSVzcEAoU1dJVENIX1NUQUNLX1NJWkUpCisJamJzcglkb19zaWdzdXNwZW5kCisJYWRkcWwJIzQsJXNwCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlydHMKKworRU5UUlkoc3lzX3J0X3NpZ3N1c3BlbmQpCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlwZWEJJXNwQChTV0lUQ0hfU1RBQ0tfU0laRSkKKwlqYnNyCWRvX3J0X3NpZ3N1c3BlbmQKKwlhZGRxbAkjNCwlc3AKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCitFTlRSWShzeXNfc2lncmV0dXJuKQorCVNBVkVfU1dJVENIX1NUQUNLCisJamJzcglkb19zaWdyZXR1cm4KKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCitFTlRSWShzeXNfcnRfc2lncmV0dXJuKQorCVNBVkVfU1dJVENIX1NUQUNLCisJamJzcglkb19ydF9zaWdyZXR1cm4KKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCityZXN1bWU6CisJLyoKKwkgKiBCZXdhcmUgLSB3aGVuIGVudGVyaW5nIHJlc3VtZSwgcHJldiAodGhlIGN1cnJlbnQgdGFzaykgaXMKKwkgKiBpbiBhMCwgbmV4dCAodGhlIG5ldyB0YXNrKSBpcyBpbiBhMSxzbyBkb24ndCBjaGFuZ2UgdGhlc2UKKwkgKiByZWdpc3RlcnMgdW50aWwgdGhlaXIgY29udGVudHMgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisJICovCisKKwkvKiBzYXZlIHNyICovCisJbW92ZXcJJXNyLCVhMEAoVEFTS19USFJFQUQrVEhSRUFEX1NSKQorCisJLyogc2F2ZSBmcyAoc2ZjLCVkZmMpIChtYXkgYmUgcG9pbnRpbmcgdG8ga2VybmVsIG1lbW9yeSkgKi8KKwltb3ZlYwklc2ZjLCVkMAorCW1vdmV3CSVkMCwlYTBAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUykKKworCS8qIHNhdmUgdXNwICovCisJLyogaXQgaXMgYmV0dGVyIHRvIHVzZSBhIG1vdmVsIGhlcmUgaW5zdGVhZCBvZiBhIG1vdmV3IDgqKSAqLworCW1vdmVjCSV1c3AsJWQwCisJbW92ZWwJJWQwLCVhMEAoVEFTS19USFJFQUQrVEhSRUFEX1VTUCkKKworCS8qIHNhdmUgbm9uLXNjcmF0Y2ggcmVnaXN0ZXJzIG9uIHN0YWNrICovCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKworCS8qIHNhdmUgY3VycmVudCBrZXJuZWwgc3RhY2sgcG9pbnRlciAqLworCW1vdmVsCSVzcCwlYTBAKFRBU0tfVEhSRUFEK1RIUkVBRF9LU1ApCisKKwkvKiBzYXZlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgKi8KKyNpZm5kZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKKwl0c3RsCW02OGtfZnB1dHlwZQorCWplcQkzZgorI2VuZGlmCisJZnNhdmUJJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlBTVEFURSkKKworI2lmIGRlZmluZWQoQ09ORklHX002ODA2MCkKKyNpZiAhZGVmaW5lZChDUFVfTTY4MDYwX09OTFkpCisJYnRzdAkjMyxtNjhrX2NwdXR5cGUrMworCWJlcXMJMWYKKyNlbmRpZgorCS8qIFRoZSAwNjAgRlBVIGtlZXBzIHN0YXR1cyBpbiBiaXRzIDE1LTggb2YgdGhlIGZpcnN0IGxvbmd3b3JkICovCisJdHN0YgklYTBAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFNUQVRFKzIpCisJamVxCTNmCisjaWYgIWRlZmluZWQoQ1BVX002ODA2MF9PTkxZKQorCWpyYQkyZgorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX002ODA2MCAqLworI2lmICFkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkKKzE6CXRzdGIJJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlBTVEFURSkKKwlqZXEJM2YKKyNlbmRpZgorMjoJZm1vdmVteAklZnAwLSVmcDcsJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlBDTlRMKQorMzoKKyNlbmRpZgkvKiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSAqLworCS8qIFJldHVybiBwcmV2aW91cyB0YXNrIGluICVkMSAqLworCW1vdmVsCSVjdXJwdHIsJWQxCisKKwkvKiBzd2l0Y2ggdG8gbmV3IHRhc2sgKGExIGNvbnRhaW5zIG5ldyB0YXNrKSAqLworCW1vdmVsCSVhMSwlY3VycHRyCisKKwkvKiByZXN0b3JlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgKi8KKyNpZm5kZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKKwl0c3RsCW02OGtfZnB1dHlwZQorCWplcQk0ZgorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorI2lmICFkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkKKwlidHN0CSMzLG02OGtfY3B1dHlwZSszCisJYmVxcwkxZgorI2VuZGlmCisJLyogVGhlIDA2MCBGUFUga2VlcHMgc3RhdHVzIGluIGJpdHMgMTUtOCBvZiB0aGUgZmlyc3QgbG9uZ3dvcmQgKi8KKwl0c3RiCSVhMUAoVEFTS19USFJFQUQrVEhSRUFEX0ZQU1RBVEUrMikKKwlqZXEJM2YKKyNpZiAhZGVmaW5lZChDUFVfTTY4MDYwX09OTFkpCisJanJhCTJmCisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTTY4MDYwICovCisjaWYgIWRlZmluZWQoQ1BVX002ODA2MF9PTkxZKQorMToJdHN0YgklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFNUQVRFKQorCWplcQkzZgorI2VuZGlmCisyOglmbW92ZW14CSVhMUAoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKSwlZnAwLSVmcDcKKwlmbW92ZW1sCSVhMUAoVEFTS19USFJFQUQrVEhSRUFEX0ZQQ05UTCksJWZwY3IvJWZwc3IvJWZwaWFyCiszOglmcmVzdG9yZSAlYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFNUQVRFKQorNDoKKyNlbmRpZgkvKiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSAqLworCisJLyogcmVzdG9yZSB0aGUga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwltb3ZlbAklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9LU1ApLCVzcAorCisJLyogcmVzdG9yZSBub24tc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCisJLyogcmVzdG9yZSB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KKwltb3ZlbAklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9VU1ApLCVhMAorCW1vdmVsCSVhMCwldXNwCisKKwkvKiByZXN0b3JlIGZzIChzZmMsJWRmYykgKi8KKwltb3ZldwklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUyksJWEwCisJbW92ZWMJJWEwLCVzZmMKKwltb3ZlYwklYTAsJWRmYworCisJLyogcmVzdG9yZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwltb3ZldwklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9TUiksJXNyCisKKwlydHMKKworLmRhdGEKK0FMSUdOCitzeXNfY2FsbF90YWJsZToKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAwICAtICBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsKi8KKwkubG9uZyBzeXNfZXhpdAorCS5sb25nIHN5c19mb3JrCisJLmxvbmcgc3lzX3JlYWQKKwkubG9uZyBzeXNfd3JpdGUKKwkubG9uZyBzeXNfb3BlbgkJLyogNSAqLworCS5sb25nIHN5c19jbG9zZQorCS5sb25nIHN5c193YWl0cGlkCisJLmxvbmcgc3lzX2NyZWF0CisJLmxvbmcgc3lzX2xpbmsKKwkubG9uZyBzeXNfdW5saW5rCS8qIDEwICovCisJLmxvbmcgc3lzX2V4ZWN2ZQorCS5sb25nIHN5c19jaGRpcgorCS5sb25nIHN5c190aW1lCisJLmxvbmcgc3lzX21rbm9kCisJLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLworCS5sb25nIHN5c19jaG93bjE2CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N0YXQKKwkubG9uZyBzeXNfbHNlZWsKKwkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCisJLmxvbmcgc3lzX21vdW50CisJLmxvbmcgc3lzX29sZHVtb3VudAorCS5sb25nIHN5c19zZXR1aWQxNgorCS5sb25nIHN5c19nZXR1aWQxNgorCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KKwkubG9uZyBzeXNfcHRyYWNlCisJLmxvbmcgc3lzX2FsYXJtCisJLmxvbmcgc3lzX2ZzdGF0CisJLmxvbmcgc3lzX3BhdXNlCisJLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYWNjZXNzCisJLmxvbmcgc3lzX25pY2UKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLwkvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc3luYworCS5sb25nIHN5c19raWxsCisJLmxvbmcgc3lzX3JlbmFtZQorCS5sb25nIHN5c19ta2RpcgorCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KKwkubG9uZyBzeXNfZHVwCisJLmxvbmcgc3lzX3BpcGUKKwkubG9uZyBzeXNfdGltZXMKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19icmsJCS8qIDQ1ICovCisJLmxvbmcgc3lzX3NldGdpZDE2CisJLmxvbmcgc3lzX2dldGdpZDE2CisJLmxvbmcgc3lzX3NpZ25hbAorCS5sb25nIHN5c19nZXRldWlkMTYKKwkubG9uZyBzeXNfZ2V0ZWdpZDE2CS8qIDUwICovCisJLmxvbmcgc3lzX2FjY3QKKwkubG9uZyBzeXNfdW1vdW50CQkJCS8qIHJlY3ljbGVkIG5ldmVyIHVzZWQgcGh5cygpICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfaW9jdGwKKwkubG9uZyBzeXNfZmNudGwJCS8qIDU1ICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19zZXRwZ2lkCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLworCS5sb25nIHN5c19jaHJvb3QKKwkubG9uZyBzeXNfdXN0YXQKKwkubG9uZyBzeXNfZHVwMgorCS5sb25nIHN5c19nZXRwcGlkCisJLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KKwkubG9uZyBzeXNfc2V0c2lkCisJLmxvbmcgc3lzX3NpZ2FjdGlvbgorCS5sb25nIHN5c19zZ2V0bWFzaworCS5sb25nIHN5c19zc2V0bWFzaworCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCisJLmxvbmcgc3lzX3NldHJlZ2lkMTYKKwkubG9uZyBzeXNfc2lnc3VzcGVuZAorCS5sb25nIHN5c19zaWdwZW5kaW5nCisJLmxvbmcgc3lzX3NldGhvc3RuYW1lCisJLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLworCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0CisJLmxvbmcgc3lzX2dldHJ1c2FnZQorCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKKwkubG9uZyBzeXNfc2V0dGltZW9mZGF5CisJLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCisJLmxvbmcgc3lzX3NldGdyb3VwczE2CisJLmxvbmcgb2xkX3NlbGVjdAorCS5sb25nIHN5c19zeW1saW5rCisJLmxvbmcgc3lzX2xzdGF0CisJLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCisJLmxvbmcgc3lzX3VzZWxpYgorCS5sb25nIHN5c19zd2Fwb24KKwkubG9uZyBzeXNfcmVib290CisJLmxvbmcgb2xkX3JlYWRkaXIKKwkubG9uZyBvbGRfbW1hcAkJLyogOTAgKi8KKwkubG9uZyBzeXNfbXVubWFwCisJLmxvbmcgc3lzX3RydW5jYXRlCisJLmxvbmcgc3lzX2Z0cnVuY2F0ZQorCS5sb25nIHN5c19mY2htb2QKKwkubG9uZyBzeXNfZmNob3duMTYJLyogOTUgKi8KKwkubG9uZyBzeXNfZ2V0cHJpb3JpdHkKKwkubG9uZyBzeXNfc2V0cHJpb3JpdHkKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N0YXRmcworCS5sb25nIHN5c19mc3RhdGZzCS8qIDEwMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIGlvcGVybSBmb3IgaTM4NiAqLworCS5sb25nIHN5c19zb2NrZXRjYWxsCisJLmxvbmcgc3lzX3N5c2xvZworCS5sb25nIHN5c19zZXRpdGltZXIKKwkubG9uZyBzeXNfZ2V0aXRpbWVyCS8qIDEwNSAqLworCS5sb25nIHN5c19uZXdzdGF0CisJLmxvbmcgc3lzX25ld2xzdGF0CisJLmxvbmcgc3lzX25ld2ZzdGF0CisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMTAgKi8JLyogaW9wbCBmb3IgaTM4NiAqLworCS5sb25nIHN5c192aGFuZ3VwCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2Jzb2xldGUgaWRsZSgpIHN5c2NhbGwgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiB2bTg2b2xkIGZvciBpMzg2ICovCisJLmxvbmcgc3lzX3dhaXQ0CisJLmxvbmcgc3lzX3N3YXBvZmYJLyogMTE1ICovCisJLmxvbmcgc3lzX3N5c2luZm8KKwkubG9uZyBzeXNfaXBjCisJLmxvbmcgc3lzX2ZzeW5jCisJLmxvbmcgc3lzX3NpZ3JldHVybgorCS5sb25nIHN5c19jbG9uZQkJLyogMTIwICovCisJLmxvbmcgc3lzX3NldGRvbWFpbm5hbWUKKwkubG9uZyBzeXNfbmV3dW5hbWUKKwkubG9uZyBzeXNfY2FjaGVmbHVzaAkJCQkvKiBtb2RpZnlfbGR0IGZvciBpMzg2ICovCisJLmxvbmcgc3lzX2FkanRpbWV4CisJLmxvbmcgc3lzX21wcm90ZWN0CS8qIDEyNSAqLworCS5sb25nIHN5c19zaWdwcm9jbWFzaworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBvbGQgImNyZWF0ZV9tb2R1bGUiICovCisJLmxvbmcgc3lzX2luaXRfbW9kdWxlCisJLmxvbmcgc3lzX2RlbGV0ZV9tb2R1bGUKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMzAgLSBvbGQgImdldF9rZXJuZWxfc3ltcyIgKi8KKwkubG9uZyBzeXNfcXVvdGFjdGwKKwkubG9uZyBzeXNfZ2V0cGdpZAorCS5sb25nIHN5c19mY2hkaXIKKwkubG9uZyBzeXNfYmRmbHVzaAorCS5sb25nIHN5c19zeXNmcwkJLyogMTM1ICovCisJLmxvbmcgc3lzX3BlcnNvbmFsaXR5CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogZm9yIGFmc19zeXNjYWxsICovCisJLmxvbmcgc3lzX3NldGZzdWlkMTYKKwkubG9uZyBzeXNfc2V0ZnNnaWQxNgorCS5sb25nIHN5c19sbHNlZWsJLyogMTQwICovCisJLmxvbmcgc3lzX2dldGRlbnRzCisJLmxvbmcgc3lzX3NlbGVjdAorCS5sb25nIHN5c19mbG9jaworCS5sb25nIHN5c19tc3luYworCS5sb25nIHN5c19yZWFkdgkJLyogMTQ1ICovCisJLmxvbmcgc3lzX3dyaXRldgorCS5sb25nIHN5c19nZXRzaWQKKwkubG9uZyBzeXNfZmRhdGFzeW5jCisJLmxvbmcgc3lzX3N5c2N0bAorCS5sb25nIHN5c19tbG9jawkJLyogMTUwICovCisJLmxvbmcgc3lzX211bmxvY2sKKwkubG9uZyBzeXNfbWxvY2thbGwKKwkubG9uZyBzeXNfbXVubG9ja2FsbAorCS5sb25nIHN5c19zY2hlZF9zZXRwYXJhbQorCS5sb25nIHN5c19zY2hlZF9nZXRwYXJhbQkvKiAxNTUgKi8KKwkubG9uZyBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCisJLmxvbmcgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgorCS5sb25nIHN5c19zY2hlZF95aWVsZAorCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CisJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLworCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKwkubG9uZyBzeXNfbmFub3NsZWVwCisJLmxvbmcgc3lzX21yZW1hcAorCS5sb25nIHN5c19zZXRyZXN1aWQxNgorCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KKwkubG9uZyBzeXNfZ2V0cGFnZXNpemUKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHN5c19xdWVyeV9tb2R1bGUgKi8KKwkubG9uZyBzeXNfcG9sbAorCS5sb25nIHN5c19uZnNzZXJ2Y3RsCisJLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLworCS5sb25nIHN5c19nZXRyZXNnaWQxNgorCS5sb25nIHN5c19wcmN0bAorCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KKwkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCisJLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrCS8qIDE3NSAqLworCS5sb25nIHN5c19ydF9zaWdwZW5kaW5nCisJLmxvbmcgc3lzX3J0X3NpZ3RpbWVkd2FpdAorCS5sb25nIHN5c19ydF9zaWdxdWV1ZWluZm8KKwkubG9uZyBzeXNfcnRfc2lnc3VzcGVuZAorCS5sb25nIHN5c19wcmVhZDY0CS8qIDE4MCAqLworCS5sb25nIHN5c19wd3JpdGU2NAorCS5sb25nIHN5c19sY2hvd24xNjsKKwkubG9uZyBzeXNfZ2V0Y3dkCisJLmxvbmcgc3lzX2NhcGdldAorCS5sb25nIHN5c19jYXBzZXQJLyogMTg1ICovCisJLmxvbmcgc3lzX3NpZ2FsdHN0YWNrCisJLmxvbmcgc3lzX3NlbmRmaWxlCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogc3RyZWFtczEgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBzdHJlYW1zMiAqLworCS5sb25nIHN5c192Zm9yawkJLyogMTkwICovCisJLmxvbmcgc3lzX2dldHJsaW1pdAorCS5sb25nIHN5c19tbWFwMgorCS5sb25nIHN5c190cnVuY2F0ZTY0CisJLmxvbmcgc3lzX2Z0cnVuY2F0ZTY0CisJLmxvbmcgc3lzX3N0YXQ2NAkvKiAxOTUgKi8KKwkubG9uZyBzeXNfbHN0YXQ2NAorCS5sb25nIHN5c19mc3RhdDY0CisJLmxvbmcgc3lzX2Nob3duCisJLmxvbmcgc3lzX2dldHVpZAorCS5sb25nIHN5c19nZXRnaWQJLyogMjAwICovCisJLmxvbmcgc3lzX2dldGV1aWQKKwkubG9uZyBzeXNfZ2V0ZWdpZAorCS5sb25nIHN5c19zZXRyZXVpZAorCS5sb25nIHN5c19zZXRyZWdpZAorCS5sb25nIHN5c19nZXRncm91cHMJLyogMjA1ICovCisJLmxvbmcgc3lzX3NldGdyb3VwcworCS5sb25nIHN5c19mY2hvd24KKwkubG9uZyBzeXNfc2V0cmVzdWlkCisJLmxvbmcgc3lzX2dldHJlc3VpZAorCS5sb25nIHN5c19zZXRyZXNnaWQJLyogMjEwICovCisJLmxvbmcgc3lzX2dldHJlc2dpZAorCS5sb25nIHN5c19sY2hvd24KKwkubG9uZyBzeXNfc2V0dWlkCisJLmxvbmcgc3lzX3NldGdpZAorCS5sb25nIHN5c19zZXRmc3VpZAkvKiAyMTUgKi8KKwkubG9uZyBzeXNfc2V0ZnNnaWQKKwkubG9uZyBzeXNfcGl2b3Rfcm9vdAorCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfZ2V0ZGVudHM2NAkvKiAyMjAgKi8KKwkubG9uZyBzeXNfZ2V0dGlkCisJLmxvbmcgc3lzX3RraWxsCisJLmxvbmcgc3lzX3NldHhhdHRyCisJLmxvbmcgc3lzX2xzZXR4YXR0cgorCS5sb25nIHN5c19mc2V0eGF0dHIJLyogMjI1ICovCisJLmxvbmcgc3lzX2dldHhhdHRyCisJLmxvbmcgc3lzX2xnZXR4YXR0cgorCS5sb25nIHN5c19mZ2V0eGF0dHIKKwkubG9uZyBzeXNfbGlzdHhhdHRyCisJLmxvbmcgc3lzX2xsaXN0eGF0dHIJLyogMjMwICovCisJLmxvbmcgc3lzX2ZsaXN0eGF0dHIKKwkubG9uZyBzeXNfcmVtb3ZleGF0dHIKKwkubG9uZyBzeXNfbHJlbW92ZXhhdHRyCisJLmxvbmcgc3lzX2ZyZW1vdmV4YXR0cgorCS5sb25nIHN5c19mdXRleAkJLyogMjM1ICovCisJLmxvbmcgc3lzX3NlbmRmaWxlNjQKKwkubG9uZyBzeXNfbWluY29yZQorCS5sb25nIHN5c19tYWR2aXNlCisJLmxvbmcgc3lzX2ZjbnRsNjQKKwkubG9uZyBzeXNfcmVhZGFoZWFkCS8qIDI0MCAqLworCS5sb25nIHN5c19pb19zZXR1cAorCS5sb25nIHN5c19pb19kZXN0cm95CisJLmxvbmcgc3lzX2lvX2dldGV2ZW50cworCS5sb25nIHN5c19pb19zdWJtaXQKKwkubG9uZyBzeXNfaW9fY2FuY2VsCS8qIDI0NSAqLworCS5sb25nIHN5c19mYWR2aXNlNjQKKwkubG9uZyBzeXNfZXhpdF9ncm91cAorCS5sb25nIHN5c19sb29rdXBfZGNvb2tpZQorCS5sb25nIHN5c19lcG9sbF9jcmVhdGUKKwkubG9uZyBzeXNfZXBvbGxfY3RsCS8qIDI1MCAqLworCS5sb25nIHN5c19lcG9sbF93YWl0CisJLmxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMKKwkubG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzCisJLmxvbmcgc3lzX3RpbWVyX2NyZWF0ZQorCS5sb25nIHN5c190aW1lcl9zZXR0aW1lCS8qIDI1NSAqLworCS5sb25nIHN5c190aW1lcl9nZXR0aW1lCisJLmxvbmcgc3lzX3RpbWVyX2dldG92ZXJydW4KKwkubG9uZyBzeXNfdGltZXJfZGVsZXRlCisJLmxvbmcgc3lzX2Nsb2NrX3NldHRpbWUKKwkubG9uZyBzeXNfY2xvY2tfZ2V0dGltZQkvKiAyNjAgKi8KKwkubG9uZyBzeXNfY2xvY2tfZ2V0cmVzCisJLmxvbmcgc3lzX2Nsb2NrX25hbm9zbGVlcAorCS5sb25nIHN5c19zdGF0ZnM2NAorCS5sb25nIHN5c19mc3RhdGZzNjQKKwkubG9uZyBzeXNfdGdraWxsCS8qIDI2NSAqLworCS5sb25nIHN5c191dGltZXMKKwkubG9uZyBzeXNfZmFkdmlzZTY0XzY0CisJLmxvbmcgc3lzX21iaW5kCQorCS5sb25nIHN5c19nZXRfbWVtcG9saWN5CisJLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kJLyogMjcwICovCisJLmxvbmcgc3lzX21xX29wZW4KKwkubG9uZyBzeXNfbXFfdW5saW5rCisJLmxvbmcgc3lzX21xX3RpbWVkc2VuZAorCS5sb25nIHN5c19tcV90aW1lZHJlY2VpdmUKKwkubG9uZyBzeXNfbXFfbm90aWZ5CS8qIDI3NSAqLworCS5sb25nIHN5c19tcV9nZXRzZXRhdHRyCisJLmxvbmcgc3lzX3dhaXRpZAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGZvciBzeXNfdnNlcnZlciAqLworCS5sb25nIHN5c19hZGRfa2V5CisJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CS8qIDI4MCAqLworCS5sb25nIHN5c19rZXljdGwKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMgYi9hcmNoL202OGsva2VybmVsL2hlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q2ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKQEAgLTAsMCArMSwzOTQwIEBACisvKiAtKi0gbW9kZTogYXNtIC0qLQorKioKKyoqIGhlYWQuUyAtLSBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGluaXRpYWwgYm9vdCBjb2RlIGZvciB0aGUKKyoqCSAgICAgTGludXgvNjhrIGtlcm5lbC4KKyoqCisqKiBDb3B5cmlnaHQgMTk5MyBieSBIYW1pc2ggTWFjZG9uYWxkCisqKgorKiogNjgwNDAgZml4ZXMgYnkgTWljaGFlbCBSYXVzY2gKKyoqIDY4MDYwIGZpeGVzIGJ5IFJvbWFuIEhvZGVrCisqKiBNTVUgY2xlYW51cCBieSBSYW5keSBUaGVsZW4KKyoqIEZpbmFsIE1NVSBjbGVhbnVwIGJ5IFJvbWFuIFppcHBlbAorKioKKyoqIEF0YXJpIHN1cHBvcnQgYnkgQW5kcmVhcyBTY2h3YWIsIHVzaW5nIGlkZWFzIG9mIFJvYmVydCBkZSBWcmllcworKiogYW5kIEJqb2VybiBCcmF1ZWwKKyoqIFZNRSBTdXBwb3J0IGJ5IFJpY2hhcmQgSGlyc3QKKyoqCisqKiA5NC8xMS8xNCBBbmRyZWFzIFNjaHdhYjogcHV0IGtlcm5lbCBhdCBQQUdFU0laRQorKiogOTQvMTEvMTggQW5kcmVhcyBTY2h3YWI6IHJlbW92ZSBpZGVudGl0eSBtYXBwaW5nIG9mIFNUUkFNIGZvciBBdGFyaQorKiogKysgQmpvZXJuICYgUm9tYW46IEFUQVJJLTY4MDQwIHN1cHBvcnQgZm9yIHRoZSBNZWR1c2EKKyoqIDk1LzExLzE4IFJpY2hhcmQgSGlyc3Q6IEFkZGVkIE1WTUUxNjYgc3VwcG9ydAorKiogOTYvMDQvMjYgR3VlbnRoZXIgS2VsbGV0ZXI6IGZpeGVkIGlkZW50aXR5IG1hcHBpbmcgZm9yIEZhbGNvbiB3aXRoCisqKgkJCSAgICAgIE1hZ251bS0gYW5kIEZYLWFsdGVybmF0ZSByYW0KKyoqIDk4LzA0LzI1IFBoaWwgQmx1bmRlbGw6IGFkZGVkIEhQMzAwIHN1cHBvcnQKKyoqIDE5OTgvMDgvMzAgRGF2aWQgS2lsemVyOiBBZGRlZCBzdXBwb3J0IGZvciBmb250X2Rlc2Mgc3RydWN0dXJlcworKiogICAgICAgICAgICBmb3IgbGludXgtMi4xLjExNQorKiogOS8wMi8xMSAgUmljaGFyZCBaaWRsaWNreTogYWRkZWQgUTQwIHN1cHBvcnQgKGluaXRpYWwgdmVzaW9uIDk5LzAxLzAxKQorKiogMjAwNC8wNS8xMyBLYXJzIGRlIEpvbmc6IEZpbmFsaXNlZCBIUDMwMCBzdXBwb3J0CisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqLworCisvKgorICogTGludXggc3RhcnR1cCBjb2RlLgorICoKKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBib290IGxvYWRlciBoYXM6CisgKiBEaXNhYmxlZCBpbnRlcnJ1cHRzCisgKiBEaXNhYmxlZCBjYWNoZXMKKyAqIFB1dCB1cyBpbiBzdXBlcnZpc29yIHN0YXRlLgorICoKKyAqIFRoZSBrZXJuZWwgc2V0dXAgY29kZSB0YWtlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICogLiAgUmFpc2UgaW50ZXJydXB0IGxldmVsCisgKiAuICBTZXQgdXAgaW5pdGlhbCBrZXJuZWwgbWVtb3J5IG1hcHBpbmcuCisgKiAgICAuICBUaGlzIHNldHMgdXAgYSBtYXBwaW5nIG9mIHRoZSA0TSBvZiBtZW1vcnkgdGhlIGtlcm5lbCBpcyBsb2NhdGVkIGluLgorICogICAgLiAgSXQgYWxzbyBkb2VzIGEgbWFwcGluZyBvZiBhbnkgaW5pdGlhbCBtYWNoaW5lIHNwZWNpZmljIGFyZWFzLgorICogLiAgRW5hYmxlIHRoZSBNTVUKKyAqIC4gIEVuYWJsZSBjYWNoZSBtZW1vcmllcworICogLiAgSnVtcCB0byBrZXJuZWwgc3RhcnR1cAorICoKKyAqIE11Y2ggb2YgdGhlIGZpbGUgcmVzdHJ1Y3R1cmluZyB3YXMgdG8gYWNjb21wbGlzaDoKKyAqIDEpIFJlbW92ZSByZWdpc3RlciBkZXBlbmRlbmN5IHRocm91Z2gtb3V0IHRoZSBmaWxlLgorICogMikgSW5jcmVhc2UgdXNlIG9mIHN1YnJvdXRpbmVzIHRvIHBlcmZvcm0gZnVuY3Rpb25zCisgKiAzKSBJbmNyZWFzZSByZWFkYWJpbGl0eSBvZiB0aGUgY29kZQorICoKKyAqIE9mIGNvdXJzZSwgcmVhZGFiaWxpdHkgaXMgYSBzdWJqZWN0aXZlIGlzc3VlLCBzbyBpdCB3aWxsIG5ldmVyIGJlCisgKiBhcmd1ZWQgdGhhdCB0aGF0IGdvYWwgd2FzIGFjY29tcGxpc2hlZC4gIEl0IHdhcyBtZXJlbHkgYSBnb2FsLgorICogQSBrZXkgd2F5IHRvIGhlbHAgbWFrZSBjb2RlIG1vcmUgcmVhZGFibGUgaXMgdG8gZ2l2ZSBnb29kCisgKiBkb2N1bWVudGF0aW9uLiAgU28sIHRoZSBmaXJzdCB0aGluZyB5b3Ugd2lsbCBmaW5kIGlzIGV4YXVzdGl2ZQorICogd3JpdGUtdXBzIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsIGFuZCB0aGUgZmVhdHVyZXMgb2YgdGhlCisgKiBmdW5jdGlvbmFsIHN1YnJvdXRpbmVzLgorICoKKyAqIEdlbmVyYWwgU3RydWN0dXJlOgorICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKglXaXRob3V0IGEgZG91YnQgdGhlIHNpbmdsZSBsYXJnZXN0IGNodW5rIG9mIGhlYWQuUyBpcyBzcGVudAorICogbWFwcGluZyB0aGUga2VybmVsIGFuZCBJL08gcGh5c2ljYWwgc3BhY2UgaW50byB0aGUgbG9naWNhbCByYW5nZQorICogZm9yIHRoZSBrZXJuZWwuCisgKglUaGVyZSBhcmUgbmV3IHN1YnJvdXRpbmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFrZSBNTVUKKyAqIHN1cHBvcnQgY2xlYW5lciBhbmQgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisgKglGaXJzdCwgeW91IHdpbGwgZmluZCBhIHJvdXRpbmUgY2FsbCAibW11X21hcCIgd2hpY2ggbWFwcworICogYSBsb2dpY2FsIHRvIGEgcGh5c2ljYWwgcmVnaW9uIGZvciBzb21lIGxlbmd0aCBnaXZlbiBhIGNhY2hlCisgKiB0eXBlIG9uIGJlaGFsZiBvZiB0aGUgY2FsbGVyLiAgVGhpcyByb3V0aW5lIG1ha2VzIHdyaXRpbmcgdGhlCisgKiBhY3R1YWwgcGVyLW1hY2hpbmUgc3BlY2lmaWMgY29kZSB2ZXJ5IHNpbXBsZS4KKyAqCUEgY2VudHJhbCBwYXJ0IG9mIHRoZSBjb2RlLCBidXQgbm90IGEgc3Vicm91dGluZSBpbiBpdHNlbGYsCisgKiBpcyB0aGUgbW11X2luaXQgY29kZSB3aGljaCBpcyBicm9rZW4gZG93biBpbnRvIG1hcHBpbmcgdGhlIGtlcm5lbAorICogKHRoZSBzYW1lIGZvciBhbGwgbWFjaGluZXMpIGFuZCBtYXBwaW5nIG1hY2hpbmUtc3BlY2lmaWMgSS9PCisgKiByZWdpb25zLgorICoJQWxzbywgdGhlcmUgd2lsbCBiZSBhIGRlc2NyaXB0aW9uIG9mIGVuZ2FnaW5nIHRoZSBNTVUgYW5kCisgKiBjYWNoZXMuCisgKglZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGVyZSBpcyBhIGNodW5rIG9mIGNvZGUgd2hpY2gKKyAqIGNhbiBlbWl0IHRoZSBlbnRpcmUgTU1VIG1hcHBpbmcgb2YgdGhlIG1hY2hpbmUuICBUaGlzIGlzIHByZXNlbnQKKyAqIG9ubHkgaW4gZGVidWcgbW9kZXMgYW5kIGNhbiBiZSB2ZXJ5IGhlbHBmdWwuCisgKglGdXJ0aGVyLCB0aGVyZSBpcyBhIG5ldyBjb25zb2xlIGRyaXZlciBpbiBoZWFkLlMgdGhhdCBpcworICogYWxzbyBvbmx5IGVuZ2FnZWQgaW4gZGVidWcgbW9kZS4gIEN1cnJlbnRseSwgaXQncyBvbmx5IHN1cHBvcnRlZAorICogb24gdGhlIE1hY2ludG9zaCBjbGFzcyBvZiBtYWNoaW5lcy4gIEhvd2V2ZXIsIGl0IGlzIGhvcGVkIHRoYXQKKyAqIG90aGVycyB3aWxsIHBsdWctaW4gc3VwcG9ydCBmb3Igc3BlY2lmaWMgbWFjaGluZXMuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIG1tdV9tYXAKKyAqIC0tLS0tLS0KKyAqCW1tdV9tYXAgd2FzIHdyaXR0ZW4gZm9yIHR3byBrZXkgcmVhc29ucy4gIEZpcnN0LCBpdCB3YXMgY2xlYXIKKyAqIHRoYXQgaXQgd2FzIHZlcnkgZGlmZmljdWx0IHRvIHJlYWQgdGhlIHByZXZpb3VzIGNvZGUgZm9yIG1hcHBpbmcKKyAqIHJlZ2lvbnMgb2YgbWVtb3J5LiAgU2Vjb25kLCB0aGUgTWFjaW50b3NoIHJlcXVpcmVkIHN1Y2ggZXh0ZW5zaXZlCisgKiBtZW1vcnkgYWxsb2NhdGlvbnMgdGhhdCBpdCBkaWRuJ3QgbWFrZSBzZW5zZSB0byBwcm9wYWdhdGUgdGhlCisgKiBleGlzdGluZyBjb2RlIGFueSBmdXJ0aGVyLgorICoJbW11X21hcCByZXF1aXJlcyBzb21lIHBhcmFtZXRlcnM6CisgKgorICoJbW11X21hcCAobG9naWNhbCwgcGh5c2ljYWwsIGxlbmd0aCwgY2FjaGVfdHlwZSkKKyAqCisgKglXaGlsZSB0aGlzIGVzc2VudGlhbGx5IGRlc2NyaWJlcyB0aGUgZnVuY3Rpb24gaW4gdGhlIGFic3RyYWN0LCB5b3UnbGwKKyAqIGZpbmQgbW9yZSBpbmRlcHRoIGRlc2NyaXB0aW9uIG9mIG90aGVyIHBhcmFtZXRlcnMgYXQgdGhlIGltcGxlbWVudGF0aW9uIHNpdGUuCisgKgorICogbW11X2dldF9yb290X3RhYmxlX2VudHJ5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbW11X2dldF9wYWdlX3RhYmxlX2VudHJ5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKglUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCBieSBvdGhlciBtbXUgcm91dGluZXMgdG8gZ2V0IGEgcG9pbnRlciBpbnRvCisgKiBhIHRhYmxlLCBpZiBuZWNlc3NhcnkgYSBuZXcgdGFibGUgaXMgYWxsb2NhdGVkLiBUaGVzZSByb3V0aW5lcyBhcmUgd29ya2luZworICogYmFzaWNhbGx5IGxpa2UgcG1kX2FsbG9jKCkgYW5kIHB0ZV9hbGxvYygpIGluIDxhc20vcGd0YWJsZS5oPi4gVGhlIHJvb3QKKyAqIHRhYmxlIG5lZWRzIG9mIGNvdXJzZSBvbmx5IHRvIGJlIGFsbG9jYXRlZCBvbmNlIGluIG1tdV9nZXRfcm9vdF90YWJsZV9lbnRyeSwKKyAqIHNvIHRoYXQgaGVyZSBhbHNvIHNvbWUgbW11IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIFRoZSBzZWNvbmQgcGFnZQorICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBrZXJuZWwgKHRoZSBmaXJzdCBwYWdlIGlzIHVubWFwcGVkIGxhdGVyKSBpcyB1c2VkIGZvcgorICogdGhlIGtlcm5lbF9wZ19kaXIuIEl0IG11c3QgYmUgYXQgYSBwb3NpdGlvbiBrbm93biBhdCBsaW5rIHRpbWUgKGFzIGl0J3MgdXNlZAorICogdG8gaW5pdGlhbGl6ZSB0aGUgaW5pdCB0YXNrIHN0cnVjdCkgYW5kIHNpbmNlIGl0IG5lZWRzIHNwZWNpYWwgY2FjaGUKKyAqIHNldHRpbmdzLCBpdCdzIHRoZSBlYXNpZXN0IHRvIHVzZSB0aGlzIHBhZ2UsIHRoZSByZXN0IG9mIHRoZSBwYWdlIGlzIHVzZWQKKyAqIGZvciBmdXJ0aGVyIHBvaW50ZXIgdGFibGVzLgorICogbW11X2dldF9wYWdlX3RhYmxlX2VudHJ5IGFsbG9jYXRlcyBhbHdheXMgYSB3aG9sZSBwYWdlIGZvciBwYWdlIHRhYmxlcywgdGhpcworICogbWVhbnMgMTAyNCBwYWdlcyBhbmQgc28gNE1CIG9mIG1lbW9yeSBjYW4gYmUgbWFwcGVkLiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAqIHRvIG1hbmFnZSBwYWdlIHRhYmxlcyBpbiBzbWFsbGVyIHBpZWNlcyBhcyBuZWFybHkgYWxsIG1hcHBpbmdzIGhhdmUgdGhhdAorICogc2l6ZS4KKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBtbXVfZW5nYWdlCisgKiAtLS0tLS0tLS0tCisgKglUaGFua3MgdG8gYSBzbWFsbCBoZWxwaW5nIHJvdXRpbmUgZW5hYmxpbmcgdGhlIG1tdSBnb3QgcXVpdGUgc2ltcGxlCisgKiBhbmQgdGhlcmUgaXMgb25seSBvbmUgd2F5IGxlZnQuIG1tdV9lbmdhZ2UgbWFrZXMgYSBjb21wbGV0ZSBhIG5ldyBtYXBwaW5nCisgKiB0aGF0IG9ubHkgaW5jbHVkZXMgdGhlIGFic29sdXRlIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGp1bXAgdG8gdGhlIGZpbmFsCisgKiBwb3N0aW9uIGFuZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBtYXBwaW5nLgorICogQXMgdGhpcyBjb2RlIGRvZXNuJ3QgbmVlZCBhIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9uIHJlZ2lzdGVyIGFueW1vcmUgdGhpcworICogbWVhbnMgYWxsIHJlZ2lzdGVycyBhcmUgZnJlZSB0byBiZSB1c2VkIGJ5IG1hY2hpbmVzIHRoYXQgbmVlZHMgdGhlbSBmb3IKKyAqIG90aGVyIHB1cnBvc2VzLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBtbXVfcHJpbnQKKyAqIC0tLS0tLS0tLQorICoJVGhpcyBhbGdvcml0aG0gd2lsbCBwcmludCBvdXQgdGhlIHBhZ2UgdGFibGVzIG9mIHRoZSBzeXN0ZW0gYXMKKyAqIGFwcHJvcHJpYXRlIGZvciBhbiAwMzAgb3IgYW4gMDQwLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICogYW5kIGFzIHN1Y2ggaXMgZW5jbG9zZWQgaW4gI2lmZGVmIE1NVV9QUklOVC8jZW5kaWYgY2xhdXNlcy4KKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogY29uc29sZV9pbml0CisgKiAtLS0tLS0tLS0tLS0KKyAqCVRoZSBjb25zb2xlIGlzIGFsc28gYWJsZSB0byBiZSB0dXJuZWQgb2ZmLiAgVGhlIGNvbnNvbGUgaW4gaGVhZC5TCisgKiBpcyBzcGVjaWZpY2FsbHkgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIHZlcnkgdXNlZnVsLiAgSXQgaXMgc3Vycm91bmRlZCBieQorICogI2lmZGVmIENPTlNPTEUvI2VuZGlmIGNsYXVzZXMgc28gaXQgZG9lc24ndCBoYXZlIHRvIHNoaXAgaW4ga25vd24tZ29vZAorICoga2VybmVscy4gIEl0J3MgYmFzaWMgYWxnb3JpdGhtIGlzIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuCisgKiAoaW4gaGVpZ2h0L3dpZHRoIGFuZCBiaXQgZGVwdGgpIGFuZCB0aGVuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGZvcgorICogZGlzcGxheWluZyBhbiA4eDggZm9udCBvciBhbiA4eDE2ICh3aWR0aHhoZWlnaHQpLiAgSSBwcmVmZXIgdGhlIDh4OCBmb3IKKyAqIGRlYnVnZ2luZyBzbyBJIGNhbiBzZWUgbW9yZSBnb29kIGRhdGEuICBCdXQgaXQgd2FzIHRyaXZpYWwgdG8gYWRkIHN1cHBvcnQKKyAqIGZvciBib3RoIGZvbnRzLCBzbyBJIGluY2x1ZGVkIGl0LgorICoJQWxzbywgdGhlIGFsZ29yaXRobSBmb3IgcGxvdHRpbmcgcGl4ZWxzIGlzIGFic3RyYWN0ZWQgc28gdGhhdCBpbgorICogdGhlb3J5IG90aGVyIHBsYXRmb3JtcyBjb3VsZCBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGZyYW1lCisgKiBidWZmZXJzLiAgVGhpcyBjb3VsZCBiZSB2ZXJ5IHVzZWZ1bC4KKyAqCisgKiBjb25zb2xlX3B1dF9wZW5ndWluCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKglBbiBpbXBvcnRhbnQgcGFydCBvZiBhbnkgTGludXggYnJpbmcgdXAgaXMgdGhlIHBlbmd1aW4gYW5kIHRoZXJlJ3MKKyAqIG5vdGhpbmcgbGlrZSBnZXR0aW5nIHRoZSBQZW5ndWluIG9uIHRoZSBzY3JlZW4hICBUaGlzIGFsZ29yaXRobSB3aWxsIHdvcmsKKyAqIG9uIGFueSBtYWNoaW5lIGZvciB3aGljaCB0aGVyZSBpcyBhIGNvbnNvbGVfcGxvdF9waXhlbC4KKyAqCisgKiBjb25zb2xlX3Njcm9sbAorICogLS0tLS0tLS0tLS0tLS0KKyAqCU15IGhvcGUgaXMgdGhhdCB0aGUgc2Nyb2xsIGFsZ29yaXRobSBkb2VzIHRoZSByaWdodCB0aGluZyBvbiB0aGUKKyAqIHZhcmlvdXMgcGxhdGZvcm1zLCBidXQgaXQgd291bGRuJ3QgYmUgaGFyZCB0byBhZGQgdGhlIHRlc3QgY29uZGl0aW9ucworICogYW5kIG5ldyBjb2RlIGlmIGl0IGRvZXNuJ3QuCisgKgorICogY29uc29sZV9wdXRjCisgKiAtLS0tLS0tLS0tLS0tCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqCVJlZ2lzdGVyIHVzYWdlIGhhcyBncmVhdGx5IHNpbXBsaWZpZWQgd2l0aGluIGhlYWQuUy4gRXZlcnkgc3Vicm91dGluZQorICogc2F2ZXMgYW5kIHJlc3RvcmVzIGFsbCByZWdpc3RlcnMgdGhhdCBpdCBtb2RpZmllcyAoZXhjZXB0IGl0IHJldHVybnMgYQorICogdmFsdWUgaW4gdGhlcmUgb2YgY291cnNlKS4gU28gdGhlIG9ubHkgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBpbml0aWFsaXplZAorICogaXMgdGhlIHN0YWNrIHBvaW50ZXIuCisgKiBBbGwgb3RoZXIgaW5pdCBjb2RlIGFuZCBkYXRhIGlzIG5vdyBwbGFjZWQgaW4gdGhlIGluaXQgc2VjdGlvbiwgc28gaXQgd2lsbAorICogYmUgYXV0b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJuZWwgaW5pdGlhbGl6YXRpb24uCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIG9wdGlvbnMKKyAqIC0tLS0tLS0KKyAqCVRoZXJlIGFyZSBtYW55IG9wdGlvbnMgYXZhaWxhYmxlIGluIGEgYnVpbGQgb2YgdGhpcyBmaWxlLiAgSSd2ZQorICogdGFrZW4gdGhlIHRpbWUgdG8gZGVzY3JpYmUgdGhlbSBoZXJlIHRvIHNhdmUgeW91IHRoZSB0aW1lIG9mIHNlYXJjaGluZworICogZm9yIHRoZW0gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSBtZWFuLgorICoKKyAqIENPTkZJR194eHg6CVRoZXNlIGFyZSB0aGUgb2J2aW91cyBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyBjcmVhdGVkCisgKiBkdXJpbmcgY29uZmlndXJhdGlvbi4gIFRoZXNlIGFyZSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaC4KKyAqCisgKiBDT05TT0xFOglUaGVyZSBpcyBzdXBwb3J0IGZvciBoZWFkLlMgY29uc29sZSBpbiB0aGlzIGZpbGUuICBUaGlzCisgKiBjb25zb2xlIGNhbiB0YWxrIHRvIGEgTWFjIGZyYW1lIGJ1ZmZlciwgYnV0IGNvdWxkIGVhc2lseSBiZSBleHRyYXBvbGF0ZWQKKyAqIHRvIGV4dGVuZCBpdCB0byBzdXBwb3J0IG90aGVyIHBsYXRmb3Jtcy4KKyAqCisgKiBURVNUX01NVToJVGhpcyBpcyBhIHRlc3QgaGFybmVzcyBmb3IgcnVubmluZyBvbiBhbnkgZ2l2ZW4gbWFjaGluZSBidXQKKyAqIGdldHRpbmcgYW4gTU1VIGR1bXAgZm9yIGFub3RoZXIgY2xhc3Mgb2YgbWFjaGluZS4gIFRoZSBjbGFzc2VzIG9mIG1hY2hpbmVzCisgKiB0aGF0IGNhbiBiZSB0ZXN0ZWQgYXJlIGFueSBvZiB0aGUgbWFrZXMgKEF0YXJpLCBBbWlnYSwgTWFjLCBWTUUsIGV0Yy4pCisgKiBhbmQgYW55IG9mIHRoZSBtb2RlbHMgKDAzMCwgMDQwLCAwNjAsIGV0Yy4pLgorICoKKyAqCU5PVEU6CVRFU1RfTU1VIGlzIE5PVCBwZXJtYW5lbnQhICBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZAorICoJCVdoZW4gaGVhZC5TIGJvb3RzIG9uIEF0YXJpLCBBbWlnYSwgTWFjaW50b3NoLCBhbmQgVk1FCisgKgkJbWFjaGluZXMuICBBdCB0aGF0IHBvaW50IHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHdpbGwgYmUKKyAqCQliZWxpZXZlZCB0byBiZSBzb2xpZCBlbm91Z2ggdG8gYmUgdHJ1c3RlZCwgYW5kIFRFU1RfTU1VCisgKgkJY2FuIGJlIGRyb3BwZWQuICBEbyBub3RlIHRoYXQgdGhhdCB3aWxsIGNsZWFuIHVwIHRoZQorICoJCWhlYWQuUyBjb2RlIHNpZ25pZmljYW50bHkgYXMgbGFyZ2UgYmxvY2tzIG9mICNpZi8jZWxzZQorICoJCWNsYXVzZXMgY2FuIGJlIHJlbW92ZWQuCisgKgorICogTU1VX05PQ0FDSEVfS0VSTkVMOglPbiB0aGUgTWFjaW50b3NoIHBsYXRmb3JtIHRoZXJlIHdhcyBhbiBpbnF1aXJ5IGludG8KKyAqIGRldGVybWluZyB3aHkgZGV2aWNlcyBkb24ndCBhcHBlYXIgdG8gd29yay4gIEEgdGVzdCBjYXNlIHdhcyB0byByZW1vdmUKKyAqIHRoZSBjYWNoZWFiaWxpdHkgb2YgdGhlIGtlcm5lbCBiaXRzLgorICoKKyAqIE1NVV9QUklOVDoJVGhlcmUgaXMgYSByb3V0aW5lIGJ1aWx0IGludG8gaGVhZC5TIHRoYXQgY2FuIGRpc3BsYXkgdGhlCisgKiBNTVUgZGF0YSBzdHJ1Y3R1cmVzLiAgSXQgb3V0cHV0cyBpdHMgcmVzdWx0IHRocm91Z2ggdGhlIHNlcmlhbF9wdXRjCisgKiBpbnRlcmZhY2UuICBTbyB3aGVyZSBldmVyIHRoYXQgd2luZHMgdXAgZHJpdmluZyBkYXRhLCB0aGF0J3Mgd2hlcmUgdGhlCisgKiBtbXUgc3RydWN0IHdpbGwgYXBwZWFyLiAgT24gdGhlIE1hY2ludG9zaCB0aGF0J3MgdHlwaWNhbGx5IHRoZSBjb25zb2xlLgorICoKKyAqIFNFUklBTF9ERUJVRzoJVGhlcmUgYXJlIGEgc2VyaWVzIG9mIHB1dGMoKSBtYWNybyBzdGF0ZW1lbnRzCisgKiBzY2F0dGVyZWQgdGhyb3VnaCBvdXQgdGhlIGNvZGUgdG8gZ2l2ZSBwcm9ncmVzcyBvZiBzdGF0dXMgdG8gdGhlCisgKiBwZXJzb24gc2l0dGluZyBhdCB0aGUgY29uc29sZS4gIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRob3NlCisgKiBhcmUgdXNlZC4KKyAqCisgKiBERUJVRzoJVGhpcyBpcyB0aGUgc3RhbmRhcmQgREVCVUcgZmxhZyB0aGF0IGNhbiBiZSBzZXQgZm9yIGJ1aWxkaW5nCisgKgkJdGhlIGtlcm5lbC4gIEl0IGhhcyB0aGUgZWZmZWN0IGFkZGluZyBhZGRpdGlvbmFsIHRlc3RzIGludG8KKyAqCQl0aGUgY29kZS4KKyAqCisgKiBGT05UXzZ4MTE6CisgKiBGT05UXzh4ODoKKyAqIEZPTlRfOHgxNjoKKyAqCQlJbiB0aGVvcnkgdGhlc2UgY291bGQgYmUgZGV0ZXJtaW5lZCBhdCBydW4gdGltZSBvciBoYW5kZWQKKyAqCQlvdmVyIGJ5IHRoZSBib290ZXIuICBCdXQsIGxldCdzIGJlIHJlYWwsIGl0J3MgYSBmaW5lIGhhcmQKKyAqCQljb2RlZCB2YWx1ZS4gIChCdXQsIHlvdSB3aWxsIG5vdGljZSB0aGUgY29kZSBpcyBydW4tdGltZQorICoJCWZsZXhpYmxlISkgIEEgcG9pbnRlciB0byB0aGUgZm9udCdzIHN0cnVjdCBmb250X2Rlc2MKKyAqCQlpcyBrZXB0IGxvY2FsbHkgaW4gTGNvbnNvbGVfZm9udC4gIEl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisgKgkJZm9udCBzaXplIGluZm9ybWF0aW9uIGR5bmFtaWNhbGx5LgorICoKKyAqIEF0YXJpIGNvbnN0YW50czoKKyAqIFVTRV9QUklOVEVSOglVc2UgdGhlIHByaW50ZXIgcG9ydCBmb3Igc2VyaWFsIGRlYnVnLgorICogVVNFX1NDQ19COglVc2UgdGhlIFNDQyBwb3J0IEEgKFNlcmlhbDIpIGZvciBzZXJpYWwgZGVidWcuCisgKiBVU0VfU0NDX0E6CVVzZSB0aGUgU0NDIHBvcnQgQiAoTW9kZW0yKSBmb3Igc2VyaWFsIGRlYnVnLgorICogVVNFX01GUDoJVXNlIHRoZSBTVC1NRlAgcG9ydCAoTW9kZW0xKSBmb3Igc2VyaWFsIGRlYnVnLgorICoKKyAqIE1hY2ludG9zaCBjb25zdGFudHM6CisgKiBNQUNfU0VSSUFMX0RFQlVHOglUdXJucyBvbiBzZXJpYWwgZGVidWcgb3V0cHV0IGZvciB0aGUgTWFjaW50b3NoLgorICogTUFDX1VTRV9TQ0NfQToJVXNlIHRoZSBTQ0MgcG9ydCBBIChtb2RlbSkgZm9yIHNlcmlhbCBkZWJ1Zy4KKyAqIE1BQ19VU0VfU0NDX0I6CVVzZSB0aGUgU0NDIHBvcnQgQiAocHJpbnRlcikgZm9yIHNlcmlhbCBkZWJ1ZyAoZGVmYXVsdCkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisKKyNpZmRlZiBDT05GSUdfTUFDCisKKyNpbmNsdWRlIDxhc20vbWFjaHcuaD4KKworLyoKKyAqIE1hY2ludG9zaCBjb25zb2xlIHN1cHBvcnQKKyAqLworCisjZGVmaW5lIENPTlNPTEUKKyNkZWZpbmUgQ09OU09MRV9QRU5HVUlOCisKKy8qCisgKiBNYWNpbnRvc2ggc2VyaWFsIGRlYnVnIHN1cHBvcnQ7IG91dHB1dHMgYm9vdCBpbmZvIHRvIHRoZSBwcmludGVyCisgKiAgIGFuZC9vciBtb2RlbSBzZXJpYWwgcG9ydHMKKyAqLworI3VuZGVmIE1BQ19TRVJJQUxfREVCVUcKKworLyoKKyAqIE1hY2ludG9zaCBzZXJpYWwgZGVidWcgcG9ydCBzZWxlY3Rpb247IGRlZmluZSBvbmUgb3IgYm90aDsKKyAqICAgcmVxdWlyZXMgTUFDX1NFUklBTF9ERUJVRyB0byBiZSBkZWZpbmVkCisgKi8KKyNkZWZpbmUgTUFDX1VTRV9TQ0NfQQkJLyogTWFjaW50b3NoIG1vZGVtIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIE1BQ19VU0VfU0NDX0IJCS8qIE1hY2ludG9zaCBwcmludGVyIHNlcmlhbCBwb3J0ICovCisKKyNlbmRpZgkvKiBDT05GSUdfTUFDICovCisKKyN1bmRlZiBNTVVfUFJJTlQKKyN1bmRlZiBNTVVfTk9DQUNIRV9LRVJORUwKKyNkZWZpbmUgU0VSSUFMX0RFQlVHCisjdW5kZWYgREVCVUcKKworLyoKKyAqIEZvciB0aGUgaGVhZC5TIGNvbnNvbGUsIHRoZXJlIGFyZSB0aHJlZSBzdXBwb3J0ZWQgZm9udHMsIDZ4MTEsIDh4MTYgYW5kIDh4OC4KKyAqIFRoZSA4eDggZm9udCBpcyBoYXJkZXIgdG8gcmVhZCBidXQgZml0cyBtb3JlIG9uIHRoZSBzY3JlZW4uCisgKi8KKyNkZWZpbmUgRk9OVF84eDgJLyogZGVmYXVsdCAqLworLyogI2RlZmluZSBGT05UXzh4MTYgKi8JLyogMm5kIGNob2ljZSAqLworLyogI2RlZmluZSBGT05UXzZ4MTEgKi8JLyogM3JkIGNob2ljZSAqLworCisuZ2xvYmwga2VybmVsX3BnX2RpcgorLmdsb2JsIGF2YWlsbWVtCisuZ2xvYmwgbTY4a19wZ3RhYmxlX2NhY2hlbW9kZQorLmdsb2JsIG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUKKyNpZmRlZiBDT05GSUdfTVZNRTE2eAorLmdsb2JsIG12bWVfYmRpZAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1E0MAorLmdsb2JsIHE0MF9tZW1fY3B0cgorI2VuZGlmCisKK0NQVVRZUEVfMDQwCT0gMQkvKiBpbmRpY2F0ZXMgYW4gMDQwICovCitDUFVUWVBFXzA2MAk9IDIJLyogaW5kaWNhdGVzIGFuIDA2MCAqLworQ1BVVFlQRV8wNDYwCT0gMwkvKiBpZiBlaXRoZXIgYWJvdmUgYXJlIHNldCwgdGhpcyBpcyBzZXQgKi8KK0NQVVRZUEVfMDIwCT0gNAkvKiBpbmRpY2F0ZXMgYW4gMDIwICovCisKKy8qIFRyYW5zbGF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KK1RDX0VOQUJMRSA9IDB4ODAwMAorVENfUEFHRThLID0gMHg0MDAwCitUQ19QQUdFNEsgPSAweDAwMDAKKworLyogVHJhbnNwYXJlbnQgdHJhbnNsYXRpb24gcmVnaXN0ZXJzICovCitUVFJfRU5BQkxFCT0gMHg4MDAwCS8qIGVuYWJsZSB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbiAqLworVFRSX0FOWU1PREUJPSAweDQwMDAJLyogdXNlciBhbmQga2VybmVsIG1vZGUgYWNjZXNzICovCitUVFJfS0VSTkVMTU9ERQk9IDB4MjAwMAkvKiBvbmx5IGtlcm5lbCBtb2RlIGFjY2VzcyAqLworVFRSX1VTRVJNT0RFCT0gMHgwMDAwCS8qIG9ubHkgdXNlciBtb2RlIGFjY2VzcyAqLworVFRSX0NJCQk9IDB4MDQwMAkvKiBpbmhpYml0IGNhY2hlICovCitUVFJfUlcJCT0gMHgwMjAwCS8qIHJlYWQvd3JpdGUgbW9kZSAqLworVFRSX1JXTQkJPSAweDAxMDAJLyogcmVhZC93cml0ZSBtYXNrICovCitUVFJfRkNCMgk9IDB4MDA0MAkvKiBmdW5jdGlvbiBjb2RlIGJhc2UgYml0IDIgKi8KK1RUUl9GQ0IxCT0gMHgwMDIwCS8qIGZ1bmN0aW9uIGNvZGUgYmFzZSBiaXQgMSAqLworVFRSX0ZDQjAJPSAweDAwMTAJLyogZnVuY3Rpb24gY29kZSBiYXNlIGJpdCAwICovCitUVFJfRkNNMgk9IDB4MDAwNAkvKiBmdW5jdGlvbiBjb2RlIG1hc2sgYml0IDIgKi8KK1RUUl9GQ00xCT0gMHgwMDAyCS8qIGZ1bmN0aW9uIGNvZGUgbWFzayBiaXQgMSAqLworVFRSX0ZDTTAJPSAweDAwMDEJLyogZnVuY3Rpb24gY29kZSBtYXNrIGJpdCAwICovCisKKy8qIENhY2hlIENvbnRyb2wgcmVnaXN0ZXJzICovCitDQzZfRU5BQkxFX0QJPSAweDgwMDAwMDAwCS8qIGVuYWJsZSBkYXRhIGNhY2hlICg2ODBbNDZdMCkgKi8KK0NDNl9GUkVFWkVfRAk9IDB4NDAwMDAwMDAJLyogZnJlZXplIGRhdGEgY2FjaGUgKDY4MDYwKSAqLworQ0M2X0VOQUJMRV9TQgk9IDB4MjAwMDAwMDAJLyogZW5hYmxlIHN0b3JlIGJ1ZmZlciAoNjgwNjApICovCitDQzZfUFVTSF9EUEkJPSAweDEwMDAwMDAwCS8qIGRpc2FibGUgQ1BVU0ggaW52YWxpZGF0aW9uICg2ODA2MCkgKi8KK0NDNl9IQUxGX0QJPSAweDA4MDAwMDAwCS8qIGhhbGYtY2FjaGUgbW9kZSBmb3IgZGF0YSBjYWNoZSAoNjgwNjApICovCitDQzZfRU5BQkxFX0IJPSAweDAwODAwMDAwCS8qIGVuYWJsZSBicmFuY2ggY2FjaGUgKDY4MDYwKSAqLworQ0M2X0NMUkFfQgk9IDB4MDA0MDAwMDAJLyogY2xlYXIgYWxsIGVudHJpZXMgaW4gYnJhbmNoIGNhY2hlICg2ODA2MCkgKi8KK0NDNl9DTFJVX0IJPSAweDAwMjAwMDAwCS8qIGNsZWFyIHVzZXIgZW50cmllcyBpbiBicmFuY2ggY2FjaGUgKDY4MDYwKSAqLworQ0M2X0VOQUJMRV9JCT0gMHgwMDAwODAwMAkvKiBlbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MFs0Nl0wKSAqLworQ0M2X0ZSRUVaRV9JCT0gMHgwMDAwNDAwMAkvKiBmcmVlemUgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDYwKSAqLworQ0M2X0hBTEZfSQk9IDB4MDAwMDIwMDAJLyogaGFsZi1jYWNoZSBtb2RlIGZvciBpbnN0cnVjdGlvbiBjYWNoZSAoNjgwNjApICovCitDQzNfQUxMT0NfV1JJVEUJPSAweDAwMDAyMDAwCS8qIHdyaXRlIGFsbG9jYXRlIG1vZGUoNjgwMzApICovCitDQzNfRU5BQkxFX0RCCT0gMHgwMDAwMTAwMAkvKiBlbmFibGUgZGF0YSBidXJzdCAoNjgwMzApICovCitDQzNfQ0xSX0QJPSAweDAwMDAwODAwCS8qIGNsZWFyIGRhdGEgY2FjaGUgKDY4MDMwKSAqLworQ0MzX0NMUkVfRAk9IDB4MDAwMDA0MDAJLyogY2xlYXIgZW50cnkgaW4gZGF0YSBjYWNoZSAoNjgwMzApICovCitDQzNfRlJFRVpFX0QJPSAweDAwMDAwMjAwCS8qIGZyZWV6ZSBkYXRhIGNhY2hlICg2ODAzMCkgKi8KK0NDM19FTkFCTEVfRAk9IDB4MDAwMDAxMDAJLyogZW5hYmxlIGRhdGEgY2FjaGUgKDY4MDMwKSAqLworQ0MzX0VOQUJMRV9JQgk9IDB4MDAwMDAwMTAJLyogZW5hYmxlIGluc3RydWN0aW9uIGJ1cnN0ICg2ODAzMCkgKi8KK0NDM19DTFJfSQk9IDB4MDAwMDAwMDgJLyogY2xlYXIgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDMwKSAqLworQ0MzX0NMUkVfSQk9IDB4MDAwMDAwMDQJLyogY2xlYXIgZW50cnkgaW4gaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDMwKSAqLworQ0MzX0ZSRUVaRV9JCT0gMHgwMDAwMDAwMgkvKiBmcmVlemUgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDMwKSAqLworQ0MzX0VOQUJMRV9JCT0gMHgwMDAwMDAwMQkvKiBlbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDMwKSAqLworCisvKiBNaXNjZWxsYW5lb3VzIGRlZmluaXRpb25zICovCitQQUdFU0laRQk9IDQwOTYKK1BBR0VTSElGVAk9IDEyCisKK1JPT1RfVEFCTEVfU0laRQk9IDEyOAorUFRSX1RBQkxFX1NJWkUJPSAxMjgKK1BBR0VfVEFCTEVfU0laRQk9IDY0CitST09UX0lOREVYX1NISUZUID0gMjUKK1BUUl9JTkRFWF9TSElGVCAgPSAxOAorUEFHRV9JTkRFWF9TSElGVCA9IDEyCisKKyNpZmRlZiBERUJVRworLyogV2hlbiBkZWJ1Z2dpbmcgdXNlIHJlYWRhYmxlIG5hbWVzIGZvciBsYWJlbHMgKi8KKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBMKG5hbWUpIC5oZWFkLlMuIyNuYW1lCisjZWxzZQorI2RlZmluZSBMKG5hbWUpIC5oZWFkLlMuLyoqL25hbWUKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBMKG5hbWUpIC5MIyNuYW1lCisjZWxzZQorI2RlZmluZSBMKG5hbWUpIC5MLyoqL25hbWUKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBfX0lOSVREQVRBIHN0dWZmIGlzIGEgbm8tb3Agd2hlbiBmdHJhY2Ugb3Iga2dkYiBhcmUgdHVybmVkIG9uICovCisjaWZuZGVmIF9fSU5JVERBVEEKKyNkZWZpbmUgX19JTklUREFUQQkuZGF0YQorI2RlZmluZSBfX0ZJTklUCQkucHJldmlvdXMKKyNlbmRpZgorCisvKiBTZXZlcmFsIG1hY3JvcyB0byBtYWtlIHRoZSB3cml0aW5nIG9mIHN1YnJvdXRpbmVzIGVhc2llcjoKKyAqIC0gZnVuY19zdGFydCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3V0aW5lIHdoaWNoIHNldHVwcyB0aGUgZnJhbWUKKyAqICAgcmVnaXN0ZXIgYW5kIHNhdmVzIHRoZSByZWdpc3RlcnMsIGl0IGFsc28gZGVmaW5lcyBhbm90aGVyIG1hY3JvCisgKiAgIHRvIGF1dG9tYXRpY2FsbHkgcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGFnYWluLgorICogLSBmdW5jX3JldHVybiBtYXJrcyB0aGUgZW5kIG9mIHRoZSByb3V0aW5lIGFuZCBzaW1wbHkgY2FsbHMgdGhlIHByZXBhcmVkCisgKiAgIG1hY3JvIHRvIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCBqdW1wIGJhY2sgdG8gdGhlIGNhbGxlci4KKyAqIC0gZnVuY19kZWZpbmUgZ2VuZXJhdGVzIGFub3RoZXIgbWFjcm8gdG8gYXV0b21hdGljYWxseSBwdXQgYXJndW1lbnRzCisgKiAgIG9udG8gdGhlIHN0YWNrIGNhbGwgdGhlIHN1YnJvdXRpbmUgYW5kIGNsZWFudXAgdGhlIHN0YWNrIGFnYWluLgorICovCisKKy8qIFdpdGhpbiBzdWJyb3V0aW5lcyB0aGVzZSBtYWNyb3MgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBhcmd1bWVudHMKKyAqIG9uIHRoZSBzdGFjay4gV2l0aCBTVEFDSyBzb21lIGFsbG9jYXRlZCBtZW1vcnkgb24gdGhlIHN0YWNrIGNhbiBiZQorICogYWNjZXNzZWQgYW5kIEFSRzAgcG9pbnRzIHRvIHRoZSByZXR1cm4gYWRkcmVzcyAodXNlZCBieSBtbXVfZW5nYWdlKS4KKyAqLworI2RlZmluZQlTVEFDSwklYTZAKHN0YWNrc3RhcnQpCisjZGVmaW5lIEFSRzAJJWE2QCg0KQorI2RlZmluZSBBUkcxCSVhNkAoOCkKKyNkZWZpbmUgQVJHMgklYTZAKDEyKQorI2RlZmluZSBBUkczCSVhNkAoMTYpCisjZGVmaW5lIEFSRzQJJWE2QCgyMCkKKworLm1hY3JvCWZ1bmNfc3RhcnQJbmFtZSxzYXZlcmVncyxzdGFjaz0wCitMKFxuYW1lKToKKwlsaW5rdwklYTYsIy1cc3RhY2sKKwltb3ZlbWwJXHNhdmVyZWdzLCVzcEAtCisuc2V0CXN0YWNrc3RhcnQsLVxzdGFjaworCisubWFjcm8JZnVuY19yZXR1cm5fXG5hbWUKKwltb3ZlbWwJJXNwQCssXHNhdmVyZWdzCisJdW5sawklYTYKKwlydHMKKy5lbmRtCisuZW5kbQorCisubWFjcm8JZnVuY19yZXR1cm4JbmFtZQorCWZ1bmNfcmV0dXJuX1xuYW1lCisuZW5kbQorCisubWFjcm8JZnVuY19jYWxsCW5hbWUKKwlqYnNyCUwoXG5hbWUpCisuZW5kbQorCisubWFjcm8JbW92ZV9zdGFjawlucixhcmcxLGFyZzIsYXJnMyxhcmc0CisuaWYJXG5yCisJbW92ZV9zdGFjawkiKFxuci0xKSIsXGFyZzIsXGFyZzMsXGFyZzQKKwltb3ZlbAlcYXJnMSwlc3BALQorLmVuZGlmCisuZW5kbQorCisubWFjcm8JZnVuY19kZWZpbmUJbmFtZSxucj0wCisubWFjcm8JXG5hbWUJYXJnMSxhcmcyLGFyZzMsYXJnNAorCW1vdmVfc3RhY2sJXG5yLFxhcmcxLFxhcmcyLFxhcmczLFxhcmc0CisJZnVuY19jYWxsCVxuYW1lCisuaWYJXG5yCisJbGVhCSVzcEAoXG5yKjQpLCVzcAorLmVuZGlmCisuZW5kbQorLmVuZG0KKworZnVuY19kZWZpbmUJbW11X21hcCw0CitmdW5jX2RlZmluZQltbXVfbWFwX3R0LDQKK2Z1bmNfZGVmaW5lCW1tdV9maXh1cF9wYWdlX21tdV9jYWNoZSwxCitmdW5jX2RlZmluZQltbXVfdGVtcF9tYXAsMgorZnVuY19kZWZpbmUJbW11X2VuZ2FnZQorZnVuY19kZWZpbmUJbW11X2dldF9yb290X3RhYmxlX2VudHJ5LDEKK2Z1bmNfZGVmaW5lCW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5LDIKK2Z1bmNfZGVmaW5lCW1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeSwyCitmdW5jX2RlZmluZQltbXVfcHJpbnQKK2Z1bmNfZGVmaW5lCWdldF9uZXdfcGFnZQorI2lmIGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pCitmdW5jX2RlZmluZQlzZXRfbGVkcworI2VuZGlmCisKKy5tYWNybwltbXVfbWFwX2VxCWFyZzEsYXJnMixhcmczCisJbW11X21hcAlcYXJnMSxcYXJnMSxcYXJnMixcYXJnMworLmVuZG0KKworLm1hY3JvCWdldF9iaV9yZWNvcmQJcmVjb3JkCisJcGVhCVxyZWNvcmQKKwlmdW5jX2NhbGwJZ2V0X2JpX3JlY29yZAorCWFkZHFsCSM0LCVzcAorLmVuZG0KKworZnVuY19kZWZpbmUJc2VyaWFsX3B1dGMsMQorZnVuY19kZWZpbmUJY29uc29sZV9wdXRjLDEKKworZnVuY19kZWZpbmUJY29uc29sZV9pbml0CitmdW5jX2RlZmluZQljb25zb2xlX3B1dF9zdGF0cworZnVuY19kZWZpbmUJY29uc29sZV9wdXRfcGVuZ3VpbgorZnVuY19kZWZpbmUJY29uc29sZV9wbG90X3BpeGVsLDMKK2Z1bmNfZGVmaW5lCWNvbnNvbGVfc2Nyb2xsCisKKy5tYWNybwlwdXRjCWNoCisjaWYgZGVmaW5lZChDT05TT0xFKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKKwlwZWEJXGNoCisjZW5kaWYKKyNpZmRlZiBDT05TT0xFCisJZnVuY19jYWxsCWNvbnNvbGVfcHV0YworI2VuZGlmCisjaWZkZWYgU0VSSUFMX0RFQlVHCisJZnVuY19jYWxsCXNlcmlhbF9wdXRjCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTlNPTEUpIHx8IGRlZmluZWQoU0VSSUFMX0RFQlVHKQorCWFkZHFsCSM0LCVzcAorI2VuZGlmCisuZW5kbQorCisubWFjcm8JZHB1dGMJY2gKKyNpZmRlZiBERUJVRworCXB1dGMJXGNoCisjZW5kaWYKKy5lbmRtCisKK2Z1bmNfZGVmaW5lCXB1dG4sMQorCisubWFjcm8JZHB1dG4JbnIKKyNpZmRlZiBERUJVRworCXB1dG4JXG5yCisjZW5kaWYKKy5lbmRtCisKKy5tYWNybwlwdXRzCQlzdHJpbmcKKyNpZiBkZWZpbmVkKENPTlNPTEUpIHx8IGRlZmluZWQoU0VSSUFMX0RFQlVHKQorCV9fSU5JVERBVEEKKy5Mc3RyXEA6CisJLnN0cmluZwkiXHN0cmluZyIKKwlfX0ZJTklUCisJcGVhCSVwY0AoLkxzdHJcQCkKKwlmdW5jX2NhbGwJcHV0cworCWFkZHFsCSM0LCVzcAorI2VuZGlmCisuZW5kbQorCisubWFjcm8JZHB1dHMJc3RyaW5nCisjaWZkZWYgREVCVUcKKwlwdXRzCSJcc3RyaW5nIgorI2VuZGlmCisuZW5kbQorCisjZGVmaW5lIGlzX25vdF9hbWlnYShsYWIpIGNtcGwgJk1BQ0hfQU1JR0EsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfYXRhcmkobGFiKSBjbXBsICZNQUNIX0FUQVJJLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X21hYyhsYWIpIGNtcGwgJk1BQ0hfTUFDLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X212bWUxNDcobGFiKSBjbXBsICZNQUNIX01WTUUxNDcsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfbXZtZTE2eChsYWIpIGNtcGwgJk1BQ0hfTVZNRTE2eCwlcGNAKG02OGtfbWFjaHR5cGUpOyBqbmUgbGFiCisjZGVmaW5lIGlzX25vdF9idm1lNjAwMChsYWIpIGNtcGwgJk1BQ0hfQlZNRTYwMDAsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19tdm1lMTQ3KGxhYikgY21wbCAmTUFDSF9NVk1FMTQ3LCVwY0AobTY4a19tYWNodHlwZSk7IGplcSBsYWIKKyNkZWZpbmUgaXNfbXZtZTE2eChsYWIpIGNtcGwgJk1BQ0hfTVZNRTE2eCwlcGNAKG02OGtfbWFjaHR5cGUpOyBqZXEgbGFiCisjZGVmaW5lIGlzX2J2bWU2MDAwKGxhYikgY21wbCAmTUFDSF9CVk1FNjAwMCwlcGNAKG02OGtfbWFjaHR5cGUpOyBqZXEgbGFiCisjZGVmaW5lIGlzX25vdF9ocDMwMChsYWIpIGNtcGwgJk1BQ0hfSFAzMDAsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfYXBvbGxvKGxhYikgY21wbCAmTUFDSF9BUE9MTE8sJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfcTQwKGxhYikgY21wbCAmTUFDSF9RNDAsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3Rfc3VuM3gobGFiKSBjbXBsICZNQUNIX1NVTjNYLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKworI2RlZmluZSBoYXNudF9sZWRzKGxhYikgY21wbCAmTUFDSF9IUDMwMCwlcGNAKG02OGtfbWFjaHR5cGUpOyBcCisJCQlqZXEgNDJmOyBcCisJCQljbXBsICZNQUNIX0FQT0xMTywlcGNAKG02OGtfbWFjaHR5cGUpOyBcCisJCQlqbmUgbGFiIDtcCisJCTQyOlwKKworI2RlZmluZSBpc18wNDBfb3JfMDYwKGxhYikJYnRzdCAmQ1BVVFlQRV8wNDYwLCVwY0AoTChjcHV0eXBlKSszKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfMDQwX29yXzA2MChsYWIpCWJ0c3QgJkNQVVRZUEVfMDQ2MCwlcGNAKEwoY3B1dHlwZSkrMyk7IGplcSBsYWIKKyNkZWZpbmUgaXNfMDQwKGxhYikJCWJ0c3QgJkNQVVRZUEVfMDQwLCVwY0AoTChjcHV0eXBlKSszKTsgam5lIGxhYgorI2RlZmluZSBpc18wNjAobGFiKQkJYnRzdCAmQ1BVVFlQRV8wNjAsJXBjQChMKGNwdXR5cGUpKzMpOyBqbmUgbGFiCisjZGVmaW5lIGlzX25vdF8wNjAobGFiKQkJYnRzdCAmQ1BVVFlQRV8wNjAsJXBjQChMKGNwdXR5cGUpKzMpOyBqZXEgbGFiCisjZGVmaW5lIGlzXzAyMChsYWIpCQlidHN0ICZDUFVUWVBFXzAyMCwlcGNAKEwoY3B1dHlwZSkrMyk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90XzAyMChsYWIpCQlidHN0ICZDUFVUWVBFXzAyMCwlcGNAKEwoY3B1dHlwZSkrMyk7IGplcSBsYWIKKworLyogT24gdGhlIEhQMzAwIHdlIHVzZSB0aGUgb24tYm9hcmQgTEVEcyBmb3IgZGVidWcgb3V0cHV0IGJlZm9yZQorICAgdGhlIGNvbnNvbGUgaXMgcnVubmluZy4gIFdyaXRpbmcgYSAxIGJpdCB0dXJucyB0aGUgY29ycmVzcG9uZGluZyBMRUQKKyAgIF9vZmZfIC0gb24gdGhlIDM0MCBiaXQgNyBpcyB0b3dhcmRzIHRoZSBiYWNrIHBhbmVsIG9mIHRoZSBtYWNoaW5lLiAgKi8KKy5tYWNybwlsZWRzCW1hc2sKKyNpZiBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKQorCWhhc250X2xlZHMoLkxsZWRcQCkKKwlwZWEJXG1hc2sKKwlmdW5jX2NhbGwJc2V0X2xlZHMKKwlhZGRxbAkjNCwlc3AKKy5MbGVkXEA6CisjZW5kaWYKKy5lbmRtCisKKy50ZXh0CitFTlRSWShfc3RleHQpCisvKgorICogVmVyc2lvbiBudW1iZXJzIG9mIHRoZSBib290aW5mbyBpbnRlcmZhY2UKKyAqIFRoZSBhcmVhIGZyb20gX3N0ZXh0IHRvIF9zdGFydCB3aWxsIGxhdGVyIGJlIHVzZWQgYXMga2VybmVsIHBvaW50ZXIgdGFibGUKKyAqLworCWJyYXMJMWYJLyogSnVtcCBvdmVyIGJvb3RpbmZvIHZlcnNpb24gbnVtYmVycyAqLworCisJLmxvbmcJQk9PVElORk9WX01BR0lDCisJLmxvbmcJTUFDSF9BTUlHQSwgQU1JR0FfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfQVRBUkksIEFUQVJJX0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX01WTUUxNDcsIE1WTUUxNDdfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfTVZNRTE2eCwgTVZNRTE2eF9CT09USV9WRVJTSU9OCisJLmxvbmcJTUFDSF9CVk1FNjAwMCwgQlZNRTYwMDBfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfTUFDLCBNQUNfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfUTQwLCBRNDBfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfSFAzMDAsIEhQMzAwX0JPT1RJX1ZFUlNJT04KKwkubG9uZwkwCisxOglqcmEJX19zdGFydAorCisuZXF1CWtlcm5lbF9wZ19kaXIsX3N0ZXh0CisKKy5lcXUJLixfc3RleHQrUEFHRVNJWkUKKworRU5UUlkoX3N0YXJ0KQorCWpyYQlfX3N0YXJ0CitfX0lOSVQKK0VOVFJZKF9fc3RhcnQpCisvKgorICogU2V0dXAgaW5pdGlhbCBzdGFjayBwb2ludGVyCisgKi8KKwlsZWEJJXBjQChfc3RleHQpLCVzcAorCisvKgorICogUmVjb3JkIHRoZSBDUFUgYW5kIG1hY2hpbmUgdHlwZS4KKyAqLworCWdldF9iaV9yZWNvcmQJQklfTUFDSFRZUEUKKwlsZWEJJXBjQChtNjhrX21hY2h0eXBlKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWdldF9iaV9yZWNvcmQJQklfRlBVVFlQRQorCWxlYQklcGNAKG02OGtfZnB1dHlwZSksJWExCisJbW92ZWwJJWEwQCwlYTFACisKKwlnZXRfYmlfcmVjb3JkCUJJX01NVVRZUEUKKwlsZWEJJXBjQChtNjhrX21tdXR5cGUpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorCisJZ2V0X2JpX3JlY29yZAlCSV9DUFVUWVBFCisJbGVhCSVwY0AobTY4a19jcHV0eXBlKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWxlZHMJMHgxCisKKyNpZmRlZiBDT05GSUdfTUFDCisvKgorICogRm9yIE1hY2ludG9zaCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGRpc3BsYXkgcGFyYW1ldGVycyBlYXJseSAoYXQgbGVhc3QKKyAqIHdoaWxlIGRlYnVnZ2luZyBpdCkuCisgKi8KKworCWlzX25vdF9tYWMoTCh0ZXN0X25vdG1hYykpCisKKwlnZXRfYmlfcmVjb3JkCUJJX01BQ19WQUREUgorCWxlYQklcGNAKEwobWFjX3ZpZGVvYmFzZSkpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorCisJZ2V0X2JpX3JlY29yZAlCSV9NQUNfVkRFUFRICisJbGVhCSVwY0AoTChtYWNfdmlkZW9kZXB0aCkpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorCisJZ2V0X2JpX3JlY29yZAlCSV9NQUNfVkRJTQorCWxlYQklcGNAKEwobWFjX2RpbWVuc2lvbnMpKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWdldF9iaV9yZWNvcmQJQklfTUFDX1ZST1cKKwlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorCisjaWZkZWYgTUFDX1NFUklBTF9ERUJVRworCWdldF9iaV9yZWNvcmQJQklfTUFDX1NDQ0JBU0UKKwlsZWEJJXBjQChMKG1hY19zY2NiYXNlKSksJWExCisJbW92ZWwJJWEwQCwlYTFACisjZW5kaWYgLyogTUFDX1NFUklBTF9ERUJVRyAqLworCisjaWYgMAorCS8qCisJICogQ2xlYXIgdGhlIHNjcmVlbgorCSAqLworCWxlYQklcGNAKEwobWFjX3ZpZGVvYmFzZSkpLCVhMAorCW1vdmVsCSVhMEAsJWExCisJbGVhCSVwY0AoTChtYWNfZGltZW5zaW9ucykpLCVhMAorCW1vdmVsCSVhMEAsJWQxCisJc3dhcAklZDEJCS8qICNyb3dzIGlzIGhpZ2ggYnl0ZXMgKi8KKwlhbmRsCSMweEZGRkYsJWQxCS8qIHJvd3MgKi8KKwlzdWJsCSMxMCwlZDEKKwlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMAorbG9vcHkyOgorCW1vdmVsCSVhMEAsJWQwCisJc3VicWwJIzEsJWQwCitsb29weDI6CisJbW92ZWIJIzB4NTUsICVhMUArCisJZGJyYQklZDAsbG9vcHgyCisJZGJyYQklZDEsbG9vcHkyCisjZW5kaWYKKworTCh0ZXN0X25vdG1hYyk6CisjZW5kaWYgLyogQ09ORklHX01BQyAqLworCisKKy8qCisgKiBUaGVyZSBhcmUgdWx0aW1hdGVseSB0d28gcGllY2VzIG9mIGluZm9ybWF0aW9uIHdlIHdhbnQgZm9yIGFsbCBraW5kcyBvZgorICogcHJvY2Vzc29ycyBDcHVUeXBlIGFuZCBDYWNoZUJpdHMuICBUaGUgQ1BVVFlQRSB3YXMgcGFzc2VkIGluIGZyb20gYm9vdGVyCisgKiBhbmQgaXMgY29udmVydGVkIGhlcmUgZnJvbSBhIGJvb3RlciB0eXBlIGRlZmluaXRpb24gdG8gYSBzZXBhcmF0ZSBiaXQKKyAqIG51bWJlciB3aGljaCBhbGxvd3MgZm9yIHRoZSBzdGFuZGFyZCBpc18weDAgbWFjcm8gdGVzdHMuCisgKi8KKwltb3ZlbAklcGNAKG02OGtfY3B1dHlwZSksJWQwCisJLyoKKwkgKiBBc3N1bWUgaXQncyBhbiAwMzAKKwkgKi8KKwljbHJsCSVkMQorCisJLyoKKwkgKiBUZXN0IHRoZSBCb290SW5mbyBjcHV0eXBlIGZvciAwNjAKKwkgKi8KKwlidHN0CSNDUFVCXzY4MDYwLCVkMAorCWplcQkxZgorCWJzZXQJI0NQVVRZUEVfMDYwLCVkMQorCWJzZXQJI0NQVVRZUEVfMDQ2MCwlZDEKKwlqcmEJM2YKKzE6CisJLyoKKwkgKiBUZXN0IHRoZSBCb290SW5mbyBjcHV0eXBlIGZvciAwNDAKKwkgKi8KKwlidHN0CSNDUFVCXzY4MDQwLCVkMAorCWplcQkyZgorCWJzZXQJI0NQVVRZUEVfMDQwLCVkMQorCWJzZXQJI0NQVVRZUEVfMDQ2MCwlZDEKKwlqcmEJM2YKKzI6CisJLyoKKwkgKiBUZXN0IHRoZSBCb290SW5mbyBjcHV0eXBlIGZvciAwMjAKKwkgKi8KKwlidHN0CSNDUFVCXzY4MDIwLCVkMAorCWplcQkzZgorCWJzZXQJI0NQVVRZUEVfMDIwLCVkMQorCWpyYQkzZgorMzoKKwkvKgorCSAqIFJlY29yZCB0aGUgY3B1IHR5cGUKKwkgKi8KKwlsZWEJJXBjQChMKGNwdXR5cGUpKSwlYTAKKwltb3ZlbAklZDEsJWEwQAorCisJLyoKKwkgKiBOT1RFOgorCSAqCisJICogTm93IHRoZSBtYWNyb3MgYXJlIHZhbGlkOgorCSAqCWlzXzA0MF9vcl8wNjAKKwkgKglpc19ub3RfMDQwX29yXzA2MAorCSAqCWlzXzA0MAorCSAqCWlzXzA2MAorCSAqCWlzX25vdF8wNjAKKwkgKi8KKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBjYWNoZSBtb2RlIGZvciBwYWdlcyBob2xkaW5nIE1NVSB0YWJsZXMKKwkgKiBhbmQgZm9yIHN1cGVydmlzb3IgbW9kZSwgdW51c2VkIGZvciAnMDIwIGFuZCAnMDMwCisJICovCisJY2xybAklZDAKKwljbHJsCSVkMQorCisJaXNfbm90XzA0MF9vcl8wNjAoTChzYXZlX2NhY2hldHlwZSkpCisKKwkvKgorCSAqICcwNDAgb3IgJzA2MAorCSAqIGQxIDo9IGNhY2hlYWJsZSB3cml0ZS10aHJvdWdoCisJICogTk9URTogVGhlIDY4MDQwIG1hbnVhbCBzdHJvbmdseSByZWNvbW1lbmRzIG5vbi1jYWNoZWQgZm9yIE1NVSB0YWJsZXMsCisJICogYnV0IHdlIGhhdmUgYmVlbiB1c2luZyB3cml0ZS10aHJvdWdoIHNpbmNlIGF0IGxlYXN0IDIuMC4yOSBzbyBJCisJICogZ3Vlc3MgaXQgaXMgT0suCisJICovCisjaWZkZWYgQ09ORklHXzA2MF9XUklURVRIUk9VR0gKKwkvKgorCSAqIElmIHRoaXMgaXMgYSA2ODA2MCBib2FyZCB1c2luZyBkcml2ZXJzIHdpdGggY2FjaGUgY29oZXJlbmN5CisJICogcHJvYmxlbXMsIHRoZW4gc3VwZXJ2aXNvciBtZW1vcnkgYWNjZXNzZXMgbmVlZCB0byBiZSB3cml0ZS10aHJvdWdoCisJICogYWxzbzsgb3RoZXJ3aXNlLCB3ZSB3YW50IGNvcHliYWNrLgorCSAqLworCisJaXNfbm90XzA2MCgxZikKKwltb3ZlbAkjX1BBR0VfQ0FDSEUwNDBXLCVkMAorCWpyYQlMKHNhdmVfY2FjaGV0eXBlKQorI2VuZGlmIC8qIENPTkZJR18wNjBfV1JJVEVUSFJPVUdIICovCisxOgorCW1vdmV3CSNfUEFHRV9DQUNIRTA0MCwlZDAKKworCW1vdmVsCSNfUEFHRV9DQUNIRTA0MFcsJWQxCisKK0woc2F2ZV9jYWNoZXR5cGUpOgorCS8qIFNhdmUgY2FjaGUgbW9kZSBmb3Igc3VwZXJ2aXNvciBtb2RlIGFuZCBwYWdlIHRhYmxlcworCSAqLworCWxlYQklcGNAKG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUpLCVhMAorCW1vdmVsCSVkMCwlYTBACisJbGVhCSVwY0AobTY4a19wZ3RhYmxlX2NhY2hlbW9kZSksJWEwCisJbW92ZWwJJWQxLCVhMEAKKworLyoKKyAqIHJhaXNlIGludGVycnVwdCBsZXZlbAorICovCisJbW92ZXcJIzB4MjcwMCwlc3IKKworLyoKKyAgIElmIHJ1bm5pbmcgb24gYW4gQXRhcmksIGRldGVybWluZSB0aGUgSS9PIGJhc2Ugb2YgdGhlCisgICBzZXJpYWwgcG9ydCBhbmQgdGVzdCBpZiB3ZSBhcmUgcnVubmluZyBvbiBhIE1lZHVzYSBvciBIYWRlcy4KKyAgIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgaGVyZSwgYmVjYXVzZSBvbiB0aGUgSGFkZXMgdGhlIHNlcmlhbAorICAgcG9ydCBpcyBvbmx5IGFjY2Vzc2libGUgaW4gdGhlIGhpZ2ggSS9PIG1lbW9yeSBhcmVhLgorCisgICBUaGUgdGVzdCB3aGV0aGVyIGl0IGlzIGEgTWVkdXNhIGlzIGRvbmUgYnkgd3JpdGluZyB0byB0aGUgYnl0ZSBhdAorICAgcGh5cy4gMHgwLiBUaGlzIHNob3VsZCByZXN1bHQgaW4gYSBidXMgZXJyb3Igb24gYWxsIG90aGVyIG1hY2hpbmVzLgorCisgICAuLi5zaG91bGQsIGJ1dCBkb2Vzbid0LiBUaGUgQWZ0ZXJidXJuZXIwNDAgZm9yIHRoZSBGYWxjb24gaGFzIHRoZQorICAgc2FtZSBiZWhhdmlvdXIgKDB4MC4uMHg3IGFyZSBubyBST00gc2hhZG93KS4gU28gd2UgaGF2ZSB0byBkbworICAgYW5vdGhlciB0ZXN0IHRvIGRpc3Rpbmd1aXNoIE1lZHVzYSBhbmQgQUIwNDAuIFRoaXMgaXMgYQorICAgcmVhZCBhdHRlbXB0IGZvciAweDAwZmY4MmZlIHBoeXMuIHRoYXQgc2hvdWxkIGJ1cyBlcnJvciBvbiBhIEZhbGNvbgorICAgKCtBQjA0MCksIGJ1dCBpcyBpbiB0aGUgcmFuZ2Ugd2hlcmUgdGhlIE1lZHVzYSBhbHdheXMgYXNzZXJ0cyBEVEFDSy4KKworICAgVGhlIHRlc3QgZm9yIHRoZSBIYWRlcyBpcyBkb25lIGJ5IHJlYWRpbmcgYWRkcmVzcyAweGIwMDAwMDAwLiBUaGlzCisgICBzaG91bGQgZ2l2ZSBhIGJ1cyBlcnJvciBvbiB0aGUgTWVkdXNhLgorICovCisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKwlpc19ub3RfYXRhcmkoTChub3R5cGV0ZXN0KSkKKworCS8qIGdldCBzcGVjaWFsIG1hY2hpbmUgdHlwZSAoTWVkdXNhL0hhZGVzL0FCNDApICovCisJbW92ZXEJIzAsJWQzIC8qIGRlZmF1bHQgaWYgdGFnIGRvZXNuJ3QgZXhpc3QgKi8KKwlnZXRfYmlfcmVjb3JkCUJJX0FUQVJJX01DSF9UWVBFCisJdHN0bAklZDAKKwlqYm1pCTFmCisJbW92ZWwJJWEwQCwlZDMKKwlsZWEJJXBjQChhdGFyaV9tY2hfdHlwZSksJWEwCisJbW92ZWwJJWQzLCVhMEAKKzE6CisJLyogT24gdGhlIEhhZGVzLCB0aGUgaW9iYXNlIG11c3QgYmUgc2V0IHVwIGJlZm9yZSBvcGVuaW5nIHRoZQorCSAqIHNlcmlhbCBwb3J0LiBUaGVyZSBhcmUgbm8gSS9PIHJlZ3MgYXQgMHgwMGZmeHh4eCBhdCBhbGwuICovCisJbW92ZXEJIzAsJWQwCisJY21wbAkjQVRBUklfTUFDSF9IQURFUywlZDMKKwlqYm5lCTFmCisJbW92ZWwJIzB4ZmYwMDAwMDAsJWQwCQkvKiBIYWRlcyBJL08gYmFzZSBhZGRyOiAweGZmMDAwMDAwICovCisxOglsZWEgICAgICVwY0AoTChpb2Jhc2UpKSwlYTAKKwltb3ZlbCAgICVkMCwlYTBACisKK0wobm90eXBldGVzdCk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19WTUUKKwlpc19tdm1lMTQ3KEwoZ2V0dm1ldHlwZSkpCisJaXNfYnZtZTYwMDAoTChnZXR2bWV0eXBlKSkKKwlpc19ub3RfbXZtZTE2eChMKGd2dGRvbmUpKQorCisJLyogU2VlIGlmIHRoZSBsb2FkZXIgaGFzIHNwZWNpZmllZCB0aGUgQklfVk1FX1RZUEUgdGFnLiAgUmVjZW50CisJICogdmVyc2lvbnMgb2YgVk1FTElMTyBhbmQgVEZUUExJTE8gZG8gdGhpcy4gIFdlIGhhdmUgdG8gZG8gdGhpcworCSAqIGVhcmx5IHNvIHdlIGtub3cgaG93IHRvIGhhbmRsZSBjb25zb2xlIG91dHB1dC4gIElmIHRoZSB0YWcKKwkgKiBkb2Vzbid0IGV4aXN0IHRoZW4gd2UgdXNlIHRoZSBCdWcgZm9yIG91dHB1dCBvbiBNVk1FMTZ4LgorCSAqLworTChnZXR2bWV0eXBlKToKKwlnZXRfYmlfcmVjb3JkCUJJX1ZNRV9UWVBFCisJdHN0bAklZDAKKwlqYm1pCTFmCisJbW92ZWwJJWEwQCwlZDMKKwlsZWEJJXBjQCh2bWVfYnJkdHlwZSksJWEwCisJbW92ZWwJJWQzLCVhMEAKKzE6CisjaWZkZWYgQ09ORklHX01WTUUxNngKKwlpc19ub3RfbXZtZTE2eChMKGd2dGRvbmUpKQorCisJLyogTmVlZCB0byBnZXQgdGhlIEJSRF9JRCBpbmZvIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAxNjIsIDE2NywKKwkgKiBldGMuICBUaGlzIGlzIGF2YWlsYWJsZSBhcyBhIEJJX1ZNRV9CUkRJTkZPIHRhZyB3aXRoIGxhdGVyCisJICogdmVyc2lvbnMgb2YgVk1FTElMTyBhbmQgVEZUUExJTE8sIG90aGVyd2lzZSB3ZSBjYWxsIHRoZSBCdWcuCisJICovCisJZ2V0X2JpX3JlY29yZAlCSV9WTUVfQlJESU5GTworCXRzdGwJJWQwCisJanBsCTFmCisKKwkvKiBHZXQgcG9pbnRlciB0byBib2FyZCBJRCBkYXRhIGZyb20gQnVnICovCisJbW92ZWwJJWQyLCVzcEAtCisJdHJhcAkjMTUKKwkud29yZAkweDcwCQkvKiB0cmFwIDB4NzAgLSAuQlJEX0lEICovCisJbW92ZWwJJXNwQCssJWEwCisxOgorCWxlYQklcGNAKG12bWVfYmRpZCksJWExCisJLyogU3RydWN0dXJlIGlzIDMyIGJ5dGVzIGxvbmcgKi8KKwltb3ZlbAklYTBAKywlYTFAKworCW1vdmVsCSVhMEArLCVhMUArCisJbW92ZWwJJWEwQCssJWExQCsKKwltb3ZlbAklYTBAKywlYTFAKworCW1vdmVsCSVhMEArLCVhMUArCisJbW92ZWwJJWEwQCssJWExQCsKKwltb3ZlbAklYTBAKywlYTFAKworCW1vdmVsCSVhMEArLCVhMUArCisjZW5kaWYKKworTChndnRkb25lKToKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSFAzMDAKKwlpc19ub3RfaHAzMDAoTChub3RocCkpCisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgZm9yIHNlcmlhbCBkZWJ1Z2dpbmcgKi8KKwlnZXRfYmlfcmVjb3JkCUJJX0hQMzAwX1VBUlRfQUREUgorCXRzdGwJJWQwCisJamJtaQkxZgorCW1vdmVsCSVhMEAsJWQzCisJbGVhCSVwY0AoTCh1YXJ0YmFzZSkpLCVhMAorCW1vdmVsCSVkMywlYTBACisJZ2V0X2JpX3JlY29yZAlCSV9IUDMwMF9VQVJUX1NDT0RFCisJdHN0bAklZDAKKwlqYm1pCTFmCisJbW92ZWwJJWEwQCwlZDMKKwlsZWEJJXBjQChMKHVhcnRfc2NvZGUpKSwlYTAKKwltb3ZlbAklZDMsJWEwQAorMToKK0wobm90aHApOgorI2VuZGlmCisKKy8qCisgKiBJbml0aWFsaXplIHNlcmlhbCBwb3J0CisgKi8KKwlqYnNyCUwoc2VyaWFsX2luaXQpCisKKy8qCisgKiBJbml0aWFsaXplIGNvbnNvbGUKKyAqLworI2lmZGVmIENPTkZJR19NQUMKKwlpc19ub3RfbWFjKEwobm9jb24pKQorI2lmZGVmIENPTlNPTEUKKwljb25zb2xlX2luaXQKKyNpZmRlZiBDT05TT0xFX1BFTkdVSU4KKwljb25zb2xlX3B1dF9wZW5ndWluCisjZW5kaWYJLyogQ09OU09MRV9QRU5HVUlOICovCisJY29uc29sZV9wdXRfc3RhdHMKKyNlbmRpZgkvKiBDT05TT0xFICovCitMKG5vY29uKToKKyNlbmRpZgkvKiBDT05GSUdfTUFDICovCisKKworCXB1dGMJJ1xuJworCXB1dGMJJ0EnCisJbGVkcwkweDIKKwlkcHV0bgklcGNAKEwoY3B1dHlwZSkpCisJZHB1dG4JJXBjQChtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlKQorCWRwdXRuCSVwY0AobTY4a19wZ3RhYmxlX2NhY2hlbW9kZSkKKwlkcHV0YwknXG4nCisKKy8qCisgKiBTYXZlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2Yga2VybmVsCisgKi8KKwlsZWEJJXBjQChMKHBoeXNfa2VybmVsX3N0YXJ0KSksJWEwCisJbGVhCSVwY0AoX3N0ZXh0KSwlYTEKKwlzdWJsCSNfc3RleHQsJWExCisJYWRkbAkjUEFHRV9PRkZTRVQsJWExCisJbW92ZWwJJWExLCVhMEAKKworCXB1dGMJJ0InCisKKwlsZWRzCTB4NAorCisvKgorICoJbW11X2luaXQKKyAqCisgKglUaGlzIGJsb2NrIG9mIGNvZGUgZG9lcyB3aGF0J3MgbmVjZXNzYXJ5IHRvIG1hcCBpbiB0aGUgdmFyaW91cyBraW5kcworICoJb2YgbWFjaGluZXMgZm9yIGV4ZWN1dGlvbiBvZiBMaW51eC4KKyAqCUZpcnN0IG1hcCB0aGUgZmlyc3QgNCBNQiBvZiBrZXJuZWwgY29kZSAmIGRhdGEKKyAqLworCisJbW11X21hcAkjUEFHRV9PRkZTRVQsJXBjQChMKHBoeXNfa2VybmVsX3N0YXJ0KSksIzQqMTAyNCoxMDI0LFwKKwkJJXBjQChtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlKQorCisJcHV0YwknQycKKworI2lmZGVmIENPTkZJR19BTUlHQQorCitMKG1tdV9pbml0X2FtaWdhKToKKworCWlzX25vdF9hbWlnYShMKG1tdV9pbml0X25vdF9hbWlnYSkpCisvKgorICogbW11X2luaXRfYW1pZ2EKKyAqLworCisJcHV0YwknRCcKKworCWlzX25vdF8wNDBfb3JfMDYwKDFmKQorCisJLyoKKwkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqLworCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKwkvKgorCSAqIE1hcCB0aGUgWm9ycm8gSUlJIEkvTyBzcGFjZSB3aXRoIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9uCisJICogZm9yIGZyYW1lIGJ1ZmZlciBtZW1vcnkgZXRjLgorCSAqLworCW1tdV9tYXBfdHQJIzEsIzB4NDAwMDAwMDAsIzB4MjAwMDAwMDAsI19QQUdFX05PQ0FDSEVfUworCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKKzE6CisJLyoKKwkgKiAwMzA6CU1hcCB0aGUgMzJNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqLworCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAyMDAwMDAwLCNfUEFHRV9OT0NBQ0hFMDMwCisJbW11X21hcF90dAkjMSwjMHg0MDAwMDAwMCwjMHgyMDAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAorCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobW11X2luaXRfbm90X2FtaWdhKToKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FUQVJJCisKK0wobW11X2luaXRfYXRhcmkpOgorCisJaXNfbm90X2F0YXJpKEwobW11X2luaXRfbm90X2F0YXJpKSkKKworCXB1dGMJJ0UnCisKKy8qIE9uIHRoZSBBdGFyaSwgd2UgbWFwIHRoZSBJL08gcmVnaW9uIChwaHlzLiAweDAwZmZ4eHh4KSBieSBtYXBwaW5nCisgICB0aGUgbGFzdCAxNiBNQiBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIGZpcnN0IDE2IE1CIChpLmUuCisgICAweGZmeHh4eHh4IC0+IDB4MDB4eHh4eHgpLiBGb3IgdGhpcywgYW4gYWRkaXRpb25hbCBwb2ludGVyIHRhYmxlIGlzCisgICBuZWVkZWQuIEkvTyByYW5nZXMgYXJlIG1hcmtlZCBub24tY2FjaGFibGUuCisKKyAgIEZvciB0aGUgTWVkdXNhIGl0IGlzIGJldHRlciB0byBtYXAgdGhlIEkvTyByZWdpb24gdHJhbnNwYXJlbnRseQorICAgKGkuZS4gMHhmZnh4eHh4eCAtPiAweGZmeHh4eHh4KSwgYmVjYXVzZSBzb21lIEkvTyByZWdpc3RlcnMgYXJlCisgICBhY2Nlc3NpYmxlIG9ubHkgaW4gdGhlIGhpZ2ggYXJlYS4KKworICAgT24gdGhlIEhhZGVzIGFsbCBJL08gcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgaW4gdGhlIGhpZ2gKKyAgIGFyZWEuCisqLworCisJLyogSS9PIGJhc2UgYWRkciBmb3Igbm9uLU1lZHVzYSwgbm9uLUhhZGVzOiAweDAwMDAwMDAwICovCisJbW92ZXEJIzAsJWQwCisJbW92ZWwJJXBjQChhdGFyaV9tY2hfdHlwZSksJWQzCisJY21wbAkjQVRBUklfTUFDSF9NRURVU0EsJWQzCisJamJlcQkyZgorCWNtcGwJI0FUQVJJX01BQ0hfSEFERVMsJWQzCisJamJuZQkxZgorMjoJbW92ZWwJIzB4ZmYwMDAwMDAsJWQwIC8qIE1lZHVzYS9IYWRlcyBiYXNlIGFkZHI6IDB4ZmYwMDAwMDAgKi8KKzE6CW1vdmVsCSVkMCwlZDMKKworCWlzXzA0MF9vcl8wNjAoTChzcGF0YTY4MDQwKSkKKworCS8qIE1hcCBldmVyeXRoaW5nIG5vbi1jYWNoZWFibGUsIHRob3VnaCBub3QgYWxsIHBhcnRzIHJlYWxseQorCSAqIG5lZWQgdG8gZGlzYWJsZSBjYWNoZXMgKGNydWNpYWwgb25seSBmb3IgMHhmZjgwMDAuLjB4ZmZmZmZmCisJICogKHN0YW5kYXJkIEkvTykgYW5kIDB4ZjAwMDAwLi4weGYzZmZmZiAoSURFKSkuIFRoZSByZW1haW5kZXIKKwkgKiBpc24ndCByZWFsbHkgdXNlZCwgZXhjZXB0IGZvciBzb21ldGltZXMgcGVla2luZyBpbnRvIHRoZQorCSAqIFJPTXMgKG1pcnJvciBhdCBwaHlzLiAweDApLCBzbyBjYWNoaW5nIGlzbid0IG5lY2Vzc2FyeSBmb3IKKwkgKiB0aGlzLiAqLworCW1tdV9tYXAJIzB4ZmYwMDAwMDAsJWQzLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFMDMwCisKKwlqYnJhCUwobW11X2luaXRfZG9uZSkKKworTChzcGF0YTY4MDQwKToKKworCW1tdV9tYXAJIzB4ZmYwMDAwMDAsJWQzLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG1tdV9pbml0X25vdF9hdGFyaSk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19RNDAKKwlpc19ub3RfcTQwKEwobm90cTQwKSkKKwkvKgorCSAqIGFkZCB0cmFuc3BhcmVudCBtYXBwaW5nIGZvciAweGZmMDAgMDAwMCAtIDB4ZmZmZiBmZmZmCisJICogbm9uLWNhY2hlZCBzZXJpYWxpemVkIGV0Yy4uCisJICogdGhpcyBpbmNsdWRlcyBtYXN0ZXIgY2hpcCwgREFDLCBSVEMgYW5kIElTQSBwb3J0cworCSAqIDB4ZmUwMDAwMDAtMHhmZWZmZmZmZiBpcyBmb3Igc2NyZWVuIGFuZCBST00KKwkgKi8KKworCXB1dGMgICAgJ1EnCisKKwltbXVfbWFwX3R0CSMwLCMweGZlMDAwMDAwLCMweDAxMDAwMDAwLCNfUEFHRV9DQUNIRTA0MFcKKwltbXVfbWFwX3R0CSMxLCMweGZmMDAwMDAwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdHE0MCk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IUDMwMAorCWlzX25vdF9ocDMwMChMKG5vdGhwMzAwKSkKKworCS8qIE9uIHRoZSBIUDMwMCwgd2UgbWFwIHRoZSBST00sIElOVElPIGFuZCBESU8gcmVnaW9ucyAocGh5cy4gMHgwMHh4eHh4eCkKKwkgKiBieSBtYXBwaW5nIDMyTUIgKG9uIDAyMC8wMzApIG9yIDE2IE1CIChvbiAwNDApIGZyb20gMHhmMHh4eHh4eCAtPiAweDAweHh4eHh4KS4KKwkgKiBUaGUgUk9NIG1hcHBpbmcgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIExFRHMgYXJlIG1hcHBlZCB0aGVyZSB0b28uCisJICovCisKKwlpc18wNDAoMWYpCisKKwkvKgorCSAqIDAzMDogTWFwIHRoZSAzMk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXB0byBsb2dpY2FsIDB4ZjAwMC4wMDAwCisJICovCisJbW11X21hcAkjMHhmMDAwMDAwMCwjMCwjMHgwMjAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAorCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKKzE6CisJLyoKKwkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweGYwMDAuMDAwMAorCSAqLworCW1tdV9tYXAgIzB4ZjAwMDAwMDAsIzAsIzB4MDEwMDAwMDAsI19QQUdFX05PQ0FDSEVfUworCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobm90aHAzMDApOgorI2VuZGlmIC8qIENPTkZJR19IUDMwMCAqLworCisjaWZkZWYgQ09ORklHX01WTUUxNDcKKworCWlzX25vdF9tdm1lMTQ3KEwobm90MTQ3KSkKKworCS8qCisJICogT24gTVZNRTE0NyB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBrZXJuZWwgcGFnZSB0YWJsZXMgZm9yCisJICogNE1CIG9mIFJBTSBhdCBhZGRyZXNzIDAsIHNvIG5vdyBuZWVkIHRvIGRvIGEgdHJhbnNwYXJlbnQKKwkgKiBtYXBwaW5nIG9mIHRoZSB0b3Agb2YgbWVtb3J5IHNwYWNlLiAgTWFrZSBpdCAwLjVHQnl0ZSBmb3Igbm93LAorCSAqIHNvIHdlIGNhbiBhY2Nlc3Mgb24tYm9hcmQgaS9vIGFyZWFzLgorCSAqLworCisJbW11X21hcF90dAkjMSwjMHhlMDAwMDAwMCwjMHgyMDAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAorCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobm90MTQ3KToKKyNlbmRpZiAvKiBDT05GSUdfTVZNRTE0NyAqLworCisjaWZkZWYgQ09ORklHX01WTUUxNngKKworCWlzX25vdF9tdm1lMTZ4KEwobm90MTZ4KSkKKworCS8qCisJICogT24gTVZNRTE2eCB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBrZXJuZWwgcGFnZSB0YWJsZXMgZm9yCisJICogNE1CIG9mIFJBTSBhdCBhZGRyZXNzIDAsIHNvIG5vdyBuZWVkIHRvIGRvIGEgdHJhbnNwYXJlbnQKKwkgKiBtYXBwaW5nIG9mIHRoZSB0b3Agb2YgbWVtb3J5IHNwYWNlLiAgTWFrZSBpdCAwLjVHQnl0ZSBmb3Igbm93LgorCSAqIFN1cGVydmlzb3Igb25seSBhY2Nlc3MsIHNvIHRyYW5zcGFyZW50IG1hcHBpbmcgZG9lc24ndAorCSAqIGNsYXNoIHdpdGggVXNlciBjb2RlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKwkgKiB0aGlzIGNvdmVycyBJTyBkZXZpY2VzLCBQUk9NIGFuZCBTUkFNLiAgVGhlIFBST00gYW5kIFNSQU0KKwkgKiBtYXBwaW5nIGlzIG5lZWRlZCB0byBhbGxvdyAxNjdCdWcgdG8gcnVuLgorCSAqIElPIGlzIGluIHRoZSByYW5nZSAweGZmZjAwMDAwIHRvIDB4ZmZmZWZmZmYuCisJICogUFJPTSBpcyAweGZmODAwMDAwLT4weGZmYmZmZmZmIGFuZCBTUkFNIGlzCisJICogMHhmZmUwMDAwMC0+MHhmZmUxZmZmZi4KKwkgKi8KKworCW1tdV9tYXBfdHQJIzEsIzB4ZTAwMDAwMDAsIzB4MjAwMDAwMDAsI19QQUdFX05PQ0FDSEVfUworCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobm90MTZ4KToKKyNlbmRpZgkvKiBDT05GSUdfTVZNRTE2MiB8IENPTkZJR19NVk1FMTY3ICovCisKKyNpZmRlZiBDT05GSUdfQlZNRTYwMDAKKworCWlzX25vdF9idm1lNjAwMChMKG5vdDYwMDApKQorCisJLyoKKwkgKiBPbiBCVk1FNjAwMCB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBrZXJuZWwgcGFnZSB0YWJsZXMgZm9yCisJICogNE1CIG9mIFJBTSBhdCBhZGRyZXNzIDAsIHNvIG5vdyBuZWVkIHRvIGRvIGEgdHJhbnNwYXJlbnQKKwkgKiBtYXBwaW5nIG9mIHRoZSB0b3Agb2YgbWVtb3J5IHNwYWNlLiAgTWFrZSBpdCAwLjVHQnl0ZSBmb3Igbm93LAorCSAqIHNvIHdlIGNhbiBhY2Nlc3Mgb24tYm9hcmQgaS9vIGFyZWFzLgorCSAqIFN1cGVydmlzb3Igb25seSBhY2Nlc3MsIHNvIHRyYW5zcGFyZW50IG1hcHBpbmcgZG9lc24ndAorCSAqIGNsYXNoIHdpdGggVXNlciBjb2RlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKwkgKi8KKworCW1tdV9tYXBfdHQJIzEsIzB4ZTAwMDAwMDAsIzB4MjAwMDAwMDAsI19QQUdFX05PQ0FDSEVfUworCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobm90NjAwMCk6CisjZW5kaWYgLyogQ09ORklHX0JWTUU2MDAwICovCisKKy8qCisgKiBtbXVfaW5pdF9tYWMKKyAqCisgKiBUaGUgTWFjaW50b3NoIG1hcHBpbmdzIGFyZSBsZXNzIGNsZWFyLgorICoKKyAqIEV2ZW4gYXMgb2YgdGhpcyB3cml0aW5nLCBpdCBpcyB1bmNsZWFyIGhvdyB0aGUKKyAqIE1hY2ludG9zaCBtYXBwaW5ncyB3aWxsIGJlIGRvbmUuICBIb3dldmVyLCBhcworICogdGhlIGZpcnN0IGF1dGhvciBvZiB0aGlzIGNvZGUgSSdtIHByb3Bvc2luZyB0aGUKKyAqIGZvbGxvd2luZyBtb2RlbDoKKyAqCisgKiBNYXAgdGhlIGtlcm5lbCAodGhhdCdzIGFscmVhZHkgZG9uZSksCisgKiBNYXAgdGhlIEkvTyAob24gbW9zdCBtYWNoaW5lcyB0aGF0J3MgdGhlCisgKiAweDUwMDAuMDAwMCAuLi4gMHg1MzAwLjAwMDAgcmFuZ2UsCisgKiBNYXAgdGhlIHZpZGVvIGZyYW1lIGJ1ZmZlciB1c2luZyBhcyBmZXcgcGFnZXMKKyAqIGFzIGFic29sdXRlbHkgKHRoaXMgcmVxdWlyZW1lbnQgbW9zdGx5IHN0ZW1zIGZyb20KKyAqIHRoZSBmYWN0IHRoYXQgd2hlbiB0aGUgZnJhbWUgYnVmZmVyIGlzIGF0CisgKiAweDAwMDAuMDAwMCB0aGVuIHdlIGtub3cgdGhlcmUgaXMgdmFsaWQgUkFNIGp1c3QKKyAqIGFib3ZlIHRoZSBzY3JlZW4gdGhhdCB3ZSBkb24ndCB3YW50IHRvIHdhc3RlISkuCisgKgorICogQnkgdGhlIHdheSwgaWYgdGhlIGZyYW1lIGJ1ZmZlciBpcyBhdCAweDAwMDAuMDAwMAorICogdGhlbiB0aGUgTWFjaW50b3NoIGlzIGtub3duIGFzIGFuIFJCViBiYXNlZCBNYWMuCisgKgorICogQnkgdGhlIHdheSAyLCB0aGUgY29kZSBjdXJyZW50bHkgbWFwcyBpbiBhIGJ1bmNoIG9mCisgKiByZWdpb25zLiAgQnV0IEknZCBsaWtlIHRvIGN1dCB0aGF0IG91dC4gIChBbmQgbW92ZSBtb3N0CisgKiBvZiB0aGUgbWFwcGluZ3MgdXAgaW50byB0aGUga2VybmVsIHByb3BlciAuLi4gb3Igb25seQorICogbWFwIHdoYXQncyBuZWNlc3NhcnkuKQorICovCisKKyNpZmRlZiBDT05GSUdfTUFDCisKK0wobW11X2luaXRfbWFjKToKKworCWlzX25vdF9tYWMoTChtbXVfaW5pdF9ub3RfbWFjKSkKKworCXB1dGMJJ0YnCisKKwlpc19ub3RfMDQwX29yXzA2MCgxZikKKworCW1vdmVxCSNfUEFHRV9OT0NBQ0hFX1MsJWQzCisJamJyYQkyZgorMToKKwltb3ZlcQkjX1BBR0VfTk9DQUNIRTAzMCwlZDMKKzI6CisJLyoKKwkgKiBNYWMgTm90ZTogc2NyZWVuIGFkZHJlc3Mgb2YgbG9naWNhbCAweEYwMDAuMDAwMCAtPiA8c2NyZWVuIHBoeXNpY2FsPgorCSAqCSAgICAgd2Ugc2ltcGx5IG1hcCB0aGUgNE1CIHRoYXQgY29udGFpbnMgdGhlIHZpZGVvbWVtCisJICovCisKKwltb3ZlbAkjVklERU9NRU1NQVNLLCVkMAorCWFuZGwJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlZDAKKworCW1tdV9tYXAJCSNWSURFT01FTUJBU0UsJWQwLCNWSURFT01FTVNJWkUsJWQzCisJLyogUk9NIGZyb20gNDAwMCAwMDAwIHRvIDQyMDAgMDAwMCAob25seSBmb3IgbWFjX3Jlc2V0KCkpICovCisJbW11X21hcF9lcQkjMHg0MDAwMDAwMCwjMHgwMjAwMDAwMCwlZDMKKwkvKiBJTyBkZXZpY2VzIChpbmNsLiBzZXJpYWwgcG9ydCkgZnJvbSA1MDAwIDAwMDAgdG8gNTMwMCAwMDAwICovCisJbW11X21hcF9lcQkjMHg1MDAwMDAwMCwjMHgwMzAwMDAwMCwlZDMKKwkvKiBOdWJ1cyBzbG90IHNwYWNlICh2aWRlbyBhdCAweEYwMDAwMDAwLCByb20gYXQgMHhGMEY4MDAwMCkgKi8KKwltbXVfbWFwX3R0CSMxLCMweGY4MDAwMDAwLCMweDA4MDAwMDAwLCVkMworCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0wobW11X2luaXRfbm90X21hYyk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVU4zWAorCWlzX25vdF9zdW4zeChMKG5vdHN1bjN4KSkKKworCS8qIG9oLCB0aGUgcGFpbi4uICBXZSdyZSBnb25uYSB3YW50IHRoZSBwcm9tIGNvZGUgYWZ0ZXIKKwkgKiBzdGFydGluZyB0aGUgTU1VLCBzbyB3ZSBjb3B5IHRoZSBtYXBwaW5ncywgdHJhbnNsYXRpbmcKKwkgKiBmcm9tIDhrIC0+IDRrIHBhZ2VzIGFzIHdlIGdvLgorCSAqLworCisJLyogY29weSBtYXBzIGZyb20gMHhmZWUwMDAwMCB0byAweGZmMDAwMDAwICovCisJbW92ZWwJIzB4ZmVlMDAwMDAsICVkMAorCW1vdmVxCSNST09UX0lOREVYX1NISUZULCAlZDEKKwlsc3JsCSVkMSwlZDAKKwltbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnkJJWQwCisKKwltb3ZlbAkjMHhmZWUwMDAwMCwgJWQwCisJbW92ZXEJI1BUUl9JTkRFWF9TSElGVCwgJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUFRSX1RBQkxFX1NJWkUtMSwgJWQwCisJbW11X2dldF9wdHJfdGFibGVfZW50cnkJCSVhMCwlZDAKKworCW1vdmVsCSMweGZlZTAwMDAwLCAlZDAKKwltb3ZlcQkjUEFHRV9JTkRFWF9TSElGVCwgJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUEFHRV9UQUJMRV9TSVpFLTEsICVkMAorCW1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeQklYTAsJWQwCisKKwkvKiB0aGlzIGlzIHdoZXJlIHRoZSBwcm9tIHBhZ2UgdGFibGUgbGl2ZXMgKi8KKwltb3ZlbAkweGZlZmUwMGQ0LCAlYTEKKwltb3ZlbAklYTFALCAlYTEKKworCW1vdmVsCSMoKDB4MjAwMDAwID4+IDEzKS0xKSwgJWQxCisKKzE6CisJbW92ZWwJJWExQCssICVkMworCW1vdmVsCSVkMywlYTBAKworCWFkZGwJIzB4MTAwMCwlZDMKKwltb3ZlbAklZDMsJWEwQCsKKworCWRicmEJJWQxLDFiCisKKwkvKiBzZXR1cCB0dDEgZm9yIEkvTyAqLworCW1tdV9tYXBfdHQJIzEsIzB4NDAwMDAwMDAsIzB4NDAwMDAwMDAsI19QQUdFX05PQ0FDSEVfUworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdHN1bjN4KToKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FQT0xMTworCWlzX25vdF9hcG9sbG8oTChub3RhcG9sbG8pKQorCisJcHV0YwknUCcKKwltbXVfbWFwICAgICAgICAgIzB4ODAwMDAwMDAsIzAsIzB4MDIwMDAwMDAsI19QQUdFX05PQ0FDSEUwMzAKKworTChub3RhcG9sbG8pOgorCWpicmEJTChtbXVfaW5pdF9kb25lKQorI2VuZGlmCisKK0wobW11X2luaXRfZG9uZSk6CisKKwlwdXRjCSdHJworCWxlZHMJMHg4CisKKy8qCisgKiBtbXVfZml4dXAKKyAqCisgKiBPbiB0aGUgMDQwIGNsYXNzIG1hY2hpbmVzLCBhbGwgcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlCisgKiBtbXUgaGF2ZSB0byBiZSBmaXhlZCB1cC4gQWNjb3JkaW5nIHRvIE1vdG9yb2xhLCBwYWdlcyBob2xkaW5nIG1tdQorICogdGFibGVzIHNob3VsZCBiZSBub24tY2FjaGVhYmxlIG9uIGEgJzA0MCBhbmQgd3JpdGUtdGhyb3VnaCBvbiBhCisgKiAnMDYwLiBCdXQgYW5hbHlzaXMgb2YgdGhlIHJlYXNvbnMgZm9yIHRoaXMsIGFuZCBwcmFjdGljYWwKKyAqIGV4cGVyaWVuY2UsIHNob3dlZCB0aGF0IHdyaXRlLXRocm91Z2ggYWxzbyB3b3JrcyBvbiBhICcwNDAuCisgKgorICogQWxsb2NhdGVkIG1lbW9yeSBzbyBmYXIgZ29lcyBmcm9tIGtlcm5lbF9lbmQgdG8gbWVtb3J5X3N0YXJ0IHRoYXQKKyAqIGlzIHVzZWQgZm9yIGFsbCBraW5kIG9mIHRhYmxlcywgZm9yIHRoYXQgdGhlIGNhY2hlIGF0dHJpYnV0ZXMKKyAqIGFyZSBub3cgZml4ZWQuCisgKi8KK0wobW11X2ZpeHVwKToKKworCWlzX25vdF8wNDBfb3JfMDYwKEwobW11X2ZpeHVwX2RvbmUpKQorCisjaWZkZWYgTU1VX05PQ0FDSEVfS0VSTkVMCisJamJyYQlMKG1tdV9maXh1cF9kb25lKQorI2VuZGlmCisKKwkvKiBmaXJzdCBmaXggdGhlIHBhZ2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBrZXJuZWwsIHRoYXQKKwkgKiBjb250YWlucyBhbHNvIGtlcm5lbF9wZ19kaXIuCisJICovCisJbW92ZWwJJXBjQChMKHBoeXNfa2VybmVsX3N0YXJ0KSksJWQwCisJc3VibAkjUEFHRV9PRkZTRVQsJWQwCisJbGVhCSVwY0AoX3N0ZXh0KSwlYTAKKwlzdWJsCSVkMCwlYTAKKwltbXVfZml4dXBfcGFnZV9tbXVfY2FjaGUJJWEwCisKKwltb3ZlbAklcGNAKEwoa2VybmVsX2VuZCkpLCVhMAorCXN1YmwJJWQwLCVhMAorCW1vdmVsCSVwY0AoTChtZW1vcnlfc3RhcnQpKSwlYTEKKwlzdWJsCSVkMCwlYTEKKwlicmEJMmYKKzE6CisJbW11X2ZpeHVwX3BhZ2VfbW11X2NhY2hlCSVhMAorCWFkZHcJI1BBR0VTSVpFLCVhMAorMjoKKwljbXBsCSVhMCwlYTEKKwlqZ3QJMWIKKworTChtbXVfZml4dXBfZG9uZSk6CisKKyNpZmRlZiBNTVVfUFJJTlQKKwltbXVfcHJpbnQKKyNlbmRpZgorCisvKgorICogbW11X2VuZ2FnZQorICoKKyAqIFRoaXMgY2h1bmsgb2YgY29kZSBwZXJmb3JtcyB0aGUgZ3J1ZXNvbWUgdGFzayBvZiBlbmdhZ2luZyB0aGUgTU1VLgorICogVGhlIHJlYXNvbiBpdHMgZ3J1ZXNvbWUgaXMgYmVjYXVzZSB3aGVuIHRoZSBNTVUgYmVjb21lcyBlbmdhZ2VkIGl0CisgKiBtYXBzIGxvZ2ljYWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcy4gIFRoZSBQcm9ncmFtIENvdW50ZXIKKyAqIHJlZ2lzdGVyIGlzIHRoZW4gcGFzc2VkIHRocm91Z2ggdGhlIE1NVSBiZWZvcmUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24KKyAqIGlzIGZldGNoZWQgKHRoZSBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgdGhlIGVuZ2FnZSBNTVUgaW5zdHJ1Y3Rpb24pLgorICogVGhpcyBtYXkgbWVhbiBvbmUgb2YgdHdvIHRoaW5nczoKKyAqIDEuIFRoZSBQcm9ncmFtIENvdW50ZXIgZmFsbHMgd2l0aGluIHRoZSBsb2dpY2FsIGFkZHJlc3Mgc3BhY2Ugb2YKKyAqICAgIHRoZSBrZXJuZWwgb2Ygd2hpY2ggdGhlcmUgYXJlIHR3byBzdWItcG9zc2liaWxpdGllczoKKyAqICAgIEEuIFRoZSBQQyBtYXBzIHRvIHRoZSBjb3JyZWN0IGluc3RydWN0aW9uIChsb2dpY2FsIFBDID09IHBoeXNpY2FsCisgKiAgICAgICBjb2RlIGxvY2F0aW9uKSwgb3IKKyAqICAgIEIuIFRoZSBQQyBkb2VzIG5vdCBtYXAgdGhyb3VnaCBhbmQgdGhlIHByb2Nlc3NvciB3aWxsIHJlYWQgc29tZQorICogICAgICAgZGF0YSAob3IgaW5zdHJ1Y3Rpb24pIHdoaWNoIGlzIG5vdCB0aGUgbG9naWNhbGx5IG5leHQgaW5zdHIuCisgKiAgICBBcyB5b3UgY2FuIGltYWdpbmUsIEEgaXMgZ29vZCBhbmQgQiBpcyBiYWQuCisgKiBBbHRlcm5hdGl2ZWx5LAorICogMi4gVGhlIFByb2dyYW0gQ291bnRlciBkb2VzIG5vdCBtYXAgdGhyb3VnaCB0aGUgTU1VLiAgVGhlIHByb2Nlc3NvcgorICogICAgd2lsbCB0YWtlIGEgQnVzIEVycm9yLgorICogQ2xlYXJseSwgMiBpcyBiYWQuCisgKiBJdCBkb2Vzbid0IHRha2UgYSB3aXoga2lkIHRvIGZpZ3VyZSB5b3Ugd2FudCAxLkEuCisgKiBUaGlzIGNvZGUgY3JlYXRlcyB0aGF0IHBvc3NpYmlsaXR5LgorICogVGhlcmUgYXJlIHR3byBwb3NzaWJsZSAxLkEuIHN0YXRlcyAod2Ugbm93IGlnbm9yZSB0aGUgb3RoZXIgYWJvdmUgc3RhdGVzKToKKyAqIEEuIFRoZSBrZXJuZWwgaXMgbG9jYXRlZCBhdCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2VkIHRoZSBzYW1lIGFzCisgKiAgICB0aGUgbG9naWNhbCBtZW1vcnkgZm9yIHRoZSBrZXJuZWwsIGkuZS4sIDB4MDEwMDAuCisgKiBCLiBUaGUga2VybmVsIGlzIGxvY2F0ZWQgc29tZSB3aGVyZSBlbHNlLiAgZS5nLiwgMHgwNDAwLjAwMDAKKyAqCisgKiAgICBVbmRlciBzb21lIGNvbmRpdGlvbnMgdGhlIE1hY2ludG9zaCBjYW4gbG9vayBsaWtlIEEgb3IgQi4KKyAqIFtBIGZyaWVuZCBhbmQgSSBvbmNlIG5vdGVkIHRoYXQgQXBwbGUgaGFyZHdhcmUgZW5naW5lZXJzIHNob3VsZCBiZQorICogd2Fja2VkIHR3aWNlIGVhY2ggZGF5OiBvbmNlIHdoZW4gdGhleSBzaG93IHVwIGF0IHdvcmsgKGFzIGluLCBXaGFjayEsCisgKiAiVGhpcyBpcyBmb3IgdGhlIHNjcmV3eSBoYXJkd2FyZSB3ZSBrbm93IHlvdSdyZSBnb2luZyB0byBkZXNpZ24gdG9kYXkuIiksCisgKiBhbmQgYWxzbyBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgKGFzIGluLCBXaGFjayEgIkkgZG9uJ3Qga25vdyB3aGF0CisgKiB5b3UgZGVzaWduZWQgdG9kYXksIGJ1dCBJJ20gc3VyZSBpdCB3YXNuJ3QgZ29vZC4iKS4gLS0gcnN0XQorICoKKyAqIFRoaXMgY29kZSB3b3JrcyBvbiB0aGUgZm9sbG93aW5nIHByZW1pc2U6CisgKiBJZiB0aGUga2VybmVsIHN0YXJ0ICglZDUpIGlzIHdpdGhpbiB0aGUgZmlyc3QgMTYgTWVnIG9mIFJBTSwKKyAqIHRoZW4gY3JlYXRlIGEgbWFwcGluZyBmb3IgdGhlIGtlcm5lbCBhdCBsb2dpY2FsIDB4ODAwMC4wMDAwIHRvCisgKiB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHBjLiAgQW5kLCBjcmVhdGUgYSB0cmFuc3BhcmVudAorICogdHJhbnNsYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBmaXJzdCAxNiBNZWcuICBUaGVuLCBhZnRlciB0aGUgTU1VCisgKiBpcyBlbmdhZ2VkLCB0aGUgUEMgY2FuIGJlIG1vdmVkIHVwIGludG8gdGhlIDB4ODAwMC4wMDAwIHJhbmdlCisgKiBhbmQgdGhlbiB0aGUgdHJhbnNwYXJlbnQgdHJhbnNsYXRpb24gY2FuIGJlIHR1cm5lZCBvZmYgYW5kIHRoZW4KKyAqIHRoZSBQQyBjYW4ganVtcCB0byB0aGUgY29ycmVjdCBsb2dpY2FsIGxvY2F0aW9uIGFuZCBpdCB3aWxsIGJlCisgKiBob21lIChmaW5hbGx5KS4gIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIGNvZGUgdGhhdCB0aGUgQW1pZ2EgdXNlZAorICogdG8gdXNlLiAgTm93LCBpdCdzIGdlbmVyYWxpemVkIGZvciBhbGwgcHJvY2Vzc29ycy4gIFdoaWNoIG1lYW5zCisgKiB0aGF0IGEgZnJlc2ggKGJ1dCB0ZW1wb3JhcnkpIG1hcHBpbmcgaGFzIHRvIGJlIGNyZWF0ZWQuICBUaGUgbWFwcGluZworICogaXMgbWFkZSBpbiBwYWdlIDAgKGFuIGFzIG9mIHlldCB1bnVzZWQgbG9jYXRpb24gLS0gZXhjZXB0IGZvciB0aGUKKyAqIHN0YWNrISkuICBUaGlzIHRlbXBvcmFyeSBtYXBwaW5nIHdpbGwgb25seSByZXF1aXJlIDEgcG9pbnRlciB0YWJsZQorICogYW5kIGEgc2luZ2xlIHBhZ2UgdGFibGUgKGl0IGNhbiBtYXAgMjU2SykuCisgKgorICogT0ssIGFsdGVybmF0aXZlbHksIGltYWdpbmUgdGhhdCB0aGUgUHJvZ3JhbSBDb3VudGVyIGlzIG5vdCB3aXRoaW4KKyAqIHRoZSBmaXJzdCAxNiBNZWcuICBUaGVuLCBqdXN0IHVzZSBUcmFuc3BhcmVudCBUcmFuc2xhdGlvbiByZWdpc3RlcnMKKyAqIHRvIGRvIHRoZSByaWdodCB0aGluZy4KKyAqCisgKiBMYXN0LCBpZiBfc3RhcnQgaXMgYWxyZWFkeSBhdCAweDAxMDAwLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBzcGVjaWFsCisgKiB0byBkbyAoaW4gb3RoZXIgd29yZHMsIGluIGEgZGVnZW5lcmF0ZSBjYXNlIG9mIHRoZSBmaXJzdCBjYXNlIGFib3ZlLAorICogZG8gbm90aGluZykuCisgKgorICogTGV0J3MgZG8gaXQuCisgKgorICoKKyAqLworCisJcHV0YwknSCcKKworCW1tdV9lbmdhZ2UKKworLyoKKyAqIEFmdGVyIHRoaXMgcG9pbnQgbm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kCisgKiB0aGUgc3RhcnQgb2YgYXZhaWxhYmxlIG1lbW9yeSBpcyBzdG9yZWQgaW4gYXZhaWxtZW0uCisgKiAoVGhlIGJvb3RtZW0gYWxsb2NhdG9yIHJlcXVpcmVzIG5vdyB0aGUgcGh5c2ljYWxsIGFkZHJlc3MuKQorICovCisKKwltb3ZlbAlMKG1lbW9yeV9zdGFydCksYXZhaWxtZW0KKworI2lmZGVmIENPTkZJR19BTUlHQQorCWlzX25vdF9hbWlnYSgxZikKKwkvKiBmaXh1cCB0aGUgQW1pZ2EgY3VzdG9tIHJlZ2lzdGVyIGxvY2F0aW9uIGJlZm9yZSBwcmludGluZyAqLworCWNscmwJTChjdXN0b20pCisxOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKwlpc19ub3RfYXRhcmkoMWYpCisJLyogZml4dXAgdGhlIEF0YXJpIGlvYmFzZSByZWdpc3RlciBsb2NhdGlvbiBiZWZvcmUgcHJpbnRpbmcgKi8KKwltb3ZlbAkjMHhmZjAwMDAwMCxMKGlvYmFzZSkKKzE6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUMKKwlpc19ub3RfbWFjKDFmKQorCW1vdmVsCSN+VklERU9NRU1NQVNLLCVkMAorCWFuZGwJTChtYWNfdmlkZW9iYXNlKSwlZDAKKwlhZGRsCSNWSURFT01FTUJBU0UsJWQwCisJbW92ZWwJJWQwLEwobWFjX3ZpZGVvYmFzZSkKKyNpZiBkZWZpbmVkKENPTlNPTEUpCisJbW92ZWwJJXBjQChMKHBoeXNfa2VybmVsX3N0YXJ0KSksJWQwCisJc3VibAkjUEFHRV9PRkZTRVQsJWQwCisJc3VibAklZDAsTChjb25zb2xlX2ZvbnQpCisJc3VibAklZDAsTChjb25zb2xlX2ZvbnRfZGF0YSkKKyNlbmRpZgorI2lmZGVmIE1BQ19TRVJJQUxfREVCVUcKKwlvcmwJIzB4NTAwMDAwMDAsTChtYWNfc2NjYmFzZSkKKyNlbmRpZgorMToKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQMzAwCisJaXNfbm90X2hwMzAwKDFmKQorCS8qCisJICogRml4IHVwIHRoZSBpb2Jhc2UgcmVnaXN0ZXIgdG8gcG9pbnQgdG8gdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgTEVEcy4KKwkgKi8KKwltb3ZlbAkjMHhmMDAwMDAwMCxMKGlvYmFzZSkKKworCS8qCisJICogRW5lcmdpc2UgdGhlIEZQVSBhbmQgY2FjaGVzLgorCSAqLworCWlzXzA0MCgxZikKKwltb3ZlbAkjMHg2MCwweGYwNWY0MDBjCisJamJyYQkyZgorCisJLyoKKwkgKiAwNDA6IHNsaWdodGx5IGRpZmZlcmVudCwgYXBwYXJlbnRseS4KKwkgKi8KKzE6CW1vdmV3CSMwLDB4ZjA1ZjQwMGUKKwltb3ZldwkjMHg2NCwweGYwNWY0MDBlCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1VOM1gKKwlpc19ub3Rfc3VuM3goMWYpCisKKwkvKiBlbmFibGUgY29wcm8gKi8KKwlvcml3CSMweDQwMDAsMHg2MTAwMDAwMAorMToKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FQT0xMTworCWlzX25vdF9hcG9sbG8oMWYpCisKKwkvKgorCSAqIEZpeCB1cCB0aGUgaW9iYXNlIGJlZm9yZSBwcmludGluZworCSAqLworCW1vdmVsCSMweDgwMDAwMDAwLEwoaW9iYXNlKQorMToKKyNlbmRpZgorCisJcHV0YwknSScKKwlsZWRzCTB4MTAKKworLyoKKyAqIEVuYWJsZSBjYWNoZXMKKyAqLworCisJaXNfbm90XzA0MF9vcl8wNjAoTChjYWNoZV9ub3RfNjgwNDYwKSkKKworTChjYWNoZTY4MDQ2MCk6CisJLmNoaXAJNjgwNDAKKwlub3AKKwljcHVzaGEJJWJjCisJbm9wCisKKwlpc18wNjAoTChjYWNoZTY4MDYwKSkKKworCW1vdmVsCSNDQzZfRU5BQkxFX0QrQ0M2X0VOQUJMRV9JLCVkMAorCS8qIE1NVSBzdHVmZiB3b3JrcyBpbiBjb3B5YmFjayBtb2RlIG5vdywgc28gZW5hYmxlIHRoZSBjYWNoZSAqLworCW1vdmVjCSVkMCwlY2FjcgorCWpyYQlMKGNhY2hlX2RvbmUpCisKK0woY2FjaGU2ODA2MCk6CisJbW92ZWwJI0NDNl9FTkFCTEVfRCtDQzZfRU5BQkxFX0krQ0M2X0VOQUJMRV9TQitDQzZfUFVTSF9EUEkrQ0M2X0VOQUJMRV9CK0NDNl9DTFJBX0IsJWQwCisJLyogTU1VIHN0dWZmIHdvcmtzIGluIGNvcHliYWNrIG1vZGUgbm93LCBzbyBlbmFibGUgdGhlIGNhY2hlICovCisJbW92ZWMJJWQwLCVjYWNyCisJLyogZW5hYmxlIHN1cGVyc2NhbGFyIGRpc3BhdGNoIGluIFBDUiAqLworCW1vdmVxCSMxLCVkMAorCS5jaGlwCTY4MDYwCisJbW92ZWMJJWQwLCVwY3IKKworCWpicmEJTChjYWNoZV9kb25lKQorTChjYWNoZV9ub3RfNjgwNDYwKToKK0woY2FjaGU2ODAzMCk6CisJLmNoaXAJNjgwMzAKKwltb3ZlbAkjQ0MzX0VOQUJMRV9EQitDQzNfQ0xSX0QrQ0MzX0VOQUJMRV9EK0NDM19FTkFCTEVfSUIrQ0MzX0NMUl9JK0NDM19FTkFCTEVfSSwlZDAKKwltb3ZlYwklZDAsJWNhY3IKKworCWpyYQlMKGNhY2hlX2RvbmUpCisJLmNoaXAJNjhrCitMKGNhY2hlX2RvbmUpOgorCisJcHV0YwknSicKKworLyoKKyAqIFNldHVwIGluaXRpYWwgc3RhY2sgcG9pbnRlcgorICovCisJbGVhCWluaXRfdGFzaywlY3VycHRyCisJbGVhCWluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFLCVzcAorCisJcHV0YwknSycKKworCXN1YmwJJWE2LCVhNgkJLyogY2xlYXIgYTYgZm9yIGdkYiAqLworCisvKgorICogVGhlIG5ldyA2NGJpdCBwcmludGYgc3VwcG9ydCByZXF1aXJlcyBhbiBlYXJseSBleGNlcHRpb24gaW5pdGlhbGl6YXRpb24uCisgKi8KKwlqYnNyCWJhc2VfdHJhcF9pbml0CisKKy8qIGp1bXAgdG8gdGhlIGtlcm5lbCBzdGFydCAqLworCisJcHV0YwknXG4nCisJbGVkcwkweDU1CisKKwlqYnNyCXN0YXJ0X2tlcm5lbAorCisvKgorICogRmluZCBhIHRhZyByZWNvcmQgaW4gdGhlIGJvb3RpbmZvIHN0cnVjdHVyZQorICogVGhlIGJvb3RpbmZvIHN0cnVjdHVyZSBpcyBsb2NhdGVkIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYnNzCisgKiBSZXR1cm5zOiBkMDogc2l6ZSAoLTEgaWYgbm90IGZvdW5kKQorICogICAgICAgICAgYTA6IGRhdGEgcG9pbnRlciAoZW5kLW9mLXJlY29yZHMgaWYgbm90IGZvdW5kKQorICovCitmdW5jX3N0YXJ0CWdldF9iaV9yZWNvcmQsJWQxCisKKwltb3ZlbAlBUkcxLCVkMAorCWxlYQklcGNAKF9lbmQpLCVhMAorMToJdHN0dwklYTBAKEJJUl9UQUcpCisJamVxCTNmCisJY21wdwklYTBAKEJJUl9UQUcpLCVkMAorCWplcQkyZgorCWFkZHcJJWEwQChCSVJfU0laRSksJWEwCisJanJhCTFiCisyOgltb3ZlcQkjMCwlZDAKKwltb3ZldwklYTBAKEJJUl9TSVpFKSwlZDAKKwlsZWEJJWEwQChCSVJfREFUQSksJWEwCisJanJhCTRmCiszOgltb3ZlcQkjLTEsJWQwCisJbGVhCSVhMEAoQklSX1NJWkUpLCVhMAorNDoKK2Z1bmNfcmV0dXJuCWdldF9iaV9yZWNvcmQKKworCisvKgorICoJTU1VIEluaXRpYWxpemF0aW9uIEJlZ2lucyBIZXJlCisgKgorICoJVGhlIHN0cnVjdHVyZSBvZiB0aGUgTU1VIHRhYmxlcyBvbiB0aGUgNjhrIG1hY2hpbmVzCisgKglpcyB0aHVzOgorICoJUm9vdCBUYWJsZQorICoJCUxvZ2ljYWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRocm91Z2gKKyAqCWEgaGllcmFyY2hpY2FsIHRyYW5zbGF0aW9uIG1lY2hhbmlzbSB3aGVyZSB0aGUgaGlnaC1vcmRlcgorICoJc2V2ZW4gYml0cyBvZiB0aGUgbG9naWNhbCBhZGRyZXNzIChMQSkgYXJlIHVzZWQgYXMgYW4KKyAqCWluZGV4IGludG8gdGhlICJyb290IHRhYmxlLiIgIEVhY2ggZW50cnkgaW4gdGhlIHJvb3QKKyAqCXRhYmxlIGhhcyBhIGJpdCB3aGljaCBzcGVjaWZpZXMgaWYgaXQncyBhIHZhbGlkIHBvaW50ZXIgdG8gYQorICoJcG9pbnRlciB0YWJsZS4gIEVhY2ggZW50cnkgZGVmaW5lcyBhIDMyS01lZyByYW5nZSBvZiBtZW1vcnkuCisgKglJZiBhbiBlbnRyeSBpcyBpbnZhbGlkIHRoZW4gdGhhdCBsb2dpY2FsIHJhbmdlIG9mIDMyTSBpcworICoJaW52YWxpZCBhbmQgcmVmZXJlbmNlcyB0byB0aGF0IHJhbmdlIG9mIG1lbW9yeSAod2hlbiB0aGUgTU1VCisgKglpcyBlbmFibGVkKSB3aWxsIGZhdWx0LiAgSWYgdGhlIGVudHJ5IGlzIHZhbGlkLCB0aGVuIGl0IGRvZXMKKyAqCW9uZSBvZiB0d28gdGhpbmdzLiAgT24gMDQwLzA2MCBjbGFzcyBtYWNoaW5lcywgaXQgcG9pbnRzIHRvCisgKglhIHBvaW50ZXIgdGFibGUgd2hpY2ggdGhlbiBkZXNjcmliZXMgbW9yZSBmaW5lbHkgdGhlIG1lbW9yeQorICoJd2l0aGluIHRoYXQgMzJNIHJhbmdlLiAgT24gMDIwLzAzMCBjbGFzcyBtYWNoaW5lcywgYSB0ZWNobmlxdWUKKyAqCWNhbGxlZCAiZWFybHkgdGVybWluYXRpbmcgZGVzY3JpcHRvcnMiIGFyZSB1c2VkLiAgVGhpcyB0ZWNobmlxdWUKKyAqCWFsbG93cyBhbiBlbnRpcmUgMzJNZWcgdG8gYmUgZGVzY3JpYmVkIGJ5IGEgc2luZ2xlIGVudHJ5IGluIHRoZQorICoJcm9vdCB0YWJsZS4gIFRodXMsIHRoaXMgZW50cnkgaW4gdGhlIHJvb3QgdGFibGUsIGNvbnRhaW5zIHRoZQorICoJcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IG9yIEkvTyBhdCB0aGUgbG9naWNhbCBhZGRyZXNzCisgKgl3aGljaCB0aGUgZW50cnkgcmVwcmVzZW50cyBhbmQgaXQgYWxzbyBjb250YWlucyB0aGUgbmVjZXNzYXJ5CisgKgljYWNoZSBiaXRzIGZvciB0aGlzIHJlZ2lvbi4KKyAqCisgKglQb2ludGVyIFRhYmxlcworICoJCVBlciB0aGUgUm9vdCBUYWJsZSwgdGhlcmUgd2lsbCBiZSBvbmUgb3IgbW9yZQorICoJcG9pbnRlciB0YWJsZXMuICBFYWNoIHBvaW50ZXIgdGFibGUgZGVmaW5lcyBhIDMyTSByYW5nZS4KKyAqCU5vdCBhbGwgb2YgdGhlIDMyTSByYW5nZSBuZWVkIGJlIGRlZmluZWQuICBBZ2FpbiwgdGhlIG5leHQKKyAqCXNldmVuIGJpdHMgb2YgdGhlIGxvZ2ljYWwgYWRkcmVzcyBhcmUgdXNlZCBhbiBpbmRleCBpbnRvCisgKgl0aGUgcG9pbnRlciB0YWJsZSB0byBwb2ludCB0byBwYWdlIHRhYmxlcyAoaWYgdGhlIHBvaW50ZXIKKyAqCWlzIHZhbGlkKS4gIFRoZXJlIHdpbGwgdW5kb3VidGVkbHkgYmUgbW9yZSB0aGFuIG9uZQorICoJcG9pbnRlciB0YWJsZSBmb3IgdGhlIGtlcm5lbCBiZWNhdXNlIGVhY2ggcG9pbnRlciB0YWJsZQorICoJZGVmaW5lcyBhIHJhbmdlIG9mIG9ubHkgMzJNLiAgVmFsaWQgcG9pbnRlciB0YWJsZSBlbnRyaWVzCisgKglwb2ludCB0byBwYWdlIHRhYmxlcywgb3IgYXJlIGVhcmx5IHRlcm1pbmF0aW5nIGVudHJpZXMKKyAqCXRoZW1zZWx2ZXMuCisgKgorICoJUGFnZSBUYWJsZXMKKyAqCQlQZXIgdGhlIFBvaW50ZXIgVGFibGVzLCBlYWNoIHBhZ2UgdGFibGUgZW50cnkgcG9pbnRzCisgKgl0byB0aGUgcGh5c2ljYWwgcGFnZSBpbiBtZW1vcnkgdGhhdCBzdXBwb3J0cyB0aGUgbG9naWNhbAorICoJYWRkcmVzcyB0aGF0IHRyYW5zbGF0ZXMgdG8gdGhlIHBhcnRpY3VsYXIgaW5kZXguCisgKgorICoJSW4gc2hvcnQsIHRoZSBMb2dpY2FsIEFkZHJlc3MgZ2V0cyB0cmFuc2xhdGVkIGFzIGZvbGxvd3M6CisgKgkJYml0cyAzMS4uMjYgLSBpbmRleCBpbnRvIHRoZSBSb290IFRhYmxlCisgKgkJYml0cyAyNS4uMTggLSBpbmRleCBpbnRvIHRoZSBQb2ludGVyIFRhYmxlCisgKgkJYml0cyAxNy4uMTIgLSBpbmRleCBpbnRvIHRoZSBQYWdlIFRhYmxlCisgKgkJYml0cyAxMS4uMCAgLSBvZmZzZXQgaW50byBhIHBhcnRpY3VsYXIgNEsgcGFnZQorICoKKyAqCVRoZSBhbGdvcml0aG1zIHdoaWNoIGZvbGxvd3MgZG8gb25lIHRoaW5nOiB0aGV5IGFic3RyYWN0CisgKgl0aGUgTU1VIGhhcmR3YXJlLiAgRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZgorICoJY2FjaGUgc2V0dGluZ3MgdGhhdCBhcmUgcmVsZXZhbnQuICBFaXRoZXIsIG1lbW9yeSBpcworICoJYmVpbmcgbWFwcGVkIGluIHdoaWNoIGNhc2UgaXQgaXMgZWl0aGVyIEtlcm5lbCBDb2RlIChvcgorICoJdGhlIFJhbURpc2spIG9yIGl0IGlzIE1NVSBkYXRhLiAgT24gdGhlIDAzMCwgdGhlIE1NVSBkYXRhCisgKglvcHRpb24gYWxzbyBkZXNjcmliZXMgdGhlIGtlcm5lbC4gIE9yLCBJL08gaXMgYmVpbmcgbWFwcGVkCisgKglpbiB3aGljaCBjYXNlIGl0IGhhcyBpdHMgb3duIGtpbmQgb2YgY2FjaGUgYml0cy4gIFRoZXJlCisgKglhcmUgY29uc3RhbnRzIHdoaWNoIGFic3RyYWN0IHRoZXNlIG5vdGlvbnMgZnJvbSB0aGUgY29kZSB0aGF0CisgKglhY3R1YWxseSBtYWtlcyB0aGUgY2FsbCB0byBtYXAgc29tZSByYW5nZSBvZiBtZW1vcnkuCisgKgorICoKKyAqCisgKi8KKworI2lmZGVmIE1NVV9QUklOVAorLyoKKyAqCW1tdV9wcmludAorICoKKyAqCVRoaXMgYWxnb3JpdGhtIHdpbGwgcHJpbnQgb3V0IHRoZSBjdXJyZW50IE1NVSBtYXBwaW5ncy4KKyAqCisgKglJbnB1dDoKKyAqCQklYTUgcG9pbnRzIHRvIHRoZSByb290IHRhYmxlLiAgRXZlcnl0aGluZyBlbHNlIGlzIGNhbGN1bGF0ZWQKKyAqCQkJZnJvbSB0aGlzLgorICovCisKKyNkZWZpbmUgbW11X25leHRfdmFsaWQJCTAKKyNkZWZpbmUgbW11X3N0YXJ0X2xvZ2ljYWwJNAorI2RlZmluZSBtbXVfbmV4dF9sb2dpY2FsCTgKKyNkZWZpbmUgbW11X3N0YXJ0X3BoeXNpY2FsCTEyCisjZGVmaW5lIG1tdV9uZXh0X3BoeXNpY2FsCTE2CisKKyNkZWZpbmUgTU1VX1BSSU5UX0lOVkFMSUQJCS0xCisjZGVmaW5lIE1NVV9QUklOVF9WQUxJRAkJCTEKKyNkZWZpbmUgTU1VX1BSSU5UX1VOSU5JVEVECQkwCisKKyNkZWZpbmUgcHV0WmMoeixuKQkJamJuZSAxZjsgcHV0YyB6OyBqYnJhIDJmOyAxOiBwdXRjIG47IDI6CisKK2Z1bmNfc3RhcnQJbW11X3ByaW50LCVhMC0lYTYvJWQwLSVkNworCisJbW92ZWwJJXBjQChMKGtlcm5lbF9wZ2Rpcl9wdHIpKSwlYTUKKwlsZWEJJXBjQChMKG1tdV9wcmludF9kYXRhKSksJWEwCisJbW92ZWwJI01NVV9QUklOVF9VTklOSVRFRCwlYTBAKG1tdV9uZXh0X3ZhbGlkKQorCisJaXNfbm90XzA0MF9vcl8wNjAobW11XzAzMF9wcmludCkKKworbW11XzA0MF9wcmludDoKKwlwdXRzCSJcbk1NVTA0MFxuIgorCXB1dHMJInJwOiIKKwlwdXRuCSVhNQorCXB1dGMJJ1xuJworI2lmIDAKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgI2lmLyNlbmRpZiBibG9jayBpcyBhIHRpZ2h0IGFsZ29yaXRobSBmb3IgZHVtcGluZyB0aGUgMDQwCisJICogTU1VIE1hcCBpbiBnb3J5IGRldGFpbC4gIEl0IHJlYWxseSBpc24ndCB0aGF0IHByYWN0aWNhbCB1bmxlc3MgdGhlCisJICogTU1VIE1hcCBhbGdvcml0aG0gYXBwZWFycyB0byBnbyBhd3J5IGFuZCB5b3UgbmVlZCB0byBkZWJ1ZyBpdCBhdCB0aGUKKwkgKiBlbnRyeSBwZXIgZW50cnkgbGV2ZWwuCisJICovCisJbW92ZWwJI1JPT1RfVEFCTEVfU0laRSwlZDUKKyNpZiAwCisJbW92ZWwJJWE1QCssJWQ3CQl8IEJ1cm4gYW4gZW50cnkgdG8gc2tpcCB0aGUga2VybmVsIG1hcHBpbmdzLAorCXN1YnFsCSMxLCVkNQkJCXwgdGhleSAobWlnaHQpIHdvcmsKKyNlbmRpZgorMToJdHN0bAklZDUKKwlqYmVxCW1tdV9wcmludF9kb25lCisJc3VicQkjMSwlZDUKKwltb3ZlbAklYTVAKywlZDcKKwlidHN0CSMxLCVkNworCWpiZXEJMWIKKworMjoJcHV0bgklZDcKKwlhbmRpbAkjMHhGRkZGRkUwMCwlZDcKKwltb3ZlbAklZDcsJWE0CisJbW92ZWwJI1BUUl9UQUJMRV9TSVpFLCVkNAorCXB1dGMJJyAnCiszOgl0c3RsCSVkNAorCWpiZXEJMTFmCisJc3VicQkjMSwlZDQKKwltb3ZlbAklYTRAKywlZDcKKwlidHN0CSMxLCVkNworCWpiZXEJM2IKKworNDoJcHV0bgklZDcKKwlhbmRpbAkjMHhGRkZGRkYwMCwlZDcKKwltb3ZlbAklZDcsJWEzCisJbW92ZWwJI1BBR0VfVEFCTEVfU0laRSwlZDMKKzU6CW1vdmVsCSM4LCVkMgorNjoJdHN0bAklZDMKKwlqYmVxCTMxZgorCXN1YnEJIzEsJWQzCisJbW92ZWwJJWEzQCssJWQ2CisJYnRzdAkjMCwlZDYKKwlqYmVxCTZiCis3Ogl0c3RsCSVkMgorCWpiZXEJOGYKKwlzdWJxCSMxLCVkMgorCXB1dGMJJyAnCisJamJyYQk5MWYKKzg6CXB1dGMJJ1xuJworCW1vdmVsCSM4KzErOCsxKzEsJWQyCis5OglwdXRjCScgJworCWRicmEJJWQyLDliCisJbW92ZWwJIzcsJWQyCis5MToJcHV0bgklZDYKKwlqYnJhCTZiCisKKzMxOglwdXRjCSdcbicKKwltb3ZlbAkjOCsxLCVkMgorMzI6CXB1dGMJJyAnCisJZGJyYQklZDIsMzJiCisJamJyYQkzYgorCisxMToJcHV0YwknXG4nCisJamJyYQkxYgorI2VuZGlmIC8qIE1NVSAwNDAgRHVtcGluZyBjb2RlIHRoYXQncyBnb3J5IGFuZCBkZXRhaWxlZCAqLworCisJbGVhCSVwY0Aoa2VybmVsX3BnX2RpciksJWE1CisJbW92ZWwJJWE1LCVhMAkJCS8qIGEwIGhhcyB0aGUgYWRkcmVzcyBvZiB0aGUgcm9vdCB0YWJsZSBwdHIgKi8KKwltb3ZlbAkjMHgwMDAwMDAwMCwlYTQJCS8qIGxvZ2ljYWwgYWRkcmVzcyAqLworCW1vdmVxbAkjMCwlZDAKKzQwOgorCS8qIEluY3JlbWVudCB0aGUgbG9naWNhbCBhZGRyZXNzIGFuZCBwcmVzZXJ2ZSBpbiBkNSAqLworCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkU8PDEzLCVkNQorCW1vdmVsCSVhMEArLCVkNgorCWJ0c3QJIzEsJWQ2CisJamJuZQk0MWYKKwlqYnNyCW1tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlCisJamJyYQk0OGYKKzQxOgorCW1vdmVsCSMwLCVkMQorCWFuZGlsCSMweGZmZmZmZTAwLCVkNgorCW1vdmVsCSVkNiwlYTEKKzQyOgorCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkU8PDYsJWQ1CisJbW92ZWwJJWExQCssJWQ2CisJYnRzdAkjMSwlZDYKKwlqYm5lCTQzZgorCWpic3IJbW11X3ByaW50X3R1cGxlX2ludmFsaWRhdGUKKwlqYnJhCTQ3ZgorNDM6CisJbW92ZWwJIzAsJWQyCisJYW5kaWwJIzB4ZmZmZmZmMDAsJWQ2CisJbW92ZWwJJWQ2LCVhMgorNDQ6CisJbW92ZWwJJWE0LCVkNQorCWFkZGlsCSNQQUdFU0laRSwlZDUKKwltb3ZlbAklYTJAKywlZDYKKwlidHN0CSMwLCVkNgorCWpibmUJNDVmCisJamJzcgltbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZQorCWpicmEJNDZmCis0NToKKwltb3ZlbWwJJWQwLSVkMSwlc3BALQorCW1vdmVsCSVhNCwlZDAKKwltb3ZlbAklZDYsJWQxCisJYW5kaWwJIzB4ZmZmZmY0ZTAsJWQxCisJbGVhCSVwY0AobW11XzA0MF9wcmludF9mbGFncyksJWE2CisJamJzcgltbXVfcHJpbnRfdHVwbGUKKwltb3ZlbWwJJXNwQCssJWQwLSVkMQorNDY6CisJbW92ZWwJJWQ1LCVhNAorCWFkZHEJIzEsJWQyCisJY21waWIJIzY0LCVkMgorCWpibmUJNDRiCis0NzoKKwltb3ZlbAklZDUsJWE0CisJYWRkcQkjMSwlZDEKKwljbXBpYgkjMTI4LCVkMQorCWpibmUJNDJiCis0ODoKKwltb3ZlbAklZDUsJWE0CQkJLyogbW92ZSB0byB0aGUgbmV4dCBsb2dpY2FsIGFkZHJlc3MgKi8KKwlhZGRxCSMxLCVkMAorCWNtcGliCSMxMjgsJWQwCisJamJuZQk0MGIKKworCS5jaGlwCTY4MDQwCisJbW92ZWMJJWR0dDEsJWQwCisJbW92ZWwJJWQwLCVkMQorCWFuZGl3CSMweDgwMDAsJWQxCQkvKiBpcyBpdCB2YWxpZCA/ICovCisJamJlcQkxZgkJCS8qIE5vLCBiYWlsIG91dCAqLworCisJbW92ZWwJJWQwLCVkMQorCWFuZGlsCSMweGZmMDAwMDAwLCVkMQkJLyogR2V0IHRoZSBhZGRyZXNzICovCisJcHV0bgklZDEKKwlwdXRzCSI9PSIKKwlwdXRuCSVkMQorCisJbW92ZWwJJWQwLCVkNgorCWpic3IJbW11XzA0MF9wcmludF9mbGFnc190dAorMToKKwltb3ZlYwklZHR0MCwlZDAKKwltb3ZlbAklZDAsJWQxCisJYW5kaXcJIzB4ODAwMCwlZDEJCS8qIGlzIGl0IHZhbGlkID8gKi8KKwlqYmVxCTFmCQkJLyogTm8sIGJhaWwgb3V0ICovCisKKwltb3ZlbAklZDAsJWQxCisJYW5kaWwJIzB4ZmYwMDAwMDAsJWQxCQkvKiBHZXQgdGhlIGFkZHJlc3MgKi8KKwlwdXRuCSVkMQorCXB1dHMJIj09IgorCXB1dG4JJWQxCisKKwltb3ZlbAklZDAsJWQ2CisJamJzcgltbXVfMDQwX3ByaW50X2ZsYWdzX3R0CisxOgorCS5jaGlwCTY4aworCisJamJyYQltbXVfcHJpbnRfZG9uZQorCittbXVfMDQwX3ByaW50X2ZsYWdzOgorCWJ0c3RsCSMxMCwlZDYKKwlwdXRaYygnICcsJ0cnKQkvKiBnbG9iYWwgYml0ICovCisJYnRzdGwJIzcsJWQ2CisJcHV0WmMoJyAnLCdTJykJLyogc3VwZXJ2aXNvciBiaXQgKi8KK21tdV8wNDBfcHJpbnRfZmxhZ3NfdHQ6CisJYnRzdGwJIzYsJWQ2CisJamJuZQkzZgorCXB1dGMJJ0MnCisJYnRzdGwJIzUsJWQ2CisJcHV0WmMoJ3cnLCdjJykJLyogd3JpdGUgdGhyb3VnaCBvciBjb3B5LWJhY2sgKi8KKwlqYnJhCTRmCiszOgorCXB1dGMJJ04nCisJYnRzdGwJIzUsJWQ2CisJcHV0WmMoJ3MnLCcgJykJLyogc2VyaWFsaXplZCBub24tY2FjaGVhYmxlLCBvciBub24tY2FjaGVhYmxlICovCis0OgorCXJ0cworCittbXVfMDMwX3ByaW50X2ZsYWdzOgorCWJ0c3RsCSM2LCVkNgorCXB1dFpjKCdDJywnSScpCS8qIHdyaXRlIHRocm91Z2ggb3IgY29weS1iYWNrICovCisJcnRzCisKK21tdV8wMzBfcHJpbnQ6CisJcHV0cwkiXG5NTVUwMzBcbiIKKwlwdXRzCSJcbnJwOiIKKwlwdXRuCSVhNQorCXB1dGMJJ1xuJworCW1vdmVsCSVhNSwlZDAKKwlhbmRpbAkjMHhmZmZmZmZmMCwlZDAKKwltb3ZlbAklZDAsJWEwCisJbW92ZWwJIzB4MDAwMDAwMDAsJWE0CQkvKiBsb2dpY2FsIGFkZHJlc3MgKi8KKwltb3ZlbAkjMCwlZDAKKzMwOgorCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkU8PDEzLCVkNQorCW1vdmVsCSVhMEArLCVkNgorCWJ0c3QJIzEsJWQ2CQkJLyogaXMgaXQgYSB0YWJsZSBwdHI/ICovCisJamJuZQkzMWYJCQkvKiB5ZXMgKi8KKwlidHN0CSMwLCVkNgkJCS8qIGlzIGl0IGVhcmx5IHRlcm1pbmF0aW5nPyAqLworCWpiZXEJMWYJCQkvKiBubyAqLworCWpic3IJbW11XzAzMF9wcmludF9oZWxwZXIKKwlqYnJhCTM4ZgorMToKKwlqYnNyCW1tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlCisJamJyYQkzOGYKKzMxOgorCW1vdmVsCSMwLCVkMQorCWFuZGlsCSMweGZmZmZmZmYwLCVkNgorCW1vdmVsCSVkNiwlYTEKKzMyOgorCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkU8PDYsJWQ1CisJbW92ZWwJJWExQCssJWQ2CisJYnRzdAkjMSwlZDYJCQkvKiBpcyBpdCBhIHRhYmxlIHB0cj8gKi8KKwlqYm5lCTMzZgkJCS8qIHllcyAqLworCWJ0c3QJIzAsJWQ2CQkJLyogaXMgaXQgYSBwYWdlIGRlc2NyaXB0b3I/ICovCisJamJlcQkxZgkJCS8qIG5vICovCisJamJzcgltbXVfMDMwX3ByaW50X2hlbHBlcgorCWpicmEJMzdmCisxOgorCWpic3IJbW11X3ByaW50X3R1cGxlX2ludmFsaWRhdGUKKwlqYnJhCTM3ZgorMzM6CisJbW92ZWwJIzAsJWQyCisJYW5kaWwJIzB4ZmZmZmZmZjAsJWQ2CisJbW92ZWwJJWQ2LCVhMgorMzQ6CisJbW92ZWwJJWE0LCVkNQorCWFkZGlsCSNQQUdFU0laRSwlZDUKKwltb3ZlbAklYTJAKywlZDYKKwlidHN0CSMwLCVkNgorCWpibmUJMzVmCisJamJzcgltbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZQorCWpicmEJMzZmCiszNToKKwlqYnNyCW1tdV8wMzBfcHJpbnRfaGVscGVyCiszNjoKKwltb3ZlbAklZDUsJWE0CisJYWRkcQkjMSwlZDIKKwljbXBpYgkjNjQsJWQyCisJamJuZQkzNGIKKzM3OgorCW1vdmVsCSVkNSwlYTQKKwlhZGRxCSMxLCVkMQorCWNtcGliCSMxMjgsJWQxCisJamJuZQkzMmIKKzM4OgorCW1vdmVsCSVkNSwlYTQJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGxvZ2ljYWwgYWRkcmVzcyAqLworCWFkZHEJIzEsJWQwCisJY21waWIJIzEyOCwlZDAKKwlqYm5lCTMwYgorCittbXVfcHJpbnRfZG9uZToKKwlwdXRzCSJcblxuIgorCitmdW5jX3JldHVybgltbXVfcHJpbnQKKworCittbXVfMDMwX3ByaW50X2hlbHBlcjoKKwltb3ZlbWwJJWQwLSVkMSwlc3BALQorCW1vdmVsCSVhNCwlZDAKKwltb3ZlbAklZDYsJWQxCisJbGVhCSVwY0AobW11XzAzMF9wcmludF9mbGFncyksJWE2CisJamJzcgltbXVfcHJpbnRfdHVwbGUKKwltb3ZlbWwJJXNwQCssJWQwLSVkMQorCXJ0cworCittbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZToKKwltb3ZlbWwJJWEwLyVkNywlc3BALQorCisJbGVhCSVwY0AoTChtbXVfcHJpbnRfZGF0YSkpLCVhMAorCXRzdGwJJWEwQChtbXVfbmV4dF92YWxpZCkKKwlqYm1pCW1tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlX2V4aXQKKworCW1vdmVsCSNNTVVfUFJJTlRfSU5WQUxJRCwlYTBAKG1tdV9uZXh0X3ZhbGlkKQorCisJcHV0bgklYTQKKworCXB1dHMJIiMjXG4iCisKK21tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlX2V4aXQ6CisJbW92ZW1sCSVzcEArLCVhMC8lZDcKKwlydHMKKworCittbXVfcHJpbnRfdHVwbGU6CisJbW92ZW1sCSVkMC0lZDcvJWEwLCVzcEAtCisKKwlsZWEJJXBjQChMKG1tdV9wcmludF9kYXRhKSksJWEwCisKKwl0c3RsCSVhMEAobW11X25leHRfdmFsaWQpCisJamJsZQltbXVfcHJpbnRfdHVwbGVfcHJpbnQKKworCWNtcGwJJWEwQChtbXVfbmV4dF9waHlzaWNhbCksJWQxCisJamJlcQltbXVfcHJpbnRfdHVwbGVfaW5jcmVtZW50CisKK21tdV9wcmludF90dXBsZV9wcmludDoKKwlwdXRuCSVkMAorCXB1dHMJIi0+IgorCXB1dG4JJWQxCisKKwltb3ZlbAklZDEsJWQ2CisJamJzcgklYTZACisKK21tdV9wcmludF90dXBsZV9yZWNvcmQ6CisJbW92ZWwJI01NVV9QUklOVF9WQUxJRCwlYTBAKG1tdV9uZXh0X3ZhbGlkKQorCisJbW92ZWwJJWQxLCVhMEAobW11X25leHRfcGh5c2ljYWwpCisKK21tdV9wcmludF90dXBsZV9pbmNyZW1lbnQ6CisJbW92ZWwJJWQ1LCVkNworCXN1YmwJJWE0LCVkNworCWFkZGwJJWQ3LCVhMEAobW11X25leHRfcGh5c2ljYWwpCisKK21tdV9wcmludF90dXBsZV9leGl0OgorCW1vdmVtbAklc3BAKywlZDAtJWQ3LyVhMAorCXJ0cworCittbXVfcHJpbnRfbWFjaGluZV9jcHVfdHlwZXM6CisJcHV0cwkibWFjaGluZTogIgorCisJaXNfbm90X2FtaWdhKDFmKQorCXB1dHMJImFtaWdhIgorCWpicmEJOWYKKzE6CisJaXNfbm90X2F0YXJpKDJmKQorCXB1dHMJImF0YXJpIgorCWpicmEJOWYKKzI6CisJaXNfbm90X21hYygzZikKKwlwdXRzCSJtYWNpbnRvc2giCisJamJyYQk5ZgorMzoJcHV0cwkidW5rbm93biIKKzk6CXB1dGMJJ1xuJworCisJcHV0cwkiY3B1dHlwZTogMCIKKwlpc19ub3RfMDYwKDFmKQorCXB1dGMJJzYnCisJamJyYQk5ZgorMToKKwlpc19ub3RfMDQwX29yXzA2MCgyZikKKwlwdXRjCSc0JworCWpicmEJOWYKKzI6CXB1dGMJJzMnCis5OglwdXRjCScwJworCXB1dGMJJ1xuJworCisJcnRzCisjZW5kaWYgLyogTU1VX1BSSU5UICovCisKKy8qCisgKiBtbXVfbWFwX3R0CisgKgorICogVGhpcyBpcyBhIHNwZWNpZmljIGZ1bmN0aW9uIHdoaWNoIHdvcmtzIG9uIGFsbCA2ODB4MCBtYWNoaW5lcy4KKyAqIE9uIDAzMCwgMDQwICYgMDYwIGl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgVHJhbnNwYXJlbnQgVHJhbnNsYXRpb24KKyAqIHJlZ2lzdGVycyAodHQxKS4KKyAqIE9uIDAyMCBpdCB3aWxsIGNhbGwgdGhlIHN0YW5kYXJkIG1tdV9tYXAgd2hpY2ggd2lsbCB1c2UgZWFybHkKKyAqIHRlcm1pbmF0aW5nIGRlc2NyaXB0b3JzLgorICovCitmdW5jX3N0YXJ0CW1tdV9tYXBfdHQsJWQwLyVkMS8lYTAsNAorCisJZHB1dHMJIm1tdV9tYXBfdHQ6IgorCWRwdXRuCUFSRzEKKwlkcHV0bglBUkcyCisJZHB1dG4JQVJHMworCWRwdXRuCUFSRzQKKwlkcHV0YwknXG4nCisKKwlpc18wMjAoTChkb19tYXApKQorCisJLyogRXh0cmFjdCB0aGUgaGlnaGVzdCBiaXQgc2V0CisJICovCisJYmZmZm8JQVJHM3sjMCwjMzJ9LCVkMQorCWNtcHcJIzgsJWQxCisJamNjCUwoZG9fbWFwKQorCisJLyogQW5kIGdldCB0aGUgbWFzaworCSAqLworCW1vdmVxCSMtMSwlZDAKKwlsc3JsCSVkMSwlZDAKKwlsc3JsCSMxLCVkMAorCisJLyogTWFzayB0aGUgYWRkcmVzcworCSAqLworCW1vdmVsCSVkMCwlZDEKKwlub3RsCSVkMQorCWFuZGwJQVJHMiwlZDEKKworCS8qIEdlbmVyYXRlIHRoZSB1cHBlciAxNmJpdCBvZiB0aGUgdHQgcmVnaXN0ZXIKKwkgKi8KKwlsc3JsCSM4LCVkMAorCW9ybAklZDAsJWQxCisJY2xydwklZDEKKworCWlzXzA0MF9vcl8wNjAoTChtbXVfbWFwX3R0XzA0MCkpCisKKwkvKiBzZXQgMDMwIHNwZWNpZmljIGJpdHMgKHJlYWQvd3JpdGUgYWNjZXNzIGZvciBzdXBlcnZpc29yIG1vZGUKKwkgKiAoaGlnaGVzdCBmdW5jdGlvbiBjb2RlIHNldCwgbG93ZXIgdHdvIGJpdHMgbWFza2VkKSkKKwkgKi8KKwlvcncJI1RUUl9FTkFCTEUrVFRSX1JXTStUVFJfRkNCMitUVFJfRkNNMStUVFJfRkNNMCwlZDEKKwltb3ZlbAlBUkc0LCVkMAorCWJ0c3QJIzYsJWQwCisJamVxCTFmCisJb3J3CSNUVFJfQ0ksJWQxCisKKzE6CWxlYQlTVEFDSywlYTAKKwlkcHV0bgklZDEKKwltb3ZlbAklZDEsJWEwQAorCS5jaGlwCTY4MDMwCisJdHN0bAlBUkcxCisJam5lCTFmCisJcG1vdmUJJWEwQCwldHQwCisJanJhCTJmCisxOglwbW92ZQklYTBALCV0dDEKKzI6CS5jaGlwCTY4aworCWpyYQlMKG1tdV9tYXBfdHRfZG9uZSkKKworCS8qIHNldCAwNDAgc3BlY2lmaWMgYml0cworCSAqLworTChtbXVfbWFwX3R0XzA0MCk6CisJb3J3CSNUVFJfRU5BQkxFK1RUUl9LRVJORUxNT0RFLCVkMQorCW9ybAlBUkc0LCVkMQorCWRwdXRuCSVkMQorCisJLmNoaXAJNjgwNDAKKwl0c3RsCUFSRzEKKwlqbmUJMWYKKwltb3ZlYwklZDEsJWl0dDAKKwltb3ZlYwklZDEsJWR0dDAKKwlqcmEJMmYKKzE6CW1vdmVjCSVkMSwlaXR0MQorCW1vdmVjCSVkMSwlZHR0MQorMjoJLmNoaXAJNjhrCisKKwlqcmEJTChtbXVfbWFwX3R0X2RvbmUpCisKK0woZG9fbWFwKToKKwltbXVfbWFwX2VxCUFSRzIsQVJHMyxBUkc0CisKK0wobW11X21hcF90dF9kb25lKToKKworZnVuY19yZXR1cm4JbW11X21hcF90dAorCisvKgorICoJbW11X21hcAorICoKKyAqCVRoaXMgcm91dGluZSB3aWxsIG1hcCBhIHJhbmdlIG9mIG1lbW9yeSB1c2luZyBhIHBvaW50ZXIKKyAqCXRhYmxlIGFuZCBhbGxvY2F0aW5nIHRoZSBwYWdlcyBvbiB0aGUgZmx5IGZyb20gdGhlIGtlcm5lbC4KKyAqCVRoZSBwb2ludGVyIHRhYmxlIGRvZXMgbm90IGhhdmUgdG8gYmUgYWxyZWFkeSBsaW5rZWQgaW50bworICoJdGhlIHJvb3QgdGFibGUsIHRoaXMgcm91dGluZSB3aWxsIGRvIHRoYXQgaWYgbmVjZXNzYXJ5LgorICoKKyAqCU5PVEUKKyAqCVRoaXMgcm91dGluZSB3aWxsIGFzc2VydCBmYWlsdXJlIGFuZCB1c2UgdGhlIHNlcmlhbF9wdXRjCisgKglyb3V0aW5lcyBpbiB0aGUgY2FzZSBvZiBhIHJ1bi10aW1lIGVycm9yLiAgRm9yIGV4YW1wbGUsCisgKglpZiB0aGUgYWRkcmVzcyBpcyBhbHJlYWR5IG1hcHBlZC4KKyAqCisgKglOT1RFLTIKKyAqCVRoaXMgcm91dGluZSB3aWxsIHVzZSBlYXJseSB0ZXJtaW5hdGluZyBkZXNjcmlwdG9ycworICoJd2hlcmUgcG9zc2libGUgZm9yIHRoZSA2ODAyMCs2ODg1MSBhbmQgNjgwMzAgdHlwZQorICoJcHJvY2Vzc29ycy4KKyAqLworZnVuY19zdGFydAltbXVfbWFwLCVkMC0lZDQvJWEwLSVhNAorCisJZHB1dHMJIlxubW11X21hcDoiCisJZHB1dG4JQVJHMQorCWRwdXRuCUFSRzIKKwlkcHV0bglBUkczCisJZHB1dG4JQVJHNAorCWRwdXRjCSdcbicKKworCS8qIEdldCBsb2dpY2FsIGFkZHJlc3MgYW5kIHJvdW5kIGl0IGRvd24gdG8gMjU2S0IKKwkgKi8KKwltb3ZlbAlBUkcxLCVkMAorCWFuZGwJIy0oUEFHRVNJWkUqUEFHRV9UQUJMRV9TSVpFKSwlZDAKKwltb3ZlbAklZDAsJWEzCisKKwkvKiBHZXQgdGhlIGVuZCBhZGRyZXNzCisJICovCisJbW92ZWwJQVJHMSwlYTQKKwlhZGRsCUFSRzMsJWE0CisJc3VicWwJIzEsJWE0CisKKwkvKiBHZXQgcGh5c2ljYWwgYWRkcmVzcyBhbmQgcm91bmQgaXQgZG93biB0byAyNTZLQgorCSAqLworCW1vdmVsCUFSRzIsJWQwCisJYW5kbAkjLShQQUdFU0laRSpQQUdFX1RBQkxFX1NJWkUpLCVkMAorCW1vdmVsCSVkMCwlYTIKKworCS8qIEFkZCBwYWdlIGF0dHJpYnV0ZXMgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKi8KKwltb3ZlbAlBUkc0LCVkMAorCW9ydwkjX1BBR0VfUFJFU0VOVCtfUEFHRV9BQ0NFU1NFRCtfUEFHRV9ESVJUWSwlZDAKKwlhZGR3CSVkMCwlYTIKKworCWRwdXRuCSVhMgorCWRwdXRuCSVhMworCWRwdXRuCSVhNAorCisJaXNfbm90XzA0MF9vcl8wNjAoTChtbXVfbWFwXzAzMCkpCisKKwlhZGR3CSNfUEFHRV9HTE9CQUwwNDAsJWEyCisvKgorICoJTU1VIDA0MCAmIDA2MCBTdXBwb3J0CisgKgorICoJVGhlIE1NVSB1c2FnZSBmb3IgdGhlIDA0MCBhbmQgMDYwIGlzIGRpZmZlcmVudCBlbm91Z2ggZnJvbQorICoJdGhlIDAzMCBhbmQgNjg4NTEgdGhhdCB0aGVyZSBpcyBzZXBhcmF0ZSBjb2RlLiAgVGhpcyBjb21tZW50CisgKglibG9jayBkZXNjcmliZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBidWlsdCBieQorICoJdGhpcyBjb2RlLgorICoKKyAqCVRoZSAwNDAgZG9lcyBub3Qgc3VwcG9ydCBlYXJseSB0ZXJtaW5hdGluZyBkZXNjcmlwdG9ycywgYXMKKyAqCXRoZSAwMzAgZG9lcy4gIFRoZXJlZm9yZSwgYSB0aGlyZCBsZXZlbCBvZiB0YWJsZSBpcyBuZWVkZWQKKyAqCWZvciB0aGUgMDQwLCBhbmQgdGhhdCB3b3VsZCBiZSB0aGUgcGFnZSB0YWJsZS4gIEluIExpbnV4LAorICoJcGFnZSB0YWJsZXMgYXJlIGFsbG9jYXRlZCBkaXJlY3RseSBmcm9tIHRoZSBtZW1vcnkgYWJvdmUgdGhlCisgKglrZXJuZWwuCisgKgorICovCisKK0wobW11X21hcF8wNDApOgorCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHJvb3QgdGFibGUKKwkgKi8KKwltb3ZlbAklYTMsJWQwCisJbW92ZXEJI1JPT1RfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJbW11X2dldF9yb290X3RhYmxlX2VudHJ5CSVkMAorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcG9pbnRlciB0YWJsZQorCSAqLworCW1vdmVsCSVhMywlZDAKKwltb3ZlcQkjUFRSX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BUUl9UQUJMRV9TSVpFLTEsJWQwCisJbW11X2dldF9wdHJfdGFibGVfZW50cnkJCSVhMCwlZDAKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwltb3ZlbAklYTMsJWQwCisJbW92ZXEJI1BBR0VfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUEFHRV9UQUJMRV9TSVpFLTEsJWQwCisJbW11X2dldF9wYWdlX3RhYmxlX2VudHJ5CSVhMCwlZDAKKworCS8qIFRoZSBwYWdlIHRhYmxlIGVudHJ5IG11c3Qgbm90IG5vIGJlIGJ1c3kKKwkgKi8KKwl0c3RsCSVhMEAKKwlqbmUJTChtbXVfbWFwX2Vycm9yKQorCisJLyogRG8gdGhlIG1hcHBpbmcgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXJzCisJICovCisJbW92ZWwJJWEyLCVhMEAKKzI6CisJYWRkdwkjUEFHRVNJWkUsJWEyCisJYWRkdwkjUEFHRVNJWkUsJWEzCisKKwkvKiBSZWFkeSB3aXRoIG1hcHBpbmc/CisJICovCisJbGVhCSVhM0AoLTEpLCVhMAorCWNtcGwJJWEwLCVhNAorCWpoaQlMKG1tdV9tYXBfMDQwKQorCWpyYQlMKG1tdV9tYXBfZG9uZSkKKworTChtbXVfbWFwXzAzMCk6CisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcm9vdCB0YWJsZQorCSAqLworCW1vdmVsCSVhMywlZDAKKwltb3ZlcQkjUk9PVF9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwltbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnkJJWQwCisKKwkvKiBDaGVjayBpZiBsb2dpY2FsIGFkZHJlc3MgMzJNQiBhbGlnbmVkLAorCSAqIHNvIHdlIGNhbiB0cnkgdG8gbWFwIGl0IG9uY2UKKwkgKi8KKwltb3ZlbAklYTMsJWQwCisJYW5kbAkjKFBUUl9UQUJMRV9TSVpFKlBBR0VfVEFCTEVfU0laRSpQQUdFU0laRS0xKSYoLVJPT1RfVEFCTEVfU0laRSksJWQwCisJam5lCTFmCisKKwkvKiBJcyB0aGVyZSBlbm91Z2ggdG8gbWFwIGZvciAzMk1CIGF0IG9uY2UKKwkgKi8KKwlsZWEJJWEzQChQVFJfVEFCTEVfU0laRSpQQUdFX1RBQkxFX1NJWkUqUEFHRVNJWkUtMSksJWExCisJY21wbAklYTEsJWE0CisJamNzCTFmCisKKwlhZGRxbAkjMSwlYTEKKworCS8qIFRoZSByb290IHRhYmxlIGVudHJ5IG11c3Qgbm90IG5vIGJlIGJ1c3kKKwkgKi8KKwl0c3RsCSVhMEAKKwlqbmUJTChtbXVfbWFwX2Vycm9yKQorCisJLyogRG8gdGhlIG1hcHBpbmcgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXJzCisJICovCisJZHB1dHMJImVhcmx5IHRlcm0xIgorCWRwdXRuCSVhMgorCWRwdXRuCSVhMworCWRwdXRuCSVhMQorCWRwdXRjCSdcbicKKwltb3ZlbAklYTIsJWEwQAorCisJbW92ZWwJJWExLCVhMworCWxlYQklYTJAKFBUUl9UQUJMRV9TSVpFKlBBR0VfVEFCTEVfU0laRSpQQUdFU0laRSksJWEyCisJanJhCUwobW11X21hcG5leHRfMDMwKQorMToKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwb2ludGVyIHRhYmxlCisJICovCisJbW92ZWwJJWEzLCVkMAorCW1vdmVxCSNQVFJfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUFRSX1RBQkxFX1NJWkUtMSwlZDAKKwltbXVfZ2V0X3B0cl90YWJsZV9lbnRyeQkJJWEwLCVkMAorCisJLyogVGhlIHBvaW50ZXIgdGFibGUgZW50cnkgbXVzdCBub3Qgbm8gYmUgYnVzeQorCSAqLworCXRzdGwJJWEwQAorCWpuZQlMKG1tdV9tYXBfZXJyb3IpCisKKwkvKiBEbyB0aGUgbWFwcGluZyBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcnMKKwkgKi8KKwlkcHV0cwkiZWFybHkgdGVybTIiCisJZHB1dG4JJWEyCisJZHB1dG4JJWEzCisJZHB1dGMJJ1xuJworCW1vdmVsCSVhMiwlYTBACisKKwlhZGRsCSNQQUdFX1RBQkxFX1NJWkUqUEFHRVNJWkUsJWEyCisJYWRkbAkjUEFHRV9UQUJMRV9TSVpFKlBBR0VTSVpFLCVhMworCitMKG1tdV9tYXBuZXh0XzAzMCk6CisJLyogUmVhZHkgd2l0aCBtYXBwaW5nPworCSAqLworCWxlYQklYTNAKC0xKSwlYTAKKwljbXBsCSVhMCwlYTQKKwlqaGkJTChtbXVfbWFwXzAzMCkKKwlqcmEJTChtbXVfbWFwX2RvbmUpCisKK0wobW11X21hcF9lcnJvcik6CisKKwlkcHV0cwkibW11X21hcCBlcnJvcjoiCisJZHB1dG4JJWEyCisJZHB1dG4JJWEzCisJZHB1dGMJJ1xuJworCitMKG1tdV9tYXBfZG9uZSk6CisKK2Z1bmNfcmV0dXJuCW1tdV9tYXAKKworLyoKKyAqCW1tdV9maXh1cAorICoKKyAqCU9uIHRoZSAwNDAgY2xhc3MgbWFjaGluZXMsIGFsbCBwYWdlcyB0aGF0IGFyZSB1c2VkIGZvciB0aGUKKyAqCW1tdSBoYXZlIHRvIGJlIGZpeGVkIHVwLgorICovCisKK2Z1bmNfc3RhcnQJbW11X2ZpeHVwX3BhZ2VfbW11X2NhY2hlLCVkMC8lYTAKKworCWRwdXRzCSJtbXVfZml4dXBfcGFnZV9tbXVfY2FjaGUiCisJZHB1dG4JQVJHMQorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcm9vdCB0YWJsZQorCSAqLworCW1vdmVsCUFSRzEsJWQwCisJbW92ZXEJI1JPT1RfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJbW11X2dldF9yb290X3RhYmxlX2VudHJ5CSVkMAorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcG9pbnRlciB0YWJsZQorCSAqLworCW1vdmVsCUFSRzEsJWQwCisJbW92ZXEJI1BUUl9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwlhbmRsCSNQVFJfVEFCTEVfU0laRS0xLCVkMAorCW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5CQklYTAsJWQwCisKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRhYmxlCisJICovCisJbW92ZWwJQVJHMSwlZDAKKwltb3ZlcQkjUEFHRV9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwlhbmRsCSNQQUdFX1RBQkxFX1NJWkUtMSwlZDAKKwltbXVfZ2V0X3BhZ2VfdGFibGVfZW50cnkJJWEwLCVkMAorCisJbW92ZWwJJWEwQCwlZDAKKwlhbmRpbAkjX0NBQ0hFTUFTSzA0MCwlZDAKKwlvcmwJJXBjQChtNjhrX3BndGFibGVfY2FjaGVtb2RlKSwlZDAKKwltb3ZlbAklZDAsJWEwQAorCisJZHB1dGMJJ1xuJworCitmdW5jX3JldHVybgltbXVfZml4dXBfcGFnZV9tbXVfY2FjaGUKKworLyoKKyAqCW1tdV90ZW1wX21hcAorICoKKyAqCWNyZWF0ZSBhIHRlbXBvcmFyeSBtYXBwaW5nIHRvIGVuYWJsZSB0aGUgbW11LAorICoJdGhpcyB3ZSBkb24ndCBuZWVkIGFueSB0cmFuc3BhcmF0aW9uIHRyYW5zbGF0aW9uIHRyaWNrcy4KKyAqLworCitmdW5jX3N0YXJ0CW1tdV90ZW1wX21hcCwlZDAvJWQxLyVhMC8lYTEKKworCWRwdXRzCSJtbXVfdGVtcF9tYXAiCisJZHB1dG4JQVJHMQorCWRwdXRuCUFSRzIKKwlkcHV0YwknXG4nCisKKwlsZWEJJXBjQChMKHRlbXBfbW1hcF9tZW0pKSwlYTEKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGluIHRoZSByb290IHRhYmxlCisJICovCisJbW92ZWwJQVJHMiwlZDAKKwltb3ZlcQkjUk9PVF9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwltbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnkJJWQwCisKKwkvKiBDaGVjayBpZiB0aGUgdGFibGUgaXMgdGVtcG9yYXJ5IGFsbG9jYXRlZCwgc28gd2UgaGF2ZSB0byByZXVzZSBpdAorCSAqLworCW1vdmVsCSVhMEAsJWQwCisJY21wbAklcGNAKEwobWVtb3J5X3N0YXJ0KSksJWQwCisJamNjCTFmCisKKwkvKiBUZW1wb3JhcnkgYWxsb2NhdGUgYSBwdHIgdGFibGUgYW5kIGluc2VydCBpdCBpbnRvIHRoZSByb290IHRhYmxlCisJICovCisJbW92ZWwJJWExQCwlZDAKKwlhZGRsCSNQVFJfVEFCTEVfU0laRSo0LCVhMUAKKwlvcncJI19QQUdFX1RBQkxFK19QQUdFX0FDQ0VTU0VELCVkMAorCW1vdmVsCSVkMCwlYTBACisJZHB1dHMJIiAobmV3KSIKKzE6CisJZHB1dG4JJWQwCisJLyogTWFzayB0aGUgcm9vdCB0YWJsZSBlbnRyeSBmb3IgdGhlIHB0ciB0YWJsZQorCSAqLworCWFuZHcJIy1ST09UX1RBQkxFX1NJWkUsJWQwCisJbW92ZWwJJWQwLCVhMAorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcG9pbnRlciB0YWJsZQorCSAqLworCW1vdmVsCUFSRzIsJWQwCisJbW92ZXEJI1BUUl9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwlhbmRsCSNQVFJfVEFCTEVfU0laRS0xLCVkMAorCWxlYQklYTBAKCVkMCo0KSwlYTAKKwlkcHV0bgklYTAKKworCS8qIENoZWNrIGlmIGEgdGVtcG9yYXJ5IHBhZ2UgdGFibGUgaXMgYWxyZWFkeSBhbGxvY2F0ZWQKKwkgKi8KKwltb3ZlbAklYTBALCVkMAorCWpuZQkxZgorCisJLyogVGVtcG9yYXJ5IGFsbG9jYXRlIGEgcGFnZSB0YWJsZSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIHB0ciB0YWJsZQorCSAqLworCW1vdmVsCSVhMUAsJWQwCisJLyogVGhlIDUxMiBzaG91bGQgYmUgUEFHRV9UQUJMRV9TSVpFKjQsIGJ1dCB0aGF0IHZpb2xhdGVzIHRoZQorCSAgIGFsaWdubWVudCByZXN0cmljdGlvbiBmb3IgcG9pbnRlciB0YWJsZXMgb24gdGhlICcwWzQ2XTAuICAqLworCWFkZGwJIzUxMiwlYTFACisJb3J3CSNfUEFHRV9UQUJMRStfUEFHRV9BQ0NFU1NFRCwlZDAKKwltb3ZlbAklZDAsJWEwQAorCWRwdXRzCSIgKG5ldykiCisxOgorCWRwdXRuCSVkMAorCS8qIE1hc2sgdGhlIHB0ciB0YWJsZSBlbnRyeSBmb3IgdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwlhbmR3CSMtUFRSX1RBQkxFX1NJWkUsJWQwCisJbW92ZWwJJWQwLCVhMAorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0YWJsZQorCSAqLworCW1vdmVsCUFSRzIsJWQwCisJbW92ZXEJI1BBR0VfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUEFHRV9UQUJMRV9TSVpFLTEsJWQwCisJbGVhCSVhMEAoJWQwKjQpLCVhMAorCWRwdXRuCSVhMAorCisJLyogSW5zZXJ0IHRoZSBhZGRyZXNzIGludG8gdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcxLCVkMAorCWFuZHcJIy1QQUdFU0laRSwlZDAKKwlvcncJI19QQUdFX1BSRVNFTlQrX1BBR0VfQUNDRVNTRUQrX1BBR0VfRElSVFksJWQwCisJbW92ZWwJJWQwLCVhMEAKKwlkcHV0bgklZDAKKworCWRwdXRjCSdcbicKKworZnVuY19yZXR1cm4JbW11X3RlbXBfbWFwCisKK2Z1bmNfc3RhcnQJbW11X2VuZ2FnZSwlZDAtJWQyLyVhMC0lYTMKKworCW1vdmVxCSNST09UX1RBQkxFX1NJWkUtMSwlZDAKKwkvKiBUZW1wb3JhcmlseSB1c2UgYSBkaWZmZXJlbnQgcm9vdCB0YWJsZS4gICovCisJbGVhCSVwY0AoTChrZXJuZWxfcGdkaXJfcHRyKSksJWEwCisJbW92ZWwJJWEwQCwlYTIKKwltb3ZlbAklcGNAKEwobWVtb3J5X3N0YXJ0KSksJWExCisJbW92ZWwJJWExLCVhMEAKKwltb3ZlbAklYTIsJWEwCisxOgorCW1vdmVsCSVhMEArLCVhMUArCisJZGJyYQklZDAsMWIKKworCWxlYQklcGNAKEwodGVtcF9tbWFwX21lbSkpLCVhMAorCW1vdmVsCSVhMSwlYTBACisKKwltb3ZldwkjUEFHRVNJWkUtMSwlZDAKKzE6CisJY2xybAklYTFAKworCWRicmEJJWQwLDFiCisKKwlsZWEJJXBjQCgxYiksJWEwCisJbW92ZWwJIzFiLCVhMQorCS8qIFNraXAgdGVtcCBtYXBwaW5ncyBpZiBwaHlzID09IHZpcnQgKi8KKwljbXBsCSVhMCwlYTEKKwlqZXEJMWYKKworCW1tdV90ZW1wX21hcAklYTAsJWEwCisJbW11X3RlbXBfbWFwCSVhMCwlYTEKKworCWFkZHcJI1BBR0VTSVpFLCVhMAorCWFkZHcJI1BBR0VTSVpFLCVhMQorCW1tdV90ZW1wX21hcAklYTAsJWEwCisJbW11X3RlbXBfbWFwCSVhMCwlYTEKKzE6CisJbW92ZWwJJXBjQChMKG1lbW9yeV9zdGFydCkpLCVhMworCW1vdmVsCSVwY0AoTChwaHlzX2tlcm5lbF9zdGFydCkpLCVkMgorCisJaXNfbm90XzA0MF9vcl8wNjAoTChtbXVfZW5nYWdlXzAzMCkpCisKK0wobW11X2VuZ2FnZV8wNDApOgorCS5jaGlwCTY4MDQwCisJbm9wCisJY2ludmEJJWJjCisJbm9wCisJcGZsdXNoYQorCW5vcAorCW1vdmVjCSVhMywlc3JwCisJbW92ZWwJI1RDX0VOQUJMRStUQ19QQUdFNEssJWQwCisJbW92ZWMJJWQwLCV0YwkJLyogZW5hYmxlIHRoZSBNTVUgKi8KKwlqbXAJMWY6bAorMToJbm9wCisJbW92ZWMJJWEyLCVzcnAKKwlub3AKKwljaW52YQklYmMKKwlub3AKKwlwZmx1c2hhCisJLmNoaXAJNjhrCisJanJhCUwobW11X2VuZ2FnZV9jbGVhbnVwKQorCitMKG1tdV9lbmdhZ2VfMDMwX3RlbXApOgorCS5zcGFjZQkxMgorTChtbXVfZW5nYWdlXzAzMCk6CisJLmNoaXAJNjgwMzAKKwlsZWEJJXBjQChMKG1tdV9lbmdhZ2VfMDMwX3RlbXApKSwlYTAKKwltb3ZlbAkjMHg4MDAwMDAwMiwlYTBACisJbW92ZWwJJWEzLCVhMEAoNCkKKwltb3ZlbAkjMHgwODA4LCVkMAorCW1vdmVjCSVkMCwlY2FjcgorCXBtb3ZlCSVhMEAsJXNycAorCXBmbHVzaGEKKwkvKgorCSAqIGVuYWJsZSxzdXBlciByb290IGVuYWJsZSw0MDk2IGJ5dGUgcGFnZXMsNyBiaXQgcm9vdCBpbmRleCwKKwkgKiA3IGJpdCBwb2ludGVyIGluZGV4LCA2IGJpdCBwYWdlIHRhYmxlIGluZGV4LgorCSAqLworCW1vdmVsCSMweDgyYzA3NzYwLCVhMEAoOCkKKwlwbW92ZQklYTBAKDgpLCV0YwkvKiBlbmFibGUgdGhlIE1NVSAqLworCWptcAkxZjpsCisxOgltb3ZlbAklYTIsJWEwQCg0KQorCW1vdmVsCSMweDA4MDgsJWQwCisJbW92ZWMJJWQwLCVjYWNyCisJcG1vdmUJJWEwQCwlc3JwCisJcGZsdXNoYQorCS5jaGlwCTY4aworCitMKG1tdV9lbmdhZ2VfY2xlYW51cCk6CisJc3VibAkjUEFHRV9PRkZTRVQsJWQyCisJc3VibAklZDIsJWEyCisJbW92ZWwJJWEyLEwoa2VybmVsX3BnZGlyX3B0cikKKwlzdWJsCSVkMiwlZnAKKwlzdWJsCSVkMiwlc3AKKwlzdWJsCSVkMixBUkcwCisKK2Z1bmNfcmV0dXJuCW1tdV9lbmdhZ2UKKworZnVuY19zdGFydAltbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnksJWQwLyVhMQorCisjaWYgMAorCWRwdXRzCSJtbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnk6IgorCWRwdXRuCUFSRzEKKwlkcHV0cwkiID0iCisjZW5kaWYKKworCW1vdmVsCSVwY0AoTChrZXJuZWxfcGdkaXJfcHRyKSksJWEwCisJdHN0bAklYTAKKwlqbmUJMmYKKworCWRwdXRzCSJcbm1tdV9pbml0OiIKKworCS8qIEZpbmQgdGhlIHN0YXJ0IG9mIGZyZWUgbWVtb3J5LCBnZXRfYmlfcmVjb3JkIGRvZXMgdGhpcyBmb3IgdXMsCisJICogYXMgdGhlIGJvb3RpbmZvIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGRpcmVjdGx5IGJlaGluZCB0aGUga2VybmVsCisJICogYW5kIGFuZCB3ZSBzaW1wbHkgc2VhcmNoIGZvciB0aGUgbGFzdCBlbnRyeS4KKwkgKi8KKwlnZXRfYmlfcmVjb3JkCUJJX0xBU1QKKwlhZGR3CSNQQUdFU0laRS0xLCVhMAorCW1vdmVsCSVhMCwlZDAKKwlhbmR3CSMtUEFHRVNJWkUsJWQwCisKKwlkcHV0bgklZDAKKworCWxlYQklcGNAKEwobWVtb3J5X3N0YXJ0KSksJWEwCisJbW92ZWwJJWQwLCVhMEAKKwlsZWEJJXBjQChMKGtlcm5lbF9lbmQpKSwlYTAKKwltb3ZlbAklZDAsJWEwQAorCisJLyogd2UgaGF2ZSB0byByZXR1cm4gdGhlIGZpcnN0IHBhZ2UgYXQgX3N0ZXh0IHNpbmNlIHRoZSBpbml0IGNvZGUKKwkgKiBpbiBtbS9pbml0LmMgc2ltcGx5IGV4cGVjdHMga2VybmVsX3BnX2RpciB0aGVyZSwgdGhlIHJlc3Qgb2YKKwkgKiBwYWdlIGlzIHVzZWQgZm9yIGZ1cnRoZXIgcHRyIHRhYmxlcyBpbiBnZXRfcHRyX3RhYmxlLgorCSAqLworCWxlYQklcGNAKF9zdGV4dCksJWEwCisJbGVhCSVwY0AoTChtbXVfY2FjaGVkX3BvaW50ZXJfdGFibGVzKSksJWExCisJbW92ZWwJJWEwLCVhMUAKKwlhZGRsCSNST09UX1RBQkxFX1NJWkUqNCwlYTFACisKKwlsZWEJJXBjQChMKG1tdV9udW1fcG9pbnRlcl90YWJsZXMpKSwlYTEKKwlhZGRxbAkjMSwlYTFACisKKwkvKiBjbGVhciB0aGUgcGFnZQorCSAqLworCW1vdmVsCSVhMCwlYTEKKwltb3ZldwkjUEFHRVNJWkUvNC0xLCVkMAorMToKKwljbHJsCSVhMUArCisJZGJyYQklZDAsMWIKKworCWxlYQklcGNAKEwoa2VybmVsX3BnZGlyX3B0cikpLCVhMQorCW1vdmVsCSVhMCwlYTFACisKKwlkcHV0bgklYTAKKwlkcHV0YwknXG4nCisyOgorCW1vdmVsCUFSRzEsJWQwCisJbGVhCSVhMEAoJWQwKjQpLCVhMAorCisjaWYgMAorCWRwdXRuCSVhMAorCWRwdXRjCSdcbicKKyNlbmRpZgorCitmdW5jX3JldHVybgltbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnkKKworCisKK2Z1bmNfc3RhcnQJbW11X2dldF9wdHJfdGFibGVfZW50cnksJWQwLyVhMQorCisjaWYgMAorCWRwdXRzCSJtbXVfZ2V0X3B0cl90YWJsZV9lbnRyeToiCisJZHB1dG4JQVJHMQorCWRwdXRuCUFSRzIKKwlkcHV0cwkiID0iCisjZW5kaWYKKworCW1vdmVsCUFSRzEsJWEwCisJbW92ZWwJJWEwQCwlZDAKKwlqbmUJMmYKKworCS8qIEtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBwb2ludGVyIHRhYmxlcyB3ZSB1c2UKKwkgKi8KKwlkcHV0cwkiXG5tbXVfZ2V0X25ld19wdHJfdGFibGU6IgorCWxlYQklcGNAKEwobW11X251bV9wb2ludGVyX3RhYmxlcykpLCVhMAorCW1vdmVsCSVhMEAsJWQwCisJYWRkcWwJIzEsJWEwQAorCisJLyogU2VlIGlmIHRoZXJlIGlzIGEgZnJlZSBwb2ludGVyIHRhYmxlIGluIG91ciBjYWNoZSBvZiBwb2ludGVyIHRhYmxlcworCSAqLworCWxlYQklcGNAKEwobW11X2NhY2hlZF9wb2ludGVyX3RhYmxlcykpLCVhMQorCWFuZHcJIzcsJWQwCisJam5lCTFmCisKKwkvKiBHZXQgYSBuZXcgcG9pbnRlciB0YWJsZSBwYWdlIGZyb20gYWJvdmUgdGhlIGtlcm5lbCBtZW1vcnkKKwkgKi8KKwlnZXRfbmV3X3BhZ2UKKwltb3ZlbAklYTAsJWExQAorMToKKwkvKiBUaGVyZSBpcyBhbiB1bnVzZWQgcG9pbnRlciB0YWJsZSBpbiBvdXIgY2FjaGUuLi4gdXNlIGl0CisJICovCisJbW92ZWwJJWExQCwlZDAKKwlhZGRsCSNQVFJfVEFCTEVfU0laRSo0LCVhMUAKKworCWRwdXRuCSVkMAorCWRwdXRjCSdcbicKKworCS8qIEluc2VydCB0aGUgbmV3IHBvaW50ZXIgdGFibGUgaW50byB0aGUgcm9vdCB0YWJsZQorCSAqLworCW1vdmVsCUFSRzEsJWEwCisJb3J3CSNfUEFHRV9UQUJMRStfUEFHRV9BQ0NFU1NFRCwlZDAKKwltb3ZlbAklZDAsJWEwQAorMjoKKwkvKiBFeHRyYWN0IHRoZSBwb2ludGVyIHRhYmxlIGVudHJ5CisJICovCisJYW5kdwkjLVBUUl9UQUJMRV9TSVpFLCVkMAorCW1vdmVsCSVkMCwlYTAKKwltb3ZlbAlBUkcyLCVkMAorCWxlYQklYTBAKCVkMCo0KSwlYTAKKworI2lmIDAKKwlkcHV0bgklYTAKKwlkcHV0YwknXG4nCisjZW5kaWYKKworZnVuY19yZXR1cm4JbW11X2dldF9wdHJfdGFibGVfZW50cnkKKworCitmdW5jX3N0YXJ0CW1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeSwlZDAvJWExCisKKyNpZiAwCisJZHB1dHMJIm1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeToiCisJZHB1dG4JQVJHMQorCWRwdXRuCUFSRzIKKwlkcHV0cwkiID0iCisjZW5kaWYKKworCW1vdmVsCUFSRzEsJWEwCisJbW92ZWwJJWEwQCwlZDAKKwlqbmUJMmYKKworCS8qIElmIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGRvZXNuJ3QgZXhpc3QsIHdlIGFsbG9jYXRlIGEgY29tcGxldGUgbmV3CisJICogcGFnZSBhbmQgdXNlIGl0IGFzIG9uZSBjb250aW51ZXMgYmlnIHBhZ2UgdGFibGUgd2hpY2ggY2FuIGNvdmVyCisJICogNE1CIG9mIG1lbW9yeSwgbmVhcmx5IGFsbW9zdCBhbGwgbWFwcGluZ3MgaGF2ZSB0aGF0IGFsaWdubWVudC4KKwkgKi8KKwlnZXRfbmV3X3BhZ2UKKwlhZGR3CSNfUEFHRV9UQUJMRStfUEFHRV9BQ0NFU1NFRCwlYTAKKworCS8qIGFsaWduIHBvaW50ZXIgdGFibGUgZW50cnkgZm9yIGEgcGFnZSBvZiBwYWdlIHRhYmxlcworCSAqLworCW1vdmVsCUFSRzEsJWQwCisJYW5kdwkjLShQQUdFU0laRS9QQUdFX1RBQkxFX1NJWkUpLCVkMAorCW1vdmVsCSVkMCwlYTEKKworCS8qIEluc2VydCB0aGUgcGFnZSB0YWJsZXMgaW50byB0aGUgcG9pbnRlciBlbnRyaWVzCisJICovCisJbW92ZXEJI1BBR0VTSVpFL1BBR0VfVEFCTEVfU0laRS80LTEsJWQwCisxOgorCW1vdmVsCSVhMCwlYTFAKworCWxlYQklYTBAKFBBR0VfVEFCTEVfU0laRSo0KSwlYTAKKwlkYnJhCSVkMCwxYgorCisJLyogTm93IHdlIGNhbiBnZXQgdGhlIGluaXRpYWxpemVkIHBvaW50ZXIgdGFibGUgZW50cnkKKwkgKi8KKwltb3ZlbAlBUkcxLCVhMAorCW1vdmVsCSVhMEAsJWQwCisyOgorCS8qIEV4dHJhY3QgdGhlIHBhZ2UgdGFibGUgZW50cnkKKwkgKi8KKwlhbmR3CSMtUEFHRV9UQUJMRV9TSVpFLCVkMAorCW1vdmVsCSVkMCwlYTAKKwltb3ZlbAlBUkcyLCVkMAorCWxlYQklYTBAKCVkMCo0KSwlYTAKKworI2lmIDAKKwlkcHV0bgklYTAKKwlkcHV0YwknXG4nCisjZW5kaWYKKworZnVuY19yZXR1cm4JbW11X2dldF9wYWdlX3RhYmxlX2VudHJ5CisKKy8qCisgKglnZXRfbmV3X3BhZ2UKKyAqCisgKglSZXR1cm4gYSBuZXcgcGFnZSBmcm9tIHRoZSBtZW1vcnkgc3RhcnQgYW5kIGNsZWFyIGl0LgorICovCitmdW5jX3N0YXJ0CWdldF9uZXdfcGFnZSwlZDAvJWExCisKKwlkcHV0cwkiXG5nZXRfbmV3X3BhZ2U6IgorCisJLyogYWxsb2NhdGUgdGhlIHBhZ2UgYW5kIGFkanVzdCBtZW1vcnlfc3RhcnQKKwkgKi8KKwlsZWEJJXBjQChMKG1lbW9yeV9zdGFydCkpLCVhMAorCW1vdmVsCSVhMEAsJWExCisJYWRkbAkjUEFHRVNJWkUsJWEwQAorCisJLyogY2xlYXIgdGhlIG5ldyBwYWdlCisJICovCisJbW92ZWwJJWExLCVhMAorCW1vdmV3CSNQQUdFU0laRS80LTEsJWQwCisxOgorCWNscmwJJWExQCsKKwlkYnJhCSVkMCwxYgorCisJZHB1dG4JJWEwCisJZHB1dGMJJ1xuJworCitmdW5jX3JldHVybglnZXRfbmV3X3BhZ2UKKworCisKKy8qCisgKiBEZWJ1ZyBvdXRwdXQgc3VwcG9ydAorICogQXRhcmlhbnMgaGF2ZSBhIGNob2ljZSBiZXR3ZWVuIHRoZSBwYXJhbGxlbCBwb3J0LCB0aGUgc2VyaWFsIHBvcnQKKyAqIGZyb20gdGhlIE1GUCBvciBhIHNlcmlhbCBwb3J0IG9mIHRoZSBTQ0MKKyAqLworCisjaWZkZWYgQ09ORklHX01BQworCitMKHNjY19pbml0YWJsZV9tYWMpOgorCS5ieXRlCTksMTIJCS8qIFJlc2V0ICovCisJLmJ5dGUJNCwweDQ0CQkvKiB4MTYsIDEgc3RvcGJpdCwgbm8gcGFyaXR5ICovCisJLmJ5dGUJMywweGMwCQkvKiByZWNlaXZlcjogOCBicGMgKi8KKwkuYnl0ZQk1LDB4ZTIJCS8qIHRyYW5zbWl0dGVyOiA4IGJwYywgYXNzZXJ0IGR0ci9ydHMgKi8KKwkuYnl0ZQk5LDAJCS8qIG5vIGludGVycnVwdHMgKi8KKwkuYnl0ZQkxMCwwCQkvKiBOUlogKi8KKwkuYnl0ZQkxMSwweDUwCQkvKiB1c2UgYmF1ZCByYXRlIGdlbmVyYXRvciAqLworCS5ieXRlCTEyLDEwLDEzLDAJLyogOTYwMCBiYXVkICovCisJLmJ5dGUJMTQsMQkJLyogQmF1ZCByYXRlIGdlbmVyYXRvciBlbmFibGUgKi8KKwkuYnl0ZQkzLDB4YzEJCS8qIGVuYWJsZSByZWNlaXZlciAqLworCS5ieXRlCTUsMHhlYQkJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisJLmJ5dGUJLTEKKwkuZXZlbgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKy8qICNkZWZpbmUgVVNFX1BSSU5URVIgKi8KKy8qICNkZWZpbmUgVVNFX1NDQ19CICovCisvKiAjZGVmaW5lIFVTRV9TQ0NfQSAqLworI2RlZmluZSBVU0VfTUZQCisKKyNpZiBkZWZpbmVkKFVTRV9TQ0NfQSkgfHwgZGVmaW5lZChVU0VfU0NDX0IpCisjZGVmaW5lIFVTRV9TQ0MKKy8qIEluaXRpYWxpc2F0aW9uIHRhYmxlIGZvciBTQ0MgKi8KK0woc2NjX2luaXRhYmxlKToKKwkuYnl0ZQk5LDEyCQkvKiBSZXNldCAqLworCS5ieXRlCTQsMHg0NAkJLyogeDE2LCAxIHN0b3BiaXQsIG5vIHBhcml0eSAqLworCS5ieXRlCTMsMHhjMAkJLyogcmVjZWl2ZXI6IDggYnBjICovCisJLmJ5dGUJNSwweGUyCQkvKiB0cmFuc21pdHRlcjogOCBicGMsIGFzc2VydCBkdHIvcnRzICovCisJLmJ5dGUJOSwwCQkvKiBubyBpbnRlcnJ1cHRzICovCisJLmJ5dGUJMTAsMAkJLyogTlJaICovCisJLmJ5dGUJMTEsMHg1MAkJLyogdXNlIGJhdWQgcmF0ZSBnZW5lcmF0b3IgKi8KKwkuYnl0ZQkxMiwyNCwxMywwCS8qIDk2MDAgYmF1ZCAqLworCS5ieXRlCTE0LDIsMTQsMwkvKiB1c2UgbWFzdGVyIGNsb2NrIGZvciBCUkcsIGVuYWJsZSAqLworCS5ieXRlCTMsMHhjMQkJLyogZW5hYmxlIHJlY2VpdmVyICovCisJLmJ5dGUJNSwweGVhCQkvKiBlbmFibGUgdHJhbnNtaXR0ZXIgKi8KKwkuYnl0ZQktMQorCS5ldmVuCisjZW5kaWYKKworI2lmZGVmIFVTRV9QUklOVEVSCisKK0xQU0dfU0VMRUNUCT0gMHhmZjg4MDAKK0xQU0dfUkVBRAk9IDB4ZmY4ODAwCitMUFNHX1dSSVRFCT0gMHhmZjg4MDIKK0xQU0dfSU9fQQk9IDE0CitMUFNHX0lPX0IJPSAxNQorTFBTR19DT05UUk9MCT0gNworTFNUTUZQX0dQSVAJPSAweGZmZmEwMQorTFNUTUZQX0REUgk9IDB4ZmZmYTA1CitMU1RNRlBfSUVSQgk9IDB4ZmZmYTA5CisKKyNlbGlmIGRlZmluZWQoVVNFX1NDQ19CKQorCitMU0NDX0NUUkwJPSAweGZmOGM4NQorTFNDQ19EQVRBCT0gMHhmZjhjODcKKworI2VsaWYgZGVmaW5lZChVU0VfU0NDX0EpCisKK0xTQ0NfQ1RSTAk9IDB4ZmY4YzgxCitMU0NDX0RBVEEJPSAweGZmOGM4MworCisjZWxpZiBkZWZpbmVkKFVTRV9NRlApCisKK0xNRlBfVUNSICAgICA9IDB4ZmZmYTI5CitMTUZQX1REQ0RSICAgPSAweGZmZmExZAorTE1GUF9URERSICAgID0gMHhmZmZhMjUKK0xNRlBfVFNSICAgICA9IDB4ZmZmYTJkCitMTUZQX1VEUiAgICAgPSAweGZmZmEyZgorCisjZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfQVRBUkkgKi8KKworLyoKKyAqIFNlcmlhbCBwb3J0IG91dHB1dCBzdXBwb3J0LgorICovCisKKy8qCisgKiBJbml0aWFsaXplIHNlcmlhbCBwb3J0IGhhcmR3YXJlIGZvciA5NjAwLzgvMQorICovCitmdW5jX3N0YXJ0CXNlcmlhbF9pbml0LCVkMC8lZDEvJWEwLyVhMQorCS8qCisJICoJU29tZSBvZiB0aGUgcmVnaXN0ZXIgdXNhZ2UgdGhhdCBmb2xsb3dzCisJICoJQ09ORklHX0FNSUdBCisJICoJCWEwID0gcG9pbnRlciB0byBib290IGluZm8gcmVjb3JkCisJICoJCWQwID0gYm9vdCBpbmZvIG9mZnNldAorCSAqCUNPTkZJR19BVEFSSQorCSAqCQlhMCA9IGFkZHJlc3Mgb2YgU0NDCisJICoJCWExID0gTGlvYmFzZSBhZGRyZXNzL2FkZHJlc3Mgb2Ygc2NjX2luaXRhYmxlCisJICoJCWQwID0gaW5pdCBkYXRhIGZvciBzZXJpYWwgcG9ydAorCSAqCUNPTkZJR19NQUMKKwkgKgkJYTAgPSBhZGRyZXNzIG9mIFNDQworCSAqCQlhMSA9IGFkZHJlc3Mgb2Ygc2NjX2luaXRhYmxlX21hYworCSAqCQlkMCA9IGluaXQgZGF0YSBmb3Igc2VyaWFsIHBvcnQKKwkgKi8KKworI2lmZGVmIENPTkZJR19BTUlHQQorI2RlZmluZSBTRVJJQUxfRFRSCTcKKyNkZWZpbmUgU0VSSUFMX0NOVFJMCUNJQUJCQVNFK0NfUFJBCisKKwlpc19ub3RfYW1pZ2EoMWYpCisJbGVhCSVwY0AoTChjdXN0b20pKSwlYTAKKwltb3ZlbAkjLVpUV09CQVNFLCVhMEAKKwliY2xyCSNTRVJJQUxfRFRSLFNFUklBTF9DTlRSTC1aVFdPQkFTRQorCWdldF9iaV9yZWNvcmQJQklfQU1JR0FfU0VSUEVSCisJbW92ZXcJJWEwQCxDVVNUT01CQVNFK0NfU0VSUEVSLVpUV09CQVNFCit8CW1vdmV3CSM2MSxDVVNUT01CQVNFK0NfU0VSUEVSLVpUV09CQVNFCisxOgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FUQVJJCisJaXNfbm90X2F0YXJpKDRmKQorCW1vdmVsCSVwY0AoTChpb2Jhc2UpKSwlYTEKKyNpZiBkZWZpbmVkKFVTRV9QUklOVEVSKQorCWJjbHIJIzAsJWExQChMU1RNRlBfSUVSQikKKwliY2xyCSMwLCVhMUAoTFNUTUZQX0REUikKKwltb3ZlYgkjTFBTR19DT05UUk9MLCVhMUAoTFBTR19TRUxFQ1QpCisJbW92ZWIJIzB4ZmYsJWExQChMUFNHX1dSSVRFKQorCW1vdmViCSNMUFNHX0lPX0IsJWExQChMUFNHX1NFTEVDVCkKKwljbHJiCSVhMUAoTFBTR19XUklURSkKKwltb3ZlYgkjTFBTR19JT19BLCVhMUAoTFBTR19TRUxFQ1QpCisJbW92ZWIJJWExQChMUFNHX1JFQUQpLCVkMAorCWJzZXQJIzUsJWQwCisJbW92ZWIJJWQwLCVhMUAoTFBTR19XUklURSkKKyNlbGlmIGRlZmluZWQoVVNFX1NDQykKKwlsZWEJJWExQChMU0NDX0NUUkwpLCVhMAorCWxlYQklcGNAKEwoc2NjX2luaXRhYmxlKSksJWExCisyOgltb3ZlYgklYTFAKywlZDAKKwlqbWkJM2YKKwltb3ZlYgklZDAsJWEwQAorCW1vdmViCSVhMUArLCVhMEAKKwlqcmEJMmIKKzM6CWNscmIJJWEwQAorI2VsaWYgZGVmaW5lZChVU0VfTUZQKQorCWJjbHIJIzEsJWExQChMTUZQX1RTUikKKwltb3ZlYiAgICMweDg4LCVhMUAoTE1GUF9VQ1IpCisJYW5kYgkjMHg3MCwlYTFAKExNRlBfVERDRFIpCisJbW92ZWIgICAjMiwlYTFAKExNRlBfVEREUikKKwlvcmIJIzEsJWExQChMTUZQX1REQ0RSKQorCWJzZXQJIzEsJWExQChMTUZQX1RTUikKKyNlbmRpZgorCWpyYQlMKHNlcmlhbF9pbml0X2RvbmUpCis0OgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQworCWlzX25vdF9tYWMoTChzZXJpYWxfaW5pdF9ub3RfbWFjKSkKKyNpZmRlZiBNQUNfU0VSSUFMX0RFQlVHCisjaWYgIWRlZmluZWQoTUFDX1VTRV9TQ0NfQSkgJiYgIWRlZmluZWQoTUFDX1VTRV9TQ0NfQikKKyNkZWZpbmUgTUFDX1VTRV9TQ0NfQgorI2VuZGlmCisjZGVmaW5lIG1hY19zY2NfY2hhX2JfY3RybF9vZmZzZXQJMHgwCisjZGVmaW5lIG1hY19zY2NfY2hhX2FfY3RybF9vZmZzZXQJMHgyCisjZGVmaW5lIG1hY19zY2NfY2hhX2JfZGF0YV9vZmZzZXQJMHg0CisjZGVmaW5lIG1hY19zY2NfY2hhX2FfZGF0YV9vZmZzZXQJMHg2CisKKyNpZmRlZiBNQUNfVVNFX1NDQ19BCisJLyogSW5pdGlhbGl6ZSBjaGFubmVsIEEgKi8KKwltb3ZlbAklcGNAKEwobWFjX3NjY2Jhc2UpKSwlYTAKKwlsZWEJJXBjQChMKHNjY19pbml0YWJsZV9tYWMpKSwlYTEKKzU6CW1vdmViCSVhMUArLCVkMAorCWptaQk2ZgorCW1vdmViCSVkMCwlYTBAKG1hY19zY2NfY2hhX2FfY3RybF9vZmZzZXQpCisJbW92ZWIJJWExQCssJWEwQChtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0KQorCWpyYQk1YgorNjoKKyNlbmRpZgkvKiBNQUNfVVNFX1NDQ19BICovCisKKyNpZmRlZiBNQUNfVVNFX1NDQ19CCisJLyogSW5pdGlhbGl6ZSBjaGFubmVsIEIgKi8KKyNpZm5kZWYgTUFDX1VTRV9TQ0NfQQkvKiBMb2FkIG1hY19zY2NiYXNlIG9ubHkgaWYgbmVlZGVkICovCisJbW92ZWwJJXBjQChMKG1hY19zY2NiYXNlKSksJWEwCisjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQSAqLworCWxlYQklcGNAKEwoc2NjX2luaXRhYmxlX21hYykpLCVhMQorNzoJbW92ZWIJJWExQCssJWQwCisJam1pCThmCisJbW92ZWIJJWQwLCVhMEAobWFjX3NjY19jaGFfYl9jdHJsX29mZnNldCkKKwltb3ZlYgklYTFAKywlYTBAKG1hY19zY2NfY2hhX2JfY3RybF9vZmZzZXQpCisJanJhCTdiCis4OgorI2VuZGlmCS8qIE1BQ19VU0VfU0NDX0IgKi8KKyNlbmRpZgkvKiBNQUNfU0VSSUFMX0RFQlVHICovCisKKwlqcmEJTChzZXJpYWxfaW5pdF9kb25lKQorTChzZXJpYWxfaW5pdF9ub3RfbWFjKToKKyNlbmRpZgkvKiBDT05GSUdfTUFDICovCisKKyNpZmRlZiBDT05GSUdfUTQwCisJaXNfbm90X3E0MCgyZikKKy8qIGRlYnVnIG91dHB1dCBnb2VzIGludG8gU1JBTSwgc28gd2UgZG9uJ3QgZG8gaXQgdW5sZXNzIHJlcXVlc3RlZAorICAgLSBjaGVjayBmb3IgJyVMWCQnIHNpZ25hdHVyZSBpbiBTUkFNICAgKi8KKwlsZWEJJXBjQChxNDBfbWVtX2NwdHIpLCVhMQorCW1vdmUubAkjMHhmZjAyMDAxMCwlYTFAICAvKiBtdXN0IGJlIGluaXRlZCAtIGFsc28gdXNlZCBieSBkZWJ1Zz1tZW0gKi8KKwltb3ZlLmwJIzB4ZmYwMjAwMDAsJWExCisJY21wLmIJIyclJywlYTFACisJYm5lCTJmCS8qbm9kYmcqLworCWFkZHEudwkjNCwlYTEKKwljbXAuYgkjJ0wnLCVhMUAKKwlibmUJMmYJLypub2RiZyovCisJYWRkcS53CSM0LCVhMQorCWNtcC5iCSMnWCcsJWExQAorCWJuZQkyZgkvKm5vZGJnKi8KKwlhZGRxLncJIzQsJWExCisJY21wLmIJIyckJywlYTFACisJYm5lCTJmCS8qbm9kYmcqLworCS8qIHNpZ25hdHVyZSBPSyAqLworCWxlYQklcGNAKEwocTQwX2RvX2RlYnVnKSksJWExCisJdGFzCSVhMUAKKy8qbm9kYmc6IHE0MF9kb19kZWJ1ZyBpcyAwIGJ5IGRlZmF1bHQqLworMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FQT0xMTworLyogV2UgY291bnQgb24gdGhlIFBST00gaW5pdGlhbGl6aW5nIFNJTzEgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQMzAwCisvKiBXZSBjb3VudCBvbiB0aGUgYm9vdCBsb2FkZXIgaW5pdGlhbGlzaW5nIHRoZSBVQVJUICovCisjZW5kaWYKKworTChzZXJpYWxfaW5pdF9kb25lKToKK2Z1bmNfcmV0dXJuCXNlcmlhbF9pbml0CisKKy8qCisgKiBPdXRwdXQgY2hhcmFjdGVyIG9uIHNlcmlhbCBwb3J0LgorICovCitmdW5jX3N0YXJ0CXNlcmlhbF9wdXRjLCVkMC8lZDEvJWEwLyVhMQorCisJbW92ZWwJQVJHMSwlZDAKKwljbXBpYgkjJ1xuJywlZDAKKwlqYm5lCTFmCisKKwkvKiBBIGxpdHRsZSBzYWZlIHJlY3Vyc2lvbiBpcyBnb29kIGZvciB0aGUgc291bCAqLworCXNlcmlhbF9wdXRjCSMnXHInCisxOgorCisjaWZkZWYgQ09ORklHX0FNSUdBCisJaXNfbm90X2FtaWdhKDJmKQorCWFuZHcJIzB4MDBmZiwlZDAKKwlvcml3CSMweDAxMDAsJWQwCisJbW92ZWwJJXBjQChMKGN1c3RvbSkpLCVhMAorCW1vdmV3CSVkMCwlYTBAKENVU1RPTUJBU0UrQ19TRVJEQVQpCisxOgltb3ZldwklYTBAKENVU1RPTUJBU0UrQ19TRVJEQVRSKSwlZDAKKwlhbmR3CSMweDIwMDAsJWQwCisJamVxCTFiCisJanJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzI6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUMKKwlpc19ub3RfbWFjKDVmKQorCisjaWZkZWYgTUFDX1NFUklBTF9ERUJVRworCisjaWZkZWYgTUFDX1VTRV9TQ0NfQQorCW1vdmVsCSVwY0AoTChtYWNfc2NjYmFzZSkpLCVhMQorMzoJYnRzdAkjMiwlYTFAKG1hY19zY2NfY2hhX2FfY3RybF9vZmZzZXQpCisJamVxCTNiCisJbW92ZWIJJWQwLCVhMUAobWFjX3NjY19jaGFfYV9kYXRhX29mZnNldCkKKyNlbmRpZgkvKiBNQUNfVVNFX1NDQ19BICovCisKKyNpZmRlZiBNQUNfVVNFX1NDQ19CCisjaWZuZGVmIE1BQ19VU0VfU0NDX0EJLyogTG9hZCBtYWNfc2NjYmFzZSBvbmx5IGlmIG5lZWRlZCAqLworCW1vdmVsCSVwY0AoTChtYWNfc2NjYmFzZSkpLCVhMQorI2VuZGlmCS8qIE1BQ19VU0VfU0NDX0EgKi8KKzQ6CWJ0c3QJIzIsJWExQChtYWNfc2NjX2NoYV9iX2N0cmxfb2Zmc2V0KQorCWplcQk0YgorCW1vdmViCSVkMCwlYTFAKG1hY19zY2NfY2hhX2JfZGF0YV9vZmZzZXQpCisjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQiAqLworCisjZW5kaWYJLyogTUFDX1NFUklBTF9ERUJVRyAqLworCisJanJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzU6CisjZW5kaWYJLyogQ09ORklHX01BQyAqLworCisjaWZkZWYgQ09ORklHX0FUQVJJCisJaXNfbm90X2F0YXJpKDRmKQorCW1vdmVsCSVwY0AoTChpb2Jhc2UpKSwlYTEKKyNpZiBkZWZpbmVkKFVTRV9QUklOVEVSKQorMzoJYnRzdAkjMCwlYTFAKExTVE1GUF9HUElQKQorCWpuZQkzYgorCW1vdmViCSNMUFNHX0lPX0IsJWExQChMUFNHX1NFTEVDVCkKKwltb3ZlYgklZDAsJWExQChMUFNHX1dSSVRFKQorCW1vdmViCSNMUFNHX0lPX0EsJWExQChMUFNHX1NFTEVDVCkKKwltb3ZlYgklYTFAKExQU0dfUkVBRCksJWQwCisJYmNscgkjNSwlZDAKKwltb3ZlYgklZDAsJWExQChMUFNHX1dSSVRFKQorCW5vcAorCW5vcAorCWJzZXQJIzUsJWQwCisJbW92ZWIJJWQwLCVhMUAoTFBTR19XUklURSkKKyNlbGlmIGRlZmluZWQoVVNFX1NDQykKKzM6CWJ0c3QJIzIsJWExQChMU0NDX0NUUkwpCisJamVxCTNiCisJbW92ZWIJJWQwLCVhMUAoTFNDQ19EQVRBKQorI2VsaWYgZGVmaW5lZChVU0VfTUZQKQorMzoJYnRzdAkjNywlYTFAKExNRlBfVFNSKQorCWplcQkzYgorCW1vdmViCSVkMCwlYTFAKExNRlBfVURSKQorI2VuZGlmCisJanJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzQ6CisjZW5kaWYJLyogQ09ORklHX0FUQVJJICovCisKKyNpZmRlZiBDT05GSUdfTVZNRTE0NworCWlzX25vdF9tdm1lMTQ3KDJmKQorMToJYnRzdAkjMixNMTQ3X1NDQ19DVFJMX0EKKwlqZXEJMWIKKwltb3ZlYgklZDAsTTE0N19TQ0NfREFUQV9BCisJamJyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTE2eAorCWlzX25vdF9tdm1lMTZ4KDJmKQorCS8qCisJICogSWYgdGhlIGxvYWRlciBnYXZlIHVzIGEgYm9hcmQgdHlwZSB0aGVuIHdlIGNhbiB1c2UgdGhhdCB0bworCSAqIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBvdXRwdXQgcm91dGluZTsgb3RoZXJ3aXNlIHdlIGp1c3QgdXNlCisJICogdGhlIEJ1ZyBjb2RlLiAgSWYgd2UgaGFldiB0byB1c2UgdGhlIEJ1ZyB0aGF0IG1lYW5zIHRoZSBCdWcKKwkgKiB3b3Jrc3BhY2UgaGFzIHRvIGJlIHZhbGlkLCB3aGljaCBtZWFucyB0aGUgQnVnIGhhcyB0byB1c2UKKwkgKiB0aGUgU1JBTSwgd2hpY2ggaXMgbm9uLXN0YW5kYXJkLgorCSAqLworCW1vdmVtbAklZDAtJWQ3LyVhMi0lYTYsJXNwQC0KKwltb3ZlbAl2bWVfYnJkdHlwZSwlZDEKKwlqZXEJMWYJCQl8IE5vIHRhZyAtIHVzZSB0aGUgQnVnCisJY21waQkjVk1FX1RZUEVfTVZNRTE2MiwlZDEKKwlqZXEJNmYKKwljbXBpCSNWTUVfVFlQRV9NVk1FMTcyLCVkMQorCWpuZQk1ZgorCS8qIDE2Mi8xNzI7IGl0J3MgYW4gU0NDICovCis2OglidHN0CSMyLE0xNjJfU0NDX0NUUkxfQQorCW5vcAorCW5vcAorCW5vcAorCWplcQk2YgorCW1vdmViCSM4LE0xNjJfU0NDX0NUUkxfQQorCW5vcAorCW5vcAorCW5vcAorCW1vdmViCSVkMCxNMTYyX1NDQ19DVFJMX0EKKwlqcmEJM2YKKzU6CisJLyogMTY2LzE2Ny8xNzc7IGl0J3MgYSBDRDI0MDEgKi8KKwltb3ZlYgkjMCxNMTY3X0NZQ0FSCisJbW92ZWIJTTE2N19DWUlFUiwlZDIKKwltb3ZlYgkjMHgwMixNMTY3X0NZSUVSCis3OgorCWJ0c3QJIzUsTTE2N19QQ1NDQ1RJQ1IKKwlqZXEJN2IKKwltb3ZlYglNMTY3X1BDVFBJQUNLUiwlZDEKKwltb3ZlYglNMTY3X0NZTElDUiwlZDEKKwlqZXEJOGYKKwltb3ZlYgkjMHgwOCxNMTY3X0NZVEVPSVIKKwlqcmEJN2IKKzg6CisJbW92ZWIJJWQwLE0xNjdfQ1lURFIKKwltb3ZlYgkjMCxNMTY3X0NZVEVPSVIKKwltb3ZlYgklZDIsTTE2N19DWUlFUgorCWpyYQkzZgorMToKKwltb3ZlYgklZDAsJXNwQC0KKwl0cmFwCSMxNQorCS53b3JkCTB4MDAyMAkvKiBUUkFQIDB4MDIwICovCiszOgorCW1vdmVtbAklc3BAKywlZDAtJWQ3LyVhMi0lYTYKKwlqYnJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzI6CisjZW5kaWYgLyogQ09ORklHX01WTUUxNnggKi8KKworI2lmZGVmIENPTkZJR19CVk1FNjAwMAorCWlzX25vdF9idm1lNjAwMCgyZikKKwkvKgorCSAqIFRoZSBCVk1FNjAwMCBtYWNoaW5lIGhhcyBhIHNlcmlhbCBwb3J0IC4uLgorCSAqLworMToJYnRzdAkjMixCVk1FX1NDQ19DVFJMX0EKKwlqZXEJMWIKKwltb3ZlYgklZDAsQlZNRV9TQ0NfREFUQV9BCisJamJyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1VOM1gKKwlpc19ub3Rfc3VuM3goMmYpCisJbW92ZWwJJWQwLC0oJXNwKQorCW1vdmVsCTB4RkVGRTAwMTgsJWExCisJamJzcgkoJWExKQorCWFkZHEJIzQsJXNwCisJamJyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUTQwCisJaXNfbm90X3E0MCgyZikKKwl0c3QubAklcGNAKEwocTQwX2RvX2RlYnVnKSkJLyogb25seSBkZWJ1ZyBpZiByZXF1ZXN0ZWQgKi8KKwliZXEJMmYKKwlsZWEJJXBjQChxNDBfbWVtX2NwdHIpLCVhMQorCW1vdmUubAklYTFALCVhMAorCW1vdmUuYgklZDAsJWEwQAorCWFkZHEubAkjNCwlYTAKKwltb3ZlLmwJJWEwLCVhMUAKKwlqYnJhICAgIEwoc2VyaWFsX3B1dGNfZG9uZSkKKzI6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUE9MTE8KKwlpc19ub3RfYXBvbGxvKDJmKQorCW1vdmwgICAgJXBjQChMKGlvYmFzZSkpLCVhMQorCW1vdmViCSVkMCwlYTFAKExUSFJCMCkKKzE6ICAgICAgbW92ZWIgICAlYTFAKExTUkIwKSwlZDAKKwlhbmRiCSMweDQsJWQwCisJYmVxCTFiCisJamJyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSFAzMDAKKwlpc19ub3RfaHAzMDAoM2YpCisJbW92bCAgICAlcGNAKEwoaW9iYXNlKSksJWExCisJYWRkbAklcGNAKEwodWFydGJhc2UpKSwlYTEKKwltb3ZlbAklcGNAKEwodWFydF9zY29kZSkpLCVkMQkvKiBDaGVjayB0aGUgc2NvZGUgKi8KKwlqbWkJM2YJCQkvKiBVbnNldD8gRXhpdCAqLworCWNtcGkJIzI1NiwlZDEJCS8qIEFQQ0kgc2NvZGU/ICovCisJamVxCTJmCisxOiAgICAgIG1vdmViICAgJWExQChEQ0FMU1IpLCVkMQkvKiBPdXRwdXQgdG8gRENBICovCisJYW5kYgkjMHgyMCwlZDEKKwliZXEJMWIKKwltb3ZlYgklZDAsJWExQChEQ0FEQVRBKQorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMjoJbW92ZWIJJWExQChBUENJTFNSKSwlZDEJLyogT3V0cHV0IHRvIEFQQ0kgKi8KKwlhbmRiCSMweDIwLCVkMQorCWJlcQkyYgorCW1vdmViCSVkMCwlYTFAKEFQQ0lEQVRBKQorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMzoKKyNlbmRpZgorCQorTChzZXJpYWxfcHV0Y19kb25lKToKK2Z1bmNfcmV0dXJuCXNlcmlhbF9wdXRjCisKKy8qCisgKiBPdXRwdXQgYSBzdHJpbmcuCisgKi8KK2Z1bmNfc3RhcnQJcHV0cywlZDAvJWEwCisKKwltb3ZlbAlBUkcxLCVhMAorCWpyYQkyZgorMToKKyNpZmRlZiBDT05TT0xFCisJY29uc29sZV9wdXRjCSVkMAorI2VuZGlmCisjaWZkZWYgU0VSSUFMX0RFQlVHCisJc2VyaWFsX3B1dGMJJWQwCisjZW5kaWYKKzI6CW1vdmViCSVhMEArLCVkMAorCWpuZQkxYgorCitmdW5jX3JldHVybglwdXRzCisKKy8qCisgKiBPdXRwdXQgbnVtYmVyIGluIGhleCBub3RhdGlvbi4KKyAqLworCitmdW5jX3N0YXJ0CXB1dG4sJWQwLSVkMgorCisJcHV0YwknICcKKworCW1vdmVsCUFSRzEsJWQwCisJbW92ZXEJIzcsJWQxCisxOglyb2xsCSM0LCVkMAorCW1vdmUJJWQwLCVkMgorCWFuZGIJIzB4MGYsJWQyCisJYWRkYgkjJzAnLCVkMgorCWNtcGIJIyc5JywlZDIKKwlqbHMJMmYKKwlhZGRiCSMnQSctKCc5JysxKSwlZDIKKzI6CisjaWZkZWYgQ09OU09MRQorCWNvbnNvbGVfcHV0YwklZDIKKyNlbmRpZgorI2lmZGVmIFNFUklBTF9ERUJVRworCXNlcmlhbF9wdXRjCSVkMgorI2VuZGlmCisJZGJyYQklZDEsMWIKKworZnVuY19yZXR1cm4JcHV0bgorCisjaWZkZWYgQ09ORklHX01BQworLyoKKyAqCW1hY19zZXJpYWxfcHJpbnQKKyAqCisgKglUaGlzIHJvdXRpbmUgdGFrZXMgaXRzIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrLiAgSXQgdGhlbgorICoJdHVybnMgYXJvdW5kIGFuZCBjYWxscyB0aGUgaW50ZXJuYWwgcm91dGluZS4gIFRoaXMgcm91dGluZQorICoJaXMgdXNlZCB1bnRpbCB0aGUgTGludXggY29uc29sZSBkcml2ZXIgaW5pdGlhbGl6ZXMgaXRzZWxmLgorICoKKyAqCVRoZSBjYWxsaW5nIHBhcmFtZXRlcnMgYXJlOgorICoJCXZvaWQgbWFjX3NlcmlhbF9wcmludChjb25zdCBjaGFyICpzdHIpOworICoKKyAqCVRoaXMgcm91dGluZSBkb2VzIE5PVCB1bmRlcnN0YW5kIHZhcmlhYmxlIGFyZ3VtZW50cyBvbmx5CisgKglzaW1wbGUgc3RyaW5ncyEKKyAqLworRU5UUlkobWFjX3NlcmlhbF9wcmludCkKKwltb3ZlbWwJJWQwLyVhMCwlc3BALQorI2lmIDEKKwltb3ZlCSVzciwlc3BALQorCW9yaQkjMHgwNzAwLCVzcgorI2VuZGlmCisJbW92ZWwJJXNwQCgxMCksJWEwCQkvKiBmZXRjaCBwYXJhbWV0ZXIgKi8KKwlqcmEJMmYKKzE6CXNlcmlhbF9wdXRjCSVkMAorMjoJbW92ZWIJJWEwQCssJWQwCisJam5lCTFiCisjaWYgMQorCW1vdmUJJXNwQCssJXNyCisjZW5kaWYKKwltb3ZlbWwJJXNwQCssJWQwLyVhMAorCXJ0cworI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pCitmdW5jX3N0YXJ0CXNldF9sZWRzLCVkMC8lYTAKKwltb3ZlbAlBUkcxLCVkMAorI2lmZGVmIENPTkZJR19IUDMwMAorCWlzX25vdF9ocDMwMCgxZikKKwltb3ZlbAklcGNAKEwoaW9iYXNlKSksJWEwCisJbW92ZWIJJWQwLCVhMEAoMHgxZmZmZikKKwlqcmEJMmYKKyNlbmRpZgorMToKKyNpZmRlZiBDT05GSUdfQVBPTExPCisJbW92ZWwgICAlcGNAKEwoaW9iYXNlKSksJWEwCisJbHNsbCAgICAjOCwlZDAKKwllb3J3ICAgICMweGZmMDAsJWQwCisJbW92ZWIJJWQwLCVhMEAoTENQVUNUUkwpCisjZW5kaWYKKzI6CitmdW5jX3JldHVybglzZXRfbGVkcworI2VuZGlmCisKKyNpZmRlZiBDT05TT0xFCisvKgorICoJRm9yIGNvbnRpbnVpdHksIHNlZSB0aGUgZGF0YSBhbGlnbm1lbnQKKyAqCXRvIHdoaWNoIHRoaXMgc3RydWN0dXJlIGlzIHRpZWQuCisgKi8KKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X2N1cl9jb2x1bW4JMAorI2RlZmluZSBMY29uc29sZV9zdHJ1Y3RfY3VyX3JvdwkJNAorI2RlZmluZSBMY29uc29sZV9zdHJ1Y3RfbnVtX2NvbHVtbnMJOAorI2RlZmluZSBMY29uc29sZV9zdHJ1Y3RfbnVtX3Jvd3MJMTIKKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X2xlZnRfZWRnZQkxNgorI2RlZmluZSBMY29uc29sZV9zdHJ1Y3RfcGVuZ3Vpbl9wdXRjCTIwCisKK2Z1bmNfc3RhcnQJY29uc29sZV9pbml0LCVhMC0lYTQvJWQwLSVkNworCS8qCisJICoJU29tZSBvZiB0aGUgcmVnaXN0ZXIgdXNhZ2UgdGhhdCBmb2xsb3dzCisJICoJCWEwID0gcG9pbnRlciB0byBib290X2luZm8KKwkgKgkJYTEgPSBwb2ludGVyIHRvIHNjcmVlbgorCSAqCQlhMiA9IHBvaW50ZXIgdG8gTGNvbnNvbGVfZ2xvYmFscworCSAqCQlkMyA9IHBpeGVsIHdpZHRoIG9mIHNjcmVlbgorCSAqCQlkNCA9IHBpeGVsIGhlaWdodCBvZiBzY3JlZW4KKwkgKgkJKGQzLGQ0KSB+PSAoeCx5KSBvZiBhIHBvaW50IGp1c3QgYmVsb3cKKwkgKgkJCWFuZCB0byB0aGUgcmlnaHQgb2YgdGhlIHNjcmVlbgorCSAqCQkJTk9UIG9uIHRoZSBzY3JlZW4hCisJICoJCWQ1ID0gbnVtYmVyIG9mIGJ5dGVzIHBlciBzY2FuIGxpbmUKKwkgKgkJZDYgPSBudW1iZXIgb2YgYnl0ZXMgb24gdGhlIGVudGlyZSBzY3JlZW4KKwkgKi8KKworCWxlYQklcGNAKEwoY29uc29sZV9nbG9iYWxzKSksJWEyCisJbW92ZWwJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlYTEKKwltb3ZlbAklcGNAKEwobWFjX3Jvd2J5dGVzKSksJWQ1CisJbW92ZWwJJXBjQChMKG1hY19kaW1lbnNpb25zKSksJWQzCS8qIC0+IGxvdyBieXRlICovCisJbW92ZWwJJWQzLCVkNAorCXN3YXAJJWQ0CQkvKiAtPiBoaWdoIGJ5dGUgKi8KKwlhbmRsCSMweGZmZmYsJWQzCS8qIGQzID0gc2NyZWVuIHdpZHRoIGluIHBpeGVscyAqLworCWFuZGwJIzB4ZmZmZiwlZDQJLyogZDQgPSBzY3JlZW4gaGVpZ2h0IGluIHBpeGVscyAqLworCisJbW92ZWwJJWQ1LCVkNgorfAlzdWJsCSMyMCwlZDYKKwltdWx1bAklZDQsJWQ2CQkvKiBzY2FuIGxpbmUgYnl0ZXMgeCBudW0gc2NhbiBsaW5lcyAqLworCWRpdnVsCSM4LCVkNgkJLyogd2UnbGwgY2xlYXIgOCBieXRlcyBhdCBhIHRpbWUgKi8KKwltb3ZlcQkjLTEsJWQwCQkvKiBNYWNfYmxhY2sgKi8KKwlzdWJxCSMxLCVkNgorCitMKGNvbnNvbGVfY2xlYXJfbG9vcCk6CisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJZGJyYQklZDYsTChjb25zb2xlX2NsZWFyX2xvb3ApCisKKwkvKiBDYWxjdWxhdGUgZm9udCBzaXplICovCisKKyNpZiAgIGRlZmluZWQoRk9OVF84eDgpICYmIGRlZmluZWQoQ09ORklHX0ZPTlRfOHg4KQorCWxlYQklcGNAKGZvbnRfdmdhXzh4OCksJWEwCisjZWxpZiBkZWZpbmVkKEZPTlRfOHgxNikgJiYgZGVmaW5lZChDT05GSUdfRk9OVF84eDE2KQorCWxlYQklcGNAKGZvbnRfdmdhXzh4MTYpLCVhMAorI2VsaWYgZGVmaW5lZChGT05UXzZ4MTEpICYmIGRlZmluZWQoQ09ORklHX0ZPTlRfNngxMSkKKwlsZWEJJXBjQChmb250X3ZnYV82eDExKSwlYTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0ZPTlRfOHg4KSAvKiBkZWZhdWx0ICovCisJbGVhCSVwY0AoZm9udF92Z2FfOHg4KSwlYTAKKyNlbHNlIC8qIG5vIGNvbXBpbGVkLWluIGZvbnQgKi8KKwlsZWEJMCwlYTAKKyNlbmRpZgorCisJLyoKKwkgKglBdCB0aGlzIHBvaW50IHdlIG1ha2UgYSBzaGlmdCBpbiByZWdpc3RlciB1c2FnZQorCSAqCWExID0gYWRkcmVzcyBvZiBjb25zb2xlX2ZvbnQgcG9pbnRlcgorCSAqLworCWxlYQklcGNAKEwoY29uc29sZV9mb250KSksJWExCisJbW92ZWwJJWEwLCVhMUAJLyogc3RvcmUgcG9pbnRlciB0byBzdHJ1Y3QgZmJjb25fZm9udF9kZXNjIGluIGNvbnNvbGVfZm9udCAqLworCXRzdGwJJWEwCisJamVxCTFmCisJbGVhCSVwY0AoTChjb25zb2xlX2ZvbnRfZGF0YSkpLCVhNAorCW1vdmVsCSVhMEAoRk9OVF9ERVNDX0RBVEEpLCVkMAorCXN1YmwJI0woY29uc29sZV9mb250KSwlYTEKKwlhZGRsCSVhMSwlZDAKKwltb3ZlbAklZDAsJWE0QAorCisJLyoKKwkgKglDYWxjdWxhdGUgZ2xvYmFsIG1heHMKKwkgKglOb3RlIC0gd2UgY2FuIHVzZSBlaXRoZXIgYW4KKwkgKgk4IHggMTYgb3IgOCB4IDggY2hhcmFjdGVyIGZvbnQKKwkgKgk2IHggMTEgYWxzbyBzdXBwb3J0ZWQKKwkgKi8KKwkJLyogQVNTRVJUOiBhMCA9IGNvbnRlbnRzIG9mIExjb25zb2xlX2ZvbnQgKi8KKwltb3ZlbAklZDMsJWQwCQkJCS8qIHNjcmVlbiB3aWR0aCBpbiBwaXhlbHMgKi8KKwlkaXZ1bAklYTBAKEZPTlRfREVTQ19XSURUSCksJWQwCS8qIGQwID0gbWF4IG51bSBjaGFycyBwZXIgcm93ICovCisKKwltb3ZlbAklZDQsJWQxCQkJCS8qIHNjcmVlbiBoZWlnaHQgaW4gcGl4ZWxzICovCisJZGl2dWwJJWEwQChGT05UX0RFU0NfSEVJR0hUKSwlZDEJLyogZDEgPSBtYXggbnVtIHJvd3MgKi8KKworCW1vdmVsCSVkMCwlYTJAKExjb25zb2xlX3N0cnVjdF9udW1fY29sdW1ucykKKwltb3ZlbAklZDEsJWEyQChMY29uc29sZV9zdHJ1Y3RfbnVtX3Jvd3MpCisKKwkvKgorCSAqCUNsZWFyIHRoZSBjdXJyZW50IHJvdyBhbmQgY29sdW1uCisJICovCisJY2xybAklYTJAKExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uKQorCWNscmwJJWEyQChMY29uc29sZV9zdHJ1Y3RfY3VyX3JvdykKKwljbHJsCSVhMkAoTGNvbnNvbGVfc3RydWN0X2xlZnRfZWRnZSkKKworCS8qCisJICogSW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKKwkgKi8KKzE6CitmdW5jX3JldHVybgljb25zb2xlX2luaXQKKworZnVuY19zdGFydAljb25zb2xlX3B1dF9zdGF0cywlYTAvJWQ3CisJLyoKKwkgKglTb21lIG9mIHRoZSByZWdpc3RlciB1c2FnZSB0aGF0IGZvbGxvd3MKKwkgKgkJYTAgPSBwb2ludGVyIHRvIGJvb3RfaW5mbworCSAqCQlkNyA9IHZhbHVlIG9mIGJvb3RfaW5mbyBmaWVsZHMKKwkgKi8KKwlwdXRzCSJcbk1hY0xpbnV4XG5cbiIKKworI2lmZGVmIFNFUklBTF9ERUJVRworCXB1dHMJIiB2aWRhZGRyOiIKKwlwdXRuCSVwY0AoTChtYWNfdmlkZW9iYXNlKSkJCS8qIHZpZGVvIGFkZHIuICovCisKKwlwdXRzCSJcbiAgX3N0ZXh0OiIKKwlsZWEJJXBjQChfc3RleHQpLCVhMAorCXB1dG4JJWEwCisKKwlwdXRzCSJcbmJvb3RpbmZvOiIKKwlsZWEJJXBjQChfZW5kKSwlYTAKKwlwdXRuCSVhMAorCisJcHV0cwkiXG5jcHVpZDoiCisJcHV0bgklcGNAKEwoY3B1dHlwZSkpCisJcHV0YwknXG4nCisKKyNpZmRlZiBNQUNfU0VSSUFMX0RFQlVHCisJcHV0bgklcGNAKEwobWFjX3NjY2Jhc2UpKQorCXB1dGMJJ1xuJworI2VuZGlmCisjICBpZiBkZWZpbmVkKE1NVV9QUklOVCkKKwlqYnNyCW1tdV9wcmludF9tYWNoaW5lX2NwdV90eXBlcworIyAgZW5kaWYgLyogTU1VX1BSSU5UICovCisjZW5kaWYgLyogU0VSSUFMX0RFQlVHICovCisKK2Z1bmNfcmV0dXJuCWNvbnNvbGVfcHV0X3N0YXRzCisKKyNpZmRlZiBDT05TT0xFX1BFTkdVSU4KK2Z1bmNfc3RhcnQJY29uc29sZV9wdXRfcGVuZ3VpbiwlYTAtJWExLyVkMC0lZDcKKwkvKgorCSAqCUdldCAndGhhdF9wZW5ndWluJyBvbnRvIHRoZSBzY3JlZW4gaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lcgorCSAqCXBlbmd1aW4gaXMgNjQgeCA3NCBwaXhlbHMsIGFsaWduIGFnYWluc3QgcmlnaHQgZWRnZSBvZiBzY3JlZW4KKwkgKi8KKwlsZWEJJXBjQChMKG1hY19kaW1lbnNpb25zKSksJWEwCisJbW92ZWwJJWEwQCwlZDAKKwlhbmRpbAkjMHhmZmZmLCVkMAorCXN1YmlsCSM2NCwlZDAJCS8qIHNudWcgdXAgYWdhaW5zdCB0aGUgcmlnaHQgZWRnZSAqLworCWNscmwJJWQxCQkvKiBzdGFydCBhdCB0aGUgdG9wICovCisJbW92ZWwJIzczLCVkNworCWxlYQklcGNAKEwodGhhdF9wZW5ndWluKSksJWExCitMKGNvbnNvbGVfcGVuZ3Vpbl9yb3cpOgorCW1vdmVsCSMzMSwlZDYKK0woY29uc29sZV9wZW5ndWluX3BpeGVsX3BhaXIpOgorCW1vdmViCSVhMUAsJWQyCisJbHNyYgkjNCwlZDIKKwljb25zb2xlX3Bsb3RfcGl4ZWwgJWQwLCVkMSwlZDIKKwlhZGRxCSMxLCVkMAorCW1vdmViCSVhMUArLCVkMgorCWNvbnNvbGVfcGxvdF9waXhlbCAlZDAsJWQxLCVkMgorCWFkZHEJIzEsJWQwCisJZGJyYQklZDYsTChjb25zb2xlX3Blbmd1aW5fcGl4ZWxfcGFpcikKKworCXN1YmlsCSM2NCwlZDAKKwlhZGRxCSMxLCVkMQorCWRicmEJJWQ3LEwoY29uc29sZV9wZW5ndWluX3JvdykKKworZnVuY19yZXR1cm4JY29uc29sZV9wdXRfcGVuZ3VpbgorCisvKiBpbmNsdWRlIHBlbmd1aW4gYml0bWFwICovCitMKHRoYXRfcGVuZ3Vpbik6CisjaW5jbHVkZSAiLi4vbWFjL21hY19wZW5ndWluLlMiCisjZW5kaWYKKworCS8qCisJICogQ2FsY3VsYXRlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzCisJICoJb3V0cHV0CWExID0gZGVzdAorCSAqCQlhMiA9IHNvdXJjZQorCSAqLworCitmdW5jX3N0YXJ0CWNvbnNvbGVfc2Nyb2xsLCVhMC0lYTQvJWQwLSVkNworCWxlYQklcGNAKEwobWFjX3ZpZGVvYmFzZSkpLCVhMAorCW1vdmVsCSVhMEAsJWExCisJbW92ZWwJJWExLCVhMgorCWxlYQklcGNAKEwobWFjX3Jvd2J5dGVzKSksJWEwCisJbW92ZWwJJWEwQCwlZDUKKwltb3ZlbAklcGNAKEwoY29uc29sZV9mb250KSksJWEwCisJdHN0bAklYTAKKwlqZXEJMWYKKwltdWx1bAklYTBAKEZPTlRfREVTQ19IRUlHSFQpLCVkNQkvKiBhY2NvdW50IGZvciAjIHNjYW4gbGluZXMgcGVyIGNoYXJhY3RlciAqLworCWFkZGFsCSVkNSwlYTIKKworCS8qCisJICogR2V0IGRpbWVuc2lvbnMKKwkgKi8KKwlsZWEJJXBjQChMKG1hY19kaW1lbnNpb25zKSksJWEwCisJbW92ZWwJJWEwQCwlZDMKKwltb3ZlbAklZDMsJWQ0CisJc3dhcAklZDQKKwlhbmRsCSMweGZmZmYsJWQzCS8qIGQzID0gc2NyZWVuIHdpZHRoIGluIHBpeGVscyAqLworCWFuZGwJIzB4ZmZmZiwlZDQJLyogZDQgPSBzY3JlZW4gaGVpZ2h0IGluIHBpeGVscyAqLworCisJLyoKKwkgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUKKwkgKi8KKwlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMAorCW1vdmVsCSVhMEAsJWQ2CisJbW92ZWwJJXBjQChMKGNvbnNvbGVfZm9udCkpLCVhMAorCXN1YmwJJWEwQChGT05UX0RFU0NfSEVJR0hUKSwlZDQJLyogd2UncmUgbm90IHNjcm9sbGluZyB0aGUgdG9wIHJvdyEgKi8KKwltdWx1bAklZDQsJWQ2CQkvKiBzY2FuIGxpbmUgYnl0ZXMgeCBudW0gc2NhbiBsaW5lcyAqLworCWRpdnVsCSMzMiwlZDYJCS8qIHdlJ2xsIG1vdmUgOCBsb25ncyBhdCBhIHRpbWUgKi8KKwlzdWJxCSMxLCVkNgorCitMKGNvbnNvbGVfc2Nyb2xsX2xvb3ApOgorCW1vdmVsCSVhMkArLCVhMUArCisJbW92ZWwJJWEyQCssJWExQCsKKwltb3ZlbAklYTJAKywlYTFAKworCW1vdmVsCSVhMkArLCVhMUArCisJbW92ZWwJJWEyQCssJWExQCsKKwltb3ZlbAklYTJAKywlYTFAKworCW1vdmVsCSVhMkArLCVhMUArCisJbW92ZWwJJWEyQCssJWExQCsKKwlkYnJhCSVkNixMKGNvbnNvbGVfc2Nyb2xsX2xvb3ApCisKKwlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMAorCW1vdmVsCSVhMEAsJWQ2CisJbW92ZWwJJXBjQChMKGNvbnNvbGVfZm9udCkpLCVhMAorCW11bHVsCSVhMEAoRk9OVF9ERVNDX0hFSUdIVCksJWQ2CS8qIHNjYW4gbGluZSBieXRlcyB4IGZvbnQgaGVpZ2h0ICovCisJZGl2dWwJIzMyLCVkNgkJCS8qIHdlJ2xsIG1vdmUgOCB3b3JkcyBhdCBhIHRpbWUgKi8KKwlzdWJxCSMxLCVkNgorCisJbW92ZXEJIy0xLCVkMAorTChjb25zb2xlX3Njcm9sbF9jbGVhcl9sb29wKToKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwltb3ZlbAklZDAsJWExQCsKKwlkYnJhCSVkNixMKGNvbnNvbGVfc2Nyb2xsX2NsZWFyX2xvb3ApCisKKzE6CitmdW5jX3JldHVybgljb25zb2xlX3Njcm9sbAorCisKK2Z1bmNfc3RhcnQJY29uc29sZV9wdXRjLCVhMC8lYTEvJWQwLSVkNworCisJaXNfbm90X21hYyhMKGNvbnNvbGVfZXhpdCkpCisJdHN0bAklcGNAKEwoY29uc29sZV9mb250KSkKKwlqZXEJTChjb25zb2xlX2V4aXQpCisKKwkvKiBPdXRwdXQgY2hhcmFjdGVyIGluIGQ3IG9uIGNvbnNvbGUuCisJICovCisJbW92ZWwJQVJHMSwlZDcKKwljbXBpYgkjJ1xuJywlZDcKKwlqYm5lCTFmCisKKwkvKiBBIGxpdHRsZSBzYWZlIHJlY3Vyc2lvbiBpcyBnb29kIGZvciB0aGUgc291bCAqLworCWNvbnNvbGVfcHV0YwkjJ1xyJworMToKKwlsZWEJJXBjQChMKGNvbnNvbGVfZ2xvYmFscykpLCVhMAorCisJY21waWIJIzEwLCVkNworCWpuZQlMKGNvbnNvbGVfbm90X2xmKQorCW1vdmVsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cpLCVkMAorCWFkZGlsCSMxLCVkMAorCW1vdmVsCSVkMCwlYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfcm93KQorCW1vdmVsCSVhMEAoTGNvbnNvbGVfc3RydWN0X251bV9yb3dzKSwlZDEKKwljbXBsCSVkMSwlZDAKKwlqY3MJMWYKKwlzdWJpbAkjMSwlZDAKKwltb3ZlbAklZDAsJWEwQChMY29uc29sZV9zdHJ1Y3RfY3VyX3JvdykKKwljb25zb2xlX3Njcm9sbAorMToKKwlqcmEJTChjb25zb2xlX2V4aXQpCisKK0woY29uc29sZV9ub3RfbGYpOgorCWNtcGliCSMxMywlZDcKKwlqbmUJTChjb25zb2xlX25vdF9jcikKKwljbHJsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9jb2x1bW4pCisJanJhCUwoY29uc29sZV9leGl0KQorCitMKGNvbnNvbGVfbm90X2NyKToKKwljbXBpYgkjMSwlZDcKKwlqbmUJTChjb25zb2xlX25vdF9ob21lKQorCWNscmwJJWEwQChMY29uc29sZV9zdHJ1Y3RfY3VyX3JvdykKKwljbHJsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9jb2x1bW4pCisJanJhCUwoY29uc29sZV9leGl0KQorCisvKgorICoJQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlICVkNyBjaGFyYWN0ZXIgaXMgZ29pbmcgdG8gYmUKKyAqCXJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uICBSZWdpc3RlciB1c2FnZSBpcyAtCisgKgkJYTAgPSBwb2ludGVyIHRvIGNvbnNvbGUgZ2xvYmFscworICoJCWExID0gZm9udCBkYXRhCisgKgkJZDAgPSBjdXJzb3IgY29sdW1uCisgKgkJZDEgPSBjdXJzb3Igcm93IHRvIGRyYXcgdGhlIGNoYXJhY3RlcgorICoJCWQ3ID0gY2hhcmFjdGVyIG51bWJlcgorICovCitMKGNvbnNvbGVfbm90X2hvbWUpOgorCW1vdmVsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9jb2x1bW4pLCVkMAorCWFkZHFsCSMxLCVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9jb2x1bW4pCisJbW92ZWwJJWEwQChMY29uc29sZV9zdHJ1Y3RfbnVtX2NvbHVtbnMpLCVkMQorCWNtcGwJJWQxLCVkMAorCWpjcwkxZgorCWNvbnNvbGVfcHV0YwkjJ1xuJwkvKiByZWN1cnNpb24gaXMgT0shICovCisxOgorCW1vdmVsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cpLCVkMQorCisJLyoKKwkgKglBdCB0aGlzIHBvaW50IHdlIG1ha2UgYSBzaGlmdCBpbiByZWdpc3RlciB1c2FnZQorCSAqCWEwID0gYWRkcmVzcyBvZiBwb2ludGVyIHRvIGZvbnQgZGF0YSAoZmJjb25fZm9udF9kZXNjKQorCSAqLworCW1vdmVsCSVwY0AoTChjb25zb2xlX2ZvbnQpKSwlYTAKKwltb3ZlbAklcGNAKEwoY29uc29sZV9mb250X2RhdGEpKSwlYTEJLyogTG9hZCBmYmNvbl9mb250X2Rlc2MuZGF0YSBpbnRvIGExICovCisJYW5kbAkjMHgwMDAwMDBmZiwlZDcKKwkJLyogQVNTRVJUOiBhMCA9IGNvbnRlbnRzIG9mIExjb25zb2xlX2ZvbnQgKi8KKwltdWx1bAklYTBAKEZPTlRfREVTQ19IRUlHSFQpLCVkNwkvKiBkNyA9IGluZGV4IGludG8gZm9udCBkYXRhICovCisJYWRkbAklZDcsJWExCQkJLyogYTEgPSBwb2ludHMgdG8gY2hhciBpbWFnZSAqLworCisJLyoKKwkgKglBdCB0aGlzIHBvaW50IHdlIG1ha2UgYSBzaGlmdCBpbiByZWdpc3RlciB1c2FnZQorCSAqCWQwID0gcGl4ZWwgY29vcmRpbmF0ZSwgeAorCSAqCWQxID0gcGl4ZWwgY29vcmRpbmF0ZSwgeQorCSAqCWQyID0gKGJpdCAwKSAxLzAgZm9yIHdoaXRlL2JsYWNrICghKSBwaXhlbCBvbiBzY3JlZW4KKwkgKglkMyA9IGZvbnQgc2NhbiBsaW5lIGRhdGEgKDggcGl4ZWxzKQorCSAqCWQ2ID0gY291bnQgZG93biBmb3IgdGhlIGZvbnQncyBwaXhlbCB3aWR0aCAoOCkKKwkgKglkNyA9IGNvdW50IGRvd24gZm9yIHRoZSBmb250J3MgcGl4ZWwgY291bnQgaW4gaGVpZ2h0CisJICovCisJCS8qIEFTU0VSVDogYTAgPSBjb250ZW50cyBvZiBMY29uc29sZV9mb250ICovCisJbXVsdWwJJWEwQChGT05UX0RFU0NfV0lEVEgpLCVkMAorCW11bHVsCSVhMEAoRk9OVF9ERVNDX0hFSUdIVCksJWQxCisJbW92ZWwJJWEwQChGT05UX0RFU0NfSEVJR0hUKSwlZDcJLyogTG9hZCBmYmNvbl9mb250X2Rlc2MuaGVpZ2h0IGludG8gZDcgKi8KKwlzdWJxCSMxLCVkNworTChjb25zb2xlX3JlYWRfY2hhcl9zY2FubGluZSk6CisJbW92ZWIJJWExQCssJWQzCisKKwkJLyogQVNTRVJUOiBhMCA9IGNvbnRlbnRzIG9mIExjb25zb2xlX2ZvbnQgKi8KKwltb3ZlbAklYTBAKEZPTlRfREVTQ19XSURUSCksJWQ2CS8qIExvYWQgZmJjb25fZm9udF9kZXNjLndpZHRoIGludG8gZDYgKi8KKwlzdWJxbAkjMSwlZDYKKworTChjb25zb2xlX2RvX2ZvbnRfc2NhbmxpbmUpOgorCWxzbGIJIzEsJWQzCisJc2NzYgklZDIJCS8qIGNvbnZlcnQgMSBiaXQgaW50byBhIGJ5dGUgKi8KKwljb25zb2xlX3Bsb3RfcGl4ZWwgJWQwLCVkMSwlZDIKKwlhZGRxCSMxLCVkMAorCWRicmEJJWQ2LEwoY29uc29sZV9kb19mb250X3NjYW5saW5lKQorCisJCS8qIEFTU0VSVDogYTAgPSBjb250ZW50cyBvZiBMY29uc29sZV9mb250ICovCisJc3VibAklYTBAKEZPTlRfREVTQ19XSURUSCksJWQwCisJYWRkcQkjMSwlZDEKKwlkYnJhCSVkNyxMKGNvbnNvbGVfcmVhZF9jaGFyX3NjYW5saW5lKQorCitMKGNvbnNvbGVfZXhpdCk6CitmdW5jX3JldHVybgljb25zb2xlX3B1dGMKKworCS8qCisJICoJSW5wdXQ6CisJICoJCWQwID0geCBjb29yZGluYXRlCisJICoJCWQxID0geSBjb29yZGluYXRlCisJICoJCWQyID0gKGJpdCAwKSAxLzAgZm9yIHdoaXRlL2JsYWNrICghKQorCSAqCUFsbCByZWdpc3RlcnMgYXJlIHByZXNlcnZlZAorCSAqLworZnVuY19zdGFydAljb25zb2xlX3Bsb3RfcGl4ZWwsJWEwLSVhMS8lZDAtJWQ0CisKKwltb3ZlbAklcGNAKEwobWFjX3ZpZGVvYmFzZSkpLCVhMQorCW1vdmVsCSVwY0AoTChtYWNfdmlkZW9kZXB0aCkpLCVkMworCW1vdmVsCUFSRzEsJWQwCisJbW92ZWwJQVJHMiwlZDEKKwltdWx1bAklcGNAKEwobWFjX3Jvd2J5dGVzKSksJWQxCisJbW92ZWwJQVJHMywlZDIKKworCS8qCisJICoJUmVnaXN0ZXIgdXNhZ2U6CisJICoJCWQwID0geCBjb29yZCBiZWNvbWVzIGJ5dGUgb2Zmc2V0IGludG8gZnJhbWUgYnVmZmVyCisJICoJCWQxID0geSBjb29yZAorCSAqCQlkMiA9IGJsYWNrIG9yIHdoaXRlICgwLzEpCisJICoJCWQzID0gdmlkZW8gZGVwdGgKKwkgKgkJZDQgPSB0ZW1wIG9mIHggKGQwKSBmb3IgbWFueSBiaXQgZGVwdGhzCisJICovCitMKHRlc3RfMWJpdCk6CisJY21wYgkjMSwlZDMKKwlqYm5lCUwodGVzdF8yYml0KQorCW1vdmVsCSVkMCwlZDQJCS8qIHdlIG5lZWQgdGhlIGxvdyBvcmRlciAzIGJpdHMhICovCisJZGl2dWwJIzgsJWQwCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMSwlYTEKKwlhbmRiCSM3LCVkNAorCWVvcmIJIzcsJWQ0CQkvKiByZXZlcnNlIHRoZSB4LWNvb3JkaW5hdGUgdy8gc2NyZWVuLWJpdCAjICovCisJYW5kYgkjMSwlZDIKKwlqYm5lCUwod2hpdGVfMSkKKwlic2V0YgklZDQsJWExQAorCWpicmEJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKK0wod2hpdGVfMSk6CisJYmNscmIJJWQ0LCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCisKK0wodGVzdF8yYml0KToKKwljbXBiCSMyLCVkMworCWpibmUJTCh0ZXN0XzRiaXQpCisJbW92ZWwJJWQwLCVkNAkJLyogd2UgbmVlZCB0aGUgbG93IG9yZGVyIDIgYml0cyEgKi8KKwlkaXZ1bAkjNCwlZDAKKwlhZGRhbAklZDAsJWExCisJYWRkYWwJJWQxLCVhMQorCWFuZGIJIzMsJWQ0CisJZW9yYgkjMywlZDQJCS8qIHJldmVyc2UgdGhlIHgtY29vcmRpbmF0ZSB3LyBzY3JlZW4tYml0ICMgKi8KKwlsc2xsCSMxLCVkNAkJLyogISAqLworCWFuZGIJIzEsJWQyCisJamJuZQlMKHdoaXRlXzIpCisJYnNldGIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJzZXRiCSVkNCwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorTCh3aGl0ZV8yKToKKwliY2xyYgklZDQsJWExQAorCWFkZHEJIzEsJWQ0CisJYmNscmIJJWQ0LCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCisKK0wodGVzdF80Yml0KToKKwljbXBiCSM0LCVkMworCWpibmUJTCh0ZXN0XzhiaXQpCisJbW92ZWwJJWQwLCVkNAkJLyogd2UgbmVlZCB0aGUgbG93IG9yZGVyIGJpdCEgKi8KKwlkaXZ1bAkjMiwlZDAKKwlhZGRhbAklZDAsJWExCisJYWRkYWwJJWQxLCVhMQorCWFuZGIJIzEsJWQ0CisJZW9yYgkjMSwlZDQKKwlsc2xsCSMyLCVkNAkJLyogISAqLworCWFuZGIJIzEsJWQyCisJamJuZQlMKHdoaXRlXzQpCisJYnNldGIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJzZXRiCSVkNCwlYTFACisJYWRkcQkjMSwlZDQKKwlic2V0YgklZDQsJWExQAorCWFkZHEJIzEsJWQ0CisJYnNldGIJJWQ0LCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCitMKHdoaXRlXzQpOgorCWJjbHJiCSVkNCwlYTFACisJYWRkcQkjMSwlZDQKKwliY2xyYgklZDQsJWExQAorCWFkZHEJIzEsJWQ0CisJYmNscmIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJjbHJiCSVkNCwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorCitMKHRlc3RfOGJpdCk6CisJY21wYgkjOCwlZDMKKwlqYm5lCUwodGVzdF8xNmJpdCkKKwlhZGRhbAklZDAsJWExCisJYWRkYWwJJWQxLCVhMQorCWFuZGIJIzEsJWQyCisJamJuZQlMKHdoaXRlXzgpCisJbW92ZWIJIzB4ZmYsJWExQAorCWpicmEJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKK0wod2hpdGVfOCk6CisJY2xyYgklYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorCitMKHRlc3RfMTZiaXQpOgorCWNtcGIJIzE2LCVkMworCWpibmUJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKKwlhZGRhbAklZDAsJWExCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMSwlYTEKKwlhbmRiCSMxLCVkMgorCWpibmUJTCh3aGl0ZV8xNikKKwljbHJ3CSVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCitMKHdoaXRlXzE2KToKKwltb3ZldwkjMHgwZmZmLCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCisKK0woY29uc29sZV9wbG90X3BpeGVsX2V4aXQpOgorZnVuY19yZXR1cm4JY29uc29sZV9wbG90X3BpeGVsCisjZW5kaWYgLyogQ09OU09MRSAqLworCisjaWYgMAorLyoKKyAqIFRoaXMgaXMgc29tZSBvbGQgY29kZSBseWluZyBhcm91bmQuICBJIGRvbid0IGJlbGlldmUKKyAqIGl0J3MgdXNlZCBvciBpbXBvcnRhbnQgYW55bW9yZS4gIE15IGd1ZXNzIGlzIGl0IGNvbnRyaWJ1dGVkCisgKiB0byBnZXR0aW5nIHRvIHRoaXMgcG9pbnQsIGJ1dCBpdCdzIGRvbmUgZm9yIG5vdy4KKyAqIEl0IHdhcyBzdGlsbCBpbiB0aGUgMi4xLjc3IGhlYWQuUywgc28gaXQncyBzdGlsbCBoZXJlLgorICogKEFuZCBzdGlsbCBub3QgdXNlZCEpCisgKi8KK0woc2hvd3Rlc3QpOgorCW1vdmVtbAklYTAvJWQ3LCVzcEAtCisJcHV0cwkiQT0iCisJcHV0bgklYTEKKworCS5sb25nCTB4ZjAxMTlmMTUJCXwgcHRlc3RyCSM1LCVhMUAsIzcsJWEwCisKKwlwdXRzCSJEQT0iCisJcHV0bgklYTAKKworCXB1dHMJIkQ9IgorCXB1dG4JJWEwQAorCisJcHV0cwkiUz0iCisJbGVhCSVwY0AoTChtbXUpKSwlYTAKKwkubG9uZwkweGYwMTA2MjAwCQl8IHBtb3ZlCQklcHNyLCVhMEAKKwljbHJsCSVkNworCW1vdmV3CSVhMEAsJWQ3CisJcHV0bgklZDcKKworCXB1dGMJJ1xuJworCW1vdmVtbAklc3BAKywlYTAvJWQ3CisJcnRzCisjZW5kaWYJLyogMCAqLworCitfX0lOSVREQVRBCisJLmFsaWduCTQKKworI2lmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pCitMKGN1c3RvbSk6CitMKGlvYmFzZSk6CisJLmxvbmcgMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTlNPTEUpCitMKGNvbnNvbGVfZ2xvYmFscyk6CisJLmxvbmcJMAkJLyogY3Vyc29yIGNvbHVtbiAqLworCS5sb25nCTAJCS8qIGN1cnNvciByb3cgKi8KKwkubG9uZwkwCQkvKiBtYXggbnVtIGNvbHVtbnMgKi8KKwkubG9uZwkwCQkvKiBtYXggbnVtIHJvd3MgKi8KKwkubG9uZwkwCQkvKiBsZWZ0IGVkZ2UgKi8KKwkubG9uZwkwCQkvKiBtYWMgcHV0YyAqLworTChjb25zb2xlX2ZvbnQpOgorCS5sb25nCTAJCS8qIHBvaW50ZXIgdG8gY29uc29sZSBmb250IChzdHJ1Y3QgZm9udF9kZXNjKSAqLworTChjb25zb2xlX2ZvbnRfZGF0YSk6CisJLmxvbmcJMAkJLyogcG9pbnRlciB0byBjb25zb2xlIGZvbnQgZGF0YSAqLworI2VuZGlmIC8qIENPTlNPTEUgKi8KKworI2lmIGRlZmluZWQoTU1VX1BSSU5UKQorTChtbXVfcHJpbnRfZGF0YSk6CisJLmxvbmcJMAkJLyogdmFsaWQgZmxhZyAqLworCS5sb25nCTAJCS8qIHN0YXJ0IGxvZ2ljYWwgKi8KKwkubG9uZwkwCQkvKiBuZXh0IGxvZ2ljYWwgKi8KKwkubG9uZwkwCQkvKiBzdGFydCBwaHlzaWNhbCAqLworCS5sb25nCTAJCS8qIG5leHQgcGh5c2ljYWwgKi8KKyNlbmRpZiAvKiBNTVVfUFJJTlQgKi8KKworTChjcHV0eXBlKToKKwkubG9uZwkwCitMKG1tdV9jYWNoZWRfcG9pbnRlcl90YWJsZXMpOgorCS5sb25nCTAKK0wobW11X251bV9wb2ludGVyX3RhYmxlcyk6CisJLmxvbmcJMAorTChwaHlzX2tlcm5lbF9zdGFydCk6CisJLmxvbmcJMAorTChrZXJuZWxfZW5kKToKKwkubG9uZwkwCitMKG1lbW9yeV9zdGFydCk6CisJLmxvbmcJMAorTChrZXJuZWxfcGdkaXJfcHRyKToKKwkubG9uZwkwCitMKHRlbXBfbW1hcF9tZW0pOgorCS5sb25nCTAKKworI2lmIGRlZmluZWQgKENPTkZJR19NVk1FMTQ3KQorTTE0N19TQ0NfQ1RSTF9BID0gMHhmZmZlMzAwMgorTTE0N19TQ0NfREFUQV9BID0gMHhmZmZlMzAwMworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTVZNRTE2eCkKK00xNjJfU0NDX0NUUkxfQSA9IDB4ZmZmNDUwMDUKK00xNjdfQ1lDQVIgPSAweGZmZjQ1MGVlCitNMTY3X0NZSUVSID0gMHhmZmY0NTAxMQorTTE2N19DWUxJQ1IgPSAweGZmZjQ1MDI2CitNMTY3X0NZVEVPSVIgPSAweGZmZjQ1MDg1CitNMTY3X0NZVERSID0gMHhmZmY0NTBmOAorTTE2N19QQ1NDQ1RJQ1IgPSAweGZmZjQyMDFlCitNMTY3X1BDVFBJQUNLUiA9IDB4ZmZmNDIwMjUKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0JWTUU2MDAwKQorQlZNRV9TQ0NfQ1RSTF9BCT0gMHhmZmIwMDAwYgorQlZNRV9TQ0NfREFUQV9BCT0gMHhmZmIwMDAwZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUMpCitMKG1hY19ib290ZXJfZGF0YSk6CisJLmxvbmcJMAorTChtYWNfdmlkZW9iYXNlKToKKwkubG9uZwkwCitMKG1hY192aWRlb2RlcHRoKToKKwkubG9uZwkwCitMKG1hY19kaW1lbnNpb25zKToKKwkubG9uZwkwCitMKG1hY19yb3dieXRlcyk6CisJLmxvbmcJMAorI2lmZGVmIE1BQ19TRVJJQUxfREVCVUcKK0wobWFjX3NjY2Jhc2UpOgorCS5sb25nCTAKKyNlbmRpZiAvKiBNQUNfU0VSSUFMX0RFQlVHICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19BUE9MTE8pCitMU1JCMCAgICAgICAgPSAweDEwNDEyCitMVEhSQjAgICAgICAgPSAweDEwNDE2CitMQ1BVQ1RSTCAgICAgPSAweDEwMTAwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0hQMzAwKQorRENBREFUQQkgICAgID0gMHgxMQorRENBTFNSCSAgICAgPSAweDFiCitBUENJREFUQSAgICAgPSAweDAwCitBUENJTFNSICAgICAgPSAweDE0CitMKHVhcnRiYXNlKToKKwkubG9uZwkwCitMKHVhcnRfc2NvZGUpOgorCS5sb25nCS0xCisjZW5kaWYKKworX19GSU5JVAorCS5kYXRhCisJLmFsaWduCTQKKworYXZhaWxtZW06CisJLmxvbmcJMAorbTY4a19wZ3RhYmxlX2NhY2hlbW9kZToKKwkubG9uZwkwCittNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlOgorCS5sb25nCTAKKyNpZiBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KQorbXZtZV9iZGlkOgorCS5sb25nCTAsMCwwLDAsMCwwLDAsMAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUTQwKQorcTQwX21lbV9jcHRyOgorCS5sb25nCTAKK0wocTQwX2RvX2RlYnVnKToKKwkubG9uZwkwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0ZDMyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogbGludXgvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMgLS0gTGludXgvbTY4ayBnZW5lcmFsIGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIDA3LzAzLzk2OiBUaW1lciBpbml0aWFsaXphdGlvbiwgYW5kIHRodXMgbWFjaF9zY2hlZF9pbml0KCksCisgKiAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHJlcXVlc3RfaXJxKCkgYW5kIG1vdmVkIHRvIGluaXRfdGltZSgpLgorICogICAgICAgICAgIFdlIHNob3VsZCB0aGVyZWZvcmUgY29uc2lkZXIgcmVuYW1pbmcgb3VyIGFkZF9pc3IoKSBhbmQKKyAqICAgICAgICAgICByZW1vdmVfaXNyKCkgdG8gcmVxdWVzdF9pcnEoKSBhbmQgZnJlZV9pcnEoKQorICogICAgICAgICAgIHJlc3BlY3RpdmVseSwgc28gdGhleSBhcmUgY29tcGxpYW50IHdpdGggdGhlIG90aGVyCisgKiAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL0plcworICogMTEvMDcvOTY6IENoYW5nZWQgYWxsIGFkZF8vcmVtb3ZlX2lzcigpIHRvIHJlcXVlc3RfL2ZyZWVfaXJxKCkgY2FsbHMuCisgKiAgICAgICAgICAgUmVtb3ZlZCBpcnEgbGlzdCBzdXBwb3J0LCBpZiBhbnkgbWFjaGluZSBuZWVkcyBhbiBpcnEgc2VydmVyCisgKiAgICAgICAgICAgaXQgbXVzdCBpbXBsZW1lbnQgdGhpcyBpdHNlbGYgKGFzIGl0J3MgYWxyZWFkeSBkb25lKSwgaW5zdGVhZAorICogICAgICAgICAgIG9ubHkgZGVmYXVsdCBoYW5kbGVyIGFyZSB1c2VkIHdpdGggbWFjaF9kZWZhdWx0X2hhbmRsZXIuCisgKiAgICAgICAgICAgcmVxdWVzdF9pcnEgZ290IHNvbWUgZmxhZ3MgZGlmZmVyZW50IGZyb20gb3RoZXIgYXJjaGl0ZWN0dXJlczoKKyAqICAgICAgICAgICAtIElSUV9GTEdfUkVQTEFDRSA6IFJlcGxhY2UgYW4gZXhpc3RpbmcgaGFuZGxlciAodGhlIGRlZmF1bHQgb25lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgcmVwbGFjZWQgd2l0aG91dCB0aGlzIGZsYWcpCisgKiAgICAgICAgICAgLSBJUlFfRkxHX0xPQ0sgOiBoYW5kbGVyIGNhbid0IGJlIHJlcGxhY2VkCisgKiAgICAgICAgICAgVGhlcmUgYXJlIG90aGVyIG1hY2hpbmUgZGVwZW5kaW5nIGZsYWdzLCBzZWUgdGhlcmUKKyAqICAgICAgICAgICBJZiB5b3Ugd2FudCB0byByZXBsYWNlIGEgZGVmYXVsdCBoYW5kbGVyIHlvdSBzaG91bGQga25vdyB3aGF0CisgKiAgICAgICAgICAgeW91J3JlIGRvaW5nLCBzaW5jZSBpdCBtaWdodCBoYW5kbGUgZGlmZmVyZW50IG90aGVyIGlycSBzb3VyY2VzCisgKiAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1JvbWFuIFppcHBlbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisjaWZkZWYgQ09ORklHX1E0MAorI2luY2x1ZGUgPGFzbS9xNDBpbnRzLmg+CisjZW5kaWYKKworLyogdGFibGUgZm9yIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KK3N0YXRpYyBpcnFfaGFuZGxlcl90IGlycV9saXN0W1NZU19JUlFTXTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfbmFtZXNbU1lTX0lSUVNdID0geworCVswXSA9ICJzcHVyaW91cyBpbnQiLAorCVsxXSA9ICJpbnQxIGhhbmRsZXIiLAorCVsyXSA9ICJpbnQyIGhhbmRsZXIiLAorCVszXSA9ICJpbnQzIGhhbmRsZXIiLAorCVs0XSA9ICJpbnQ0IGhhbmRsZXIiLAorCVs1XSA9ICJpbnQ1IGhhbmRsZXIiLAorCVs2XSA9ICJpbnQ2IGhhbmRsZXIiLAorCVs3XSA9ICJpbnQ3IGhhbmRsZXIiCit9OworCisvKiBUaGUgbnVtYmVyIG9mIHNwdXJpb3VzIGludGVycnVwdHMgKi8KK3ZvbGF0aWxlIHVuc2lnbmVkIGludCBudW1fc3B1cmlvdXM7CisKKyNkZWZpbmUgTlVNX0lSUV9OT0RFUyAxMDAKK3N0YXRpYyBpcnFfbm9kZV90IG5vZGVzW05VTV9JUlFfTk9ERVNdOworCitzdGF0aWMgdm9pZCBkdW1teV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworc3RhdGljIHZvaWQgZHVtbXlfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgaW50IGR1bW15X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCWlycXJldHVybl90ICgqaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyB2b2lkIGR1bW15X2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKK3ZvaWQgKCplbmFibGVfaXJxKSAodW5zaWduZWQgaW50KSA9IGR1bW15X2VuYWJsZV9pcnE7Cit2b2lkICgqZGlzYWJsZV9pcnEpICh1bnNpZ25lZCBpbnQpID0gZHVtbXlfZGlzYWJsZV9pcnE7CisKK2ludCAoKm1hY2hfcmVxdWVzdF9pcnEpICh1bnNpZ25lZCBpbnQsIGlycXJldHVybl90ICgqKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopID0gZHVtbXlfcmVxdWVzdF9pcnE7Cit2b2lkICgqbWFjaF9mcmVlX2lycSkgKHVuc2lnbmVkIGludCwgdm9pZCAqKSA9IGR1bW15X2ZyZWVfaXJxOworCit2b2lkIGluaXRfaXJxX3Byb2Modm9pZCk7CisKKy8qCisgKiB2b2lkIGluaXRfSVJRKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBJUlEgaGFuZGxpbmcgcm91dGluZXMuCisgKi8KKwordm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTWVNfSVJRUzsgaSsrKSB7CisJCWlmIChtYWNoX2RlZmF1bHRfaGFuZGxlcikKKwkJCWlycV9saXN0W2ldLmhhbmRsZXIgPSAoKm1hY2hfZGVmYXVsdF9oYW5kbGVyKVtpXTsKKwkJaXJxX2xpc3RbaV0uZmxhZ3MgICA9IDA7CisJCWlycV9saXN0W2ldLmRldl9pZCAgPSBOVUxMOworCQlpcnFfbGlzdFtpXS5kZXZuYW1lID0gZGVmYXVsdF9uYW1lc1tpXTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lSUV9OT0RFUzsgaSsrKQorCQlub2Rlc1tpXS5oYW5kbGVyID0gTlVMTDsKKworCW1hY2hfaW5pdF9JUlEgKCk7Cit9CisKK2lycV9ub2RlX3QgKm5ld19pcnFfbm9kZSh2b2lkKQoreworCWlycV9ub2RlX3QgKm5vZGU7CisJc2hvcnQgaTsKKworCWZvciAobm9kZSA9IG5vZGVzLCBpID0gTlVNX0lSUV9OT0RFUy0xOyBpID49IDA7IG5vZGUrKywgaS0tKQorCQlpZiAoIW5vZGUtPmhhbmRsZXIpCisJCQlyZXR1cm4gbm9kZTsKKworCXByaW50ayAoIm5ld19pcnFfbm9kZTogb3V0IG9mIG5vZGVzXG4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdlIHdpbGwga2VlcCB0aGVzZSBmdW5jdGlvbnMgdW50aWwgSSBoYXZlIGNvbnZpbmNlZCBMaW51cyB0byBtb3ZlCisgKiB0aGUgZGVjbGFyYXRpb24gb2YgdGhlbSBmcm9tIGluY2x1ZGUvbGludXgvc2NoZWQuaCB0bworICogaW5jbHVkZS9hc20vaXJxLmguCisgKi8KK2ludCByZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlyZXR1cm4gbWFjaF9yZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworfQorCitFWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKKwordm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJbWFjaF9mcmVlX2lycShpcnEsIGRldl9pZCk7Cit9CisKK0VYUE9SVF9TWU1CT0woZnJlZV9pcnEpOworCitpbnQgY3B1X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA8IElSUTEgfHwgaXJxID4gSVJRNykgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkIGZyb20gJXNcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisjaWYgMAorCWlmICghKGlycV9saXN0W2lycV0uZmxhZ3MgJiBJUlFfRkxHX1NURCkpIHsKKwkJaWYgKGlycV9saXN0W2lycV0uZmxhZ3MgJiBJUlFfRkxHX0xPQ0spIHsKKwkJCXByaW50aygiJXM6IElSUSAlZCBmcm9tICVzIGlzIG5vdCByZXBsYWNlYWJsZVxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX2xpc3RbaXJxXS5kZXZuYW1lKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJaWYgKCEoZmxhZ3MgJiBJUlFfRkxHX1JFUExBQ0UpKSB7CisJCQlwcmludGsoIiVzOiAlcyBjYW4ndCByZXBsYWNlIElSUSAlZCBmcm9tICVzXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGV2bmFtZSwgaXJxLCBpcnFfbGlzdFtpcnFdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKyNlbmRpZgorCisJaXJxX2xpc3RbaXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKKwlpcnFfbGlzdFtpcnFdLmZsYWdzICAgPSBmbGFnczsKKwlpcnFfbGlzdFtpcnFdLmRldl9pZCAgPSBkZXZfaWQ7CisJaXJxX2xpc3RbaXJxXS5kZXZuYW1lID0gZGV2bmFtZTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcHVfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPCBJUlExIHx8IGlycSA+IElSUTcpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycV9saXN0W2lycV0uZGV2X2lkICE9IGRldl9pZCkKKwkJcHJpbnRrKCIlczogUmVtb3ZpbmcgcHJvYmFibHkgd3JvbmcgSVJRICVkIGZyb20gJXNcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX2xpc3RbaXJxXS5kZXZuYW1lKTsKKworCWlycV9saXN0W2lycV0uaGFuZGxlciA9ICgqbWFjaF9kZWZhdWx0X2hhbmRsZXIpW2lycV07CisJaXJxX2xpc3RbaXJxXS5mbGFncyAgID0gMDsKKwlpcnFfbGlzdFtpcnFdLmRldl9pZCAgPSBOVUxMOworCWlycV9saXN0W2lycV0uZGV2bmFtZSA9IGRlZmF1bHRfbmFtZXNbaXJxXTsKK30KKworLyoKKyAqIERvIHdlIG5lZWQgdGhlc2UgcHJvYmUgZnVuY3Rpb25zIG9uIHRoZSBtNjhrPworICoKKyAqICAuLi4gbWF5IGJlIHVzZWZ1bCB3aXRoIElTQSBkZXZpY2VzCisgKi8KK3Vuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uICh2b2lkKQoreworI2lmZGVmIENPTkZJR19RNDAKKwlpZiAoTUFDSF9JU19RNDApCisJCXJldHVybiBxNDBfcHJvYmVfaXJxX29uKCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfb24pOworCitpbnQgcHJvYmVfaXJxX29mZiAodW5zaWduZWQgbG9uZyBpcnFzKQoreworI2lmZGVmIENPTkZJR19RNDAKKwlpZiAoTUFDSF9JU19RNDApCisJCXJldHVybiBxNDBfcHJvYmVfaXJxX29mZihpcnFzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHByb2JlX2lycV9vZmYpOworCitzdGF0aWMgdm9pZCBkdW1teV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcHJpbnRrKCJjYWxsaW5nIHVuaW5pdGlhbGl6ZWQgZW5hYmxlX2lycSgpXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoImNhbGxpbmcgdW5pbml0aWFsaXplZCBkaXNhYmxlX2lycSgpXG4iKTsKK30KKworc3RhdGljIGludCBkdW1teV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlwcmludGsoImNhbGxpbmcgdW5pbml0aWFsaXplZCByZXF1ZXN0X2lycSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXByaW50aygiY2FsbGluZyB1bmluaXRpYWxpemVkIGRpc2FibGVfaXJxKClcbiIpOworfQorCithc21saW5rYWdlIHZvaWQgcHJvY2Vzc19pbnQodW5zaWduZWQgbG9uZyB2ZWMsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpZiAodmVjID49IFZFQ19JTlQxICYmIHZlYyA8PSBWRUNfSU5UNyAmJiAhTUFDSF9JU19CVk1FNjAwMCkgeworCQl2ZWMgLT0gVkVDX1NQVVI7CisJCWtzdGF0X2NwdSgwKS5pcnFzW3ZlY10rKzsKKwkJaXJxX2xpc3RbdmVjXS5oYW5kbGVyKHZlYywgaXJxX2xpc3RbdmVjXS5kZXZfaWQsIGZwKTsKKwl9IGVsc2UgeworCQlpZiAobWFjaF9wcm9jZXNzX2ludCkKKwkJCW1hY2hfcHJvY2Vzc19pbnQodmVjLCBmcCk7CisJCWVsc2UKKwkJCXBhbmljKCJDYW4ndCBwcm9jZXNzIGludGVycnVwdCB2ZWN0b3IgJWxkXG4iLCB2ZWMpOworCQlyZXR1cm47CisJfQorfQorCitpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaSA9ICoobG9mZl90ICopIHY7CisKKwkvKiBhdXRvdmVjdG9yIGludGVycnVwdHMgKi8KKwlpZiAoaSA8IFNZU19JUlFTKSB7CisJCWlmIChtYWNoX2RlZmF1bHRfaGFuZGxlcikgeworCQkJc2VxX3ByaW50ZihwLCAiYXV0byAlMmQ6ICUxMHUgIiwgaSwKKwkJCSAgICAgICAgICAgICAgIGkgPyBrc3RhdF9jcHUoMCkuaXJxc1tpXSA6IG51bV9zcHVyaW91cyk7CisJCQlzZXFfcHV0cyhwLCAiICAiKTsKKwkJCXNlcV9wcmludGYocCwgIiVzXG4iLCBpcnFfbGlzdFtpXS5kZXZuYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoaSA9PSBTWVNfSVJRUykKKwkJbWFjaF9nZXRfaXJxX2xpc3QocCwgdik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKQoreworCS8qIEluc2VydCAvcHJvYy9pcnEgZHJpdmVyIGhlcmUgKi8KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMgYi9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTgzN2UzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTAsMCArMSw4OCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgorCithc21saW5rYWdlIGxvbmcgbG9uZyBfX2FzaGxkaTMgKGxvbmcgbG9uZywgaW50KTsKK2FzbWxpbmthZ2UgbG9uZyBsb25nIF9fYXNocmRpMyAobG9uZyBsb25nLCBpbnQpOworYXNtbGlua2FnZSBsb25nIGxvbmcgX19sc2hyZGkzIChsb25nIGxvbmcsIGludCk7Cithc21saW5rYWdlIGxvbmcgbG9uZyBfX211bGRpMyAobG9uZyBsb25nLCBsb25nIGxvbmcpOworZXh0ZXJuIGNoYXIgbTY4a19kZWJ1Z19kZXZpY2VbXTsKKworZXh0ZXJuIHZvaWQgZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXIgKik7CisKKy8qIHBsYXRmb3JtIGRlcGVuZGVudCBzdXBwb3J0ICovCisKK0VYUE9SVF9TWU1CT0wobTY4a19tYWNodHlwZSk7CitFWFBPUlRfU1lNQk9MKG02OGtfY3B1dHlwZSk7CitFWFBPUlRfU1lNQk9MKG02OGtfaXMwNDBvcjA2MCk7CitFWFBPUlRfU1lNQk9MKG02OGtfcmVhbG51bV9tZW1vcnkpOworRVhQT1JUX1NZTUJPTChtNjhrX21lbW9yeSk7CisjaWZuZGVmIENPTkZJR19TVU4zCitFWFBPUlRfU1lNQk9MKGNhY2hlX3B1c2gpOworRVhQT1JUX1NZTUJPTChjYWNoZV9jbGVhcik7CisjaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCitFWFBPUlRfU1lNQk9MKG1tX3Z0b3ApOworRVhQT1JUX1NZTUJPTChtbV9wdG92KTsKK0VYUE9SVF9TWU1CT0wobW1fZW5kX29mX2NodW5rKTsKKyNlbHNlCitFWFBPUlRfU1lNQk9MKG02OGtfbWVtb2Zmc2V0KTsKKyNlbmRpZiAvKiAhQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksgKi8KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKK0VYUE9SVF9TWU1CT0woaW91bm1hcCk7CitFWFBPUlRfU1lNQk9MKGtlcm5lbF9zZXRfY2FjaGVtb2RlKTsKKyNlbmRpZiAvKiAhQ09ORklHX1NVTjMgKi8KK0VYUE9SVF9TWU1CT0wobTY4a19kZWJ1Z19kZXZpY2UpOworRVhQT1JUX1NZTUJPTChtYWNoX2h3Y2xrKTsKK0VYUE9SVF9TWU1CT0wobWFjaF9nZXRfc3MpOworRVhQT1JUX1NZTUJPTChtYWNoX2dldF9ydGNfcGxsKTsKK0VYUE9SVF9TWU1CT0wobWFjaF9zZXRfcnRjX3BsbCk7CisjaWZkZWYgQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUKK0VYUE9SVF9TWU1CT0wobWFjaF9iZWVwKTsKKyNlbmRpZgorRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CitFWFBPUlRfU1lNQk9MKGR1bXBfdGhyZWFkKTsKK0VYUE9SVF9TWU1CT0woc3Rybmxlbik7CitFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOworRVhQT1JUX1NZTUJPTChzdHJzdHIpOworRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKK0VYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CitFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CisjaWZkZWYgQ09ORklHX1ZNRQorRVhQT1JUX1NZTUJPTCh2bWVfYnJkdHlwZSk7CisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBhcmUgc3BlY2lhbCBiZWNhdXNlIHRoZXkncmUgbm90IGNhbGxlZAorICAgZXhwbGljaXRseSAodGhlIEMgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZW0pLiAgRm9ydHVuYXRlbHksCisgICB0aGVpciBpbnRlcmZhY2UgaXNuJ3QgZ29ubmEgY2hhbmdlIGFueSB0aW1lIHNvb24gbm93LCBzbworICAgaXQncyBPSyB0byBsZWF2ZSBpdCBvdXQgb2YgdmVyc2lvbiBjb250cm9sLiAgKi8KK0VYUE9SVF9TWU1CT0woX19hc2hsZGkzKTsKK0VYUE9SVF9TWU1CT0woX19hc2hyZGkzKTsKK0VYUE9SVF9TWU1CT0woX19sc2hyZGkzKTsKK0VYUE9SVF9TWU1CT0wobWVtY3B5KTsKK0VYUE9SVF9TWU1CT0wobWVtc2V0KTsKK0VYUE9SVF9TWU1CT0wobWVtY21wKTsKK0VYUE9SVF9TWU1CT0wobWVtc2Nhbik7CitFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKKworRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKK0VYUE9SVF9TWU1CT0woX191cF93YWtldXApOworCitFWFBPUlRfU1lNQk9MKGdldF93Y2hhbik7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL21vZHVsZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFhMmZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUuYwpAQCAtMCwwICsxLDEyOCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm10Li4uKQorI2VuZGlmCisKK3ZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHZtYWxsb2Moc2l6ZSk7Cit9CisKKworLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KK3ZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQoreworCXZmcmVlKG1vZHVsZV9yZWdpb24pOworCS8qIEZJWE1FOiBJZiBtb2R1bGVfcmVnaW9uID09IG1vZC0+aW5pdF9yZWdpb24sIHRyaW0gZXhjZXB0aW9uCisgICAgICAgICAgIHRhYmxlIGVudHJpZXMuICovCit9CisKKy8qIFdlIGRvbid0IG5lZWQgYW55dGhpbmcgc3BlY2lhbC4gKi8KK2ludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCisJCQkgICAgICBFbGZfU2hkciAqc2VjaGRycywKKwkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhcHBseV9yZWxvY2F0ZShFbGYzMl9TaGRyICpzZWNoZHJzLAorCQkgICBjb25zdCBjaGFyICpzdHJ0YWIsCisJCSAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKKwkJICAgdW5zaWduZWQgaW50IHJlbHNlYywKKwkJICAgc3RydWN0IG1vZHVsZSAqbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJRWxmMzJfUmVsICpyZWwgPSAodm9pZCAqKXNlY2hkcnNbcmVsc2VjXS5zaF9hZGRyOworCUVsZjMyX1N5bSAqc3ltOworCXVpbnQzMl90ICpsb2NhdGlvbjsKKworCURFQlVHUCgiQXBwbHlpbmcgcmVsb2NhdGUgc2VjdGlvbiAldSB0byAldVxuIiwgcmVsc2VjLAorCSAgICAgICBzZWNoZHJzW3JlbHNlY10uc2hfaW5mbyk7CisJZm9yIChpID0gMDsgaSA8IHNlY2hkcnNbcmVsc2VjXS5zaF9zaXplIC8gc2l6ZW9mKCpyZWwpOyBpKyspIHsKKwkJLyogVGhpcyBpcyB3aGVyZSB0byBtYWtlIHRoZSBjaGFuZ2UgKi8KKwkJbG9jYXRpb24gPSAodm9pZCAqKXNlY2hkcnNbc2VjaGRyc1tyZWxzZWNdLnNoX2luZm9dLnNoX2FkZHIKKwkJCSsgcmVsW2ldLnJfb2Zmc2V0OworCQkvKiBUaGlzIGlzIHRoZSBzeW1ib2wgaXQgaXMgcmVmZXJyaW5nIHRvLiAgTm90ZSB0aGF0IGFsbAorCQkgICB1bmRlZmluZWQgc3ltYm9scyBoYXZlIGJlZW4gcmVzb2x2ZWQuICAqLworCQlzeW0gPSAoRWxmMzJfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgorCQkJKyBFTEYzMl9SX1NZTShyZWxbaV0ucl9pbmZvKTsKKworCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWxbaV0ucl9pbmZvKSkgeworCQljYXNlIFJfNjhLXzMyOgorCQkJLyogV2UgYWRkIHRoZSB2YWx1ZSBpbnRvIHRoZSBsb2NhdGlvbiBnaXZlbiAqLworCQkJKmxvY2F0aW9uICs9IHN5bS0+c3RfdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBSXzY4S19QQzMyOgorCQkJLyogQWRkIHRoZSB2YWx1ZSwgc3VidHJhY3QgaXRzIHBvc3RpdGlvbiAqLworCQkJKmxvY2F0aW9uICs9IHN5bS0+c3RfdmFsdWUgLSAodWludDMyX3QpbG9jYXRpb247CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBVbmtub3duIHJlbG9jYXRpb246ICV1XG4iLAorCQkJICAgICAgIG1lLT5uYW1lLCBFTEYzMl9SX1RZUEUocmVsW2ldLnJfaW5mbykpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgYXBwbHlfcmVsb2NhdGVfYWRkKEVsZjMyX1NoZHIgKnNlY2hkcnMsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHJ0YWIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVsc2VjLAorCQkgICAgICAgc3RydWN0IG1vZHVsZSAqbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJRWxmMzJfUmVsYSAqcmVsID0gKHZvaWQgKilzZWNoZHJzW3JlbHNlY10uc2hfYWRkcjsKKwlFbGYzMl9TeW0gKnN5bTsKKwl1aW50MzJfdCAqbG9jYXRpb247CisKKwlERUJVR1AoIkFwcGx5aW5nIHJlbG9jYXRlX2FkZCBzZWN0aW9uICV1IHRvICV1XG4iLCByZWxzZWMsCisJICAgICAgIHNlY2hkcnNbcmVsc2VjXS5zaF9pbmZvKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2VjaGRyc1tyZWxzZWNdLnNoX3NpemUgLyBzaXplb2YoKnJlbCk7IGkrKykgeworCQkvKiBUaGlzIGlzIHdoZXJlIHRvIG1ha2UgdGhlIGNoYW5nZSAqLworCQlsb2NhdGlvbiA9ICh2b2lkICopc2VjaGRyc1tzZWNoZHJzW3JlbHNlY10uc2hfaW5mb10uc2hfYWRkcgorCQkJKyByZWxbaV0ucl9vZmZzZXQ7CisJCS8qIFRoaXMgaXMgdGhlIHN5bWJvbCBpdCBpcyByZWZlcnJpbmcgdG8uICBOb3RlIHRoYXQgYWxsCisJCSAgIHVuZGVmaW5lZCBzeW1ib2xzIGhhdmUgYmVlbiByZXNvbHZlZC4gICovCisJCXN5bSA9IChFbGYzMl9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCisJCQkrIEVMRjMyX1JfU1lNKHJlbFtpXS5yX2luZm8pOworCisJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbFtpXS5yX2luZm8pKSB7CisJCWNhc2UgUl82OEtfMzI6CisJCQkvKiBXZSBhZGQgdGhlIHZhbHVlIGludG8gdGhlIGxvY2F0aW9uIGdpdmVuICovCisJCQkqbG9jYXRpb24gPSByZWxbaV0ucl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgUl82OEtfUEMzMjoKKwkJCS8qIEFkZCB0aGUgdmFsdWUsIHN1YnRyYWN0IGl0cyBwb3N0aXRpb24gKi8KKwkJCSpsb2NhdGlvbiA9IHJlbFtpXS5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLSAodWludDMyX3QpbG9jYXRpb247CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBVbmtub3duIHJlbG9jYXRpb246ICV1XG4iLAorCQkJICAgICAgIG1lLT5uYW1lLCBFTEYzMl9SX1RZUEUocmVsW2ldLnJfaW5mbykpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCXJldHVybiAwOworfQorCit2b2lkIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IwNDNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTAsMCArMSw0MDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogIDY4MDYwIGZpeGVzIGJ5IEplc3BlciBTa292CisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KKyNpbmNsdWRlIDxsaW51eC9tcXVldWUuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworLyoKKyAqIEluaXRpYWwgdGFzay90aHJlYWQgc3RydWN0dXJlLiBNYWtlIHRoaXMgYSBwZXItYXJjaGl0ZWN0dXJlIHRoaW5nLAorICogYmVjYXVzZSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0ZW5kIHRvIGhhdmUgZGlmZmVyZW50CisgKiBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZCBwb3RlbnRpYWxseSBkaWZmZXJlbnQgaW5pdGlhbAorICogc2V0dXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSBJTklUX0ZTOworc3RhdGljIHN0cnVjdCBmaWxlc19zdHJ1Y3QgaW5pdF9maWxlcyA9IElOSVRfRklMRVM7CitzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0gSU5JVF9TSUdOQUxTKGluaXRfc2lnbmFscyk7CitzdGF0aWMgc3RydWN0IHNpZ2hhbmRfc3RydWN0IGluaXRfc2lnaGFuZCA9IElOSVRfU0lHSEFORChpbml0X3NpZ2hhbmQpOworc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0gSU5JVF9NTShpbml0X21tKTsKKworRVhQT1JUX1NZTUJPTChpbml0X21tKTsKKwordW5pb24gdGhyZWFkX3VuaW9uIGluaXRfdGhyZWFkX3VuaW9uCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3Rhc2siKSwgYWxpZ25lZChUSFJFQURfU0laRSkpKQorICAgICAgID0geyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKKworLyogaW5pdGlhbCB0YXNrIHN0cnVjdHVyZSAqLworc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOworCitFWFBPUlRfU1lNQk9MKGluaXRfdGFzayk7CisKK2FzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOworCisKKy8qCisgKiBSZXR1cm4gc2F2ZWQgUEMgZnJvbSBhIGJsb2NrZWQgdGhyZWFkCisgKi8KK3Vuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKil0c2stPnRocmVhZC5rc3A7CisJLyogQ2hlY2sgd2hldGhlciB0aGUgdGhyZWFkIGlzIGJsb2NrZWQgaW4gcmVzdW1lKCkgKi8KKwlpZiAoaW5fc2NoZWRfZnVuY3Rpb25zKHN3LT5yZXRwYykpCisJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcgKilzdy0+YTYpWzFdOworCWVsc2UKKwkJcmV0dXJuIHN3LT5yZXRwYzsKK30KKworLyoKKyAqIFRoZSBpZGxlIGxvb3Agb24gYW4gbTY4ay4uCisgKi8KK3ZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCit7CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKyNpZiBkZWZpbmVkKE1BQ0hfQVRBUklfT05MWSkgJiYgIWRlZmluZWQoQ09ORklHX0hBREVTKQorCQkvKiBibG9jayBvdXQgSFNZTkMgb24gdGhlIGF0YXJpIChmYWxjb24pICovCisJCV9fYXNtX18oInN0b3AgIzB4MjIwMCIgOiA6IDogImNjIik7CisjZWxzZQorCQlfX2FzbV9fKCJzdG9wICMweDIwMDAiIDogOiA6ICJjYyIpOworI2VuZGlmCit9CisKK3ZvaWQgKCppZGxlKSh2b2lkKSA9IGRlZmF1bHRfaWRsZTsKKworLyoKKyAqIFRoZSBpZGxlIHRocmVhZC4gVGhlcmUncyBubyB1c2VmdWwgd29yayB0byBiZQorICogZG9uZSwgc28ganVzdCB0cnkgdG8gY29uc2VydmUgcG93ZXIgYW5kIGhhdmUgYQorICogbG93IGV4aXQgbGF0ZW5jeSAoaWUgc2l0IGluIGEgbG9vcCB3YWl0aW5nIGZvcgorICogc29tZWJvZHkgdG8gc2F5IHRoYXQgdGhleSdkIGxpa2UgdG8gcmVzY2hlZHVsZSkKKyAqLwordm9pZCBjcHVfaWRsZSh2b2lkKQoreworCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWlkbGUoKTsKKwkJc2NoZWR1bGUoKTsKKwl9Cit9CisKK3ZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKK3sKKwlpZiAobWFjaF9yZXNldCkKKwkJbWFjaF9yZXNldCgpOworCWZvciAoOzspOworfQorCitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfcmVzdGFydCk7CisKK3ZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCit7CisJaWYgKG1hY2hfaGFsdCkKKwkJbWFjaF9oYWx0KCk7CisJZm9yICg7Oyk7Cit9CisKK0VYUE9SVF9TWU1CT0wobWFjaGluZV9oYWx0KTsKKwordm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCWlmIChtYWNoX3Bvd2VyX29mZikKKwkJbWFjaF9wb3dlcl9vZmYoKTsKKwlmb3IgKDs7KTsKK30KKworRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Bvd2VyX29mZik7CisKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlwcmludGsoIlxuIik7CisJcHJpbnRrKCJGb3JtYXQgJTAyeCAgVmVjdG9yOiAlMDR4ICBQQzogJTA4bHggIFN0YXR1czogJTA0eCAgICAlc1xuIiwKKwkgICAgICAgcmVncy0+Zm9ybWF0LCByZWdzLT52ZWN0b3IsIHJlZ3MtPnBjLCByZWdzLT5zciwgcHJpbnRfdGFpbnRlZCgpKTsKKwlwcmludGsoIk9SSUdfRDA6ICUwOGx4ICBEMDogJTA4bHggIEEyOiAlMDhseCAgQTE6ICUwOGx4XG4iLAorCSAgICAgICByZWdzLT5vcmlnX2QwLCByZWdzLT5kMCwgcmVncy0+YTIsIHJlZ3MtPmExKTsKKwlwcmludGsoIkEwOiAlMDhseCAgRDU6ICUwOGx4ICBENDogJTA4bHhcbiIsCisJICAgICAgIHJlZ3MtPmEwLCByZWdzLT5kNSwgcmVncy0+ZDQpOworCXByaW50aygiRDM6ICUwOGx4ICBEMjogJTA4bHggIEQxOiAlMDhseFxuIiwKKwkgICAgICAgcmVncy0+ZDMsIHJlZ3MtPmQyLCByZWdzLT5kMSk7CisJaWYgKCEocmVncy0+c3IgJiBQU19TKSkKKwkJcHJpbnRrKCJVU1A6ICUwOGx4XG4iLCByZHVzcCgpKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIGtlcm5lbCB0aHJlYWQKKyAqLworaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaW50IHBpZDsKKwltbV9zZWdtZW50X3QgZnM7CisKKwlmcyA9IGdldF9mcygpOworCXNldF9mcyAoS0VSTkVMX0RTKTsKKworCXsKKwlyZWdpc3RlciBsb25nIHJldHZhbCBfX2FzbV9fICgiZDAiKTsKKwlyZWdpc3RlciBsb25nIGNsb25lX2FyZyBfX2FzbV9fICgiZDEiKSA9IGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRDsKKworCXJldHZhbCA9IF9fTlJfY2xvbmU7CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICgiY2xybCAlJWQyXG5cdCIKKwkgICAidHJhcCAjMFxuXHQiCQkvKiBMaW51eC9tNjhrIHN5c3RlbSBjYWxsICovCisJICAgInRzdGwgJTBcblx0IgkJLyogY2hpbGQgb3IgcGFyZW50ICovCisJICAgImpuZSAxZlxuXHQiCQkJLyogcGFyZW50IC0ganVtcCAqLworCSAgICJsZWEgJSVzcEAoJWM3KSwlNlxuXHQiCS8qIHJlbG9hZCBjdXJyZW50ICovCisJICAgIm1vdmVsICU2QCwlNlxuXHQiCisJICAgIm1vdmVsICUzLCUlc3BALVxuXHQiCS8qIHB1c2ggYXJndW1lbnQgKi8KKwkgICAianNyICU0QFxuXHQiCQkvKiBjYWxsIGZuICovCisJICAgIm1vdmVsICUwLCUlZDFcblx0IgkJLyogcGFzcyBleGl0IHZhbHVlICovCisJICAgIm1vdmVsICUyLCUlZDBcblx0IgkJLyogZXhpdCAqLworCSAgICJ0cmFwICMwXG4iCisJICAgIjE6IgorCSAgIDogIitkIiAocmV0dmFsKQorCSAgIDogImkiIChfX05SX2Nsb25lKSwgImkiIChfX05SX2V4aXQpLAorCSAgICAgInIiIChhcmcpLCAiYSIgKGZuKSwgImQiIChjbG9uZV9hcmcpLCAiciIgKGN1cnJlbnQpLAorCSAgICAgImkiICgtVEhSRUFEX1NJWkUpCisJICAgOiAiZDIiKTsKKworCXBpZCA9IHJldHZhbDsKKwl9CisKKwlzZXRfZnMgKGZzKTsKKwlyZXR1cm4gcGlkOworfQorCit2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgemVybyA9IDA7CisJc2V0X2ZzKFVTRVJfRFMpOworCWN1cnJlbnQtPnRocmVhZC5mcyA9IF9fVVNFUl9EUzsKKwlpZiAoIUZQVV9JU19FTVUpCisJCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ay82ODg4MVxuXHQiCisJCQkgICAgICAiZnJlc3RvcmUgJTBAXG5cdCIKKwkJCSAgICAgICIuY2hpcCA2OGsiIDogOiAiYSIgKCZ6ZXJvKSk7Cit9CisKKy8qCisgKiAibTY4a19mb3JrKCkiLi4gQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHRoZQorICogbm9uLXZvbGF0aWxlIHJlZ2lzdGVycyBoYXZlIGFsc28gYmVlbiBzYXZlZCBvbiB0aGUKKyAqIHN0YWNrLiBXZSBkbyBzb21lIHVnbHkgcG9pbnRlciBzdHVmZiBoZXJlLi4gKHNlZQorICogYWxzbyBjb3B5X3RocmVhZCkKKyAqLworCithc21saW5rYWdlIGludCBtNjhrX2Zvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGRvX2ZvcmsoU0lHQ0hMRCwgcmR1c3AoKSwgcmVncywgMCwgTlVMTCwgTlVMTCk7Cit9CisKK2FzbWxpbmthZ2UgaW50IG02OGtfdmZvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGRvX2ZvcmsoQ0xPTkVfVkZPUksgfCBDTE9ORV9WTSB8IFNJR0NITEQsIHJkdXNwKCksIHJlZ3MsIDAsCisJCSAgICAgICBOVUxMLCBOVUxMKTsKK30KKworYXNtbGlua2FnZSBpbnQgbTY4a19jbG9uZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3c3A7CisJaW50ICpwYXJlbnRfdGlkcHRyLCAqY2hpbGRfdGlkcHRyOworCisJLyogc3lzY2FsbDIgcHV0cyBjbG9uZV9mbGFncyBpbiBkMSBhbmQgdXNwIGluIGQyICovCisJY2xvbmVfZmxhZ3MgPSByZWdzLT5kMTsKKwluZXdzcCA9IHJlZ3MtPmQyOworCXBhcmVudF90aWRwdHIgPSAoaW50ICopcmVncy0+ZDM7CisJY2hpbGRfdGlkcHRyID0gKGludCAqKXJlZ3MtPmQ0OworCWlmICghbmV3c3ApCisJCW5ld3NwID0gcmR1c3AoKTsKKwlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsCisJCSAgICAgICBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOworfQorCitpbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKKwkJIHVuc2lnbmVkIGxvbmcgdW51c2VkLAorCQkgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICogY2hpbGRyZWdzOworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKiBjaGlsZHN0YWNrLCAqc3RhY2s7CisJdW5zaWduZWQgbG9uZyBzdGFja19vZmZzZXQsICpyZXRwOworCisJc3RhY2tfb2Zmc2V0ID0gVEhSRUFEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOworCWNoaWxkcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSAoKHVuc2lnbmVkIGxvbmcpIChwLT50aHJlYWRfaW5mbykgKyBzdGFja19vZmZzZXQpOworCisJKmNoaWxkcmVncyA9ICpyZWdzOworCWNoaWxkcmVncy0+ZDAgPSAwOworCisJcmV0cCA9ICgodW5zaWduZWQgbG9uZyAqKSByZWdzKTsKKwlzdGFjayA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKSByZXRwKSAtIDE7CisKKwljaGlsZHN0YWNrID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopIGNoaWxkcmVncykgLSAxOworCSpjaGlsZHN0YWNrID0gKnN0YWNrOworCWNoaWxkc3RhY2stPnJldHBjID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fZm9yazsKKworCXAtPnRocmVhZC51c3AgPSB1c3A7CisJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKWNoaWxkc3RhY2s7CisJLyoKKwkgKiBNdXN0IHNhdmUgdGhlIGN1cnJlbnQgU0ZDL0RGQyB2YWx1ZSwgTk9UIHRoZSB2YWx1ZSB3aGVuCisJICogdGhlIHBhcmVudCB3YXMgbGFzdCBkZXNjaGVkdWxlZCAtIFJHSCAgMTAtMDgtOTYKKwkgKi8KKwlwLT50aHJlYWQuZnMgPSBnZXRfZnMoKS5zZWc7CisKKwlpZiAoIUZQVV9JU19FTVUpIHsKKwkJLyogQ29weSB0aGUgY3VycmVudCBmcHUgc3RhdGUgKi8KKwkJYXNtIHZvbGF0aWxlICgiZnNhdmUgJTAiIDogOiAibSIgKHAtPnRocmVhZC5mcHN0YXRlWzBdKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoIUNQVV9JU18wNjAgPyBwLT50aHJlYWQuZnBzdGF0ZVswXSA6IHAtPnRocmVhZC5mcHN0YXRlWzJdKQorCQkgIGFzbSB2b2xhdGlsZSAoImZtb3ZlbXggJS9mcDAtJS9mcDcsJTBcblx0IgorCQkJCSJmbW92ZW1sICUvZnBpYXIvJS9mcGNyLyUvZnBzciwlMSIKKwkJCQk6IDogIm0iIChwLT50aHJlYWQuZnBbMF0pLCAibSIgKHAtPnRocmVhZC5mcGNudGxbMF0pCisJCQkJOiAibWVtb3J5Iik7CisJCS8qIFJlc3RvcmUgdGhlIHN0YXRlIGluIGNhc2UgdGhlIGZwdSB3YXMgYnVzeSAqLworCQlhc20gdm9sYXRpbGUgKCJmcmVzdG9yZSAlMCIgOiA6ICJtIiAocC0+dGhyZWFkLmZwc3RhdGVbMF0pKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRmlsbCBpbiB0aGUgZnB1IHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuICAqLworCitpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0ICpmcHUpCit7CisJY2hhciBmcHVzdGF0ZVsyMTZdOworCisJaWYgKEZQVV9JU19FTVUpIHsKKwkJaW50IGk7CisKKwkJbWVtY3B5KGZwdS0+ZnBjbnRsLCBjdXJyZW50LT50aHJlYWQuZnBjbnRsLCAxMik7CisJCW1lbWNweShmcHUtPmZwcmVncywgY3VycmVudC0+dGhyZWFkLmZwLCA5Nik7CisJCS8qIENvbnZlcnQgaW50ZXJuYWwgZnB1IHJlZyByZXByZXNlbnRhdGlvbgorCQkgKiBpbnRvIGxvbmcgZG91YmxlIGZvcm1hdAorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDI0OyBpICs9IDMpCisJCQlmcHUtPmZwcmVnc1tpXSA9ICgoZnB1LT5mcHJlZ3NbaV0gJiAweGZmZmYwMDAwKSA8PCAxNSkgfAorCQkJICAgICAgICAgICAgICAgICAoKGZwdS0+ZnByZWdzW2ldICYgMHgwMDAwZmZmZikgPDwgMTYpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBGaXJzdCBkdW1wIHRoZSBmcHUgY29udGV4dCB0byBhdm9pZCBwcm90b2NvbCB2aW9sYXRpb24uICAqLworCWFzbSB2b2xhdGlsZSAoImZzYXZlICUwIiA6OiAibSIgKGZwdXN0YXRlWzBdKSA6ICJtZW1vcnkiKTsKKwlpZiAoIUNQVV9JU18wNjAgPyAhZnB1c3RhdGVbMF0gOiAhZnB1c3RhdGVbMl0pCisJCXJldHVybiAwOworCisJYXNtIHZvbGF0aWxlICgiZm1vdmVtICUvZnBpYXIvJS9mcGNyLyUvZnBzciwlMCIKKwkJOjogIm0iIChmcHUtPmZwY250bFswXSkKKwkJOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlICgiZm1vdmVteCAlL2ZwMC0lL2ZwNywlMCIKKwkJOjogIm0iIChmcHUtPmZwcmVnc1swXSkKKwkJOiAibWVtb3J5Iik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBmaWxsIGluIHRoZSB1c2VyIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuLgorICovCit2b2lkIGR1bXBfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICogcmVncywgc3RydWN0IHVzZXIgKiBkdW1wKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3OworCisvKiBjaGFuZ2VkIHRoZSBzaXplIGNhbGN1bGF0aW9ucyAtIHNob3VsZCBob3BlZnVsbHkgd29yayBiZXR0ZXIuIGxidCAqLworCWR1bXAtPm1hZ2ljID0gQ01BR0lDOworCWR1bXAtPnN0YXJ0X2NvZGUgPSAwOworCWR1bXAtPnN0YXJ0X3N0YWNrID0gcmR1c3AoKSAmIH4oUEFHRV9TSVpFIC0gMSk7CisJZHVtcC0+dV90c2l6ZSA9ICgodW5zaWduZWQgbG9uZykgY3VycmVudC0+bW0tPmVuZF9jb2RlKSA+PiBQQUdFX1NISUZUOworCWR1bXAtPnVfZHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpIChjdXJyZW50LT5tbS0+YnJrICsKKwkJCQkJICAoUEFHRV9TSVpFLTEpKSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X2RzaXplIC09IGR1bXAtPnVfdHNpemU7CisJZHVtcC0+dV9zc2l6ZSA9IDA7CisKKwlpZiAoZHVtcC0+c3RhcnRfc3RhY2sgPCBUQVNLX1NJWkUpCisJCWR1bXAtPnVfc3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpIChUQVNLX1NJWkUgLSBkdW1wLT5zdGFydF9zdGFjaykpID4+IFBBR0VfU0hJRlQ7CisKKwlkdW1wLT51X2FyMCA9IChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCAqKSgoaW50KSZkdW1wLT5yZWdzIC0gKGludClkdW1wKTsKKwlzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsKKwlkdW1wLT5yZWdzLmQxID0gcmVncy0+ZDE7CisJZHVtcC0+cmVncy5kMiA9IHJlZ3MtPmQyOworCWR1bXAtPnJlZ3MuZDMgPSByZWdzLT5kMzsKKwlkdW1wLT5yZWdzLmQ0ID0gcmVncy0+ZDQ7CisJZHVtcC0+cmVncy5kNSA9IHJlZ3MtPmQ1OworCWR1bXAtPnJlZ3MuZDYgPSBzdy0+ZDY7CisJZHVtcC0+cmVncy5kNyA9IHN3LT5kNzsKKwlkdW1wLT5yZWdzLmEwID0gcmVncy0+YTA7CisJZHVtcC0+cmVncy5hMSA9IHJlZ3MtPmExOworCWR1bXAtPnJlZ3MuYTIgPSByZWdzLT5hMjsKKwlkdW1wLT5yZWdzLmEzID0gc3ctPmEzOworCWR1bXAtPnJlZ3MuYTQgPSBzdy0+YTQ7CisJZHVtcC0+cmVncy5hNSA9IHN3LT5hNTsKKwlkdW1wLT5yZWdzLmE2ID0gc3ctPmE2OworCWR1bXAtPnJlZ3MuZDAgPSByZWdzLT5kMDsKKwlkdW1wLT5yZWdzLm9yaWdfZDAgPSByZWdzLT5vcmlnX2QwOworCWR1bXAtPnJlZ3Muc3RrYWRqID0gcmVncy0+c3RrYWRqOworCWR1bXAtPnJlZ3Muc3IgPSByZWdzLT5zcjsKKwlkdW1wLT5yZWdzLnBjID0gcmVncy0+cGM7CisJZHVtcC0+cmVncy5mbXR2ZWMgPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsKKwkvKiBkdW1wIGZsb2F0aW5nIHBvaW50IHN0dWZmICovCisJZHVtcC0+dV9mcHZhbGlkID0gZHVtcF9mcHUgKHJlZ3MsICZkdW1wLT5tNjhrZnApOworfQorCisvKgorICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCisgKi8KK2FzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKQoreworCWludCBlcnJvcjsKKwljaGFyICogZmlsZW5hbWU7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgJm5hbWU7CisKKwlsb2NrX2tlcm5lbCgpOworCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKKwllcnJvciA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7CisJcHV0bmFtZShmaWxlbmFtZSk7CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiBlcnJvcjsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgZnAsIHBjOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfcGFnZTsKKwlpbnQgY291bnQgPSAwOworCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm4gMDsKKworCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZykocC0+dGhyZWFkX2luZm8pOworCWZwID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcC0+dGhyZWFkLmtzcCktPmE2OworCWRvIHsKKwkJaWYgKGZwIDwgc3RhY2tfcGFnZStzaXplb2Yoc3RydWN0IHRocmVhZF9pbmZvKSB8fAorCQkgICAgZnAgPj0gODE4NCtzdGFja19wYWdlKQorCQkJcmV0dXJuIDA7CisJCXBjID0gKCh1bnNpZ25lZCBsb25nICopZnApWzFdOworCQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpCisJCQlyZXR1cm4gcGM7CisJCWZwID0gKih1bnNpZ25lZCBsb25nICopIGZwOworCX0gd2hpbGUgKGNvdW50KysgPCAxNik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmViNTMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwpAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKiAgVGFrZW4gZnJvbSBsaW51eC9rZXJuZWwvcHRyYWNlLmMgYW5kIG1vZGlmaWVkIGZvciBNNjgweDAuCisgKiAgbGludXgva2VybmVsL3B0cmFjZS5jIGlzIGJ5IFJvc3MgQmlybyAxLzIzLzkyLCBlZGl0ZWQgYnkgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyoKKyAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KKyAqIGluIGV4aXQuYyBvciBpbiBzaWduYWwuYy4KKyAqLworCisvKiBkZXRlcm1pbmVzIHdoaWNoIGJpdHMgaW4gdGhlIFNSIHRoZSB1c2VyIGhhcyBhY2Nlc3MgdG8uICovCisvKiAxID0gYWNjZXNzIDAgPSBubyBhY2Nlc3MgKi8KKyNkZWZpbmUgU1JfTUFTSyAweDAwMWYKKworLyogc2V0cyB0aGUgdHJhY2UgYml0cy4gKi8KKyNkZWZpbmUgVFJBQ0VfQklUUyAweDgwMDAKKworLyogRmluZCB0aGUgc3RhY2sgb2Zmc2V0IGZvciBhIHJlZ2lzdGVyLCByZWxhdGl2ZSB0byB0aHJlYWQuZXNwMC4gKi8KKyNkZWZpbmUgUFRfUkVHKHJlZykJKChsb25nKSYoKHN0cnVjdCBwdF9yZWdzICopMCktPnJlZykKKyNkZWZpbmUgU1dfUkVHKHJlZykJKChsb25nKSYoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikwKS0+cmVnIFwKKwkJCSAtIHNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSkKKy8qIE1hcHBpbmcgZnJvbSBQVF94eHggdG8gdGhlIHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGUgcmVnaXN0ZXIgaXMKKyAgIHNhdmVkLiAgTm90aWNlIHRoYXQgdXNwIGhhcyBubyBzdGFjay1zbG90IGFuZCBuZWVkcyB0byBiZSB0cmVhdGVkCisgICBzcGVjaWFsbHkgKHNlZSBnZXRfcmVnL3B1dF9yZWcgYmVsb3cpLiAqLworc3RhdGljIGludCByZWdvZmZbXSA9IHsKKwlbMF0JPSBQVF9SRUcoZDEpLAorCVsxXQk9IFBUX1JFRyhkMiksCisJWzJdCT0gUFRfUkVHKGQzKSwKKwlbM10JPSBQVF9SRUcoZDQpLAorCVs0XQk9IFBUX1JFRyhkNSksCisJWzVdCT0gU1dfUkVHKGQ2KSwKKwlbNl0JPSBTV19SRUcoZDcpLAorCVs3XQk9IFBUX1JFRyhhMCksCisJWzhdCT0gUFRfUkVHKGExKSwKKwlbOV0JPSBQVF9SRUcoYTIpLAorCVsxMF0JPSBTV19SRUcoYTMpLAorCVsxMV0JPSBTV19SRUcoYTQpLAorCVsxMl0JPSBTV19SRUcoYTUpLAorCVsxM10JPSBTV19SRUcoYTYpLAorCVsxNF0JPSBQVF9SRUcoZDApLAorCVsxNV0JPSAtMSwKKwlbMTZdCT0gUFRfUkVHKG9yaWdfZDApLAorCVsxN10JPSBQVF9SRUcoc3IpLAorCVsxOF0JPSBQVF9SRUcocGMpLAorfTsKKworLyoKKyAqIEdldCBjb250ZW50cyBvZiByZWdpc3RlciBSRUdOTyBpbiB0YXNrIFRBU0suCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vKQoreworCXVuc2lnbmVkIGxvbmcgKmFkZHI7CisKKwlpZiAocmVnbm8gPT0gUFRfVVNQKQorCQlhZGRyID0gJnRhc2stPnRocmVhZC51c3A7CisJZWxzZSBpZiAocmVnbm8gPCBzaXplb2YocmVnb2ZmKS9zaXplb2YocmVnb2ZmWzBdKSkKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nICopKHRhc2stPnRocmVhZC5lc3AwICsgcmVnb2ZmW3JlZ25vXSk7CisJZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKmFkZHI7Cit9CisKKy8qCisgKiBXcml0ZSBjb250ZW50cyBvZiByZWdpc3RlciBSRUdOTyBpbiB0YXNrIFRBU0suCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB1dF9yZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgcmVnbm8sCisJCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nICphZGRyOworCisJaWYgKHJlZ25vID09IFBUX1VTUCkKKwkJYWRkciA9ICZ0YXNrLT50aHJlYWQudXNwOworCWVsc2UgaWYgKHJlZ25vIDwgc2l6ZW9mKHJlZ29mZikvc2l6ZW9mKHJlZ29mZlswXSkpCisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSAodGFzay0+dGhyZWFkLmVzcDAgKyByZWdvZmZbcmVnbm9dKTsKKwllbHNlCisJCXJldHVybiAtMTsKKwkqYWRkciA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkga2VybmVsL3B0cmFjZS5jIHdoZW4gZGV0YWNoaW5nLi4KKyAqCisgKiBNYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LgorICovCit2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJLyogbWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4gKi8KKwl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgJiB+KFRSQUNFX0JJVFMgPDwgMTYpOworCXB1dF9yZWcoY2hpbGQsIFBUX1NSLCB0bXApOworCWNoaWxkLT50aHJlYWQud29yay5kZWxheWVkX3RyYWNlID0gMDsKKwljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IDA7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19wdHJhY2UobG9uZyByZXF1ZXN0LCBsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZDsKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSAtRVBFUk07CisJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1RSQUNFTUUpIHsKKwkJLyogYXJlIHdlIGFscmVhZHkgYmVpbmcgdHJhY2VkPyAqLworCQlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkKKwkJCWdvdG8gb3V0OworCQkvKiBzZXQgdGhlIHB0cmFjZSBiaXQgaW4gdGhlIHByb2Nlc3MgZmxhZ3MuICovCisJCWN1cnJlbnQtPnB0cmFjZSB8PSBQVF9QVFJBQ0VEOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gLUVTUkNIOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJY2hpbGQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CisJaWYgKGNoaWxkKQorCQlnZXRfdGFza19zdHJ1Y3QoY2hpbGQpOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoIWNoaWxkKQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FUEVSTTsKKwlpZiAocGlkID09IDEpCQkvKiB5b3UgbWF5IG5vdCBtZXNzIHdpdGggaW5pdCAqLworCQlnb3RvIG91dF90c2s7CisKKwlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfQVRUQUNIKSB7CisJCXJldCA9IHB0cmFjZV9hdHRhY2goY2hpbGQpOworCQlnb3RvIG91dF90c2s7CisJfQorCisJcmV0ID0gcHRyYWNlX2NoZWNrX2F0dGFjaChjaGlsZCwgcmVxdWVzdCA9PSBQVFJBQ0VfS0lMTCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3RzazsKKworCXN3aXRjaCAocmVxdWVzdCkgeworCS8qIHdoZW4gSSBhbmQgRCBzcGFjZSBhcmUgc2VwYXJhdGUsIHRoZXNlIHdpbGwgbmVlZCB0byBiZSBmaXhlZC4gKi8KKwkJY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLworCQljYXNlIFBUUkFDRV9QRUVLREFUQTogeworCQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCQlpbnQgY29waWVkOworCisJCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnRtcCwgc2l6ZW9mKHRtcCksIDApOworCQkJcmV0ID0gLUVJTzsKKwkJCWlmIChjb3BpZWQgIT0gc2l6ZW9mKHRtcCkpCisJCQkJYnJlYWs7CisJCQlyZXQgPSBwdXRfdXNlcih0bXAsKHVuc2lnbmVkIGxvbmcgKikgZGF0YSk7CisJCQlicmVhazsKKwkJfQorCisJLyogcmVhZCB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICovCisJCWNhc2UgUFRSQUNFX1BFRUtVU1I6IHsKKwkJCXVuc2lnbmVkIGxvbmcgdG1wOworCisJCQlyZXQgPSAtRUlPOworCQkJaWYgKChhZGRyICYgMykgfHwgYWRkciA8IDAgfHwKKwkJCSAgICBhZGRyID4gc2l6ZW9mKHN0cnVjdCB1c2VyKSAtIDMpCisJCQkJYnJlYWs7CisKKwkJCXRtcCA9IDA7ICAvKiBEZWZhdWx0IHJldHVybiBjb25kaXRpb24gKi8KKwkJCWFkZHIgPSBhZGRyID4+IDI7IC8qIHRlbXBvcmFyeSBoYWNrLiAqLworCQkJcmV0ID0gLUVJTzsKKwkJCWlmIChhZGRyIDwgMTkpIHsKKwkJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBhZGRyKTsKKwkJCQlpZiAoYWRkciA9PSBQVF9TUikKKwkJCQkJdG1wID4+PSAxNjsKKwkJCX0gZWxzZSBpZiAoYWRkciA+PSAyMSAmJiBhZGRyIDwgNDkpIHsKKwkJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwW2FkZHIgLSAyMV07CisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisJCQkJLyogQ29udmVydCBpbnRlcm5hbCBmcHUgcmVnIHJlcHJlc2VudGF0aW9uCisJCQkJICogaW50byBsb25nIGRvdWJsZSBmb3JtYXQKKwkJCQkgKi8KKwkJCQlpZiAoRlBVX0lTX0VNVSAmJiAoYWRkciA8IDQ1KSAmJiAhKGFkZHIgJSAzKSkKKwkJCQkJdG1wID0gKCh0bXAgJiAweGZmZmYwMDAwKSA8PCAxNSkgfAorCQkJCQkgICAgICAoKHRtcCAmIDB4MDAwMGZmZmYpIDw8IDE2KTsKKyNlbmRpZgorCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCQlyZXQgPSBwdXRfdXNlcih0bXAsKHVuc2lnbmVkIGxvbmcgKikgZGF0YSk7CisJCQlicmVhazsKKwkJfQorCisgICAgICAvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZC4gKi8KKwkJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCisJCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgorCQkJcmV0ID0gMDsKKwkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJmRhdGEsIHNpemVvZihkYXRhKSwgMSkgPT0gc2l6ZW9mKGRhdGEpKQorCQkJCWJyZWFrOworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOworCisJCWNhc2UgUFRSQUNFX1BPS0VVU1I6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYSAqLworCQkJcmV0ID0gLUVJTzsKKwkJCWlmICgoYWRkciAmIDMpIHx8IGFkZHIgPCAwIHx8CisJCQkgICAgYWRkciA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSAzKQorCQkJCWJyZWFrOworCisJCQlhZGRyID0gYWRkciA+PiAyOyAvKiB0ZW1wb3JhcnkgaGFjay4gKi8KKworCQkJaWYgKGFkZHIgPT0gUFRfU1IpIHsKKwkJCQlkYXRhICY9IFNSX01BU0s7CisJCQkJZGF0YSA8PD0gMTY7CisJCQkJZGF0YSB8PSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgJiB+KFNSX01BU0sgPDwgMTYpOworCQkJfQorCQkJaWYgKGFkZHIgPCAxOSkgeworCQkJCWlmIChwdXRfcmVnKGNoaWxkLCBhZGRyLCBkYXRhKSkKKwkJCQkJYnJlYWs7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChhZGRyID49IDIxICYmIGFkZHIgPCA0OCkKKwkJCXsKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKKwkJCQkvKiBDb252ZXJ0IGxvbmcgZG91YmxlIGZvcm1hdAorCQkJCSAqIGludG8gaW50ZXJuYWwgZnB1IHJlZyByZXByZXNlbnRhdGlvbgorCQkJCSAqLworCQkJCWlmIChGUFVfSVNfRU1VICYmIChhZGRyIDwgNDUpICYmICEoYWRkciAlIDMpKSB7CisJCQkJCWRhdGEgPSAodW5zaWduZWQgbG9uZylkYXRhIDw8IDE1OworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmZmYwMDAwKSB8CisJCQkJCSAgICAgICAoKGRhdGEgJiAweDAwMDBmZmZmKSA+PiAxKTsKKwkJCQl9CisjZW5kaWYKKwkJCQljaGlsZC0+dGhyZWFkLmZwW2FkZHIgLSAyMV0gPSBkYXRhOworCQkJCXJldCA9IDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLworCQljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLworCQkJbG9uZyB0bXA7CisKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCQlicmVhazsKKwkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKSB7CisJCQkJCWNoaWxkLT50aHJlYWQud29yay5zeXNjYWxsX3RyYWNlID0gfjA7CisJCQl9IGVsc2UgeworCQkJCQljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IDA7CisJCQl9CisJCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuICovCisJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgJiB+KFRSQUNFX0JJVFMgPDwgMTYpOworCQkJcHV0X3JlZyhjaGlsZCwgUFRfU1IsIHRtcCk7CisJCQljaGlsZC0+dGhyZWFkLndvcmsuZGVsYXllZF90cmFjZSA9IDA7CisJCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKy8qCisgKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEgc2lna2lsbC4KKyAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KKyAqIGV4aXQuCisgKi8KKwkJY2FzZSBQVFJBQ0VfS0lMTDogeworCQkJbG9uZyB0bXA7CisKKwkJCXJldCA9IDA7CisJCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIC8qIGFscmVhZHkgZGVhZCAqLworCQkJCWJyZWFrOworCQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7CisJLyogbWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4gKi8KKwkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NSKSAmIH4oVFJBQ0VfQklUUyA8PCAxNik7CisJCQlwdXRfcmVnKGNoaWxkLCBQVF9TUiwgdG1wKTsKKwkJCWNoaWxkLT50aHJlYWQud29yay5kZWxheWVkX3RyYWNlID0gMDsKKwkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6IHsgIC8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLworCQkJbG9uZyB0bXA7CisKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCQlicmVhazsKKwkJCWNoaWxkLT50aHJlYWQud29yay5zeXNjYWxsX3RyYWNlID0gMDsKKwkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NSKSB8IChUUkFDRV9CSVRTIDw8IDE2KTsKKwkJCXB1dF9yZWcoY2hpbGQsIFBUX1NSLCB0bXApOworCQkJY2hpbGQtPnRocmVhZC53b3JrLmRlbGF5ZWRfdHJhY2UgPSAxOworCisJCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKKwkvKiBnaXZlIGl0IGEgY2hhbmNlIHRvIHJ1bi4gKi8KKwkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBUUkFDRV9ERVRBQ0g6CS8qIGRldGFjaCBhIHByb2Nlc3MgdGhhdCB3YXMgYXR0YWNoZWQuICovCisJCQlyZXQgPSBwdHJhY2VfZGV0YWNoKGNoaWxkLCBkYXRhKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFRSQUNFX0dFVFJFR1M6IHsgLyogR2V0IGFsbCBncCByZWdzIGZyb20gdGhlIGNoaWxkLiAqLworCQkJaW50IGk7CisJCQl1bnNpZ25lZCBsb25nIHRtcDsKKwkJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7CisJCQkgICAgdG1wID0gZ2V0X3JlZyhjaGlsZCwgaSk7CisJCQkgICAgaWYgKGkgPT0gUFRfU1IpCisJCQkJdG1wID4+PSAxNjsKKwkJCSAgICBpZiAocHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIGRhdGEgKz0gc2l6ZW9mKGxvbmcpOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBQVFJBQ0VfU0VUUkVHUzogeyAvKiBTZXQgYWxsIGdwIHJlZ3MgaW4gdGhlIGNoaWxkLiAqLworCQkJaW50IGk7CisJCQl1bnNpZ25lZCBsb25nIHRtcDsKKwkJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7CisJCQkgICAgaWYgKGdldF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgKikgZGF0YSkpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBpZiAoaSA9PSBQVF9TUikgeworCQkJCXRtcCAmPSBTUl9NQVNLOworCQkJCXRtcCA8PD0gMTY7CisJCQkJdG1wIHw9IGdldF9yZWcoY2hpbGQsIFBUX1NSKSAmIH4oU1JfTUFTSyA8PCAxNik7CisJCQkgICAgfQorCQkJICAgIHB1dF9yZWcoY2hpbGQsIGksIHRtcCk7CisJCQkgICAgZGF0YSArPSBzaXplb2YobG9uZyk7CisJCQl9CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBUUkFDRV9HRVRGUFJFR1M6IHsgLyogR2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCisJCQlyZXQgPSAwOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWRhdGEsICZjaGlsZC0+dGhyZWFkLmZwLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBUUkFDRV9TRVRGUFJFR1M6IHsgLyogU2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCisJCQlyZXQgPSAwOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGlsZC0+dGhyZWFkLmZwLCAodm9pZCAqKWRhdGEsCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0KSkpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJZGVmYXVsdDoKKwkJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKKwkJCWJyZWFrOworCX0KK291dF90c2s6CisJcHV0X3Rhc2tfc3RydWN0KGNoaWxkKTsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2Uodm9pZCkKK3sKKwlpZiAoIWN1cnJlbnQtPnRocmVhZC53b3JrLmRlbGF5ZWRfdHJhY2UgJiYKKwkgICAgIWN1cnJlbnQtPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UpCisJCXJldHVybjsKKwlwdHJhY2Vfbm90aWZ5KFNJR1RSQVAgfCAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkKKwkJCQkgPyAweDgwIDogMCkpOworCS8qCisJICogdGhpcyBpc24ndCB0aGUgc2FtZSBhcyBjb250aW51aW5nIHdpdGggYSBzaWduYWwsIGJ1dCBpdCB3aWxsIGRvCisJICogZm9yIG5vcm1hbCB1c2UuICBzdHJhY2Ugb25seSBjb250aW51ZXMgd2l0aCBhIHNpZ25hbCBpZiB0aGUKKwkgKiBzdG9wcGluZyBzaWduYWwgaXMgbm90IFNJR1RSQVAuICAtYnJsCisJICovCisJaWYgKGN1cnJlbnQtPmV4aXRfY29kZSkgeworCQlzZW5kX3NpZyhjdXJyZW50LT5leGl0X2NvZGUsIGN1cnJlbnQsIDEpOworCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmI3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIEdlbmVyaWMgc2VtYXBob3JlIGNvZGUuIEJ1eWVyIGJld2FyZS4gRG8geW91ciBvd24KKyAqIHNwZWNpZmljIGNoYW5nZXMgaW4gPGFzbS9zZW1hcGhvcmUtaGVscGVyLmg+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUtaGVscGVyLmg+CisKKyNpZm5kZWYgQ09ORklHX1JNV19JTlNOUworc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOworI2VuZGlmCisKKy8qCisgKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIHR3by13YXkgY291bnRlcjoKKyAqIFRoZSAiY291bnQiIHZhcmlhYmxlIGlzIGRlY3JlbWVudGVkIGZvciBlYWNoIHByb2Nlc3MKKyAqIHRoYXQgdHJpZXMgdG8gc2xlZXAsIHdoaWxlIHRoZSAid2FraW5nIiB2YXJpYWJsZSBpcworICogaW5jcmVtZW50ZWQgd2hlbiB0aGUgInVwKCkiIGNvZGUgZ29lcyB0byB3YWtlIHVwIHdhaXRpbmcKKyAqIHByb2Nlc3Nlcy4KKyAqCisgKiBOb3RhYmx5LCB0aGUgaW5saW5lICJ1cCgpIiBhbmQgImRvd24oKSIgZnVuY3Rpb25zIGNhbgorICogZWZmaWNpZW50bHkgdGVzdCBpZiB0aGV5IG5lZWQgdG8gZG8gYW55IGV4dHJhIHdvcmsgKHVwCisgKiBuZWVkcyB0byBkbyBzb21ldGhpbmcgb25seSBpZiBjb3VudCB3YXMgbmVnYXRpdmUgYmVmb3JlCisgKiB0aGUgaW5jcmVtZW50IG9wZXJhdGlvbi4KKyAqCisgKiB3YWtpbmdfbm9uX3plcm8oKSAoZnJvbSBhc20vc2VtYXBob3JlLmgpIG11c3QgZXhlY3V0ZQorICogYXRvbWljYWxseS4KKyAqCisgKiBXaGVuIF9fdXAoKSBpcyBjYWxsZWQsIHRoZSBjb3VudCB3YXMgbmVnYXRpdmUgYmVmb3JlCisgKiBpbmNyZW1lbnRpbmcgaXQsIGFuZCB3ZSBuZWVkIHRvIHdha2UgdXAgc29tZWJvZHkuCisgKgorICogVGhpcyByb3V0aW5lIGFkZHMgb25lIHRvIHRoZSBjb3VudCBvZiBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvCisgKiB3YWtlIHVwIGFuZCBleGl0LiAgQUxMIHdhaXRpbmcgcHJvY2Vzc2VzIGFjdHVhbGx5IHdha2UgdXAgYnV0CisgKiBvbmx5IHRoZSBvbmUgdGhhdCBnZXRzIHRvIHRoZSAid2FraW5nIiBmaWVsZCBmaXJzdCB3aWxsIGdhdGUKKyAqIHRocm91Z2ggYW5kIGFjcXVpcmUgdGhlIHNlbWFwaG9yZS4gIFRoZSBvdGhlcnMgd2lsbCBnbyBiYWNrCisgKiB0byBzbGVlcC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzCisgKiBjb250ZW50aW9uIG9uIHRoZSBsb2NrLCBhbmQgYXMgc3VjaCBhbGwgdGhpcyBpcyB0aGUKKyAqICJub24tY3JpdGljYWwiIHBhcnQgb2YgdGhlIHdob2xlIHNlbWFwaG9yZSBidXNpbmVzcy4gVGhlCisgKiBjcml0aWNhbCBwYXJ0IGlzIHRoZSBpbmxpbmUgc3R1ZmYgaW4gPGFzbS9zZW1hcGhvcmUuaD4KKyAqIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgYW55IGV4dHJhIGp1bXBzIGFuZCBjYWxscy4KKyAqLwordm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl3YWtlX29uZV9tb3JlKHNlbSk7CisJd2FrZV91cCgmc2VtLT53YWl0KTsKK30KKworLyoKKyAqIFBlcmZvcm0gdGhlICJkb3duIiBmdW5jdGlvbi4gIFJldHVybiB6ZXJvIGZvciBzZW1hcGhvcmUgYWNxdWlyZWQsCisgKiByZXR1cm4gbmVnYXRpdmUgZm9yIHNpZ25hbGxlZCBvdXQgb2YgdGhlIGZ1bmN0aW9uLgorICoKKyAqIElmIGNhbGxlZCBmcm9tIF9fZG93biwgdGhlIHJldHVybiBpcyBpZ25vcmVkIGFuZCB0aGUgd2FpdCBsb29wIGlzCisgKiBub3QgaW50ZXJydXB0aWJsZS4gIFRoaXMgbWVhbnMgdGhhdCBhIHRhc2sgd2FpdGluZyBvbiBhIHNlbWFwaG9yZQorICogdXNpbmcgImRvd24oKSIgY2Fubm90IGJlIGtpbGxlZCB1bnRpbCBzb21lb25lIGRvZXMgYW4gInVwKCkiIG9uCisgKiB0aGUgc2VtYXBob3JlLgorICoKKyAqIElmIGNhbGxlZCBmcm9tIF9fZG93bl9pbnRlcnJ1cHRpYmxlLCB0aGUgcmV0dXJuIHZhbHVlIGdldHMgY2hlY2tlZAorICogdXBvbiByZXR1cm4uICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIHRhc2sgY29udGludWVzCisgKiB3aXRoIHRoZSBuZWdhdGl2ZSB2YWx1ZSBpbiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChpdCBjYW4gYmUgdGVzdGVkIGJ5CisgKiB0aGUgY2FsbGVyKS4KKyAqCisgKiBFaXRoZXIgZm9ybSBtYXkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICJ1cCgpIi4KKyAqCisgKi8KKworCisjZGVmaW5lIERPV05fSEVBRCh0YXNrX3N0YXRlKQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9ICh0YXNrX3N0YXRlKTsJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7CQkJCVwKKwkJCQkJCQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIE9rLCB3ZSdyZSBzZXQgdXAuICBzZW0tPmNvdW50IGlzIGtub3duIHRvIGJlIGxlc3MgdGhhbiB6ZXJvCVwKKwkgKiBzbyB3ZSBtdXN0IHdhaXQuCQkJCQkJXAorCSAqCQkJCQkJCQlcCisJICogV2UgY2FuIGxldCBnbyB0aGUgbG9jayBmb3IgcHVycG9zZXMgb2Ygd2FpdGluZy4JCVwKKwkgKiBXZSByZS1hY3F1aXJlIGl0IGFmdGVyIGF3YWtpbmcgc28gYXMgdG8gcHJvdGVjdAkJXAorCSAqIGFsbCBzZW1hcGhvcmUgb3BlcmF0aW9ucy4JCQkJCVwKKwkgKgkJCQkJCQkJXAorCSAqIElmICJ1cCgpIiBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbGwgd2FraW5nX25vbl96ZXJvKCkgdGhlbglcCisJICogd2Ugd2lsbCBjYXRjaCBpdCByaWdodCBhd2F5LiAgSWYgaXQgaXMgY2FsbGVkIGxhdGVyIHRoZW4JXAorCSAqIHdlIHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIGEgd2FrZXVwIGN5Y2xlIHRvIGNhdGNoIGl0LglcCisJICoJCQkJCQkJCVwKKwkgKiBNdWx0aXBsZSB3YWl0ZXJzIGNvbnRlbmQgZm9yIHRoZSBzZW1hcGhvcmUgbG9jayB0byBzZWUJXAorCSAqIHdobyBnZXRzIHRvIGdhdGUgdGhyb3VnaCBhbmQgd2hvIGhhcyB0byB3YWl0IHNvbWUgbW9yZS4JXAorCSAqLwkJCQkJCQkJXAorCWZvciAoOzspIHsKKworI2RlZmluZSBET1dOX1RBSUwodGFza19zdGF0ZSkJCQlcCisJCWN1cnJlbnQtPnN0YXRlID0gKHRhc2tfc3RhdGUpOwlcCisJfQkJCQkJXAorCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwkJXAorCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKKwordm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJRE9XTl9IRUFEKFRBU0tfVU5JTlRFUlJVUFRJQkxFKQorCWlmICh3YWtpbmdfbm9uX3plcm8oc2VtKSkKKwkJYnJlYWs7CisJc2NoZWR1bGUoKTsKKwlET1dOX1RBSUwoVEFTS19VTklOVEVSUlVQVElCTEUpCit9CisKK2ludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJaW50IHJldCA9IDA7CisKKwlET1dOX0hFQUQoVEFTS19JTlRFUlJVUFRJQkxFKQorCisJcmV0ID0gd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc2VtLCBjdXJyZW50KTsKKwlpZiAocmV0KQorCXsKKwkJaWYgKHJldCA9PSAxKQorCQkJLyogcmV0ICE9IDAgb25seSBpZiB3ZSBnZXQgaW50ZXJydXB0ZWQgLWFyY2EgKi8KKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKwlzY2hlZHVsZSgpOworCURPV05fVEFJTChUQVNLX0lOVEVSUlVQVElCTEUpCisJcmV0dXJuIHJldDsKK30KKworaW50IF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCit7CisJcmV0dXJuIHdha2luZ19ub25femVyb190cnlsb2NrKHNlbSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3NldHVwLmMgYi9hcmNoL202OGsva2VybmVsL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjYTk5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYwpAQCAtMCwwICsxLDU0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsva2VybmVsL3NldHVwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHN5c3RlbSBzZXR1cAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaWZkZWYgQ09ORklHX0FNSUdBCisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BVEFSSQorI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1VOM1gKKyNpbmNsdWRlIDxhc20vZHZtYS5oPgorI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgbTY4a19tYWNodHlwZTsKK3Vuc2lnbmVkIGxvbmcgbTY4a19jcHV0eXBlOwordW5zaWduZWQgbG9uZyBtNjhrX2ZwdXR5cGU7Cit1bnNpZ25lZCBsb25nIG02OGtfbW11dHlwZTsKKyNpZmRlZiBDT05GSUdfVk1FCit1bnNpZ25lZCBsb25nIHZtZV9icmR0eXBlOworI2VuZGlmCisKK2ludCBtNjhrX2lzMDQwb3IwNjA7CisKK2V4dGVybiBpbnQgZW5kOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXZhaWxtZW07CisKK2ludCBtNjhrX251bV9tZW1vcnk7CitpbnQgbTY4a19yZWFsbnVtX21lbW9yeTsKK3Vuc2lnbmVkIGxvbmcgbTY4a19tZW1vZmZzZXQ7CitzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOworCitzdGF0aWMgc3RydWN0IG1lbV9pbmZvIG02OGtfcmFtZGlzazsKKworc3RhdGljIGNoYXIgbTY4a19jb21tYW5kX2xpbmVbQ0xfU0laRV07CisKK2NoYXIgbTY4a19kZWJ1Z19kZXZpY2VbNl0gPSAiIjsKKwordm9pZCAoKm1hY2hfc2NoZWRfaW5pdCkgKGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKSBfX2luaXRkYXRhID0gTlVMTDsKKy8qIG1hY2hpbmUgZGVwZW5kZW50IGlycSBmdW5jdGlvbnMgKi8KK3ZvaWQgKCptYWNoX2luaXRfSVJRKSAodm9pZCkgX19pbml0ZGF0YSA9IE5VTEw7CitpcnFyZXR1cm5fdCAoKigqbWFjaF9kZWZhdWx0X2hhbmRsZXIpW10pIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Cit2b2lkICgqbWFjaF9nZXRfbW9kZWwpIChjaGFyICptb2RlbCk7CitpbnQgKCptYWNoX2dldF9oYXJkd2FyZV9saXN0KSAoY2hhciAqYnVmZmVyKTsKK2ludCAoKm1hY2hfZ2V0X2lycV9saXN0KSAoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitpcnFyZXR1cm5fdCAoKm1hY2hfcHJvY2Vzc19pbnQpIChpbnQsIHN0cnVjdCBwdF9yZWdzICopOworLyogbWFjaGluZSBkZXBlbmRlbnQgdGltZXIgZnVuY3Rpb25zICovCit1bnNpZ25lZCBsb25nICgqbWFjaF9nZXR0aW1lb2Zmc2V0KSAodm9pZCk7CitpbnQgKCptYWNoX2h3Y2xrKSAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUqKTsKK2ludCAoKm1hY2hfc2V0X2Nsb2NrX21tc3MpICh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGludCAoKm1hY2hfZ2V0X3NzKSh2b2lkKTsKK2ludCAoKm1hY2hfZ2V0X3J0Y19wbGwpKHN0cnVjdCBydGNfcGxsX2luZm8gKik7CitpbnQgKCptYWNoX3NldF9ydGNfcGxsKShzdHJ1Y3QgcnRjX3BsbF9pbmZvICopOwordm9pZCAoKm1hY2hfcmVzZXQpKCB2b2lkICk7Cit2b2lkICgqbWFjaF9oYWx0KSggdm9pZCApOwordm9pZCAoKm1hY2hfcG93ZXJfb2ZmKSggdm9pZCApOworbG9uZyBtYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4MDBmZmZmZmY7IC8qIGRlZmF1bHQgc2V0IHRvIHRoZSBsb3dlciAxNk1CICovCisjaWYgZGVmaW5lZChDT05GSUdfQU1JR0FfRkxPUFBZKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSV9GTE9QUFkpCit2b2lkICgqbWFjaF9mbG9wcHlfc2V0dXApIChjaGFyICosIGludCAqKSBfX2luaXRkYXRhID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3ZvaWQgKCptYWNoX2hlYXJ0YmVhdCkgKGludCk7CitFWFBPUlRfU1lNQk9MKG1hY2hfaGVhcnRiZWF0KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NNjhLX0wyX0NBQ0hFCit2b2lkICgqbWFjaF9sMl9mbHVzaCkgKGludCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVApIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUpCit2b2lkICgqbWFjaF9iZWVwKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JU0EpICYmIGRlZmluZWQoTVVMVElfSVNBKQoraW50IGlzYV90eXBlOworaW50IGlzYV9zZXg7CisjZW5kaWYKKworZXh0ZXJuIGludCBhbWlnYV9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworZXh0ZXJuIGludCBhdGFyaV9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworZXh0ZXJuIGludCBtYWNfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKK2V4dGVybiBpbnQgcTQwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CitleHRlcm4gaW50IGJ2bWU2MDAwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CitleHRlcm4gaW50IG12bWUxNnhfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKK2V4dGVybiBpbnQgbXZtZTE0N19wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworZXh0ZXJuIGludCBocDMwMF9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworCitleHRlcm4gdm9pZCBjb25maWdfYW1pZ2Eodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfYXRhcmkodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfbWFjKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX3N1bjModm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfYXBvbGxvKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX212bWUxNDcodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfbXZtZTE2eCh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ19idm1lNjAwMCh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ19ocDMwMCh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ19xNDAodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfc3VuM3godm9pZCk7CisKK2V4dGVybiB2b2lkIG1hY19kZWJ1Z2dpbmdfc2hvcnQgKGludCwgc2hvcnQpOworZXh0ZXJuIHZvaWQgbWFjX2RlYnVnZ2luZ19sb25nICAoaW50LCBsb25nKTsKKworI2RlZmluZSBNQVNLXzI1NksgMHhmZmZjMDAwMAorCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IG02OGtfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjb3JkKQoreworICAgIHdoaWxlIChyZWNvcmQtPnRhZyAhPSBCSV9MQVNUKSB7CisJaW50IHVua25vd24gPSAwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmRhdGEgPSByZWNvcmQtPmRhdGE7CisJc3dpdGNoIChyZWNvcmQtPnRhZykgeworCSAgICBjYXNlIEJJX01BQ0hUWVBFOgorCSAgICBjYXNlIEJJX0NQVVRZUEU6CisJICAgIGNhc2UgQklfRlBVVFlQRToKKwkgICAgY2FzZSBCSV9NTVVUWVBFOgorCQkvKiBBbHJlYWR5IHNldCB1cCBieSBoZWFkLlMgKi8KKwkJYnJlYWs7CisKKwkgICAgY2FzZSBCSV9NRU1DSFVOSzoKKwkJaWYgKG02OGtfbnVtX21lbW9yeSA8IE5VTV9NRU1JTkZPKSB7CisJCSAgICBtNjhrX21lbW9yeVttNjhrX251bV9tZW1vcnldLmFkZHIgPSBkYXRhWzBdOworCQkgICAgbTY4a19tZW1vcnlbbTY4a19udW1fbWVtb3J5XS5zaXplID0gZGF0YVsxXTsKKwkJICAgIG02OGtfbnVtX21lbW9yeSsrOworCQl9IGVsc2UKKwkJICAgIHByaW50aygibTY4a19wYXJzZV9ib290aW5mbzogdG9vIG1hbnkgbWVtb3J5IGNodW5rc1xuIik7CisJCWJyZWFrOworCisJICAgIGNhc2UgQklfUkFNRElTSzoKKwkJbTY4a19yYW1kaXNrLmFkZHIgPSBkYXRhWzBdOworCQltNjhrX3JhbWRpc2suc2l6ZSA9IGRhdGFbMV07CisJCWJyZWFrOworCisJICAgIGNhc2UgQklfQ09NTUFORF9MSU5FOgorCQlzdHJsY3B5KG02OGtfY29tbWFuZF9saW5lLCAoY29uc3QgY2hhciAqKWRhdGEsIHNpemVvZihtNjhrX2NvbW1hbmRfbGluZSkpOworCQlicmVhazsKKworCSAgICBkZWZhdWx0OgorCQlpZiAoTUFDSF9JU19BTUlHQSkKKwkJICAgIHVua25vd24gPSBhbWlnYV9wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX0FUQVJJKQorCQkgICAgdW5rbm93biA9IGF0YXJpX3BhcnNlX2Jvb3RpbmZvKHJlY29yZCk7CisJCWVsc2UgaWYgKE1BQ0hfSVNfTUFDKQorCQkgICAgdW5rbm93biA9IG1hY19wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX1E0MCkKKwkJICAgIHVua25vd24gPSBxNDBfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19CVk1FNjAwMCkKKwkJICAgIHVua25vd24gPSBidm1lNjAwMF9wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX01WTUUxNngpCisJCSAgICB1bmtub3duID0gbXZtZTE2eF9wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX01WTUUxNDcpCisJCSAgICB1bmtub3duID0gbXZtZTE0N19wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX0hQMzAwKQorCQkgICAgdW5rbm93biA9IGhwMzAwX3BhcnNlX2Jvb3RpbmZvKHJlY29yZCk7CisJCWVsc2UKKwkJICAgIHVua25vd24gPSAxOworCX0KKwlpZiAodW5rbm93bikKKwkgICAgcHJpbnRrKCJtNjhrX3BhcnNlX2Jvb3RpbmZvOiB1bmtub3duIHRhZyAweCUwNHggaWdub3JlZFxuIiwKKwkJICAgcmVjb3JkLT50YWcpOworCXJlY29yZCA9IChzdHJ1Y3QgYmlfcmVjb3JkICopKCh1bnNpZ25lZCBsb25nKXJlY29yZCtyZWNvcmQtPnNpemUpOworICAgIH0KKworICAgIG02OGtfcmVhbG51bV9tZW1vcnkgPSBtNjhrX251bV9tZW1vcnk7CisjaWZkZWYgQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksKKyAgICBpZiAobTY4a19udW1fbWVtb3J5ID4gMSkgeworCXByaW50aygiSWdub3JpbmcgbGFzdCAlaSBjaHVua3Mgb2YgcGh5c2ljYWwgbWVtb3J5XG4iLAorCSAgICAgICAobTY4a19udW1fbWVtb3J5IC0gMSkpOworCW02OGtfbnVtX21lbW9yeSA9IDE7CisgICAgfQorICAgIG02OGtfbWVtb2Zmc2V0ID0gbTY4a19tZW1vcnlbMF0uYWRkci1QQUdFX09GRlNFVDsKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCit7CisJZXh0ZXJuIGludCBfZXRleHQsIF9lZGF0YSwgX2VuZDsKKyNpZm5kZWYgQ09ORklHX1NVTjMKKwl1bnNpZ25lZCBsb25nIGVuZG1lbSwgc3RhcnRtZW07CisjZW5kaWYKKwlpbnQgaTsKKwljaGFyICpwLCAqcTsKKworCS8qIFRoZSBib290aW5mbyBpcyBsb2NhdGVkIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYnNzICovCisJbTY4a19wYXJzZV9ib290aW5mbygoY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKSZfZW5kKTsKKworCWlmIChDUFVfSVNfMDQwKQorCQltNjhrX2lzMDQwb3IwNjAgPSA0OworCWVsc2UgaWYgKENQVV9JU18wNjApCisJCW02OGtfaXMwNDBvcjA2MCA9IDY7CisKKwkvKiBGSVhNRTogbTY4a19mcHV0eXBlIGlzIHBhc3NlZCBpbiBieSBQZW5ndWluIGJvb3Rlciwgd2hpY2ggY2FuCisJICogYmUgY29uZnVzZWQgYnkgc29mdHdhcmUgRlBVIGVtdWxhdGlvbi4gQkVXQVJFLgorCSAqIFdlIHNob3VsZCByZWFsbHkgZG8gb3VyIG93biBGUFUgY2hlY2sgYXQgc3RhcnR1cC4KKwkgKiBbd2hhdCBkbyB3ZSBkbyB3aXRoIGJ1Z2d5IDY4TEMwNDBzPyBpZiB3ZSBoYXZlIHByb2JsZW1zCisJICogIHdpdGggdGhlbSwgd2Ugc2hvdWxkIGFkZCBhIHRlc3QgdG8gY2hlY2tfYnVncygpIGJlbG93XSAqLworI2lmbmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWQorCS8qIGNsZWFyIHRoZSBmcHUgaWYgd2UgaGF2ZSBvbmUgKi8KKwlpZiAobTY4a19mcHV0eXBlICYgKEZQVV82ODg4MXxGUFVfNjg4ODJ8RlBVXzY4MDQwfEZQVV82ODA2MCkpIHsKKwkJdm9sYXRpbGUgaW50IHplcm8gPSAwOworCQlhc20gX192b2xhdGlsZV9fICgiZnJlc3RvcmUgJTAiIDogOiAibSIgKHplcm8pKTsKKwl9CisjZW5kaWYKKworCWlmIChDUFVfSVNfMDYwKSB7CisJCXUzMiBwY3I7CisKKwkJYXNtICgiLmNoaXAgNjgwNjA7IG1vdmVjICUlcGNyLCUwOyAuY2hpcCA2OGsiCisJCSAgICAgOiAiPWQiIChwY3IpKTsKKwkJaWYgKCgocGNyID4+IDgpICYgMHhmZikgPD0gNSkgeworCQkJcHJpbnRrKCJFbmFibGluZyB3b3JrYXJvdW5kIGZvciBlcnJhdGEgSTE0XG4iKTsKKwkJCWFzbSAoIi5jaGlwIDY4MDYwOyBtb3ZlYyAlMCwlJXBjcjsgLmNoaXAgNjhrIgorCQkJICAgICA6IDogImQiIChwY3IgfCAweDIwKSk7CisJCX0KKwl9CisKKwlpbml0X21tLnN0YXJ0X2NvZGUgPSBQQUdFX09GRlNFVDsKKwlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CisJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhOworCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOworCisJKmNtZGxpbmVfcCA9IG02OGtfY29tbWFuZF9saW5lOworCW1lbWNweShzYXZlZF9jb21tYW5kX2xpbmUsICpjbWRsaW5lX3AsIENMX1NJWkUpOworCisJLyogUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBmb3IgYXJjaC1zcGVjaWZpYyBvcHRpb25zLgorCSAqIEZvciB0aGUgbTY4aywgdGhpcyBpcyBjdXJyZW50bHkgb25seSAiZGVidWc9eHh4IiB0byBlbmFibGUgcHJpbnRpbmcKKwkgKiBjZXJ0YWluIGtlcm5lbCBtZXNzYWdlcyB0byBzb21lIG1hY2hpbmUtc3BlY2lmaWMgZGV2aWNlLgorCSAqLworCWZvciggcCA9ICpjbWRsaW5lX3A7IHAgJiYgKnA7ICkgeworCSAgICBpID0gMDsKKwkgICAgaWYgKCFzdHJuY21wKCBwLCAiZGVidWc9IiwgNiApKSB7CisJCXN0cmxjcHkoIG02OGtfZGVidWdfZGV2aWNlLCBwKzYsIHNpemVvZihtNjhrX2RlYnVnX2RldmljZSkgKTsKKwkJaWYgKChxID0gc3RyY2hyKCBtNjhrX2RlYnVnX2RldmljZSwgJyAnICkpKSAqcSA9IDA7CisJCWkgPSAxOworCSAgICB9CisjaWZkZWYgQ09ORklHX0FUQVJJCisJICAgIC8qIFRoaXMgb3B0aW9uIG11c3QgYmUgcGFyc2VkIHZlcnkgZWFybHkgKi8KKwkgICAgaWYgKCFzdHJuY21wKCBwLCAic3dpdGNoZXM9IiwgOSApKSB7CisJCWV4dGVybiB2b2lkIGF0YXJpX3N3aXRjaGVzX3NldHVwKCBjb25zdCBjaGFyICosIGludCApOworCQlhdGFyaV9zd2l0Y2hlc19zZXR1cCggcCs5LCAocSA9IHN0cmNociggcCs5LCAnICcgKSkgPworCQkJCSAgICAgICAgICAgKHEgLSAocCs5KSkgOiBzdHJsZW4ocCs5KSApOworCQlpID0gMTsKKwkgICAgfQorI2VuZGlmCisKKwkgICAgaWYgKGkpIHsKKwkJLyogb3B0aW9uIHByb2Nlc3NlZCwgZGVsZXRlIGl0ICovCisJCWlmICgocSA9IHN0cmNociggcCwgJyAnICkpKQorCQkgICAgc3RyY3B5KCBwLCBxKzEgKTsKKwkJZWxzZQorCQkgICAgKnAgPSAwOworCSAgICB9IGVsc2UgeworCQlpZiAoKHAgPSBzdHJjaHIoIHAsICcgJyApKSkgKytwOworCSAgICB9CisJfQorCisJc3dpdGNoIChtNjhrX21hY2h0eXBlKSB7CisjaWZkZWYgQ09ORklHX0FNSUdBCisJICAgIGNhc2UgTUFDSF9BTUlHQToKKwkJY29uZmlnX2FtaWdhKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FUQVJJCisJICAgIGNhc2UgTUFDSF9BVEFSSToKKwkJY29uZmlnX2F0YXJpKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQworCSAgICBjYXNlIE1BQ0hfTUFDOgorCQljb25maWdfbWFjKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NVTjMKKwkgICAgY2FzZSBNQUNIX1NVTjM6CisJCWNvbmZpZ19zdW4zKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQT0xMTworCSAgICBjYXNlIE1BQ0hfQVBPTExPOgorCQljb25maWdfYXBvbGxvKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01WTUUxNDcKKwkgICAgY2FzZSBNQUNIX01WTUUxNDc6CisJCWNvbmZpZ19tdm1lMTQ3KCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01WTUUxNngKKwkgICAgY2FzZSBNQUNIX01WTUUxNng6CisJCWNvbmZpZ19tdm1lMTZ4KCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0JWTUU2MDAwCisJICAgIGNhc2UgTUFDSF9CVk1FNjAwMDoKKwkJY29uZmlnX2J2bWU2MDAwKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hQMzAwCisJICAgIGNhc2UgTUFDSF9IUDMwMDoKKwkJY29uZmlnX2hwMzAwKCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1E0MAorCSAgICBjYXNlIE1BQ0hfUTQwOgorCSAgICAgICAgY29uZmlnX3E0MCgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TVU4zWAorCSAgICBjYXNlIE1BQ0hfU1VOM1g6CisJCWNvbmZpZ19zdW4zeCgpOworCQlicmVhazsKKyNlbmRpZgorCSAgICBkZWZhdWx0OgorCQlwYW5pYyAoIk5vIGNvbmZpZ3VyYXRpb24gc2V0dXAiKTsKKwl9CisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKwlzdGFydG1lbT0gbTY4a19tZW1vcnlbMF0uYWRkcjsKKwllbmRtZW0gPSBzdGFydG1lbSArIG02OGtfbWVtb3J5WzBdLnNpemU7CisJaGlnaF9tZW1vcnkgPSAodm9pZCAqKVBBR0VfT0ZGU0VUOworCWZvciAoaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykgeworCQltNjhrX21lbW9yeVtpXS5zaXplICY9IE1BU0tfMjU2SzsKKwkJaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIgPCBzdGFydG1lbSkKKwkJCXN0YXJ0bWVtID0gbTY4a19tZW1vcnlbaV0uYWRkcjsKKwkJaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIrbTY4a19tZW1vcnlbaV0uc2l6ZSA+IGVuZG1lbSkKKwkJCWVuZG1lbSA9IG02OGtfbWVtb3J5W2ldLmFkZHIrbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwkJaGlnaF9tZW1vcnkgKz0gbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwl9CisKKwlhdmFpbG1lbSArPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGF2YWlsbWVtID4+IFBBR0VfU0hJRlQsCisJCQkJICAgICAgc3RhcnRtZW0gPj4gUEFHRV9TSElGVCwgZW5kbWVtID4+IFBBR0VfU0hJRlQpOworCisJZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKQorCQlmcmVlX2Jvb3RtZW0obTY4a19tZW1vcnlbaV0uYWRkciwgbTY4a19tZW1vcnlbaV0uc2l6ZSk7CisKKwlyZXNlcnZlX2Jvb3RtZW0obTY4a19tZW1vcnlbMF0uYWRkciwgYXZhaWxtZW0gLSBtNjhrX21lbW9yeVswXS5hZGRyKTsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChtNjhrX3JhbWRpc2suc2l6ZSkgeworCQlyZXNlcnZlX2Jvb3RtZW0obTY4a19yYW1kaXNrLmFkZHIsIG02OGtfcmFtZGlzay5zaXplKTsKKwkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KG02OGtfcmFtZGlzay5hZGRyKTsKKwkJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCArIG02OGtfcmFtZGlzay5zaXplOworCQlwcmludGsgKCJpbml0cmQ6ICUwOGx4IC0gJTA4bHhcbiIsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKwlpZiAoTUFDSF9JU19BVEFSSSkKKwkJYXRhcmlfc3RyYW1fcmVzZXJ2ZV9wYWdlcygodm9pZCAqKWF2YWlsbWVtKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TVU4zWAorCWlmIChNQUNIX0lTX1NVTjNYKSB7CisJCWR2bWFfaW5pdCgpOworCX0KKyNlbmRpZgorCisjZW5kaWYgLyogIUNPTkZJR19TVU4zICovCisKKwlwYWdpbmdfaW5pdCgpOworCisvKiBzZXQgSVNBIGRlZnMgZWFybHkgYXMgcG9zc2libGUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JU0EpICYmIGRlZmluZWQoTVVMVElfSVNBKQorI2lmIGRlZmluZWQoQ09ORklHX1E0MCkKKwlpZiAoTUFDSF9JU19RNDApIHsKKwkgICAgaXNhX3R5cGUgPSBRNDBfSVNBOworCSAgICBpc2Ffc2V4ID0gMDsKKwl9CisjZWxpZiBkZWZpbmVkKENPTkZJR19HRzIpCisJaWYgKE1BQ0hfSVNfQU1JR0EgJiYgQU1JR0FIV19QUkVTRU5UKEdHMl9JU0EpKXsKKwkgICAgaXNhX3R5cGUgPSBHRzJfSVNBOworCSAgICBpc2Ffc2V4ID0gMDsKKwl9CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQV9QQ01DSUEpCisJaWYgKE1BQ0hfSVNfQU1JR0EgJiYgQU1JR0FIV19QUkVTRU5UKFBDTUNJQSkpeworCSAgICBpc2FfdHlwZSA9IEFHX0lTQTsKKwkgICAgaXNhX3NleCA9IDE7CisJfQorI2VuZGlmCisjZW5kaWYKK30KKworc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworICAgIGNvbnN0IGNoYXIgKmNwdSwgKm1tdSwgKmZwdTsKKyAgICB1bnNpZ25lZCBsb25nIGNsb2NrZnJlcSwgY2xvY2tmYWN0b3I7CisKKyNkZWZpbmUgTE9PUF9DWUNMRVNfNjgwMjAJKDgpCisjZGVmaW5lIExPT1BfQ1lDTEVTXzY4MDMwCSg4KQorI2RlZmluZSBMT09QX0NZQ0xFU182ODA0MAkoMykKKyNkZWZpbmUgTE9PUF9DWUNMRVNfNjgwNjAJKDEpCisKKyAgICBpZiAoQ1BVX0lTXzAyMCkgeworCWNwdSA9ICI2ODAyMCI7CisJY2xvY2tmYWN0b3IgPSBMT09QX0NZQ0xFU182ODAyMDsKKyAgICB9IGVsc2UgaWYgKENQVV9JU18wMzApIHsKKwljcHUgPSAiNjgwMzAiOworCWNsb2NrZmFjdG9yID0gTE9PUF9DWUNMRVNfNjgwMzA7CisgICAgfSBlbHNlIGlmIChDUFVfSVNfMDQwKSB7CisJY3B1ID0gIjY4MDQwIjsKKwljbG9ja2ZhY3RvciA9IExPT1BfQ1lDTEVTXzY4MDQwOworICAgIH0gZWxzZSBpZiAoQ1BVX0lTXzA2MCkgeworCWNwdSA9ICI2ODA2MCI7CisJY2xvY2tmYWN0b3IgPSBMT09QX0NZQ0xFU182ODA2MDsKKyAgICB9IGVsc2UgeworCWNwdSA9ICI2ODB4MCI7CisJY2xvY2tmYWN0b3IgPSAwOworICAgIH0KKworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZCisgICAgZnB1PSJub25lKHNvZnQgZmxvYXQpIjsKKyNlbHNlCisgICAgaWYgKG02OGtfZnB1dHlwZSAmIEZQVV82ODg4MSkKKwlmcHUgPSAiNjg4ODEiOworICAgIGVsc2UgaWYgKG02OGtfZnB1dHlwZSAmIEZQVV82ODg4MikKKwlmcHUgPSAiNjg4ODIiOworICAgIGVsc2UgaWYgKG02OGtfZnB1dHlwZSAmIEZQVV82ODA0MCkKKwlmcHUgPSAiNjgwNDAiOworICAgIGVsc2UgaWYgKG02OGtfZnB1dHlwZSAmIEZQVV82ODA2MCkKKwlmcHUgPSAiNjgwNjAiOworICAgIGVsc2UgaWYgKG02OGtfZnB1dHlwZSAmIEZQVV9TVU5GUEEpCisJZnB1ID0gIlN1biBGUEEiOworICAgIGVsc2UKKwlmcHUgPSAibm9uZSI7CisjZW5kaWYKKworICAgIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfNjg4NTEpCisJbW11ID0gIjY4ODUxIjsKKyAgICBlbHNlIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwMzApCisJbW11ID0gIjY4MDMwIjsKKyAgICBlbHNlIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNDApCisJbW11ID0gIjY4MDQwIjsKKyAgICBlbHNlIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNjApCisJbW11ID0gIjY4MDYwIjsKKyAgICBlbHNlIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfU1VOMykKKwltbXUgPSAiU3VuLTMiOworICAgIGVsc2UgaWYgKG02OGtfbW11dHlwZSAmIE1NVV9BUE9MTE8pCisJbW11ID0gIkFwb2xsbyI7CisgICAgZWxzZQorCW1tdSA9ICJ1bmtub3duIjsKKworICAgIGNsb2NrZnJlcSA9IGxvb3BzX3Blcl9qaWZmeSpIWipjbG9ja2ZhY3RvcjsKKworICAgIHNlcV9wcmludGYobSwgIkNQVTpcdFx0JXNcbiIKKwkJICAgIk1NVTpcdFx0JXNcbiIKKwkJICAgIkZQVTpcdFx0JXNcbiIKKwkJICAgIkNsb2NraW5nOlx0JWx1LiUxbHVNSHpcbiIKKwkJICAgIkJvZ29NaXBzOlx0JWx1LiUwMmx1XG4iCisJCSAgICJDYWxpYnJhdGlvbjpcdCVsdSBsb29wc1xuIiwKKwkJICAgY3B1LCBtbXUsIGZwdSwKKwkJICAgY2xvY2tmcmVxLzEwMDAwMDAsKGNsb2NrZnJlcS8xMDAwMDApJTEwLAorCQkgICBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCwKKwkJICAgbG9vcHNfcGVyX2ppZmZ5KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gKnBvcyA8IDEgPyAodm9pZCAqKTEgOiBOVUxMOworfQorc3RhdGljIHZvaWQgKmNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSsrKnBvczsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKKwkuc3RhcnQgPQljX3N0YXJ0LAorCS5uZXh0ID0JCWNfbmV4dCwKKwkuc3RvcCA9CQljX3N0b3AsCisJLnNob3cgPQkJc2hvd19jcHVpbmZvLAorfTsKKworaW50IGdldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBpbnQgbGVuID0gMDsKKyAgICBjaGFyIG1vZGVsWzgwXTsKKyAgICB1bnNpZ25lZCBsb25nIG1lbTsKKyAgICBpbnQgaTsKKworICAgIGlmIChtYWNoX2dldF9tb2RlbCkKKwltYWNoX2dldF9tb2RlbChtb2RlbCk7CisgICAgZWxzZQorCXN0cmNweShtb2RlbCwgIlVua25vd24gbTY4ayIpOworCisgICAgbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwgIk1vZGVsOlx0XHQlc1xuIiwgbW9kZWwpOworICAgIGZvciAobWVtID0gMCwgaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykKKwltZW0gKz0gbTY4a19tZW1vcnlbaV0uc2l6ZTsKKyAgICBsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCAiU3lzdGVtIE1lbW9yeTpcdCVsZEtcbiIsIG1lbT4+MTApOworCisgICAgaWYgKG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QpCisJbGVuICs9IG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QoYnVmZmVyK2xlbik7CisKKyAgICByZXR1cm4obGVuKTsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfQU1JR0FfRkxPUFBZKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSV9GTE9QUFkpCit2b2lkIF9faW5pdCBmbG9wcHlfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCit7CisJaWYgKG1hY2hfZmxvcHB5X3NldHVwKQorCQltYWNoX2Zsb3BweV9zZXR1cCAoc3RyLCBpbnRzKTsKK30KKworI2VuZGlmCisKK3ZvaWQgY2hlY2tfYnVncyh2b2lkKQoreworI2lmbmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKKwlpZiAobTY4a19mcHV0eXBlID09IDApIHsKKwkJcHJpbnRrKCBLRVJOX0VNRVJHICIqKiogWU9VIERPIE5PVCBIQVZFIEEgRkxPQVRJTkcgUE9JTlQgVU5JVCwgIgorCQkJCSJXSElDSCBJUyBSRVFVSVJFRCBCWSBMSU5VWC9NNjhLICoqKlxuIiApOworCQlwcmludGsoIEtFUk5fRU1FUkcgIlVwZ3JhZGUgeW91ciBoYXJkd2FyZSBvciBqb2luIHRoZSBGUFUgIgorCQkJCSJlbXVsYXRpb24gcHJvamVjdFxuIiApOworCQlwYW5pYyggIm5vIEZQVSIgKTsKKwl9CisjZW5kaWYgLyogIUNPTkZJR19NNjhLRlBVX0VNVSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2MzZhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKQEAgLTAsMCArMSwxMDI1IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogTGludXgvbTY4ayBzdXBwb3J0IGJ5IEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiA2ODA2MCBmaXhlcyBieSBKZXNwZXIgU2tvdgorICoKKyAqIDE5OTctMTItMDEgIE1vZGlmaWVkIGZvciBQT1NJWC4xYiBzaWduYWxzIGJ5IEFuZHJlYXMgU2Nod2FiCisgKgorICogbWF0aGVtdSBzdXBwb3J0IGJ5IFJvbWFuIFppcHBlbAorICogIChOb3RlOiBmcHN0YXRlIGluIHRoZSBzaWduYWwgY29udGV4dCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgZm9yIHRoZSBlbXVsYXRvcgorICogICAgICAgICBhbmQgdGhlIGludGVybmFsIGZsb2F0aW5nIHBvaW50IGZvcm1hdCBpcyBwdXQgb24gc3RhY2spCisgKi8KKworLyoKKyAqICsrcm9tYW4gKDA3LzA5Lzk2KTogaW1wbGVtZW50ZWQgc2lnbmFsIHN0YWNrcyAoc3BlY2lhbGx5IGZvciB0b3NlbXUgb24KKyAqIEF0YXJpIDotKSBDdXJyZW50IGxpbWl0YXRpb246IE9ubHkgb25lIHNpZ3N0YWNrIGNhbiBiZSBhY3RpdmUgYXQgb25lIHRpbWUuCisgKiBJZiBhIHNlY29uZCBzaWduYWwgd2l0aCBTQV9PTlNUQUNLIHNldCBhcnJpdmVzIHdoaWxlIHdvcmtpbmcgb24gYSBzaWdzdGFjaywKKyAqIFNBX09OU1RBQ0sgaXMgaWdub3JlZC4gVGhpcyBiZWhhdmlvdXIgYXZvaWRzIGxvdHMgb2YgdHJvdWJsZSB3aXRoIG5lc3RlZAorICogc2lnbmFsIGhhbmRsZXJzIQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CisKKyNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCisKK2FzbWxpbmthZ2UgaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2NvbnN0IGludCBmcmFtZV9leHRyYV9zaXplc1sxNl0gPSB7CisgIFsxXQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10MSksICovCisgIFsyXQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXQyKSwKKyAgWzNdCT0gc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDMpLAorICBbNF0JPSBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10NCksCisgIFs1XQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10NSksICovCisgIFs2XQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10NiksICovCisgIFs3XQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXQ3KSwKKyAgWzhdCT0gLTEsIC8qIHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXQ4KSwgKi8KKyAgWzldCT0gc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDkpLAorICBbMTBdCT0gc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdGEpLAorICBbMTFdCT0gc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdGIpLAorICBbMTJdCT0gLTEsIC8qIHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXRjKSwgKi8KKyAgWzEzXQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10ZCksICovCisgIFsxNF0JPSAtMSwgLyogc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdGUpLCAqLworICBbMTVdCT0gLTEsIC8qIHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXRmKSwgKi8KK307CisKKy8qCisgKiBBdG9taWNhbGx5IHN3YXAgaW4gdGhlIG5ldyBzaWduYWwgbWFzaywgYW5kIHdhaXQgZm9yIGEgc2lnbmFsLgorICovCithc21saW5rYWdlIGludCBkb19zaWdzdXNwZW5kKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCW9sZF9zaWdzZXRfdCBtYXNrID0gcmVncy0+ZDM7CisJc2lnc2V0X3Qgc2F2ZXNldDsKKworCW1hc2sgJj0gX0JMT0NLQUJMRTsKKwlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwlzaWdpbml0c2V0KCZjdXJyZW50LT5ibG9ja2VkLCBtYXNrKTsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCisJcmVncy0+ZDAgPSAtRUlOVFI7CisJd2hpbGUgKDEpIHsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlKCk7CisJCWlmIChkb19zaWduYWwoJnNhdmVzZXQsIHJlZ3MpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwl9Cit9CisKK2FzbWxpbmthZ2UgaW50Citkb19ydF9zaWdzdXNwZW5kKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNpZ3NldF90ICp1bmV3c2V0ID0gKHNpZ3NldF90ICopcmVncy0+ZDE7CisJc2l6ZV90IHNpZ3NldHNpemUgPSAoc2l6ZV90KXJlZ3MtPmQyOworCXNpZ3NldF90IHNhdmVzZXQsIG5ld3NldDsKKworCS8qIFhYWDogRG9uJ3QgcHJlY2x1ZGUgaGFuZGxpbmcgZGlmZmVyZW50IHNpemVkIHNpZ3NldF90J3MuICAqLworCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdzZXQsIHVuZXdzZXQsIHNpemVvZihuZXdzZXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc2lnZGVsc2V0bWFzaygmbmV3c2V0LCB+X0JMT0NLQUJMRSk7CisKKwlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwljdXJyZW50LT5ibG9ja2VkID0gbmV3c2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisKKwlyZWdzLT5kMCA9IC1FSU5UUjsKKwl3aGlsZSAoMSkgeworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGUoKTsKKwkJaWYgKGRvX3NpZ25hbCgmc2F2ZXNldCwgcmVncykpCisJCQlyZXR1cm4gLUVJTlRSOworCX0KK30KKworYXNtbGlua2FnZSBpbnQKK3N5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gKmFjdCwKKwkgICAgICBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiAqb2FjdCkKK3sKKwlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7CisJaW50IHJldDsKKworCWlmIChhY3QpIHsKKwkJb2xkX3NpZ3NldF90IG1hc2s7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpIHx8CisJCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCV9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7CisJCV9fZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7CisJCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKKwl9CisKKwlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKKworCWlmICghcmV0ICYmIG9hY3QpIHsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvYWN0LCBzaXplb2YoKm9hY3QpKSB8fAorCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfaGFuZGxlciwgJm9hY3QtPnNhX2hhbmRsZXIpIHx8CisJCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKKwkJX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfbWFzay5zaWdbMF0sICZvYWN0LT5zYV9tYXNrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIGludAorc3lzX3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgKnVzcywgc3RhY2tfdCAqdW9zcykKK3sKKwlyZXR1cm4gZG9fc2lnYWx0c3RhY2sodXNzLCB1b3NzLCByZHVzcCgpKTsKK30KKworCisvKgorICogRG8gYSBzaWduYWwgcmV0dXJuOyB1bmRvIHRoZSBzaWduYWwgc3RhY2suCisgKgorICogS2VlcCB0aGUgcmV0dXJuIGNvZGUgb24gdGhlIHN0YWNrIHF1YWR3b3JkIGFsaWduZWQhCisgKiBUaGF0IG1ha2VzIHRoZSBjYWNoZSBmbHVzaCBiZWxvdyBlYXNpZXIuCisgKi8KKworc3RydWN0IHNpZ2ZyYW1lCit7CisJY2hhciAqcHJldGNvZGU7CisJaW50IHNpZzsKKwlpbnQgY29kZTsKKwlzdHJ1Y3Qgc2lnY29udGV4dCAqcHNjOworCWNoYXIgcmV0Y29kZVs4XTsKKwl1bnNpZ25lZCBsb25nIGV4dHJhbWFza1tfTlNJR19XT1JEUy0xXTsKKwlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKK307CisKK3N0cnVjdCBydF9zaWdmcmFtZQoreworCWNoYXIgKnByZXRjb2RlOworCWludCBzaWc7CisJc3RydWN0IHNpZ2luZm8gKnBpbmZvOworCXZvaWQgKnB1YzsKKwljaGFyIHJldGNvZGVbOF07CisJc3RydWN0IHNpZ2luZm8gaW5mbzsKKwlzdHJ1Y3QgdWNvbnRleHQgdWM7Cit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZwdV92ZXJzaW9uOwkvKiB2ZXJzaW9uIG51bWJlciBvZiBmcHUsIHNldCBieSBzZXR1cF9mcmFtZSAqLworCitzdGF0aWMgaW5saW5lIGludCByZXN0b3JlX2ZwdV9zdGF0ZShzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpCit7CisJaW50IGVyciA9IDE7CisKKwlpZiAoRlBVX0lTX0VNVSkgeworCSAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyAqLworCSAgICBtZW1jcHkoY3VycmVudC0+dGhyZWFkLmZwY250bCwgc2MtPnNjX2ZwY250bCwgMTIpOworCSAgICBtZW1jcHkoY3VycmVudC0+dGhyZWFkLmZwLCBzYy0+c2NfZnByZWdzLCAyNCk7CisJICAgIHJldHVybiAwOworCX0KKworCWlmIChDUFVfSVNfMDYwID8gc2MtPnNjX2Zwc3RhdGVbMl0gOiBzYy0+c2NfZnBzdGF0ZVswXSkgeworCSAgICAvKiBWZXJpZnkgdGhlIGZyYW1lIGZvcm1hdC4gICovCisJICAgIGlmICghQ1BVX0lTXzA2MCAmJiAoc2MtPnNjX2Zwc3RhdGVbMF0gIT0gZnB1X3ZlcnNpb24pKQorCQlnb3RvIG91dDsKKwkgICAgaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CisJCWlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjg4ODEgJiYKKwkJICAgICEoc2MtPnNjX2Zwc3RhdGVbMV0gPT0gMHgxOCB8fCBzYy0+c2NfZnBzdGF0ZVsxXSA9PSAweGI0KSkKKwkJICAgIGdvdG8gb3V0OworCQlpZiAobTY4a19mcHV0eXBlICYgRlBVXzY4ODgyICYmCisJCSAgICAhKHNjLT5zY19mcHN0YXRlWzFdID09IDB4MzggfHwgc2MtPnNjX2Zwc3RhdGVbMV0gPT0gMHhkNCkpCisJCSAgICBnb3RvIG91dDsKKwkgICAgfSBlbHNlIGlmIChDUFVfSVNfMDQwKSB7CisJCWlmICghKHNjLT5zY19mcHN0YXRlWzFdID09IDB4MDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICBzYy0+c2NfZnBzdGF0ZVsxXSA9PSAweDI4IHx8CisgICAgICAgICAgICAgICAgICAgICAgc2MtPnNjX2Zwc3RhdGVbMV0gPT0gMHg2MCkpCisJCSAgICBnb3RvIG91dDsKKwkgICAgfSBlbHNlIGlmIChDUFVfSVNfMDYwKSB7CisJCWlmICghKHNjLT5zY19mcHN0YXRlWzNdID09IDB4MDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICBzYy0+c2NfZnBzdGF0ZVszXSA9PSAweDYwIHx8CisJCSAgICAgIHNjLT5zY19mcHN0YXRlWzNdID09IDB4ZTApKQorCQkgICAgZ290byBvdXQ7CisJICAgIH0gZWxzZQorCQlnb3RvIG91dDsKKworCSAgICBfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCSAgICAgICJmbW92ZW14ICUwLCUlZnAwLSUlZnAxXG5cdCIKKwkJCSAgICAgICJmbW92ZW1sICUxLCUlZnBjci8lJWZwc3IvJSVmcGlhclxuXHQiCisJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgICA6ICJtIiAoKnNjLT5zY19mcHJlZ3MpLCAibSIgKCpzYy0+c2NfZnBjbnRsKSk7CisJfQorCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJICAiZnJlc3RvcmUgJTBcblx0IgorCQkJICAiLmNoaXAgNjhrIiA6IDogIm0iICgqc2MtPnNjX2Zwc3RhdGUpKTsKKwllcnIgPSAwOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBGUENPTlRFWFRfU0laRQkyMTYKKyNkZWZpbmUgdWNfZnBzdGF0ZQl1Y19maWxsZXJbMF0KKyNkZWZpbmUgdWNfZm9ybWF0dmVjCXVjX2ZpbGxlcltGUENPTlRFWFRfU0laRS80XQorI2RlZmluZSB1Y19leHRyYQl1Y19maWxsZXJbRlBDT05URVhUX1NJWkUvNCsxXQorCitzdGF0aWMgaW5saW5lIGludCBydF9yZXN0b3JlX2ZwdV9zdGF0ZShzdHJ1Y3QgdWNvbnRleHQgKnVjKQoreworCXVuc2lnbmVkIGNoYXIgZnBzdGF0ZVtGUENPTlRFWFRfU0laRV07CisJaW50IGNvbnRleHRfc2l6ZSA9IENQVV9JU18wNjAgPyA4IDogMDsKKwlmcHJlZ3NldF90IGZwcmVnczsKKwlpbnQgZXJyID0gMTsKKworCWlmIChGUFVfSVNfRU1VKSB7CisJCS8qIHJlc3RvcmUgZnB1IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJaWYgKF9fY29weV9mcm9tX3VzZXIoY3VycmVudC0+dGhyZWFkLmZwY250bCwKKwkJCQl1Yy0+dWNfbWNvbnRleHQuZnByZWdzLmZfZnBjbnRsLCAxMikpCisJCQlnb3RvIG91dDsKKwkJLyogcmVzdG9yZSBhbGwgb3RoZXIgZnB1IHJlZ2lzdGVyICovCisJCWlmIChfX2NvcHlfZnJvbV91c2VyKGN1cnJlbnQtPnRocmVhZC5mcCwKKwkJCQl1Yy0+dWNfbWNvbnRleHQuZnByZWdzLmZfZnByZWdzLCA5NikpCisJCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKF9fZ2V0X3VzZXIoKihsb25nICopZnBzdGF0ZSwgKGxvbmcgKikmdWMtPnVjX2Zwc3RhdGUpKQorCQlnb3RvIG91dDsKKwlpZiAoQ1BVX0lTXzA2MCA/IGZwc3RhdGVbMl0gOiBmcHN0YXRlWzBdKSB7CisJCWlmICghQ1BVX0lTXzA2MCkKKwkJCWNvbnRleHRfc2l6ZSA9IGZwc3RhdGVbMV07CisJCS8qIFZlcmlmeSB0aGUgZnJhbWUgZm9ybWF0LiAgKi8KKwkJaWYgKCFDUFVfSVNfMDYwICYmIChmcHN0YXRlWzBdICE9IGZwdV92ZXJzaW9uKSkKKwkJCWdvdG8gb3V0OworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJCWlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjg4ODEgJiYKKwkJCSAgICAhKGNvbnRleHRfc2l6ZSA9PSAweDE4IHx8IGNvbnRleHRfc2l6ZSA9PSAweGI0KSkKKwkJCQlnb3RvIG91dDsKKwkJCWlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjg4ODIgJiYKKwkJCSAgICAhKGNvbnRleHRfc2l6ZSA9PSAweDM4IHx8IGNvbnRleHRfc2l6ZSA9PSAweGQ0KSkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChDUFVfSVNfMDQwKSB7CisJCQlpZiAoIShjb250ZXh0X3NpemUgPT0gMHgwMCB8fAorCQkJICAgICAgY29udGV4dF9zaXplID09IDB4MjggfHwKKwkJCSAgICAgIGNvbnRleHRfc2l6ZSA9PSAweDYwKSkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChDUFVfSVNfMDYwKSB7CisJCQlpZiAoIShmcHN0YXRlWzNdID09IDB4MDAgfHwKKwkJCSAgICAgIGZwc3RhdGVbM10gPT0gMHg2MCB8fAorCQkJICAgICAgZnBzdGF0ZVszXSA9PSAweGUwKSkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlCisJCQlnb3RvIG91dDsKKwkJaWYgKF9fY29weV9mcm9tX3VzZXIoJmZwcmVncywgJnVjLT51Y19tY29udGV4dC5mcHJlZ3MsCisJCQkJICAgICBzaXplb2YoZnByZWdzKSkpCisJCQlnb3RvIG91dDsKKwkJX19hc21fXyB2b2xhdGlsZSAoIi5jaGlwIDY4ay82ODg4MVxuXHQiCisJCQkJICAiZm1vdmVteCAlMCwlJWZwMC0lJWZwN1xuXHQiCisJCQkJICAiZm1vdmVtbCAlMSwlJWZwY3IvJSVmcHNyLyUlZnBpYXJcblx0IgorCQkJCSAgIi5jaGlwIDY4ayIKKwkJCQkgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCSAgOiAibSIgKCpmcHJlZ3MuZl9mcHJlZ3MpLAorCQkJCSAgICAibSIgKCpmcHJlZ3MuZl9mcGNudGwpKTsKKwl9CisJaWYgKGNvbnRleHRfc2l6ZSAmJgorCSAgICBfX2NvcHlfZnJvbV91c2VyKGZwc3RhdGUgKyA0LCAobG9uZyAqKSZ1Yy0+dWNfZnBzdGF0ZSArIDEsCisJCQkgICAgIGNvbnRleHRfc2l6ZSkpCisJCWdvdG8gb3V0OworCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJICAiZnJlc3RvcmUgJTBcblx0IgorCQkJICAiLmNoaXAgNjhrIiA6IDogIm0iICgqZnBzdGF0ZSkpOworCWVyciA9IDA7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc2lnY29udGV4dCAqdXNjLCB2b2lkICpmcCwKKwkJICAgaW50ICpwZDApCit7CisJaW50IGZzaXplLCBmb3JtYXR2ZWM7CisJc3RydWN0IHNpZ2NvbnRleHQgY29udGV4dDsKKwlpbnQgZXJyOworCisJLyogZ2V0IHByZXZpb3VzIGNvbnRleHQgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJmNvbnRleHQsIHVzYywgc2l6ZW9mKGNvbnRleHQpKSkKKwkJZ290byBiYWRmcmFtZTsKKworCS8qIHJlc3RvcmUgcGFzc2VkIHJlZ2lzdGVycyAqLworCXJlZ3MtPmQxID0gY29udGV4dC5zY19kMTsKKwlyZWdzLT5hMCA9IGNvbnRleHQuc2NfYTA7CisJcmVncy0+YTEgPSBjb250ZXh0LnNjX2ExOworCXJlZ3MtPnNyID0gKHJlZ3MtPnNyICYgMHhmZjAwKSB8IChjb250ZXh0LnNjX3NyICYgMHhmZik7CisJcmVncy0+cGMgPSBjb250ZXh0LnNjX3BjOworCXJlZ3MtPm9yaWdfZDAgPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKwl3cnVzcChjb250ZXh0LnNjX3VzcCk7CisJZm9ybWF0dmVjID0gY29udGV4dC5zY19mb3JtYXR2ZWM7CisJcmVncy0+Zm9ybWF0ID0gZm9ybWF0dmVjID4+IDEyOworCXJlZ3MtPnZlY3RvciA9IGZvcm1hdHZlYyAmIDB4ZmZmOworCisJZXJyID0gcmVzdG9yZV9mcHVfc3RhdGUoJmNvbnRleHQpOworCisJZnNpemUgPSBmcmFtZV9leHRyYV9zaXplc1tyZWdzLT5mb3JtYXRdOworCWlmIChmc2l6ZSA8IDApIHsKKwkJLyoKKwkJICogdXNlciBwcm9jZXNzIHRyeWluZyB0byByZXR1cm4gd2l0aCB3ZWlyZCBmcmFtZSBmb3JtYXQKKwkJICovCisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJ1c2VyIHByb2Nlc3MgcmV0dXJuaW5nIHdpdGggd2VpcmQgZnJhbWUgZm9ybWF0XG4iKTsKKyNlbmRpZgorCQlnb3RvIGJhZGZyYW1lOworCX0KKworCS8qIE9LLglNYWtlIHJvb20gb24gdGhlIHN1cGVydmlzb3Igc3RhY2sgZm9yIHRoZSBleHRyYSBqdW5rLAorCSAqIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKworCWlmIChmc2l6ZSkgeworCQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncyAtIDE7CisJCXJlZ3MtPmQwID0gY29udGV4dC5zY19kMDsKKyNkZWZpbmUgZnJhbWVfb2Zmc2V0IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpK3NpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJCSgiICAgbW92ZWwgJTAsJS9hMFxuXHQiCisJCQkgIiAgIHN1YmwgJTEsJS9hMFxuXHQiICAgICAvKiBtYWtlIHJvb20gb24gc3RhY2sgKi8KKwkJCSAiICAgbW92ZWwgJS9hMCwlL3NwXG5cdCIgIC8qIHNldCBzdGFjayBwb2ludGVyICovCisJCQkgLyogbW92ZSBzd2l0Y2hfc3RhY2sgYW5kIHB0X3JlZ3MgKi8KKwkJCSAiMTogbW92ZWwgJTBAKywlL2EwQCtcblx0IgorCQkJICIgICBkYnJhICUyLDFiXG5cdCIKKwkJCSAiICAgbGVhICUvc3BAKCVjMyksJS9hMFxuXHQiIC8qIGFkZCBvZmZzZXQgb2YgZm10ICovCisJCQkgIiAgIGxzcmwgICMyLCUxXG5cdCIKKwkJCSAiICAgc3VicWwgIzEsJTFcblx0IgorCQkJICIyOiBtb3Zlc2wgJTRAKywlMlxuXHQiCisJCQkgIjM6IG1vdmVsICUyLCUvYTBAK1xuXHQiCisJCQkgIiAgIGRicmEgJTEsMmJcblx0IgorCQkJICIgICBicmFsIHJldF9mcm9tX3NpZ25hbFxuIgorCQkJICI0OlxuIgorCQkJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQkgIiAgIC5hbGlnbiA0XG4iCisJCQkgIiAgIC5sb25nIDJiLDRiXG4iCisJCQkgIiAgIC5sb25nIDNiLDRiXG4iCisJCQkgIi5wcmV2aW91cyIKKwkJCSA6IC8qIG5vIG91dHB1dHMsIGl0IGRvZXNuJ3QgZXZlciByZXR1cm4gKi8KKwkJCSA6ICJhIiAoc3cpLCAiZCIgKGZzaXplKSwgImQiIChmcmFtZV9vZmZzZXQvNC0xKSwKKwkJCSAgICJuIiAoZnJhbWVfb2Zmc2V0KSwgImEiIChmcCkKKwkJCSA6ICJhMCIpOworI3VuZGVmIGZyYW1lX29mZnNldAorCQkvKgorCQkgKiBJZiB3ZSBldmVyIGdldCBoZXJlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZQorCQkgKiBidWlsZGluZyB0aGUgYWJvdmUgc3RhY2stZnJhbWUuCisJCSAqLworCQlnb3RvIGJhZGZyYW1lOworCX0KKworCSpwZDAgPSBjb250ZXh0LnNjX2QwOworCXJldHVybiBlcnI7CisKK2JhZGZyYW1lOgorCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorcnRfcmVzdG9yZV91Y29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHN3aXRjaF9zdGFjayAqc3csCisJCSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjLCBpbnQgKnBkMCkKK3sKKwlpbnQgZnNpemUsIHRlbXA7CisJZ3JlZ190ICpncmVncyA9IHVjLT51Y19tY29udGV4dC5ncmVnczsKKwl1bnNpZ25lZCBsb25nIHVzcDsKKwlpbnQgZXJyOworCisJZXJyID0gX19nZXRfdXNlcih0ZW1wLCAmdWMtPnVjX21jb250ZXh0LnZlcnNpb24pOworCWlmICh0ZW1wICE9IE1DT05URVhUX1ZFUlNJT04pCisJCWdvdG8gYmFkZnJhbWU7CisJLyogcmVzdG9yZSBwYXNzZWQgcmVnaXN0ZXJzICovCisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDAsICZncmVnc1swXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDEsICZncmVnc1sxXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDIsICZncmVnc1syXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDMsICZncmVnc1szXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDQsICZncmVnc1s0XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZDUsICZncmVnc1s1XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmQ2LCAmZ3JlZ3NbNl0pOworCWVyciB8PSBfX2dldF91c2VyKHN3LT5kNywgJmdyZWdzWzddKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5hMCwgJmdyZWdzWzhdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5hMSwgJmdyZWdzWzldKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5hMiwgJmdyZWdzWzEwXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmEzLCAmZ3JlZ3NbMTFdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+YTQsICZncmVnc1sxMl0pOworCWVyciB8PSBfX2dldF91c2VyKHN3LT5hNSwgJmdyZWdzWzEzXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmE2LCAmZ3JlZ3NbMTRdKTsKKwllcnIgfD0gX19nZXRfdXNlcih1c3AsICZncmVnc1sxNV0pOworCXdydXNwKHVzcCk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cGMsICZncmVnc1sxNl0pOworCWVyciB8PSBfX2dldF91c2VyKHRlbXAsICZncmVnc1sxN10pOworCXJlZ3MtPnNyID0gKHJlZ3MtPnNyICYgMHhmZjAwKSB8ICh0ZW1wICYgMHhmZik7CisJcmVncy0+b3JpZ19kMCA9IC0xOwkJLyogZGlzYWJsZSBzeXNjYWxsIGNoZWNrcyAqLworCWVyciB8PSBfX2dldF91c2VyKHRlbXAsICZ1Yy0+dWNfZm9ybWF0dmVjKTsKKwlyZWdzLT5mb3JtYXQgPSB0ZW1wID4+IDEyOworCXJlZ3MtPnZlY3RvciA9IHRlbXAgJiAweGZmZjsKKworCWVyciB8PSBydF9yZXN0b3JlX2ZwdV9zdGF0ZSh1Yyk7CisKKwlpZiAoZG9fc2lnYWx0c3RhY2soJnVjLT51Y19zdGFjaywgTlVMTCwgdXNwKSA9PSAtRUZBVUxUKQorCQlnb3RvIGJhZGZyYW1lOworCisJZnNpemUgPSBmcmFtZV9leHRyYV9zaXplc1tyZWdzLT5mb3JtYXRdOworCWlmIChmc2l6ZSA8IDApIHsKKwkJLyoKKwkJICogdXNlciBwcm9jZXNzIHRyeWluZyB0byByZXR1cm4gd2l0aCB3ZWlyZCBmcmFtZSBmb3JtYXQKKwkJICovCisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJ1c2VyIHByb2Nlc3MgcmV0dXJuaW5nIHdpdGggd2VpcmQgZnJhbWUgZm9ybWF0XG4iKTsKKyNlbmRpZgorCQlnb3RvIGJhZGZyYW1lOworCX0KKworCS8qIE9LLglNYWtlIHJvb20gb24gdGhlIHN1cGVydmlzb3Igc3RhY2sgZm9yIHRoZSBleHRyYSBqdW5rLAorCSAqIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKworCWlmIChmc2l6ZSkgeworI2RlZmluZSBmcmFtZV9vZmZzZXQgKHNpemVvZihzdHJ1Y3QgcHRfcmVncykrc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfc3RhY2spKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkJKCIgICBtb3ZlbCAlMCwlL2EwXG5cdCIKKwkJCSAiICAgc3VibCAlMSwlL2EwXG5cdCIgICAgIC8qIG1ha2Ugcm9vbSBvbiBzdGFjayAqLworCQkJICIgICBtb3ZlbCAlL2EwLCUvc3Bcblx0IiAgLyogc2V0IHN0YWNrIHBvaW50ZXIgKi8KKwkJCSAvKiBtb3ZlIHN3aXRjaF9zdGFjayBhbmQgcHRfcmVncyAqLworCQkJICIxOiBtb3ZlbCAlMEArLCUvYTBAK1xuXHQiCisJCQkgIiAgIGRicmEgJTIsMWJcblx0IgorCQkJICIgICBsZWEgJS9zcEAoJWMzKSwlL2EwXG5cdCIgLyogYWRkIG9mZnNldCBvZiBmbXQgKi8KKwkJCSAiICAgbHNybCAgIzIsJTFcblx0IgorCQkJICIgICBzdWJxbCAjMSwlMVxuXHQiCisJCQkgIjI6IG1vdmVzbCAlNEArLCUyXG5cdCIKKwkJCSAiMzogbW92ZWwgJTIsJS9hMEArXG5cdCIKKwkJCSAiICAgZGJyYSAlMSwyYlxuXHQiCisJCQkgIiAgIGJyYWwgcmV0X2Zyb21fc2lnbmFsXG4iCisJCQkgIjQ6XG4iCisJCQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCSAiICAgLmFsaWduIDRcbiIKKwkJCSAiICAgLmxvbmcgMmIsNGJcbiIKKwkJCSAiICAgLmxvbmcgM2IsNGJcbiIKKwkJCSAiLnByZXZpb3VzIgorCQkJIDogLyogbm8gb3V0cHV0cywgaXQgZG9lc24ndCBldmVyIHJldHVybiAqLworCQkJIDogImEiIChzdyksICJkIiAoZnNpemUpLCAiZCIgKGZyYW1lX29mZnNldC80LTEpLAorCQkJICAgIm4iIChmcmFtZV9vZmZzZXQpLCAiYSIgKCZ1Yy0+dWNfZXh0cmEpCisJCQkgOiAiYTAiKTsKKyN1bmRlZiBmcmFtZV9vZmZzZXQKKwkJLyoKKwkJICogSWYgd2UgZXZlciBnZXQgaGVyZSBhbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUKKwkJICogYnVpbGRpbmcgdGhlIGFib3ZlIHN0YWNrLWZyYW1lLgorCQkgKi8KKwkJZ290byBiYWRmcmFtZTsKKwl9CisKKwkqcGQwID0gcmVncy0+ZDA7CisJcmV0dXJuIGVycjsKKworYmFkZnJhbWU6CisJcmV0dXJuIDE7Cit9CisKK2FzbWxpbmthZ2UgaW50IGRvX3NpZ3JldHVybih1bnNpZ25lZCBsb25nIF9fdW51c2VkKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgJl9fdW51c2VkOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopIChzdyArIDEpOworCXVuc2lnbmVkIGxvbmcgdXNwID0gcmR1c3AoKTsKKwlzdHJ1Y3Qgc2lnZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSAqKSh1c3AgLSA0KTsKKwlzaWdzZXRfdCBzZXQ7CisJaW50IGQwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCisJCWdvdG8gYmFkZnJhbWU7CisJaWYgKF9fZ2V0X3VzZXIoc2V0LnNpZ1swXSwgJmZyYW1lLT5zYy5zY19tYXNrKSB8fAorCSAgICAoX05TSUdfV09SRFMgPiAxICYmCisJICAgICBfX2NvcHlfZnJvbV91c2VyKCZzZXQuc2lnWzFdLCAmZnJhbWUtPmV4dHJhbWFzaywKKwkJCSAgICAgIHNpemVvZihmcmFtZS0+ZXh0cmFtYXNrKSkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7CisJY3VycmVudC0+YmxvY2tlZCA9IHNldDsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCisJaWYgKHJlc3RvcmVfc2lnY29udGV4dChyZWdzLCAmZnJhbWUtPnNjLCBmcmFtZSArIDEsICZkMCkpCisJCWdvdG8gYmFkZnJhbWU7CisJcmV0dXJuIGQwOworCitiYWRmcmFtZToKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2UgaW50IGRvX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIF9fdW51c2VkKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgJl9fdW51c2VkOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopIChzdyArIDEpOworCXVuc2lnbmVkIGxvbmcgdXNwID0gcmR1c3AoKTsKKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKSh1c3AgLSA0KTsKKwlzaWdzZXRfdCBzZXQ7CisJaW50IGQwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCisJCWdvdG8gYmFkZnJhbWU7CisJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKKwljdXJyZW50LT5ibG9ja2VkID0gc2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisKKwlpZiAocnRfcmVzdG9yZV91Y29udGV4dChyZWdzLCBzdywgJmZyYW1lLT51YywgJmQwKSkKKwkJZ290byBiYWRmcmFtZTsKKwlyZXR1cm4gZDA7CisKK2JhZGZyYW1lOgorCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB1cCBhIHNpZ25hbCBmcmFtZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9mcHVfc3RhdGUoc3RydWN0IHNpZ2NvbnRleHQgKnNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoRlBVX0lTX0VNVSkgeworCQkvKiBzYXZlIHJlZ2lzdGVycyAqLworCQltZW1jcHkoc2MtPnNjX2ZwY250bCwgY3VycmVudC0+dGhyZWFkLmZwY250bCwgMTIpOworCQltZW1jcHkoc2MtPnNjX2ZwcmVncywgY3VycmVudC0+dGhyZWFkLmZwLCAyNCk7CisJCXJldHVybjsKKwl9CisKKwlfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCSAgImZzYXZlICUwXG5cdCIKKwkJCSAgIi5jaGlwIDY4ayIKKwkJCSAgOiA6ICJtIiAoKnNjLT5zY19mcHN0YXRlKSA6ICJtZW1vcnkiKTsKKworCWlmIChDUFVfSVNfMDYwID8gc2MtPnNjX2Zwc3RhdGVbMl0gOiBzYy0+c2NfZnBzdGF0ZVswXSkgeworCQlmcHVfdmVyc2lvbiA9IHNjLT5zY19mcHN0YXRlWzBdOworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzAgJiYKKwkJICAgIHJlZ3MtPnZlY3RvciA+PSAoVkVDX0ZQQlJVQyAqIDQpICYmCisJCSAgICByZWdzLT52ZWN0b3IgPD0gKFZFQ19GUE5BTiAqIDQpKSB7CisJCQkvKiBDbGVhciBwZW5kaW5nIGV4Y2VwdGlvbiBpbiA2ODg4MiBpZGxlIGZyYW1lICovCisJCQlpZiAoKih1bnNpZ25lZCBzaG9ydCAqKSBzYy0+c2NfZnBzdGF0ZSA9PSAweDFmMzgpCisJCQkJc2MtPnNjX2Zwc3RhdGVbMHgzOF0gfD0gMSA8PCAzOworCQl9CisJCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJCSAgImZtb3ZlbXggJSVmcDAtJSVmcDEsJTBcblx0IgorCQkJCSAgImZtb3ZlbWwgJSVmcGNyLyUlZnBzci8lJWZwaWFyLCUxXG5cdCIKKwkJCQkgICIuY2hpcCA2OGsiCisJCQkJICA6ICI9bSIgKCpzYy0+c2NfZnByZWdzKSwKKwkJCQkgICAgIj1tIiAoKnNjLT5zY19mcGNudGwpCisJCQkJICA6IC8qIG5vIGlucHV0cyAqLworCQkJCSAgOiAibWVtb3J5Iik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBydF9zYXZlX2ZwdV9zdGF0ZShzdHJ1Y3QgdWNvbnRleHQgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBjaGFyIGZwc3RhdGVbRlBDT05URVhUX1NJWkVdOworCWludCBjb250ZXh0X3NpemUgPSBDUFVfSVNfMDYwID8gOCA6IDA7CisJaW50IGVyciA9IDA7CisKKwlpZiAoRlBVX0lTX0VNVSkgeworCQkvKiBzYXZlIGZwdSBjb250cm9sIHJlZ2lzdGVyICovCisJCWVyciB8PSBjb3B5X3RvX3VzZXIodWMtPnVjX21jb250ZXh0LmZwcmVncy5mX2ZwY250bCwKKwkJCQljdXJyZW50LT50aHJlYWQuZnBjbnRsLCAxMik7CisJCS8qIHNhdmUgYWxsIG90aGVyIGZwdSByZWdpc3RlciAqLworCQllcnIgfD0gY29weV90b191c2VyKHVjLT51Y19tY29udGV4dC5mcHJlZ3MuZl9mcHJlZ3MsCisJCQkJY3VycmVudC0+dGhyZWFkLmZwLCA5Nik7CisJCXJldHVybiBlcnI7CisJfQorCisJX19hc21fXyB2b2xhdGlsZSAoIi5jaGlwIDY4ay82ODg4MVxuXHQiCisJCQkgICJmc2F2ZSAlMFxuXHQiCisJCQkgICIuY2hpcCA2OGsiCisJCQkgIDogOiAibSIgKCpmcHN0YXRlKSA6ICJtZW1vcnkiKTsKKworCWVyciB8PSBfX3B1dF91c2VyKCoobG9uZyAqKWZwc3RhdGUsIChsb25nICopJnVjLT51Y19mcHN0YXRlKTsKKwlpZiAoQ1BVX0lTXzA2MCA/IGZwc3RhdGVbMl0gOiBmcHN0YXRlWzBdKSB7CisJCWZwcmVnc2V0X3QgZnByZWdzOworCQlpZiAoIUNQVV9JU18wNjApCisJCQljb250ZXh0X3NpemUgPSBmcHN0YXRlWzFdOworCQlmcHVfdmVyc2lvbiA9IGZwc3RhdGVbMF07CisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCAmJgorCQkgICAgcmVncy0+dmVjdG9yID49IChWRUNfRlBCUlVDICogNCkgJiYKKwkJICAgIHJlZ3MtPnZlY3RvciA8PSAoVkVDX0ZQTkFOICogNCkpIHsKKwkJCS8qIENsZWFyIHBlbmRpbmcgZXhjZXB0aW9uIGluIDY4ODgyIGlkbGUgZnJhbWUgKi8KKwkJCWlmICgqKHVuc2lnbmVkIHNob3J0ICopIGZwc3RhdGUgPT0gMHgxZjM4KQorCQkJCWZwc3RhdGVbMHgzOF0gfD0gMSA8PCAzOworCQl9CisJCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJCSAgImZtb3ZlbXggJSVmcDAtJSVmcDcsJTBcblx0IgorCQkJCSAgImZtb3ZlbWwgJSVmcGNyLyUlZnBzci8lJWZwaWFyLCUxXG5cdCIKKwkJCQkgICIuY2hpcCA2OGsiCisJCQkJICA6ICI9bSIgKCpmcHJlZ3MuZl9mcHJlZ3MpLAorCQkJCSAgICAiPW0iICgqZnByZWdzLmZfZnBjbnRsKQorCQkJCSAgOiAvKiBubyBpbnB1dHMgKi8KKwkJCQkgIDogIm1lbW9yeSIpOworCQllcnIgfD0gY29weV90b191c2VyKCZ1Yy0+dWNfbWNvbnRleHQuZnByZWdzLCAmZnByZWdzLAorCQkJCSAgICBzaXplb2YoZnByZWdzKSk7CisJfQorCWlmIChjb250ZXh0X3NpemUpCisJCWVyciB8PSBjb3B5X3RvX3VzZXIoKGxvbmcgKikmdWMtPnVjX2Zwc3RhdGUgKyAxLCBmcHN0YXRlICsgNCwKKwkJCQkgICAgY29udGV4dF9zaXplKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zaWdjb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlzYy0+c2NfbWFzayA9IG1hc2s7CisJc2MtPnNjX3VzcCA9IHJkdXNwKCk7CisJc2MtPnNjX2QwID0gcmVncy0+ZDA7CisJc2MtPnNjX2QxID0gcmVncy0+ZDE7CisJc2MtPnNjX2EwID0gcmVncy0+YTA7CisJc2MtPnNjX2ExID0gcmVncy0+YTE7CisJc2MtPnNjX3NyID0gcmVncy0+c3I7CisJc2MtPnNjX3BjID0gcmVncy0+cGM7CisJc2MtPnNjX2Zvcm1hdHZlYyA9IHJlZ3MtPmZvcm1hdCA8PCAxMiB8IHJlZ3MtPnZlY3RvcjsKKwlzYXZlX2ZwdV9zdGF0ZShzYywgcmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0X3NldHVwX3Vjb250ZXh0KHN0cnVjdCB1Y29udGV4dCAqdWMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzIC0gMTsKKwlncmVnX3QgKmdyZWdzID0gdWMtPnVjX21jb250ZXh0LmdyZWdzOworCWludCBlcnIgPSAwOworCisJZXJyIHw9IF9fcHV0X3VzZXIoTUNPTlRFWFRfVkVSU0lPTiwgJnVjLT51Y19tY29udGV4dC52ZXJzaW9uKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kMCwgJmdyZWdzWzBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kMSwgJmdyZWdzWzFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kMiwgJmdyZWdzWzJdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kMywgJmdyZWdzWzNdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kNCwgJmdyZWdzWzRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kNSwgJmdyZWdzWzVdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+ZDYsICZncmVnc1s2XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmQ3LCAmZ3JlZ3NbN10pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmEwLCAmZ3JlZ3NbOF0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmExLCAmZ3JlZ3NbOV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmEyLCAmZ3JlZ3NbMTBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+YTMsICZncmVnc1sxMV0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5hNCwgJmdyZWdzWzEyXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmE1LCAmZ3JlZ3NbMTNdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+YTYsICZncmVnc1sxNF0pOworCWVyciB8PSBfX3B1dF91c2VyKHJkdXNwKCksICZncmVnc1sxNV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnBjLCAmZ3JlZ3NbMTZdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zciwgJmdyZWdzWzE3XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoKHJlZ3MtPmZvcm1hdCA8PCAxMikgfCByZWdzLT52ZWN0b3IsICZ1Yy0+dWNfZm9ybWF0dmVjKTsKKwllcnIgfD0gcnRfc2F2ZV9mcHVfc3RhdGUodWMsIHJlZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXNoX2NhY2hlICh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCS8qCisJICogVXNpbmcgdGhlIG9sZCBjYWNoZV9wdXNoX3YoKSB3YXMgcmVhbGx5IGEgYmlnIHdhc3RlLgorCSAqCisJICogV2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGRvIGlzIHRvIGZsdXNoIDggYnl0ZXMgdG8gcmFtLgorCSAqIEZsdXNoaW5nIDIgY2FjaGUgbGluZXMgb2YgMTYgYnl0ZXMgaXMgbXVjaCBjaGVhcGVyIHRoYW4KKwkgKiBmbHVzaGluZyAxIG9yIDIgcGFnZXMsIGFzIHByZXZpb3VzbHkgZG9uZSBpbgorCSAqIGNhY2hlX3B1c2hfdigpLgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKZXMKKwkgKi8KKwlpZiAoQ1BVX0lTXzA0MCkgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAgIm5vcFxuXHQiCisJCQkJICAgICAgInB0ZXN0ciAoJTEpXG5cdCIKKwkJCQkgICAgICAibW92ZWMgJSVtbXVzciwlMFxuXHQiCisJCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgICA6ICI9ciIgKHRlbXApCisJCQkJICAgICAgOiAiYSIgKHZhZGRyKSk7CisKKwkJdGVtcCAmPSBQQUdFX01BU0s7CisJCXRlbXAgfD0gdmFkZHIgJiB+UEFHRV9NQVNLOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgICJub3Bcblx0IgorCQkJCSAgICAgICJjcHVzaGwgJSViYywoJTApXG5cdCIKKwkJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgIDogOiAiYSIgKHRlbXApKTsKKwl9CisJZWxzZSBpZiAoQ1BVX0lTXzA2MCkgeworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAgICJwbHBhciAoJTApXG5cdCIKKwkJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgIDogIj1hIiAodGVtcCkKKwkJCQkgICAgICA6ICIwIiAodmFkZHIpKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJICAgICAgImNwdXNobCAlJWJjLCglMClcblx0IgorCQkJCSAgICAgICIuY2hpcCA2OGsiCisJCQkJICAgICAgOiA6ICJhIiAodGVtcCkpOworCX0KKwllbHNlIHsKKwkJLyoKKwkJICogNjgwMzAvNjgwMjAgaGF2ZSBubyB3cml0ZWJhY2sgY2FjaGU7CisJCSAqIHN0aWxsIG5lZWQgdG8gY2xlYXIgaWNhY2hlLgorCQkgKiBOb3RlIHRoYXQgdmFkZHIgaXMgZ3VhcmFudGVlZCB0byBiZSBsb25nIHdvcmQgYWxpZ25lZC4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwkJYXNtIHZvbGF0aWxlICgibW92ZWMgJSVjYWNyLCUwIiA6ICI9ciIgKHRlbXApKTsKKwkJdGVtcCArPSA0OworCQlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJWNhYXJcblx0IgorCQkJICAgICAgIm1vdmVjICUxLCUlY2FjciIKKwkJCSAgICAgIDogOiAiciIgKHZhZGRyKSwgInIiICh0ZW1wKSk7CisJCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUwLCUlY2FhclxuXHQiCisJCQkgICAgICAibW92ZWMgJTEsJSVjYWNyIgorCQkJICAgICAgOiA6ICJyIiAodmFkZHIgKyA0KSwgInIiICh0ZW1wKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaXplX3QgZnJhbWVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHVzcDsKKworCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrLiAgKi8KKwl1c3AgPSByZHVzcCgpOworCisJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKKwkJaWYgKCFvbl9zaWdfc3RhY2sodXNwKSkKKwkJCXVzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOworCX0KKwlyZXR1cm4gKHZvaWQgKikoKHVzcCAtIGZyYW1lX3NpemUpICYgLThVTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2ZyYW1lIChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCQkJIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzaWdmcmFtZSAqZnJhbWU7CisJaW50IGZzaXplID0gZnJhbWVfZXh0cmFfc2l6ZXNbcmVncy0+Zm9ybWF0XTsKKwlzdHJ1Y3Qgc2lnY29udGV4dCBjb250ZXh0OworCWludCBlcnIgPSAwOworCisJaWYgKGZzaXplIDwgMCkgeworI2lmZGVmIERFQlVHCisJCXByaW50ayAoInNldHVwX2ZyYW1lOiBVbmtub3duIGZyYW1lIGZvcm1hdCAlI3hcbiIsCisJCQlyZWdzLT5mb3JtYXQpOworI2VuZGlmCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCX0KKworCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSArIGZzaXplKTsKKworCWlmIChmc2l6ZSkgeworCQllcnIgfD0gY29weV90b191c2VyIChmcmFtZSArIDEsIHJlZ3MgKyAxLCBmc2l6ZSk7CisJCXJlZ3MtPnN0a2FkaiA9IGZzaXplOworCX0KKworCWVyciB8PSBfX3B1dF91c2VyKChjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluCisJCQkgICAmJiBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluLT5zaWduYWxfaW52bWFwCisJCQkgICAmJiBzaWcgPCAzMgorCQkJICAgPyBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluLT5zaWduYWxfaW52bWFwW3NpZ10KKwkJCSAgIDogc2lnKSwKKwkJCSAgJmZyYW1lLT5zaWcpOworCisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+dmVjdG9yLCAmZnJhbWUtPmNvZGUpOworCWVyciB8PSBfX3B1dF91c2VyKCZmcmFtZS0+c2MsICZmcmFtZS0+cHNjKTsKKworCWlmIChfTlNJR19XT1JEUyA+IDEpCisJCWVyciB8PSBjb3B5X3RvX3VzZXIoZnJhbWUtPmV4dHJhbWFzaywgJnNldC0+c2lnWzFdLAorCQkJCSAgICBzaXplb2YoZnJhbWUtPmV4dHJhbWFzaykpOworCisJc2V0dXBfc2lnY29udGV4dCgmY29udGV4dCwgcmVncywgc2V0LT5zaWdbMF0pOworCWVyciB8PSBjb3B5X3RvX3VzZXIgKCZmcmFtZS0+c2MsICZjb250ZXh0LCBzaXplb2YoY29udGV4dCkpOworCisJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZS4gICovCisJZXJyIHw9IF9fcHV0X3VzZXIoZnJhbWUtPnJldGNvZGUsICZmcmFtZS0+cHJldGNvZGUpOworCS8qIG1vdmVxICMsZDA7IHRyYXAgIzAgKi8KKwllcnIgfD0gX19wdXRfdXNlcigweDcwMDA0ZTQwICsgKF9fTlJfc2lncmV0dXJuIDw8IDE2KSwKKwkJCSAgKGxvbmcgKikoZnJhbWUtPnJldGNvZGUpKTsKKworCWlmIChlcnIpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJcHVzaF9jYWNoZSAoKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+cmV0Y29kZSk7CisKKwkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLworCXdydXNwICgodW5zaWduZWQgbG9uZykgZnJhbWUpOworCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpIGthLT5zYS5zYV9oYW5kbGVyOworCithZGp1c3Rfc3RhY2s6CisJLyogUHJlcGFyZSB0byBza2lwIG92ZXIgdGhlIGV4dHJhIHN0dWZmIGluIHRoZSBleGNlcHRpb24gZnJhbWUuICAqLworCWlmIChyZWdzLT5zdGthZGopIHsKKwkJc3RydWN0IHB0X3JlZ3MgKnRyZWdzID0KKwkJCShzdHJ1Y3QgcHRfcmVncyAqKSgodWxvbmcpcmVncyArIHJlZ3MtPnN0a2Fkaik7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJQZXJmb3JtaW5nIHN0YWNrYWRqdXN0PSUwNHhcbiIsIHJlZ3MtPnN0a2Fkaik7CisjZW5kaWYKKwkJLyogVGhpcyBtdXN0IGJlIGNvcGllZCB3aXRoIGRlY3JlYXNpbmcgYWRkcmVzc2VzIHRvCisgICAgICAgICAgICAgICAgICAgaGFuZGxlIG92ZXJsYXBzLiAgKi8KKwkJdHJlZ3MtPnZlY3RvciA9IDA7CisJCXRyZWdzLT5mb3JtYXQgPSAwOworCQl0cmVncy0+cGMgPSByZWdzLT5wYzsKKwkJdHJlZ3MtPnNyID0gcmVncy0+c3I7CisJfQorCXJldHVybjsKKworZ2l2ZV9zaWdzZWd2OgorCWZvcmNlX3NpZ3NlZ3Yoc2lnLCBjdXJyZW50KTsKKwlnb3RvIGFkanVzdF9zdGFjazsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcnRfZnJhbWUgKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywKKwkJCSAgICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lOworCWludCBmc2l6ZSA9IGZyYW1lX2V4dHJhX3NpemVzW3JlZ3MtPmZvcm1hdF07CisJaW50IGVyciA9IDA7CisKKwlpZiAoZnNpemUgPCAwKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrICgic2V0dXBfZnJhbWU6IFVua25vd24gZnJhbWUgZm9ybWF0ICUjeFxuIiwKKwkJCXJlZ3MtPmZvcm1hdCk7CisjZW5kaWYKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CisJfQorCisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKworCWlmIChmc2l6ZSkgeworCQllcnIgfD0gY29weV90b191c2VyICgmZnJhbWUtPnVjLnVjX2V4dHJhLCByZWdzICsgMSwgZnNpemUpOworCQlyZWdzLT5zdGthZGogPSBmc2l6ZTsKKwl9CisKKwllcnIgfD0gX19wdXRfdXNlcigoY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbgorCQkJICAgJiYgY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcAorCQkJICAgJiYgc2lnIDwgMzIKKwkJCSAgID8gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcFtzaWddCisJCQkgICA6IHNpZyksCisJCQkgICZmcmFtZS0+c2lnKTsKKwllcnIgfD0gX19wdXRfdXNlcigmZnJhbWUtPmluZm8sICZmcmFtZS0+cGluZm8pOworCWVyciB8PSBfX3B1dF91c2VyKCZmcmFtZS0+dWMsICZmcmFtZS0+cHVjKTsKKwllcnIgfD0gY29weV9zaWdpbmZvX3RvX3VzZXIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKKworCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsCisJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZHVzcCgpKSwKKwkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CisJZXJyIHw9IHJ0X3NldHVwX3Vjb250ZXh0KCZmcmFtZS0+dWMsIHJlZ3MpOworCWVyciB8PSBjb3B5X3RvX3VzZXIgKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOworCisJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZS4gICovCisJZXJyIHw9IF9fcHV0X3VzZXIoZnJhbWUtPnJldGNvZGUsICZmcmFtZS0+cHJldGNvZGUpOworCS8qIG1vdmVxICMsZDA7IG5vdGIgZDA7IHRyYXAgIzAgKi8KKwllcnIgfD0gX19wdXRfdXNlcigweDcwMDA0NjAwICsgKChfX05SX3J0X3NpZ3JldHVybiBeIDB4ZmYpIDw8IDE2KSwKKwkJCSAgKGxvbmcgKikoZnJhbWUtPnJldGNvZGUgKyAwKSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoMHg0ZTQwLCAoc2hvcnQgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKworCXB1c2hfY2FjaGUgKCh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnJldGNvZGUpOworCisJLyogU2V0IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KKwl3cnVzcCAoKHVuc2lnbmVkIGxvbmcpIGZyYW1lKTsKKwlyZWdzLT5wYyA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfaGFuZGxlcjsKKworYWRqdXN0X3N0YWNrOgorCS8qIFByZXBhcmUgdG8gc2tpcCBvdmVyIHRoZSBleHRyYSBzdHVmZiBpbiB0aGUgZXhjZXB0aW9uIGZyYW1lLiAgKi8KKwlpZiAocmVncy0+c3RrYWRqKSB7CisJCXN0cnVjdCBwdF9yZWdzICp0cmVncyA9CisJCQkoc3RydWN0IHB0X3JlZ3MgKikoKHVsb25nKXJlZ3MgKyByZWdzLT5zdGthZGopOworI2lmZGVmIERFQlVHCisJCXByaW50aygiUGVyZm9ybWluZyBzdGFja2FkanVzdD0lMDR4XG4iLCByZWdzLT5zdGthZGopOworI2VuZGlmCisJCS8qIFRoaXMgbXVzdCBiZSBjb3BpZWQgd2l0aCBkZWNyZWFzaW5nIGFkZHJlc3NlcyB0bworICAgICAgICAgICAgICAgICAgIGhhbmRsZSBvdmVybGFwcy4gICovCisJCXRyZWdzLT52ZWN0b3IgPSAwOworCQl0cmVncy0+Zm9ybWF0ID0gMDsKKwkJdHJlZ3MtPnBjID0gcmVncy0+cGM7CisJCXRyZWdzLT5zciA9IHJlZ3MtPnNyOworCX0KKwlyZXR1cm47CisKK2dpdmVfc2lnc2VndjoKKwlmb3JjZV9zaWdzZWd2KHNpZywgY3VycmVudCk7CisJZ290byBhZGp1c3Rfc3RhY2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraGFuZGxlX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIGludCBoYXNfaGFuZGxlcikKK3sKKwlzd2l0Y2ggKHJlZ3MtPmQwKSB7CisJY2FzZSAtRVJFU1RBUlROT0hBTkQ6CisJCWlmICghaGFzX2hhbmRsZXIpCisJCQlnb3RvIGRvX3Jlc3RhcnQ7CisJCXJlZ3MtPmQwID0gLUVJTlRSOworCQlicmVhazsKKworCWNhc2UgLUVSRVNUQVJUU1lTOgorCQlpZiAoaGFzX2hhbmRsZXIgJiYgIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgeworCQkJcmVncy0+ZDAgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJZG9fcmVzdGFydDoKKwkJcmVncy0+ZDAgPSByZWdzLT5vcmlnX2QwOworCQlyZWdzLT5wYyAtPSAyOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpjb29raWUpCit7CisJaWYgKHJlZ3MtPm9yaWdfZDAgPCAwKQorCQlyZXR1cm47CisJc3dpdGNoIChyZWdzLT5kMCkgeworCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCWNhc2UgLUVSRVNUQVJUU1lTOgorCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgorCQlyZWdzLT5kMCA9IHJlZ3MtPm9yaWdfZDA7CisJCXJlZ3MtPm9yaWdfZDAgPSAtMTsKKwkJcmVncy0+cGMgLT0gMjsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCisJICAgICAgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogYXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KKwlpZiAocmVncy0+b3JpZ19kMCA+PSAwKQorCQkvKiBJZiBzbywgY2hlY2sgc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uICovCisJCWhhbmRsZV9yZXN0YXJ0KHJlZ3MsIGthLCAxKTsKKworCS8qIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKKwkJc2V0dXBfcnRfZnJhbWUoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCByZWdzKTsKKwllbHNlCisJCXNldHVwX2ZyYW1lKHNpZywga2EsIG9sZHNldCwgcmVncyk7CisKKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05FU0hPVCkKKwkJa2EtPnNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOworCisJc2lnb3JzZXRzKCZjdXJyZW50LT5ibG9ja2VkLCZjdXJyZW50LT5ibG9ja2VkLCZrYS0+c2Euc2FfbWFzayk7CisJaWYgKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfTk9ERUZFUikpCisJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOworCXJlY2FsY19zaWdwZW5kaW5nKCk7Cit9CisKKy8qCisgKiBOb3RlIHRoYXQgJ2luaXQnIGlzIGEgc3BlY2lhbCBwcm9jZXNzOiBpdCBkb2Vzbid0IGdldCBzaWduYWxzIGl0IGRvZXNuJ3QKKyAqIHdhbnQgdG8gaGFuZGxlLiBUaHVzIHlvdSBjYW5ub3Qga2lsbCBpbml0IGV2ZW4gd2l0aCBhIFNJR0tJTEwgZXZlbiBieQorICogbWlzdGFrZS4KKyAqLworYXNtbGlua2FnZSBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNpZ2luZm9fdCBpbmZvOworCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKKwlpbnQgc2lnbnI7CisKKwljdXJyZW50LT50aHJlYWQuZXNwMCA9ICh1bnNpZ25lZCBsb25nKSByZWdzOworCisJaWYgKCFvbGRzZXQpCisJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOworCisJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CisJaWYgKHNpZ25yID4gMCkgeworCQkvKiBXaGVlISAgQWN0dWFsbHkgZGVsaXZlciB0aGUgc2lnbmFsLiAgKi8KKwkJaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLworCWlmIChyZWdzLT5vcmlnX2QwID49IDApCisJCS8qIFJlc3RhcnQgdGhlIHN5c3RlbSBjYWxsIC0gbm8gaGFuZGxlcnMgcHJlc2VudCAqLworCQloYW5kbGVfcmVzdGFydChyZWdzLCBOVUxMLCAwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zdW4zLWhlYWQuUyBiL2FyY2gvbTY4ay9rZXJuZWwvc3VuMy1oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmZDY5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3VuMy1oZWFkLlMKQEAgLTAsMCArMSwxMDQgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jb250cmVncy5oPgorI2luY2x1ZGUgPGFzbS9zdW4zLWhlYWQuaD4KKworUFNMX0hJR0hJUEwgICAgID0gMHgyNzAwCitOQlNHICAgICAgICAgICAgPSAweDIwMDAwCitJQ0FDSEVfT05MWQk9IDB4MDAwMDAwMDkKK0NBQ0hFU19PRkYJPSAweDAwMDAwMDA4CXwgYWN0dWFsbHkgYSBjbGVhciBhbmQgZGlzYWJsZSAtLW0KKyNkZWZpbmUgTUFTX1NUQUNLIElOVF9TVEFDSworUk9PVF9UQUJMRV9TSVpFID0gMTI4CitQQUdFU0laRQk9IDgxOTIKK1NVTjNfSU5WQUxJRF9QTUVHID0gMjU1CisuZ2xvYmwgYm9vdHVwX3VzZXJfc3RhY2sKKy5nbG9ibCBib290dXBfa2VybmVsX3N0YWNrCisuZ2xvYmwgcGcwCisuZ2xvYmwgc3dhcHBlcl9wZ19kaXIKKy5nbG9ibCBrZXJuZWxfcG1kX3RhYmxlCisuZ2xvYmwgYXZhaWxtZW0KKy5nbG9iYWwgbTY4a19wZ3RhYmxlX2NhY2hlbW9kZQorLmdsb2JhbCBrcHQKK3wgdG9kbzogYWxsIHRoZXNlIHNob3VsZCBiZSBpbiBic3MhCitzd2FwcGVyX3BnX2RpcjogICAgICAgICAgICAgICAgLnNraXAgMHgyMDAwCitwZzA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNraXAgMHgyMDAwCitrZXJuZWxfcG1kX3RhYmxlOiAgICAgICAgICAgICAgLnNraXAgMHgyMDAwCisKKy5nbG9ibCBrZXJuZWxfcGdfZGlyCisuZXF1ICAgIGtlcm5lbF9wZ19kaXIsa2VybmVsX3BtZF90YWJsZQorCisJLnNlY3Rpb24gLmhlYWQKK0VOVFJZKF9zdGV4dCkKK0VOVFJZKF9zdGFydCkKKworLyogRmlyc3RseSwgZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBzZXQgdXAgZnVuY3Rpb24gY29kZXMuICovCisJbW92ZXcJI1BTTF9ISUdISVBMLCAlc3IKKwltb3ZlcQkjRkNfQ09OVFJPTCwgJWQwCisJbW92ZWMJJWQwLCAlc2ZjCisJbW92ZWMJJWQwLCAlZGZjCisKKy8qIE1ha2Ugc3VyZSB3ZSdyZSBpbiBjb250ZXh0IHplcm8uICovCisJbW92ZXEJIzAsICVkMAorCW1vdnNiCSVkMCwgQUNfQ09OVEVYVAorCisvKiBtYXAgZXZlcnl0aGluZyB0aGUgYm9vdGxvYWRlciBsZWZ0IHVzIGludG8gaGlnaCBtZW1vcnksIGNsZWFuIHVwIHRoZQorICAgZXhjZXNzIGxhdGVyICovCisJbGVhCShBQ19TRUdNQVArMCksJWEwCisJbGVhCShBQ19TRUdNQVArS0VSTkJBU0UpLCVhMQorMToKKwltb3ZzYgklYTBALCAlZDEKKwltb3ZzYgklZDEsICVhMUAKKwljbXBpYgkjU1VOM19JTlZBTElEX1BNRUcsICVkMQorCWJlcQkyZgorCWFkZGwJI05CU0csJWEwCisJYWRkbAkjTkJTRywlYTEKKwlqbXAJMWIKKworMjoKKworLyogRGlzYWJsZSBjYWNoZXMgYW5kIGp1bXAgdG8gaGlnaCBjb2RlLiAqLworCW1vdmVxCSNJQ0FDSEVfT05MWSwlZDAJfCBDYWNoZSBkaXNhYmxlZCB1bnRpbCB3ZSdyZSByZWFkeSB0byBlbmFibGUgaXQKKwltb3ZjCSVkMCwgJWNhY3IJfCAgIGlzIHRoaXMgdGhlIHJpZ2h0IHZhbHVlPyAoeWVzIC0tbSkKKwlqbXAJMWY6bAorCisvKiBGb2xsb3dpbmcgY29kZSBleGVjdXRlcyBhdCBoaWdoIGFkZHJlc3NlcyAoMHhFMDAweHh4KS4gKi8KKzE6CWxlYQlpbml0X3Rhc2ssJWN1cnB0cgkJCXwgZ2V0IGluaXRpYWwgdGhyZWFkLi4uCisJbGVhCWluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFLCVzcAl8IC4uLmFuZCBpdHMgc3RhY2suCisKKy8qIGNvcHkgYm9vdGluZm8gcmVjb3JkcyBmcm9tIHRoZSBsb2FkZXIgdG8gX2VuZCAqLworCWxlYQlfZW5kLCAlYTEKKwlsZWEJQklfU1RBUlQsICVhMAorCS8qIG51bWJlciBvZiBsb25ncyB0byBjb3B5ICovCisJbW92ZWwJJWEwQCwgJWQwCisxOglhZGRsCSM0LCAlYTAKKwltb3ZlbCAgICVhMEAsICVhMUAKKwlhZGRsCSM0LCAlYTEKKwlkYmYJJWQwLCAxYgorCisvKiBQb2ludCBNU1AgYXQgYW4gaW52YWxpZCBwYWdlIHRvIHRyYXAgaWYgaXQncyB1c2VkLiAtLW0gKi8KKwltb3ZsCSMoUEFHRVNJWkUpLCVkMAorCW1vdmMJJWQwLCVtc3AKKwltb3ZlcQkjLTEsJWQwCisJbW92c2IJJWQwLChBQ19TRUdNQVArMHgwKQorCisJamJzcglzdW4zX2luaXQKKworCWpic3IJYmFzZV90cmFwX2luaXQKKworICAgICAgICBqYnNyICAgIHN0YXJ0X2tlcm5lbAorCXRyYXAJIzE1CisKKyAgICAgICAgLmRhdGEKKyAgICAgICAgLmV2ZW4KK2twdDoKKyAgICAgICAgLmxvbmcgMAorYXZhaWxtZW06CisgICAgICAgIC5sb25nIDAKK3wgdG9kbzogcmVtb3ZlIG5leHQgdHdvLiAtLW0KK2lzX21lZHVzYToKKyAgICAgICAgLmxvbmcgMAorbTY4a19wZ3RhYmxlX2NhY2hlbW9kZToKKyAgICAgICAgLmxvbmcgMAorCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVkN2I3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYwpAQCAtMCwwICsxLDY3MSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB2YXJpb3VzIHJhbmRvbSBzeXN0ZW0gY2FsbHMgdGhhdAorICogaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIHNlcXVlbmNlIG9uIHRoZSBMaW51eC9tNjhrCisgKiBwbGF0Zm9ybS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tc2cuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2lwYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBzeXNfcGlwZSgpIGlzIHRoZSBub3JtYWwgQyBjYWxsaW5nIHN0YW5kYXJkIGZvciBjcmVhdGluZworICogYSBwaXBlLiBJdCdzIG5vdCB0aGUgd2F5IHVuaXggdHJhZGl0aW9uYWxseSBkb2VzIHRoaXMsIHRob3VnaC4KKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX3BpcGUodW5zaWduZWQgbG9uZyAqIGZpbGRlcykKK3sKKwlpbnQgZmRbMl07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkb19waXBlKGZkKTsKKwlpZiAoIWVycm9yKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZmlsZGVzLCBmZCwgMipzaXplb2YoaW50KSkpCisJCQllcnJvciA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyogY29tbW9uIGNvZGUgZm9yIG9sZCBhbmQgbmV3IG1tYXBzICovCitzdGF0aWMgaW5saW5lIGxvbmcgZG9fbW1hcDIoCisJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKK3sKKwlpbnQgZXJyb3IgPSAtRUJBREY7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVMTDsKKworCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKwlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7CisJCWZpbGUgPSBmZ2V0KGZkKTsKKwkJaWYgKCFmaWxlKQorCQkJZ290byBvdXQ7CisJfQorCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwllcnJvciA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJcmV0dXJuIGRvX21tYXAyKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBwZ29mZik7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KKyAqIGNhbGxzLiBMaW51eC9tNjhrIGNsb25lZCBMaW51eC9pMzg2LCB3aGljaCBkaWRuJ3QgdXNlIHRvIGJlIGFibGUgdG8KKyAqIGhhbmRsZSBtb3JlIHRoYW4gNCBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzLCBzbyB0aGVzZSBzeXN0ZW0gY2FsbHMKKyAqIHVzZWQgYSBtZW1vcnkgYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KKyAqLworCitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdW5zaWduZWQgbG9uZyBwcm90OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmZDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKK307CisKK2FzbWxpbmthZ2UgaW50IG9sZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgKmFyZykKK3sKKwlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IGE7CisJaW50IGVycm9yID0gLUVGQVVMVDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQorCQlnb3RvIG91dDsKKworCWEuZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOworCisJZXJyb3IgPSBkb19tbWFwMihhLmFkZHIsIGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIGEuZmQsIGEub2Zmc2V0ID4+IFBBR0VfU0hJRlQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworI2lmIDAKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3Q2NCB7CisJX191MzIgYWRkcjsKKwlfX3UzMiBsZW47CisJX191MzIgcHJvdDsKKwlfX3UzMiBmbGFnczsKKwlfX3U2NCBvZmZzZXQ7IC8qIDY0IGJpdHMgKi8KKwlfX3UzMiBmZDsKK307CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDY0KHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3Q2NCAqYXJnKQoreworCWludCBlcnJvciA9IC1FRkFVTFQ7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0NjQgYTsKKwl1bnNpZ25lZCBsb25nIHBnb2ZmOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKChsb25nKWEub2Zmc2V0ICYgflBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwZ29mZiA9IGEub2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJaWYgKChhLm9mZnNldCA+PiBQQUdFX1NISUZUKSAhPSBwZ29mZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShhLmZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKKwkJZXJyb3IgPSAtRUJBREY7CisJCWZpbGUgPSBmZ2V0KGEuZmQpOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dDsKKwl9CisJYS5mbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWVycm9yID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhLmFkZHIsIGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIHBnb2ZmKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKworc3RydWN0IHNlbF9hcmdfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIG47CisJZmRfc2V0ICppbnAsICpvdXRwLCAqZXhwOworCXN0cnVjdCB0aW1ldmFsICp0dnA7Cit9OworCithc21saW5rYWdlIGludCBvbGRfc2VsZWN0KHN0cnVjdCBzZWxfYXJnX3N0cnVjdCAqYXJnKQoreworCXN0cnVjdCBzZWxfYXJnX3N0cnVjdCBhOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCisJCXJldHVybiAtRUZBVUxUOworCS8qIHN5c19zZWxlY3QoKSBkb2VzIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgbG9ja2luZyAqLworCXJldHVybiBzeXNfc2VsZWN0KGEubiwgYS5pbnAsIGEub3V0cCwgYS5leHAsIGEudHZwKTsKK30KKworLyoKKyAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCisgKgorICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX2lwYyAodWludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsCisJCQlpbnQgdGhpcmQsIHZvaWQgKnB0ciwgbG9uZyBmaWZ0aCkKK3sKKwlpbnQgdmVyc2lvbiwgcmV0OworCisJdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwljYWxsICY9IDB4ZmZmZjsKKworCWlmIChjYWxsIDw9IFNFTUNUTCkKKwkJc3dpdGNoIChjYWxsKSB7CisJCWNhc2UgU0VNT1A6CisJCQlyZXR1cm4gc3lzX3NlbW9wIChmaXJzdCwgKHN0cnVjdCBzZW1idWYgKilwdHIsIHNlY29uZCk7CisJCWNhc2UgU0VNR0VUOgorCQkJcmV0dXJuIHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKKwkJY2FzZSBTRU1DVEw6IHsKKwkJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKKwkJCWlmICghcHRyKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgKiopIHB0cikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCWlmIChjYWxsIDw9IE1TR0NUTCkKKwkJc3dpdGNoIChjYWxsKSB7CisJCWNhc2UgTVNHU05EOgorCQkJcmV0dXJuIHN5c19tc2dzbmQgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiAqKSBwdHIsCisJCQkJCSAgc2Vjb25kLCB0aGlyZCk7CisJCWNhc2UgTVNHUkNWOgorCQkJc3dpdGNoICh2ZXJzaW9uKSB7CisJCQljYXNlIDA6IHsKKwkJCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7CisJCQkJaWYgKCFwdHIpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWlmIChjb3B5X2Zyb21fdXNlciAoJnRtcCwKKwkJCQkJCSAgICAoc3RydWN0IGlwY19rbHVkZ2UgKilwdHIsCisJCQkJCQkgICAgc2l6ZW9mICh0bXApKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAorCQkJCQkJICAgdG1wLm1zZ3R5cCwgdGhpcmQpOworCQkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAorCQkJCQkJICAgKHN0cnVjdCBtc2didWYgKikgcHRyLAorCQkJCQkJICAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOworCQkJfQorCQljYXNlIE1TR0dFVDoKKwkJCXJldHVybiBzeXNfbXNnZ2V0ICgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOworCQljYXNlIE1TR0NUTDoKKwkJCXJldHVybiBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLAorCQkJCQkgICAoc3RydWN0IG1zcWlkX2RzICopIHB0cik7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCWlmIChjYWxsIDw9IFNITUNUTCkKKwkJc3dpdGNoIChjYWxsKSB7CisJCWNhc2UgU0hNQVQ6CisJCQlzd2l0Y2ggKHZlcnNpb24pIHsKKwkJCWRlZmF1bHQ6IHsKKwkJCQl1bG9uZyByYWRkcjsKKwkJCQlyZXQgPSBkb19zaG1hdCAoZmlyc3QsIChjaGFyICopIHB0ciwKKwkJCQkJCSBzZWNvbmQsICZyYWRkcik7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgKikgdGhpcmQpOworCQkJfQorCQkJfQorCQljYXNlIFNITURUOgorCQkJcmV0dXJuIHN5c19zaG1kdCAoKGNoYXIgKilwdHIpOworCQljYXNlIFNITUdFVDoKKwkJCXJldHVybiBzeXNfc2htZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7CisJCWNhc2UgU0hNQ1RMOgorCQkJcmV0dXJuIHN5c19zaG1jdGwgKGZpcnN0LCBzZWNvbmQsCisJCQkJCSAgIChzdHJ1Y3Qgc2htaWRfZHMgKikgcHRyKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogQ29udmVydCB2aXJ0dWFsICh1c2VyKSBhZGRyZXNzIFZBRERSIHRvIHBoeXNpY2FsIGFkZHJlc3MgUEFERFIgKi8KKyNkZWZpbmUgdmlydF90b19waHlzXzA0MCh2YWRkcikJCQkJCQlcCisoewkJCQkJCQkJCVwKKyAgdW5zaWduZWQgbG9uZyBfbW11c3IsIF9wYWRkcjsJCQkJCQlcCisJCQkJCQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNDBcblx0IgkJCQlcCisJCQkicHRlc3RyICglMSlcblx0IgkJCQlcCisJCQkibW92ZWMgJSVtbXVzciwlMFxuXHQiCQkJCVwKKwkJCSIuY2hpcCA2OGsiCQkJCQlcCisJCQk6ICI9ciIgKF9tbXVzcikJCQkJCVwKKwkJCTogImEiICh2YWRkcikpOwkJCQkJXAorICBfcGFkZHIgPSAoX21tdXNyICYgTU1VX1JfMDQwKSA/IChfbW11c3IgJiBQQUdFX01BU0spIDogMDsJCVwKKyAgX3BhZGRyOwkJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSBpbnQKK2NhY2hlX2ZsdXNoXzA0MCAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2NvcGUsIGludCBjYWNoZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGk7CisKKyAgc3dpdGNoIChzY29wZSkKKyAgICB7CisgICAgY2FzZSBGTFVTSF9TQ09QRV9BTEw6CisgICAgICBzd2l0Y2ggKGNhY2hlKQorCXsKKwljYXNlIEZMVVNIX0NBQ0hFX0RBVEE6CisJICAvKiBUaGlzIG5vcCBpcyBuZWVkZWQgZm9yIHNvbWUgYnJva2VuIHZlcnNpb25zIG9mIHRoZSA2ODA0MC4gICovCisJICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcFxuXHQiCisJCQkJIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkiY3B1c2hhICVkY1xuXHQiCisJCQkJIi5jaGlwIDY4ayIpOworCSAgYnJlYWs7CisJY2FzZSBGTFVTSF9DQUNIRV9JTlNOOgorCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSIuY2hpcCA2ODA0MFxuXHQiCisJCQkJImNwdXNoYSAlaWNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSIuY2hpcCA2ODA0MFxuXHQiCisJCQkJImNwdXNoYSAlYmNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGTFVTSF9TQ09QRV9MSU5FOgorICAgICAgLyogRmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbWFwcGVkIHBhZ2UgaW4gdGhlCisJIGFkZHJlc3MgcmFuZ2UuICAqLworICAgICAgaWYgKChwYWRkciA9IHZpcnRfdG9fcGh5c18wNDAoYWRkcikpKSB7CisgICAgICAgIHBhZGRyICs9IGFkZHIgJiB+KFBBR0VfTUFTSyB8IDE1KTsKKyAgICAgICAgbGVuID0gKGxlbiArIChhZGRyICYgMTUpICsgMTUpID4+IDQ7CisgICAgICB9IGVsc2UgeworCXVuc2lnbmVkIGxvbmcgdG1wID0gUEFHRV9TSVpFIC0gKGFkZHIgJiB+UEFHRV9NQVNLKTsKKworCWlmIChsZW4gPD0gdG1wKQorCSAgcmV0dXJuIDA7CisJYWRkciArPSB0bXA7CisJbGVuIC09IHRtcDsKKwl0bXAgPSBQQUdFX1NJWkU7CisJZm9yICg7OykKKwkgIHsKKwkgICAgaWYgKChwYWRkciA9IHZpcnRfdG9fcGh5c18wNDAoYWRkcikpKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAobGVuIDw9IHRtcCkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgYWRkciArPSB0bXA7CisJICAgIGxlbiAtPSB0bXA7CisJICB9CisJbGVuID0gKGxlbiArIDE1KSA+PiA0OworICAgICAgfQorICAgICAgaSA9IChQQUdFX1NJWkUgLSAocGFkZHIgJiB+UEFHRV9NQVNLKSkgPj4gNDsKKyAgICAgIHdoaWxlIChsZW4tLSkKKwl7CisJICBzd2l0Y2ggKGNhY2hlKQorCSAgICB7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfREFUQToKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcFxuXHQiCisJCQkJICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICJjcHVzaGwgJSVkYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9JTlNOOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgImNwdXNobCAlJWljLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0JPVEg6CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAiY3B1c2hsICUlYmMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGlmICghLS1pICYmIGxlbikKKwkgICAgeworCSAgICAgIC8qCisJICAgICAgICogTm8gbmVlZCB0byBwYWdlIGFsaWduIGhlcmUgc2luY2UgaXQgaXMgZG9uZSBieQorCSAgICAgICAqIHZpcnRfdG9fcGh5c18wNDAoKS4KKwkgICAgICAgKi8KKwkgICAgICBhZGRyICs9IFBBR0VfU0laRTsKKwkgICAgICBpID0gUEFHRV9TSVpFIC8gMTY7CisJICAgICAgLyogUmVjb21wdXRlIHBoeXNpY2FsIGFkZHJlc3Mgd2hlbiBjcm9zc2luZyBhIHBhZ2UKKwkgICAgICAgICBib3VuZGFyeS4gKi8KKwkgICAgICBmb3IgKDs7KQorCQl7CisJCSAgaWYgKChwYWRkciA9IHZpcnRfdG9fcGh5c18wNDAoYWRkcikpKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKGxlbiA8PSBpKQorCQkgICAgcmV0dXJuIDA7CisJCSAgbGVuIC09IGk7CisJCSAgYWRkciArPSBQQUdFX1NJWkU7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICBwYWRkciArPSAxNjsKKwl9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBGTFVTSF9TQ09QRV9QQUdFOgorICAgICAgbGVuICs9IChhZGRyICYgflBBR0VfTUFTSykgKyAoUEFHRV9TSVpFIC0gMSk7CisgICAgICBmb3IgKGxlbiA+Pj0gUEFHRV9TSElGVDsgbGVuLS07IGFkZHIgKz0gUEFHRV9TSVpFKQorCXsKKwkgIGlmICghKHBhZGRyID0gdmlydF90b19waHlzXzA0MChhZGRyKSkpCisJICAgIGNvbnRpbnVlOworCSAgc3dpdGNoIChjYWNoZSkKKwkgICAgeworCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0RBVEE6CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAiY3B1c2hwICUlZGMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcFxuXHQiCisJCQkJICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICJjcHVzaHAgJSVpYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgImNwdXNocCAlJWJjLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSB2aXJ0X3RvX3BoeXNfMDYwKHZhZGRyKQkJCQlcCisoewkJCQkJCQlcCisgIHVuc2lnbmVkIGxvbmcgcGFkZHI7CQkJCQlcCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgkJXAorCQkJInBscGFyICglMClcblx0IgkJXAorCQkJIi5jaGlwIDY4ayIJCQlcCisJCQk6ICI9YSIgKHBhZGRyKQkJCVwKKwkJCTogIjAiICh2YWRkcikpOwkJCVwKKyAgKHBhZGRyKTsgLyogWFhYICovCQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIGludAorY2FjaGVfZmx1c2hfMDYwICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBzY29wZSwgaW50IGNhY2hlLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKyAgdW5zaWduZWQgbG9uZyBwYWRkciwgaTsKKworICAvKgorICAgKiA2ODA2MCBtYW51YWwgc2F5czoKKyAgICogIGNwdXNoICVkYyA6IGZsdXNoIERDLCByZW1haW5zIHZhbGlkICh3aXRoIG91ciAlY2FjciBzZXR1cCkKKyAgICogIGNwdXNoICVpYyA6IGludmFsaWRhdGUgSUMKKyAgICogIGNwdXNoICViYyA6IGZsdXNoIERDICsgaW52YWxpZGF0ZSBJQworICAgKi8KKyAgc3dpdGNoIChzY29wZSkKKyAgICB7CisgICAgY2FzZSBGTFVTSF9TQ09QRV9BTEw6CisgICAgICBzd2l0Y2ggKGNhY2hlKQorCXsKKwljYXNlIEZMVVNIX0NBQ0hFX0RBVEE6CisJICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkiY3B1c2hhICVkY1xuXHQiCisJCQkJIi5jaGlwIDY4ayIpOworCSAgYnJlYWs7CisJY2FzZSBGTFVTSF9DQUNIRV9JTlNOOgorCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJImNwdXNoYSAlaWNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJImNwdXNoYSAlYmNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGTFVTSF9TQ09QRV9MSU5FOgorICAgICAgLyogRmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbWFwcGVkIHBhZ2UgaW4gdGhlCisJIGFkZHJlc3MgcmFuZ2UuICAqLworICAgICAgbGVuICs9IGFkZHIgJiAxNTsKKyAgICAgIGFkZHIgJj0gLTE2OworICAgICAgaWYgKCEocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDYwKGFkZHIpKSkgeworCXVuc2lnbmVkIGxvbmcgdG1wID0gUEFHRV9TSVpFIC0gKGFkZHIgJiB+UEFHRV9NQVNLKTsKKworCWlmIChsZW4gPD0gdG1wKQorCSAgcmV0dXJuIDA7CisJYWRkciArPSB0bXA7CisJbGVuIC09IHRtcDsKKwl0bXAgPSBQQUdFX1NJWkU7CisJZm9yICg7OykKKwkgIHsKKwkgICAgaWYgKChwYWRkciA9IHZpcnRfdG9fcGh5c18wNjAoYWRkcikpKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAobGVuIDw9IHRtcCkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgYWRkciArPSB0bXA7CisJICAgIGxlbiAtPSB0bXA7CisJICB9CisgICAgICB9CisgICAgICBsZW4gPSAobGVuICsgMTUpID4+IDQ7CisgICAgICBpID0gKFBBR0VfU0laRSAtIChwYWRkciAmIH5QQUdFX01BU0spKSA+PiA0OworICAgICAgd2hpbGUgKGxlbi0tKQorCXsKKwkgIHN3aXRjaCAoY2FjaGUpCisJICAgIHsKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9EQVRBOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAiY3B1c2hsICUlZGMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkgICAgImNwdXNobCAlJWljLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0JPVEg6CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJICAgICJjcHVzaGwgJSViYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgaWYgKCEtLWkgJiYgbGVuKQorCSAgICB7CisKKwkgICAgICAvKgorCSAgICAgICAqIFdlIGp1c3Qgd2FudCB0byBqdW1wIHRvIHRoZSBmaXJzdCBjYWNoZSBsaW5lCisJICAgICAgICogaW4gdGhlIG5leHQgcGFnZS4KKwkgICAgICAgKi8KKwkgICAgICBhZGRyICs9IFBBR0VfU0laRTsKKwkgICAgICBhZGRyICY9IFBBR0VfTUFTSzsKKworCSAgICAgIGkgPSBQQUdFX1NJWkUgLyAxNjsKKwkgICAgICAvKiBSZWNvbXB1dGUgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIGNyb3NzaW5nIGEgcGFnZQorCSAgICAgICAgIGJvdW5kYXJ5LiAqLworCSAgICAgIGZvciAoOzspCisJICAgICAgICB7CisJICAgICAgICAgIGlmICgocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDYwKGFkZHIpKSkKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgaWYgKGxlbiA8PSBpKQorCSAgICAgICAgICAgIHJldHVybiAwOworCSAgICAgICAgICBsZW4gLT0gaTsKKwkgICAgICAgICAgYWRkciArPSBQQUdFX1NJWkU7CisJICAgICAgICB9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcGFkZHIgKz0gMTY7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgRkxVU0hfU0NPUEVfUEFHRToKKyAgICAgIGxlbiArPSAoYWRkciAmIH5QQUdFX01BU0spICsgKFBBR0VfU0laRSAtIDEpOworICAgICAgYWRkciAmPSBQQUdFX01BU0s7CS8qIFdvcmthcm91bmQgZm9yIGJ1ZyBpbiBzb21lCisJCQkJICAgcmV2aXNpb25zIG9mIHRoZSA2ODA2MCAqLworICAgICAgZm9yIChsZW4gPj49IFBBR0VfU0hJRlQ7IGxlbi0tOyBhZGRyICs9IFBBR0VfU0laRSkKKwl7CisJICBpZiAoIShwYWRkciA9IHZpcnRfdG9fcGh5c18wNjAoYWRkcikpKQorCSAgICBjb250aW51ZTsKKwkgIHN3aXRjaCAoY2FjaGUpCisJICAgIHsKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9EQVRBOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAiY3B1c2hwICUlZGMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkgICAgImNwdXNocCAlJWljLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0JPVEg6CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJICAgICJjcHVzaHAgJSViYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIHN5c19jYWNoZWZsdXNoIC0tIGZsdXNoIChwYXJ0IG9mKSB0aGUgcHJvY2Vzc29yIGNhY2hlLiAgKi8KK2FzbWxpbmthZ2UgaW50CitzeXNfY2FjaGVmbHVzaCAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2NvcGUsIGludCBjYWNoZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlsb2NrX2tlcm5lbCgpOworCWlmIChzY29wZSA8IEZMVVNIX1NDT1BFX0xJTkUgfHwgc2NvcGUgPiBGTFVTSF9TQ09QRV9BTEwgfHwKKwkgICAgY2FjaGUgJiB+RkxVU0hfQ0FDSEVfQk9USCkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2NvcGUgPT0gRkxVU0hfU0NPUEVfQUxMKSB7CisJCS8qIE9ubHkgdGhlIHN1cGVydXNlciBtYXkgZXhwbGljaXRseSBmbHVzaCB0aGUgd2hvbGUgY2FjaGUuICovCisJCXJldCA9IC1FUEVSTTsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJlZ2lvbiBhY3R1YWxseSBiZWxvbmdzCisJCSAqIHRvIHRoaXMgcHJvY2Vzcy4KKwkJICovCisJCXZtYSA9IGZpbmRfdm1hIChjdXJyZW50LT5tbSwgYWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJCS8qIENoZWNrIGZvciBvdmVyZmxvdy4gICovCisJCWlmIChhZGRyICsgbGVuIDwgYWRkcikKKwkJCWdvdG8gb3V0OworCQlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkciArIGxlbiA+IHZtYS0+dm1fZW5kKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CisJCWlmIChzY29wZSA9PSBGTFVTSF9TQ09QRV9MSU5FICYmIGxlbiA8IDI1NikgeworCQkJdW5zaWduZWQgbG9uZyBjYWNyOworCQkJX19hc21fXyAoIm1vdmVjICUlY2FjciwgJTAiIDogIj1yIiAoY2FjcikpOworCQkJaWYgKGNhY2hlICYgRkxVU0hfQ0FDSEVfSU5TTikKKwkJCQljYWNyIHw9IDQ7CisJCQlpZiAoY2FjaGUgJiBGTFVTSF9DQUNIRV9EQVRBKQorCQkJCWNhY3IgfD0gMHg0MDA7CisJCQlsZW4gPj49IDI7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjICUxLCAlJWNhYXJcblx0IgorCQkJCQkJICAgICAgIm1vdmVjICUwLCAlJWNhY3IiCisJCQkJCQkgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkJCSAgICAgIDogInIiIChjYWNyKSwgInIiIChhZGRyKSk7CisJCQkJYWRkciArPSA0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRmx1c2ggdGhlIHdob2xlIGNhY2hlLCBldmVuIGlmIHBhZ2UgZ3JhbnVsYXJpdHkgcmVxdWVzdGVkLiAqLworCQkJdW5zaWduZWQgbG9uZyBjYWNyOworCQkJX19hc21fXyAoIm1vdmVjICUlY2FjciwgJTAiIDogIj1yIiAoY2FjcikpOworCQkJaWYgKGNhY2hlICYgRkxVU0hfQ0FDSEVfSU5TTikKKwkJCQljYWNyIHw9IDg7CisJCQlpZiAoY2FjaGUgJiBGTFVTSF9DQUNIRV9EQVRBKQorCQkJCWNhY3IgfD0gMHg4MDA7CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjICUwLCAlJWNhY3IiIDogOiAiciIgKGNhY3IpKTsKKwkJfQorCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCSAgICAvKgorCSAgICAgKiAwNDAgb3IgMDYwOiBkb24ndCBibGluZGx5IHRydXN0ICdzY29wZScsIHNvbWVvbmUgY291bGQKKwkgICAgICogdHJ5IHRvIGZsdXNoIGEgZmV3IG1lZ3Mgb2YgbWVtb3J5LgorCSAgICAgKi8KKworCSAgICBpZiAobGVuPj0zKlBBR0VfU0laRSAmJiBzY29wZTxGTFVTSF9TQ09QRV9QQUdFKQorCSAgICAgICAgc2NvcGU9RkxVU0hfU0NPUEVfUEFHRTsKKwkgICAgaWYgKGxlbj49MTAqUEFHRV9TSVpFICYmIHNjb3BlPEZMVVNIX1NDT1BFX0FMTCkKKwkgICAgICAgIHNjb3BlPUZMVVNIX1NDT1BFX0FMTDsKKwkgICAgaWYgKENQVV9JU18wNDApIHsKKwkJcmV0ID0gY2FjaGVfZmx1c2hfMDQwIChhZGRyLCBzY29wZSwgY2FjaGUsIGxlbik7CisJICAgIH0gZWxzZSBpZiAoQ1BVX0lTXzA2MCkgeworCQlyZXQgPSBjYWNoZV9mbHVzaF8wNjAgKGFkZHIsIHNjb3BlLCBjYWNoZSwgbGVuKTsKKwkgICAgfQorCX0KK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2dldHBhZ2VzaXplKHZvaWQpCit7CisJcmV0dXJuIFBBR0VfU0laRTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3ZTE5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG02OGstc3BlY2lmaWMgdGltZSBoYW5kbGluZyBkZXRhaWxzLgorICogTW9zdCBvZiB0aGUgc3R1ZmYgaXMgbG9jYXRlZCBpbiB0aGUgbWFjaGluZSBzcGVjaWZpYyBmaWxlcy4KKyAqCisgKiAxOTk3LTA5LTEwCVVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAnOTYKKyAqCQkiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogQ09ORklHX0hFQVJUQkVBVCAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorCit1NjQgamlmZmllc182NCA9IElOSVRJQUxfSklGRklFUzsKKworRVhQT1JUX1NZTUJPTChqaWZmaWVzXzY0KTsKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKyAgaWYgKG1hY2hfc2V0X2Nsb2NrX21tc3MpCisgICAgcmV0dXJuIG1hY2hfc2V0X2Nsb2NrX21tc3MgKG5vd3RpbWUpOworICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiB0aW1lcl9pbnRlcnJ1cHQoKSBuZWVkcyB0byBrZWVwIHVwIHRoZSByZWFsLXRpbWUgY2xvY2ssCisgKiBhcyB3ZWxsIGFzIGNhbGwgdGhlICJkb190aW1lcigpIiByb3V0aW5lIGV2ZXJ5IGNsb2NrdGljaworICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJZG9fdGltZXIocmVncyk7CisjaWZuZGVmIENPTkZJR19TTVAKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOworI2VuZGlmCisJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcsIHJlZ3MpOworCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorCS8qIHVzZSBwb3dlciBMRUQgYXMgYSBoZWFydGJlYXQgaW5zdGVhZCAtLSBtdWNoIG1vcmUgdXNlZnVsCisJICAgZm9yIGRlYnVnZ2luZyAtLSBiYXNlZCBvbiB0aGUgdmVyc2lvbiBmb3IgUFJlUCBieSBDb3J0ICovCisJLyogYWN0cyBsaWtlIGFuIGFjdHVhbCBoZWFydCBiZWF0IC0tIGllIHRodW1wLXRodW1wLXBhdXNlLi4uICovCisJaWYgKG1hY2hfaGVhcnRiZWF0KSB7CisJICAgIHN0YXRpYyB1bnNpZ25lZCBjbnQgPSAwLCBwZXJpb2QgPSAwLCBkaXN0ID0gMDsKKworCSAgICBpZiAoY250ID09IDAgfHwgY250ID09IGRpc3QpCisJCW1hY2hfaGVhcnRiZWF0KCAxICk7CisJICAgIGVsc2UgaWYgKGNudCA9PSA3IHx8IGNudCA9PSBkaXN0KzcpCisJCW1hY2hfaGVhcnRiZWF0KCAwICk7CisKKwkgICAgaWYgKCsrY250ID4gcGVyaW9kKSB7CisJCWNudCA9IDA7CisJCS8qIFRoZSBoeXBlcmJvbGljIGZ1bmN0aW9uIGJlbG93IG1vZGlmaWVzIHRoZSBoZWFydGJlYXQgcGVyaW9kCisJCSAqIGxlbmd0aCBpbiBkZXBlbmRlbmN5IG9mIHRoZSBjdXJyZW50ICg1bWluKSBsb2FkLiBJdCBnb2VzCisJCSAqIHRocm91Z2ggdGhlIHBvaW50cyBmKDApPTEyNiwgZigxKT04NiwgZig1KT01MSwKKwkJICogZihpbmYpLT4zMC4gKi8KKwkJcGVyaW9kID0gKCg2NzI8PEZTSElGVCkvKDUqYXZlbnJ1blswXSsoNzw8RlNISUZUKSkpICsgMzA7CisJCWRpc3QgPSBwZXJpb2QgLyA0OworCSAgICB9CisJfQorI2VuZGlmIC8qIENPTkZJR19IRUFSVEJFQVQgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgdGltZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHJ0Y190aW1lIHRpbWU7CisKKwlpZiAobWFjaF9od2NsaykgeworCQltYWNoX2h3Y2xrKDAsICZ0aW1lKTsKKworCQlpZiAoKHRpbWUudG1feWVhciArPSAxOTAwKSA8IDE5NzApCisJCQl0aW1lLnRtX3llYXIgKz0gMTAwOworCQl4dGltZS50dl9zZWMgPSBta3RpbWUodGltZS50bV95ZWFyLCB0aW1lLnRtX21vbiwgdGltZS50bV9tZGF5LAorCQkJCSAgICAgIHRpbWUudG1faG91ciwgdGltZS50bV9taW4sIHRpbWUudG1fc2VjKTsKKwkJeHRpbWUudHZfbnNlYyA9IDA7CisJfQorCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyA9IC14dGltZS50dl9zZWM7CisKKwltYWNoX3NjaGVkX2luaXQodGltZXJfaW50ZXJydXB0KTsKK30KKworLyoKKyAqIFRoaXMgdmVyc2lvbiBvZiBnZXR0aW1lb2ZkYXkgaGFzIG5lYXIgbWljcm9zZWNvbmQgcmVzb2x1dGlvbi4KKyAqLwordm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgc2VxOworCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjLCBsb3N0OworCXVuc2lnbmVkIGxvbmcgbWF4X250cF90aWNrID0gdGlja191c2VjIC0gdGlja2FkajsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwkJdXNlYyA9IG1hY2hfZ2V0dGltZW9mZnNldCgpOworCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKKworCQkvKgorCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jaworCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KKwkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpIHsKKwkJCXVzZWMgPSBtaW4odXNlYywgbWF4X250cF90aWNrKTsKKworCQkJaWYgKGxvc3QpCisJCQkJdXNlYyArPSBsb3N0ICogbWF4X250cF90aWNrOworCQl9CisJCWVsc2UgaWYgKHVubGlrZWx5KGxvc3QpKQorCQkJdXNlYyArPSBsb3N0ICogdGlja191c2VjOworCisJCXNlYyA9IHh0aW1lLnR2X3NlYzsKKwkJdXNlYyArPSB4dGltZS50dl9uc2VjLzEwMDA7CisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CisKKworCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKKwkJdXNlYyAtPSAxMDAwMDAwOworCQlzZWMrKzsKKwl9CisKKwl0di0+dHZfc2VjID0gc2VjOworCXR2LT50dl91c2VjID0gdXNlYzsKK30KKworRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOworCitpbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCit7CisJdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7CisJbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOworCWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKKworCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOworCS8qIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCB0aGUgeHRpbWUudHZfbnNlYworCSAqIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMKKwkgKiBpcyB2YWx1ZSBhdCB0aGUgbGFzdCB0aWNrLgorCSAqIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkKKwkgKiB3b3VsZCBoYXZlIGRvbmUsIGFuZCB0aGVuIHVuZG8gaXQhCisJICovCisJbnNlYyAtPSAxMDAwICogKG1hY2hfZ2V0dGltZW9mZnNldCgpICsKKwkJCShqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqICgxMDAwMDAwIC8gSFopKTsKKworCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CisJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKKworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKKworCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOworCWNsb2NrX3dhc19zZXQoKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworCisvKgorICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbnMgdW5pdHMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQoreworICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKWppZmZpZXMqKDEwMDAwMDAwMDAvSFopOworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RyYXBzLmMgYi9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYwpAQCAtMCwwICsxLDEyMjcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogIDY4MDQwIGZpeGVzIGJ5IE1pY2hhZWwgUmF1c2NoCisgKiAgNjgwNDAgZml4ZXMgYnkgTWFydGluIEFwZWwKKyAqICA2ODA0MCBmaXhlcyBhbmQgd3JpdGViYWNrIGJ5IFJpY2hhcmQgWmlkbGlja3kKKyAqICA2ODA2MCBmaXhlcyBieSBSb21hbiBIb2RlaworICogIDY4MDYwIGZpeGVzIGJ5IEplc3BlciBTa292CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBTZXRzIHVwIGFsbCBleGNlcHRpb24gdmVjdG9ycworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorCisvKiBhc3NlbWJsZXIgcm91dGluZXMgKi8KK2FzbWxpbmthZ2Ugdm9pZCBzeXN0ZW1fY2FsbCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBidXNlcnIodm9pZCk7Cithc21saW5rYWdlIHZvaWQgdHJhcCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBpbnRoYW5kbGVyKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIG5taWhhbmRsZXIodm9pZCk7CisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCithc21saW5rYWdlIHZvaWQgZnB1X2VtdSh2b2lkKTsKKyNlbmRpZgorCitlX3ZlY3RvciB2ZWN0b3JzWzI1Nl0gPSB7CisJW1ZFQ19CVVNFUlJdCT0gYnVzZXJyLAorCVtWRUNfQUREUkVSUl0JPSB0cmFwLAorCVtWRUNfSUxMRUdBTF0JPSB0cmFwLAorCVtWRUNfWkVST0RJVl0JPSB0cmFwLAorCVtWRUNfQ0hLXQk9IHRyYXAsCisJW1ZFQ19UUkFQXQk9IHRyYXAsCisJW1ZFQ19QUklWXQk9IHRyYXAsCisJW1ZFQ19UUkFDRV0JPSB0cmFwLAorCVtWRUNfTElORTEwXQk9IHRyYXAsCisJW1ZFQ19MSU5FMTFdCT0gdHJhcCwKKwlbVkVDX1JFU1YxMl0JPSB0cmFwLAorCVtWRUNfQ09QUk9DXQk9IHRyYXAsCisJW1ZFQ19GT1JNQVRdCT0gdHJhcCwKKwlbVkVDX1VOSU5UXQk9IHRyYXAsCisJW1ZFQ19SRVNWMTZdCT0gdHJhcCwKKwlbVkVDX1JFU1YxN10JPSB0cmFwLAorCVtWRUNfUkVTVjE4XQk9IHRyYXAsCisJW1ZFQ19SRVNWMTldCT0gdHJhcCwKKwlbVkVDX1JFU1YyMF0JPSB0cmFwLAorCVtWRUNfUkVTVjIxXQk9IHRyYXAsCisJW1ZFQ19SRVNWMjJdCT0gdHJhcCwKKwlbVkVDX1JFU1YyM10JPSB0cmFwLAorCVtWRUNfU1BVUl0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UMV0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UMl0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UM10JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UNF0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UNV0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UNl0JPSBpbnRoYW5kbGVyLAorCVtWRUNfSU5UN10JPSBpbnRoYW5kbGVyLAorCVtWRUNfU1lTXQk9IHN5c3RlbV9jYWxsLAorCVtWRUNfVFJBUDFdCT0gdHJhcCwKKwlbVkVDX1RSQVAyXQk9IHRyYXAsCisJW1ZFQ19UUkFQM10JPSB0cmFwLAorCVtWRUNfVFJBUDRdCT0gdHJhcCwKKwlbVkVDX1RSQVA1XQk9IHRyYXAsCisJW1ZFQ19UUkFQNl0JPSB0cmFwLAorCVtWRUNfVFJBUDddCT0gdHJhcCwKKwlbVkVDX1RSQVA4XQk9IHRyYXAsCisJW1ZFQ19UUkFQOV0JPSB0cmFwLAorCVtWRUNfVFJBUDEwXQk9IHRyYXAsCisJW1ZFQ19UUkFQMTFdCT0gdHJhcCwKKwlbVkVDX1RSQVAxMl0JPSB0cmFwLAorCVtWRUNfVFJBUDEzXQk9IHRyYXAsCisJW1ZFQ19UUkFQMTRdCT0gdHJhcCwKKwlbVkVDX1RSQVAxNV0JPSB0cmFwLAorfTsKKworLyogbm1pIGhhbmRsZXIgZm9yIHRoZSBBbWlnYSAqLworYXNtKCIudGV4dFxuIgorICAgIF9fQUxJR05fU1RSICJcbiIKKyAgICAibm1paGFuZGxlcjogcnRlIik7CisKKy8qCisgKiB0aGlzIG11c3QgYmUgY2FsbGVkIHZlcnkgZWFybHkgYXMgdGhlIGtlcm5lbCBtaWdodAorICogdXNlIHNvbWUgaW5zdHJ1Y3Rpb24gdGhhdCBhcmUgZW11bGF0ZWQgb24gdGhlIDA2MAorICovCit2b2lkIF9faW5pdCBiYXNlX3RyYXBfaW5pdCh2b2lkKQoreworCWlmKE1BQ0hfSVNfU1VOM1gpIHsKKwkJZXh0ZXJuIGVfdmVjdG9yICpzdW4zeF9wcm9tX3ZicjsKKworCQlfX2FzbV9fIHZvbGF0aWxlICgibW92ZWMgJSV2YnIsICUwIiA6ICI9ciIgKCh2b2lkKilzdW4zeF9wcm9tX3ZicikpOworCX0KKworCS8qIHNldHVwIHRoZSBleGNlcHRpb24gdmVjdG9yIHRhYmxlICovCisJX19hc21fXyB2b2xhdGlsZSAoIm1vdmVjICUwLCUldmJyIiA6IDogInIiICgodm9pZCopdmVjdG9ycykpOworCisJaWYgKENQVV9JU18wNjApIHsKKwkJLyogc2V0IHVwIElTUCBlbnRyeSBwb2ludHMgKi8KKwkJYXNtbGlua2FnZSB2b2lkIHVuaW1wX3ZlYyh2b2lkKSBhc20gKCJfMDYwX2lzcF91bmltcCIpOworCisJCXZlY3RvcnNbVkVDX1VOSU1QSUldID0gdW5pbXBfdmVjOworCX0KK30KKwordm9pZCBfX2luaXQgdHJhcF9pbml0ICh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gNDg7IGkgPCA2NDsgaSsrKQorCQlpZiAoIXZlY3RvcnNbaV0pCisJCQl2ZWN0b3JzW2ldID0gdHJhcDsKKworCWZvciAoaSA9IDY0OyBpIDwgMjU2OyBpKyspCisJCXZlY3RvcnNbaV0gPSBpbnRoYW5kbGVyOworCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisJaWYgKEZQVV9JU19FTVUpCisJCXZlY3RvcnNbVkVDX0xJTkUxMV0gPSBmcHVfZW11OworI2VuZGlmCisKKwlpZiAoQ1BVX0lTXzA0MCAmJiAhRlBVX0lTX0VNVSkgeworCQkvKiBzZXQgdXAgRlBTUCBlbnRyeSBwb2ludHMgKi8KKwkJYXNtbGlua2FnZSB2b2lkIGR6X3ZlYyh2b2lkKSBhc20gKCJkeiIpOworCQlhc21saW5rYWdlIHZvaWQgaW5leF92ZWModm9pZCkgYXNtICgiaW5leCIpOworCQlhc21saW5rYWdlIHZvaWQgb3ZmbF92ZWModm9pZCkgYXNtICgib3ZmbCIpOworCQlhc21saW5rYWdlIHZvaWQgdW5mbF92ZWModm9pZCkgYXNtICgidW5mbCIpOworCQlhc21saW5rYWdlIHZvaWQgc25hbl92ZWModm9pZCkgYXNtICgic25hbiIpOworCQlhc21saW5rYWdlIHZvaWQgb3BlcnJfdmVjKHZvaWQpIGFzbSAoIm9wZXJyIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBic3VuX3ZlYyh2b2lkKSBhc20gKCJic3VuIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBmbGluZV92ZWModm9pZCkgYXNtICgiZmxpbmUiKTsKKwkJYXNtbGlua2FnZSB2b2lkIHVuc3VwcF92ZWModm9pZCkgYXNtICgidW5zdXBwIik7CisKKwkJdmVjdG9yc1tWRUNfRlBESVZaXSA9IGR6X3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBJUl0gPSBpbmV4X3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBPVkVSXSA9IG92ZmxfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUFVOREVSXSA9IHVuZmxfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUE5BTl0gPSBzbmFuX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBPRV0gPSBvcGVycl92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQQlJVQ10gPSBic3VuX3ZlYzsKKwkJdmVjdG9yc1tWRUNfTElORTExXSA9IGZsaW5lX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBVTlNVUF0gPSB1bnN1cHBfdmVjOworCX0KKworCWlmIChDUFVfSVNfMDYwICYmICFGUFVfSVNfRU1VKSB7CisJCS8qIHNldCB1cCBJRlBTUCBlbnRyeSBwb2ludHMgKi8KKwkJYXNtbGlua2FnZSB2b2lkIHNuYW5fdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF9zbmFuIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBvcGVycl92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX29wZXJyIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBvdmZsX3ZlYyh2b2lkKSBhc20gKCJfMDYwX2Zwc3Bfb3ZmbCIpOworCQlhc21saW5rYWdlIHZvaWQgdW5mbF92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX3VuZmwiKTsKKwkJYXNtbGlua2FnZSB2b2lkIGR6X3ZlYyh2b2lkKSBhc20gKCJfMDYwX2Zwc3BfZHoiKTsKKwkJYXNtbGlua2FnZSB2b2lkIGluZXhfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF9pbmV4Iik7CisJCWFzbWxpbmthZ2Ugdm9pZCBmbGluZV92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX2ZsaW5lIik7CisJCWFzbWxpbmthZ2Ugdm9pZCB1bnN1cHBfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF91bnN1cHAiKTsKKwkJYXNtbGlua2FnZSB2b2lkIGVmZmFkZF92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX2VmZmFkZCIpOworCisJCXZlY3RvcnNbVkVDX0ZQTkFOXSA9IHNuYW5fdmVjOworCQl2ZWN0b3JzW1ZFQ19GUE9FXSA9IG9wZXJyX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBPVkVSXSA9IG92ZmxfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUFVOREVSXSA9IHVuZmxfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUERJVlpdID0gZHpfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUElSXSA9IGluZXhfdmVjOworCQl2ZWN0b3JzW1ZFQ19MSU5FMTFdID0gZmxpbmVfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUFVOU1VQXSA9IHVuc3VwcF92ZWM7CisJCXZlY3RvcnNbVkVDX1VOSU1QRUFdID0gZWZmYWRkX3ZlYzsKKwl9CisKKyAgICAgICAgLyogaWYgcnVubmluZyBvbiBhbiBhbWlnYSwgbWFrZSB0aGUgTk1JIGludGVycnVwdCBkbyBub3RoaW5nICovCisJaWYgKE1BQ0hfSVNfQU1JR0EpIHsKKwkJdmVjdG9yc1tWRUNfSU5UN10gPSBubWloYW5kbGVyOworCX0KK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqdmVjX25hbWVzW10gPSB7CisJW1ZFQ19SRVNFVFNQXQk9ICJSRVNFVCBTUCIsCisJW1ZFQ19SRVNFVFBDXQk9ICJSRVNFVCBQQyIsCisJW1ZFQ19CVVNFUlJdCT0gIkJVUyBFUlJPUiIsCisJW1ZFQ19BRERSRVJSXQk9ICJBRERSRVNTIEVSUk9SIiwKKwlbVkVDX0lMTEVHQUxdCT0gIklMTEVHQUwgSU5TVFJVQ1RJT04iLAorCVtWRUNfWkVST0RJVl0JPSAiWkVSTyBESVZJREUiLAorCVtWRUNfQ0hLXQk9ICJDSEsiLAorCVtWRUNfVFJBUF0JPSAiVFJBUGNjIiwKKwlbVkVDX1BSSVZdCT0gIlBSSVZJTEVHRSBWSU9MQVRJT04iLAorCVtWRUNfVFJBQ0VdCT0gIlRSQUNFIiwKKwlbVkVDX0xJTkUxMF0JPSAiTElORSAxMDEwIiwKKwlbVkVDX0xJTkUxMV0JPSAiTElORSAxMTExIiwKKwlbVkVDX1JFU1YxMl0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAxMiIsCisJW1ZFQ19DT1BST0NdCT0gIkNPUFJPQ0VTU09SIFBST1RPQ09MIFZJT0xBVElPTiIsCisJW1ZFQ19GT1JNQVRdCT0gIkZPUk1BVCBFUlJPUiIsCisJW1ZFQ19VTklOVF0JPSAiVU5JTklUSUFMSVpFRCBJTlRFUlJVUFQiLAorCVtWRUNfUkVTVjE2XQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDE2IiwKKwlbVkVDX1JFU1YxN10JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAxNyIsCisJW1ZFQ19SRVNWMThdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMTgiLAorCVtWRUNfUkVTVjE5XQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDE5IiwKKwlbVkVDX1JFU1YyMF0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAyMCIsCisJW1ZFQ19SRVNWMjFdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMjEiLAorCVtWRUNfUkVTVjIyXQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDIyIiwKKwlbVkVDX1JFU1YyM10JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAyMyIsCisJW1ZFQ19TUFVSXQk9ICJTUFVSSU9VUyBJTlRFUlJVUFQiLAorCVtWRUNfSU5UMV0JPSAiTEVWRUwgMSBJTlQiLAorCVtWRUNfSU5UMl0JPSAiTEVWRUwgMiBJTlQiLAorCVtWRUNfSU5UM10JPSAiTEVWRUwgMyBJTlQiLAorCVtWRUNfSU5UNF0JPSAiTEVWRUwgNCBJTlQiLAorCVtWRUNfSU5UNV0JPSAiTEVWRUwgNSBJTlQiLAorCVtWRUNfSU5UNl0JPSAiTEVWRUwgNiBJTlQiLAorCVtWRUNfSU5UN10JPSAiTEVWRUwgNyBJTlQiLAorCVtWRUNfU1lTXQk9ICJTWVNDQUxMIiwKKwlbVkVDX1RSQVAxXQk9ICJUUkFQICMxIiwKKwlbVkVDX1RSQVAyXQk9ICJUUkFQICMyIiwKKwlbVkVDX1RSQVAzXQk9ICJUUkFQICMzIiwKKwlbVkVDX1RSQVA0XQk9ICJUUkFQICM0IiwKKwlbVkVDX1RSQVA1XQk9ICJUUkFQICM1IiwKKwlbVkVDX1RSQVA2XQk9ICJUUkFQICM2IiwKKwlbVkVDX1RSQVA3XQk9ICJUUkFQICM3IiwKKwlbVkVDX1RSQVA4XQk9ICJUUkFQICM4IiwKKwlbVkVDX1RSQVA5XQk9ICJUUkFQICM5IiwKKwlbVkVDX1RSQVAxMF0JPSAiVFJBUCAjMTAiLAorCVtWRUNfVFJBUDExXQk9ICJUUkFQICMxMSIsCisJW1ZFQ19UUkFQMTJdCT0gIlRSQVAgIzEyIiwKKwlbVkVDX1RSQVAxM10JPSAiVFJBUCAjMTMiLAorCVtWRUNfVFJBUDE0XQk9ICJUUkFQICMxNCIsCisJW1ZFQ19UUkFQMTVdCT0gIlRSQVAgIzE1IiwKKwlbVkVDX0ZQQlJVQ10JPSAiRlBDUCBCU1VOIiwKKwlbVkVDX0ZQSVJdCT0gIkZQQ1AgSU5FWEFDVCIsCisJW1ZFQ19GUERJVlpdCT0gIkZQQ1AgRElWIEJZIDAiLAorCVtWRUNfRlBVTkRFUl0JPSAiRlBDUCBVTkRFUkZMT1ciLAorCVtWRUNfRlBPRV0JPSAiRlBDUCBPUEVSQU5EIEVSUk9SIiwKKwlbVkVDX0ZQT1ZFUl0JPSAiRlBDUCBPVkVSRkxPVyIsCisJW1ZFQ19GUE5BTl0JPSAiRlBDUCBTTkFOIiwKKwlbVkVDX0ZQVU5TVVBdCT0gIkZQQ1AgVU5TVVBQT1JURUQgT1BFUkFUSU9OIiwKKwlbVkVDX01NVUNGR10JPSAiTU1VIENPTkZJR1VSQVRJT04gRVJST1IiLAorCVtWRUNfTU1VSUxMXQk9ICJNTVUgSUxMRUdBTCBPUEVSQVRJT04gRVJST1IiLAorCVtWRUNfTU1VQUNDXQk9ICJNTVUgQUNDRVNTIExFVkVMIFZJT0xBVElPTiBFUlJPUiIsCisJW1ZFQ19SRVNWNTldCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgNTkiLAorCVtWRUNfVU5JTVBFQV0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCA2MCIsCisJW1ZFQ19VTklNUElJXQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDYxIiwKKwlbVkVDX1JFU1Y2Ml0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCA2MiIsCisJW1ZFQ19SRVNWNjNdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgNjMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNwYWNlX25hbWVzW10gPSB7CisJWzBdCQk9ICJTcGFjZSAwIiwKKwlbVVNFUl9EQVRBXQk9ICJVc2VyIERhdGEiLAorCVtVU0VSX1BST0dSQU1dCT0gIlVzZXIgUHJvZ3JhbSIsCisjaWZuZGVmIENPTkZJR19TVU4zCisJWzNdCQk9ICJTcGFjZSAzIiwKKyNlbHNlCisJW0ZDX0NPTlRST0xdCT0gIkNvbnRyb2wiLAorI2VuZGlmCisJWzRdCQk9ICJTcGFjZSA0IiwKKwlbU1VQRVJfREFUQV0JPSAiU3VwZXIgRGF0YSIsCisJW1NVUEVSX1BST0dSQU1dCT0gIlN1cGVyIFByb2dyYW0iLAorCVtDUFVfU1BBQ0VdCT0gIkNQVSIKK307CisKK3ZvaWQgZGllX2lmX2tlcm5lbChjaGFyICosc3RydWN0IHB0X3JlZ3MgKixpbnQpOworYXNtbGlua2FnZSBpbnQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpOworaW50IHNlbmRfZmF1bHRfc2lnKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworYXNtbGlua2FnZSB2b2lkIHRyYXBfYyhzdHJ1Y3QgZnJhbWUgKmZwKTsKKworI2lmIGRlZmluZWQgKENPTkZJR19NNjgwNjApCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjZXNzX2Vycm9yMDYwIChzdHJ1Y3QgZnJhbWUgKmZwKQoreworCXVuc2lnbmVkIGxvbmcgZnNsdyA9IGZwLT51bi5mbXQ0LnBjOyAvKiBpcyByZWFsbHkgRlNMVyBmb3IgYWNjZXNzIGVycm9yICovCisKKyNpZmRlZiBERUJVRworCXByaW50aygiZnNsdz0lI2x4LCBmYT0lI2x4XG4iLCBmc2x3LCBmcC0+dW4uZm10NC5lZmZhZGRyKTsKKyNlbmRpZgorCisJaWYgKGZzbHcgJiBNTVUwNjBfQlBFKSB7CisJCS8qIGJyYW5jaCBwcmVkaWN0aW9uIGVycm9yIC0+IGNsZWFyIGJyYW5jaCBjYWNoZSAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjICUvY2FjciwlL2QwXG5cdCIKKwkJCQkgICAgICAib3JsICAgIzB4MDA0MDAwMDAsJS9kMFxuXHQiCisJCQkJICAgICAgIm1vdmVjICUvZDAsJS9jYWNyIgorCQkJCSAgICAgIDogOiA6ICJkMCIgKTsKKwkJLyogcmV0dXJuIGlmIHRoZXJlJ3Mgbm8gb3RoZXIgZXJyb3IgKi8KKwkJaWYgKCEoZnNsdyAmIE1NVTA2MF9FUlJfQklUUykgJiYgIShmc2x3ICYgTU1VMDYwX1NFRSkpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGZzbHcgJiAoTU1VMDYwX0RFU0NfRVJSIHwgTU1VMDYwX1dQIHwgTU1VMDYwX1NQKSkgeworCQl1bnNpZ25lZCBsb25nIGVycm9yY29kZTsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gZnAtPnVuLmZtdDQuZWZmYWRkcjsKKworCQlpZiAoZnNsdyAmIE1NVTA2MF9NQSkKKwkJCWFkZHIgPSAoYWRkciArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLOworCisJCWVycm9yY29kZSA9IDE7CisJCWlmIChmc2x3ICYgTU1VMDYwX0RFU0NfRVJSKSB7CisJCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7CisJCQllcnJvcmNvZGUgPSAwOworCQl9CisJCWlmIChmc2x3ICYgTU1VMDYwX1cpCisJCQllcnJvcmNvZGUgfD0gMjsKKyNpZmRlZiBERUJVRworCQlwcmludGsoImVycm9yY29kZSA9ICVkXG4iLCBlcnJvcmNvZGUgKTsKKyNlbmRpZgorCQlkb19wYWdlX2ZhdWx0KCZmcC0+cHRyZWdzLCBhZGRyLCBlcnJvcmNvZGUpOworCX0gZWxzZSBpZiAoZnNsdyAmIChNTVUwNjBfU0VFKSl7CisJCS8qIFNvZnR3YXJlIEVtdWxhdGlvbiBFcnJvci4KKwkJICogZmF1bHQgZHVyaW5nIG1lbV9yZWFkL21lbV93cml0ZSBpbiBpZnBzcDA2MC9vcy5TCisJCSAqLworCQlzZW5kX2ZhdWx0X3NpZygmZnAtPnB0cmVncyk7CisJfSBlbHNlIGlmICghKGZzbHcgJiAoTU1VMDYwX1JFfE1NVTA2MF9XRSkpIHx8CisJCSAgIHNlbmRfZmF1bHRfc2lnKCZmcC0+cHRyZWdzKSA+IDApIHsKKwkJcHJpbnRrKCJwYz0lI2x4LCBmYT0lI2x4XG4iLCBmcC0+cHRyZWdzLnBjLCBmcC0+dW4uZm10NC5lZmZhZGRyKTsKKwkJcHJpbnRrKCAiNjgwNjAgYWNjZXNzIGVycm9yLCBmc2x3PSVseFxuIiwgZnNsdyApOworCQl0cmFwX2MoIGZwICk7CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19NNjgwNjAgKi8KKworI2lmIGRlZmluZWQgKENPTkZJR19NNjgwNDApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvYmUwNDAoaW50IGlzd3JpdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHdicykKK3sKKwl1bnNpZ25lZCBsb25nIG1tdXNyOworCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKworCXNldF9mcyhNQUtFX01NX1NFRyh3YnMpKTsKKworCWlmIChpc3dyaXRlKQorCQlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODA0MDsgcHRlc3R3ICglMCk7IC5jaGlwIDY4ayIgOiA6ICJhIiAoYWRkcikpOworCWVsc2UKKwkJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDA7IHB0ZXN0ciAoJTApOyAuY2hpcCA2OGsiIDogOiAiYSIgKGFkZHIpKTsKKworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDQwOyBtb3ZlYyAlJW1tdXNyLCUwOyAuY2hpcCA2OGsiIDogIj1yIiAobW11c3IpKTsKKworCXNldF9mcyhvbGRfZnMpOworCisJcmV0dXJuIG1tdXNyOworfQorCitzdGF0aWMgaW5saW5lIGludCBkb18wNDB3cml0ZWJhY2sxKHVuc2lnbmVkIHNob3J0IHdicywgdW5zaWduZWQgbG9uZyB3YmEsCisJCQkJICAgdW5zaWduZWQgbG9uZyB3YmQpCit7CisJaW50IHJlcyA9IDA7CisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCisJLyogc2V0X2ZzIGNhbiBub3QgYmUgbW92ZWQsIG90aGVyd2lzZSBwdXRfdXNlcigpIG1heSBvb3BzICovCisJc2V0X2ZzKE1BS0VfTU1fU0VHKHdicykpOworCisJc3dpdGNoICh3YnMgJiBXQlNJWl8wNDApIHsKKwljYXNlIEJBX1NJWkVfQllURToKKwkJcmVzID0gcHV0X3VzZXIod2JkICYgMHhmZiwgKGNoYXIgKil3YmEpOworCQlicmVhazsKKwljYXNlIEJBX1NJWkVfV09SRDoKKwkJcmVzID0gcHV0X3VzZXIod2JkICYgMHhmZmZmLCAoc2hvcnQgKil3YmEpOworCQlicmVhazsKKwljYXNlIEJBX1NJWkVfTE9ORzoKKwkJcmVzID0gcHV0X3VzZXIod2JkLCAoaW50ICopd2JhKTsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0X2ZzIGNhbiBub3QgYmUgbW92ZWQsIG90aGVyd2lzZSBwdXRfdXNlcigpIG1heSBvb3BzICovCisJc2V0X2ZzKG9sZF9mcyk7CisKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkb18wNDB3cml0ZWJhY2sxLCByZXM9JWRcbiIscmVzKTsKKyNlbmRpZgorCisJcmV0dXJuIHJlczsKK30KKworLyogYWZ0ZXIgYW4gZXhjZXB0aW9uIGluIGEgd3JpdGViYWNrIHRoZSBzdGFjayBmcmFtZSBjb3JyZXNwb25kaW5nCisgKiB0byB0aGF0IGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQsIHNldCBhIGZldyBiaXRzIGluIHRoZSBvbGQgZnJhbWUKKyAqIHRvIHNpbXVsYXRlIHdoYXQgaXQgc2hvdWxkIGxvb2sgbGlrZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZml4X3hmcmFtZTA0MChzdHJ1Y3QgZnJhbWUgKmZwLCB1bnNpZ25lZCBsb25nIHdiYSwgdW5zaWduZWQgc2hvcnQgd2JzKQoreworCWZwLT51bi5mbXQ3LmZhZGRyID0gd2JhOworCWZwLT51bi5mbXQ3LnNzdyA9IHdicyAmIDB4ZmY7CisJaWYgKHdiYSAhPSBjdXJyZW50LT50aHJlYWQuZmFkZHIpCisJICAgIGZwLT51bi5mbXQ3LnNzdyB8PSBNQV8wNDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb18wNDB3cml0ZWJhY2tzKHN0cnVjdCBmcmFtZSAqZnApCit7CisJaW50IHJlcyA9IDA7CisjaWYgMAorCWlmIChmcC0+dW4uZm10Ny53YjFzICYgV0JWXzA0MCkKKwkJcHJpbnRrKCJhY2Nlc3NfZXJyb3IwNDA6IGNhbm5vdCBoYW5kbGUgMXN0IHdyaXRlYmFjay4gb29wcy5cbiIpOworI2VuZGlmCisKKwlpZiAoKGZwLT51bi5mbXQ3LndiMnMgJiBXQlZfMDQwKSAmJgorCSAgICAhKGZwLT51bi5mbXQ3LndiMnMgJiBXQlRUXzA0MCkpIHsKKwkJcmVzID0gZG9fMDQwd3JpdGViYWNrMShmcC0+dW4uZm10Ny53YjJzLCBmcC0+dW4uZm10Ny53YjJhLAorCQkJCSAgICAgICBmcC0+dW4uZm10Ny53YjJkKTsKKwkJaWYgKHJlcykKKwkJCWZpeF94ZnJhbWUwNDAoZnAsIGZwLT51bi5mbXQ3LndiMmEsIGZwLT51bi5mbXQ3LndiMnMpOworCQllbHNlCisJCQlmcC0+dW4uZm10Ny53YjJzID0gMDsKKwl9CisKKwkvKiBkbyB0aGUgMm5kIHdiIG9ubHkgaWYgdGhlIGZpcnN0IG9uZSB3YXMgc3VjY2Vzc2Z1bCAoZXhjZXB0IGZvciBhIGtlcm5lbCB3YikgKi8KKwlpZiAoZnAtPnVuLmZtdDcud2IzcyAmIFdCVl8wNDAgJiYgKCFyZXMgfHwgZnAtPnVuLmZtdDcud2IzcyAmIDQpKSB7CisJCXJlcyA9IGRvXzA0MHdyaXRlYmFjazEoZnAtPnVuLmZtdDcud2IzcywgZnAtPnVuLmZtdDcud2IzYSwKKwkJCQkgICAgICAgZnAtPnVuLmZtdDcud2IzZCk7CisJCWlmIChyZXMpCisJCSAgICB7CisJCQlmaXhfeGZyYW1lMDQwKGZwLCBmcC0+dW4uZm10Ny53YjNhLCBmcC0+dW4uZm10Ny53YjNzKTsKKworCQkJZnAtPnVuLmZtdDcud2IycyA9IGZwLT51bi5mbXQ3LndiM3M7CisJCQlmcC0+dW4uZm10Ny53YjNzICY9ICh+V0JWXzA0MCk7CisJCQlmcC0+dW4uZm10Ny53YjJhID0gZnAtPnVuLmZtdDcud2IzYTsKKwkJCWZwLT51bi5mbXQ3LndiMmQgPSBmcC0+dW4uZm10Ny53YjNkOworCQkgICAgfQorCQllbHNlCisJCQlmcC0+dW4uZm10Ny53YjNzID0gMDsKKwl9CisKKwlpZiAocmVzKQorCQlzZW5kX2ZhdWx0X3NpZygmZnAtPnB0cmVncyk7Cit9CisKKy8qCisgKiBjYWxsZWQgZnJvbSBzaWdyZXR1cm4oKSwgbXVzdCBlbnN1cmUgdXNlcnNwYWNlIGNvZGUgZGlkbid0CisgKiBtYW5pcHVsYXRlIGV4Y2VwdGlvbiBmcmFtZSB0byBjaXJjdW12ZW50IHByb3RlY3Rpb24sIHRoZW4gY29tcGxldGUKKyAqIHBlbmRpbmcgd3JpdGViYWNrcworICogd2UganVzdCBjbGVhciBUTTIgdG8gdHVybiBpdCBpbnRvIGFuIHVzZXJzcGFjZSBhY2Nlc3MKKyAqLworYXNtbGlua2FnZSB2b2lkIGJlcnJfMDQwY2xlYW51cChzdHJ1Y3QgZnJhbWUgKmZwKQoreworCWZwLT51bi5mbXQ3LndiMnMgJj0gfjQ7CisJZnAtPnVuLmZtdDcud2IzcyAmPSB+NDsKKworCWRvXzA0MHdyaXRlYmFja3MoZnApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjZXNzX2Vycm9yMDQwKHN0cnVjdCBmcmFtZSAqZnApCit7CisJdW5zaWduZWQgc2hvcnQgc3N3ID0gZnAtPnVuLmZtdDcuc3N3OworCXVuc2lnbmVkIGxvbmcgbW11c3I7CisKKyNpZmRlZiBERUJVRworCXByaW50aygic3N3PSUjeCwgZmE9JSNseFxuIiwgc3N3LCBmcC0+dW4uZm10Ny5mYWRkcik7CisgICAgICAgIHByaW50aygid2Ixcz0lI3gsIHdiMnM9JSN4LCB3YjNzPSUjeFxuIiwgZnAtPnVuLmZtdDcud2IxcywKKwkJZnAtPnVuLmZtdDcud2IycywgZnAtPnVuLmZtdDcud2Izcyk7CisJcHJpbnRrICgid2IyYT0lbHgsIHdiM2E9JWx4LCB3YjJkPSVseCwgd2IzZD0lbHhcbiIsCisJCWZwLT51bi5mbXQ3LndiMmEsIGZwLT51bi5mbXQ3LndiM2EsCisJCWZwLT51bi5mbXQ3LndiMmQsIGZwLT51bi5mbXQ3LndiM2QpOworI2VuZGlmCisKKwlpZiAoc3N3ICYgQVRDXzA0MCkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBmcC0+dW4uZm10Ny5mYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBlcnJvcmNvZGU7CisKKwkJLyoKKwkJICogVGhlIE1NVSBzdGF0dXMgaGFzIHRvIGJlIGRldGVybWluZWQgQUZURVIgdGhlIGFkZHJlc3MKKwkJICogaGFzIGJlZW4gY29ycmVjdGVkIGlmIHRoZXJlIHdhcyBhIG1pc2FsaWduZWQgYWNjZXNzIChNQSkuCisJCSAqLworCQlpZiAoc3N3ICYgTUFfMDQwKQorCQkJYWRkciA9IChhZGRyICsgNykgJiAtODsKKworCQkvKiBNTVUgZXJyb3IsIGdldCB0aGUgTU1VU1IgaW5mbyBmb3IgdGhpcyBhY2Nlc3MgKi8KKwkJbW11c3IgPSBwcm9iZTA0MCghKHNzdyAmIFJXXzA0MCksIGFkZHIsIHNzdyk7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJtbXVzciA9ICVseFxuIiwgbW11c3IpOworI2VuZGlmCisJCWVycm9yY29kZSA9IDE7CisJCWlmICghKG1tdXNyICYgTU1VX1JfMDQwKSkgeworCQkJLyogY2xlYXIgdGhlIGludmFsaWQgYXRjIGVudHJ5ICovCisJCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7CisJCQllcnJvcmNvZGUgPSAwOworCQl9CisKKwkJLyogZGVzcGl0ZSB3aGF0IGRvY3VtZW50YXRpb24gc2VlbXMgdG8gc2F5LCBSTVcKKwkJICogYWNjZXNzZXMgaGF2ZSBhbHdheXMgYm90aCB0aGUgTEsgYW5kIFJXIGJpdHMgc2V0ICovCisJCWlmICghKHNzdyAmIFJXXzA0MCkgfHwgKHNzdyAmIExLXzA0MCkpCisJCQllcnJvcmNvZGUgfD0gMjsKKworCQlpZiAoZG9fcGFnZV9mYXVsdCgmZnAtPnB0cmVncywgYWRkciwgZXJyb3Jjb2RlKSkgeworI2lmZGVmIERFQlVHCisJCSAgICAgICAgcHJpbnRrKCJkb19wYWdlX2ZhdWx0KCkgIT0wIFxuIik7CisjZW5kaWYKKwkJCWlmICh1c2VyX21vZGUoJmZwLT5wdHJlZ3MpKXsKKwkJCQkvKiBkZWxheSB3cml0ZWJhY2tzIGFmdGVyIHNpZ25hbCBkZWxpdmVyeSAqLworI2lmZGVmIERFQlVHCisJCQkgICAgICAgIHByaW50aygiLi4gd2FzIHVzZXJtb2RlIC0gcmV0dXJuXG4iKTsKKyNlbmRpZgorCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIGRpc2FibGUgd3JpdGViYWNrIGludG8gdXNlciBzcGFjZSBmcm9tIGtlcm5lbAorCQkJICogKGlmIGRvX3BhZ2VfZmF1bHQgZGlkbid0IGZpeCB0aGUgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSB3cml0ZWJhY2sgd29uJ3QgZG8gZ29vZCkKKwkJCSAqLworI2lmZGVmIERFQlVHCisJCQlwcmludGsoIi4uIGRpc2FibGluZyB3YjJcbiIpOworI2VuZGlmCisJCQlpZiAoZnAtPnVuLmZtdDcud2IyYSA9PSBmcC0+dW4uZm10Ny5mYWRkcikKKwkJCQlmcC0+dW4uZm10Ny53YjJzICY9IH5XQlZfMDQwOworCQl9CisJfSBlbHNlIGlmIChzZW5kX2ZhdWx0X3NpZygmZnAtPnB0cmVncykgPiAwKSB7CisJCXByaW50aygiNjgwNDAgYWNjZXNzIGVycm9yLCBzc3c9JXhcbiIsIHNzdyk7CisJCXRyYXBfYyhmcCk7CisJfQorCisJZG9fMDQwd3JpdGViYWNrcyhmcCk7Cit9CisjZW5kaWYgLyogQ09ORklHX002ODA0MCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorCitleHRlcm4gaW50IG1tdV9lbXVfaGFuZGxlX2ZhdWx0ICh1bnNpZ25lZCBsb25nLCBpbnQsIGludCk7CisKKy8qIHN1bjMgdmVyc2lvbiBvZiBidXNfZXJyb3IwMzAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGJ1c19lcnJvcjAzMCAoc3RydWN0IGZyYW1lICpmcCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1c2Vycl90eXBlID0gc3VuM19nZXRfYnVzZXJyICgpOworCXVuc2lnbmVkIGxvbmcgYWRkciwgZXJyb3Jjb2RlOworCXVuc2lnbmVkIHNob3J0IHNzdyA9IGZwLT51bi5mbXRiLnNzdzsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBfc3VuM19tYXBfdGVzdF9zdGFydCwgX3N1bjNfbWFwX3Rlc3RfZW5kOworCisjaWZkZWYgREVCVUcKKwlpZiAoc3N3ICYgKEZDIHwgRkIpKQorCQlwcmludGsgKCJJbnN0cnVjdGlvbiBmYXVsdCBhdCAlIzAxMGx4XG4iLAorCQkJc3N3ICYgRkMgPworCQkJZnAtPnB0cmVncy5mb3JtYXQgPT0gMHhhID8gZnAtPnB0cmVncy5wYyArIDIgOiBmcC0+dW4uZm10Yi5iYWRkciAtIDIKKwkJCToKKwkJCWZwLT5wdHJlZ3MuZm9ybWF0ID09IDB4YSA/IGZwLT5wdHJlZ3MucGMgKyA0IDogZnAtPnVuLmZtdGIuYmFkZHIpOworCWlmIChzc3cgJiBERikKKwkJcHJpbnRrICgiRGF0YSAlcyBmYXVsdCBhdCAlIzAxMGx4IGluICVzIChwYz0lI2x4KVxuIiwKKwkJCXNzdyAmIFJXID8gInJlYWQiIDogIndyaXRlIiwKKwkJCWZwLT51bi5mbXRiLmRhZGRyLAorCQkJc3BhY2VfbmFtZXNbc3N3ICYgREZDXSwgZnAtPnB0cmVncy5wYyk7CisjZW5kaWYKKworCS8qCisJICogQ2hlY2sgaWYgdGhpcyBwYWdlIHNob3VsZCBiZSBkZW1hbmQtbWFwcGVkLiBUaGlzIG5lZWRzIHRvIGdvIGJlZm9yZQorCSAqIHRoZSB0ZXN0aW5nIGZvciBhIGJhZCBrZXJuZWwtc3BhY2UgYWNjZXNzIChkZW1hbmQtbWFwcGluZyBhcHBsaWVzCisJICogdG8ga2VybmVsIGFjY2Vzc2VzIHRvbykuCisJICovCisKKwlpZiAoKHNzdyAmIERGKQorCSAgICAmJiAoYnVzZXJyX3R5cGUgJiAoU1VOM19CVVNFUlJfUFJPVEVSUiB8IFNVTjNfQlVTRVJSX0lOVkFMSUQpKSkgeworCQlpZiAobW11X2VtdV9oYW5kbGVfZmF1bHQgKGZwLT51bi5mbXRiLmRhZGRyLCBzc3cgJiBSVywgMCkpCisJCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgZm9yIGtlcm5lbC1zcGFjZSBwYWdlZmF1bHQgKEJBRCkuICovCisJaWYgKGZwLT5wdHJlZ3Muc3IgJiBQU19TKSB7CisJCS8qIGtlcm5lbCBmYXVsdCBtdXN0IGJlIGEgZGF0YSBmYXVsdCB0byB1c2VyIHNwYWNlICovCisJCWlmICghICgoc3N3ICYgREYpICYmICgoc3N3ICYgREZDKSA9PSBVU0VSX0RBVEEpKSkgeworCQkgICAgIC8vIHRyeSBjaGVja2luZyB0aGUga2VybmVsIG1hcHBpbmdzIGJlZm9yZSBzdXJyZW5kZXIKKwkJICAgICBpZiAobW11X2VtdV9oYW5kbGVfZmF1bHQgKGZwLT51bi5mbXRiLmRhZGRyLCBzc3cgJiBSVywgMSkpCisJCQkgIHJldHVybjsKKwkJCS8qIGluc3RydWN0aW9uIGZhdWx0IG9yIGtlcm5lbCBkYXRhIGZhdWx0ISAqLworCQkJaWYgKHNzdyAmIChGQyB8IEZCKSkKKwkJCQlwcmludGsgKCJJbnN0cnVjdGlvbiBmYXVsdCBhdCAlIzAxMGx4XG4iLAorCQkJCQlmcC0+cHRyZWdzLnBjKTsKKwkJCWlmIChzc3cgJiBERikgeworCQkJCS8qIHdhcyB0aGlzIGZhdWx0IGluY3VycmVkIHRlc3RpbmcgYnVzIG1hcHBpbmdzPyAqLworCQkJCWlmKChmcC0+cHRyZWdzLnBjID49ICh1bnNpZ25lZCBsb25nKSZfc3VuM19tYXBfdGVzdF9zdGFydCkgJiYKKwkJCQkgICAoZnAtPnB0cmVncy5wYyA8PSAodW5zaWduZWQgbG9uZykmX3N1bjNfbWFwX3Rlc3RfZW5kKSkgeworCQkJCQlzZW5kX2ZhdWx0X3NpZygmZnAtPnB0cmVncyk7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQlwcmludGsgKCJEYXRhICVzIGZhdWx0IGF0ICUjMDEwbHggaW4gJXMgKHBjPSUjbHgpXG4iLAorCQkJCQlzc3cgJiBSVyA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkJCWZwLT51bi5mbXRiLmRhZGRyLAorCQkJCQlzcGFjZV9uYW1lc1tzc3cgJiBERkNdLCBmcC0+cHRyZWdzLnBjKTsKKwkJCX0KKwkJCXByaW50ayAoIkJBRCBLRVJORUwgQlVTRVJSXG4iKTsKKworCQkJZGllX2lmX2tlcm5lbCgiT29wcyIsICZmcC0+cHRyZWdzLDApOworCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIGN1cnJlbnQpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJLyogdXNlciBmYXVsdCAqLworCQlpZiAoIShzc3cgJiAoRkMgfCBGQikpICYmICEoc3N3ICYgREYpKQorCQkJLyogbm90IGFuIGluc3RydWN0aW9uIGZhdWx0IG9yIGRhdGEgZmF1bHQhIEJBRCAqLworCQkJcGFuaWMgKCJVU0VSIEJVU0VSUiB3L28gaW5zdHJ1Y3Rpb24gb3IgZGF0YSBmYXVsdCIpOworCX0KKworCisJLyogRmlyc3QgaGFuZGxlIHRoZSBkYXRhIGZhdWx0LCBpZiBhbnkuICAqLworCWlmIChzc3cgJiBERikgeworCQlhZGRyID0gZnAtPnVuLmZtdGIuZGFkZHI7CisKKy8vIGVycm9yY29kZSBiaXQgMDoJMCAtPiBubyBwYWdlCQkxIC0+IHByb3RlY3Rpb24gZmF1bHQKKy8vIGVycm9yY29kZSBiaXQgMToJMCAtPiByZWFkIGZhdWx0CQkxIC0+IHdyaXRlIGZhdWx0CisKKy8vIChidXNlcnJfdHlwZSAmIFNVTjNfQlVTRVJSX1BST1RFUlIpCS0+IHByb3RlY3Rpb24gZmF1bHQKKy8vIChidXNlcnJfdHlwZSAmIFNVTjNfQlVTRVJSX0lOVkFMSUQpCS0+IGludmFsaWQgcGFnZSBmYXVsdAorCisJCWlmIChidXNlcnJfdHlwZSAmIFNVTjNfQlVTRVJSX1BST1RFUlIpCisJCQllcnJvcmNvZGUgPSAweDAxOworCQllbHNlIGlmIChidXNlcnJfdHlwZSAmIFNVTjNfQlVTRVJSX0lOVkFMSUQpCisJCQllcnJvcmNvZGUgPSAweDAwOworCQllbHNlIHsKKyNpZmRlZiBERUJVRworCQkJcHJpbnRrICgiKioqIHVuZXhwZWN0ZWQgYnVzZmF1bHQgdHlwZT0lIzA0eFxuIiwgYnVzZXJyX3R5cGUpOworCQkJcHJpbnRrICgiaW52YWxpZCAlcyBhY2Nlc3MgYXQgJSNseCBmcm9tIHBjICUjbHhcbiIsCisJCQkJIShzc3cgJiBSVykgPyAid3JpdGUiIDogInJlYWQiLCBhZGRyLAorCQkJCWZwLT5wdHJlZ3MucGMpOworI2VuZGlmCisJCQlkaWVfaWZfa2VybmVsICgiT29wcyIsICZmcC0+cHRyZWdzLCBidXNlcnJfdHlwZSk7CisJCQlmb3JjZV9zaWcgKFNJR0JVUywgY3VycmVudCk7CisJCQlyZXR1cm47CisJCX0KKworLy90b2RvOiB3dGYgaXMgUk0gYml0PyAtLW0KKwkJaWYgKCEoc3N3ICYgUlcpIHx8IHNzdyAmIFJNKQorCQkJZXJyb3Jjb2RlIHw9IDB4MDI7CisKKwkJLyogSGFuZGxlIHBhZ2UgZmF1bHQuICovCisJCWRvX3BhZ2VfZmF1bHQgKCZmcC0+cHRyZWdzLCBhZGRyLCBlcnJvcmNvZGUpOworCisJCS8qIFJldHJ5IHRoZSBkYXRhIGZhdWx0IG5vdy4gKi8KKwkJcmV0dXJuOworCX0KKworCS8qIE5vdyBoYW5kbGUgdGhlIGluc3RydWN0aW9uIGZhdWx0LiAqLworCisJLyogR2V0IHRoZSBmYXVsdCBhZGRyZXNzLiAqLworCWlmIChmcC0+cHRyZWdzLmZvcm1hdCA9PSAweEEpCisJCWFkZHIgPSBmcC0+cHRyZWdzLnBjICsgNDsKKwllbHNlCisJCWFkZHIgPSBmcC0+dW4uZm10Yi5iYWRkcjsKKwlpZiAoc3N3ICYgRkMpCisJCWFkZHIgLT0gMjsKKworCWlmIChidXNlcnJfdHlwZSAmIFNVTjNfQlVTRVJSX0lOVkFMSUQpIHsKKwkJaWYgKCFtbXVfZW11X2hhbmRsZV9mYXVsdCAoZnAtPnVuLmZtdGIuZGFkZHIsIDEsIDApKQorCQkJZG9fcGFnZV9mYXVsdCAoJmZwLT5wdHJlZ3MsIGFkZHIsIDApOworICAgICAgIH0gZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrICgicHJvdGVjdGlvbiBmYXVsdCBvbiBpbnNuIGFjY2VzcyAoc2VndikuXG4iKTsKKyNlbmRpZgorCQlmb3JjZV9zaWcgKFNJR1NFR1YsIGN1cnJlbnQpOworICAgICAgIH0KK30KKyNlbHNlCisjaWYgZGVmaW5lZChDUFVfTTY4MDIwX09SX002ODAzMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBidXNfZXJyb3IwMzAgKHN0cnVjdCBmcmFtZSAqZnApCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdGVtcDsKKwl1bnNpZ25lZCBzaG9ydCBtbXVzcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGVycm9yY29kZTsKKwl1bnNpZ25lZCBzaG9ydCBzc3cgPSBmcC0+dW4uZm10Yi5zc3c7CisjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBsb25nIGRlc2M7CisKKwlwcmludGsgKCJwaWQgPSAleCAgIiwgY3VycmVudC0+cGlkKTsKKwlwcmludGsgKCJTU1c9JSMwNnggICIsIHNzdyk7CisKKwlpZiAoc3N3ICYgKEZDIHwgRkIpKQorCQlwcmludGsgKCJJbnN0cnVjdGlvbiBmYXVsdCBhdCAlIzAxMGx4XG4iLAorCQkJc3N3ICYgRkMgPworCQkJZnAtPnB0cmVncy5mb3JtYXQgPT0gMHhhID8gZnAtPnB0cmVncy5wYyArIDIgOiBmcC0+dW4uZm10Yi5iYWRkciAtIDIKKwkJCToKKwkJCWZwLT5wdHJlZ3MuZm9ybWF0ID09IDB4YSA/IGZwLT5wdHJlZ3MucGMgKyA0IDogZnAtPnVuLmZtdGIuYmFkZHIpOworCWlmIChzc3cgJiBERikKKwkJcHJpbnRrICgiRGF0YSAlcyBmYXVsdCBhdCAlIzAxMGx4IGluICVzIChwYz0lI2x4KVxuIiwKKwkJCXNzdyAmIFJXID8gInJlYWQiIDogIndyaXRlIiwKKwkJCWZwLT51bi5mbXRiLmRhZGRyLAorCQkJc3BhY2VfbmFtZXNbc3N3ICYgREZDXSwgZnAtPnB0cmVncy5wYyk7CisjZW5kaWYKKworCS8qICsrYW5kcmVhczogSWYgYSBkYXRhIGZhdWx0IGFuZCBhbiBpbnN0cnVjdGlvbiBmYXVsdCBoYXBwZW4KKwkgICBhdCB0aGUgc2FtZSB0aW1lIG1hcCBpbiBib3RoIHBhZ2VzLiAgKi8KKworCS8qIEZpcnN0IGhhbmRsZSB0aGUgZGF0YSBmYXVsdCwgaWYgYW55LiAgKi8KKwlpZiAoc3N3ICYgREYpIHsKKwkJYWRkciA9IGZwLT51bi5mbXRiLmRhZGRyOworCisjaWZkZWYgREVCVUcKKwkJYXNtIHZvbGF0aWxlICgicHRlc3RyICUzLCUyQCwjNywlMFxuXHQiCisJCQkgICAgICAicG1vdmUgJSVwc3IsJTFAIgorCQkJICAgICAgOiAiPWEmIiAoZGVzYykKKwkJCSAgICAgIDogImEiICgmdGVtcCksICJhIiAoYWRkciksICJkIiAoc3N3KSk7CisjZWxzZQorCQlhc20gdm9sYXRpbGUgKCJwdGVzdHIgJTIsJTFALCM3XG5cdCIKKwkJCSAgICAgICJwbW92ZSAlJXBzciwlMEAiCisJCQkgICAgICA6IDogImEiICgmdGVtcCksICJhIiAoYWRkciksICJkIiAoc3N3KSk7CisjZW5kaWYKKwkJbW11c3IgPSB0ZW1wOworCisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJtbXVzciBpcyAlI3ggZm9yIGFkZHIgJSNseCBpbiB0YXNrICVwXG4iLAorCQkgICAgICAgbW11c3IsIGFkZHIsIGN1cnJlbnQpOworCQlwcmludGsoImRlc2NyaXB0b3IgYWRkcmVzcyBpcyAlI2x4LCBjb250ZW50cyAlI2x4XG4iLAorCQkgICAgICAgX192YShkZXNjKSwgKih1bnNpZ25lZCBsb25nICopX192YShkZXNjKSk7CisjZW5kaWYKKworCQllcnJvcmNvZGUgPSAobW11c3IgJiBNTVVfSSkgPyAwIDogMTsKKwkJaWYgKCEoc3N3ICYgUlcpIHx8IChzc3cgJiBSTSkpCisJCQllcnJvcmNvZGUgfD0gMjsKKworCQlpZiAobW11c3IgJiAoTU1VX0kgfCBNTVVfV1ApKSB7CisJCQlpZiAoc3N3ICYgNCkgeworCQkJCXByaW50aygiRGF0YSAlcyBmYXVsdCBhdCAlIzAxMGx4IGluICVzIChwYz0lI2x4KVxuIiwKKwkJCQkgICAgICAgc3N3ICYgUlcgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJCSAgICAgICBmcC0+dW4uZm10Yi5kYWRkciwKKwkJCQkgICAgICAgc3BhY2VfbmFtZXNbc3N3ICYgREZDXSwgZnAtPnB0cmVncy5wYyk7CisJCQkJZ290byBidXNlcnI7CisJCQl9CisJCQkvKiBEb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgZnVydGhlciBpZiBhbiBleGNlcHRpb24gd2FzCisJCQkgICBoYW5kbGVkLiAqLworCQkJaWYgKGRvX3BhZ2VfZmF1bHQgKCZmcC0+cHRyZWdzLCBhZGRyLCBlcnJvcmNvZGUpIDwgMCkKKwkJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAoIShtbXVzciAmIE1NVV9JKSkgeworCQkJLyogcHJvYmFibHkgYSAwMjAgY2FzIGZhdWx0ICovCisJCQlpZiAoIShzc3cgJiBSTSkgJiYgc2VuZF9mYXVsdF9zaWcoJmZwLT5wdHJlZ3MpID4gMCkKKwkJCQlwcmludGsoInVuZXhwZWN0ZWQgYnVzIGVycm9yICglI3gsJSN4KVxuIiwgc3N3LCBtbXVzcik7CisJCX0gZWxzZSBpZiAobW11c3IgJiAoTU1VX0J8TU1VX0x8TU1VX1MpKSB7CisJCQlwcmludGsoImludmFsaWQgJXMgYWNjZXNzIGF0ICUjbHggZnJvbSBwYyAlI2x4XG4iLAorCQkJICAgICAgICEoc3N3ICYgUlcpID8gIndyaXRlIiA6ICJyZWFkIiwgYWRkciwKKwkJCSAgICAgICBmcC0+cHRyZWdzLnBjKTsKKwkJCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCZmcC0+cHRyZWdzLG1tdXNyKTsKKwkJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKyNpZiAwCisJCQlzdGF0aWMgdm9sYXRpbGUgbG9uZyB0bG9uZzsKKyNlbmRpZgorCisJCQlwcmludGsoIndlaXJkICVzIGFjY2VzcyBhdCAlI2x4IGZyb20gcGMgJSNseCAoc3N3IGlzICUjeClcbiIsCisJCQkgICAgICAgIShzc3cgJiBSVykgPyAid3JpdGUiIDogInJlYWQiLCBhZGRyLAorCQkJICAgICAgIGZwLT5wdHJlZ3MucGMsIHNzdyk7CisJCQlhc20gdm9sYXRpbGUgKCJwdGVzdHIgIzEsJTFALCMwXG5cdCIKKwkJCQkgICAgICAicG1vdmUgJSVwc3IsJTBAIgorCQkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCSAgICAgIDogImEiICgmdGVtcCksICJhIiAoYWRkcikpOworCQkJbW11c3IgPSB0ZW1wOworCisJCQlwcmludGsgKCJsZXZlbCAwIG1tdXNyIGlzICUjeFxuIiwgbW11c3IpOworI2lmIDAKKwkJCWFzbSB2b2xhdGlsZSAoInBtb3ZlICUldHQwLCUwQCIKKwkJCQkgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgICA6ICJhIiAoJnRsb25nKSk7CisJCQlwcmludGsoInR0MCBpcyAlI2x4LCAiLCB0bG9uZyk7CisJCQlhc20gdm9sYXRpbGUgKCJwbW92ZSAlJXR0MSwlMEAiCisJCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICAgOiAiYSIgKCZ0bG9uZykpOworCQkJcHJpbnRrKCJ0dDEgaXMgJSNseFxuIiwgdGxvbmcpOworI2VuZGlmCisjaWZkZWYgREVCVUcKKwkJCXByaW50aygiVW5rbm93biBTSUdTRUdWIC0gMVxuIik7CisjZW5kaWYKKwkJCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCZmcC0+cHRyZWdzLG1tdXNyKTsKKwkJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIHNldHVwIGFuIEFUQyBlbnRyeSBmb3IgdGhlIGFjY2VzcyBhYm91dCB0byBiZSByZXRyaWVkICovCisJCWlmICghKHNzdyAmIFJXKSB8fCAoc3N3ICYgUk0pKQorCQkJYXNtIHZvbGF0aWxlICgicGxvYWR3ICUxLCUwQCIgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICAgOiAiYSIgKGFkZHIpLCAiZCIgKHNzdykpOworCQllbHNlCisJCQlhc20gdm9sYXRpbGUgKCJwbG9hZHIgJTEsJTBAIiA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgICA6ICJhIiAoYWRkciksICJkIiAoc3N3KSk7CisJfQorCisJLyogTm93IGhhbmRsZSB0aGUgaW5zdHJ1Y3Rpb24gZmF1bHQuICovCisKKwlpZiAoIShzc3cgJiAoRkN8RkIpKSkKKwkJcmV0dXJuOworCisJaWYgKGZwLT5wdHJlZ3Muc3IgJiBQU19TKSB7CisJCXByaW50aygiSW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCWZwLT5wdHJlZ3MucGMpOworCWJ1c2VycjoKKwkJcHJpbnRrICgiQkFEIEtFUk5FTCBCVVNFUlJcbiIpOworCQlkaWVfaWZfa2VybmVsKCJPb3BzIiwmZnAtPnB0cmVncywwKTsKKwkJZm9yY2Vfc2lnKFNJR0tJTEwsIGN1cnJlbnQpOworCQlyZXR1cm47CisJfQorCisJLyogZ2V0IHRoZSBmYXVsdCBhZGRyZXNzICovCisJaWYgKGZwLT5wdHJlZ3MuZm9ybWF0ID09IDEwKQorCQlhZGRyID0gZnAtPnB0cmVncy5wYyArIDQ7CisJZWxzZQorCQlhZGRyID0gZnAtPnVuLmZtdGIuYmFkZHI7CisJaWYgKHNzdyAmIEZDKQorCQlhZGRyIC09IDI7CisKKwlpZiAoKHNzdyAmIERGKSAmJiAoKGFkZHIgXiBmcC0+dW4uZm10Yi5kYWRkcikgJiBQQUdFX01BU0spID09IDApCisJCS8qIEluc24gZmF1bHQgb24gc2FtZSBwYWdlIGFzIGRhdGEgZmF1bHQuICBCdXQgd2UKKwkJICAgc2hvdWxkIHN0aWxsIGNyZWF0ZSB0aGUgQVRDIGVudHJ5LiAgKi8KKwkJZ290byBjcmVhdGVfYXRjX2VudHJ5OworCisjaWZkZWYgREVCVUcKKwlhc20gdm9sYXRpbGUgKCJwdGVzdHIgIzEsJTJALCM3LCUwXG5cdCIKKwkJICAgICAgInBtb3ZlICUlcHNyLCUxQCIKKwkJICAgICAgOiAiPWEmIiAoZGVzYykKKwkJICAgICAgOiAiYSIgKCZ0ZW1wKSwgImEiIChhZGRyKSk7CisjZWxzZQorCWFzbSB2b2xhdGlsZSAoInB0ZXN0ciAjMSwlMUAsIzdcblx0IgorCQkgICAgICAicG1vdmUgJSVwc3IsJTBAIgorCQkgICAgICA6IDogImEiICgmdGVtcCksICJhIiAoYWRkcikpOworI2VuZGlmCisJbW11c3IgPSB0ZW1wOworCisjaWZkZWYgREVCVUcKKwlwcmludGsgKCJtbXVzciBpcyAlI3ggZm9yIGFkZHIgJSNseCBpbiB0YXNrICVwXG4iLAorCQltbXVzciwgYWRkciwgY3VycmVudCk7CisJcHJpbnRrICgiZGVzY3JpcHRvciBhZGRyZXNzIGlzICUjbHgsIGNvbnRlbnRzICUjbHhcbiIsCisJCV9fdmEoZGVzYyksICoodW5zaWduZWQgbG9uZyAqKV9fdmEoZGVzYykpOworI2VuZGlmCisKKwlpZiAobW11c3IgJiBNTVVfSSkKKwkJZG9fcGFnZV9mYXVsdCAoJmZwLT5wdHJlZ3MsIGFkZHIsIDApOworCWVsc2UgaWYgKG1tdXNyICYgKE1NVV9CfE1NVV9MfE1NVV9TKSkgeworCQlwcmludGsgKCJpbnZhbGlkIGluc24gYWNjZXNzIGF0ICUjbHggZnJvbSBwYyAlI2x4XG4iLAorCQkJYWRkciwgZnAtPnB0cmVncy5wYyk7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJVbmtub3duIFNJR1NFR1YgLSAyXG4iKTsKKyNlbmRpZgorCQlkaWVfaWZfa2VybmVsKCJPb3BzIiwmZnAtPnB0cmVncyxtbXVzcik7CisJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwkJcmV0dXJuOworCX0KKworY3JlYXRlX2F0Y19lbnRyeToKKwkvKiBzZXR1cCBhbiBBVEMgZW50cnkgZm9yIHRoZSBhY2Nlc3MgYWJvdXQgdG8gYmUgcmV0cmllZCAqLworCWFzbSB2b2xhdGlsZSAoInBsb2FkciAjMiwlMEAiIDogLyogbm8gb3V0cHV0cyAqLworCQkgICAgICA6ICJhIiAoYWRkcikpOworfQorI2VuZGlmIC8qIENQVV9NNjgwMjBfT1JfTTY4MDMwICovCisjZW5kaWYgLyogIUNPTkZJR19TVU4zICovCisKK2FzbWxpbmthZ2Ugdm9pZCBidXNlcnJfYyhzdHJ1Y3QgZnJhbWUgKmZwKQoreworCS8qIE9ubHkgc2V0IGVzcDAgaWYgY29taW5nIGZyb20gdXNlciBtb2RlICovCisJaWYgKHVzZXJfbW9kZSgmZnAtPnB0cmVncykpCisJCWN1cnJlbnQtPnRocmVhZC5lc3AwID0gKHVuc2lnbmVkIGxvbmcpIGZwOworCisjaWZkZWYgREVCVUcKKwlwcmludGsgKCIqKiogQnVzIEVycm9yICoqKiBGb3JtYXQgaXMgJXhcbiIsIGZwLT5wdHJlZ3MuZm9ybWF0KTsKKyNlbmRpZgorCisJc3dpdGNoIChmcC0+cHRyZWdzLmZvcm1hdCkgeworI2lmIGRlZmluZWQgKENPTkZJR19NNjgwNjApCisJY2FzZSA0OgkJCQkvKiA2ODA2MCBhY2Nlc3MgZXJyb3IgKi8KKwkgIGFjY2Vzc19lcnJvcjA2MCAoZnApOworCSAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChDT05GSUdfTTY4MDQwKQorCWNhc2UgMHg3OgkJCS8qIDY4MDQwIGFjY2VzcyBlcnJvciAqLworCSAgYWNjZXNzX2Vycm9yMDQwIChmcCk7CisJICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQgKENQVV9NNjgwMjBfT1JfTTY4MDMwKQorCWNhc2UgMHhhOgorCWNhc2UgMHhiOgorCSAgYnVzX2Vycm9yMDMwIChmcCk7CisJICBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJICBkaWVfaWZfa2VybmVsKCJiYWQgZnJhbWUgZm9ybWF0IiwmZnAtPnB0cmVncywwKTsKKyNpZmRlZiBERUJVRworCSAgcHJpbnRrKCJVbmtub3duIFNJR1NFR1YgLSA0XG4iKTsKKyNlbmRpZgorCSAgZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCX0KK30KKworCitzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDQ4OworCit2b2lkIHNob3dfdHJhY2UodW5zaWduZWQgbG9uZyAqc3RhY2spCit7CisJdW5zaWduZWQgbG9uZyAqZW5kc3RhY2s7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBpOworCisJcHJpbnRrKCJDYWxsIFRyYWNlOiIpOworCWFkZHIgPSAodW5zaWduZWQgbG9uZylzdGFjayArIFRIUkVBRF9TSVpFIC0gMTsKKwllbmRzdGFjayA9ICh1bnNpZ25lZCBsb25nICopKGFkZHIgJiAtVEhSRUFEX1NJWkUpOworCWkgPSAwOworCXdoaWxlIChzdGFjayArIDEgPD0gZW5kc3RhY2spIHsKKwkJYWRkciA9ICpzdGFjaysrOworCQkvKgorCQkgKiBJZiB0aGUgYWRkcmVzcyBpcyBlaXRoZXIgaW4gdGhlIHRleHQgc2VnbWVudCBvZiB0aGUKKwkJICoga2VybmVsLCBvciBpbiB0aGUgcmVnaW9uIHdoaWNoIGNvbnRhaW5zIHZtYWxsb2MnZWQKKwkJICogbWVtb3J5LCBpdCAqbWF5KiBiZSB0aGUgYWRkcmVzcyBvZiBhIGNhbGxpbmcKKwkJICogcm91dGluZTsgaWYgc28sIHByaW50IGl0IHNvIHRoYXQgc29tZW9uZSB0cmFjaW5nCisJCSAqIGRvd24gdGhlIGNhdXNlIG9mIHRoZSBjcmFzaCB3aWxsIGJlIGFibGUgdG8gZmlndXJlCisJCSAqIG91dCB0aGUgY2FsbCBwYXRoIHRoYXQgd2FzIHRha2VuLgorCQkgKi8KKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworI2lmbmRlZiBDT05GSUdfS0FMTFNZTVMKKwkJCWlmIChpICUgNSA9PSAwKQorCQkJCXByaW50aygiXG4gICAgICAgIik7CisjZW5kaWYKKwkJCXByaW50aygiIFs8JTA4bHg+XSIsIGFkZHIpOworCQkJcHJpbnRfc3ltYm9sKCIgJXNcbiIsIGFkZHIpOworCQkJaSsrOworCQl9CisJfQorCXByaW50aygiXG4iKTsKK30KKwordm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZnJhbWUgKmZwID0gKHN0cnVjdCBmcmFtZSAqKXJlZ3M7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBpOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSZmcC0+dW47CisJcHJpbnRrKCJGcmFtZSBmb3JtYXQ9JVggIiwgZnAtPnB0cmVncy5mb3JtYXQpOworCXN3aXRjaCAoZnAtPnB0cmVncy5mb3JtYXQpIHsKKwljYXNlIDB4MjoKKwkgICAgcHJpbnRrKCJpbnN0ciBhZGRyPSUwOGx4XG4iLCBmcC0+dW4uZm10Mi5pYWRkcik7CisJICAgIGFkZHIgKz0gc2l6ZW9mKGZwLT51bi5mbXQyKTsKKwkgICAgYnJlYWs7CisJY2FzZSAweDM6CisJICAgIHByaW50aygiZWZmIGFkZHI9JTA4bHhcbiIsIGZwLT51bi5mbXQzLmVmZmFkZHIpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10Myk7CisJICAgIGJyZWFrOworCWNhc2UgMHg0OgorCSAgICBwcmludGsoKENQVV9JU18wNjAgPyAiZmF1bHQgYWRkcj0lMDhseCBmc2x3PSUwOGx4XG4iCisJCSAgICA6ICJlZmYgYWRkcj0lMDhseCBwYz0lMDhseFxuIiksCisJCSAgIGZwLT51bi5mbXQ0LmVmZmFkZHIsIGZwLT51bi5mbXQ0LnBjKTsKKwkgICAgYWRkciArPSBzaXplb2YoZnAtPnVuLmZtdDQpOworCSAgICBicmVhazsKKwljYXNlIDB4NzoKKwkgICAgcHJpbnRrKCJlZmYgYWRkcj0lMDhseCBzc3c9JTA0eCBmYWRkcj0lMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdDcuZWZmYWRkciwgZnAtPnVuLmZtdDcuc3N3LCBmcC0+dW4uZm10Ny5mYWRkcik7CisJICAgIHByaW50aygid2IgMSBzdGF0L2FkZHIvZGF0YTogJTA0eCAlMDhseCAlMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdDcud2IxcywgZnAtPnVuLmZtdDcud2IxYSwgZnAtPnVuLmZtdDcud2IxZHBkMCk7CisJICAgIHByaW50aygid2IgMiBzdGF0L2FkZHIvZGF0YTogJTA0eCAlMDhseCAlMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdDcud2IycywgZnAtPnVuLmZtdDcud2IyYSwgZnAtPnVuLmZtdDcud2IyZCk7CisJICAgIHByaW50aygid2IgMyBzdGF0L2FkZHIvZGF0YTogJTA0eCAlMDhseCAlMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdDcud2IzcywgZnAtPnVuLmZtdDcud2IzYSwgZnAtPnVuLmZtdDcud2IzZCk7CisJICAgIHByaW50aygicHVzaCBkYXRhOiAlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdDcud2IxZHBkMCwgZnAtPnVuLmZtdDcucGQxLCBmcC0+dW4uZm10Ny5wZDIsCisJCSAgIGZwLT51bi5mbXQ3LnBkMyk7CisJICAgIGFkZHIgKz0gc2l6ZW9mKGZwLT51bi5mbXQ3KTsKKwkgICAgYnJlYWs7CisJY2FzZSAweDk6CisJICAgIHByaW50aygiaW5zdHIgYWRkcj0lMDhseFxuIiwgZnAtPnVuLmZtdDkuaWFkZHIpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10OSk7CisJICAgIGJyZWFrOworCWNhc2UgMHhhOgorCSAgICBwcmludGsoInNzdz0lMDR4IGlzYz0lMDR4IGlzYj0lMDR4IGRhZGRyPSUwOGx4IGRvYnVmPSUwOGx4XG4iLAorCQkgICBmcC0+dW4uZm10YS5zc3csIGZwLT51bi5mbXRhLmlzYywgZnAtPnVuLmZtdGEuaXNiLAorCQkgICBmcC0+dW4uZm10YS5kYWRkciwgZnAtPnVuLmZtdGEuZG9idWYpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10YSk7CisJICAgIGJyZWFrOworCWNhc2UgMHhiOgorCSAgICBwcmludGsoInNzdz0lMDR4IGlzYz0lMDR4IGlzYj0lMDR4IGRhZGRyPSUwOGx4IGRvYnVmPSUwOGx4XG4iLAorCQkgICBmcC0+dW4uZm10Yi5zc3csIGZwLT51bi5mbXRiLmlzYywgZnAtPnVuLmZtdGIuaXNiLAorCQkgICBmcC0+dW4uZm10Yi5kYWRkciwgZnAtPnVuLmZtdGIuZG9idWYpOworCSAgICBwcmludGsoImJhZGRyPSUwOGx4IGRpYnVmPSUwOGx4IHZlcj0leFxuIiwKKwkJICAgZnAtPnVuLmZtdGIuYmFkZHIsIGZwLT51bi5mbXRiLmRpYnVmLCBmcC0+dW4uZm10Yi52ZXIpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10Yik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHByaW50aygiXG4iKTsKKwl9CisJc2hvd19zdGFjayhOVUxMLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpOworCisJcHJpbnRrKCJDb2RlOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJcHJpbnRrKCIlMDR4ICIsIDB4ZmZmZiAmICgoc2hvcnQgKikgZnAtPnB0cmVncy5wYylbaV0pOworCXByaW50ayAoIlxuIik7Cit9CisKK3ZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKQoreworCXVuc2lnbmVkIGxvbmcgKmVuZHN0YWNrOworCWludCBpOworCisJaWYgKCFzdGFjaykgeworCQlpZiAodGFzaykKKwkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuZXNwMDsKKwkJZWxzZQorCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSZzdGFjazsKKwl9CisJZW5kc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpc3RhY2sgKyBUSFJFQURfU0laRSAtIDEpICYgLVRIUkVBRF9TSVpFKTsKKworCXByaW50aygiU3RhY2sgZnJvbSAlMDhseDoiLCAodW5zaWduZWQgbG9uZylzdGFjayk7CisJZm9yIChpID0gMDsgaSA8IGtzdGFja19kZXB0aF90b19wcmludDsgaSsrKSB7CisJCWlmIChzdGFjayArIDEgPiBlbmRzdGFjaykKKwkJCWJyZWFrOworCQlpZiAoaSAlIDggPT0gMCkKKwkJCXByaW50aygiXG4gICAgICAgIik7CisJCXByaW50aygiICUwOGx4IiwgKnN0YWNrKyspOworCX0KKwlwcmludGsoIlxuIik7CisJc2hvd190cmFjZShzdGFjayk7Cit9CisKKy8qCisgKiBUaGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGJhY2t0cmFjZSBnZW5lcmF0b3IKKyAqLwordm9pZCBkdW1wX3N0YWNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFjazsKKworCXNob3dfdHJhY2UoJnN0YWNrKTsKK30KKworRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKKwordm9pZCBiYWRfc3VwZXJfdHJhcCAoc3RydWN0IGZyYW1lICpmcCkKK3sKKwljb25zb2xlX3ZlcmJvc2UoKTsKKwlpZiAoZnAtPnB0cmVncy52ZWN0b3IgPCA0KnNpemVvZih2ZWNfbmFtZXMpL3NpemVvZih2ZWNfbmFtZXNbMF0pKQorCQlwcmludGsgKCIqKiogJXMgKioqICAgRk9STUFUPSVYXG4iLAorCQkJdmVjX25hbWVzWyhmcC0+cHRyZWdzLnZlY3RvcikgPj4gMl0sCisJCQlmcC0+cHRyZWdzLmZvcm1hdCk7CisJZWxzZQorCQlwcmludGsgKCIqKiogRXhjZXB0aW9uICVkICoqKiAgIEZPUk1BVD0lWFxuIiwKKwkJCShmcC0+cHRyZWdzLnZlY3RvcikgPj4gMiwKKwkJCWZwLT5wdHJlZ3MuZm9ybWF0KTsKKwlpZiAoZnAtPnB0cmVncy52ZWN0b3IgPj4gMiA9PSBWRUNfQUREUkVSUiAmJiBDUFVfSVNfMDIwX09SXzAzMCkgeworCQl1bnNpZ25lZCBzaG9ydCBzc3cgPSBmcC0+dW4uZm10Yi5zc3c7CisKKwkJcHJpbnRrICgiU1NXPSUjMDZ4ICAiLCBzc3cpOworCisJCWlmIChzc3cgJiBSQykKKwkJCXByaW50ayAoIlBpcGUgc3RhZ2UgQyBpbnN0cnVjdGlvbiBmYXVsdCBhdCAlIzAxMGx4XG4iLAorCQkJCShmcC0+cHRyZWdzLmZvcm1hdCkgPT0gMHhBID8KKwkJCQlmcC0+cHRyZWdzLnBjICsgMiA6IGZwLT51bi5mbXRiLmJhZGRyIC0gMik7CisJCWlmIChzc3cgJiBSQikKKwkJCXByaW50ayAoIlBpcGUgc3RhZ2UgQiBpbnN0cnVjdGlvbiBmYXVsdCBhdCAlIzAxMGx4XG4iLAorCQkJCShmcC0+cHRyZWdzLmZvcm1hdCkgPT0gMHhBID8KKwkJCQlmcC0+cHRyZWdzLnBjICsgNCA6IGZwLT51bi5mbXRiLmJhZGRyKTsKKwkJaWYgKHNzdyAmIERGKQorCQkJcHJpbnRrICgiRGF0YSAlcyBmYXVsdCBhdCAlIzAxMGx4IGluICVzIChwYz0lI2x4KVxuIiwKKwkJCQlzc3cgJiBSVyA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkJZnAtPnVuLmZtdGIuZGFkZHIsIHNwYWNlX25hbWVzW3NzdyAmIERGQ10sCisJCQkJZnAtPnB0cmVncy5wYyk7CisJfQorCXByaW50ayAoIkN1cnJlbnQgcHJvY2VzcyBpZCBpcyAlZFxuIiwgY3VycmVudC0+cGlkKTsKKwlkaWVfaWZfa2VybmVsKCJCQUQgS0VSTkVMIFRSQVAiLCAmZnAtPnB0cmVncywgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCB0cmFwX2Moc3RydWN0IGZyYW1lICpmcCkKK3sKKwlpbnQgc2lnOworCXNpZ2luZm9fdCBpbmZvOworCisJaWYgKGZwLT5wdHJlZ3Muc3IgJiBQU19TKSB7CisJCWlmICgoZnAtPnB0cmVncy52ZWN0b3IgPj4gMikgPT0gVkVDX1RSQUNFKSB7CisJCQkvKiB0cmFjZWQgYSB0cmFwcGluZyBpbnN0cnVjdGlvbiAqLworCQkJY3VycmVudC0+cHRyYWNlIHw9IFBUX0RUUkFDRTsKKwkJfSBlbHNlCisJCQliYWRfc3VwZXJfdHJhcChmcCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZW5kIHRoZSBhcHByb3ByaWF0ZSBzaWduYWwgdG8gdGhlIHVzZXIgcHJvZ3JhbSAqLworCXN3aXRjaCAoKGZwLT5wdHJlZ3MudmVjdG9yKSA+PiAyKSB7CisJICAgIGNhc2UgVkVDX0FERFJFUlI6CisJCWluZm8uc2lfY29kZSA9IEJVU19BRFJBTE47CisJCXNpZyA9IFNJR0JVUzsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX0lMTEVHQUw6CisJICAgIGNhc2UgVkVDX0xJTkUxMDoKKwkgICAgY2FzZSBWRUNfTElORTExOgorCQlpbmZvLnNpX2NvZGUgPSBJTExfSUxMT1BDOworCQlzaWcgPSBTSUdJTEw7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19QUklWOgorCQlpbmZvLnNpX2NvZGUgPSBJTExfUFJWT1BDOworCQlzaWcgPSBTSUdJTEw7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19DT1BST0M6CisJCWluZm8uc2lfY29kZSA9IElMTF9DT1BST0M7CisJCXNpZyA9IFNJR0lMTDsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX1RSQVAxOgorCSAgICBjYXNlIFZFQ19UUkFQMjoKKwkgICAgY2FzZSBWRUNfVFJBUDM6CisJICAgIGNhc2UgVkVDX1RSQVA0OgorCSAgICBjYXNlIFZFQ19UUkFQNToKKwkgICAgY2FzZSBWRUNfVFJBUDY6CisJICAgIGNhc2UgVkVDX1RSQVA3OgorCSAgICBjYXNlIFZFQ19UUkFQODoKKwkgICAgY2FzZSBWRUNfVFJBUDk6CisJICAgIGNhc2UgVkVDX1RSQVAxMDoKKwkgICAgY2FzZSBWRUNfVFJBUDExOgorCSAgICBjYXNlIFZFQ19UUkFQMTI6CisJICAgIGNhc2UgVkVDX1RSQVAxMzoKKwkgICAgY2FzZSBWRUNfVFJBUDE0OgorCQlpbmZvLnNpX2NvZGUgPSBJTExfSUxMVFJQOworCQlzaWcgPSBTSUdJTEw7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19GUEJSVUM6CisJICAgIGNhc2UgVkVDX0ZQT0U6CisJICAgIGNhc2UgVkVDX0ZQTkFOOgorCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUSU5WOworCQlzaWcgPSBTSUdGUEU7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19GUElSOgorCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOworCQlzaWcgPSBTSUdGUEU7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19GUERJVlo6CisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7CisJCXNpZyA9IFNJR0ZQRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX0ZQVU5ERVI6CisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7CisJCXNpZyA9IFNJR0ZQRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX0ZQT1ZFUjoKKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKKwkJc2lnID0gU0lHRlBFOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfWkVST0RJVjoKKwkJaW5mby5zaV9jb2RlID0gRlBFX0lOVERJVjsKKwkJc2lnID0gU0lHRlBFOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfQ0hLOgorCSAgICBjYXNlIFZFQ19UUkFQOgorCQlpbmZvLnNpX2NvZGUgPSBGUEVfSU5UT1ZGOworCQlzaWcgPSBTSUdGUEU7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19UUkFDRToJCS8qIHB0cmFjZSBzaW5nbGUgc3RlcCAqLworCQlpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOworCQlzaWcgPSBTSUdUUkFQOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfVFJBUDE1OgkJLyogYnJlYWtwb2ludCAqLworCQlpbmZvLnNpX2NvZGUgPSBUUkFQX0JSS1BUOworCQlzaWcgPSBTSUdUUkFQOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaW5mby5zaV9jb2RlID0gSUxMX0lMTE9QQzsKKwkJc2lnID0gU0lHSUxMOworCQlicmVhazsKKwl9CisJaW5mby5zaV9zaWdubyA9IHNpZzsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlzd2l0Y2ggKGZwLT5wdHJlZ3MuZm9ybWF0KSB7CisJICAgIGRlZmF1bHQ6CisJCWluZm8uc2lfYWRkciA9ICh2b2lkICopIGZwLT5wdHJlZ3MucGM7CisJCWJyZWFrOworCSAgICBjYXNlIDI6CisJCWluZm8uc2lfYWRkciA9ICh2b2lkICopIGZwLT51bi5mbXQyLmlhZGRyOworCQlicmVhazsKKwkgICAgY2FzZSA3OgorCQlpbmZvLnNpX2FkZHIgPSAodm9pZCAqKSBmcC0+dW4uZm10Ny5lZmZhZGRyOworCQlicmVhazsKKwkgICAgY2FzZSA5OgorCQlpbmZvLnNpX2FkZHIgPSAodm9pZCAqKSBmcC0+dW4uZm10OS5pYWRkcjsKKwkJYnJlYWs7CisJICAgIGNhc2UgMTA6CisJCWluZm8uc2lfYWRkciA9ICh2b2lkICopIGZwLT51bi5mbXRhLmRhZGRyOworCQlicmVhazsKKwkgICAgY2FzZSAxMToKKwkJaW5mby5zaV9hZGRyID0gKHZvaWQgKikgZnAtPnVuLmZtdGIuZGFkZHI7CisJCWJyZWFrOworCX0KKwlmb3JjZV9zaWdfaW5mbyAoc2lnLCAmaW5mbywgY3VycmVudCk7Cit9CisKK3ZvaWQgZGllX2lmX2tlcm5lbCAoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCBucikKK3sKKwlpZiAoIShmcC0+c3IgJiBQU19TKSkKKwkJcmV0dXJuOworCisJY29uc29sZV92ZXJib3NlKCk7CisJcHJpbnRrKCIlczogJTA4eFxuIixzdHIsbnIpOworCXByaW50X21vZHVsZXMoKTsKKwlwcmludGsoIlBDOiBbPCUwOGx4Pl0iLGZwLT5wYyk7CisJcHJpbnRfc3ltYm9sKCIgJXNcbiIsIGZwLT5wYyk7CisJcHJpbnRrKCJcblNSOiAlMDR4ICBTUDogJXAgIGEyOiAlMDhseFxuIiwKKwkgICAgICAgZnAtPnNyLCBmcCwgZnAtPmEyKTsKKwlwcmludGsoImQwOiAlMDhseCAgICBkMTogJTA4bHggICAgZDI6ICUwOGx4ICAgIGQzOiAlMDhseFxuIiwKKwkgICAgICAgZnAtPmQwLCBmcC0+ZDEsIGZwLT5kMiwgZnAtPmQzKTsKKwlwcmludGsoImQ0OiAlMDhseCAgICBkNTogJTA4bHggICAgYTA6ICUwOGx4ICAgIGExOiAlMDhseFxuIiwKKwkgICAgICAgZnAtPmQ0LCBmcC0+ZDUsIGZwLT5hMCwgZnAtPmExKTsKKworCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgc3RhY2twYWdlPSUwOGx4KVxuIiwKKwkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBQQUdFX1NJWkUrKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7CisJc2hvd19zdGFjayhOVUxMLCAodW5zaWduZWQgbG9uZyAqKWZwKTsKKwlkb19leGl0KFNJR1NFR1YpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgYW4gZXJyb3Igb2NjdXIgd2hpbGUgYWNjZXNzaW5nCisgKiB1c2VyLXNwYWNlIGZyb20gdGhlIGZwc3AwNDAgY29kZS4KKyAqLworYXNtbGlua2FnZSB2b2lkIGZwc3AwNDBfZGllKHZvaWQpCit7CisJZG9fZXhpdChTSUdTRUdWKTsKK30KKworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorYXNtbGlua2FnZSB2b2lkIGZwZW11X3NpZ25hbChpbnQgc2lnbmFsLCBpbnQgY29kZSwgdm9pZCAqYWRkcikKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWluZm8uc2lfc2lnbm8gPSBzaWduYWw7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gY29kZTsKKwlpbmZvLnNpX2FkZHIgPSBhZGRyOworCWZvcmNlX3NpZ19pbmZvKHNpZ25hbCwgJmluZm8sIGN1cnJlbnQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODY1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwpAQCAtMCwwICsxLDk1IEBACisvKiBsZCBzY3JpcHQgdG8gbWFrZSBtNjhrIExpbnV4IGtlcm5lbCAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbTY4ayIsICJlbGYzMi1tNjhrIiwgImVsZjMyLW02OGsiKQorT1VUUFVUX0FSQ0gobTY4aykKK0VOVFJZKF9zdGFydCkKK2ppZmZpZXMgPSBqaWZmaWVzXzY0ICsgNDsKK1NFQ1RJT05TCit7CisgIC4gPSAweDEwMDA7CisgIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLworICAudGV4dCA6IHsKKwkqKC50ZXh0KQorCVNDSEVEX1RFWFQKKwkqKC5maXh1cCkKKwkqKC5nbnUud2FybmluZykKKwl9IDp0ZXh0ID0gMHg0ZTc1CisKKyAgLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIFJPREFUQQorCisgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLworCisgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KKwkqKC5kYXRhKQorCUNPTlNUUlVDVE9SUworCX0KKworICAuYnNzIDogeyAqKC5ic3MpIH0JCS8qIEJTUyAqLworCisgIC4gPSBBTElHTigxNik7CisgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9IDpkYXRhCisKKyAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCisKKyAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCisgIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICBfX2luaXRfYmVnaW4gPSAuOworICAuaW5pdC50ZXh0IDogeworCV9zaW5pdHRleHQgPSAuOworCSooLmluaXQudGV4dCkKKwlfZWluaXR0ZXh0ID0gLjsKKyAgfQorICAuaW5pdC5kYXRhIDogeyAqKC5pbml0LmRhdGEpIH0KKyAgLiA9IEFMSUdOKDE2KTsKKyAgX19zZXR1cF9zdGFydCA9IC47CisgIC5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9CisgIF9fc2V0dXBfZW5kID0gLjsKKyAgX19pbml0Y2FsbF9zdGFydCA9IC47CisgIC5pbml0Y2FsbC5pbml0IDogeworCSooLmluaXRjYWxsMS5pbml0KQorCSooLmluaXRjYWxsMi5pbml0KQorCSooLmluaXRjYWxsMy5pbml0KQorCSooLmluaXRjYWxsNC5pbml0KQorCSooLmluaXRjYWxsNS5pbml0KQorCSooLmluaXRjYWxsNi5pbml0KQorCSooLmluaXRjYWxsNy5pbml0KQorICB9CisgIF9faW5pdGNhbGxfZW5kID0gLjsKKyAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOworICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CisgIF9fY29uX2luaXRjYWxsX2VuZCA9IC47CisgIFNFQ1VSSVRZX0lOSVQKKyAgLiA9IEFMSUdOKDgxOTIpOworICBfX2luaXRyYW1mc19zdGFydCA9IC47CisgIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9CisgIF9faW5pdHJhbWZzX2VuZCA9IC47CisgIC4gPSBBTElHTig4MTkyKTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQkvKiBUaGUgaW5pdGlhbCB0YXNrIGFuZCBrZXJuZWwgc3RhY2sgKi8KKworICBfZW5kID0gLiA7CisKKyAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisgIC9ESVNDQVJELyA6IHsKKwkqKC5leGl0LnRleHQpCisJKiguZXhpdC5kYXRhKQorCSooLmV4aXRjYWxsLmV4aXQpCisJfQorCisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgMCA6IHsgKiguY29tbWVudCkgfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzdlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKQEAgLTAsMCArMSw5NSBAQAorLyogbGQgc2NyaXB0IHRvIG1ha2UgbTY4ayBMaW51eCBrZXJuZWwgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisKK09VVFBVVF9GT1JNQVQoImVsZjMyLW02OGsiLCAiZWxmMzItbTY4ayIsICJlbGYzMi1tNjhrIikKK09VVFBVVF9BUkNIKG02OGspCitFTlRSWShfc3RhcnQpCitqaWZmaWVzID0gamlmZmllc182NCArIDQ7CitTRUNUSU9OUworeworICAuID0gMHhFMDA0MDAwOworICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KKyAgLnRleHQgOiB7CisJKiguaGVhZCkKKwkqKC50ZXh0KQorCVNDSEVEX1RFWFQKKwkqKC5maXh1cCkKKwkqKC5nbnUud2FybmluZykKKwl9IDp0ZXh0ID0gMHg0ZTc1CisJUk9EQVRBCisKKyAgX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCisKKyAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLworCSooLmRhdGEpCisJQ09OU1RSVUNUT1JTCisJLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLworCV9fc3RhcnRfX19leF90YWJsZSA9IC47CisJKihfX2V4X3RhYmxlKQorCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKwl9IDpkYXRhCisgIC8qIEVuZCBvZiBkYXRhIGdvZXMgKmhlcmUqIHNvIHRoYXQgZnJlZWluZyBpbml0IGNvZGUgd29ya3MgcHJvcGVybHkuICovCisgIF9lZGF0YSA9IC47CisKKyAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCisgIC4gPSBBTElHTig4MTkyKTsJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCitfX2luaXRfYmVnaW4gPSAuOworCS5pbml0LnRleHQgOiB7CisJCV9zaW5pdHRleHQgPSAuOworCQkqKC5pbml0LnRleHQpCisJCV9laW5pdHRleHQgPSAuOworCX0KKwkuaW5pdC5kYXRhIDogeyAqKC5pbml0LmRhdGEpIH0KKwkuID0gQUxJR04oMTYpOworCV9fc2V0dXBfc3RhcnQgPSAuOworCS5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9CisJX19zZXR1cF9lbmQgPSAuOworCV9faW5pdGNhbGxfc3RhcnQgPSAuOworCS5pbml0Y2FsbC5pbml0IDogeworCQkqKC5pbml0Y2FsbDEuaW5pdCkKKwkJKiguaW5pdGNhbGwyLmluaXQpCisJCSooLmluaXRjYWxsMy5pbml0KQorCQkqKC5pbml0Y2FsbDQuaW5pdCkKKwkJKiguaW5pdGNhbGw1LmluaXQpCisJCSooLmluaXRjYWxsNi5pbml0KQorCQkqKC5pbml0Y2FsbDcuaW5pdCkKKwl9CisJX19pbml0Y2FsbF9lbmQgPSAuOworCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKKwkuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CisJX19jb25faW5pdGNhbGxfZW5kID0gLjsKKwlTRUNVUklUWV9JTklUCisJLiA9IEFMSUdOKDgxOTIpOworCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKKwkuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQorCV9faW5pdHJhbWZzX2VuZCA9IC47CisJLiA9IEFMSUdOKDgxOTIpOworCV9faW5pdF9lbmQgPSAuOworCS5pbml0LnRhc2sgOiB7ICooaW5pdF90YXNrKSB9CisKKworICAuYnNzIDogeyAqKC5ic3MpIH0JCS8qIEJTUyAqLworCisgIF9lbmQgPSAuIDsKKworICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KKyAgL0RJU0NBUkQvIDogeworCSooLmV4aXQudGV4dCkKKwkqKC5leGl0LmRhdGEpCisJKiguZXhpdGNhbGwuZXhpdCkKKwl9CisKKyAgLmNyYXAgOiB7CisJLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKwkqKC5zdGFiKQorCSooLnN0YWJzdHIpCisJKiguc3RhYi5leGNsKQorCSooLnN0YWIuZXhjbHN0cikKKwkqKC5zdGFiLmluZGV4KQorCSooLnN0YWIuaW5kZXhzdHIpCisJKiguY29tbWVudCkKKwkqKC5ub3RlKQorICB9CisKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdiOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KK1BIRFJTCit7CisgIHRleHQgUFRfTE9BRCBGSUxFSERSIFBIRFJTIEZMQUdTICg3KTsKKyAgZGF0YSBQVF9MT0FEIEZMQUdTICg3KTsKK30KKyNpZmRlZiBDT05GSUdfU1VOMworI2luY2x1ZGUgInZtbGludXgtc3VuMy5sZHMiCisjZWxzZQorI2luY2x1ZGUgInZtbGludXgtc3RkLmxkcyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9NYWtlZmlsZSBiL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiNmRiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciBtNjhrLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgorIworCitFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCisKK2xpYi15CQk6PSBhc2hsZGkzLm8gYXNocmRpMy5vIGxzaHJkaTMubyBtdWxkaTMubyBcCisJCQljaGVja3N1bS5vIG1lbWNtcC5vIG1lbWNweS5vIG1lbXNldC5vIHNlbWFwaG9yZS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL2FzaGxkaTMuYyBiL2FyY2gvbTY4ay9saWIvYXNobGRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjlmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL2FzaGxkaTMuYwpAQCAtMCwwICsxLDYyIEBACisvKiBhc2hyZGkzLmMgZXh0cmFjdGVkIGZyb20gZ2NjLTIuOTUuMi9saWJnY2MyLmMgd2hpY2ggaXM6ICovCisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDkyLTk4LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgQklUU19QRVJfVU5JVCA4CisKK3R5cGVkZWYJCSBpbnQgU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVTSXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZgkJIGludCBESXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOwordHlwZWRlZiBpbnQgd29yZF90eXBlIF9fYXR0cmlidXRlX18gKChtb2RlIChfX3dvcmRfXykpKTsKKworc3RydWN0IERJc3RydWN0IHtTSXR5cGUgaGlnaCwgbG93O307CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0IERJc3RydWN0IHM7CisgIERJdHlwZSBsbDsKK30gREl1bmlvbjsKKworREl0eXBlCitfX2FzaGxkaTMgKERJdHlwZSB1LCB3b3JkX3R5cGUgYikKK3sKKyAgREl1bmlvbiB3OworICB3b3JkX3R5cGUgYm07CisgIERJdW5pb24gdXU7CisKKyAgaWYgKGIgPT0gMCkKKyAgICByZXR1cm4gdTsKKworICB1dS5sbCA9IHU7CisKKyAgYm0gPSAoc2l6ZW9mIChTSXR5cGUpICogQklUU19QRVJfVU5JVCkgLSBiOworICBpZiAoYm0gPD0gMCkKKyAgICB7CisgICAgICB3LnMubG93ID0gMDsKKyAgICAgIHcucy5oaWdoID0gKFVTSXR5cGUpdXUucy5sb3cgPDwgLWJtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFVTSXR5cGUgY2FycmllcyA9IChVU0l0eXBlKXV1LnMubG93ID4+IGJtOworICAgICAgdy5zLmxvdyA9IChVU0l0eXBlKXV1LnMubG93IDw8IGI7CisgICAgICB3LnMuaGlnaCA9ICgoVVNJdHlwZSl1dS5zLmhpZ2ggPDwgYikgfCBjYXJyaWVzOworICAgIH0KKworICByZXR1cm4gdy5sbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvYXNocmRpMy5jIGIvYXJjaC9tNjhrL2xpYi9hc2hyZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlYTVmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvYXNocmRpMy5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qIGFzaHJkaTMuYyBleHRyYWN0ZWQgZnJvbSBnY2MtMi43LjIvbGliZ2NjMi5jIHdoaWNoIGlzOiAqLworLyogQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgQklUU19QRVJfVU5JVCA4CisKK3R5cGVkZWYJCSBpbnQgU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVTSXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZgkJIGludCBESXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOwordHlwZWRlZiBpbnQgd29yZF90eXBlIF9fYXR0cmlidXRlX18gKChtb2RlIChfX3dvcmRfXykpKTsKKworc3RydWN0IERJc3RydWN0IHtTSXR5cGUgaGlnaCwgbG93O307CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0IERJc3RydWN0IHM7CisgIERJdHlwZSBsbDsKK30gREl1bmlvbjsKKworREl0eXBlCitfX2FzaHJkaTMgKERJdHlwZSB1LCB3b3JkX3R5cGUgYikKK3sKKyAgREl1bmlvbiB3OworICB3b3JkX3R5cGUgYm07CisgIERJdW5pb24gdXU7CisKKyAgaWYgKGIgPT0gMCkKKyAgICByZXR1cm4gdTsKKworICB1dS5sbCA9IHU7CisKKyAgYm0gPSAoc2l6ZW9mIChTSXR5cGUpICogQklUU19QRVJfVU5JVCkgLSBiOworICBpZiAoYm0gPD0gMCkKKyAgICB7CisgICAgICAvKiB3LnMuaGlnaCA9IDEuLjEgb3IgMC4uMCAqLworICAgICAgdy5zLmhpZ2ggPSB1dS5zLmhpZ2ggPj4gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQgLSAxKTsKKyAgICAgIHcucy5sb3cgPSB1dS5zLmhpZ2ggPj4gLWJtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFVTSXR5cGUgY2FycmllcyA9IChVU0l0eXBlKXV1LnMuaGlnaCA8PCBibTsKKyAgICAgIHcucy5oaWdoID0gdXUucy5oaWdoID4+IGI7CisgICAgICB3LnMubG93ID0gKChVU0l0eXBlKXV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL2NoZWNrc3VtLmMgYi9hcmNoL202OGsvbGliL2NoZWNrc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1YzU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvY2hlY2tzdW0uYwpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlJUC9UQ1AvVURQIGNoZWNrc3VtbWluZyByb3V0aW5lcworICoKKyAqIEF1dGhvcnM6CUpvcmdlIEN3aWssIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4KKyAqCQlBcm50IEd1bGJyYW5kc2VuLCA8YWd1bGJyYUBudmcudW5pdC5ubz4KKyAqCQlUb20gTWF5LCA8ZnRvbUBuZXRjb20uY29tPgorICoJCUFuZHJlYXMgU2Nod2FiLCA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorICoJCUxvdHMgb2YgY29kZSBtb3ZlZCBmcm9tIHRjcC5jIGFuZCBpcC5jOyBzZWUgdGhvc2UgZmlsZXMKKyAqCQlmb3IgbW9yZSBuYW1lcy4KKyAqCisgKiAwMy8wMi85NglKZXMgU29yZW5zZW4sIEFuZHJlYXMgU2Nod2FiLCBSb21hbiBIb2RlazoKKyAqCQlGaXhlZCBzb21lIG5hc3R5IGJ1Z3MsIGNhdXNpbmcgc29tZSBob3JyaWJsZSBjcmFzaGVzLgorICoJCUE6IEF0IHNvbWUgcG9pbnRzLCB0aGUgc3VtICglMCkgd2FzIHVzZWQgYXMKKyAqCQlsZW5ndGgtY291bnRlciBpbnN0ZWFkIG9mIHRoZSBsZW5ndGggY291bnRlcgorICoJCSglMSkuIFRoYW5rcyB0byBSb21hbiBIb2RlayBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisgKgkJQjogR0NDIHNlZW1zIHRvIG1lc3MgdXAgaWYgb25lIHVzZXMgdG9vIG1hbnkKKyAqCQlkYXRhLXJlZ2lzdGVycyB0byBob2xkIGlucHV0IHZhbHVlcyBhbmQgb25lIHRyaWVzIHRvCisgKgkJc3BlY2lmeSBkMCBhbmQgZDEgYXMgc2NyYXRjaCByZWdpc3RlcnMuIExldHRpbmcgZ2NjCisgKgkJY2hvb3NlIHRoZXNlIHJlZ2lzdGVycyBpdHNlbGYgc29sdmVzIHRoZSBwcm9ibGVtLgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIDE5OTgvOC8zMQlBbmRyZWFzIFNjaHdhYjoKKyAqCQlaZXJvIG91dCByZXN0IG9mIGJ1ZmZlciBvbiBleGNlcHRpb24gaW4KKyAqCQljc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorCisvKgorICogY29tcHV0ZXMgYSBwYXJ0aWFsIGNoZWNrc3VtLCBlLmcuIGZvciBUQ1AvVURQIGZyYWdtZW50cworICovCisKK3Vuc2lnbmVkIGludAorY3N1bV9wYXJ0aWFsIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKwkgIC8qCisJICAgKiBFeHBlcmltZW50cyB3aXRoIGV0aGVybmV0IGFuZCBzbGlwIGNvbm5lY3Rpb25zIHNob3cgdGhhdCBidWZmCisJICAgKiBpcyBhbGlnbmVkIG9uIGVpdGhlciBhIDItYnl0ZSBvciA0LWJ5dGUgYm91bmRhcnkuCisJICAgKi8KKwlfX2FzbV9fKCJtb3ZlbCAlMiwlM1xuXHQiCisJCSJidHN0ICMxLCUzXG5cdCIJLyogQ2hlY2sgYWxpZ25tZW50ICovCisJCSJqZXEgMmZcblx0IgorCQkic3VicWwgIzIsJTFcblx0IgkvKiBidWZmJTQ9PTI6IHRyZWF0IGZpcnN0IHdvcmQgKi8KKwkJImpndCAxZlxuXHQiCisJCSJhZGRxbCAjMiwlMVxuXHQiCS8qIGxlbiB3YXMgPT0gMiwgdHJlYXQgb25seSByZXN0ICovCisJCSJqcmEgNGZcbiIKKwkgICAgICIxOlx0IgorCQkiYWRkdyAlMkArLCUwXG5cdCIJLyogYWRkIGZpcnN0IHdvcmQgdG8gc3VtICovCisJCSJjbHJsICUzXG5cdCIKKwkJImFkZHhsICUzLCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICIyOlx0IgorCQkvKiB1bnJvbGxlZCBsb29wIGZvciB0aGUgbWFpbiBwYXJ0OiBkbyA4IGxvbmdzIGF0IG9uY2UgKi8KKwkJIm1vdmVsICUxLCUzXG5cdCIJLyogc2F2ZSBsZW4gaW4gdG1wMSAqLworCQkibHNybCAjNSwlMVxuXHQiCS8qIGxlbi8zMiAqLworCQkiamVxIDJmXG5cdCIJCS8qIG5vdCBlbm91Z2guLi4gKi8KKwkJInN1YnFsICMxLCUxXG4iCisJICAgICAiMTpcdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJtb3ZlbCAlMkArLCU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJtb3ZlbCAlMkArLCU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJkYnJhICUxLDFiXG5cdCIKKwkJImNscmwgJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgkvKiBhZGQgWCBiaXQgKi8KKwkJImNscncgJTFcblx0IgorCQkic3VicWwgIzEsJTFcblx0IgorCQkiamNjIDFiXG4iCisJICAgICAiMjpcdCIKKwkJIm1vdmVsICUzLCUxXG5cdCIJLyogcmVzdG9yZSBsZW4gZnJvbSB0bXAxICovCisJCSJhbmR3ICMweDFjLCUzXG5cdCIJLyogbnVtYmVyIG9mIHJlc3QgbG9uZ3MgKi8KKwkJImplcSA0ZlxuXHQiCisJCSJsc3J3ICMyLCUzXG5cdCIKKwkJInN1YnF3ICMxLCUzXG4iCisJICAgICAiMzpcdCIKKwkJLyogbG9vcCBmb3IgcmVzdCBsb25ncyAqLworCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJkYnJhICUzLDNiXG5cdCIKKwkJImNscmwgJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcbiIJCS8qIGFkZCBYIGJpdCAqLworCSAgICAgIjQ6XHQiCisJCS8qIG5vdyBjaGVjayBmb3IgcmVzdCBieXRlcyB0aGF0IGRvIG5vdCBmaXQgaW50byBsb25ncyAqLworCQkiYW5kdyAjMywlMVxuXHQiCisJCSJqZXEgN2Zcblx0IgorCQkiY2xybCAlNFxuXHQiCQkvKiBjbGVhciB0bXAyIGZvciByZXN0IGJ5dGVzICovCisJCSJzdWJxdyAjMiwlMVxuXHQiCisJCSJqbHQgNWZcblx0IgorCQkibW92ZXcgJTJAKywlNFxuXHQiCS8qIGhhdmUgcmVzdCA+PSAyOiBnZXQgd29yZCAqLworCQkic3dhcCAlNFxuXHQiCQkvKiBpbnRvIGJpdHMgMTYuLjMxICovCisJCSJ0c3R3ICUxXG5cdCIJCS8qIGFub3RoZXIgYnl0ZT8gKi8KKwkJImplcSA2ZlxuIgorCSAgICAgIjU6XHQiCisJCSJtb3ZlYiAlMkAsJTRcblx0IgkvKiBoYXZlIG9kZCByZXN0OiBnZXQgYnl0ZSAqLworCQkibHNsdyAjOCwlNFxuXHQiCS8qIGludG8gYml0cyA4Li4xNTsgMTYuLjMxIHVudG91Y2hlZCAqLworCSAgICAgIjY6XHQiCisJCSJhZGRsICU0LCUwXG5cdCIJLyogbm93IGFkZCByZXN0IGxvbmcgdG8gc3VtICovCisJCSJjbHJsICU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICI3Olx0IgorCQk6ICI9ZCIgKHN1bSksICI9ZCIgKGxlbiksICI9YSIgKGJ1ZmYpLAorCQkgICI9JmQiICh0bXAxKSwgIj0mZCIgKHRtcDIpCisJCTogIjAiIChzdW0pLCAiMSIgKGxlbiksICIyIiAoYnVmZikKKwkgICAgKTsKKwlyZXR1cm4oc3VtKTsKK30KKworRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOworCisKKy8qCisgKiBjb3B5IGZyb20gdXNlciBzcGFjZSB3aGlsZSBjaGVja3N1bW1pbmcsIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nLgorICovCisKK3Vuc2lnbmVkIGludAorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAorCQkJICAgIGludCBsZW4sIGludCBzdW0sIGludCAqY3N1bV9lcnIpCit7CisJLyoKKwkgKiBHQ0MgZG9lc24ndCBsaWtlIG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBmb3IgdGhlIGFzbQorCSAqIHN0YXRlbWVudHMgc28gd2UgaGF2ZSB0byB1c2UgdG1wMiBmb3IgdGhlIGVycm9yCisJICogY29kZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fKCJtb3ZlbCAlMiwlNFxuXHQiCisJCSJidHN0ICMxLCU0XG5cdCIJLyogQ2hlY2sgYWxpZ25tZW50ICovCisJCSJqZXEgMmZcblx0IgorCQkic3VicWwgIzIsJTFcblx0IgkvKiBidWZmJTQ9PTI6IHRyZWF0IGZpcnN0IHdvcmQgKi8KKwkJImpndCAxZlxuXHQiCisJCSJhZGRxbCAjMiwlMVxuXHQiCS8qIGxlbiB3YXMgPT0gMiwgdHJlYXQgb25seSByZXN0ICovCisJCSJqcmEgNGZcbiIKKwkgICAgICIxOlxuIgorCSAgICAgIjEwOlx0IgorCQkibW92ZXN3ICUyQCssJTRcblx0IgkvKiBhZGQgZmlyc3Qgd29yZCB0byBzdW0gKi8KKwkJImFkZHcgJTQsJTBcblx0IgorCQkibW92ZXcgJTQsJTNAK1xuXHQiCisJCSJjbHJsICU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICIyOlx0IgorCQkvKiB1bnJvbGxlZCBsb29wIGZvciB0aGUgbWFpbiBwYXJ0OiBkbyA4IGxvbmdzIGF0IG9uY2UgKi8KKwkJIm1vdmVsICUxLCU0XG5cdCIJLyogc2F2ZSBsZW4gaW4gdG1wMSAqLworCQkibHNybCAjNSwlMVxuXHQiCS8qIGxlbi8zMiAqLworCQkiamVxIDJmXG5cdCIJCS8qIG5vdCBlbm91Z2guLi4gKi8KKwkJInN1YnFsICMxLCUxXG4iCisJICAgICAiMTpcbiIKKwkgICAgICIxMTpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCSAgICAgIjEyOlx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJICAgICAiMTM6XHQiCisJCSJtb3Zlc2wgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkgICAgICIxNDpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCSAgICAgIjE1Olx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJICAgICAiMTY6XHQiCisJCSJtb3Zlc2wgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkgICAgICIxNzpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCSAgICAgIjE4Olx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJkYnJhICUxLDFiXG5cdCIKKwkJImNscmwgJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgkvKiBhZGQgWCBiaXQgKi8KKwkJImNscncgJTFcblx0IgorCQkic3VicWwgIzEsJTFcblx0IgorCQkiamNjIDFiXG4iCisJICAgICAiMjpcdCIKKwkJIm1vdmVsICU0LCUxXG5cdCIJLyogcmVzdG9yZSBsZW4gZnJvbSB0bXAxICovCisJCSJhbmR3ICMweDFjLCU0XG5cdCIJLyogbnVtYmVyIG9mIHJlc3QgbG9uZ3MgKi8KKwkJImplcSA0ZlxuXHQiCisJCSJsc3J3ICMyLCU0XG5cdCIKKwkJInN1YnF3ICMxLCU0XG4iCisJICAgICAiMzpcbiIKKwkJLyogbG9vcCBmb3IgcmVzdCBsb25ncyAqLworCSAgICAgIjE5Olx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJkYnJhICU0LDNiXG5cdCIKKwkJImNscmwgJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcbiIJCS8qIGFkZCBYIGJpdCAqLworCSAgICAgIjQ6XHQiCisJCS8qIG5vdyBjaGVjayBmb3IgcmVzdCBieXRlcyB0aGF0IGRvIG5vdCBmaXQgaW50byBsb25ncyAqLworCQkiYW5kdyAjMywlMVxuXHQiCisJCSJqZXEgN2Zcblx0IgorCQkiY2xybCAlNVxuXHQiCQkvKiBjbGVhciB0bXAyIGZvciByZXN0IGJ5dGVzICovCisJCSJzdWJxdyAjMiwlMVxuXHQiCisJCSJqbHQgNWZcblx0IgorCSAgICAgIjIwOlx0IgorCQkibW92ZXN3ICUyQCssJTVcblx0IgkvKiBoYXZlIHJlc3QgPj0gMjogZ2V0IHdvcmQgKi8KKwkJIm1vdmV3ICU1LCUzQCtcblx0IgorCQkic3dhcCAlNVxuXHQiCQkvKiBpbnRvIGJpdHMgMTYuLjMxICovCisJCSJ0c3R3ICUxXG5cdCIJCS8qIGFub3RoZXIgYnl0ZT8gKi8KKwkJImplcSA2ZlxuIgorCSAgICAgIjU6XG4iCisJICAgICAiMjE6XHQiCisJCSJtb3Zlc2IgJTJALCU1XG5cdCIJLyogaGF2ZSBvZGQgcmVzdDogZ2V0IGJ5dGUgKi8KKwkJIm1vdmViICU1LCUzQCtcblx0IgorCQkibHNsdyAjOCwlNVxuXHQiCS8qIGludG8gYml0cyA4Li4xNTsgMTYuLjMxIHVudG91Y2hlZCAqLworCSAgICAgIjY6XHQiCisJCSJhZGRsICU1LCUwXG5cdCIJLyogbm93IGFkZCByZXN0IGxvbmcgdG8gc3VtICovCisJCSJjbHJsICU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIJLyogYWRkIFggYml0ICovCisJICAgICAiNzpcdCIKKwkJImNscmwgJTVcbiIJCS8qIG5vIGVycm9yIC0gY2xlYXIgcmV0dXJuIHZhbHVlICovCisJICAgICAiODpcbiIKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJIi5ldmVuXG4iCisJCS8qIElmIGFueSBleGNlcHRpb24gb2NjdXJzIHplcm8gb3V0IHRoZSByZXN0LgorCQkgICBTaW1pbGFyaXRpZXMgd2l0aCB0aGUgY29kZSBhYm92ZSBhcmUgaW50ZW50aW9uYWwgOi0pICovCisJICAgICAiOTA6XHQiCisJCSJjbHJ3ICUzQCtcblx0IgorCQkibW92ZWwgJTEsJTRcblx0IgorCQkibHNybCAjNSwlMVxuXHQiCisJCSJqZXEgMWZcblx0IgorCQkic3VicWwgIzEsJTFcbiIKKwkgICAgICI5MTpcdCIKKwkJImNscmwgJTNAK1xuIgorCSAgICAgIjkyOlx0IgorCQkiY2xybCAlM0ArXG4iCisJICAgICAiOTM6XHQiCisJCSJjbHJsICUzQCtcbiIKKwkgICAgICI5NDpcdCIKKwkJImNscmwgJTNAK1xuIgorCSAgICAgIjk1Olx0IgorCQkiY2xybCAlM0ArXG4iCisJICAgICAiOTY6XHQiCisJCSJjbHJsICUzQCtcbiIKKwkgICAgICI5NzpcdCIKKwkJImNscmwgJTNAK1xuIgorCSAgICAgIjk4Olx0IgorCQkiY2xybCAlM0ArXG5cdCIKKwkJImRicmEgJTEsOTFiXG5cdCIKKwkJImNscncgJTFcblx0IgorCQkic3VicWwgIzEsJTFcblx0IgorCQkiamNjIDkxYlxuIgorCSAgICAgIjE6XHQiCisJCSJtb3ZlbCAlNCwlMVxuXHQiCisJCSJhbmR3ICMweDFjLCU0XG5cdCIKKwkJImplcSAxZlxuXHQiCisJCSJsc3J3ICMyLCU0XG5cdCIKKwkJInN1YnF3ICMxLCU0XG4iCisJICAgICAiOTk6XHQiCisJCSJjbHJsICUzQCtcblx0IgorCQkiZGJyYSAlNCw5OWJcblx0IgorCSAgICAgIjE6XHQiCisJCSJhbmR3ICMzLCUxXG5cdCIKKwkJImplcSA5ZlxuIgorCSAgICAgIjEwMDpcdCIKKwkJImNscncgJTNAK1xuXHQiCisJCSJ0c3R3ICUxXG5cdCIKKwkJImplcSA5ZlxuIgorCSAgICAgIjEwMTpcdCIKKwkJImNscmIgJTNAK1xuIgorCSAgICAgIjk6XHQiCisjZGVmaW5lIFNUUihYKSBTVFIxKFgpCisjZGVmaW5lIFNUUjEoWCkgI1gKKwkJIm1vdmVxICMtIiBTVFIoRUZBVUxUKSAiLCU1XG5cdCIKKwkJImpyYSA4YlxuIgorCQkiLnByZXZpb3VzXG4iCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCSIubG9uZyAxMGIsOTBiXG4iCisJCSIubG9uZyAxMWIsOTFiXG4iCisJCSIubG9uZyAxMmIsOTJiXG4iCisJCSIubG9uZyAxM2IsOTNiXG4iCisJCSIubG9uZyAxNGIsOTRiXG4iCisJCSIubG9uZyAxNWIsOTViXG4iCisJCSIubG9uZyAxNmIsOTZiXG4iCisJCSIubG9uZyAxN2IsOTdiXG4iCisJCSIubG9uZyAxOGIsOThiXG4iCisJCSIubG9uZyAxOWIsOTliXG4iCisJCSIubG9uZyAyMGIsMTAwYlxuIgorCQkiLmxvbmcgMjFiLDEwMWJcbiIKKwkJIi5wcmV2aW91cyIKKwkJOiAiPWQiIChzdW0pLCAiPWQiIChsZW4pLCAiPWEiIChzcmMpLCAiPWEiIChkc3QpLAorCQkgICI9JmQiICh0bXAxKSwgIj1kIiAodG1wMikKKwkJOiAiMCIgKHN1bSksICIxIiAobGVuKSwgIjIiIChzcmMpLCAiMyIgKGRzdCkKKwkgICAgKTsKKworCSpjc3VtX2VyciA9IHRtcDI7CisKKwlyZXR1cm4oc3VtKTsKK30KKworLyoKKyAqIGNvcHkgZnJvbSBrZXJuZWwgc3BhY2Ugd2hpbGUgY2hlY2tzdW1taW5nLCBvdGhlcndpc2UgbGlrZSBjc3VtX3BhcnRpYWwKKyAqLworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pCit7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCV9fYXNtX18oIm1vdmVsICUyLCU0XG5cdCIKKwkJImJ0c3QgIzEsJTRcblx0IgkvKiBDaGVjayBhbGlnbm1lbnQgKi8KKwkJImplcSAyZlxuXHQiCisJCSJzdWJxbCAjMiwlMVxuXHQiCS8qIGJ1ZmYlND09MjogdHJlYXQgZmlyc3Qgd29yZCAqLworCQkiamd0IDFmXG5cdCIKKwkJImFkZHFsICMyLCUxXG5cdCIJLyogbGVuIHdhcyA9PSAyLCB0cmVhdCBvbmx5IHJlc3QgKi8KKwkJImpyYSA0ZlxuIgorCSAgICAgIjE6XHQiCisJCSJtb3ZldyAlMkArLCU0XG5cdCIJLyogYWRkIGZpcnN0IHdvcmQgdG8gc3VtICovCisJCSJhZGR3ICU0LCUwXG5cdCIKKwkJIm1vdmV3ICU0LCUzQCtcblx0IgorCQkiY2xybCAlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiMjpcdCIKKwkJLyogdW5yb2xsZWQgbG9vcCBmb3IgdGhlIG1haW4gcGFydDogZG8gOCBsb25ncyBhdCBvbmNlICovCisJCSJtb3ZlbCAlMSwlNFxuXHQiCS8qIHNhdmUgbGVuIGluIHRtcDEgKi8KKwkJImxzcmwgIzUsJTFcblx0IgkvKiBsZW4vMzIgKi8KKwkJImplcSAyZlxuXHQiCQkvKiBub3QgZW5vdWdoLi4uICovCisJCSJzdWJxbCAjMSwlMVxuIgorCSAgICAgIjE6XHQiCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJIm1vdmVsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJIm1vdmVsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJImRicmEgJTEsMWJcblx0IgorCQkiY2xybCAlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCS8qIGFkZCBYIGJpdCAqLworCQkiY2xydyAlMVxuXHQiCisJCSJzdWJxbCAjMSwlMVxuXHQiCisJCSJqY2MgMWJcbiIKKwkgICAgICIyOlx0IgorCQkibW92ZWwgJTQsJTFcblx0IgkvKiByZXN0b3JlIGxlbiBmcm9tIHRtcDEgKi8KKwkJImFuZHcgIzB4MWMsJTRcblx0IgkvKiBudW1iZXIgb2YgcmVzdCBsb25ncyAqLworCQkiamVxIDRmXG5cdCIKKwkJImxzcncgIzIsJTRcblx0IgorCQkic3VicXcgIzEsJTRcbiIKKwkgICAgICIzOlx0IgorCQkvKiBsb29wIGZvciByZXN0IGxvbmdzICovCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkiZGJyYSAlNCwzYlxuXHQiCisJCSJjbHJsICU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICI0Olx0IgorCQkvKiBub3cgY2hlY2sgZm9yIHJlc3QgYnl0ZXMgdGhhdCBkbyBub3QgZml0IGludG8gbG9uZ3MgKi8KKwkJImFuZHcgIzMsJTFcblx0IgorCQkiamVxIDdmXG5cdCIKKwkJImNscmwgJTVcblx0IgkJLyogY2xlYXIgdG1wMiBmb3IgcmVzdCBieXRlcyAqLworCQkic3VicXcgIzIsJTFcblx0IgorCQkiamx0IDVmXG5cdCIKKwkJIm1vdmV3ICUyQCssJTVcblx0IgkvKiBoYXZlIHJlc3QgPj0gMjogZ2V0IHdvcmQgKi8KKwkJIm1vdmV3ICU1LCUzQCtcblx0IgorCQkic3dhcCAlNVxuXHQiCQkvKiBpbnRvIGJpdHMgMTYuLjMxICovCisJCSJ0c3R3ICUxXG5cdCIJCS8qIGFub3RoZXIgYnl0ZT8gKi8KKwkJImplcSA2ZlxuIgorCSAgICAgIjU6XHQiCisJCSJtb3ZlYiAlMkAsJTVcblx0IgkvKiBoYXZlIG9kZCByZXN0OiBnZXQgYnl0ZSAqLworCQkibW92ZWIgJTUsJTNAK1xuXHQiCisJCSJsc2x3ICM4LCU1XG4iCQkvKiBpbnRvIGJpdHMgOC4uMTU7IDE2Li4zMSB1bnRvdWNoZWQgKi8KKwkgICAgICI2Olx0IgorCQkiYWRkbCAlNSwlMFxuXHQiCS8qIG5vdyBhZGQgcmVzdCBsb25nIHRvIHN1bSAqLworCQkiY2xybCAlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiNzpcdCIKKwkJOiAiPWQiIChzdW0pLCAiPWQiIChsZW4pLCAiPWEiIChzcmMpLCAiPWEiIChkc3QpLAorCQkgICI9JmQiICh0bXAxKSwgIj0mZCIgKHRtcDIpCisJCTogIjAiIChzdW0pLCAiMSIgKGxlbiksICIyIiAoc3JjKSwgIjMiIChkc3QpCisJICAgICk7CisgICAgcmV0dXJuKHN1bSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL2xzaHJkaTMuYyBiL2FyY2gvbTY4ay9saWIvbHNocmRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjQ0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL2xzaHJkaTMuYwpAQCAtMCwwICsxLDYyIEBACisvKiBsc2hyZGkzLmMgZXh0cmFjdGVkIGZyb20gZ2NjLTIuNy4yL2xpYmdjYzIuYyB3aGljaCBpczogKi8KKy8qIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorCit0eXBlZGVmCQkgaW50IFNJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYJCSBpbnQgREl0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKK3R5cGVkZWYgaW50IHdvcmRfdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoX193b3JkX18pKSk7CisKK3N0cnVjdCBESXN0cnVjdCB7U0l0eXBlIGhpZ2gsIGxvdzt9OworCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdCBESXN0cnVjdCBzOworICBESXR5cGUgbGw7Cit9IERJdW5pb247CisKK0RJdHlwZQorX19sc2hyZGkzIChESXR5cGUgdSwgd29yZF90eXBlIGIpCit7CisgIERJdW5pb24gdzsKKyAgd29yZF90eXBlIGJtOworICBESXVuaW9uIHV1OworCisgIGlmIChiID09IDApCisgICAgcmV0dXJuIHU7CisKKyAgdXUubGwgPSB1OworCisgIGJtID0gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKKyAgaWYgKGJtIDw9IDApCisgICAgeworICAgICAgdy5zLmhpZ2ggPSAwOworICAgICAgdy5zLmxvdyA9IChVU0l0eXBlKXV1LnMuaGlnaCA+PiAtYm07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgVVNJdHlwZSBjYXJyaWVzID0gKFVTSXR5cGUpdXUucy5oaWdoIDw8IGJtOworICAgICAgdy5zLmhpZ2ggPSAoVVNJdHlwZSl1dS5zLmhpZ2ggPj4gYjsKKyAgICAgIHcucy5sb3cgPSAoKFVTSXR5cGUpdXUucy5sb3cgPj4gYikgfCBjYXJyaWVzOworICAgIH0KKworICByZXR1cm4gdy5sbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvbWVtY21wLmMgYi9hcmNoL202OGsvbGliL21lbWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Nzk2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL21lbWNtcC5jCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitpbnQgbWVtY21wKGNvbnN0IHZvaWQgKiBjcyxjb25zdCB2b2lkICogY3Qsc2l6ZV90IGNvdW50KQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzdTEsICpzdTI7CisKKyAgZm9yKCBzdTEgPSBjcywgc3UyID0gY3Q7IDAgPCBjb3VudDsgKytzdTEsICsrc3UyLCBjb3VudC0tKQorICAgIGlmICgqc3UxICE9ICpzdTIpCisgICAgICByZXR1cm4oKCpzdTEgPCAqc3UyKSA/IC0xIDogKzEpOworICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL21lbWNweS5jIGIvYXJjaC9tNjhrL2xpYi9tZW1jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UxODE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1jcHkuYwpAQCAtMCwwICsxLDc1IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordm9pZCAqIG1lbWNweSh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3QgbikKK3sKKyAgdm9pZCAqeHRvID0gdG87CisgIHNpemVfdCB0ZW1wLCB0ZW1wMTsKKworICBpZiAoIW4pCisgICAgcmV0dXJuIHh0bzsKKyAgaWYgKChsb25nKSB0byAmIDEpCisgICAgeworICAgICAgY2hhciAqY3RvID0gdG87CisgICAgICBjb25zdCBjaGFyICpjZnJvbSA9IGZyb207CisgICAgICAqY3RvKysgPSAqY2Zyb20rKzsKKyAgICAgIHRvID0gY3RvOworICAgICAgZnJvbSA9IGNmcm9tOworICAgICAgbi0tOworICAgIH0KKyAgaWYgKG4gPiAyICYmIChsb25nKSB0byAmIDIpCisgICAgeworICAgICAgc2hvcnQgKnN0byA9IHRvOworICAgICAgY29uc3Qgc2hvcnQgKnNmcm9tID0gZnJvbTsKKyAgICAgICpzdG8rKyA9ICpzZnJvbSsrOworICAgICAgdG8gPSBzdG87CisgICAgICBmcm9tID0gc2Zyb207CisgICAgICBuIC09IDI7CisgICAgfQorICB0ZW1wID0gbiA+PiAyOworICBpZiAodGVtcCkKKyAgICB7CisgICAgICBsb25nICpsdG8gPSB0bzsKKyAgICAgIGNvbnN0IGxvbmcgKmxmcm9tID0gZnJvbTsKKworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmVsICUyLCUzXG5cdCIKKwkJCSAgICJhbmR3ICAjNywlM1xuXHQiCisJCQkgICAibHNybCAgIzMsJTJcblx0IgorCQkJICAgIm5lZ3cgICUzXG5cdCIKKwkJCSAgICJqbXAgICAlJXBjQCgxZiwlMzp3OjIpXG5cdCIKKwkJCSAgICI0Olx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAibW92ZWwgJTBAKywlMUArXG5cdCIKKwkJCSAgICJtb3ZlbCAlMEArLCUxQCtcblx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAibW92ZWwgJTBAKywlMUArXG5cdCIKKwkJCSAgICJtb3ZlbCAlMEArLCUxQCtcblx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAibW92ZWwgJTBAKywlMUArXG5cdCIKKwkJCSAgICIxOlx0IgorCQkJICAgImRicmEgICUyLDRiXG5cdCIKKwkJCSAgICJjbHJ3ICAlMlxuXHQiCisJCQkgICAic3VicWwgIzEsJTJcblx0IgorCQkJICAgImpwbCAgIDRiXG5cdCIKKwkJCSAgIDogIj1hIiAobGZyb20pLCAiPWEiIChsdG8pLCAiPWQiICh0ZW1wKSwKKwkJCSAgICI9JmQiICh0ZW1wMSkKKwkJCSAgIDogIjAiIChsZnJvbSksICIxIiAobHRvKSwgIjIiICh0ZW1wKQorCQkJICAgKTsKKyAgICAgIHRvID0gbHRvOworICAgICAgZnJvbSA9IGxmcm9tOworICAgIH0KKyAgaWYgKG4gJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzdG8gPSB0bzsKKyAgICAgIGNvbnN0IHNob3J0ICpzZnJvbSA9IGZyb207CisgICAgICAqc3RvKysgPSAqc2Zyb20rKzsKKyAgICAgIHRvID0gc3RvOworICAgICAgZnJvbSA9IHNmcm9tOworICAgIH0KKyAgaWYgKG4gJiAxKQorICAgIHsKKyAgICAgIGNoYXIgKmN0byA9IHRvOworICAgICAgY29uc3QgY2hhciAqY2Zyb20gPSBmcm9tOworICAgICAgKmN0byA9ICpjZnJvbTsKKyAgICB9CisgIHJldHVybiB4dG87Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL21lbXNldC5jIGIvYXJjaC9tNjhrL2xpYi9tZW1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTVmZGIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1zZXQuYwpAQCAtMCwwICsxLDY4IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordm9pZCAqIG1lbXNldCh2b2lkICogcywgaW50IGMsIHNpemVfdCBjb3VudCkKK3sKKyAgdm9pZCAqeHMgPSBzOworICBzaXplX3QgdGVtcCwgdGVtcDE7CisKKyAgaWYgKCFjb3VudCkKKyAgICByZXR1cm4geHM7CisgIGMgJj0gMHhmZjsKKyAgYyB8PSBjIDw8IDg7CisgIGMgfD0gYyA8PCAxNjsKKyAgaWYgKChsb25nKSBzICYgMSkKKyAgICB7CisgICAgICBjaGFyICpjcyA9IHM7CisgICAgICAqY3MrKyA9IGM7CisgICAgICBzID0gY3M7CisgICAgICBjb3VudC0tOworICAgIH0KKyAgaWYgKGNvdW50ID4gMiAmJiAobG9uZykgcyAmIDIpCisgICAgeworICAgICAgc2hvcnQgKnNzID0gczsKKyAgICAgICpzcysrID0gYzsKKyAgICAgIHMgPSBzczsKKyAgICAgIGNvdW50IC09IDI7CisgICAgfQorICB0ZW1wID0gY291bnQgPj4gMjsKKyAgaWYgKHRlbXApCisgICAgeworICAgICAgbG9uZyAqbHMgPSBzOworCisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZWwgJTEsJTJcblx0IgorCQkJICAgImFuZHcgICM3LCUyXG5cdCIKKwkJCSAgICJsc3JsICAjMywlMVxuXHQiCisJCQkgICAibmVndyAgJTJcblx0IgorCQkJICAgImptcCAgICUlcGNAKDJmLCUyOnc6Milcblx0IgorCQkJICAgIjE6XHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAibW92ZWwgJTMsJTBAK1xuXHQiCisJCQkgICAiMjpcdCIKKwkJCSAgICJkYnJhICAlMSwxYlxuXHQiCisJCQkgICAiY2xydyAgJTFcblx0IgorCQkJICAgInN1YnFsICMxLCUxXG5cdCIKKwkJCSAgICJqcGwgICAxYlxuXHQiCisJCQkgICA6ICI9YSIgKGxzKSwgIj1kIiAodGVtcCksICI9JmQiICh0ZW1wMSkKKwkJCSAgIDogImQiIChjKSwgIjAiIChscyksICIxIiAodGVtcCkKKwkJCSAgICk7CisgICAgICBzID0gbHM7CisgICAgfQorICBpZiAoY291bnQgJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzcyA9IHM7CisgICAgICAqc3MrKyA9IGM7CisgICAgICBzID0gc3M7CisgICAgfQorICBpZiAoY291bnQgJiAxKQorICAgIHsKKyAgICAgIGNoYXIgKmNzID0gczsKKyAgICAgICpjcyA9IGM7CisgICAgfQorICByZXR1cm4geHM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL211bGRpMy5jIGIvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTRmMjc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYwpAQCAtMCwwICsxLDYzIEBACisvKiBtdWxkaTMuYyBleHRyYWN0ZWQgZnJvbSBnY2MtMi43LjIuMy9saWJnY2MyLmMgYW5kCisJCQkgICBnY2MtMi43LjIuMy9sb25nbG9uZy5oIHdoaWNoIGlzOiAqLworLyogQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ0MuCisKK0dOVSBDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dOVSBDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCitCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNkZWZpbmUgQklUU19QRVJfVU5JVCA4CisKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgibXVsdSUubCAlMywlMTolMCIJCQkJCQlcCisgICAgICAgICAgIDogIj1kIiAoKFVTSXR5cGUpKHcwKSksCQkJCQlcCisgICAgICAgICAgICAgIj1kIiAoKFVTSXR5cGUpKHcxKSkJCQkJCVwKKyAgICAgICAgICAgOiAiJTAiICgoVVNJdHlwZSkodSkpLAkJCQkJXAorICAgICAgICAgICAgICJkbWkiICgoVVNJdHlwZSkodikpKQorCisjZGVmaW5lIF9fdW11bHNpZGkzKHUsIHYpIFwKKyAgKHtESXVuaW9uIF9fdzsJCQkJCQkJXAorICAgIHVtdWxfcHBtbSAoX193LnMuaGlnaCwgX193LnMubG93LCB1LCB2KTsJCQkJXAorICAgIF9fdy5sbDsgfSkKKwordHlwZWRlZgkJIGludCBTSXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVVNJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmCQkgaW50IERJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7Cit0eXBlZGVmIGludCB3b3JkX3R5cGUgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOworCitzdHJ1Y3QgRElzdHJ1Y3Qge1NJdHlwZSBoaWdoLCBsb3c7fTsKKwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QgRElzdHJ1Y3QgczsKKyAgREl0eXBlIGxsOworfSBESXVuaW9uOworCitESXR5cGUKK19fbXVsZGkzIChESXR5cGUgdSwgREl0eXBlIHYpCit7CisgIERJdW5pb24gdzsKKyAgREl1bmlvbiB1dSwgdnY7CisKKyAgdXUubGwgPSB1LAorICB2di5sbCA9IHY7CisKKyAgdy5sbCA9IF9fdW11bHNpZGkzICh1dS5zLmxvdywgdnYucy5sb3cpOworICB3LnMuaGlnaCArPSAoKFVTSXR5cGUpIHV1LnMubG93ICogKFVTSXR5cGUpIHZ2LnMuaGlnaAorCSAgICAgICArIChVU0l0eXBlKSB1dS5zLmhpZ2ggKiAoVVNJdHlwZSkgdnYucy5sb3cpOworCisgIHJldHVybiB3LmxsOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUyBiL2FyY2gvbTY4ay9saWIvc2VtYXBob3JlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNTYyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgIExpbnVzIFRvcnZhbGRzCisgKgorICogIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisvKgorICogVGhlIHNlbWFwaG9yZSBvcGVyYXRpb25zIGhhdmUgYSBzcGVjaWFsIGNhbGxpbmcgc2VxdWVuY2UgdGhhdAorICogYWxsb3cgdXMgdG8gZG8gYSBzaW1wbGVyIGluLWxpbmUgdmVyc2lvbiBvZiB0aGVtLiBUaGVzZSByb3V0aW5lcworICogbmVlZCB0byBjb252ZXJ0IHRoYXQgc2VxdWVuY2UgYmFjayBpbnRvIHRoZSBDIHNlcXVlbmNlIHdoZW4KKyAqIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIHNlbWFwaG9yZS4KKyAqLworRU5UUlkoX19kb3duX2ZhaWxlZCkKKwltb3ZlbWwgJWEwLyVkMC8lZDEsLSglc3ApCisJbW92ZWwgJWExLC0oJXNwKQorCWpic3IgX19kb3duCisJbW92ZWwgKCVzcCkrLCVhMQorCW1vdmVtbCAoJXNwKSssJWEwLyVkMC8lZDEKKwlydHMKKworRU5UUlkoX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKQorCW1vdmVsICVhMCwtKCVzcCkKKwltb3ZlbCAlZDEsLSglc3ApCisJbW92ZWwgJWExLC0oJXNwKQorCWpic3IgX19kb3duX2ludGVycnVwdGlibGUKKwltb3ZlbCAoJXNwKSssJWExCisJbW92ZWwgKCVzcCkrLCVkMQorCW1vdmVsICglc3ApKywlYTAKKwlydHMKKworRU5UUlkoX19kb3duX2ZhaWxlZF90cnlsb2NrKQorCW1vdmVsICVhMCwtKCVzcCkKKwltb3ZlbCAlZDEsLSglc3ApCisJbW92ZWwgJWExLC0oJXNwKQorCWpic3IgX19kb3duX3RyeWxvY2sKKwltb3ZlbCAoJXNwKSssJWExCisJbW92ZWwgKCVzcCkrLCVkMQorCW1vdmVsICglc3ApKywlYTAKKwlydHMKKworRU5UUlkoX191cF93YWtldXApCisJbW92ZW1sICVhMC8lZDAvJWQxLC0oJXNwKQorCW1vdmVsICVhMSwtKCVzcCkKKwlqYnNyIF9fdXAKKwltb3ZlbCAoJXNwKSssJWExCisJbW92ZW1sICglc3ApKywlYTAvJWQwLyVkMQorCXJ0cworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL01ha2VmaWxlIGIvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTVhMDlkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvbWFjIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIGJvb3RwYXJzZS5vIG1hY2ludHMubyBpb3AubyB2aWEubyBvc3MubyBwc2MubyBcCisJCQliYWJvb24ubyBtYWNib2luZy5vIGRlYnVnLm8gbWlzYy5vIG1hY19rc3ltcy5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2JhYm9vbi5jIGIvYXJjaC9tNjhrL21hYy9iYWJvb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliN2RkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9iYWJvb24uYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIEJhYm9vbiBDdXN0b20gSUMgTWFuYWdlbWVudAorICoKKyAqIFRoZSBCYWJvb24gY3VzdG9tIElDIGNvbnRyb2xzIHRoZSBJREUsIFBDTUNJQSBhbmQgbWVkaWEgYmF5IG9uIHRoZQorICogUG93ZXJCb29rIDE5MC4gSXQgbXVsdGlwbGV4ZXMgbXVsdGlwbGUgaW50ZXJydXB0IHNvdXJjZXMgb250byB0aGUKKyAqIE51YnVzIHNsb3QgJEMgaW50ZXJydXB0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjX2JhYm9vbi5oPgorCisvKiAjZGVmaW5lIERFQlVHX0JBQk9PTiAqLworLyogI2RlZmluZSBERUJVR19JUlFTICovCisKK2ludCBiYWJvb25fcHJlc2VudCxiYWJvb25fYWN0aXZlOwordm9sYXRpbGUgc3RydWN0IGJhYm9vbiAqYmFib29uOworCitpcnFyZXR1cm5fdCBiYWJvb25faXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2lmIDAKK2V4dGVybiBpbnQgbWFjaWRlX2Fja19pbnRyKHN0cnVjdCBhdGFfY2hhbm5lbCAqKTsKKyNlbmRpZgorCisvKgorICogQmFib29uIGluaXRpYWxpemF0aW9uLgorICovCisKK3ZvaWQgX19pbml0IGJhYm9vbl9pbml0KHZvaWQpCit7CisJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ICE9IE1BQ19NT0RFTF9QQjE5MCkgeworCQliYWJvb24gPSBOVUxMOworCQliYWJvb25fcHJlc2VudCA9IDA7CisJCXJldHVybjsKKwl9CisKKwliYWJvb24gPSAoc3RydWN0IGJhYm9vbiAqKSBCQUJPT05fQkFTRTsKKwliYWJvb25fcHJlc2VudCA9IDE7CisJYmFib29uX2FjdGl2ZSA9IDA7CisKKwlwcmludGsoIkJhYm9vbiBkZXRlY3RlZCBhdCAlcFxuIiwgYmFib29uKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBCYWJvb24gaW50ZXJydXB0IGRpc3BhdGNoZXIgb24gbnVidXMgc2xvdCAkQy4KKyAqLworCit2b2lkIF9faW5pdCBiYWJvb25fcmVnaXN0ZXJfaW50ZXJydXB0cyh2b2lkKQoreworCXJlcXVlc3RfaXJxKElSUV9OVUJVU19DLCBiYWJvb25faXJxLCBJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULAorCQkgICAgImJhYm9vbiIsICh2b2lkICopIGJhYm9vbik7Cit9CisKKy8qCisgKiBCYWJvb24gaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMgd29ya3MgYSBsb3QgbGlrZSBhIFZJQS4KKyAqLworCitpcnFyZXR1cm5fdCBiYWJvb25faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGlycV9iaXQsaTsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50czsKKworI2lmZGVmIERFQlVHX0lSUVMKKwlwcmludGsoImJhYm9vbl9pcnE6IG1iX2NvbnRyb2wgJTAyWCBtYl9pZnIgJTAyWCBtYl9zdGF0dXMgJTAyWCBhY3RpdmUgJTAyWFxuIiwKKwkJKHVpbnQpIGJhYm9vbi0+bWJfY29udHJvbCwgKHVpbnQpIGJhYm9vbi0+bWJfaWZyLAorCQkodWludCkgYmFib29uLT5tYl9zdGF0dXMsICBiYWJvb25fYWN0aXZlKTsKKyNlbmRpZgorCisJaWYgKCEoZXZlbnRzID0gYmFib29uLT5tYl9pZnIgJiAweDA3KSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChpID0gMCwgaXJxX2JpdCA9IDEgOyBpIDwgMyA7IGkrKywgaXJxX2JpdCA8PD0gMSkgeworCSAgICAgICAgaWYgKGV2ZW50cyAmIGlycV9iaXQvKiAmIGJhYm9vbl9hY3RpdmUqLykgeworCQkJYmFib29uX2FjdGl2ZSAmPSB+aXJxX2JpdDsKKwkJCW1hY19kb19pcnFfbGlzdChJUlFfQkFCT09OXzAgKyBpLCByZWdzKTsKKwkJCWJhYm9vbl9hY3RpdmUgfD0gaXJxX2JpdDsKKwkJCWJhYm9vbi0+bWJfaWZyICY9IH5pcnFfYml0OworCQl9CisJfQorI2lmIDAKKwlpZiAoYmFib29uLT5tYl9pZnIgJiAweDAyKSBtYWNpZGVfYWNrX2ludHIoTlVMTCk7CisJLyogZm9yIG5vdyB3ZSBuZWVkIHRvIHNtYXNoIGFsbCBpbnRlcnJ1cHRzICovCisJYmFib29uLT5tYl9pZnIgJj0gfmV2ZW50czsKKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBiYWJvb25faXJxX2VuYWJsZShpbnQgaXJxKSB7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisKKyNpZmRlZiBERUJVR19JUlFVU0UKKwlwcmludGsoImJhYm9vbl9pcnFfZW5hYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCWJhYm9vbl9hY3RpdmUgfD0gKDEgPDwgaXJxX2lkeCk7Cit9CisKK3ZvaWQgYmFib29uX2lycV9kaXNhYmxlKGludCBpcnEpIHsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50aygiYmFib29uX2lycV9kaXNhYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCWJhYm9vbl9hY3RpdmUgJj0gfigxIDw8IGlycV9pZHgpOworfQorCit2b2lkIGJhYm9vbl9pcnFfY2xlYXIoaW50IGlycSkgeworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCisJYmFib29uLT5tYl9pZnIgJj0gfigxIDw8IGlycV9pZHgpOworfQorCitpbnQgYmFib29uX2lycV9wZW5kaW5nKGludCBpcnEpCit7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisKKwlyZXR1cm4gYmFib29uLT5tYl9pZnIgJiAoMSA8PCBpcnFfaWR4KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvYm9vdHBhcnNlLmMgYi9hcmNoL202OGsvbWFjL2Jvb3RwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDIyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL2Jvb3RwYXJzZS5jCkBAIC0wLDAgKzEsMTIyIEBACisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorCisvKgorICoJQm9vdGVyIHZhcnMKKyAqLworCitpbnQgYm9vdGhvd3RvOworaW50IF9ib290aG93dG87CisKKy8qCisgKglDYWxsZWQgZWFybHkgdG8gcGFyc2UgdGhlIGVudmlyb25tZW50IChwYXNzZWQgdG8gdXMgZnJvbSB0aGUgYm9vdGVyKQorICoJaW50byBhIGJvb3RpbmZvIHN0cnVjdC4gV2lsbCBkaWUgYXMgc29vbiBhcyB3ZSBoYXZlIG91ciBvd24gYm9vdGVyCisgKi8KKworI2RlZmluZSBhdG9sKHgpCXNpbXBsZV9zdHJ0b3VsKHgsTlVMTCwwKQorCit2b2lkIHBhcnNlX2Jvb3RlcihjaGFyICplbnYpCit7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKyNpZiAwCisJd2hpbGUoMCAmJiAqZW52KQorI2Vsc2UKKwl3aGlsZSgqZW52KQorI2VuZGlmCisJeworCQluYW1lPWVudjsKKwkJdmFsdWU9bmFtZTsKKwkJd2hpbGUoKnZhbHVlIT0nPScmJip2YWx1ZSkKKwkJCXZhbHVlKys7CisJCWlmKCp2YWx1ZT09Jz0nKQorCQkJKnZhbHVlKys9MDsKKwkJZW52PXZhbHVlOworCQl3aGlsZSgqZW52KQorCQkJZW52Kys7CisJCWVudisrOworI2lmIDAKKwkJaWYoc3RyY21wKG5hbWUsIlZJREVPX0FERFIiKT09MCkKKwkJCW1hY19tY2gudmlkZW9hZGRyPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiUk9XX0JZVEVTIik9PTApCisJCQltYWNfbWNoLnZpZGVvcm93PWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiU0NSRUVOX0RFUFRIIik9PTApCisJCQltYWNfbWNoLnZpZGVvZGVwdGg9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJESU1FTlNJT05TIik9PTApCisJCQltYWNfbWNoLmRpbWVuc2lvbnM9YXRvbCh2YWx1ZSk7CisjZW5kaWYKKwkJaWYoc3RyY21wKG5hbWUsIkJPT1RUSU1FIik9PTApCisJCQltYWNfYmlfZGF0YS5ib290dGltZT1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIkdNVEJJQVMiKT09MCkKKwkJCW1hY19iaV9kYXRhLmdtdGJpYXM9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJCT09URVJWRVIiKT09MCkKKwkJCW1hY19iaV9kYXRhLmJvb3R2ZXI9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJNQUNPU19WSURFTyIpPT0wKQorCQkJbWFjX2JpX2RhdGEudmlkZW9sb2dpY2FsPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiTUFDT1NfU0NDIik9PTApCisJCQltYWNfYmlfZGF0YS5zY2NiYXNlPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiTUFDSElORUlEIik9PTApCisJCQltYWNfYmlfZGF0YS5pZD1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIk1FTVNJWkUiKT09MCkKKwkJCW1hY19iaV9kYXRhLm1lbXNpemU9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfTU9ERU1fRkxBR1MiKT09MCkKKwkJCW1hY19iaV9kYXRhLnNlcmlhbG1mPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiU0VSSUFMX01PREVNX0hTS0lDTEsiKT09MCkKKwkJCW1hY19iaV9kYXRhLnNlcmlhbGhzaz1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9NT0RFTV9HUElDTEsiKT09MCkKKwkJCW1hY19iaV9kYXRhLnNlcmlhbGdwaT1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9QUklOVF9GTEFHUyIpPT0wKQorCQkJbWFjX2JpX2RhdGEucHJpbnRtZj1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9QUklOVF9IU0tJQ0xLIik9PTApCisJCQltYWNfYmlfZGF0YS5wcmludGhzaz1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9QUklOVF9HUElDTEsiKT09MCkKKwkJCW1hY19iaV9kYXRhLnByaW50Z3BpPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiUFJPQ0VTU09SIik9PTApCisJCQltYWNfYmlfZGF0YS5jcHVpZD1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlJPTUJBU0UiKT09MCkKKwkJCW1hY19iaV9kYXRhLnJvbWJhc2U9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJUSU1FREJSQSIpPT0wKQorCQkJbWFjX2JpX2RhdGEudGltZWRicmE9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJBREJERUxBWSIpPT0wKQorCQkJbWFjX2JpX2RhdGEuYWRiZGVsYXk9YXRvbCh2YWx1ZSk7CisJfQorI2lmIDAJLyogWFhYOiBUT0RPIHdpdGggbTY4a19tYWNoXyogKi8KKwkvKiBGaWxsIGluIHRoZSBiYXNlIHN0dWZmICovCisJYm9vdF9pbmZvLm1hY2h0eXBlPU1BQ0hfTUFDOworCS8qIFJlYWQgdGhpcyBmcm9tIHRoZSBtYWNpbmZvIHdlIGdvdCAhICovCisvKglib290X2luZm8uY3B1dHlwZT1DUFVfNjgwMjB8RlBVQl82ODg4MTsqLworLyoJYm9vdF9pbmZvLm1lbW9yeVswXS5hZGRyPTA7Ki8KKy8qCWJvb3RfaW5mby5tZW1vcnlbMF0uc2l6ZT0oKG1hY19iaV9kYXRhLmlkPj43KSYzMSk8PDIwOyovCisJYm9vdF9pbmZvLm51bV9tZW1vcnk9MTsJCS8qIE9uIGEgTWFjSUkgKi8KKwlib290X2luZm8ucmFtZGlza19zaXplPTA7CS8qIEZvciBub3cgKi8KKwkqYm9vdF9pbmZvLmNvbW1hbmRfbGluZT0wOworI2VuZGlmCisgfQorCisKK3ZvaWQgcHJpbnRfYm9vdGVyKGNoYXIgKmVudikKK3sKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOworCXdoaWxlKCplbnYpCisJeworCQluYW1lPWVudjsKKwkJdmFsdWU9bmFtZTsKKwkJd2hpbGUoKnZhbHVlIT0nPScmJip2YWx1ZSkKKwkJCXZhbHVlKys7CisJCWlmKCp2YWx1ZT09Jz0nKQorCQkJKnZhbHVlKys9MDsKKwkJZW52PXZhbHVlOworCQl3aGlsZSgqZW52KQorCQkJZW52Kys7CisJCWVudisrOworCQlwcmludGsoIiVzPSVzXG4iLCBuYW1lLHZhbHVlKTsKKwl9CisgfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTljYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0wLDAgKzEsOTAyIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgbGludXggc3R1ZmYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKy8qIGtleWIgKi8KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorLyoga2V5YiAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisKKyNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2h3Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjX2lvcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CisjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KKyNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgorCisvKiBNYWMgYm9vdGluZm8gc3RydWN0ICovCisKK3N0cnVjdCBtYWNfYm9vdGVyX2RhdGEgbWFjX2JpX2RhdGE7CitpbnQgbWFjX2Jpc2l6ZSA9IHNpemVvZiBtYWNfYmlfZGF0YTsKKworc3RydWN0IG1hY19od19wcmVzZW50IG1hY19od19wcmVzZW50OworCisvKiBOZXcgbTY4ayBib290aW5mbyBzdHVmZiBhbmQgdmlkZW9iYXNlICovCisKK2V4dGVybiBpbnQgbTY4a19udW1fbWVtb3J5OworZXh0ZXJuIHN0cnVjdCBtZW1faW5mbyBtNjhrX21lbW9yeVtOVU1fTUVNSU5GT107CisKK2V4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19yYW1kaXNrOworCitleHRlcm4gY2hhciBtNjhrX2NvbW1hbmRfbGluZVtDTF9TSVpFXTsKKwordm9pZCAqbWFjX2VudjsJCS8qIExvYWRlZCBieSB0aGUgYm9vdCBhc20gKi8KKworLyogVGhlIHBoeXMuIHZpZGVvIGFkZHIuIC0gbWlnaHQgYmUgYm9ndXMgb24gc29tZSBtYWNoaW5lcyAqLwordW5zaWduZWQgbG9uZyBtYWNfb3JpZ192aWRlb2FkZHI7CisKKy8qIE1hYyBzcGVjaWZpYyB0aW1lciBmdW5jdGlvbnMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG1hY19nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKK2V4dGVybiBpbnQgbWFjX2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgbWFjX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgc2hvd19tYWNfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGlvcF9wcmVpbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaW9wX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB2aWFfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHZpYV9pbml0X2Nsb2NrKGlycXJldHVybl90ICgqZnVuYykoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB2b2lkIHZpYV9mbHVzaF9jYWNoZSh2b2lkKTsKK2V4dGVybiB2b2lkIG9zc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcHNjX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBiYWJvb25faW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgbWFjX21rc291bmQodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCitleHRlcm4gdm9pZCBudWJ1c19zd2VlcF92aWRlbyh2b2lkKTsKKworLyogTWFjIHNwZWNpZmljIGRlYnVnIGZ1bmN0aW9ucyAoaW4gZGVidWcuYykgKi8KK2V4dGVybiB2b2lkIG1hY19kZWJ1Z19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjX2RlYnVnZ2luZ19sb25nKGludCwgbG9uZyk7CisKK3N0YXRpYyB2b2lkIG1hY19nZXRfbW9kZWwoY2hhciAqc3RyKTsKKwordm9pZCBtYWNfYmFuZyhpbnQgaXJxLCB2b2lkICp2ZWN0b3IsIHN0cnVjdCBwdF9yZWdzICpwKQoreworCXByaW50ayhLRVJOX0lORk8gIlJlc2V0dGluZyAuLi5cbiIpOworCW1hY19yZXNldCgpOworfQorCitzdGF0aWMgdm9pZCBtYWNfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKnZlY3RvcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworCXZpYV9pbml0X2Nsb2NrKHZlY3Rvcik7Cit9CisKKyNpZiAwCit2b2lkIG1hY193YWl0YnV0ICh2b2lkKQoreworCTsKK30KKyNlbmRpZgorCitleHRlcm4gaXJxcmV0dXJuX3QgbWFjX2RlZmF1bHRfaGFuZGxlcihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKK2lycXJldHVybl90ICgqbWFjX2hhbmRsZXJzWzhdKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik9Cit7CisJbWFjX2RlZmF1bHRfaGFuZGxlciwKKwltYWNfZGVmYXVsdF9oYW5kbGVyLAorCW1hY19kZWZhdWx0X2hhbmRsZXIsCisJbWFjX2RlZmF1bHRfaGFuZGxlciwKKwltYWNfZGVmYXVsdF9oYW5kbGVyLAorCW1hY19kZWZhdWx0X2hhbmRsZXIsCisJbWFjX2RlZmF1bHRfaGFuZGxlciwKKwltYWNfZGVmYXVsdF9oYW5kbGVyCit9OworCisvKgorICogUGFyc2UgYSBNYWNpbnRvc2gtc3BlY2lmaWMgcmVjb3JkIGluIHRoZSBib290aW5mbworICovCisKK2ludCBfX2luaXQgbWFjX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlY29yZCkKK3sKKyAgICBpbnQgdW5rbm93biA9IDA7CisgICAgY29uc3QgdV9sb25nICpkYXRhID0gcmVjb3JkLT5kYXRhOworCisgICAgc3dpdGNoIChyZWNvcmQtPnRhZykgeworCWNhc2UgQklfTUFDX01PREVMOgorCSAgICBtYWNfYmlfZGF0YS5pZCA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19WQUREUjoKKwkgICAgbWFjX2JpX2RhdGEudmlkZW9hZGRyID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX1ZERVBUSDoKKwkgICAgbWFjX2JpX2RhdGEudmlkZW9kZXB0aCA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19WUk9XOgorCSAgICBtYWNfYmlfZGF0YS52aWRlb3JvdyA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19WRElNOgorCSAgICBtYWNfYmlfZGF0YS5kaW1lbnNpb25zID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX1ZMT0dJQ0FMOgorCSAgICBtYWNfYmlfZGF0YS52aWRlb2xvZ2ljYWwgPSBWSURFT01FTUJBU0UgKyAoKmRhdGEgJiB+VklERU9NRU1NQVNLKTsKKwkgICAgbWFjX29yaWdfdmlkZW9hZGRyID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX1NDQ0JBU0U6CisJICAgIG1hY19iaV9kYXRhLnNjY2Jhc2UgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfQlRJTUU6CisJICAgIG1hY19iaV9kYXRhLmJvb3R0aW1lID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX0dNVEJJQVM6CisJICAgIG1hY19iaV9kYXRhLmdtdGJpYXMgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfTUVNU0laRToKKwkgICAgbWFjX2JpX2RhdGEubWVtc2l6ZSA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19DUFVJRDoKKwkgICAgbWFjX2JpX2RhdGEuY3B1aWQgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQklfTUFDX1JPTUJBU0U6CisJICAgIG1hY19iaV9kYXRhLnJvbWJhc2UgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdW5rbm93biA9IDE7CisgICAgfQorICAgIHJldHVybih1bmtub3duKTsKK30KKworLyoKKyAqIEZsaXAgaW50byAyNGJpdCBtb2RlIGZvciBhbiBpbnN0YW50IC0gZmx1c2hlcyB0aGUgTDIgY2FjaGUgY2FyZC4gV2UKKyAqIGhhdmUgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzLiBPdXIgSVJRIGhhbmRsZXJzIHdpbGwgY3JhcAorICogdGhlbXNlbHZlcyBpZiB0aGV5IHRha2UgYW4gSVJRIGluIDI0Yml0IG1vZGUhCisgKi8KKworc3RhdGljIHZvaWQgbWFjX2NhY2hlX2NhcmRfZmx1c2goaW50IHdyaXRlYmFjaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2aWFfZmx1c2hfY2FjaGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgX19pbml0IGNvbmZpZ19tYWModm9pZCkKK3sKKwlpZiAoIU1BQ0hfSVNfTUFDKSB7CisJICBwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBubyBNYWMsIGJ1dCBjb25maWdfbWFjKCkgY2FsbGVkISEgXG4iKTsKKwl9CisKKwltYWNoX3NjaGVkX2luaXQgICAgICA9IG1hY19zY2hlZF9pbml0OworCW1hY2hfaW5pdF9JUlEgICAgICAgID0gbWFjX2luaXRfSVJROworCW1hY2hfcmVxdWVzdF9pcnEgICAgID0gbWFjX3JlcXVlc3RfaXJxOworCW1hY2hfZnJlZV9pcnEgICAgICAgID0gbWFjX2ZyZWVfaXJxOworCWVuYWJsZV9pcnEgICAgICAgICAgID0gbWFjX2VuYWJsZV9pcnE7CisJZGlzYWJsZV9pcnEgICAgICAgICAgPSBtYWNfZGlzYWJsZV9pcnE7CisJbWFjaF9nZXRfbW9kZWwJID0gbWFjX2dldF9tb2RlbDsKKwltYWNoX2RlZmF1bHRfaGFuZGxlciA9ICZtYWNfaGFuZGxlcnM7CisJbWFjaF9nZXRfaXJxX2xpc3QgICAgPSBzaG93X21hY19pbnRlcnJ1cHRzOworCW1hY2hfZ2V0dGltZW9mZnNldCAgID0gbWFjX2dldHRpbWVvZmZzZXQ7Cisjd2FybmluZyBtb3ZlIHRvIGFkYi92aWEgaW5pdAorI2lmIDAKKwltYWNoX2h3Y2xrICAgICAgICAgICA9IG1hY19od2NsazsKKyNlbmRpZgorCW1hY2hfc2V0X2Nsb2NrX21tc3MJID0gbWFjX3NldF9jbG9ja19tbXNzOworCW1hY2hfcmVzZXQgICAgICAgICAgID0gbWFjX3Jlc2V0OworCW1hY2hfaGFsdCAgICAgICAgICAgID0gbWFjX3Bvd2Vyb2ZmOworCW1hY2hfcG93ZXJfb2ZmICAgICAgID0gbWFjX3Bvd2Vyb2ZmOworI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisJY29uc3dpdGNocAkgICAgICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKwltYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisjaWYgMAorCW1hY2hfZGVidWdfaW5pdAkgPSBtYWNfZGVidWdfaW5pdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKKyAgICAgICAgbWFjaF9iZWVwICAgICAgICAgICAgPSBtYWNfbWtzb3VuZDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKyNpZiAwCisJbWFjaF9oZWFydGJlYXQgPSBtYWNfaGVhcnRiZWF0OworCW1hY2hfaGVhcnRiZWF0X2lycSA9IElSUV9NQUNfVElNRVI7CisjZW5kaWYKKyNlbmRpZgorCisJLyoKKwkgKiBEZXRlcm1pbmUgaGFyZHdhcmUgcHJlc2VudAorCSAqLworCisJbWFjX2lkZW50aWZ5KCk7CisJbWFjX3JlcG9ydF9oYXJkd2FyZSgpOworCisJLyogQUZBSUsgb25seSB0aGUgSUljaSB0YWtlcyBhIGNhY2hlIGNhcmQuICBUaGUgSUlmeCBoYXMgb25ib2FyZAorCSAgIGNhY2hlIC4uLiBzb21lb25lIG5lZWRzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlbGwgaWYgaXQncyBvbiBvcgorCSAgIG5vdC4gKi8KKworCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlDSQorCSAgICB8fCBtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkgeworCQltYWNoX2wyX2ZsdXNoID0gbWFjX2NhY2hlX2NhcmRfZmx1c2g7CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgbWFjaGluZSBzcGVjaWZpYyBmaXh1cHMuCisJICovCisKKyNpZmRlZiBPTERfTlVCVVNfQ09ERQorCSBudWJ1c19zd2VlcF92aWRlbygpOworI2VuZGlmCit9CisKKworLyoKKyAqCU1hY2ludG9zaCBUYWJsZTogaGFyZGNvZGVkIG1vZGVsIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqCisgKglNdWNoIG9mIHRoaXMgd2FzIGRlZmluZWQgYnkgQWxhbiwgYmFzZWQgb24gd2hvIGtub3dzIHdoYXQgZG9jcy4KKyAqCUkndmUgYWRkZWQgYSBsb3QgbW9yZSwgYW5kIHNvbWUgb2YgdGhhdCB3YXMgcHVyZSBndWVzc3dvcmsgYmFzZWQKKyAqCW9uIGhhcmR3YXJlIHBhZ2VzIHByZXNlbnQgb24gdGhlIE1hYyB3ZWIgc2l0ZS4gUG9zc2libHkgd2lsZGx5CisgKglpbmFjY3VyYXRlLCBzbyBsb29rIGhlcmUgaWYgYSBuZXcgTWFjIG1vZGVsIHdvbid0IHJ1bi4gRXhhbXBsZTogaWYKKyAqCWEgTWFjIGNyYXNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFZJQTEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBkdW1wZWQKKyAqCXRvIHRoZSBzY3JlZW4sIGl0IHByb2JhYmx5IGRpZWQgYXR0ZW1wdGluZyB0byByZWFkIERpckIgb24gYSBSQlYuCisgKglNZWFuaW5nIGl0IHNob3VsZCBoYXZlIE1BQ19WSUFfSUljaSBoZXJlIDotKQorICovCisKK3N0cnVjdCBtYWNfbW9kZWwgKm1hY2ludG9zaF9jb25maWc7CitFWFBPUlRfU1lNQk9MKG1hY2ludG9zaF9jb25maWcpOworCitzdGF0aWMgc3RydWN0IG1hY19tb2RlbCBtYWNfZGF0YV90YWJsZVtdPQoreworCS8qCisJICoJV2UnbGwgcHJldGVuZCB0byBiZSBhIE1hY2ludG9zaCBJSSwgdGhhdCdzIHByZXR0eSBzYWZlLgorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJLAorCQkubmFtZQkJPSAiVW5rbm93biIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICoJT3JpZ2luYWwgTWFjSUkgaGFyZHdhcmUKKwkgKgorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJLAorCQkubmFtZQkJPSAiSUkiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVgsCisJCS5uYW1lCQk9ICJJSXgiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUNYLAorCQkubmFtZQkJPSAiSUljeCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1NFMzAsCisJCS5uYW1lCQk9ICJTRS8zMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICoJV2VpcmRpZmllZCBNYWNJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bGV5IGRpZmZlcmVudC4gR2VlIHRoYW5rcworCSAqCUFwcGxlLiBBbGwgdGhlc2UgYm94ZXMgc2VlbSB0byBoYXZlIFZJQTIgaW4gYSBkaWZmZXJlbnQgcGxhY2UgdG8KKwkgKgl0aGUgTWFjSUkgKCsxQTAwMCByYXRoZXIgdGhhbiArNDAwMCkKKwkgKiBDU0E6IHNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvaHcvaHdfMDkuaHRtbAorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ0ksCisJCS5uYW1lCQk9ICJJSWNpIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUZYLAorCQkubmFtZQkJPSAiSUlmeCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSU9QLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVNJLAorCQkubmFtZQkJPSAiSUlzaSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAorCQkubmFtZQkJPSAiSUl2aSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZYLAorCQkubmFtZQkJPSAiSUl2eCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCUNsYXNzaWMgbW9kZWxzIChndWVzc2luZzogc2ltaWxhciB0byBTRS8zMCA/PyBOb3BlLCBzaW1pbGFyIHRvIExDIC4uLikKKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9DTElJLAorCQkubmFtZQkJPSAiQ2xhc3NpYyBJSSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9DQ0wsCisJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTfSwKKworCS8qCisJICoJU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDLAorCQkubmFtZQkJPSAiTEMiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSSwKKwkJLm5hbWUJCT0gIkxDIElJIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUlJLAorCQkubmFtZQkJPSAiTEMgSUlJIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICoJUXVhZHJhLiBWaWRlbyBpcyBhdCAweEY5MDAwMDAwLCB2aWEgaXMgbGlrZSBhIE1hY0lJLiBXZSBsYWJlbCBpdCBkaWZmZXJlbnRseQorCSAqCWFzIHNvbWUgb2YgdGhlIHN0dWZmIGNvbm5lY3RlZCB0byBWSUEyIHNlZW1zIGRpZmZlcmVudC4gQmV0dGVyIFNDU0kgY2hpcCBhbmQKKwkgKglvbmJvYXJkIGV0aGVybmV0IHVzaW5nIGEgTmF0U2VtaSBTT05JQyBleGNlcHQgdGhlIDY2MEFWIGFuZCA4NDBBViB3aGljaCB1c2UgYW4KKwkgKglBTUQgNzlDOTQwIChNQUNFKS4KKwkgKglUaGUgNzAwLCA5MDAgYW5kIDk1MCBoYXZlIHNvbWUgSS9PIGNoaXBzIGluIHRoZSB3cm9uZyBwbGFjZSB0bworCSAqCWNvbmZ1c2UgdXMuIFRoZSA4NDBBViBoYXMgYSBTQ1NJIGxvY2F0aW9uIG9mIGl0cyBvd24gKHNhbWUgYXMKKwkgKgl0aGUgNjYwQVYpLgorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDUsCisJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDVfQUNDLAorCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjEwLAorCQkubmFtZQkJPSAiUXVhZHJhIDYxMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MzAsCisJCS5uYW1lCQk9ICJRdWFkcmEgNjMwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTY1MCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA2NTAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisJLyoJVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KKwl7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTcwMCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA3MDAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTgwMCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA4MDAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODQwLAorCQkubmFtZQkJPSAiUXVhZHJhIDg0MEFWIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAorCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSU9QLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTk1MCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA5NTAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lPUCwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICoJUGVyZm9ybWEgLSBtb3JlIExDIHR5cGUgbWFjaGluZXMKKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDYwLAorCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ2MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1LAorCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzVGLAorCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1MjAsCisJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTIwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NTAsCisJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTUwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKwkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIFNPTklDIGV0aGVybmV0ICovCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NzUsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NzUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU4OCwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDU4OCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5pZGVfdHlwZQk9IE1BQ19JREVfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfVFYsCisJCS5uYW1lCQk9ICJUViIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A2MDAsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA2MDAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LAorCisJLyoKKwkgKglDZW50cmlzIC0ganVzdCBndWVzc2luZyBhZ2FpbjsgbWF5YmUgbGlrZSBRdWFkcmEKKwkgKi8KKworCS8qIFRoZSBDNjEwIG1heSBvciBtYXkgbm90IGhhdmUgU09OSUMuICBXZSBwcm9iZSB0byBtYWtlIHN1cmUgKi8KKwl7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzYxMCwKKwkJLm5hbWUJCT0gIkNlbnRyaXMgNjEwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY1MCwKKwkJLm5hbWUJCT0gIkNlbnRyaXMgNjUwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY2MCwKKwkJLm5hbWUJCT0gIkNlbnRyaXMgNjYwQVYiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMywKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICogVGhlIFBvd2VyQm9va3MgYWxsIHRoZSBzYW1lICJDb21ibyIgY3VzdG9tIElDIGZvciBTQ1NJIGFuZCBTQ0MKKwkgKiBhbmQgYSBQTVUgKGluIHR3byB2YXJpYXRpb25zPykgZm9yIEFEQi4gTW9zdCBvZiB0aGVtIHVzZSB0aGUKKwkgKiBRdWFkcmEtc3R5bGUgVklBcy4gQSBmZXcgbW9kZWxzIGFsc28gaGF2ZSBJREUgZnJvbSBoZWxsLgorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQ1LAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0NSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5pZGVfdHlwZQk9IE1BQ19JREVfUEIsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NSwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NUMsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1YyIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTcwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE3MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwQywKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODBjIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxOTAsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTkwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuaWRlX3R5cGUJPSBNQUNfSURFX0JBQk9PTiwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqIFBvd2VyQm9vayBEdW9zIGFyZSBwcmV0dHkgbXVjaCBsaWtlIG5vcm1hbCBQb3dlckJvb2tzCisJICogQWxsIG9mIHRoZXNlIHByb2JhYmx5IGhhdmUgb25ib2FyZCBTT05JQyBpbiB0aGUgRG9jayB3aGljaAorCSAqIG1lYW5zIHdlJ2xsIGhhdmUgdG8gcHJvYmUgZm9yIGl0IGV2ZW50dWFsbHkuCisJICoKKwkgKiBBcmUgdGhlc2UgcmVhbGxseSBNQUNfVklBX0lJY2k/IFRoZSBkZXZlbG9wZXIgbm90ZXMgZm9yIHRoZQorCSAqIER1b3Mgc2hvdyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBjdXN0b20gcGFydHMgYXMgaW4gbW9zdCBvZgorCSAqIHRoZSBvdGhlciBQb3dlckJvb2tzIHdoaWNoIHdvdWxkIGltcGx5IE1BQ19WSUFfUVVBRFJBLgorCSAqLworCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjEwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMTAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyMzAsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIzMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI1MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjUwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjcwQywKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjcwYyIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwQywKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwYyIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCU90aGVyIHN0dWZmID8/CisJICovCisJeworCQkuaWRlbnQJCT0gLTEKKwl9Cit9OworCit2b2lkIG1hY19pZGVudGlmeSh2b2lkKQoreworCXN0cnVjdCBtYWNfbW9kZWwgKm07CisKKwkvKiBQZW5ndWluIGRhdGEgdXNlZnVsPyAqLworCWludCBtb2RlbCA9IG1hY19iaV9kYXRhLmlkOworCWlmICghbW9kZWwpIHsKKwkJLyogbm8gYm9vdGluZm8gbW9kZWwgaWQgLT4gTmV0QlNEIGJvb3RlciB3YXMgdXNlZCEgKi8KKwkJLyogWFhYIEZJWE1FOiBicmVha3MgZm9yIG1vZGVsID4gMzEgKi8KKwkJbW9kZWw9KG1hY19iaV9kYXRhLmNwdWlkPj4yKSY2MzsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIGJvb3RpbmZvIG1vZGVsIElELCB1c2luZyBjcHVpZCBpbnN0ZWFkIChoZXksIHVzZSBQZW5ndWluISlcbiIpOworCX0KKworCW1hY2ludG9zaF9jb25maWcgPSBtYWNfZGF0YV90YWJsZTsKKwlmb3IgKG0gPSBtYWNpbnRvc2hfY29uZmlnIDsgbS0+aWRlbnQgIT0gLTEgOyBtKyspIHsKKwkJaWYgKG0tPmlkZW50ID09IG1vZGVsKSB7CisJCQltYWNpbnRvc2hfY29uZmlnID0gbTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogV2UgbmVlZCB0byBwcmUtaW5pdCB0aGUgSU9QcywgaWYgYW55LiBPdGhlcndpc2UgKi8KKwkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgd29uJ3Qgd29yayBpZiB0aGUgdXNlciBoYWQgICAqLworCS8qIHRoZSBzZXJpYWwgcG9ydHMgc2V0IHRvICJGYXN0ZXIiIG1vZGUgaW4gTWFjT1MuICovCisKKwlpb3BfcHJlaW5pdCgpOworCW1hY19kZWJ1Z19pbml0KCk7CisKKwlwcmludGsgKEtFUk5fSU5GTyAiRGV0ZWN0ZWQgTWFjaW50b3NoIG1vZGVsOiAlZCBcbiIsIG1vZGVsKTsKKworCS8qCisJICogUmVwb3J0IGJvb3RlciBkYXRhOgorCSAqLworCXByaW50ayAoS0VSTl9ERUJVRyAiIFBlbmd1aW4gYm9vdGluZm8gZGF0YTpcbiIpOworCXByaW50ayAoS0VSTl9ERUJVRyAiIFZpZGVvOiBhZGRyIDB4JWx4IHJvdyAweCVseCBkZXB0aCAlbHggZGltZW5zaW9ucyAlbGQgeCAlbGRcbiIsCisJCW1hY19iaV9kYXRhLnZpZGVvYWRkciwgbWFjX2JpX2RhdGEudmlkZW9yb3csCisJCW1hY19iaV9kYXRhLnZpZGVvZGVwdGgsIG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgJiAweEZGRkYsCisJCW1hY19iaV9kYXRhLmRpbWVuc2lvbnMgPj4gMTYpOworCXByaW50ayAoS0VSTl9ERUJVRyAiIFZpZGVvbG9naWNhbCAweCVseCBwaHlzLiAweCVseCwgU0NDIGF0IDB4JWx4IFxuIiwKKwkJbWFjX2JpX2RhdGEudmlkZW9sb2dpY2FsLCBtYWNfb3JpZ192aWRlb2FkZHIsCisJCW1hY19iaV9kYXRhLnNjY2Jhc2UpOworCXByaW50ayAoS0VSTl9ERUJVRyAiIEJvb3R0aW1lOiAweCVseCBHTVRCaWFzOiAweCVseCBcbiIsCisJCW1hY19iaV9kYXRhLmJvb3R0aW1lLCBtYWNfYmlfZGF0YS5nbXRiaWFzKTsKKwlwcmludGsgKEtFUk5fREVCVUcgIiBNYWNoaW5lIElEOiAlbGQgQ1BVaWQ6IDB4JWx4IG1lbW9yeSBzaXplOiAweCVseCBcbiIsCisJCW1hY19iaV9kYXRhLmlkLCBtYWNfYmlfZGF0YS5jcHVpZCwgbWFjX2JpX2RhdGEubWVtc2l6ZSk7CisjaWYgMAorCXByaW50ayAoIlJhbWRpc2s6IGFkZHIgMHglbHggc2l6ZSAweCVseFxuIiwKKwkJbTY4a19yYW1kaXNrLmFkZHIsIG02OGtfcmFtZGlzay5zaXplKTsKKyNlbmRpZgorCisJLyoKKwkgKiBUT0RPOiBzZXQgdGhlIHZhcmlvdXMgZmllbGRzIGluIG1hY2ludG9zaF9jb25maWctPmh3X3ByZXNlbnQgaGVyZSEKKwkgKi8KKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgeworCWNhc2UgTUFDX1NDU0lfT0xEOgorCSAgTUFDSFdfU0VUKE1BQ19TQ1NJXzgwKTsKKwkgIGJyZWFrOworCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgorCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTM6CisJICBNQUNIV19TRVQoTUFDX1NDU0lfOTYpOworCSAgaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKKwkgICAgICAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5NTApKQorCSAgICBNQUNIV19TRVQoTUFDX1NDU0lfOTZfMik7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgcHJpbnRrKEtFUk5fV0FSTklORyAiY29uZmlnLmM6IHd0ZjogdW5rbm93biBzY3NpLCB1c2luZyA1M2M4MFxuIik7CisJICBNQUNIV19TRVQoTUFDX1NDU0lfODApOworCSAgYnJlYWs7CisKKwl9CisJaW9wX2luaXQoKTsKKwl2aWFfaW5pdCgpOworCW9zc19pbml0KCk7CisJcHNjX2luaXQoKTsKKwliYWJvb25faW5pdCgpOworfQorCit2b2lkIG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJBcHBsZSBNYWNpbnRvc2ggJXNcbiIsIG1hY2ludG9zaF9jb25maWctPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBtYWNfZ2V0X21vZGVsKGNoYXIgKnN0cikKK3sKKwlzdHJjcHkoc3RyLCJNYWNpbnRvc2ggIik7CisJc3RyY2F0KHN0ciwgbWFjaW50b3NoX2NvbmZpZy0+bmFtZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2RlYnVnLmMgYi9hcmNoL202OGsvbWFjL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MmVkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvZGVidWcuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9tYWMvZGVidWcuYworICoKKyAqIFNoYW1lbGVzc2x5IHN0b2xlbiAoU0NDIGNvZGUgYW5kIGdlbmVyYWwgZnJhbWV3b3JrKSBmcm9tOgorICoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisgKgorICogQXRhcmkgZGVidWdnaW5nIGFuZCBzZXJpYWwgY29uc29sZSBzdHVmZgorICoKKyAqIEFzc2VtYmxlZCBvZiBwYXJ0cyBvZiBmb3JtZXIgYXRhcmkvY29uZmlnLmMgOTctMTItMTggYnkgUm9tYW4gSG9kZWsKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNody5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CisKK2V4dGVybiBzdHJ1Y3QgY29tcGF0X2Jvb3RpbmZvIGNvbXBhdF9ib290X2luZm87CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1hY192aWRlb2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfdmlkZW9kZXB0aDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1hY19yb3dieXRlczsKKworZXh0ZXJuIHZvaWQgbWFjX3NlcmlhbF9wcmludChjb25zdCBjaGFyICopOworCisjZGVmaW5lIERFQlVHX0hFQURTCisjdW5kZWYgREVCVUdfU0NSRUVOCisjZGVmaW5lIERFQlVHX1NFUklBTAorCisvKgorICogVGhlc2UgdHdvIGF1eGlsaWFyeSBkZWJ1ZyBmdW5jdGlvbnMgc2hvdWxkIGdvIGF3YXkgQVNBUC4gT25seSB1c2FnZToKKyAqIGJlZm9yZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgdXAgKGFmdGVyIGhlYWQuUyBjb21lIHNvbWUgb3RoZXIgY3J1Y2lhbAorICogc2V0dXAgcm91dGluZXMgOi0pIGl0IHBlcm1pdHMgd3JpdGluZyAnZGF0YScgdG8gdGhlIHNjcmVlbiBhcyBiaXQgcGF0dGVybnMKKyAqIChnb29kIGx1Y2sgcmVhZGluZyB0aG9zZSkuIEhlbHBlZCB0byBmaWd1cmUgdGhhdCB0aGUgYm9vdGluZm8gY29udGFpbmVkCisgKiBnYXJiYWdlIGRhdGEgb24gdGhlIGFtb3VudCBhbmQgc2l6ZSBvZiBtZW1vcnkgY2h1bmtzIC4uLgorICoKKyAqIFRoZSAncG9zJyBhcmd1bWVudCBub3cgc2ltcGx5IG1lYW5zICdsaW5lZmVlZCBhZnRlciBwcmludCcgLi4uCisgKi8KKworI2lmZGVmIERFQlVHX1NDUkVFTgorc3RhdGljIGludCBwZW5nPTAsIGxpbmU9MDsKKyNlbmRpZgorCit2b2lkIG1hY19kZWJ1Z2dpbmdfc2hvcnQoaW50IHBvcywgc2hvcnQgbnVtKQoreworI2lmZGVmIERFQlVHX1NDUkVFTgorCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7CisJdW5zaWduZWQgY2hhciAqcHB0cjsKKwlpbnQgaTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfU0VSSUFMCisJcHJpbnRrKCJkZWJ1ZzogJWQgIVxuIiwgbnVtKTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfU0NSRUVOCisJaWYgKCFNQUNIX0lTX01BQykgeworCQkvKiBwcmludGsoImRlYnVnOiAlZCAhXG4iLCBudW0pOyAqLworCQlyZXR1cm47CisJfQorCisJLyogY2FsY3VsYXRlIGN1cnJlbnQgb2Zmc2V0ICovCisJcGVuZ29mZnNldD0odW5zaWduZWQgY2hhciAqKShtYWNfdmlkZW9iYXNlKygxNTArbGluZSoyKSptYWNfcm93Ynl0ZXMpCisJCSAgICArODAqcGVuZzsKKworCXBwdHI9cGVuZ29mZnNldDsKKworCWZvcihpPTA7aTw4KnNpemVvZihzaG9ydCk7aSsrKSAvKiAjIG9mIGJpdHMgKi8KKwl7CisJCS8qICAgICAgICB2YWx1ZSAgICAgICAgbWFzayBmb3IgYml0IGksIHJldmVyc2Ugb3JkZXIgKi8KKwkJKnBwdHIrKyA9IChudW0gJiAoIDEgPDwgKDgqc2l6ZW9mKHNob3J0KS1pLTEpICkgPyAweEZGIDogMHgwMCk7CisJfQorCisJcGVuZysrOworCisJaWYgKHBvcykgeworCQlsaW5lKys7CisJCXBlbmcgPSAwOworCX0KKyNlbmRpZgorfQorCit2b2lkIG1hY19kZWJ1Z2dpbmdfbG9uZyhpbnQgcG9zLCBsb25nIGFkZHIpCit7CisjaWZkZWYgREVCVUdfU0NSRUVOCisJdW5zaWduZWQgY2hhciAqcGVuZ29mZnNldDsKKwl1bnNpZ25lZCBjaGFyICpwcHRyOworCWludCBpOworI2VuZGlmCisKKyNpZmRlZiBERUJVR19TRVJJQUwKKwlwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOworI2VuZGlmCisKKyNpZmRlZiBERUJVR19TQ1JFRU4KKwlpZiAoIU1BQ0hfSVNfTUFDKSB7CisJCS8qIHByaW50aygiZGVidWc6ICMlbGQgIVxuIiwgYWRkcik7ICovCisJCXJldHVybjsKKwl9CisKKwlwZW5nb2Zmc2V0PSh1bnNpZ25lZCBjaGFyICopKG1hY192aWRlb2Jhc2UrKDE1MCtsaW5lKjIpKm1hY19yb3dieXRlcykKKwkJICAgICs4MCpwZW5nOworCisJcHB0cj1wZW5nb2Zmc2V0OworCisJZm9yKGk9MDtpPDgqc2l6ZW9mKGxvbmcpO2krKykgLyogIyBvZiBiaXRzICovCisJeworCQkqcHB0cisrID0gKGFkZHIgJiAoIDEgPDwgKDgqc2l6ZW9mKGxvbmcpLWktMSkgKSA/IDB4RkYgOiAweDAwKTsKKwl9CisKKwlwZW5nKys7CisKKwlpZiAocG9zKSB7CisJCWxpbmUrKzsKKwkJcGVuZyA9IDA7CisJfQorI2VuZGlmCit9CisKKyNpZmRlZiBERUJVR19TRVJJQUwKKy8qCisgKiBUT0RPOiBzZXJpYWwgZGVidWcgY29kZQorICovCisKK3N0cnVjdCBtYWNfU0NDCisgeworICB1X2NoYXIgY2hhX2JfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOworICB1X2NoYXIgY2hhX2FfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyOworICB1X2NoYXIgY2hhX2JfZGF0YTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgY2hhX2FfZGF0YTsKKyB9OworCisjIGRlZmluZSBzY2MgKCooKHZvbGF0aWxlIHN0cnVjdCBtYWNfU0NDKiltYWNfYmlfZGF0YS5zY2NiYXNlKSkKKworLyogRmxhZyB0aGF0IHNlcmlhbCBwb3J0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgKi8KK2ludCBtYWNfU0NDX2luaXRfZG9uZTsKKy8qIENhbiBiZSBzZXQgc29tZXdoZXJlLCBpZiBhIFNDQyBtYXN0ZXIgcmVzZXQgaGFzIGFscmVhZHkgYmUgZG9uZSBhbmQgc2hvdWxkCisgKiBub3QgYmUgcmVwZWF0ZWQ7IHVzZWQgYnkga2dkYiAqLworaW50IG1hY19TQ0NfcmVzZXRfZG9uZTsKKworc3RhdGljIGludCBzY2NfcG9ydCA9IC0xOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgbWFjX2NvbnNvbGVfZHJpdmVyID0geworCS5uYW1lID0JCSJkZWJ1ZyIsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorfTsKKworLyoKKyAqIENydWRlIGhhY2sgdG8gZ2V0IGNvbnNvbGUgb3V0cHV0IHRvIHRoZSBzY3JlZW4gYmVmb3JlIHRoZSBmcmFtZWJ1ZmZlcgorICogaXMgaW5pdGlhbGl6ZWQgKGhhcHBlbnMgYSBsb3QgbGF0ZXIgaW4gMi4xISkuCisgKiBXZSBqdXN0IHVzZSB0aGUgY29uc29sZSByb3V0aW5lcyBkZWNsYXJlZCBpbiBoZWFkLlMsIHRoaXMgd2lsbCBpbnRlcmZlcmUKKyAqIHdpdGggcmVndWxhciBmcmFtZWJ1ZmZlciBjb25zb2xlIG91dHB1dCBhbmQgc2hvdWxkIGJlIHVzZWQgZXhjbHVzaXZlbHkKKyAqIHRvIGRlYnVnIGtlcm5lbCBwcm9ibGVtcyBtYW5pZmVzdGluZyBiZWZvcmUgZnJhbWVidWZmZXIgaW5pdCAoYWthIFdTT0QpCisgKgorICogVG8ga2VlcCB0aGlzIGhhY2sgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSByZWd1bGFyIGNvbnNvbGUgZHJpdmVyLCBlaXRoZXIKKyAqIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgYmVmb3JlL29uIGZyYW1lYnVmZmVyIGNvbnNvbGUgaW5pdCwgb3Igc2lsZW5jZSB0aGlzCisgKiBmdW5jdGlvbiBhZnRlciB0aGUgZmJjb24gZHJpdmVyIGlzIHJ1bm5pbmcgKHdpbGwgbG9zZSBjb25zb2xlIG1lc3NhZ2VzIT8pLgorICogVG8gZGVidWcgcmVhbCBlYXJseSBidWdzLCBuZWVkIHRvIHdyaXRlIGEgJ21hY19yZWdpc3Rlcl9jb25zb2xlX2hhY2soKScKKyAqIHRoYXQgaXMgY2FsbGVkIGZyb20gc3RhcnRfa2VybmVsKCkgYmVmb3JlIHNldHVwX2FyY2goKSBhbmQganVzdCByZWdpc3RlcnMKKyAqIHRoaXMgZHJpdmVyIGlmIE1hYy4KKyAqLworCit2b2lkIG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwltYWNfc2VyaWFsX3ByaW50KHN0cik7Cit9CisKKworCisvKiBNYWM6IGxvb3BzX3Blcl9qaWZmeSBtaW4uIDE5MDAwIF49IC41IHVzOyBNRlBERUxBWSB3YXMgMC42IHVzKi8KKworI2RlZmluZSB1U0VDIDEKKworc3RhdGljIGlubGluZSB2b2lkIG1hY19zY2NiX291dCAoY2hhciBjKQoreworICAgIGludCBpOworICAgIGRvIHsKKwlmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkKKwkJYmFycmllcigpOworICAgIH0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworICAgIGZvciggaSA9IHVTRUM7IGkgPiAwOyAtLWkgKQorCWJhcnJpZXIoKTsKKyAgICBzY2MuY2hhX2JfZGF0YSA9IGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYV9vdXQgKGNoYXIgYykKK3sKKyAgICBpbnQgaTsKKyAgICBkbyB7CisJZm9yKCBpID0gdVNFQzsgaSA+IDA7IC0taSApCisJCWJhcnJpZXIoKTsKKyAgICB9IHdoaWxlICghKHNjYy5jaGFfYV9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KKyAgICBmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkKKwliYXJyaWVyKCk7CisgICAgc2NjLmNoYV9hX2RhdGEgPSBjOworfQorCit2b2lkIG1hY19zY2NiX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisJaWYgKCpzdHIgPT0gJ1xuJykKKwkgICAgbWFjX3NjY2Jfb3V0KCAnXHInICk7CisJbWFjX3NjY2Jfb3V0KCAqc3RyKysgKTsKKyAgICB9Cit9CisKK3ZvaWQgbWFjX3NjY2FfY29uc29sZV93cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKwlpZiAoKnN0ciA9PSAnXG4nKQorCSAgICBtYWNfc2NjYV9vdXQoICdccicgKTsKKwltYWNfc2NjYV9vdXQoICpzdHIrKyApOworICAgIH0KK30KKworCisvKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgZG8gYSBxdWljayduJ2RpcnR5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRlAgb3IKKyAqIFNDQyBzZXJpYWwgcG9ydHMuIFRoZXkncmUgdXNlZCBieSB0aGUgZGVidWdnaW5nIGludGVyZmFjZSwga2dkYiwgYW5kIHRoZQorICogc2VyaWFsIGNvbnNvbGUgY29kZS4gKi8KKyNkZWZpbmUgU0NDQl9XUklURShyZWcsdmFsKQkJCQlcCisgICAgZG8gewkJCQkJCVwKKwlpbnQgaTsJCQkJCQlcCisJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQkJXAorCWZvciggaSA9IHVTRUM7IGkgPiAwOyAtLWkgKQkJCVwKKwkJYmFycmllcigpOwkJCQlcCisJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQkJXAorCWZvciggaSA9IHVTRUM7IGkgPiAwOyAtLWkgKQkJCVwKKwkJYmFycmllcigpOwkJCQlcCisgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIFNDQ0FfV1JJVEUocmVnLHZhbCkJCQkJXAorICAgIGRvIHsJCQkJCQlcCisJaW50IGk7CQkJCQkJXAorCXNjYy5jaGFfYV9jdHJsID0gKHJlZyk7CQkJCVwKKwlmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkJCQlcCisJCWJhcnJpZXIoKTsJCQkJXAorCXNjYy5jaGFfYV9jdHJsID0gKHZhbCk7CQkJCVwKKwlmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkJCQlcCisJCWJhcnJpZXIoKTsJCQkJXAorICAgIH0gd2hpbGUoMCkKKworLyogbG9vcHNfcGVyX2ppZmZ5IGlzbid0IGluaXRpYWxpemVkIHlldCwgc28gd2UgY2FuJ3QgdXNlIHVkZWxheSgpLiBUaGlzIGRvZXMgYQorICogZGVsYXkgb2YgfiA2MHVzLiAqLworLyogTWFjOiBsb29wc19wZXJfamlmZnkgbWluLiAxOTAwMCBePSAuNSB1czsgTUZQREVMQVkgd2FzIDAuNiB1cyovCisjZGVmaW5lIExPTkdfREVMQVkoKQkJCQlcCisgICAgZG8gewkJCQkJXAorCWludCBpOwkJCQkJXAorCWZvciggaSA9IDYwKnVTRUM7IGkgPiAwOyAtLWkgKQkJXAorCSAgICBiYXJyaWVyKCk7CQkJCVwKKyAgICB9IHdoaWxlKDApCisKKyNpZm5kZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCitzdGF0aWMgdm9pZCBfX2luaXQgbWFjX2luaXRfc2NjX3BvcnQoIGludCBjZmxhZywgaW50IHBvcnQgKQorI2Vsc2UKK3ZvaWQgbWFjX2luaXRfc2NjX3BvcnQoIGludCBjZmxhZywgaW50IHBvcnQgKQorI2VuZGlmCit7CisJZXh0ZXJuIGludCBtYWNfU0NDX3Jlc2V0X2RvbmU7CisKKwkvKgorCSAqIGJhdWQgcmF0ZXM6IDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5LjJrLCAzOC40aywgNTcuNmssIDExNS4yaworCSAqLworCisJc3RhdGljIGludCBjbGtzcmNfdGFibGVbOV0gPQorCQkvKiByZWcgMTE6IDB4NTAgPSBCUkcsIDB4MDAgPSBSVHhDLCAweDI4ID0gVFJ4QyAqLworCQl7IDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDAgfTsKKwlzdGF0aWMgaW50IGNsa21vZGVfdGFibGVbOV0gPQorCQkvKiByZWcgNDogMHg0MCA9IHgxNiwgMHg4MCA9IHgzMiwgMHhjMCA9IHg2NCAqLworCQl7IDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4YzAsIDB4ODAgfTsKKwlzdGF0aWMgaW50IGRpdl90YWJsZVs5XSA9CisJCS8qIHJlZzEyIChCUkcgbG93KSAqLworCQl7IDk0LCA2MiwgNDYsIDIyLCAxMCwgNCwgMSwgMCwgMCB9OworCisgICAgaW50IGJhdWQgPSBjZmxhZyAmIENCQVVEOworICAgIGludCBjbGtzcmMsIGNsa21vZGUsIGRpdiwgcmVnMywgcmVnNTsKKworICAgIGlmIChjZmxhZyAmIENCQVVERVgpCisJYmF1ZCArPSBCMzg0MDA7CisgICAgaWYgKGJhdWQgPCBCMTIwMCB8fCBiYXVkID4gQjM4NDAwKzIpCisJYmF1ZCA9IEI5NjAwOyAvKiB1c2UgZGVmYXVsdCA5NjAwYnBzIGZvciBub24taW1wbGVtZW50ZWQgcmF0ZXMgKi8KKyAgICBiYXVkIC09IEIxMjAwOyAvKiB0YWJsZXMgc3RhcnRzIGF0IDEyMDBicHMgKi8KKworICAgIGNsa3NyYyAgPSBjbGtzcmNfdGFibGVbYmF1ZF07CisgICAgY2xrbW9kZSA9IGNsa21vZGVfdGFibGVbYmF1ZF07CisgICAgZGl2ICAgICA9IGRpdl90YWJsZVtiYXVkXTsKKworICAgIHJlZzMgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHhjMCA6IDB4NDApOworICAgIHJlZzUgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHg2MCA6IDB4MjApIHwgMHg4MiAvKiBhc3NlcnQgRFRSL1JUUyAqLzsKKworICAgIGlmIChwb3J0ID09IDEpIHsKKwkgICAgKHZvaWQpc2NjLmNoYV9iX2N0cmw7CS8qIHJlc2V0IHJlZyBwb2ludGVyICovCisJICAgIFNDQ0JfV1JJVEUoIDksIDB4YzAgKTsJLyogcmVzZXQgKi8KKwkgICAgTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLworCSAgICBTQ0NCX1dSSVRFKCA0LCAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDAxIDogMHgwMykgOiAwIHwKKwkJCSAgMHgwNCAvKiAxIHN0b3BiaXQgKi8gfAorCQkJICBjbGttb2RlICk7CisJICAgIFNDQ0JfV1JJVEUoIDMsIHJlZzMgKTsKKwkgICAgU0NDQl9XUklURSggNSwgcmVnNSApOworCSAgICBTQ0NCX1dSSVRFKCA5LCAwICk7CQkvKiBubyBpbnRlcnJ1cHRzICovCisJICAgIExPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KKwkgICAgU0NDQl9XUklURSggMTAsIDAgKTsJLyogTlJaIG1vZGUgKi8KKwkgICAgU0NDQl9XUklURSggMTEsIGNsa3NyYyApOwkvKiBtYWluIGNsb2NrIHNvdXJjZSAqLworCSAgICBTQ0NCX1dSSVRFKCAxMiwgZGl2ICk7CS8qIEJSRyB2YWx1ZSAqLworCSAgICBTQ0NCX1dSSVRFKCAxMywgMCApOwkJLyogQlJHIGhpZ2ggYnl0ZSAqLworCSAgICBTQ0NCX1dSSVRFKCAxNCwgMSApOworCSAgICBTQ0NCX1dSSVRFKCAzLCByZWczIHwgMSApOworCSAgICBTQ0NCX1dSSVRFKCA1LCByZWc1IHwgOCApOworICAgIH0gZWxzZSBpZiAocG9ydCA9PSAwKSB7CisJICAgICh2b2lkKXNjYy5jaGFfYV9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSAgICBTQ0NBX1dSSVRFKCA5LCAweGMwICk7CS8qIHJlc2V0ICovCisJICAgIExPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KKwkgICAgU0NDQV9XUklURSggNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8CisJCQkgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKKwkJCSAgY2xrbW9kZSApOworCSAgICBTQ0NBX1dSSVRFKCAzLCByZWczICk7CisJICAgIFNDQ0FfV1JJVEUoIDUsIHJlZzUgKTsKKwkgICAgU0NDQV9XUklURSggOSwgMCApOwkJLyogbm8gaW50ZXJydXB0cyAqLworCSAgICBMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCisJICAgIFNDQ0FfV1JJVEUoIDEwLCAwICk7CS8qIE5SWiBtb2RlICovCisJICAgIFNDQ0FfV1JJVEUoIDExLCBjbGtzcmMgKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KKwkgICAgU0NDQV9XUklURSggMTIsIGRpdiApOwkvKiBCUkcgdmFsdWUgKi8KKwkgICAgU0NDQV9XUklURSggMTMsIDAgKTsJCS8qIEJSRyBoaWdoIGJ5dGUgKi8KKwkgICAgU0NDQV9XUklURSggMTQsIDEgKTsKKwkgICAgU0NDQV9XUklURSggMywgcmVnMyB8IDEgKTsKKwkgICAgU0NDQV9XUklURSggNSwgcmVnNSB8IDggKTsKKyAgICB9CisKKyAgICBtYWNfU0NDX3Jlc2V0X2RvbmUgPSAxOworICAgIG1hY19TQ0NfaW5pdF9kb25lID0gMTsKK30KKyNlbmRpZiAvKiBERUJVR19TRVJJQUwgKi8KKwordm9pZCBtYWNfaW5pdF9zY2NhX3BvcnQoIGludCBjZmxhZyApCit7CisJbWFjX2luaXRfc2NjX3BvcnQoY2ZsYWcsIDApOworfQorCit2b2lkIG1hY19pbml0X3NjY2JfcG9ydCggaW50IGNmbGFnICkKK3sKKwltYWNfaW5pdF9zY2NfcG9ydChjZmxhZywgMSk7Cit9CisKK3ZvaWQgX19pbml0IG1hY19kZWJ1Z19pbml0KHZvaWQpCit7CisjaWZkZWYgREVCVUdfU0VSSUFMCisgICAgaWYgKCAgICFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAic2VyIiAgKQorICAgICAgICB8fCAhc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNlcjEiICkpIHsKKwkvKiBNYWMgbW9kZW0gcG9ydCAqLworCW1hY19pbml0X3NjY19wb3J0KCBCOTYwMHxDUzgsIDAgKTsKKwltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfc2NjYV9jb25zb2xlX3dyaXRlOworCXNjY19wb3J0ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzZXIyIiApKSB7CisJLyogTWFjIHByaW50ZXIgcG9ydCAqLworCW1hY19pbml0X3NjY19wb3J0KCBCOTYwMHxDUzgsIDEgKTsKKwltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfc2NjYl9jb25zb2xlX3dyaXRlOworCXNjY19wb3J0ID0gMTsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBERUJVR19IRUFEUworICAgIGlmICggICAhc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNjbiIgICkKKyAgICAgICAgfHwgIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJjb24iICkpIHsKKwkvKiBkaXNwbGF5LCB1c2luZyBoZWFkLlMgY29uc29sZSByb3V0aW5lcyAqLworCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlOworICAgIH0KKyNlbmRpZgorICAgIGlmIChtYWNfY29uc29sZV9kcml2ZXIud3JpdGUpCisJcmVnaXN0ZXJfY29uc29sZSgmbWFjX2NvbnNvbGVfZHJpdmVyKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2lvcC5jIGIvYXJjaC9tNjhrL21hYy9pb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg5YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9pb3AuYwpAQCAtMCwwICsxLDcxNCBAQAorLyoKKyAqIEkvTyBQcm9jZXNzb3IgKElPUCkgbWFuYWdlbWVudAorICogV3JpdHRlbiBhbmQgKEMpIDE5OTkgYnkgSm9zaHVhIE0uIFRob21wc29uIChmdW5haG9AanVyYWkub3JnKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBhbmQgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIGFuZCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAqICAgIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKi8KKworLyoKKyAqIFRoZSBJT1AgY2hpcHMgYXJlIHVzZWQgaW4gdGhlIElJZnggYW5kIHNvbWUgUXVhZHJhcyAoOTAwLCA5NTApIHRvIG1hbmFnZQorICogc2VyaWFsIGFuZCBBREIuIFRoZXkgYXJlIGFjdHVhbGx5IGEgNjUwMiBwcm9jZXNzb3IgYW5kIHNvbWUgZ2x1ZSBsb2dpYy4KKyAqCisgKiA5OTA0MjkgKGptdCkgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uLCBqdXN0IGVub3VnaCB0byBrbm9jayB0aGUgU0NDIElPUAorICoJCSAgaW50byBjb21wYXRpYmxlIG1vZGUgc28gbm9ib2R5IGhhcyB0byBmaWRkbGUgd2l0aCB0aGUKKyAqCQkgIFNlcmlhbCBTd2l0Y2ggY29udHJvbCBwYW5lbCBhbnltb3JlLgorICogOTkwNjAzIChqbXQpIC0gQWRkZWQgY29kZSB0byBncmFiIHRoZSBjb3JyZWN0IElTTSBJT1AgaW50ZXJydXB0IGZvciBPU1MKKyAqCQkgIGFuZCBub24tT1NTIG1hY2hpbmVzIChhdCBsZWFzdCBJIGhvcGUgaXQncyBjb3JyZWN0IG9uIGEKKyAqCQkgIG5vbi1PU1MgbWFjaGluZSAtLSBzb21lb25lIHdpdGggYSBROTAwIG9yIFE5NTAgbmVlZHMgdG8KKyAqCQkgIGNoZWNrIHRoaXMuKQorICogOTkwNjA1IChqbXQpIC0gUmVhcnJhbmdlZCB0aGluZ3MgYSBiaXQgd3J0IElPUCBkZXRlY3Rpb247IGlvcF9wcmVzZW50IGlzCisgKgkJICBnb25lLCBJT1AgYmFzZSBhZGRyZXNzZXMgYXJlIG5vdyBpbiBhbiBhcnJheSBhbmQgdGhlCisgKgkJICBnbG9iYWxseS12aXNpYmxlIGZ1bmN0aW9ucyB0YWtlIGFuIElPUCBudW1iZXIgaW5zdGVhZCBvZiBhbgorICoJCSAgYW4gYWN0dWFsIGJhc2UgYWRkcmVzcy4KKyAqIDk5MDYxMCAoam10KSAtIEZpbmlzaGVkIHRoZSBtZXNzYWdlIHBhc3NpbmcgZnJhbWV3b3JrIGFuZCBpdCBzZWVtcyB0byB3b3JrLgorICoJCSAgU2VuZGluZyBfZGVmaW5pdGVseV8gd29ya3M7IG15IGFkYi1idXMuYyBtb2RzIGNhbiBzZW5kCisgKgkJICBtZXNzYWdlcyBhbmQgcmVjZWl2ZSB0aGUgTVNHX0NPTVBMRVRFRCBzdGF0dXMgYmFjayBmcm9tIHRoZQorICoJCSAgSU9QLiBUaGUgdHJpY2sgbm93IGlzIGZpZ3VyaW5nIG91dCB0aGUgbWVzc2FnZSBmb3JtYXRzLgorICogOTkwNjExIChqbXQpIC0gTW9yZSBjbGVhbnVwcy4gRml4ZWQgcHJvYmxlbSB3aGVyZSB1bmNsYWltZWQgbWVzc2FnZXMgb24gYQorICoJCSAgcmVjZWl2ZSBjaGFubmVsIHdlcmUgbmV2ZXIgcHJvcGVybHkgYWNrbm93bGVkZ2VkLiBCcmFja2V0ZWQKKyAqCQkgIHRoZSByZW1haW5pbmcgZGVidWcgcHJpbnRrJ3Mgd2l0aCAjaWZkZWYncyBhbmQgZGlzYWJsZWQKKyAqCQkgIGRlYnVnZ2luZy4gSSBjYW4gbm93IHR5cGUgb24gdGhlIGNvbnNvbGUuCisgKiA5OTA2MTIgKGptdCkgLSBDb3B5cmlnaHQgbm90aWNlIGFkZGVkLiBSZXdvcmtlZCB0aGUgd2F5IHJlcGxpZXMgYXJlIGhhbmRsZWQuCisgKgkJICBJdCB0dXJucyBvdXQgdGhhdCByZXBsaWVzIGFyZSBwbGFjZWQgYmFjayBpbiB0aGUgc2VuZCBidWZmZXIKKyAqCQkgIGZvciB0aGF0IGNoYW5uZWw7IG1lc3NhZ2VzIG9uIHRoZSByZWNlaXZlIGNoYW5uZWxzIGFyZSBhbHdheXMKKyAqCQkgIHVuc29saWNpdGVkIG1lc3NhZ2VzIGZyb20gdGhlIElPUCAoYW5kIG91ciByZXBsaWVzIHRvIHRoZW0KKyAqCQkgIHNob3VsZCBnbyBiYWNrIGluIHRoZSByZWNlaXZlIGNoYW5uZWwuKSBBbHNvIGFkZGVkIHRyYWNraW5nCisgKgkJICBvZiBkZXZpY2UgbmFtZXMgdG8gdGhlIGxpc3RlbmVyIGZ1bmN0aW9ucyBhbGEgdGhlIGludGVycnVwdAorICoJCSAgaGFuZGxlcnMuCisgKiA5OTA3MjkgKGptdCkgLSBBZGRlZCBwYXNzaW5nIG9mIHB0X3JlZ3Mgc3RydWN0dXJlIHRvIElPUCBoYW5kbGVycy4gVGhpcyBpcworICoJCSAgdXNlZCBieSB0aGUgbmV3IHVuaWZpZWQgQURCIGRyaXZlci4KKyAqCisgKiBUT0RPOgorICoKKyAqIG8gU29tZXRoaW5nIHNob3VsZCBiZSBwZXJpb2RpY2FsbHkgY2hlY2tpbmcgaW9wX2FsaXZlKCkgdG8gbWFrZSBzdXJlIHRoZQorICogICBJT1AgaGFzbid0IGRpZWQuCisgKiBvIFNvbWUgb2YgdGhlIElPUCBtYW5hZ2VyIHJvdXRpbmVzIG5lZWQgYmV0dGVyIGVycm9yIGNoZWNraW5nIGFuZAorICogICByZXR1cm4gY29kZXMuIE5vdGhpbmcgbWFqb3IsIGp1c3QgcHJldHR5aW5nIHVwLgorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSU9QIE1lc3NhZ2UgUGFzc2luZyAxMDEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGhvc3QgdGFsa3MgdG8gdGhlIElPUHMgdXNpbmcgYSByYXRoZXIgc2ltcGxlIG1lc3NhZ2UtcGFzc2luZyBzY2hlbWUgdmlhCisgKiBhIHNoYXJlZCBtZW1vcnkgYXJlYSBpbiB0aGUgSU9QIFJBTS4gRWFjaCBJT1AgaGFzIHNldmVuICJjaGFubmVscyI7IGVhY2gKKyAqIGNoYW5uZWwgaXMgY29ubmVjZWQgdG8gYSBzcGVjaWZpYyBzb2Z0d2FyZSBkcml2ZXIgb24gdGhlIElPUC4gRm9yIGV4YW1wbGUKKyAqIG9uIHRoZSBTQ0MgSU9QIHRoZXJlIGlzIG9uZSBjaGFubmVsIGZvciBlYWNoIHNlcmlhbCBwb3J0LiBFYWNoIGNoYW5uZWwgaGFzCisgKiBhbiBpbmNvbWluZyBhbmQgYW5kIG91dGdvaW5nIG1lc3NhZ2UgcXVldWUgd2l0aCBhIGRlcHRoIG9mIG9uZS4KKyAqCisgKiBBIG1lc3NhZ2UgaXMgMzIgYnl0ZXMgcGx1cyBhIHN0YXRlIGJ5dGUgZm9yIHRoZSBjaGFubmVsIChNU0dfSURMRSwgTVNHX05FVywKKyAqIE1TR19SQ1ZELCBNU0dfQ09NUExFVEUpLiBUbyBzZW5kIGEgbWVzc2FnZSB5b3UgY29weSB0aGUgbWVzc2FnZSBpbnRvIHRoZQorICogYnVmZmVyLCBzZXQgdGhlIHN0YXRlIHRvIE1TR19ORVcgYW5kIHNpZ25hbCB0aGUgSU9QIGJ5IHNldHRpbmcgdGhlIElSUSBmbGFnCisgKiBpbiB0aGUgSU9QIGNvbnRyb2wgdG8gMS4gVGhlIElPUCB3aWxsIG1vdmUgdGhlIHN0YXRlIHRvIE1TR19SQ1ZEIHdoZW4gaXQKKyAqIHJlY2VpdmVzIHRoZSBtZXNzYWdlIGFuZCB0aGVuIHRvIE1TR19DT01QTEVURSB3aGVuIHRoZSBtZXNzYWdlIHByb2Nlc3NpbmcKKyAqIGhhcyBjb21wbGV0ZWQuIEl0IGlzIHRoZSBob3N0J3MgcmVzcG9uc2liaWxpdHkgYXQgdGhhdCBwb2ludCB0byByZWFkIHRoZQorICogcmVwbHkgYmFjayBvdXQgb2YgdGhlIHNlbmQgY2hhbm5lbCBidWZmZXIgYW5kIHJlc2V0IHRoZSBjaGFubmVsIHN0YXRlIGJhY2sKKyAqIHRvIE1TR19JRExFLgorICoKKyAqIFRvIHJlY2VpdmUgbWVzc2FnZSBmcm9tIHRoZSBJT1AgdGhlIHNhbWUgcHJvY2VkdXJlIGlzIHVzZWQgZXhjZXB0IHRoZSByb2xlcworICogYXJlIHJldmVyc2VkLiBUaGF0IGlzLCB0aGUgSU9QIHB1dHMgbWVzc2FnZSBpbiB0aGUgY2hhbm5lbCB3aXRoIGEgc3RhdGUgb2YKKyAqIE1TR19ORVcsIGFuZCB0aGUgaG9zdCByZWNlaXZlcyB0aGUgbWVzc2FnZSBhbmQgbW92ZSBpdHMgc3RhdGUgdG8gTVNHX1JDVkQKKyAqIGFuZCB0aGVuIHRvIE1TR19DT01QTEVURSB3aGVuIHByb2Nlc3NpbmcgaXMgY29tcGxldGVkIGFuZCB0aGUgcmVwbHkgKGlmIGFueSkKKyAqIGhhcyBiZWVuIHBsYWNlZCBiYWNrIGluIHRoZSByZWNlaXZlIGNoYW5uZWwuIFRoZSBJT1Agd2lsbCB0aGVuIHJlc2V0IHRoZQorICogY2hhbm5lbCBzdGF0ZSB0byBNU0dfSURMRS4KKyAqCisgKiBUd28gc2V0cyBvZiBob3N0IGludGVycnVwdHMgYXJlIHByb3ZpZGVkLCBJTlQwIGFuZCBJTlQxLiBCb3RoIGFwcGVhciBvbiBvbmUKKyAqIGludGVycnVwdCBsZXZlbDsgdGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIHBhaXIgb2YgYml0cyBpbiB0aGUgSU9QIHN0YXR1cworICogcmVnaXN0ZXIuIFRoZSBJT1Agd2lsbCByYWlzZSBJTlQwIHdoZW4gb25lIG9yIG1vcmUgbWVzc2FnZXMgaW4gdGhlIHNlbmQKKyAqIGNoYW5uZWxzIGhhdmUgZ29uZSB0byB0aGUgTVNHX0NPTVBMRVRFIHN0YXRlIGFuZCBpdCB3aWxsIHJhaXNlIElOVDEgd2hlbiBvbmUKKyAqIG9yIG1vcmUgbWVzc2FnZXMgb24gdGhlIHJlY2VpdmUgY2hhbm5lbHMgaGF2ZSBnb25lIHRvIHRoZSBNU0dfTkVXIHN0YXRlLgorICoKKyAqIFNpbmNlIGVhY2ggY2hhbm5lbCBoYW5kbGVzIG9ubHkgb25lIG1lc3NhZ2Ugd2UgaGF2ZSB0byBpbXBsZW1lbnQgYSBzbWFsbAorICogaW50ZXJydXB0LWRyaXZlbiBxdWV1ZSBvbiBvdXIgZW5kLiBNZXNzYWdlcyB0byBiZSBzZW50IGFyZSBwbGFjZWQgb24gdGhlCisgKiBxdWV1ZSBmb3Igc2VuZGluZyBhbmQgY29udGFpbiBhIHBvaW50ZXIgdG8gYW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBUaGUgaGFuZGxlciBmb3IgYSBtZXNzYWdlIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXNzYWdlIHN0YXRlIGdvZXMgdG8KKyAqIE1TR19DT01QTEVURS4KKyAqCisgKiBGb3IgcmVjZWl2aW5nIG1lc3NhZ2Ugd2UgbWFpbnRhaW4gYSBsaXN0IG9mIGhhbmRsZXIgZnVuY3Rpb25zIHRvIGNhbGwgd2hlbgorICogYSBtZXNzYWdlIGlzIHJlY2VpdmVkIG9uIHRoYXQgSU9QL2NoYW5uZWwgY29tYmluYXRpb24uIFRoZSBoYW5kbGVycyBhcmUKKyAqIGNhbGxlZCBtdWNoIGxpa2UgYW4gaW50ZXJydXB0IGhhbmRsZXIgYW5kIGFyZSBwYXNzZWQgYSBjb3B5IG9mIHRoZSBtZXNzYWdlCisgKiBmcm9tIHRoZSBJT1AuIFRoZSBtZXNzYWdlIHN0YXRlIHdpbGwgYmUgaW4gTVNHX1JDVkQgd2hpbGUgdGhlIGhhbmRsZXIgcnVuczsKKyAqIGl0IGlzIHRoZSBoYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2FsbCBpb3BfY29tcGxldGVfbWVzc2FnZSgpIHdoZW4KKyAqIGZpbmlzaGVkOyB0aGlzIGZ1bmN0aW9uIG1vdmVzIHRoZSBtZXNzYWdlIHN0YXRlIHRvIE1TR19DT01QTEVURSBhbmQgc2lnbmFscworICogdGhlIElPUC4gVGhpcyB0d28tc3RlcCBwcm9jZXNzIGlzIHByb3ZpZGVkIHRvIGFsbG93IHRoZSBoYW5kbGVyIHRvIGRlZmVyCisgKiBtZXNzYWdlIHByb2Nlc3NpbmcgdG8gYSBib3R0b20taGFsZiBoYW5kbGVyIGlmIHRoZSBwcm9jZXNzaW5nIHdpbGwgdGFrZQorICogYSBzaWduaWZpZ2FudCBhbW91bnQgb2YgdGltZSAoaGFuZGxlcnMgYXJlIGNhbGxlZCBhdCBpbnRlcnJ1cHQgdGltZSBzbyB0aGV5CisgKiBzaG91bGQgZXhlY3V0ZSBxdWlja2x5LikKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNfaW9wLmg+CisjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KKworLyojZGVmaW5lIERFQlVHX0lPUCovCisKKy8qIFNldCB0byBub25lemVybyBpZiB0aGUgSU9QcyBhcmUgcHJlc2VudC4gU2V0IGJ5IGlvcF9pbml0KCkgKi8KKworaW50IGlvcF9zY2NfcHJlc2VudCxpb3BfaXNtX3ByZXNlbnQ7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludCBpb3BfZ2V0X3Byb2NfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisKKy8qIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgY2hhbm5lbCBsaXN0ZW5lcnMgKi8KKworc3RydWN0IGxpc3RlbmVyIHsKKwljb25zdCBjaGFyICpkZXZuYW1lOworCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgaW9wX21zZyAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK307CisKKy8qCisgKiBJT1Agc3RydWN0dXJlcyBmb3IgdGhlIHR3byBJT1BzCisgKgorICogVGhlIFNDQyBJT1AgY29udHJvbHMgYm90aCBzZXJpYWwgcG9ydHMgKEEgYW5kIEIpIGFzIGl0cyB0d28gZnVuY3Rpb25zLgorICogVGhlIElTTSBJT1AgY29udHJvbHMgdGhlIFNXSU0gKGZsb3BweSBkcml2ZSkgYW5kIEFEQi4KKyAqLworCitzdGF0aWMgdm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcF9iYXNlW05VTV9JT1BTXTsKKworLyoKKyAqIElPUCBtZXNzYWdlIHF1ZXVlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgaW9wX21zZyBpb3BfbXNnX3Bvb2xbTlVNX0lPUF9NU0dTXTsKK3N0YXRpYyBzdHJ1Y3QgaW9wX21zZyAqaW9wX3NlbmRfcXVldWVbTlVNX0lPUFNdW05VTV9JT1BfQ0hBTl07CitzdGF0aWMgc3RydWN0IGxpc3RlbmVyIGlvcF9saXN0ZW5lcnNbTlVNX0lPUFNdW05VTV9JT1BfQ0hBTl07CisKK2lycXJldHVybl90IGlvcF9pc21faXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworZXh0ZXJuIHZvaWQgb3NzX2lycV9lbmFibGUoaW50KTsKKworLyoKKyAqIFByaXZhdGUgYWNjZXNzIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW9wX2xvYWRhZGRyKHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AsIF9fdTE2IGFkZHIpCit7CisJaW9wLT5yYW1fYWRkcl9sbyA9IGFkZHI7CisJaW9wLT5yYW1fYWRkcl9oaSA9IGFkZHIgPj4gODsKK30KKworc3RhdGljIF9faW5saW5lX18gX191OCBpb3BfcmVhZGIodm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCwgX191MTYgYWRkcikKK3sKKwlpb3AtPnJhbV9hZGRyX2xvID0gYWRkcjsKKwlpb3AtPnJhbV9hZGRyX2hpID0gYWRkciA+PiA4OworCXJldHVybiBpb3AtPnJhbV9kYXRhOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlvcF93cml0ZWIodm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCwgX191MTYgYWRkciwgX191OCBkYXRhKQoreworCWlvcC0+cmFtX2FkZHJfbG8gPSBhZGRyOworCWlvcC0+cmFtX2FkZHJfaGkgPSBhZGRyID4+IDg7CisJaW9wLT5yYW1fZGF0YSA9IGRhdGE7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW9wX3N0b3Aodm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCkKK3sKKwlpb3AtPnN0YXR1c19jdHJsICY9IH5JT1BfUlVOOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlvcF9zdGFydCh2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wKQoreworCWlvcC0+c3RhdHVzX2N0cmwgPSBJT1BfUlVOIHwgSU9QX0FVVE9JTkM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW9wX2J5cGFzcyh2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wKQoreworCWlvcC0+c3RhdHVzX2N0cmwgfD0gSU9QX0JZUEFTUzsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpb3BfaW50ZXJydXB0KHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3ApCit7CisJaW9wLT5zdGF0dXNfY3RybCB8PSBJT1BfSVJROworfQorCitzdGF0aWMgaW50IGlvcF9hbGl2ZSh2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSAoaW9wX3JlYWRiKGlvcCwgSU9QX0FERFJfQUxJVkUpID09IDB4RkYpOworCWlvcF93cml0ZWIoaW9wLCBJT1BfQUREUl9BTElWRSwgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBpb3BfbXNnICppb3BfYWxsb2NfbXNnKHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0lPUF9NU0dTIDsgaSsrKSB7CisJCWlmIChpb3BfbXNnX3Bvb2xbaV0uc3RhdHVzID09IElPUF9NU0dTVEFUVVNfVU5VU0VEKSB7CisJCQlpb3BfbXNnX3Bvb2xbaV0uc3RhdHVzID0gSU9QX01TR1NUQVRVU19XQUlUSU5HOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuICZpb3BfbXNnX3Bvb2xbaV07CisJCX0KKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlvcF9mcmVlX21zZyhzdHJ1Y3QgaW9wX21zZyAqbXNnKQoreworCW1zZy0+c3RhdHVzID0gSU9QX01TR1NUQVRVU19VTlVTRUQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgc3RhcnR1cCBjb2RlIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBJdHMgcHVycG9zZQorICogaXMgdG8gZmluZCBhbmQgaW5pdGlhbGl6ZSB0aGUgSU9QcyBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZSwgc28gdGhhdAorICogdGhlIHNlcmlhbCBJT1AgY2FuIGJlIHBsYWNlZCBpbnRvIGJ5cGFzcyBtb2RlIF9iZWZvcmVfIHdlIHRyeSB0bworICogaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIGNvbnNvbGUuCisgKi8KKwordm9pZCBfX2luaXQgaW9wX3ByZWluaXQodm9pZCkKK3sKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+c2NjX3R5cGUgPT0gTUFDX1NDQ19JT1ApIHsKKwkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9JSUZYKSB7CisJCQlpb3BfYmFzZVtJT1BfTlVNX1NDQ10gPSAoc3RydWN0IG1hY19pb3AgKikgU0NDX0lPUF9CQVNFX0lJRlg7CisJCX0gZWxzZSB7CisJCQlpb3BfYmFzZVtJT1BfTlVNX1NDQ10gPSAoc3RydWN0IG1hY19pb3AgKikgU0NDX0lPUF9CQVNFX1FVQURSQTsKKwkJfQorCQlpb3BfYmFzZVtJT1BfTlVNX1NDQ10tPnN0YXR1c19jdHJsID0gMHg4NzsKKwkJaW9wX3NjY19wcmVzZW50ID0gMTsKKwl9IGVsc2UgeworCQlpb3BfYmFzZVtJT1BfTlVNX1NDQ10gPSBOVUxMOworCQlpb3Bfc2NjX3ByZXNlbnQgPSAwOworCX0KKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JT1ApIHsKKwkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9JSUZYKSB7CisJCQlpb3BfYmFzZVtJT1BfTlVNX0lTTV0gPSAoc3RydWN0IG1hY19pb3AgKikgSVNNX0lPUF9CQVNFX0lJRlg7CisJCX0gZWxzZSB7CisJCQlpb3BfYmFzZVtJT1BfTlVNX0lTTV0gPSAoc3RydWN0IG1hY19pb3AgKikgSVNNX0lPUF9CQVNFX1FVQURSQTsKKwkJfQorCQlpb3BfYmFzZVtJT1BfTlVNX0lTTV0tPnN0YXR1c19jdHJsID0gMDsKKwkJaW9wX2lzbV9wcmVzZW50ID0gMTsKKwl9IGVsc2UgeworCQlpb3BfYmFzZVtJT1BfTlVNX0lTTV0gPSBOVUxMOworCQlpb3BfaXNtX3ByZXNlbnQgPSAwOworCX0KK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIElPUHMsIGlmIHByZXNlbnQuCisgKi8KKwordm9pZCBfX2luaXQgaW9wX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmIChpb3Bfc2NjX3ByZXNlbnQpIHsKKwkJcHJpbnRrKCJJT1A6IGRldGVjdGVkIFNDQyBJT1AgYXQgJXBcbiIsIGlvcF9iYXNlW0lPUF9OVU1fU0NDXSk7CisJfQorCWlmIChpb3BfaXNtX3ByZXNlbnQpIHsKKwkJcHJpbnRrKCJJT1A6IGRldGVjdGVkIElTTSBJT1AgYXQgJXBcbiIsIGlvcF9iYXNlW0lPUF9OVU1fSVNNXSk7CisJCWlvcF9zdGFydChpb3BfYmFzZVtJT1BfTlVNX0lTTV0pOworCQlpb3BfYWxpdmUoaW9wX2Jhc2VbSU9QX05VTV9JU01dKTsgLyogY2xlYXJzIHRoZSBhbGl2ZSBmbGFnICovCisJfQorCisJLyogTWFrZSB0aGUgd2hvbGUgcG9vbCBhdmFpbGFibGUgYW5kIGVtcHR5IHRoZSBxdWV1ZXMgKi8KKworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0lPUF9NU0dTIDsgaSsrKSB7CisJCWlvcF9tc2dfcG9vbFtpXS5zdGF0dXMgPSBJT1BfTVNHU1RBVFVTX1VOVVNFRDsKKwl9CisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfQ0hBTiA7IGkrKykgeworCQlpb3Bfc2VuZF9xdWV1ZVtJT1BfTlVNX1NDQ11baV0gPSAwOworCQlpb3Bfc2VuZF9xdWV1ZVtJT1BfTlVNX0lTTV1baV0gPSAwOworCQlpb3BfbGlzdGVuZXJzW0lPUF9OVU1fU0NDXVtpXS5kZXZuYW1lID0gTlVMTDsKKwkJaW9wX2xpc3RlbmVyc1tJT1BfTlVNX1NDQ11baV0uaGFuZGxlciA9IE5VTEw7CisJCWlvcF9saXN0ZW5lcnNbSU9QX05VTV9JU01dW2ldLmRldm5hbWUgPSBOVUxMOworCQlpb3BfbGlzdGVuZXJzW0lPUF9OVU1fSVNNXVtpXS5oYW5kbGVyID0gTlVMTDsKKwl9CisKKyNpZiAwCS8qIENyYXNoaW5nIGluIDIuNCBub3csIG5vdCB5ZXQgc3VyZSB3aHkuICAgLS1qbXQgKi8KKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWNyZWF0ZV9wcm9jX2luZm9fZW50cnkoIm1hY19pb3AiLCAwLCAmcHJvY19yb290LCBpb3BfZ2V0X3Byb2NfaW5mbyk7CisjZW5kaWYKKyNlbmRpZgorfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgSU9Qcy4KKyAqIFRPRE86IG1pZ2h0IGJlIHdyb25nIGZvciBub24tT1NTIG1hY2hpbmVzLiBBbnlvbmU/CisgKi8KKwordm9pZCBfX2luaXQgaW9wX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCkKK3sKKwlpZiAoaW9wX2lzbV9wcmVzZW50KSB7CisJCWlmIChvc3NfcHJlc2VudCkgeworCQkJY3B1X3JlcXVlc3RfaXJxKE9TU19JUlFMRVZfSU9QSVNNLCBpb3BfaXNtX2lycSwKKwkJCQkJSVJRX0ZMR19MT0NLLCAiSVNNIElPUCIsCisJCQkJCSh2b2lkICopIElPUF9OVU1fSVNNKTsKKwkJCW9zc19pcnFfZW5hYmxlKElSUV9NQUNfQURCKTsKKwkJfSBlbHNlIHsKKwkJCXJlcXVlc3RfaXJxKElSUV9WSUEyXzAsIGlvcF9pc21faXJxLAorCQkJCQlJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULCAiSVNNIElPUCIsCisJCQkJCSh2b2lkICopIElPUF9OVU1fSVNNKTsKKwkJfQorCQlpZiAoIWlvcF9hbGl2ZShpb3BfYmFzZVtJT1BfTlVNX0lTTV0pKSB7CisJCQlwcmludGsoIklPUDogb2ggbXkgZ29kLCB0aGV5IGtpbGxlZCB0aGUgSVNNIElPUCFcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJJT1A6IHRoZSBJU00gSU9QIHNlZW1zIHRvIGJlIGFsaXZlLlxuIik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBSZWdpc3RlciBvciB1bnJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgSU9QIGFuZCBjaGFubmVsCisgKgorICogSWYgdGhlIGhhbmRsZXIgcG9pbnRlciBpcyBOVUxMIHRoZSBjdXJyZW50IGxpc3RlbmVyIChpZiBhbnkpIGlzCisgKiB1bnJlZ2lzdGVyZWQuIE90aGVyd2lzZSB0aGUgbmV3IGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQgcHJvdmlkZWQKKyAqIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGxpc3RlbmVyIHJlZ2lzdGVyZWQuCisgKi8KKworaW50IGlvcF9saXN0ZW4odWludCBpb3BfbnVtLCB1aW50IGNoYW4sCisJCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgaW9wX21zZyAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJY29uc3QgY2hhciAqZGV2bmFtZSkKK3sKKwlpZiAoKGlvcF9udW0gPj0gTlVNX0lPUFMpIHx8ICFpb3BfYmFzZVtpb3BfbnVtXSkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoYW4gPj0gTlVNX0lPUF9DSEFOKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW9wX2xpc3RlbmVyc1tpb3BfbnVtXVtjaGFuXS5oYW5kbGVyICYmIGhhbmRsZXIpIHJldHVybiAtRUlOVkFMOworCWlvcF9saXN0ZW5lcnNbaW9wX251bV1bY2hhbl0uZGV2bmFtZSA9IGRldm5hbWU7CisJaW9wX2xpc3RlbmVyc1tpb3BfbnVtXVtjaGFuXS5oYW5kbGVyID0gaGFuZGxlcjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBsZXRlIHJlY2VwdGlvbiBvZiBhIG1lc3NhZ2UsIHdoaWNoIGp1c3QgbWVhbnMgY29weWluZyB0aGUgcmVwbHkKKyAqIGludG8gdGhlIGJ1ZmZlciwgc2V0dGluZyB0aGUgY2hhbm5lbCBzdGF0ZSB0byBNU0dfQ09NUExFVEUgYW5kCisgKiBub3RpZnlpbmcgdGhlIElPUC4KKyAqLworCit2b2lkIGlvcF9jb21wbGV0ZV9tZXNzYWdlKHN0cnVjdCBpb3BfbXNnICptc2cpCit7CisJaW50IGlvcF9udW0gPSBtc2ctPmlvcF9udW07CisJaW50IGNoYW4gPSBtc2ctPmNoYW5uZWw7CisJaW50IGksb2Zmc2V0OworCisjaWZkZWYgREVCVUdfSU9QCisJcHJpbnRrKCJpb3BfY29tcGxldGUoJXApOiBpb3AgJWQgY2hhbiAlZFxuIiwgbXNnLCBtc2ctPmlvcF9udW0sIG1zZy0+Y2hhbm5lbCk7CisjZW5kaWYKKworCW9mZnNldCA9IElPUF9BRERSX1JFQ1ZfTVNHICsgKG1zZy0+Y2hhbm5lbCAqIElPUF9NU0dfTEVOKTsKKworCWZvciAoaSA9IDAgOyBpIDwgSU9QX01TR19MRU4gOyBpKyssIG9mZnNldCsrKSB7CisJCWlvcF93cml0ZWIoaW9wX2Jhc2VbaW9wX251bV0sIG9mZnNldCwgbXNnLT5yZXBseVtpXSk7CisJfQorCisJaW9wX3dyaXRlYihpb3BfYmFzZVtpb3BfbnVtXSwKKwkJICAgSU9QX0FERFJfUkVDVl9TVEFURSArIGNoYW4sIElPUF9NU0dfQ09NUExFVEUpOworCWlvcF9pbnRlcnJ1cHQoaW9wX2Jhc2VbbXNnLT5pb3BfbnVtXSk7CisKKwlpb3BfZnJlZV9tc2cobXNnKTsKK30KKworLyoKKyAqIEFjdHVhbGx5IHB1dCBhIG1lc3NhZ2UgaW50byBhIHNlbmQgY2hhbm5lbCBidWZmZXIKKyAqLworCitzdGF0aWMgdm9pZCBpb3BfZG9fc2VuZChzdHJ1Y3QgaW9wX21zZyAqbXNnKQoreworCXZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AgPSBpb3BfYmFzZVttc2ctPmlvcF9udW1dOworCWludCBpLG9mZnNldDsKKworCW9mZnNldCA9IElPUF9BRERSX1NFTkRfTVNHICsgKG1zZy0+Y2hhbm5lbCAqIElPUF9NU0dfTEVOKTsKKworCWZvciAoaSA9IDAgOyBpIDwgSU9QX01TR19MRU4gOyBpKyssIG9mZnNldCsrKSB7CisJCWlvcF93cml0ZWIoaW9wLCBvZmZzZXQsIG1zZy0+bWVzc2FnZVtpXSk7CisJfQorCisJaW9wX3dyaXRlYihpb3AsIElPUF9BRERSX1NFTkRfU1RBVEUgKyBtc2ctPmNoYW5uZWwsIElPUF9NU0dfTkVXKTsKKworCWlvcF9pbnRlcnJ1cHQoaW9wKTsKK30KKworLyoKKyAqIEhhbmRsZSBzZW5kaW5nIGEgbWVzc2FnZSBvbiBhIGNoYW5uZWwgdGhhdAorICogaGFzIGdvbmUgaW50byB0aGUgSU9QX01TR19DT01QTEVURSBzdGF0ZS4KKyAqLworCitzdGF0aWMgdm9pZCBpb3BfaGFuZGxlX3NlbmQodWludCBpb3BfbnVtLCB1aW50IGNoYW4sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AgPSBpb3BfYmFzZVtpb3BfbnVtXTsKKwlzdHJ1Y3QgaW9wX21zZyAqbXNnLCptc2cyOworCWludCBpLG9mZnNldDsKKworI2lmZGVmIERFQlVHX0lPUAorCXByaW50aygiaW9wX2hhbmRsZV9zZW5kOiBpb3AgJWQgY2hhbm5lbCAlZFxuIiwgaW9wX251bSwgY2hhbik7CisjZW5kaWYKKworCWlvcF93cml0ZWIoaW9wLCBJT1BfQUREUl9TRU5EX1NUQVRFICsgY2hhbiwgSU9QX01TR19JRExFKTsKKworCWlmICghKG1zZyA9IGlvcF9zZW5kX3F1ZXVlW2lvcF9udW1dW2NoYW5dKSkgcmV0dXJuOworCisJbXNnLT5zdGF0dXMgPSBJT1BfTVNHU1RBVFVTX0NPTVBMRVRFOworCW9mZnNldCA9IElPUF9BRERSX1NFTkRfTVNHICsgKGNoYW4gKiBJT1BfTVNHX0xFTik7CisJZm9yIChpID0gMCA7IGkgPCBJT1BfTVNHX0xFTiA7IGkrKywgb2Zmc2V0KyspIHsKKwkJbXNnLT5yZXBseVtpXSA9IGlvcF9yZWFkYihpb3AsIG9mZnNldCk7CisJfQorCWlmIChtc2ctPmhhbmRsZXIpICgqbXNnLT5oYW5kbGVyKShtc2csIHJlZ3MpOworCW1zZzIgPSBtc2c7CisJbXNnID0gbXNnLT5uZXh0OworCWlvcF9mcmVlX21zZyhtc2cyKTsKKworCWlvcF9zZW5kX3F1ZXVlW2lvcF9udW1dW2NoYW5dID0gbXNnOworCWlmIChtc2cpIGlvcF9kb19zZW5kKG1zZyk7Cit9CisKKy8qCisgKiBIYW5kbGUgcmVjZXB0aW9uIG9mIGEgbWVzc2FnZSBvbiBhIGNoYW5uZWwgdGhhdCBoYXMKKyAqIGdvbmUgaW50byB0aGUgSU9QX01TR19ORVcgc3RhdGUuCisgKi8KKworc3RhdGljIHZvaWQgaW9wX2hhbmRsZV9yZWN2KHVpbnQgaW9wX251bSwgdWludCBjaGFuLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wID0gaW9wX2Jhc2VbaW9wX251bV07CisJaW50IGksb2Zmc2V0OworCXN0cnVjdCBpb3BfbXNnICptc2c7CisKKyNpZmRlZiBERUJVR19JT1AKKwlwcmludGsoImlvcF9oYW5kbGVfcmVjdjogaW9wICVkIGNoYW5uZWwgJWRcbiIsIGlvcF9udW0sIGNoYW4pOworI2VuZGlmCisKKwltc2cgPSBpb3BfYWxsb2NfbXNnKCk7CisJbXNnLT5pb3BfbnVtID0gaW9wX251bTsKKwltc2ctPmNoYW5uZWwgPSBjaGFuOworCW1zZy0+c3RhdHVzID0gSU9QX01TR1NUQVRVU19VTlNPTDsKKwltc2ctPmhhbmRsZXIgPSBpb3BfbGlzdGVuZXJzW2lvcF9udW1dW2NoYW5dLmhhbmRsZXI7CisKKwlvZmZzZXQgPSBJT1BfQUREUl9SRUNWX01TRyArIChjaGFuICogSU9QX01TR19MRU4pOworCisJZm9yIChpID0gMCA7IGkgPCBJT1BfTVNHX0xFTiA7IGkrKywgb2Zmc2V0KyspIHsKKwkJbXNnLT5tZXNzYWdlW2ldID0gaW9wX3JlYWRiKGlvcCwgb2Zmc2V0KTsKKwl9CisKKwlpb3Bfd3JpdGViKGlvcCwgSU9QX0FERFJfUkVDVl9TVEFURSArIGNoYW4sIElPUF9NU0dfUkNWRCk7CisKKwkvKiBJZiB0aGVyZSBpcyBhIGxpc3RlbmVyLCBjYWxsIGl0IG5vdy4gT3RoZXJ3aXNlIGNvbXBsZXRlICovCisJLyogdGhlIG1lc3NhZ2Ugb3Vyc2VsdmVzIHRvIGF2b2lkIHBvc3NpYmxlIHN0YWxscy4gICAgICAgICAqLworCisJaWYgKG1zZy0+aGFuZGxlcikgeworCQkoKm1zZy0+aGFuZGxlcikobXNnLCByZWdzKTsKKwl9IGVsc2UgeworI2lmZGVmIERFQlVHX0lPUAorCQlwcmludGsoImlvcF9oYW5kbGVfcmVjdjogdW5jbGFpbWVkIG1lc3NhZ2Ugb24gaW9wICVkIGNoYW5uZWwgJWRcbiIsIGlvcF9udW0sIGNoYW4pOworCQlwcmludGsoImlvcF9oYW5kbGVfcmVjdjoiKTsKKwkJZm9yIChpID0gMCA7IGkgPCBJT1BfTVNHX0xFTiA7IGkrKykgeworCQkJcHJpbnRrKCIgJTAyWCIsICh1aW50KSBtc2ctPm1lc3NhZ2VbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCQlpb3BfY29tcGxldGVfbWVzc2FnZShtc2cpOworCX0KK30KKworLyoKKyAqIFNlbmQgYSBtZXNzYWdlCisgKgorICogVGhlIG1lc3NhZ2UgaXMgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHNlbmQgcXVldWUuIEFmdGVyd2FyZHMgaWYgdGhlCisgKiBjaGFubmVsIGlzIGlkbGUgd2UgZm9yY2UgYW4gaW1tZWRpYXRlIHNlbmQgb2YgdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUKKyAqIHF1ZXVlLgorICovCisKK2ludCBpb3Bfc2VuZF9tZXNzYWdlKHVpbnQgaW9wX251bSwgdWludCBjaGFuLCB2b2lkICpwcml2ZGF0YSwKKwkJICAgICAgdWludCBtc2dfbGVuLCBfX3U4ICptc2dfZGF0YSwKKwkJICAgICAgdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpb3BfbXNnICosIHN0cnVjdCBwdF9yZWdzICopKQoreworCXN0cnVjdCBpb3BfbXNnICptc2csICpxOworCisJaWYgKChpb3BfbnVtID49IE5VTV9JT1BTKSB8fCAhaW9wX2Jhc2VbaW9wX251bV0pIHJldHVybiAtRUlOVkFMOworCWlmIChjaGFuID49IE5VTV9JT1BfQ0hBTikgcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1zZ19sZW4gPiBJT1BfTVNHX0xFTikgcmV0dXJuIC1FSU5WQUw7CisKKwltc2cgPSBpb3BfYWxsb2NfbXNnKCk7CisJaWYgKCFtc2cpIHJldHVybiAtRU5PTUVNOworCisJbXNnLT5uZXh0ID0gTlVMTDsKKwltc2ctPnN0YXR1cyA9IElPUF9NU0dTVEFUVVNfV0FJVElORzsKKwltc2ctPmlvcF9udW0gPSBpb3BfbnVtOworCW1zZy0+Y2hhbm5lbCA9IGNoYW47CisJbXNnLT5jYWxsZXJfcHJpdiA9IHByaXZkYXRhOworCW1lbWNweShtc2ctPm1lc3NhZ2UsIG1zZ19kYXRhLCBtc2dfbGVuKTsKKwltc2ctPmhhbmRsZXIgPSBoYW5kbGVyOworCisJaWYgKCEocSA9IGlvcF9zZW5kX3F1ZXVlW2lvcF9udW1dW2NoYW5dKSkgeworCQlpb3Bfc2VuZF9xdWV1ZVtpb3BfbnVtXVtjaGFuXSA9IG1zZzsKKwl9IGVsc2UgeworCQl3aGlsZSAocS0+bmV4dCkgcSA9IHEtPm5leHQ7CisJCXEtPm5leHQgPSBtc2c7CisJfQorCisJaWYgKGlvcF9yZWFkYihpb3BfYmFzZVtpb3BfbnVtXSwKKwkgICAgSU9QX0FERFJfU0VORF9TVEFURSArIGNoYW4pID09IElPUF9NU0dfSURMRSkgeworCQlpb3BfZG9fc2VuZChtc2cpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVXBsb2FkIGNvZGUgdG8gdGhlIHNoYXJlZCBSQU0gb2YgYW4gSU9QLgorICovCisKK3ZvaWQgaW9wX3VwbG9hZF9jb2RlKHVpbnQgaW9wX251bSwgX191OCAqY29kZV9zdGFydCwKKwkJICAgICB1aW50IGNvZGVfbGVuLCBfX3UxNiBzaGFyZWRfcmFtX3N0YXJ0KQoreworCWlmICgoaW9wX251bSA+PSBOVU1fSU9QUykgfHwgIWlvcF9iYXNlW2lvcF9udW1dKSByZXR1cm47CisKKwlpb3BfbG9hZGFkZHIoaW9wX2Jhc2VbaW9wX251bV0sIHNoYXJlZF9yYW1fc3RhcnQpOworCisJd2hpbGUgKGNvZGVfbGVuLS0pIHsKKwkJaW9wX2Jhc2VbaW9wX251bV0tPnJhbV9kYXRhID0gKmNvZGVfc3RhcnQrKzsKKwl9Cit9CisKKy8qCisgKiBEb3dubG9hZCBjb2RlIGZyb20gdGhlIHNoYXJlZCBSQU0gb2YgYW4gSU9QLgorICovCisKK3ZvaWQgaW9wX2Rvd25sb2FkX2NvZGUodWludCBpb3BfbnVtLCBfX3U4ICpjb2RlX3N0YXJ0LAorCQkgICAgICAgdWludCBjb2RlX2xlbiwgX191MTYgc2hhcmVkX3JhbV9zdGFydCkKK3sKKwlpZiAoKGlvcF9udW0gPj0gTlVNX0lPUFMpIHx8ICFpb3BfYmFzZVtpb3BfbnVtXSkgcmV0dXJuOworCisJaW9wX2xvYWRhZGRyKGlvcF9iYXNlW2lvcF9udW1dLCBzaGFyZWRfcmFtX3N0YXJ0KTsKKworCXdoaWxlIChjb2RlX2xlbi0tKSB7CisJCSpjb2RlX3N0YXJ0KysgPSBpb3BfYmFzZVtpb3BfbnVtXS0+cmFtX2RhdGE7CisJfQorfQorCisvKgorICogQ29tcGFyZSB0aGUgY29kZSBpbiB0aGUgc2hhcmVkIFJBTSBvZiBhbiBJT1Agd2l0aCBhIGNvcHkgaW4gc3lzdGVtIG1lbW9yeQorICogYW5kIHJldHVybiAwIG9uIG1hdGNoIG9yIHRoZSBmaXJzdCBub25tYXRjaGluZyBzeXN0ZW0gbWVtb3J5IGFkZHJlc3Mgb24KKyAqIGZhaWx1cmUuCisgKi8KKworX191OCAqaW9wX2NvbXBhcmVfY29kZSh1aW50IGlvcF9udW0sIF9fdTggKmNvZGVfc3RhcnQsCisJCSAgICAgICB1aW50IGNvZGVfbGVuLCBfX3UxNiBzaGFyZWRfcmFtX3N0YXJ0KQoreworCWlmICgoaW9wX251bSA+PSBOVU1fSU9QUykgfHwgIWlvcF9iYXNlW2lvcF9udW1dKSByZXR1cm4gY29kZV9zdGFydDsKKworCWlvcF9sb2FkYWRkcihpb3BfYmFzZVtpb3BfbnVtXSwgc2hhcmVkX3JhbV9zdGFydCk7CisKKwl3aGlsZSAoY29kZV9sZW4tLSkgeworCQlpZiAoKmNvZGVfc3RhcnQgIT0gaW9wX2Jhc2VbaW9wX251bV0tPnJhbV9kYXRhKSB7CisJCQlyZXR1cm4gY29kZV9zdGFydDsKKwkJfQorCQljb2RlX3N0YXJ0Kys7CisJfQorCXJldHVybiAoX191OCAqKSAwOworfQorCisvKgorICogSGFuZGxlIGFuIElTTSBJT1AgaW50ZXJydXB0CisgKi8KKworaXJxcmV0dXJuX3QgaW9wX2lzbV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1aW50IGlvcF9udW0gPSAodWludCkgZGV2X2lkOworCXZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AgPSBpb3BfYmFzZVtpb3BfbnVtXTsKKwlpbnQgaSxzdGF0ZTsKKworI2lmZGVmIERFQlVHX0lPUAorCXByaW50aygiaW9wX2lzbV9pcnE6IHN0YXR1cyA9ICUwMlhcbiIsICh1aW50KSBpb3AtPnN0YXR1c19jdHJsKTsKKyNlbmRpZgorCisJLyogSU5UMCBpbmRpY2F0ZXMgYSBzdGF0ZSBjaGFuZ2Ugb24gYW4gb3V0Z29pbmcgbWVzc2FnZSBjaGFubmVsICovCisKKwlpZiAoaW9wLT5zdGF0dXNfY3RybCAmIElPUF9JTlQwKSB7CisJCWlvcC0+c3RhdHVzX2N0cmwgPSBJT1BfSU5UMCB8IElPUF9SVU4gfCBJT1BfQVVUT0lOQzsKKyNpZmRlZiBERUJVR19JT1AKKwkJcHJpbnRrKCJpb3BfaXNtX2lycTogbmV3IHN0YXR1cyA9ICUwMlgsIHNlbmQgc3RhdGVzIiwKKwkJCSh1aW50KSBpb3AtPnN0YXR1c19jdHJsKTsKKyNlbmRpZgorCQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfQ0hBTiAgOyBpKyspIHsKKwkJCXN0YXRlID0gaW9wX3JlYWRiKGlvcCwgSU9QX0FERFJfU0VORF9TVEFURSArIGkpOworI2lmZGVmIERFQlVHX0lPUAorCQkJcHJpbnRrKCIgJTAyWCIsIHN0YXRlKTsKKyNlbmRpZgorCQkJaWYgKHN0YXRlID09IElPUF9NU0dfQ09NUExFVEUpIHsKKwkJCQlpb3BfaGFuZGxlX3NlbmQoaW9wX251bSwgaSwgcmVncyk7CisJCQl9CisJCX0KKyNpZmRlZiBERUJVR19JT1AKKwkJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJfQorCisJaWYgKGlvcC0+c3RhdHVzX2N0cmwgJiBJT1BfSU5UMSkgewkvKiBJTlQxIGZvciBpbmNvbWluZyBtc2dzICovCisJCWlvcC0+c3RhdHVzX2N0cmwgPSBJT1BfSU5UMSB8IElPUF9SVU4gfCBJT1BfQVVUT0lOQzsKKyNpZmRlZiBERUJVR19JT1AKKwkJcHJpbnRrKCJpb3BfaXNtX2lycTogbmV3IHN0YXR1cyA9ICUwMlgsIHJlY3Ygc3RhdGVzIiwKKwkJCSh1aW50KSBpb3AtPnN0YXR1c19jdHJsKTsKKyNlbmRpZgorCQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfQ0hBTiA7IGkrKykgeworCQkJc3RhdGUgPSBpb3BfcmVhZGIoaW9wLCBJT1BfQUREUl9SRUNWX1NUQVRFICsgaSk7CisjaWZkZWYgREVCVUdfSU9QCisJCQlwcmludGsoIiAlMDJYIiwgc3RhdGUpOworI2VuZGlmCisJCQlpZiAoc3RhdGUgPT0gSU9QX01TR19ORVcpIHsKKwkJCQlpb3BfaGFuZGxlX3JlY3YoaW9wX251bSwgaSwgcmVncyk7CisJCQl9CisJCX0KKyNpZmRlZiBERUJVR19JT1AKKwkJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKK2NoYXIgKmlvcF9jaGFuX3N0YXRlKGludCBzdGF0ZSkKK3sKKwlzd2l0Y2goc3RhdGUpIHsKKwkJY2FzZSBJT1BfTVNHX0lETEUJOiByZXR1cm4gImlkbGUgICAgICAiOworCQljYXNlIElPUF9NU0dfTkVXCTogcmV0dXJuICJuZXcgICAgICAgIjsKKwkJY2FzZSBJT1BfTVNHX1JDVkQJOiByZXR1cm4gInJlY2VpdmVkICAiOworCQljYXNlIElPUF9NU0dfQ09NUExFVEUJOiByZXR1cm4gImNvbXBsZXRlZCAiOworCQlkZWZhdWx0CQkJOiByZXR1cm4gInVua25vd24gICAiOworCX0KK30KKworaW50IGlvcF9kdW1wX29uZV9pb3AoY2hhciAqYnVmLCBpbnQgaW9wX251bSwgY2hhciAqaW9wX25hbWUpCit7CisJaW50IGksbGVuID0gMDsKKwl2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wID0gaW9wX2Jhc2VbaW9wX251bV07CisKKwlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiJXMgSU9QIGNoYW5uZWwgc3RhdGVzOlxuXG4iLCBpb3BfbmFtZSk7CisJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiMjICBzZW5kX3N0YXRlICByZWN2X3N0YXRlICBkZXZpY2VcbiIpOworCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0lPUF9DSEFOIDsgaSsrKSB7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIlMmQgICUxMHMgICUxMHMgICVzXG4iLCBpLAorCQkJaW9wX2NoYW5fc3RhdGUoaW9wX3JlYWRiKGlvcCwgSU9QX0FERFJfU0VORF9TVEFURStpKSksCisJCQlpb3BfY2hhbl9zdGF0ZShpb3BfcmVhZGIoaW9wLCBJT1BfQUREUl9SRUNWX1NUQVRFK2kpKSwKKwkJCWlvcF9saXN0ZW5lcnNbaW9wX251bV1baV0uaGFuZGxlcj8KKwkJCQkgICAgICBpb3BfbGlzdGVuZXJzW2lvcF9udW1dW2ldLmRldm5hbWUgOiAiIik7CisKKwl9CisJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIlxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpb3BfZ2V0X3Byb2NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLCBpbnQgY291bnQpCit7CisJaW50IGxlbiwgY250OworCisJY250ID0gMDsKKwlsZW4gPSAgc3ByaW50ZihidWYsICJJT1BzIGRldGVjdGVkOlxuXG4iKTsKKworCWlmIChpb3Bfc2NjX3ByZXNlbnQpIHsKKwkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIlNDQyBJT1AgKCVwKTogc3RhdHVzICUwMlhcbiIsCisJCQkJaW9wX2Jhc2VbSU9QX05VTV9TQ0NdLAorCQkJCSh1aW50KSBpb3BfYmFzZVtJT1BfTlVNX1NDQ10tPnN0YXR1c19jdHJsKTsKKwl9CisJaWYgKGlvcF9pc21fcHJlc2VudCkgeworCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiSVNNIElPUCAoJXApOiBzdGF0dXMgJTAyWFxuXG4iLAorCQkJCWlvcF9iYXNlW0lPUF9OVU1fSVNNXSwKKwkJCQkodWludCkgaW9wX2Jhc2VbSU9QX05VTV9JU01dLT5zdGF0dXNfY3RybCk7CisJfQorCisJaWYgKGlvcF9zY2NfcHJlc2VudCkgeworCQlsZW4gKz0gaW9wX2R1bXBfb25lX2lvcChidWYrbGVuLCBJT1BfTlVNX1NDQywgIlNDQyIpOworCisJfQorCisJaWYgKGlvcF9pc21fcHJlc2VudCkgeworCQlsZW4gKz0gaW9wX2R1bXBfb25lX2lvcChidWYrbGVuLCBJT1BfTlVNX0lTTSwgIklTTSIpOworCisJfQorCisJaWYgKGxlbiA+PSBwb3MpIHsKKwkJaWYgKCEqc3RhcnQpIHsKKwkJCSpzdGFydCA9IGJ1ZiArIHBvczsKKwkJCWNudCA9IGxlbiAtIHBvczsKKwkJfSBlbHNlIHsKKwkJCWNudCArPSBsZW47CisJCX0KKwl9CisJcmV0dXJuIChjb3VudCA+IGNudCkgPyBjbnQgOiBjb3VudDsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL21hY19rc3ltcy5jIGIvYXJjaC9tNjhrL21hYy9tYWNfa3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTM3Y2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9tYWNfa3N5bXMuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKy8qIFNheXMgd2hldGhlciB3ZSdyZSB1c2luZyBBL1VYIGludGVycnVwdHMgb3Igbm90ICovCitleHRlcm4gaW50IHZpYV9hbHRfbWFwcGluZzsKKworRVhQT1JUX1NZTUJPTCh2aWFfYWx0X21hcHBpbmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9tYWNfcGVuZ3Vpbi5TIGIvYXJjaC9tNjhrL21hYy9tYWNfcGVuZ3Vpbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzY2UzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL21hY19wZW5ndWluLlMKQEAgLTAsMCArMSw3NSBAQAorLmJ5dGUgXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweEZGLDB4RjAsMHhGRiwweEZGLDB4MEYsMHhGMCwweEYwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHhGRiwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHgwMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4RkYsMHhGMCwweDBGLDB4RkYsMHgwRiwweEZGLDB4RjAsMHgwRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDBGLDB4RkYsMHgwMCwweDBGLDB4MEYsMHhGRiwweEYwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MDAsMHhGRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDBGLDB4RjAsMHgwMCwweDAwLDB4RkYsMHhGMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MEYsMHhGMCwweEZGLDB4RkYsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDBGLDB4RkYsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MEYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsXAorMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLFwKKzB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MDAsMHgwMCxcCisweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsXAorMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGMCwweDAwLFwKKzB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGMCxcCisweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsXAorMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsXAorMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGMCwweEZGLDB4RjAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLFwKKzB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCxcCisweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9tYWNib2luZy5jIGIvYXJjaC9tNjhrL21hYy9tYWNib2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzVjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL21hY2JvaW5nLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKglNYWMgYm9uZyBub2lzZSBnZW5lcmF0b3IuIE5vdGUgLSB3ZSBvdWdodCB0byBwdXQgYSBib2luZ3kgbm9pc2UKKyAqCWhlcmUgOCkKKyAqCisgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkxNi4xMS45ODoKKyAqCXJld3JvdGUgc29tZSBmdW5jdGlvbnMsIGFkZGVkIHN1cHBvcnQgZm9yIEVuaGFuY2VkIEFTQyAoUXVhZHJhcykKKyAqCWFmdGVyIHRoZSBOZXRCU0QgYXNjLmMgY29uc29sZSBiZWxsIHBhdGNoIGJ5IENvbGluIFdvb2QvRnJlZGVyaWNrIEJydWNrCisgKglKdWVyZ2VuIE1lbGxpbmdlciAoanVlcmdlbi5tZWxsaW5nZXJAdC1vbmxpbmUuZGUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX2FzYy5oPgorCitzdGF0aWMgaW50IG1hY19hc2NfaW5pdGVkOworLyoKKyAqIGR1bWIgdHJpYW5ndWxhciB3YXZlIHRhYmxlCisgKi8KK3N0YXRpYyBfX3U4IG1hY19hc2Nfd2F2ZV90YWJbIDB4ODAwIF07CisKKy8qCisgKiBBbGFuJ3Mgb3JpZ2luYWwgc2luZSB0YWJsZTsgbmVlZHMgaW50ZXJwb2xhdGluZyB0byAweDgwMAorICogKGhpbnQ6IGludGVycG9sYXRlIG9yIGhhcmR3aXJlIFswIC0+IFBpLzJbLCBpdCdzIHN5bW1ldHJpYykKKyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIHNpbmVfZGF0YVtdID0geworCTAsICAzOSwgIDc1LCAgMTAzLCAgMTIxLCAgMTI3LCAgMTIxLCAgMTAzLCAgNzUsICAzOSwKKwkwLCAtMzksIC03NSwgLTEwMywgLTEyMSwgLTEyNywgLTEyMSwgLTEwMywgLTc1LCAtMzkKK307CisKKy8qCisgKiB3aGVyZSB0aGUgQVNDIGhpZGVzIC4uLgorICovCitzdGF0aWMgdm9sYXRpbGUgX191OCogbWFjX2FzY19yZWdzID0gKCB2b2lkKiApMHg1MEYxNDAwMDsKKworLyoKKyAqIHNhbXBsZSByYXRlOyBpcyB0aGlzIGEgZ29vZCBkZWZhdWx0IHZhbHVlPworICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNfYXNjX3NhbXBsZXNwZXJzZWMgPSAxMTA1MDsKK3N0YXRpYyBpbnQgbWFjX2JlbGxfZHVyYXRpb247CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNfYmVsbF9waGFzZTsgLyogMC4uMipQaSAtPiAwLi4weDgwMCAod2F2ZXRhYmxlIHNpemUpICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNfYmVsbF9waGFzZXBlcnNhbXBsZTsKKworLyoKKyAqIHNvbWUgZnVuY3Rpb24gcHJvdG9zCisgKi8KK3N0YXRpYyB2b2lkIG1hY19pbml0X2FzYyggdm9pZCApOworc3RhdGljIHZvaWQgbWFjX25vc291bmQoIHVuc2lnbmVkIGxvbmcgKTsKK3N0YXRpYyB2b2lkIG1hY19xdWFkcmFfc3RhcnRfYmVsbCggdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCApOworc3RhdGljIHZvaWQgbWFjX3F1YWRyYV9yaW5nX2JlbGwoIHVuc2lnbmVkIGxvbmcgKTsKK3N0YXRpYyB2b2lkIG1hY19hdl9zdGFydF9iZWxsKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICk7CitzdGF0aWMgdm9pZCAoICptYWNfc3BlY2lhbF9iZWxsICkoIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQgKTsKKworLyoKKyAqIG91ciB0aW1lciB0byBzdGFydC9jb250aW51ZS9zdG9wIHRoZSBiZWxsCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBtYWNfc291bmRfdGltZXIgPQorCQlUSU1FUl9JTklUSUFMSVpFUihtYWNfbm9zb3VuZCwgMCwgMCk7CisKKy8qCisgKiBTb3J0IG9mIGluaXRpYWxpemUgdGhlIHNvdW5kIGNoaXAgKGNhbGxlZCBmcm9tIG1hY19ta3NvdW5kIG9uIHRoZSBmaXJzdAorICogYmVlcCkuCisgKi8KK3N0YXRpYyB2b2lkIG1hY19pbml0X2FzYyggdm9pZCApCit7CisJaW50IGk7CisKKwkvKgorCSAqIGRvIHNvbWUgbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbgorCSAqIEJUVzoKKwkgKiB0aGUgTmV0QlNEIFF1YWRyYSBwYXRjaCBpZGVudGlmaWVzIHRoZSBFbmhhbmNlZCBBcHBsZSBTb3VuZCBDaGlwIHZpYQorCSAqCW1hY19hc2NfcmVnc1sgMHg4MDAgXSAmIDB4RjAgIT0gMAorCSAqIHRoaXMgbWFrZXMgbm8gc2Vuc2UgaGVyZSwgYmVjYXVzZSB3ZSBoYXZlIHRvIHNldCB0aGUgZGVmYXVsdCBzYW1wbGUKKwkgKiByYXRlIGFueXdheSBpZiB3ZSB3YW50IGNvcnJlY3QgZnJlcXVlbmNpZXMKKwkgKi8KKwlzd2l0Y2ggKCBtYWNpbnRvc2hfY29uZmlnLT5pZGVudCApCisJeworCQljYXNlIE1BQ19NT0RFTF9JSUZYOgorCQkJLyoKKwkJCSAqIFRoZSBJSWZ4IGlzIGFsd2F5cyBzcGVjaWFsIC4uLgorCQkJICovCisJCQltYWNfYXNjX3JlZ3MgPSAoIHZvaWQqICkweDUwMDEwMDAwOworCQkJYnJlYWs7CisJCQkvKgorCQkJICogbm90IHN1cmUgYWJvdXQgaG93IGNvcnJlY3QgdGhpcyBsaXN0IGlzCisJCQkgKiBtYWNoaW5lcyB3aXRoIHRoZSBFQVNDIGVuaGFuY2VkIGFwcGxlIHNvdW5kIGNoaXAKKwkJCSAqLworCQljYXNlIE1BQ19NT0RFTF9RNjMwOgorCQljYXNlIE1BQ19NT0RFTF9QNDc1OgorCQkJbWFjX3NwZWNpYWxfYmVsbCA9IG1hY19xdWFkcmFfc3RhcnRfYmVsbDsKKwkJCW1hY19hc2Nfc2FtcGxlc3BlcnNlYyA9IDIyMTUwOworCQkJYnJlYWs7CisJCWNhc2UgTUFDX01PREVMX0M2NjA6CisJCWNhc2UgTUFDX01PREVMX1E4NDA6CisJCQkvKgorCQkJICogVGhlIFF1YWRyYSA2NjBBViBhbmQgODQwQVYgdXNlIHRoZSAiU2luZ2VyIiBjdXN0b20gQVNJQyBmb3Igc291bmQgSS9PLgorCQkJICogSXQgYXBwZWFycyB0byBiZSBzaW1pbGFyIHRvIHRoZSAiQVdBQ1MiIGN1c3RvbSBBU0lDIGluIHRoZSBQb3dlciBNYWMKKwkJCSAqIFs2NzhdMTAwLiAgQmVjYXVzZSBTaW5nZXIgYW5kIEFXQUNTIG1heSBoYXZlIGEgc2ltaWxhciBoYXJkd2FyZQorCQkJICogaW50ZXJmYWNlLCB0aGlzIHdvdWxkIGltcGx5IHRoYXQgdGhlIGNvZGUgaW4gZHJpdmVycy9zb3VuZC9kbWFzb3VuZC5jCisJCQkgKiBmb3IgQVdBQ1MgY291bGQgYmUgdXNlZCBhcyBhIGJhc2lzIGZvciBTaW5nZXIgc3VwcG9ydC4gIEFsbCB3ZSBoYXZlIHRvCisJCQkgKiBkbyBpcyBmaWd1cmUgb3V0IGhvdyB0byBkbyBETUEgb24gdGhlIDY2MEFWLzg0MEFWIHRocm91Z2ggdGhlIFBTQyBhbmQKKwkJCSAqIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIFNpbmdlciBoYXJkd2FyZSBzaXRzIGluIG1lbW9yeS4gKEknZCBsb29rIGluIHRoZQorCQkJICogdmljaW5pdHkgb2YgdGhlIEFXQUNTIGxvY2F0aW9uIGluIGEgUG93ZXIgTWFjIFs2NzhdMTAwIGZpcnN0LCBvciB0aGUKKwkJCSAqIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIEFwcGxlIFNvdW5kIENoaXAtLUFTQy0taW4gb3RoZXIgTWFjcy4pICBUaGUKKwkJCSAqIFBvd2VyIE1hYyBbNjc4XTEwMCBpbmZvIGNhbiBiZSBmb3VuZCBpbiBNa0xpbnV4IE1hY2gga2VybmVsIHNvdXJjZXMuCisJCQkgKgorCQkJICogUXVvdGVkIGZyb20gQXBwbGUncyBUZWNoIEluZm8gTGlicmFyeSwgYXJ0aWNsZSBudW1iZXIgMTY0MDU6CisJCQkgKiAgICJBbW9uZyBkZXNrdG9wIE1hY2ludG9zaCBjb21wdXRlcnMsIG9ubHkgdGhlIDY2MEFWLCA4NDBBViwgYW5kIFBvd2VyCisJCQkgKiAgIE1hY2ludG9zaCBtb2RlbHMgaGF2ZSAxNi1iaXQgYXVkaW8gaW5wdXQgYW5kIG91dHB1dCBjYXBhYmlsaXR5CisJCQkgKiAgIGJlY2F1c2Ugb2YgdGhlIEFUJlQgRFNQMzIxMCBoYXJkd2FyZSBjaXJjdWl0cnkgYW5kIHRoZSAxNi1iaXQgU2luZ2VyCisJCQkgKiAgIGNvZGVjIGNpcmN1aXRyeSBpbiB0aGUgQVZzLiAgVGhlIEF1ZGlvIFdhdmVmb3JtIEFtcGxpZmllciBhbmQKKwkJCSAqICAgQ29udmVydGVyIChBV0FDKSBjaGlwIGluIHRoZSBQb3dlciBNYWNpbnRvc2ggcGVyZm9ybXMgdGhlIHNhbWUKKwkJCSAqICAgMTYtYml0IEkvTyBmdW5jdGlvbmFsaXR5LiAgVGhlIFBvd2VyQm9vayA1MDAgc2VyaWVzIGNvbXB1dGVycworCQkJICogICBzdXBwb3J0IDE2LWJpdCBzdGVyZW8gb3V0cHV0LCBidXQgb25seSBtb25vIGlucHV0LiIKKwkJCSAqCisJCQkgKiAgIGh0dHA6Ly90aWwuaW5mby5hcHBsZS5jb20vdGVjaGluZm8ubnNmL2FydG51bS9uMTY0MDUKKwkJCSAqCisJCQkgKiAtLURhdmlkIEtpbHplcgorCQkJICovCisJCQltYWNfc3BlY2lhbF9iZWxsID0gbWFjX2F2X3N0YXJ0X2JlbGw7CisJCQlicmVhazsKKwkJY2FzZSBNQUNfTU9ERUxfUTY1MDoKKwkJY2FzZSBNQUNfTU9ERUxfUTcwMDoKKwkJY2FzZSBNQUNfTU9ERUxfUTgwMDoKKwkJY2FzZSBNQUNfTU9ERUxfUTkwMDoKKwkJY2FzZSBNQUNfTU9ERUxfUTk1MDoKKwkJCS8qCisJCQkgKiBDdXJyZW50bHkgbm90IGltcGxlbWVudGVkIQorCQkJICovCisJCQltYWNfc3BlY2lhbF9iZWxsID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIEV2ZXJ5IHN3aXRjaCBuZWVkcyBhIGRlZmF1bHQKKwkJCSAqLworCQkJbWFjX3NwZWNpYWxfYmVsbCA9IE5VTEw7CisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIGluaXQgdGhlIHdhdmUgdGFibGUgd2l0aCBhIHNpbXBsZSB0cmlhbmd1bGFyIHdhdmUKKwkgKiBBIHNpbmUgd2F2ZSB3b3VsZCBzdXJlIGJlIG5pY2VyIGhlcmUgLi4uCisJICovCisJZm9yICggaSA9IDA7IGkgPCAweDQwMDsgaSsrICkKKwl7CisJCW1hY19hc2Nfd2F2ZV90YWJbIGkgXSA9IGkgLyA0OworCQltYWNfYXNjX3dhdmVfdGFiWyBpICsgMHg0MDAgXSA9IDB4RkYgLSBpIC8gNDsKKwl9CisJbWFjX2FzY19pbml0ZWQgPSAxOworfQorCisvKgorICogQ2FsbGVkIHRvIG1ha2Ugbm9pc2U7IGN1cnJlbnQgc2luZ2xlIGVudHJ5IHRvIHRoZSBib2luZyBkcml2ZXIuCisgKiBEb2VzIHRoZSBqb2IgZm9yIHNpbXBsZSBBU0MsIGNhbGxzIG90aGVyIHJvdXRpbmVzIGVsc2UuCisgKiBYWFggRml4bWU6CisgKiBTaG91bGQgYmUgc3BsaXQgaW50byBhc2NfbWtzb3VuZCwgZWFzY19ta3NvdW5kLCBhdl9ta3NvdW5kIGFuZAorICogZnVuY3Rpb24gcG9pbnRlciBzZXQgaW4gbWFjX2luaXRfYXNjIHdoaWNoIHdvdWxkIGJlIGNhbGxlZCBhdAorICogaW5pdCB0aW1lLgorICogX1RoaXNfIGlzIHJhdGhlciB1Z2x5IC4uLgorICovCit2b2lkIG1hY19ta3NvdW5kKCB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGxlbmd0aCApCit7CisJX191MzIgY2ZyZXEgPSAoIGZyZXEgPDwgNSApIC8gNDY4OworCV9fdTMyIGZsYWdzOworCWludCBpOworCisJaWYgKCBtYWNfc3BlY2lhbF9iZWxsID09IE5VTEwgKQorCXsKKwkJLyogRG8gbm90aGluZyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKCAhbWFjX2FzY19pbml0ZWQgKQorCQltYWNfaW5pdF9hc2MoKTsKKworCWlmICggbWFjX3NwZWNpYWxfYmVsbCApCisJeworCQltYWNfc3BlY2lhbF9iZWxsKCBmcmVxLCBsZW5ndGgsIDEyOCApOworCQlyZXR1cm47CisJfQorCisJaWYgKCBmcmVxIDwgMjAgfHwgZnJlcSA+IDIwMDAwIHx8IGxlbmd0aCA9PSAwICkKKwl7CisJCW1hY19ub3NvdW5kKCAwICk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZWxfdGltZXIoICZtYWNfc291bmRfdGltZXIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgMHg4MDA7IGkrKyApCisJCW1hY19hc2NfcmVnc1sgaSBdID0gMDsKKwlmb3IgKCBpID0gMDsgaSA8IDB4ODAwOyBpKysgKQorCQltYWNfYXNjX3JlZ3NbIGkgXSA9IG1hY19hc2Nfd2F2ZV90YWJbIGkgXTsKKworCWZvciAoIGkgPSAwOyBpIDwgODsgaSsrICkKKwkJKiggX191MzIqICkoICggX191MzIgKW1hY19hc2NfcmVncyArIEFTQ19DT05UUk9MICsgMHg4MTQgKyA4ICogaSApID0gY2ZyZXE7CisKKwltYWNfYXNjX3JlZ3NbIDB4ODA3IF0gPSAwOworCW1hY19hc2NfcmVnc1sgQVNDX1ZPTFVNRSBdID0gMTI4OworCW1hY19hc2NfcmVnc1sgMHg4MDUgXSA9IDA7CisJbWFjX2FzY19yZWdzWyAweDgwRiBdID0gMDsKKwltYWNfYXNjX3JlZ3NbIEFTQ19NT0RFIF0gPSBBU0NfTU9ERV9TQU1QTEU7CisJbWFjX2FzY19yZWdzWyBBU0NfRU5BQkxFIF0gPSBBU0NfRU5BQkxFX1NBTVBMRTsKKworCW1hY19zb3VuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIGxlbmd0aDsKKwlhZGRfdGltZXIoICZtYWNfc291bmRfdGltZXIgKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIHJlZ3VsYXIgQVNDOiBzdG9wIHdoaW5pbmcgLi4KKyAqLworc3RhdGljIHZvaWQgbWFjX25vc291bmQoIHVuc2lnbmVkIGxvbmcgaWdub3JlZCApCit7CisJbWFjX2FzY19yZWdzWyBBU0NfRU5BQkxFIF0gPSAwOworfQorCisvKgorICogRUFTQyBlbnRyeTsgaW5pdCBFQVNDLCBkb24ndCBsb2FkIHdhdmV0YWJsZSwgc2NoZWR1bGUgJ3N0YXJ0IHdoaW5pbmcnLgorICovCitzdGF0aWMgdm9pZCBtYWNfcXVhZHJhX3N0YXJ0X2JlbGwoIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgdm9sdW1lICkKK3sKKwlfX3UzMiBmbGFnczsKKworCS8qIGlmIHRoZSBiZWxsIGlzIGFscmVhZHkgcmluZ2luZywgcmluZyBsb25nZXIgKi8KKwlpZiAoIG1hY19iZWxsX2R1cmF0aW9uID4gMCApCisJeworCQltYWNfYmVsbF9kdXJhdGlvbiArPSBsZW5ndGg7CisJCXJldHVybjsKKwl9CisKKwltYWNfYmVsbF9kdXJhdGlvbiA9IGxlbmd0aDsKKwltYWNfYmVsbF9waGFzZSA9IDA7CisJbWFjX2JlbGxfcGhhc2VwZXJzYW1wbGUgPSAoIGZyZXEgKiBzaXplb2YoIG1hY19hc2Nfd2F2ZV90YWIgKSApIC8gbWFjX2FzY19zYW1wbGVzcGVyc2VjOworCS8qIHRoaXMgaXMgcmVhc29uYWJseSBiaWcgZm9yIHNtYWxsIGZyZXF1ZW5jaWVzICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBzZXQgdGhlIHZvbHVtZSAqLworCW1hY19hc2NfcmVnc1sgMHg4MDYgXSA9IHZvbHVtZTsKKworCS8qIHNldCB1cCB0aGUgQVNDIHJlZ2lzdGVycyAqLworCWlmICggbWFjX2FzY19yZWdzWyAweDgwMSBdICE9IDEgKQorCXsKKwkJLyogc2VsZWN0IG1vbm8gbW9kZSAqLworCQltYWNfYXNjX3JlZ3NbIDB4ODA3IF0gPSAwOworCQkvKiBzZWxlY3Qgc2FtcGxlZCBzb3VuZCBtb2RlICovCisJCW1hY19hc2NfcmVnc1sgMHg4MDIgXSA9IDA7CisJCS8qID8/PyAqLworCQltYWNfYXNjX3JlZ3NbIDB4ODAxIF0gPSAxOworCQltYWNfYXNjX3JlZ3NbIDB4ODAzIF0gfD0gMHg4MDsKKwkJbWFjX2FzY19yZWdzWyAweDgwMyBdICY9IDB4N0Y7CisJfQorCisJbWFjX3NvdW5kX3RpbWVyLmZ1bmN0aW9uID0gbWFjX3F1YWRyYV9yaW5nX2JlbGw7CisJbWFjX3NvdW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwlhZGRfdGltZXIoICZtYWNfc291bmRfdGltZXIgKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEVBU0MgJ3N0YXJ0L2NvbnRpbnVlIHdoaW5pbmcnOyBJJ20gbm90IHN1cmUgd2h5IHRoZSBhYm92ZSBmdW5jdGlvbiBkaWRuJ3QKKyAqIGFscmVhZHkgbG9hZCB0aGUgd2F2ZSB0YWJsZSwgb3IgYXQgbGVhc3QgY2FsbCB0aGlzIG9uZS4uLgorICogVGhpcyBwaWVjZSBrZWVwcyByZWxvYWRpbmcgdGhlIHdhdmUgdGFibGUgdW50aWwgZG9uZS4KKyAqLworc3RhdGljIHZvaWQgbWFjX3F1YWRyYV9yaW5nX2JlbGwoIHVuc2lnbmVkIGxvbmcgaWdub3JlZCApCit7CisJaW50CWksIGNvdW50ID0gbWFjX2FzY19zYW1wbGVzcGVyc2VjIC8gSFo7CisJX191MzIgZmxhZ3M7CisKKwkvKgorCSAqIHdlIG5laXRoZXIgd2FudCBhIHNvdW5kIGJ1ZmZlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LCBzbyB3ZSBuZWVkIHRvIG1hdGNoCisJICogdGhlIG51bWJlciBvZiBzYW1wbGVzIHBlciB0aW1lciBpbnRlcnJ1cHQgYXMgZXhhY3RseSBhcyBwb3NzaWJsZS4KKwkgKiB1c2luZyB0aGUgYXNjIGludGVycnVwdCB3aWxsIGdpdmUgYmV0dGVyIHJlc3VsdHMgaW4gdGhlIGZ1dHVyZQorCSAqIC4uLmFuZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgcmVhbCBzYW1wbGUgKGEgYm9pbmd5IG5vaXNlLCBtYXliZS4uLikKKwkgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlbF90aW1lciggJm1hY19zb3VuZF90aW1lciApOworCisJaWYgKCBtYWNfYmVsbF9kdXJhdGlvbi0tID4gMCApCisJeworCQlmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorCQl7CisJCQltYWNfYmVsbF9waGFzZSArPSBtYWNfYmVsbF9waGFzZXBlcnNhbXBsZTsKKwkJCW1hY19hc2NfcmVnc1sgMCBdID0gbWFjX2FzY193YXZlX3RhYlsgbWFjX2JlbGxfcGhhc2UgJiAoIHNpemVvZiggbWFjX2FzY193YXZlX3RhYiApIC0gMSApIF07CisJCX0KKwkJbWFjX3NvdW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwkJYWRkX3RpbWVyKCAmbWFjX3NvdW5kX3RpbWVyICk7CisJfQorCWVsc2UKKwkJbWFjX2FzY19yZWdzWyAweDgwMSBdID0gMDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEFWIGNvZGUgLSBwbGVhc2UgZmlsbCBpbi4KKyAqLworc3RhdGljIHZvaWQgbWFjX2F2X3N0YXJ0X2JlbGwoIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgdm9sdW1lICkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jIGIvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCkBAIC0wLDAgKzEsNzYwIEBACisvKgorICoJTWFjaW50b3NoIGludGVycnVwdHMKKyAqCisgKiBHZW5lcmFsIGRlc2lnbjoKKyAqIEluIGNvbnRyYXJ5IHRvIHRoZSBBbWlnYSBhbmQgQXRhcmkgcGxhdGZvcm1zLCB0aGUgTWFjIGhhcmR3YXJlIHNlZW1zIHRvCisgKiBleGNsdXNpdmVseSB1c2UgdGhlIGF1dG92ZWN0b3IgaW50ZXJydXB0cyAodGhlICdnZW5lcmljIGxldmVsMC1sZXZlbDcnCisgKiBpbnRlcnJ1cHRzIHdpdGggZXhjZXB0aW9uIHZlY3RvcnMgMHgxOS0weDFmKS4gVGhlIGZvbGxvd2luZyBpbnRlcnJ1cHQgbGV2ZWxzCisgKiBhcmUgdXNlZDoKKyAqCTEJLSBWSUExCisgKgkJICAtIHNsb3QgMDogb25lIHNlY29uZCBpbnRlcnJ1cHQgKENBMikKKyAqCQkgIC0gc2xvdCAxOiBWQmxhbmsgKENBMSkKKyAqCQkgIC0gc2xvdCAyOiBBREIgZGF0YSByZWFkeSAoU1IgZnVsbCkKKyAqCQkgIC0gc2xvdCAzOiBBREIgZGF0YSAgKENCMikKKyAqCQkgIC0gc2xvdCA0OiBBREIgY2xvY2sgKENCMSkKKyAqCQkgIC0gc2xvdCA1OiB0aW1lciAyCisgKgkJICAtIHNsb3QgNjogdGltZXIgMQorICoJCSAgLSBzbG90IDc6IHN0YXR1cyBvZiBJUlE7IHNpZ25hbHMgJ2FueSBlbmFibGVkIGludC4nCisgKgorICoJMgktIFZJQTIgb3IgUkJWCisgKgkJICAtIHNsb3QgMDogU0NTSSBEUlEgKENBMikKKyAqCQkgIC0gc2xvdCAxOiBOVUJVUyBJUlEgKENBMSkgbmVlZCB0byByZWFkIHBvcnQgQSB0byBmaW5kIHdoaWNoCisgKgkJICAtIHNsb3QgMjogL0VYUCBJUlEgKG9ubHkgb24gSUljaSkKKyAqCQkgIC0gc2xvdCAzOiBTQ1NJIElSUSAoQ0IyKQorICoJCSAgLSBzbG90IDQ6IEFTQyBJUlEgKENCMSkKKyAqCQkgIC0gc2xvdCA1OiB0aW1lciAyIChub3Qgb24gSUljaSkKKyAqCQkgIC0gc2xvdCA2OiB0aW1lciAxIChub3Qgb24gSUljaSkKKyAqCQkgIC0gc2xvdCA3OiBzdGF0dXMgb2YgSVJROyBzaWduYWxzICdhbnkgZW5hYmxlZCBpbnQuJworICoKKyAqCTIJLSBPU1MgKElJZnggb25seT8pCisgKgkJICAtIHNsb3QgMDogU0NTSSBpbnRlcnJ1cHQKKyAqCQkgIC0gc2xvdCAxOiBTb3VuZCBpbnRlcnJ1cHQKKyAqCisgKiBMZXZlbHMgMy02IHZhcnkgYnkgbWFjaGluZSB0eXBlLiBGb3IgVklBIG9yIFJCViBNYWNpbnRvc2hlczoKKyAqCisgKgkzCS0gdW51c2VkICg/KQorICoKKyAqCTQJLSBTQ0MgKHNsb3QgbnVtYmVyIGRldGVybWluZWQgYnkgcmVhZGluZyBSUjMgb24gdGhlIFNTQyBpdHNlbGYpCisgKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQQorICoJCSAgLSBzbG90IDI6IFNDQyBjaGFubmVsIEIKKyAqCisgKgk1CS0gdW51c2VkICg/KQorICoJCSAgW3NlcmlhbCBlcnJvcnMgb3Igc3BlY2lhbCBjb25kaXRpb25zIHNlZW0gdG8gcmFpc2UgbGV2ZWwgNgorICoJCSAgaW50ZXJydXB0cyBvbiBzb21lIG1vZGVscyAoTEM0eHg/KV0KKyAqCisgKgk2CS0gb2ZmIHN3aXRjaCAoPykKKyAqCisgKiBGb3IgT1NTIE1hY2ludG9zaGVzIChJSWZ4IG9ubHkgYXQgdGhpcyBwb2ludCk6CisgKgorICoJMwktIE51YnVzIGludGVycnVwdAorICoJCSAgLSBzbG90IDA6IFNsb3QgJDkKKyAqCQkgIC0gc2xvdCAxOiBTbG90ICRBCisgKgkJICAtIHNsb3QgMjogU2xvdCAkQgorICoJCSAgLSBzbG90IDM6IFNsb3QgJEMKKyAqCQkgIC0gc2xvdCA0OiBTbG90ICRECisgKgkJICAtIHNsb3QgNTogU2xvdCAkRQorICoKKyAqCTQJLSBTQ0MgSU9QCisgKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQQorICoJCSAgLSBzbG90IDI6IFNDQyBjaGFubmVsIEIKKyAqCisgKgk1CS0gSVNNIElPUCAoQURCPykKKyAqCisgKgk2CS0gdW51c2VkCisgKgorICogRm9yIFBTQyBNYWNpbnRvc2hlcyAoNjYwQVYsIDg0MEFWKToKKyAqCisgKgkzCS0gUFNDIGxldmVsIDMKKyAqCQkgIC0gc2xvdCAwOiBNQUNFCisgKgorICoJNAktIFBTQyBsZXZlbCA0CisgKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQSBpbnRlcnJ1cHQKKyAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCIGludGVycnVwdAorICoJCSAgLSBzbG90IDM6IE1BQ0UgRE1BCisgKgorICoJNQktIFBTQyBsZXZlbCA1CisgKgorICoJNgktIFBTQyBsZXZlbCA2CisgKgorICogRmluYWxseSB3ZSBoYXZlIGdvb2QgJ29sZSBsZXZlbCA3LCB0aGUgbm9uLW1hc2thYmxlIGludGVycnVwdDoKKyAqCisgKgk3CS0gTk1JIChwcm9ncmFtbWVyJ3Mgc3dpdGNoIG9uIHRoZSBiYWNrIG9mIHNvbWUgTWFjcykKKyAqCQkgIEFsc28gUkFNIHBhcml0eSBlcnJvciBvbiBtb2RlbHMgd2hpY2ggc3VwcG9ydCBpdCAoSUljLCBJSWZ4PykKKyAqCisgKiBUaGUgY3VycmVudCBpbnRlcnJ1cHQgbG9naWMgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKyAqCisgKiAtIFdlIGluc3RhbGwgZGlzcGF0Y2hlcnMgZm9yIHRoZSBhdXRvdmVjdG9yIGludGVycnVwdHMgKDEtNykuIFRoZXNlCisgKiAgIGRpc3BhdGNoZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgcXVlcnlpbmcgdGhlIGhhcmR3YXJlICh0aGUKKyAqICAgVklBL1JCVi9PU1MvUFNDIGNoaXBzKSB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgc291cmNlLiBVc2luZworICogICB0aGlzIGluZm9ybWF0aW9uIGEgbWFjaHNwZWMgaW50ZXJydXB0IG51bWJlciBpcyBnZW5lcmF0ZWQgYnkgcGxhY2luZyB0aGUKKyAqICAgaW5kZXggb2YgdGhlIGludGVycnVwdCBoYXJkd2FyZSBpbnRvIHRoZSBsb3cgdGhyZWUgYml0cyBhbmQgdGhlIG9yaWdpbmFsCisgKiAgIGF1dG92ZWN0b3IgaW50ZXJydXB0IG51bWJlciBpbiB0aGUgdXBwZXIgNSBiaXRzLiBUaGUgaGFuZGxlcnMgZm9yIHRoZQorICogICByZXN1bHRpbmcgbWFjaHNwZWMgaW50ZXJydXB0IGFyZSB0aGVuIGNhbGxlZC4KKyAqCisgKiAtIE51YnVzIGlzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UgaXRzIGludGVycnVwdHMgYXJlIGhpZGRlbiBiZWhpbmQgdHdvCisgKiAgIGxheWVycyBvZiBoYXJkd2FyZS4gTnVidXMgaW50ZXJydXB0cyBjb21lIGluIGFzIGluZGV4IDEgb24gVklBICMyLAorICogICB3aGljaCB0cmFuc2xhdGVzIHRvIElSUSBudW1iZXIgMTcuIEluIHRoaXMgc3BvdCB3ZSBpbnN0YWxsIF9hbm90aGVyXworICogICBkaXNwYXRjaGVyLiBUaGlzIGRpc3BhdGNoZXIgZmluZHMgdGhlIGludGVycnVwdGluZyBzbG90IG51bWJlciAoOS1GKSBhbmQKKyAqICAgdGhlbiBmb3JtcyBhIG5ldyBtYWNoc3BlYyBpbnRlcnJ1cHQgbnVtYmVyIGFzIGFib3ZlIHdpdGggdGhlIHNsb3QgbnVtYmVyCisgKiAgIG1pbnVzIDkgaW4gdGhlIGxvdyB0aHJlZSBiaXRzIGFuZCB0aGUgcHNldWRvLWxldmVsIDcgaW4gdGhlIHVwcGVyIGZpdmUKKyAqICAgYml0cy4gIFRoZSBoYW5kbGVycyBmb3IgdGhpcyBuZXcgbWFjaHNwZWMgaW50ZXJydXB0IG51bWJlciBhcmUgdGhlbgorICogICBjYWxsZWQuIFRoaXMgcHV0cyBOdWJ1cyBpbnRlcnJ1cHRzIGludG8gdGhlIHJhbmdlIDU2LTYyLgorICoKKyAqIC0gVGhlIEJhYm9vbiBpbnRlcnJ1cHRzICh1c2VkIG9uIHNvbWUgUG93ZXJCb29rcykgYXJlIGFuIGV2ZW4gbW9yZSBzcGVjaWFsCisgKiAgIGNhc2UuIFRoZXkncmUgaGlkZGVuIGJlaGluZCB0aGUgTnVidXMgc2xvdCAkQyBpbnRlcnJ1cHQgdGh1cyBhZGRpbmcgYQorICogICB0aGlyZCBsYXllciBvZiBpbmRpcmVjdGlvbi4gV2h5IG9oIHdoeSBkaWQgdGhlIEFwcGxlIGVuZ2luZWVycyBkbyB0aGF0PworICoKKyAqIC0gV2Ugc3VwcG9ydCAiZmFzdCIgYW5kICJzbG93IiBoYW5kbGVycywganVzdCBsaWtlIHRoZSBBbWlnYSBwb3J0LiBUaGUKKyAqICAgZmFzdCBoYW5kbGVycyBhcmUgY2FsbGVkIGZpcnN0IGFuZCB3aXRoIGFsbCBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGV5CisgKiAgIGFyZSBleHBlY3RlZCB0byBleGVjdXRlIHF1aWNrbHkgKGhlbmNlIHRoZSBuYW1lKS4gVGhlIHNsb3cgaGFuZGxlcnMgYXJlCisgKiAgIGNhbGxlZCBsYXN0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCB0aGUgaW50ZXJydXB0IGxldmVsIHJlc3RvcmVkLgorICogICBUaGV5IG11c3QgdGhlcmVmb3JlIGJlIHJlZW50cmFudC4KKyAqCisgKiAgIFRPRE86CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4gLyogZm9yIGludHJfY291bnQgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNody5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNfcHNjLmg+CisjaW5jbHVkZSA8YXNtL2h3dGVzdC5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisKKyNkZWZpbmUgREVCVUdfU1BVUklPVVMKKyNkZWZpbmUgU0hVVFVQX1NPTklDCisKKy8qCisgKiBUaGUgbWFjX2lycV9saXN0IGFycmF5IGlzIGFuIGFycmF5IG9mIGxpbmtlZCBsaXN0cyBvZiBpcnFfbm9kZV90IG5vZGVzLgorICogRWFjaCBub2RlIGNvbnRhaW5zIG9uZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaW50ZXJydXB0CisgKiBvY2N1cnMsIHdpdGggZmFzdCBoYW5kbGVycyBsaXN0ZWQgYmVmb3JlIHNsb3cgaGFuZGxlcnMuCisgKi8KKworaXJxX25vZGVfdCAqbWFjX2lycV9saXN0W05VTV9NQUNfU09VUkNFU107CisKKy8qIFNDQyBpbnRlcnJ1cHQgbWFzayAqLworCitzdGF0aWMgaW50IHNjY19tYXNrOworCisvKgorICogVklBL1JCViBob29rcworICovCisKK2V4dGVybiB2b2lkIHZpYV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdmlhX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCk7CitleHRlcm4gdm9pZCB2aWFfaXJxX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgdmlhX2lycV9kaXNhYmxlKGludCk7CitleHRlcm4gdm9pZCB2aWFfaXJxX2NsZWFyKGludCk7CitleHRlcm4gaW50ICB2aWFfaXJxX3BlbmRpbmcoaW50KTsKKworLyoKKyAqIE9TUyBob29rcworICovCisKK2V4dGVybiBpbnQgb3NzX3ByZXNlbnQ7CisKK2V4dGVybiB2b2lkIG9zc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgb3NzX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCk7CitleHRlcm4gdm9pZCBvc3NfaXJxX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgb3NzX2lycV9kaXNhYmxlKGludCk7CitleHRlcm4gdm9pZCBvc3NfaXJxX2NsZWFyKGludCk7CitleHRlcm4gaW50ICBvc3NfaXJxX3BlbmRpbmcoaW50KTsKKworLyoKKyAqIFBTQyBob29rcworICovCisKK2V4dGVybiBpbnQgcHNjX3ByZXNlbnQ7CisKK2V4dGVybiB2b2lkIHBzY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcHNjX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCk7CitleHRlcm4gdm9pZCBwc2NfaXJxX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgcHNjX2lycV9kaXNhYmxlKGludCk7CitleHRlcm4gdm9pZCBwc2NfaXJxX2NsZWFyKGludCk7CitleHRlcm4gaW50ICBwc2NfaXJxX3BlbmRpbmcoaW50KTsKKworLyoKKyAqIElPUCBob29rcworICovCisKK2V4dGVybiB2b2lkIGlvcF9yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpOworCisvKgorICogQmFib29uIGhvb2tzCisgKi8KKworZXh0ZXJuIGludCBiYWJvb25fcHJlc2VudDsKKworZXh0ZXJuIHZvaWQgYmFib29uX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBiYWJvb25fcmVnaXN0ZXJfaW50ZXJydXB0cyh2b2lkKTsKK2V4dGVybiB2b2lkIGJhYm9vbl9pcnFfZW5hYmxlKGludCk7CitleHRlcm4gdm9pZCBiYWJvb25faXJxX2Rpc2FibGUoaW50KTsKK2V4dGVybiB2b2lkIGJhYm9vbl9pcnFfY2xlYXIoaW50KTsKK2V4dGVybiBpbnQgIGJhYm9vbl9pcnFfcGVuZGluZyhpbnQpOworCisvKgorICogU0NDIGludGVycnVwdCByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkIHNjY19pcnFfZW5hYmxlKGludCk7CitzdGF0aWMgdm9pZCBzY2NfaXJxX2Rpc2FibGUoaW50KTsKKworLyoKKyAqIGNvbnNvbGVfbG9nbGV2ZWwgZGV0ZXJtaW5lcyBOTUkgaGFuZGxlciBmdW5jdGlvbgorICovCisKK2V4dGVybiBpcnFyZXR1cm5fdCBtYWNfYmFuZyhpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitpcnFyZXR1cm5fdCBtYWNfbm1pX2hhbmRsZXIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaXJxcmV0dXJuX3QgbWFjX2RlYnVnX2hhbmRsZXIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCisvKiAjZGVmaW5lIERFQlVHX01BQ0lOVFMgKi8KKwordm9pZCBtYWNfaW5pdF9JUlEodm9pZCkKK3sKKyAgICAgICAgaW50IGk7CisKKyNpZmRlZiBERUJVR19NQUNJTlRTCisJcHJpbnRrKCJtYWNfaW5pdF9JUlEoKTogU2V0dGluZyB0aGluZ3MgdXAuLi5cbiIpOworI2VuZGlmCisJLyogSW5pdGlhbGl6ZSB0aGUgSVJRIGhhbmRsZXIgbGlzdHMuIEluaXRpYWxseSBlYWNoIGxpc3QgaXMgZW1wdHksICovCisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX01BQ19TT1VSQ0VTOyBpKyspIHsKKwkJbWFjX2lycV9saXN0W2ldID0gTlVMTDsKKwl9CisKKwlzY2NfbWFzayA9IDA7CisKKwkvKiBNYWtlIHN1cmUgdGhlIFNPTklDIGludGVycnVwdCBpcyBjbGVhcmVkIG9yIHRoaW5ncyBnZXQgdWdseSAqLworI2lmZGVmIFNIVVRVUF9TT05JQworCXByaW50aygiS2lsbGluZyBvbmJvYXJkIHNvbmljLi4uICIpOworCS8qIFRoaXMgYWRkcmVzcyBzaG91bGQgaG9wZWZ1bGx5IGJlIG1hcHBlZCBhbHJlYWR5ICovCisJaWYgKGh3cmVnX3ByZXNlbnQoKHZvaWQqKSgweDUwZjBhMDAwKSkpIHsKKwkJKihsb25nICopKDB4NTBmMGEwMTQpID0gMHg3ZmZmTDsKKwkJKihsb25nICopKDB4NTBmMGEwMTApID0gMEw7CisJfQorCXByaW50aygiRG9uZS5cbiIpOworI2VuZGlmIC8qIFNIVVRVUF9TT05JQyAqLworCisJLyoKKwkgKiBOb3cgcmVnaXN0ZXIgdGhlIGhhbmRsZXJzIGZvciB0aGUgbWFzdGVyIElSUSBoYW5kbGVycworCSAqIGF0IGxldmVscyAxLTcuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgZG9uZSBlbHNld2hlcmUuCisJICovCisKKwlpZiAob3NzX3ByZXNlbnQpIHsKKwkJb3NzX3JlZ2lzdGVyX2ludGVycnVwdHMoKTsKKwl9IGVsc2UgeworCQl2aWFfcmVnaXN0ZXJfaW50ZXJydXB0cygpOworCX0KKwlpZiAocHNjX3ByZXNlbnQpIHBzY19yZWdpc3Rlcl9pbnRlcnJ1cHRzKCk7CisJaWYgKGJhYm9vbl9wcmVzZW50KSBiYWJvb25fcmVnaXN0ZXJfaW50ZXJydXB0cygpOworCWlvcF9yZWdpc3Rlcl9pbnRlcnJ1cHRzKCk7CisJY3B1X3JlcXVlc3RfaXJxKDcsIG1hY19ubWlfaGFuZGxlciwgSVJRX0ZMR19MT0NLLCAiTk1JIiwKKwkJCW1hY19ubWlfaGFuZGxlcik7CisjaWZkZWYgREVCVUdfTUFDSU5UUworCXByaW50aygibWFjX2luaXRfSVJRKCk6IERvbmUhXG4iKTsKKyNlbmRpZgorfQorCisvKgorICogUm91dGluZXMgdG8gd29yayB3aXRoIGlycV9ub2RlX3QncyBvbiBsaW5rZWQgbGlzdHMgbGlmdGVkIGZyb20KKyAqIHRoZSBBbWlnYSBjb2RlIHdyaXR0ZW4gYnkgUm9tYW4gWmlwcGVsLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNfaW5zZXJ0X2lycShpcnFfbm9kZV90ICoqbGlzdCwgaXJxX25vZGVfdCAqbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlycV9ub2RlX3QgKmN1cjsKKworCWlmICghbm9kZS0+ZGV2X2lkKQorCQlwcmludGsoIiVzOiBXYXJuaW5nOiBkZXZfaWQgb2YgJXMgaXMgemVyb1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgbm9kZS0+ZGV2bmFtZSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljdXIgPSAqbGlzdDsKKworCWlmIChub2RlLT5mbGFncyAmIElSUV9GTEdfRkFTVCkgeworCQlub2RlLT5mbGFncyAmPSB+SVJRX0ZMR19TTE9XOworCQl3aGlsZSAoY3VyICYmIGN1ci0+ZmxhZ3MgJiBJUlFfRkxHX0ZBU1QpIHsKKwkJCWxpc3QgPSAmY3VyLT5uZXh0OworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfSBlbHNlIGlmIChub2RlLT5mbGFncyAmIElSUV9GTEdfU0xPVykgeworCQl3aGlsZSAoY3VyKSB7CisJCQlsaXN0ID0gJmN1ci0+bmV4dDsKKwkJCWN1ciA9IGN1ci0+bmV4dDsKKwkJfQorCX0gZWxzZSB7CisJCXdoaWxlIChjdXIgJiYgIShjdXItPmZsYWdzICYgSVJRX0ZMR19TTE9XKSkgeworCQkJbGlzdCA9ICZjdXItPm5leHQ7CisJCQljdXIgPSBjdXItPm5leHQ7CisJCX0KKwl9CisKKwlub2RlLT5uZXh0ID0gY3VyOworCSpsaXN0ID0gbm9kZTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hY19kZWxldGVfaXJxKGlycV9ub2RlX3QgKipsaXN0LCB2b2lkICpkZXZfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpcnFfbm9kZV90ICpub2RlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChub2RlID0gKmxpc3Q7IG5vZGU7IGxpc3QgPSAmbm9kZS0+bmV4dCwgbm9kZSA9ICpsaXN0KSB7CisJCWlmIChub2RlLT5kZXZfaWQgPT0gZGV2X2lkKSB7CisJCQkqbGlzdCA9IG5vZGUtPm5leHQ7CisJCQkvKiBNYXJrIGl0IGFzIGZyZWUuICovCisJCQlub2RlLT5oYW5kbGVyID0gTlVMTDsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJpbnRrICgiJXM6IHRyaWVkIHRvIHJlbW92ZSBpbnZhbGlkIGlycVxuIiwgX19GVU5DVElPTl9fKTsKK30KKworLyoKKyAqIENhbGwgYWxsIHRoZSBoYW5kbGVycyBmb3IgYSBnaXZlbiBpbnRlcnJ1cHQuIEZhc3QgaGFuZGxlcnMgYXJlIGNhbGxlZAorICogZmlyc3QgZm9sbG93ZWQgYnkgc2xvdyBoYW5kbGVycy4KKyAqCisgKiBUaGlzIGNvZGUgdGFrZW4gZnJvbSB0aGUgb3JpZ2luYWwgQW1pZ2EgY29kZSB3cml0dGVuIGJ5IFJvbWFuIFppcHBlbC4KKyAqLworCit2b2lkIG1hY19kb19pcnFfbGlzdChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaXJxX25vZGVfdCAqbm9kZSwgKnNsb3dfbm9kZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWtzdGF0X2NwdSgwKS5pcnFzW2lycV0rKzsKKworI2lmZGVmIERFQlVHX1NQVVJJT1VTCisJaWYgKCFtYWNfaXJxX2xpc3RbaXJxXSAmJiAoY29uc29sZV9sb2dsZXZlbCA+IDcpKSB7CisJCXByaW50aygibWFjX2RvX2lycV9saXN0OiBzcHVyaW91cyBpbnRlcnJ1cHQgJWQhXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwkvKiBzZXJ2ZSBmaXJzdCBmYXN0IGFuZCBub3JtYWwgaGFuZGxlcnMgKi8KKwlmb3IgKG5vZGUgPSBtYWNfaXJxX2xpc3RbaXJxXTsKKwkgICAgIG5vZGUgJiYgKCEobm9kZS0+ZmxhZ3MgJiBJUlFfRkxHX1NMT1cpKTsKKwkgICAgIG5vZGUgPSBub2RlLT5uZXh0KQorCQlub2RlLT5oYW5kbGVyKGlycSwgbm9kZS0+ZGV2X2lkLCBmcCk7CisJaWYgKCFub2RlKSByZXR1cm47CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoKGZsYWdzICYgfjB4MDcwMCkgfCAoZnAtPnNyICYgMHgwNzAwKSk7CisJLyogaWYgc2xvdyBoYW5kbGVycyBleGlzdHMsIHNlcnZlIHRoZW0gbm93ICovCisJc2xvd19ub2RlcyA9IG5vZGU7CisJZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7CisJCW5vZGUtPmhhbmRsZXIoaXJxLCBub2RlLT5kZXZfaWQsIGZwKTsKKwl9Cit9CisKKy8qCisgKiAgbWFjX2VuYWJsZV9pcnEgLSBlbmFibGUgYW4gaW50ZXJydXB0IHNvdXJjZQorICogbWFjX2Rpc2FibGVfaXJxIC0gZGlzYWJsZSBhbiBpbnRlcnJ1cHQgc291cmNlCisgKiAgIG1hY19jbGVhcl9pcnEgLSBjbGVhcnMgYSBwZW5kaW5nIGludGVycnVwdAorICogbWFjX3BlbmRpbmdfaXJxIC0gUmV0dXJucyB0aGUgcGVuZGluZyBzdGF0dXMgb2YgYW4gSVJRIChub256ZXJvID0gcGVuZGluZykKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUganVzdCBkaXNwYXRjaGVycyB0byB0aGUgVklBL09TUy9QU0Mgcm91dGluZXMuCisgKi8KKwordm9pZCBtYWNfZW5hYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKworCXN3aXRjaChpcnFfc3JjKSB7CisJCWNhc2UgMTogdmlhX2lycV9lbmFibGUoaXJxKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgNzogaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9lbmFibGUoaXJxKTsKKwkJCX0gZWxzZSB7CisJCQkJdmlhX2lycV9lbmFibGUoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQljYXNlIDY6IGlmIChwc2NfcHJlc2VudCkgeworCQkJCXBzY19pcnFfZW5hYmxlKGlycSk7CisJCQl9IGVsc2UgaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9lbmFibGUoaXJxKTsKKwkJCX0gZWxzZSBpZiAoaXJxX3NyYyA9PSA0KSB7CisJCQkJc2NjX2lycV9lbmFibGUoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDg6IGlmIChiYWJvb25fcHJlc2VudCkgeworCQkJCWJhYm9vbl9pcnFfZW5hYmxlKGlycSk7CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbWFjX2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCisJc3dpdGNoKGlycV9zcmMpIHsKKwkJY2FzZSAxOiB2aWFfaXJxX2Rpc2FibGUoaXJxKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgNzogaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9kaXNhYmxlKGlycSk7CisJCQl9IGVsc2UgeworCQkJCXZpYV9pcnFfZGlzYWJsZShpcnEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCWNhc2UgNjogaWYgKHBzY19wcmVzZW50KSB7CisJCQkJcHNjX2lycV9kaXNhYmxlKGlycSk7CisJCQl9IGVsc2UgaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9kaXNhYmxlKGlycSk7CisJCQl9IGVsc2UgaWYgKGlycV9zcmMgPT0gNCkgeworCQkJCXNjY19pcnFfZGlzYWJsZShpcnEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgODogaWYgKGJhYm9vbl9wcmVzZW50KSB7CisJCQkJYmFib29uX2lycV9kaXNhYmxlKGlycSk7CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbWFjX2NsZWFyX2lycSggdW5zaWduZWQgaW50IGlycSApCit7CisJc3dpdGNoKElSUV9TUkMoaXJxKSkgeworCQljYXNlIDE6IHZpYV9pcnFfY2xlYXIoaXJxKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgNzogaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9jbGVhcihpcnEpOworCQkJfSBlbHNlIHsKKwkJCQl2aWFfaXJxX2NsZWFyKGlycSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQljYXNlIDQ6CisJCWNhc2UgNToKKwkJY2FzZSA2OiBpZiAocHNjX3ByZXNlbnQpIHsKKwkJCQlwc2NfaXJxX2NsZWFyKGlycSk7CisJCQl9IGVsc2UgaWYgKG9zc19wcmVzZW50KSB7CisJCQkJb3NzX2lycV9jbGVhcihpcnEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgODogaWYgKGJhYm9vbl9wcmVzZW50KSB7CisJCQkJYmFib29uX2lycV9jbGVhcihpcnEpOworCQkJfQorCQkJYnJlYWs7CisJfQorfQorCitpbnQgbWFjX2lycV9wZW5kaW5nKCB1bnNpZ25lZCBpbnQgaXJxICkKK3sKKwlzd2l0Y2goSVJRX1NSQyhpcnEpKSB7CisJCWNhc2UgMTogcmV0dXJuIHZpYV9pcnFfcGVuZGluZyhpcnEpOworCQljYXNlIDI6CisJCWNhc2UgNzogaWYgKG9zc19wcmVzZW50KSB7CisJCQkJcmV0dXJuIG9zc19pcnFfcGVuZGluZyhpcnEpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gdmlhX2lycV9wZW5kaW5nKGlycSk7CisJCQl9CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCWNhc2UgNjogaWYgKHBzY19wcmVzZW50KSB7CisJCQkJcmV0dXJuIHBzY19pcnFfcGVuZGluZyhpcnEpOworCQkJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQkJCXJldHVybiBvc3NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGQgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhbiBpbnRlcnJ1cHQgc291cmNlLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogRklYTUU6IFlvdSBjYW4gcmVnaXN0ZXIgaW50ZXJydXB0cyBvbiBub25leGlzdGVudCBzb3VyY2UgKGllIFBTQzQgb24gYQorICogICAgICAgIG5vbi1QU0MgbWFjaGluZSkuIFdlIHNob3VsZCByZXR1cm4gLUVJTlZBTCBpbiB0aG9zZSBjYXNlcy4KKyAqLworCitpbnQgbWFjX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlpcnFfbm9kZV90ICpub2RlOworCisjaWZkZWYgREVCVUdfTUFDSU5UUworCXByaW50ayAoIiVzOiBpcnEgJWQgcmVxdWVzdGVkIGZvciAlc1xuIiwgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworI2VuZGlmCisKKwlpZiAoaXJxIDwgVklBMV9TT1VSQ0VfQkFTRSkgeworCQlyZXR1cm4gY3B1X3JlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CisJfQorCisJaWYgKGlycSA+PSBOVU1fTUFDX1NPVVJDRVMpIHsKKwkJcHJpbnRrICgiJXM6IHVua25vd24gaXJxICVkIHJlcXVlc3RlZCBieSAlc1xuIiwKKwkJICAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJfQorCisJLyogR2V0IGEgbm9kZSBhbmQgc3RpY2sgaXQgb250byB0aGUgcmlnaHQgbGlzdCAqLworCisJaWYgKCEobm9kZSA9IG5ld19pcnFfbm9kZSgpKSkgcmV0dXJuIC1FTk9NRU07CisKKwlub2RlLT5oYW5kbGVyCT0gaGFuZGxlcjsKKwlub2RlLT5mbGFncwk9IGZsYWdzOworCW5vZGUtPmRldl9pZAk9IGRldl9pZDsKKwlub2RlLT5kZXZuYW1lCT0gZGV2bmFtZTsKKwlub2RlLT5uZXh0CT0gTlVMTDsKKwltYWNfaW5zZXJ0X2lycSgmbWFjX2lycV9saXN0W2lycV0sIG5vZGUpOworCisJLyogTm93IGVuYWJsZSB0aGUgSVJRIHNvdXJjZSAqLworCisJbWFjX2VuYWJsZV9pcnEoaXJxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlcyBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZyb20gYW4gaW50ZXJydXB0IHNvdXJjZS4KKyAqLworCit2b2lkIG1hY19mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisjaWZkZWYgREVCVUdfTUFDSU5UUworCXByaW50ayAoIiVzOiBpcnEgJWQgZnJlZWQgYnkgJXBcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZfaWQpOworI2VuZGlmCisKKwlpZiAoaXJxIDwgVklBMV9TT1VSQ0VfQkFTRSkgeworCQljcHVfZnJlZV9pcnEoaXJxLCBkZXZfaWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBOVU1fTUFDX1NPVVJDRVMpIHsKKwkJcHJpbnRrICgiJXM6IHVua25vd24gaXJxICVkIGZyZWVkXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCW1hY19kZWxldGVfaXJxKCZtYWNfaXJxX2xpc3RbaXJxXSwgZGV2X2lkKTsKKworCS8qIElmIHRoZSBsaXN0IGZvciB0aGlzIGludGVycnVwdCBpcyAqLworCS8qIGVtcHR5IHRoZW4gZGlzYWJsZSB0aGUgc291cmNlLiAgICAqLworCisJaWYgKCFtYWNfaXJxX2xpc3RbaXJxXSkgeworCQltYWNfZGlzYWJsZV9pcnEoaXJxKTsKKwl9Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIHByZXR0eSBsaXN0aW5nIGZvciAvcHJvYy9pbnRlcnJ1cHRzCisgKgorICogQnkgdGhlIHRpbWUgd2UncmUgY2FsbGVkIHRoZSBhdXRvdmVjdG9yIGludGVycnVwdCBsaXN0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGdlbmVyYXRlZCwgc28gd2UganVzdCBuZWVkIHRvIGRvIHRoZSBtYWNoc3BlYyBpbnRlcnJ1cHRzLgorICoKKyAqIDk5MDUwNiAoam10KSAtIHJld3JpdHRlbiB0byBoYW5kbGUgY2hhaW5lZCBtYWNoc3BlYyBpbnRlcnJ1cHQgaGFuZGxlcnMuCisgKiAgICAgICAgICAgICAgICBBbHNvIHJlbW92ZWQgZGlzcGxheSBvZiBudW1fc3B1cmlvdXMgaXQgaXMgYWxyZWFkeQorICoJCSAgZGlzcGxheWVkIGZvciB1cyBhcyBhdXRvdmVjdG9yIGlycSAwLgorICovCisKK2ludCBzaG93X21hY19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKwlpcnFfbm9kZV90ICpub2RlOworCWNoYXIgKmJhc2U7CisKKwkvKiBEb24ndCBkbyBOdWJ1cyBpbnRlcnJ1cHRzIGluIHRoaXMgbG9vcDsgd2UgZG8gdGhlbSBzZXBhcmF0ZWx5ICAqLworCS8qIGJlbG93IHNvIHRoYXQgd2UgY2FuIHByaW50IHNsb3QgbnVtYmVycyBpbnN0ZWFkIG9mIElSUSBudW1iZXJzICovCisKKwlmb3IgKGkgPSBWSUExX1NPVVJDRV9CQVNFIDsgaSA8IE5VTV9NQUNfU09VUkNFUyA7ICsraSkgeworCisJCS8qIE5vbmV4aXN0YW50IGludGVycnVwdCBvciBub3RoaW5nIHJlZ2lzdGVyZWQ7IHNraXAgaXQuICovCisKKwkJaWYgKChub2RlID0gbWFjX2lycV9saXN0W2ldKSA9PSBOVUxMKSBjb250aW51ZTsKKwkJaWYgKG5vZGUtPmZsYWdzICYgSVJRX0ZMR19TVEQpIGNvbnRpbnVlOworCisJCWJhc2UgPSAiIjsKKwkJc3dpdGNoKElSUV9TUkMoaSkpIHsKKwkJCWNhc2UgMTogYmFzZSA9ICJ2aWExIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogaWYgKG9zc19wcmVzZW50KSB7CisJCQkJCWJhc2UgPSAib3NzIjsKKwkJCQl9IGVsc2UgeworCQkJCQliYXNlID0gInZpYTIiOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCWNhc2UgNDoKKwkJCWNhc2UgNToKKwkJCWNhc2UgNjogaWYgKHBzY19wcmVzZW50KSB7CisJCQkJCWJhc2UgPSAicHNjIjsKKwkJCQl9IGVsc2UgaWYgKG9zc19wcmVzZW50KSB7CisJCQkJCWJhc2UgPSAib3NzIjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoSVJRX1NSQyhpKSA9PSA0KSBiYXNlID0gInNjYyI7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSA3OiBiYXNlID0gIm5idXMiOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiBiYXNlID0gImJibiI7CisJCQkJYnJlYWs7CisJCX0KKwkJc2VxX3ByaW50ZihwLCAiJTRzICUyZDogJTEwdSAiLCBiYXNlLCBpLCBrc3RhdF9jcHUoMCkuaXJxc1tpXSk7CisKKwkJZG8geworCQkJaWYgKG5vZGUtPmZsYWdzICYgSVJRX0ZMR19GQVNUKSB7CisJCQkJc2VxX3B1dHMocCwgIkYgIik7CisJCQl9IGVsc2UgaWYgKG5vZGUtPmZsYWdzICYgSVJRX0ZMR19TTE9XKSB7CisJCQkJc2VxX3B1dHMocCwgIlMgIik7CisJCQl9IGVsc2UgeworCQkJCXNlcV9wdXRzKHAsICIgICIpOworCQkJfQorCQkJc2VxX3ByaW50ZihwLCAiJXNcbiIsIG5vZGUtPmRldm5hbWUpOworCQkJaWYgKChub2RlID0gbm9kZS0+bmV4dCkpIHsKKwkJCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAgICAgICAgICAiKTsKKwkJCX0KKwkJfSB3aGlsZShub2RlKTsKKworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBtYWNfZGVmYXVsdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgREVCVUdfU1BVUklPVVMKKwlwcmludGsoIlVuZXhwZWN0ZWQgSVJRICVkIG9uIGRldmljZSAlcFxuIiwgaXJxLCBkZXZfaWQpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgbnVtX2RlYnVnWzhdOworCitpcnFyZXR1cm5fdCBtYWNfZGVidWdfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChudW1fZGVidWdbaXJxXSA8IDEwKSB7CisJCXByaW50aygiREVCVUc6IFVuZXhwZWN0ZWQgSVJRICVkXG4iLCBpcnEpOworCQludW1fZGVidWdbaXJxXSsrOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaW5fbm1pOworc3RhdGljIHZvbGF0aWxlIGludCBubWlfaG9sZDsKKworaXJxcmV0dXJuX3QgbWFjX25taV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWludCBpOworCS8qCisJICogZ2VuZXJhdGUgZGVidWcgb3V0cHV0IG9uIE5NSSBzd2l0Y2ggaWYgJ2RlYnVnJyBrZXJuZWwgb3B0aW9uIGdpdmVuCisJICogKG9ubHkgd29ya3Mgd2l0aCBQZW5ndWluISkKKwkgKi8KKworCWluX25taSsrOworCWZvciAoaT0wOyBpPDEwMDsgaSsrKQorCQl1ZGVsYXkoMTAwMCk7CisKKwlpZiAoaW5fbm1pID09IDEpIHsKKwkJbm1pX2hvbGQgPSAxOworCQlwcmludGsoIi4uLiBwYXVzaW5nLCBwcmVzcyBOTUkgdG8gcmVzdW1lIC4uLiIpOworCX0gZWxzZSB7CisJCXByaW50aygiIG9rIVxuIik7CisJCW5taV9ob2xkID0gMDsKKwl9CisKKwliYXJyaWVyKCk7CisKKwl3aGlsZSAobm1pX2hvbGQgPT0gMSkKKwkJdWRlbGF5KDEwMDApOworCisJaWYgKCBjb25zb2xlX2xvZ2xldmVsID49IDggKSB7CisjaWYgMAorCQlzaG93X3N0YXRlKCk7CisJCXByaW50aygiUEM6ICUwOGx4XG5TUjogJTA0eCAgU1A6ICVwXG4iLCBmcC0+cGMsIGZwLT5zciwgZnApOworCQlwcmludGsoImQwOiAlMDhseCAgICBkMTogJTA4bHggICAgZDI6ICUwOGx4ICAgIGQzOiAlMDhseFxuIiwKKwkJICAgICAgIGZwLT5kMCwgZnAtPmQxLCBmcC0+ZDIsIGZwLT5kMyk7CisJCXByaW50aygiZDQ6ICUwOGx4ICAgIGQ1OiAlMDhseCAgICBhMDogJTA4bHggICAgYTE6ICUwOGx4XG4iLAorCQkgICAgICAgZnAtPmQ0LCBmcC0+ZDUsIGZwLT5hMCwgZnAtPmExKTsKKworCQlpZiAoU1RBQ0tfTUFHSUMgIT0gKih1bnNpZ25lZCBsb25nICopY3VycmVudC0+a2VybmVsX3N0YWNrX3BhZ2UpCisJCQlwcmludGsoIkNvcnJ1cHRlZCBzdGFjayBwYWdlXG4iKTsKKwkJcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCBzdGFja3BhZ2U9JTA4bHgpXG4iLAorCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5rZXJuZWxfc3RhY2tfcGFnZSk7CisJCWlmIChpbnRyX2NvdW50ID09IDEpCisJCQlkdW1wX3N0YWNrKChzdHJ1Y3QgZnJhbWUgKilmcCk7CisjZWxzZQorCQkvKiBwcmludGsoIk5NSSAiKTsgKi8KKyNlbmRpZgorCX0KKwlpbl9ubWktLTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTaW1wbGUgcm91dGluZXMgZm9yIG1hc2tpbmcgYW5kIHVubWFza2luZworICogU0NDIGludGVycnVwdHMgaW4gY2FzZXMgd2hlcmUgdGhpcyBjYW4ndCBiZQorICogZG9uZSBpbiBoYXJkd2FyZSAob25seSB0aGUgUFNDIGNhbiBkbyB0aGF0LikKKyAqLworCitzdGF0aWMgdm9pZCBzY2NfaXJxX2VuYWJsZShpbnQgaXJxKSB7CisJaW50IGlycV9pZHggICAgID0gSVJRX0lEWChpcnEpOworCisJc2NjX21hc2sgfD0gKDEgPDwgaXJxX2lkeCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjY19pcnFfZGlzYWJsZShpbnQgaXJxKSB7CisJaW50IGlycV9pZHggICAgID0gSVJRX0lEWChpcnEpOworCisJc2NjX21hc2sgJj0gfigxIDw8IGlycV9pZHgpOworfQorCisvKgorICogU0NDIG1hc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gV2UgaGF2ZSB0byBkbyBhIGJpdCBvZiBtYWdpYyBoZXJlCisgKiB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbm5lbCBnYXZlIHVzIHRoZSBpbnRlcnJ1cHQ7IHB1dHRpbmcgdGhpcworICogaGVyZSBpcyBjbGVhbmVyIHRoYW4gaGFja2luZyBpdCBpbnRvIGRyaXZlcnMvY2hhci9tYWNzZXJpYWwuYy4KKyAqLworCit2b2lkIG1hY19zY2NfZGlzcGF0Y2goaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpzY2MgPSAodW5zaWduZWQgY2hhciAqKSBtYWNfYmlfZGF0YS5zY2NiYXNlICsgMjsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogUmVhZCBSUjMgZnJvbSB0aGUgY2hpcC4gQWx3YXlzIGRvIHRoaXMgb24gY2hhbm5lbCBBICovCisJLyogVGhpcyBtdXN0IGJlIGFuIGF0b21pYyBvcGVyYXRpb24gc28gZGlzYWJsZSBpcnFzLiAgICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKnNjYyA9IDM7CisJcmVnID0gKnNjYzsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKiBOb3cgZGlzcGF0Y2guIEJpdHMgMC0yIGFyZSBmb3IgY2hhbm5lbCBCIGFuZCAqLworCS8qIGJpdHMgMy01IGFyZSBmb3IgY2hhbm5lbCBBLiBXZSBjYW4gc2FmZWx5ICAgICovCisJLyogaWdub3JlIHRoZSByZW1haW5pbmcgYml0cyBoZXJlLiAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIE5vdGUgdGhhdCB3ZSdyZSBpZ25vcmluZyBzY2NfbWFzayBmb3Igbm93LiAgICovCisJLyogSWYgd2UgYWN0dWFsbHkgbWFzayB0aGUgaW50cyB0aGVuIHdlIHRlbmQgdG8gKi8KKwkvKiBnZXQgaGFtbWVyZWQgYnkgdmVyeSBwZXJzaXN0ZW50IFNDQyBpcnFzLCAgICAqLworCS8qIGFuZCBzaW5jZSB0aGV5J3JlIGF1dG92ZWN0b3IgaW50ZXJydXB0cyB0aGV5ICovCisJLyogcHJldHR5IG11Y2gga2lsbCB0aGUgc3lzdGVtLiAgICAgICAgICAgICAgICAgKi8KKworCWlmIChyZWcgJiAweDM4KSBtYWNfZG9faXJxX2xpc3QoSVJRX1NDQ0EsIHJlZ3MpOworCWlmIChyZWcgJiAweDA3KSBtYWNfZG9faXJxX2xpc3QoSVJRX1NDQ0IsIHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9taXNjLmMgYi9hcmNoL202OGsvbWFjL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjgwZDdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9taXNjLmMKQEAgLTAsMCArMSw2NTEgQEAKKy8qCisgKiBNaXNjZWxsYW5lb3VzIE1hYzY4Sy1zcGVjaWZpYyBzdHVmZgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxsaW51eC9hZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CisjaW5jbHVkZSA8bGludXgvcG11Lmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgorCisjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisvKiBPZmZzZXQgYmV0d2VlbiBVbml4IHRpbWUgKDE5NzAtYmFzZWQpIGFuZCBNYWMgdGltZSAoMTkwNC1iYXNlZCkgKi8KKworI2RlZmluZSBSVENfT0ZGU0VUIDIwODI4NDQ4MDAKKworZXh0ZXJuIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEgbWFjX2JpX2RhdGE7CitzdGF0aWMgdm9pZCAoKnJvbV9yZXNldCkodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQURCCisvKgorICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTkwNC4KKyAqLworCitzdGF0aWMgbG9uZyBhZGJfcmVhZF90aW1lKHZvaWQpCit7CisJdm9sYXRpbGUgc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKKwlsb25nIHRpbWU7CisKKwlhZGJfcmVxdWVzdCgoc3RydWN0IGFkYl9yZXF1ZXN0ICopICZyZXEsIE5VTEwsCisJCQlBREJSRVFfUkFXfEFEQlJFUV9TWU5DLAorCQkJMiwgQ1VEQV9QQUNLRVQsIENVREFfR0VUX1RJTUUpOworCisJdGltZSA9IChyZXEucmVwbHlbM10gPDwgMjQpIHwgKHJlcS5yZXBseVs0XSA8PCAxNikKKwkJfCAocmVxLnJlcGx5WzVdIDw8IDgpIHwgcmVxLnJlcGx5WzZdOworCXJldHVybiB0aW1lIC0gUlRDX09GRlNFVDsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCBzeXN0ZW0gdGltZQorICovCisKK3N0YXRpYyB2b2lkIGFkYl93cml0ZV90aW1lKGxvbmcgZGF0YSkKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOworCisJZGF0YSArPSBSVENfT0ZGU0VUOworCisJYWRiX3JlcXVlc3QoKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSAmcmVxLCBOVUxMLAorCQkJQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTYsIENVREFfUEFDS0VULCBDVURBX1NFVF9USU1FLAorCQkJKGRhdGEgPj4gMjQpICYgMHhGRiwgKGRhdGEgPj4gMTYpICYgMHhGRiwKKwkJCShkYXRhID4+IDgpICYgMHhGRiwgZGF0YSAmIDB4RkYpOworfQorCisvKgorICogR2V0IGEgYnl0ZSBmcm9tIHRoZSBOVlJBTQorICovCisKK3N0YXRpYyBfX3U4IGFkYl9yZWFkX3ByYW0oaW50IG9mZnNldCkKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOworCisJYWRiX3JlcXVlc3QoKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSAmcmVxLCBOVUxMLAorCQkJQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTQsIENVREFfUEFDS0VULCBDVURBX0dFVF9QUkFNLAorCQkJKG9mZnNldCA+PiA4KSAmIDB4RkYsIG9mZnNldCAmIDB4RkYpOworCXJldHVybiByZXEucmVwbHlbM107Cit9CisKKy8qCisgKiBXcml0ZSBhIGJ5dGUgdG8gdGhlIE5WUkFNCisgKi8KKworc3RhdGljIHZvaWQgYWRiX3dyaXRlX3ByYW0oaW50IG9mZnNldCwgX191OCBkYXRhKQoreworCXZvbGF0aWxlIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisKKwlhZGJfcmVxdWVzdCgoc3RydWN0IGFkYl9yZXF1ZXN0ICopICZyZXEsIE5VTEwsCisJCQlBREJSRVFfUkFXfEFEQlJFUV9TWU5DLAorCQkJNSwgQ1VEQV9QQUNLRVQsIENVREFfU0VUX1BSQU0sCisJCQkob2Zmc2V0ID4+IDgpICYgMHhGRiwgb2Zmc2V0ICYgMHhGRiwKKwkJCWRhdGEpOworfQorI2VuZGlmIC8qIENPTkZJR19BREIgKi8KKworLyoKKyAqIFZJQSBQUkFNL1JUQyBhY2Nlc3Mgcm91dGluZXMKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kCisgKiB0aGUgUlRDIHNob3VsZCBiZSBlbmFibGVkLgorICovCisKK3N0YXRpYyBfX3U4IHZpYV9wcmFtX3JlYWRieXRlKHZvaWQpCit7CisJaW50CWkscmVnOworCV9fdTgJZGF0YTsKKworCXJlZyA9IHZpYTFbdkJ1ZkJdICYgflZJQTFCX3ZSVENDbGs7CisKKwkvKiBTZXQgdGhlIFJUQyBkYXRhIGxpbmUgdG8gYmUgYW4gaW5wdXQuICovCisKKwl2aWExW3ZEaXJCXSAmPSB+VklBMUJfdlJUQ0RhdGE7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgYnl0ZSBjb21lIG91dCBpbiBNU0Igb3JkZXIgKi8KKworCWRhdGEgPSAwOworCWZvciAoaSA9IDAgOyBpIDwgOCA7IGkrKykgeworCQl2aWExW3ZCdWZCXSA9IHJlZzsKKwkJdmlhMVt2QnVmQl0gPSByZWcgfCBWSUExQl92UlRDQ2xrOworCQlkYXRhID0gKGRhdGEgPDwgMSkgfCAodmlhMVt2QnVmQl0gJiBWSUExQl92UlRDRGF0YSk7CisJfQorCisJLyogUmV0dXJuIFJUQyBkYXRhIGxpbmUgdG8gb3V0cHV0IHN0YXRlICovCisKKwl2aWExW3ZEaXJCXSB8PSBWSUExQl92UlRDRGF0YTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCB2aWFfcHJhbV93cml0ZWJ5dGUoX191OCBkYXRhKQoreworCWludAlpLHJlZyxiaXQ7CisKKwlyZWcgPSB2aWExW3ZCdWZCXSAmIH4oVklBMUJfdlJUQ0NsayB8IFZJQTFCX3ZSVENEYXRhKTsKKworCS8qIFRoZSBiaXRzIG9mIHRoZSBieXRlIGdvIGluIGluIE1TQiBvcmRlciAqLworCisJZm9yIChpID0gMCA7IGkgPCA4IDsgaSsrKSB7CisJCWJpdCA9IGRhdGEgJiAweDgwPyAxIDogMDsKKwkJZGF0YSA8PD0gMTsKKwkJdmlhMVt2QnVmQl0gPSByZWcgfCBiaXQ7CisJCXZpYTFbdkJ1ZkJdID0gcmVnIHwgYml0IHwgVklBMUJfdlJUQ0NsazsKKwl9Cit9CisKKy8qCisgKiBFeGVjdXRlIGEgVklBIFBSQU0vUlRDIGNvbW1hbmQuIEZvciByZWFkIGNvbW1hbmRzCisgKiBkYXRhIHNob3VsZCBwb2ludCB0byBhIG9uZS1ieXRlIGJ1ZmZlciBmb3IgdGhlCisgKiByZXN1bHRpbmcgZGF0YS4gRm9yIHdyaXRlIGNvbW1hbmRzIGl0IHNob3VsZCBwb2ludAorICogdG8gdGhlIGRhdGEgYnl0ZSB0byBmb3IgdGhlIGNvbW1hbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBhbGwgaW50ZXJydXB0cyB3aGlsZSBydW5uaW5nLgorICovCisKK3N0YXRpYyB2b2lkIHZpYV9wcmFtX2NvbW1hbmQoaW50IGNvbW1hbmQsIF9fdTggKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQJaXNfcmVhZDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIEVuYWJsZSB0aGUgUlRDIGFuZCBtYWtlIHN1cmUgdGhlIHN0cm9iZSBsaW5lIGlzIGhpZ2ggKi8KKworCXZpYTFbdkJ1ZkJdID0gKHZpYTFbdkJ1ZkJdIHwgVklBMUJfdlJUQ0NsaykgJiB+VklBMUJfdlJUQ0VuYjsKKworCWlmIChjb21tYW5kICYgMHhGRjAwKSB7CQkvKiBleHRlbmRlZCAodHdvLWJ5dGUpIGNvbW1hbmQgKi8KKwkJdmlhX3ByYW1fd3JpdGVieXRlKChjb21tYW5kICYgMHhGRjAwKSA+PiA4KTsKKwkJdmlhX3ByYW1fd3JpdGVieXRlKGNvbW1hbmQgJiAweEZGKTsKKwkJaXNfcmVhZCA9IGNvbW1hbmQgJiAweDgwMDA7CisJfSBlbHNlIHsJCQkvKiBvbmUtYnl0ZSBjb21tYW5kICovCisJCXZpYV9wcmFtX3dyaXRlYnl0ZShjb21tYW5kKTsKKwkJaXNfcmVhZCA9IGNvbW1hbmQgJiAweDgwOworCX0KKwlpZiAoaXNfcmVhZCkgeworCQkqZGF0YSA9IHZpYV9wcmFtX3JlYWRieXRlKCk7CisJfSBlbHNlIHsKKwkJdmlhX3ByYW1fd3JpdGVieXRlKCpkYXRhKTsKKwl9CisKKwkvKiBBbGwgZG9uZSwgZGlzYWJsZSB0aGUgUlRDICovCisKKwl2aWExW3ZCdWZCXSB8PSBWSUExQl92UlRDRW5iOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgX191OCB2aWFfcmVhZF9wcmFtKGludCBvZmZzZXQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV93cml0ZV9wcmFtKGludCBvZmZzZXQsIF9fdTggZGF0YSkKK3sKK30KKworLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTA0LgorICoKKyAqIFRoaXMgb25seSB3b3JrcyBvbiBtYWNoaW5lcyB3aXRoIHRoZSBWSUEtYmFzZWQgUFJBTS9SVEMsIHdoaWNoCisgKiBpcyBiYXNpY2FsbHkgYW55IG1hY2hpbmUgd2l0aCBNYWMgSUktc3R5bGUgQURCLgorICovCisKK3N0YXRpYyBsb25nIHZpYV9yZWFkX3RpbWUodm9pZCkKK3sKKwl1bmlvbiB7CisJCV9fdTggIGNkYXRhWzRdOworCQlsb25nICBpZGF0YTsKKwl9IHJlc3VsdCwgbGFzdF9yZXN1bHQ7CisJaW50CWN0OworCisJLyoKKwkgKiBUaGUgTmV0QlNEIGd1eXMgc2F5IHRvIGxvb3AgdW50aWwgeW91IGdldCB0aGUgc2FtZSByZWFkaW5nCisJICogdHdpY2UgaW4gYSByb3cuCisJICovCisKKwljdCA9IDA7CisJZG8geworCQlpZiAoKytjdCA+IDEwKSB7CisJCQlwcmludGsoInZpYV9yZWFkX3RpbWU6IGNvdWxkbid0IGdldCB2YWxpZCB0aW1lLCAiCisJCQkgICAgICAgImxhc3QgcmVhZCA9IDB4JTA4bHggYW5kIDB4JTA4bHhcbiIsCisJCQkgICAgICAgbGFzdF9yZXN1bHQuaWRhdGEsIHJlc3VsdC5pZGF0YSk7CisJCQlicmVhazsKKwkJfQorCisJCWxhc3RfcmVzdWx0LmlkYXRhID0gcmVzdWx0LmlkYXRhOworCQlyZXN1bHQuaWRhdGEgPSAwOworCisJCXZpYV9wcmFtX2NvbW1hbmQoMHg4MSwgJnJlc3VsdC5jZGF0YVszXSk7CisJCXZpYV9wcmFtX2NvbW1hbmQoMHg4NSwgJnJlc3VsdC5jZGF0YVsyXSk7CisJCXZpYV9wcmFtX2NvbW1hbmQoMHg4OSwgJnJlc3VsdC5jZGF0YVsxXSk7CisJCXZpYV9wcmFtX2NvbW1hbmQoMHg4RCwgJnJlc3VsdC5jZGF0YVswXSk7CisJfSB3aGlsZSAocmVzdWx0LmlkYXRhICE9IGxhc3RfcmVzdWx0LmlkYXRhKTsKKworCXJldHVybiByZXN1bHQuaWRhdGEgLSBSVENfT0ZGU0VUOworfQorCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRpbWUgdG8gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5MDQuCisgKgorICogVGhpcyBvbmx5IHdvcmtzIG9uIG1hY2hpbmVzIHdpdGggdGhlIFZJQS1iYXNlZCBQUkFNL1JUQywgd2hpY2gKKyAqIGlzIGJhc2ljYWxseSBhbnkgbWFjaGluZSB3aXRoIE1hYyBJSS1zdHlsZSBBREIuCisgKi8KKworc3RhdGljIHZvaWQgdmlhX3dyaXRlX3RpbWUobG9uZyB0aW1lKQoreworCXVuaW9uIHsKKwkJX191OCAgY2RhdGFbNF07CisJCWxvbmcgIGlkYXRhOworCX0gZGF0YTsKKwlfX3U4CXRlbXA7CisKKwkvKiBDbGVhciB0aGUgd3JpdGUgcHJvdGVjdCBiaXQgKi8KKworCXRlbXAgPSAweDU1OworCXZpYV9wcmFtX2NvbW1hbmQoMHgzNSwgJnRlbXApOworCisJZGF0YS5pZGF0YSA9IHRpbWUgKyBSVENfT0ZGU0VUOworCXZpYV9wcmFtX2NvbW1hbmQoMHgwMSwgJmRhdGEuY2RhdGFbM10pOworCXZpYV9wcmFtX2NvbW1hbmQoMHgwNSwgJmRhdGEuY2RhdGFbMl0pOworCXZpYV9wcmFtX2NvbW1hbmQoMHgwOSwgJmRhdGEuY2RhdGFbMV0pOworCXZpYV9wcmFtX2NvbW1hbmQoMHgwRCwgJmRhdGEuY2RhdGFbMF0pOworCisJLyogU2V0IHRoZSB3cml0ZSBwcm90ZWN0IGJpdCAqLworCisJdGVtcCA9IDB4RDU7CisJdmlhX3ByYW1fY29tbWFuZCgweDM1LCAmdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9zaHV0ZG93bih2b2lkKQoreworCWlmIChyYnZfcHJlc2VudCkgeworCQl2aWEyW3JCdWZCXSAmPSB+MHgwNDsKKwl9IGVsc2UgeworCQkvKiBEaXJlY3Rpb24gb2YgdkRpckIgaXMgb3V0cHV0ICovCisJCXZpYTJbdkRpckJdIHw9IDB4MDQ7CisJCS8qIFNlbmQgYSB2YWx1ZSBvZiAwIG9uIHRoYXQgbGluZSAqLworCQl2aWEyW3ZCdWZCXSAmPSB+MHgwNDsKKwkJbWRlbGF5KDEwMDApOworCX0KK30KKworLyoKKyAqIEZJWE1FOiBub3Qgc3VyZSBob3cgdGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrIGV4YWN0bHkuLi4KKyAqLworCitzdGF0aWMgdm9pZCBvc3Nfc2h1dGRvd24odm9pZCkKK3sKKwlvc3MtPnJvbV9jdHJsID0gT1NTX1BPV0VST0ZGOworfQorCisjaWZkZWYgQ09ORklHX0FEQl9DVURBCisKK3N0YXRpYyB2b2lkIGN1ZGFfcmVzdGFydCh2b2lkKQoreworCWFkYl9yZXF1ZXN0KE5VTEwsIE5VTEwsIEFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQkyLCBDVURBX1BBQ0tFVCwgQ1VEQV9SRVNFVF9TWVNURU0pOworfQorCitzdGF0aWMgdm9pZCBjdWRhX3NodXRkb3duKHZvaWQpCit7CisJYWRiX3JlcXVlc3QoTlVMTCwgTlVMTCwgQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTIsIENVREFfUEFDS0VULCBDVURBX1BPV0VSRE9XTik7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KKworI2lmZGVmIENPTkZJR19BREJfUE1VCisKK3ZvaWQgcG11X3Jlc3RhcnQodm9pZCkKK3sKKwlhZGJfcmVxdWVzdChOVUxMLCBOVUxMLCBBREJSRVFfUkFXfEFEQlJFUV9TWU5DLAorCQkJMywgUE1VX1BBQ0tFVCwgUE1VX1NFVF9JTlRSX01BU0ssCisJCQlQTVVfSU5UX0FEQnxQTVVfSU5UX1RJQ0spOworCisJYWRiX3JlcXVlc3QoTlVMTCwgTlVMTCwgQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTIsIFBNVV9QQUNLRVQsIFBNVV9SRVNFVCk7Cit9CisKK3ZvaWQgcG11X3NodXRkb3duKHZvaWQpCit7CisJYWRiX3JlcXVlc3QoTlVMTCwgTlVMTCwgQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTMsIFBNVV9QQUNLRVQsIFBNVV9TRVRfSU5UUl9NQVNLLAorCQkJUE1VX0lOVF9BREJ8UE1VX0lOVF9USUNLKTsKKworCWFkYl9yZXF1ZXN0KE5VTEwsIE5VTEwsIEFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQk2LCBQTVVfUEFDS0VULCBQTVVfU0hVVERPV04sCisJCQknTScsICdBJywgJ1QnLCAnVCcpOworfQorCisjZW5kaWYgLyogQ09ORklHX0FEQl9QTVUgKi8KKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQmVsb3cgdGhpcyBwb2ludCBhcmUgdGhlIGdlbmVyaWMgcm91dGluZXM7IHRoZXknbGwgZGlzcGF0Y2ggdG8gdGhlCisgKiBjb3JyZWN0IHJvdXRpbmUgZm9yIHRoZSBoYXJkd2FyZSBvbiB3aGljaCB3ZSdyZSBydW5uaW5nLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordm9pZCBtYWNfcHJhbV9yZWFkKGludCBvZmZzZXQsIF9fdTggKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlfX3U4ICgqZnVuYykoaW50KSA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSVNJIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIxIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIyIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfQ1VEQSkgeworI2lmZGVmIENPTkZJR19BREIKKwkJZnVuYyA9IGFkYl9yZWFkX3ByYW07CisjZWxzZQorCQlyZXR1cm47CisjZW5kaWYKKwl9IGVsc2UgeworCQlmdW5jID0gdmlhX3JlYWRfcHJhbTsKKwl9CisJZm9yIChpID0gMCA7IGkgPCBsZW4gOyBpKyspIHsKKwkJYnVmZmVyW2ldID0gKCpmdW5jKShvZmZzZXQrKyk7CisJfQorfQorCit2b2lkIG1hY19wcmFtX3dyaXRlKGludCBvZmZzZXQsIF9fdTggKmJ1ZmZlciwgaW50IGxlbikKK3sKKwl2b2lkICgqZnVuYykoaW50LCBfX3U4KSA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSVNJIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIxIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIyIHx8CisJICAgIG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfQ1VEQSkgeworI2lmZGVmIENPTkZJR19BREIKKwkJZnVuYyA9IGFkYl93cml0ZV9wcmFtOworI2Vsc2UKKwkJcmV0dXJuOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZnVuYyA9IHZpYV93cml0ZV9wcmFtOworCX0KKwlmb3IgKGkgPSAwIDsgaSA8IGxlbiA7IGkrKykgeworCQkoKmZ1bmMpKG9mZnNldCsrLCBidWZmZXJbaV0pOworCX0KK30KKwordm9pZCBtYWNfcG93ZXJvZmYodm9pZCkKK3sKKwkvKgorCSAqIE1BQ19BREJfSUlTSSBtYXkgbmVlZCB0byBiZSBtb3ZlZCB1cCBoZXJlIGlmIGl0IGRvZXNuJ3QgYWN0dWFsbHkKKwkgKiB3b3JrIHVzaW5nIHRoZSBBREIgcGFja2V0IG1ldGhvZC4gIC0tRGF2aWQgS2lsemVyCisJICovCisKKwlpZiAob3NzX3ByZXNlbnQpIHsKKwkJb3NzX3NodXRkb3duKCk7CisJfSBlbHNlIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJKSB7CisJCXZpYV9zaHV0ZG93bigpOworI2lmZGVmIENPTkZJR19BREJfQ1VEQQorCX0gZWxzZSBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9DVURBKSB7CisJCWN1ZGFfc2h1dGRvd24oKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BREJfUE1VCisJfSBlbHNlIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMQorCQl8fCBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMikgeworCQlwbXVfc2h1dGRvd24oKTsKKyNlbmRpZgorCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcHJpbnRrKCJJdCBpcyBub3cgc2FmZSB0byB0dXJuIG9mZiB5b3VyIE1hY2ludG9zaC5cbiIpOworCXdoaWxlKDEpOworfQorCit2b2lkIG1hY19yZXNldCh2b2lkKQoreworCWlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJLyogbmVlZCBST01CQVNFIGluIGJvb3RlciAqLworCQkvKiBpbmRlZWQsIHBsdXMgbmVlZCB0byBNQVAgVEhFIFJPTSAhISAqLworCisJCWlmIChtYWNfYmlfZGF0YS5yb21iYXNlID09IDApCisJCQltYWNfYmlfZGF0YS5yb21iYXNlID0gMHg0MDgwMDAwMDsKKworCQkvKiB3b3JrcyBvbiBzb21lICovCisJCXJvbV9yZXNldCA9ICh2b2lkICopIChtYWNfYmlfZGF0YS5yb21iYXNlICsgMHhhKTsKKworCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1NFMzApIHsKKwkJCS8qCisJCQkgKiBNU2NoOiBNYWNoaW5lcyBrbm93biB0byBjcmFzaCBvbiBST00gcmVzZXQgLi4uCisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQkJcm9tX3Jlc2V0KCk7CisKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJfQorI2lmZGVmIENPTkZJR19BREJfQ1VEQQorCX0gZWxzZSBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9DVURBKSB7CisJCWN1ZGFfcmVzdGFydCgpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FEQl9QTVUKKwl9IGVsc2UgaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIxCisJCXx8IG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIyKSB7CisJCXBtdV9yZXN0YXJ0KCk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKENQVV9JU18wMzApIHsKKworCQkvKiAwMzAtc3BlY2lmaWMgcmVzZXQgcm91dGluZS4gIFRoZSBpZGVhIGlzIGdlbmVyYWwsIGJ1dCB0aGUKKwkJICogc3BlY2lmaWMgcmVnaXN0ZXJzIHRvIHJlc2V0IGFyZSAnMDMwLXNwZWNpZmljLiAgVW50aWwgSQorCQkgKiBoYXZlIGEgbm9uLTAzMCBtYWNoaW5lLCBJIGNhbid0IHRlc3QgYW55dGhpbmcgZWxzZS4KKwkJICogIC0tIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCQkgKi8KKworCQl1bnNpZ25lZCBsb25nIHJvbWJhc2UgPSAweDQwMDAwMDAwOworCisJCS8qIG1ha2UgYSAxLXRvLTEgbWFwcGluZywgdXNpbmcgdGhlIHRyYW5zcGFyZW50IHRyYW4uIHJlZy4gKi8KKwkJdW5zaWduZWQgbG9uZyB2aXJ0ID0gKHVuc2lnbmVkIGxvbmcpIG1hY19yZXNldDsKKwkJdW5zaWduZWQgbG9uZyBwaHlzID0gdmlydF90b19waHlzKG1hY19yZXNldCk7CisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcGh5cy12aXJ0OworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOyAvKiBsZXRzIG5vdCBzY3JldyB0aGlzIHVwLCBvaz8gKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDMwXG5cdCIKKwkJCQkgICAgICJwbW92ZSAlMCwlL3R0MFxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgOiA6ICJtIiAoKHBoeXMmMHhGRjAwMDAwMCl8MHg4Nzc3KSk7CisJCS8qIE5vdyBqdW1wIHRvIHBoeXNpY2FsIGFkZHJlc3Mgc28gd2UgY2FuIGRpc2FibGUgTU1VICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorICAgICAgICAgICAgICAgICAgICAiLmNoaXAgNjgwMzBcblx0IgorCQkgICAgImxlYSAlL3BjQCgxZiksJS9hMFxuXHQiCisJCSAgICAiYWRkbCAlMCwlL2EwXG5cdCIvKiBmaXh1cCB0YXJnZXQgYWRkcmVzcyBhbmQgc3RhY2sgcHRyICovCisJCSAgICAiYWRkbCAlMCwlL3NwXG5cdCIKKwkJICAgICJwZmx1c2hhXG5cdCIKKwkJICAgICJqbXAgJS9hMEBcblx0IiAvKiBqdW1wIGludG8gcGh5c2ljYWwgbWVtb3J5ICovCisJCSAgICAiMDoubG9uZyAwXG5cdCIgLyogYSBjb25zdGFudCB6ZXJvLiAqLworCQkgICAgLyogT0suICBOb3cgcmVzZXQgZXZlcnl0aGluZyBhbmQganVtcCB0byByZXNldCB2ZWN0b3IuICovCisJCSAgICAiMTpcblx0IgorCQkgICAgImxlYSAlL3BjQCgwYiksJS9hMFxuXHQiCisJCSAgICAicG1vdmUgJS9hMEAsICUvdGNcblx0IiAvKiBkaXNhYmxlIG1tdSAqLworCQkgICAgInBtb3ZlICUvYTBALCAlL3R0MFxuXHQiIC8qIGRpc2FibGUgdHQwICovCisJCSAgICAicG1vdmUgJS9hMEAsICUvdHQxXG5cdCIgLyogZGlzYWJsZSB0dDEgKi8KKwkJICAgICJtb3ZlbCAjMCwgJS9hMFxuXHQiCisJCSAgICAibW92ZWMgJS9hMCwgJS92YnJcblx0IiAvKiBjbGVhciB2ZWN0b3IgYmFzZSByZWdpc3RlciAqLworCQkgICAgIm1vdmVjICUvYTAsICUvY2FjclxuXHQiIC8qIGRpc2FibGUgY2FjaGVzICovCisJCSAgICAibW92ZWwgIzB4MDgwOCwlL2EwXG5cdCIKKwkJICAgICJtb3ZlYyAlL2EwLCAlL2NhY3Jcblx0IiAvKiBmbHVzaCBpJmQgY2FjaGVzICovCisJCSAgICAibW92ZXcgIzB4MjcwMCwlL3NyXG5cdCIgLyogc2V0IHVwIHN0YXR1cyByZWdpc3RlciAqLworCQkgICAgIm1vdmVsICUxQCgweDApLCUvYTBcblx0Ii8qIGxvYWQgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgKi8KKwkJICAgICJtb3ZlYyAlL2EwLCAlL2lzcFxuXHQiCisJCSAgICAibW92ZWwgJTFAKDB4NCksJS9hMFxuXHQiIC8qIGxvYWQgcmVzZXQgdmVjdG9yICovCisJCSAgICAicmVzZXRcblx0IiAvKiByZXNldCBleHRlcm5hbCBkZXZpY2VzICovCisJCSAgICAiam1wICUvYTBAXG5cdCIgLyoganVtcCB0byB0aGUgcmVzZXQgdmVjdG9yICovCisJCSAgICAiLmNoaXAgNjhrIgorCQkgICAgOiA6ICJyIiAob2Zmc2V0KSwgImEiIChyb21iYXNlKSA6ICJhMCIpOworCX0KKworCS8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlwcmludGsgKCJSZXN0YXJ0IGZhaWxlZC4gIFBsZWFzZSByZXN0YXJ0IG1hbnVhbGx5LlxuIik7CisJd2hpbGUoMSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgc2Vjb25kcyBzaW5jZSAxOTcwIGludG8gYSBwcm9wZXIgZGF0ZS4KKyAqCisgKiBBbGdvcml0aG0gY3JpYmJlZCBmcm9tIGdsaWJjMi4xLCBfX29mZnRpbWUoKS4KKyAqLworI2RlZmluZSBTRUNTX1BFUl9NSU5VVEUgKDYwKQorI2RlZmluZSBTRUNTX1BFUl9IT1VSICAoU0VDU19QRVJfTUlOVVRFICogNjApCisjZGVmaW5lIFNFQ1NfUEVSX0RBWSAgIChTRUNTX1BFUl9IT1VSICogMjQpCisKK3N0YXRpYyB2b2lkIHVubWt0aW1lKHVuc2lnbmVkIGxvbmcgdGltZSwgbG9uZyBvZmZzZXQsCisJCSAgICAgaW50ICp5ZWFycCwgaW50ICptb25wLCBpbnQgKmRheXAsCisJCSAgICAgaW50ICpob3VycCwgaW50ICptaW5wLCBpbnQgKnNlY3ApCit7CisgICAgICAgIC8qIEhvdyBtYW55IGRheXMgY29tZSBiZWZvcmUgZWFjaCBtb250aCAoMC0xMikuICAqLworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgX19tb25feWRheVsyXVsxM10gPQorCXsKKwkJLyogTm9ybWFsIHllYXJzLiAgKi8KKwkJeyAwLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNCwgMzY1IH0sCisJCS8qIExlYXAgeWVhcnMuICAqLworCQl7IDAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1LCAzNjYgfQorCX07CisJbG9uZyBpbnQgZGF5cywgcmVtLCB5LCB3ZGF5LCB5ZGF5OworCWNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqaXA7CisKKwlkYXlzID0gdGltZSAvIFNFQ1NfUEVSX0RBWTsKKwlyZW0gPSB0aW1lICUgU0VDU19QRVJfREFZOworCXJlbSArPSBvZmZzZXQ7CisJd2hpbGUgKHJlbSA8IDApIHsKKwkJcmVtICs9IFNFQ1NfUEVSX0RBWTsKKwkJLS1kYXlzOworCX0KKwl3aGlsZSAocmVtID49IFNFQ1NfUEVSX0RBWSkgeworCQlyZW0gLT0gU0VDU19QRVJfREFZOworCQkrK2RheXM7CisJfQorCSpob3VycCA9IHJlbSAvIFNFQ1NfUEVSX0hPVVI7CisJcmVtICU9IFNFQ1NfUEVSX0hPVVI7CisJKm1pbnAgPSByZW0gLyBTRUNTX1BFUl9NSU5VVEU7CisJKnNlY3AgPSByZW0gJSBTRUNTX1BFUl9NSU5VVEU7CisJLyogSmFudWFyeSAxLCAxOTcwIHdhcyBhIFRodXJzZGF5LiAqLworCXdkYXkgPSAoNCArIGRheXMpICUgNzsgLyogRGF5IGluIHRoZSB3ZWVrLiBOb3QgY3VycmVudGx5IHVzZWQgKi8KKwlpZiAod2RheSA8IDApIHdkYXkgKz0gNzsKKwl5ID0gMTk3MDsKKworI2RlZmluZSBESVYoYSwgYikgKChhKSAvIChiKSAtICgoYSkgJSAoYikgPCAwKSkKKyNkZWZpbmUgTEVBUFNfVEhSVV9FTkRfT0YoeSkgKERJViAoeSwgNCkgLSBESVYgKHksIDEwMCkgKyBESVYgKHksIDQwMCkpCisjZGVmaW5lIF9faXNsZWFwKHllYXIpCVwKKyAgKCh5ZWFyKSAlIDQgPT0gMCAmJiAoKHllYXIpICUgMTAwICE9IDAgfHwgKHllYXIpICUgNDAwID09IDApKQorCisJd2hpbGUgKGRheXMgPCAwIHx8IGRheXMgPj0gKF9faXNsZWFwICh5KSA/IDM2NiA6IDM2NSkpCisJeworCQkvKiBHdWVzcyBhIGNvcnJlY3RlZCB5ZWFyLCBhc3N1bWluZyAzNjUgZGF5cyBwZXIgeWVhci4gICovCisJCWxvbmcgaW50IHlnID0geSArIGRheXMgLyAzNjUgLSAoZGF5cyAlIDM2NSA8IDApOworCisJCS8qIEFkanVzdCBEQVlTIGFuZCBZIHRvIG1hdGNoIHRoZSBndWVzc2VkIHllYXIuICAqLworCQlkYXlzIC09ICgoeWcgLSB5KSAqIDM2NQorCQkJICsgTEVBUFNfVEhSVV9FTkRfT0YgKHlnIC0gMSkKKwkJCSAtIExFQVBTX1RIUlVfRU5EX09GICh5IC0gMSkpOworCQl5ID0geWc7CisJfQorCSp5ZWFycCA9IHkgLSAxOTAwOworCXlkYXkgPSBkYXlzOyAvKiBkYXkgaW4gdGhlIHllYXIuICBOb3QgY3VycmVudGx5IHVzZWQuICovCisJaXAgPSBfX21vbl95ZGF5W19faXNsZWFwKHkpXTsKKwlmb3IgKHkgPSAxMTsgZGF5cyA8IChsb25nIGludCkgaXBbeV07IC0teSkKKwkJY29udGludWU7CisJZGF5cyAtPSBpcFt5XTsKKwkqbW9ucCA9IHk7CisJKmRheXAgPSBkYXlzICsgMTsgLyogZGF5IGluIHRoZSBtb250aCAqLworCXJldHVybjsKK30KKworLyoKKyAqIFJlYWQvd3JpdGUgdGhlIGhhcmR3YXJlIGNsb2NrLgorICovCisKK2ludCBtYWNfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwlpZiAoIW9wKSB7IC8qIHJlYWQgKi8KKwkJaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfSUkpIHsKKwkJCW5vdyA9IHZpYV9yZWFkX3RpbWUoKTsKKwkJfSBlbHNlCisjaWZkZWYgQ09ORklHX0FEQgorCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfSUlTSSkgfHwKKwkJCSAgIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMSkgfHwKKwkJCSAgIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMikgfHwKKwkJCSAgIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0NVREEpKSB7CisJCQlub3cgPSBhZGJfcmVhZF90aW1lKCk7CisJCX0gZWxzZQorI2VuZGlmCisJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lPUCkgeworCQkJbm93ID0gdmlhX3JlYWRfdGltZSgpOworCQl9IGVsc2UgeworCQkJbm93ID0gMDsKKwkJfQorCisJCXQtPnRtX3dkYXkgPSAwOworCQl1bm1rdGltZShub3csIDAsCisJCQkgJnQtPnRtX3llYXIsICZ0LT50bV9tb24sICZ0LT50bV9tZGF5LAorCQkJICZ0LT50bV9ob3VyLCAmdC0+dG1fbWluLCAmdC0+dG1fc2VjKTsKKwkJcHJpbnRrKCJtYWNfaHdjbGs6IHJlYWQgJTA0ZC0lMDJkLSUtMmQgJTAyZDolMDJkOiUwMmRcbiIsCisJCQl0LT50bV95ZWFyICsgMTkwMCwgdC0+dG1fbW9uICsgMSwgdC0+dG1fbWRheSwgdC0+dG1faG91ciwgdC0+dG1fbWluLCB0LT50bV9zZWMpOworCX0gZWxzZSB7IC8qIHdyaXRlICovCisJCXByaW50aygibWFjX2h3Y2xrOiB0cmllZCB0byB3cml0ZSAlMDRkLSUwMmQtJS0yZCAlMDJkOiUwMmQ6JTAyZFxuIiwKKwkJCXQtPnRtX3llYXIgKyAxOTAwLCB0LT50bV9tb24gKyAxLCB0LT50bV9tZGF5LCB0LT50bV9ob3VyLCB0LT50bV9taW4sIHQtPnRtX3NlYyk7CisKKyNpZiAwCS8qIGl0IHRyYXNoZXMgbXkgcnRjICovCisJCW5vdyA9IG1rdGltZSh0LT50bV95ZWFyICsgMTkwMCwgdC0+dG1fbW9uICsgMSwgdC0+dG1fbWRheSwKKwkJCSAgICAgdC0+dG1faG91ciwgdC0+dG1fbWluLCB0LT50bV9zZWMpOworCisJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJKSB7CisJCQl2aWFfd3JpdGVfdGltZShub3cpOworCQl9IGVsc2UgaWYgKChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJU0kpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjEpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjIpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9DVURBKSkgeworCQkJYWRiX3dyaXRlX3RpbWUobm93KTsKKwkJfSBlbHNlIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lPUCkgeworCQkJdmlhX3dyaXRlX3RpbWUobm93KTsKKwkJfQorI2VuZGlmCisJfQorCXJldHVybiAwOworfQorCisvKgorICogU2V0IG1pbnV0ZXMvc2Vjb25kcyBpbiB0aGUgaGFyZHdhcmUgY2xvY2sKKyAqLworCitpbnQgbWFjX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJc3RydWN0IHJ0Y190aW1lIG5vdzsKKworCW1hY19od2NsaygwLCAmbm93KTsKKwlub3cudG1fc2VjID0gbm93dGltZSAlIDYwOworCW5vdy50bV9taW4gPSAobm93dGltZSAvIDYwKSAlIDYwOworCW1hY19od2NsaygxLCAmbm93KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9vc3MuYyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKglPU1MgaGFuZGxpbmcKKyAqCVdyaXR0ZW4gYnkgSm9zaHVhIE0uIFRob21wc29uIChmdW5haG9AanVyYWkub3JnKQorICoKKyAqCisgKglUaGlzIGNoaXAgaXMgdXNlZCBpbiB0aGUgSUlmeCBpbiBwbGFjZSBvZiBWSUEgIzIuIEl0IGFjdHMgbGlrZSBhIGZhbmN5CisgKglWSUEgY2hpcCB3aXRoIHByb3JhbW1hYmxlIGludGVycnVwdCBsZXZlbHMuCisgKgorICogOTkwNTAyIChqbXQpIC0gTWFqb3IgcmV3cml0ZSBmb3IgbmV3IGludGVycnVwdCBhcmNoaXRlY3R1cmUgYXMgd2VsbCBhcyBzb21lCisgKgkJICByZWNlbnQgaW5zaWdodHMgaW50byBPU1Mgb3BlcmF0aW9uYWwgZGV0YWlscy4KKyAqIDk5MDYxMCAoam10KSAtIE5vdyB0YWtpbmcgZnVsbGwgYWR2YW50YWdlIG9mIHRoZSBPU1MuIEludGVycnVwdHMgYXJlIG1hcHBlZAorICoJCSAgdG8gbW9zdGx5IG1hdGNoIHRoZSBBL1VYIGludGVycnVwdCBzY2hlbWUgc3VwcG9ydGVkIG9uIHRoZQorICoJCSAgVklBIHNpZGUuIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIElTTSBpcnEgYWdhaW4KKyAqCQkgIHNpbmNlIHdlIG5vdyBoYXZlIGEgZnVuY3Rpb25hbCBJT1AgbWFuYWdlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2h3Lmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgorCitpbnQgb3NzX3ByZXNlbnQ7Cit2b2xhdGlsZSBzdHJ1Y3QgbWFjX29zcyAqb3NzOworCitpcnFyZXR1cm5fdCBvc3NfaXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2lycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCitleHRlcm4gaXJxcmV0dXJuX3QgdmlhMV9pcnEoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGlycXJldHVybl90IG1hY19zY2NfZGlzcGF0Y2goaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgT1NTCisgKgorICogVGhlIE9TUyAiZGV0ZWN0aW9uIiBjb2RlIGlzIGFjdHVhbGx5IGluIHZpYV9pbml0KCkgd2hpY2ggaXMgYWx3YXlzIGNhbGxlZAorICogYmVmb3JlIHVzLiBUaHVzIHdlIGNhbiBjb3VudCBvbiBvc3NfcHJlc2VudCBiZWluZyB2YWxpZCBvbiBlbnRyeS4KKyAqLworCit2b2lkIF9faW5pdCBvc3NfaW5pdCh2b2lkKQoreworCWludCBpOworCisJaWYgKCFvc3NfcHJlc2VudCkgcmV0dXJuOworCisJb3NzID0gKHN0cnVjdCBtYWNfb3NzICopIE9TU19CQVNFOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gVW5saWtlIGEgVklBIGl0IGxvb2tzIGxpa2Ugd2UgICAgKi8KKwkvKiBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHNvdXJjZSdzIGludGVycnVwdCBsZXZlbCB0byB6ZXJvLiAqLworCisJZm9yIChpID0gMDsgaSA8PSBPU1NfTlVNX1NPVVJDRVM7IGkrKykgeworCQlvc3MtPmlycV9sZXZlbFtpXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJfQorCS8qIElmIHdlIGRpc2FibGUgVklBMSBoZXJlLCB3ZSBuZXZlciByZWFsbHkgaGFuZGxlIGl0Li4uICovCisJb3NzLT5pcnFfbGV2ZWxbT1NTX1ZJQTFdID0gT1NTX0lSUUxFVl9WSUExOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIE9TUyBhbmQgTnVCdXMgaW50ZXJydXB0IGRpc3BhdGNoZXJzLgorICovCisKK3ZvaWQgX19pbml0IG9zc19yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpCit7CisJY3B1X3JlcXVlc3RfaXJxKE9TU19JUlFMRVZfU0NTSSwgb3NzX2lycSwgSVJRX0ZMR19MT0NLLAorCQkJInNjc2kiLCAodm9pZCAqKSBvc3MpOworCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX0lPUFNDQywgbWFjX3NjY19kaXNwYXRjaCwgSVJRX0ZMR19MT0NLLAorCQkJInNjYyIsIG1hY19zY2NfZGlzcGF0Y2gpOworCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX05VQlVTLCBvc3NfbnVidXNfaXJxLCBJUlFfRkxHX0xPQ0ssCisJCQkibnVidXMiLCAodm9pZCAqKSBvc3MpOworCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX1NPVU5ELCBvc3NfaXJxLCBJUlFfRkxHX0xPQ0ssCisJCQkic291bmQiLCAodm9pZCAqKSBvc3MpOworCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX1ZJQTEsIHZpYTFfaXJxLCBJUlFfRkxHX0xPQ0ssCisJCQkidmlhMSIsICh2b2lkICopIHZpYTEpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBPU1MgZm9yIE51YnVzIGFjY2VzcworICovCisKK3ZvaWQgX19pbml0IG9zc19udWJ1c19pbml0KHZvaWQpCit7Cit9CisKKy8qCisgKiBIYW5kbGUgbWlzY2VsbGFuZW91cyBPU1MgaW50ZXJydXB0cy4gUmlnaHQgbm93IHRoYXQncyBqdXN0IHNvdW5kCisgKiBhbmQgU0NTSTsgZXZlcnl0aGluZyBlbHNlIGlzIHJvdXRlZCB0byBpdHMgb3duIGF1dG92ZWN0b3IgSVJRLgorICovCisKK2lycXJldHVybl90IG9zc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXZlbnRzOworCisJZXZlbnRzID0gb3NzLT5pcnFfcGVuZGluZyAmIChPU1NfSVBfU09VTkR8T1NTX0lQX1NDU0kpOworCWlmICghZXZlbnRzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKyNpZmRlZiBERUJVR19JUlFTCisJaWYgKChjb25zb2xlX2xvZ2xldmVsID09IDEwKSAmJiAhKGV2ZW50cyAmIE9TU19JUF9TQ1NJKSkgeworCQlwcmludGsoIm9zc19pcnE6IGlycSAlZCBldmVudHMgPSAweCUwNFhcbiIsIGlycSwKKwkJCShpbnQpIG9zcy0+aXJxX3BlbmRpbmcpOworCX0KKyNlbmRpZgorCS8qIEZJWE1FOiBob3cgZG8geW91IGNsZWFyIGEgcGVuZGluZyBJUlE/ICAgICovCisKKwlpZiAoZXZlbnRzICYgT1NTX0lQX1NPVU5EKSB7CisJCS8qIEZJWE1FOiBjYWxsIHNvdW5kIGhhbmRsZXIgKi8KKwkJb3NzLT5pcnFfcGVuZGluZyAmPSB+T1NTX0lQX1NPVU5EOworCX0gZWxzZSBpZiAoZXZlbnRzICYgT1NTX0lQX1NDU0kpIHsKKwkJb3NzLT5pcnFfbGV2ZWxbT1NTX1NDU0ldID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKKwkJbWFjX2RvX2lycV9saXN0KElSUV9NQUNfU0NTSSwgcmVncyk7CisJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfk9TU19JUF9TQ1NJOworCQlvc3MtPmlycV9sZXZlbFtPU1NfU0NTSV0gPSBPU1NfSVJRTEVWX1NDU0k7CisJfSBlbHNlIHsKKwkJLyogRklYTUU6IGVycm9yIGNoZWNrIGhlcmU/ICovCisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIE51YnVzIElSUSBoYW5kbGVyLCBPU1Mgc3R5bGUKKyAqCisgKiBVbmxpa2UgdGhlIFZJQS9SQlYgdGhpcyBpcyBvbiBpdHMgb3duIGF1dG92ZWN0b3IgaW50ZXJydXB0IGxldmVsLgorICovCisKK2lycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXZlbnRzLCBpcnFfYml0LCBpOworCisJZXZlbnRzID0gb3NzLT5pcnFfcGVuZGluZyAmIE9TU19JUF9OVUJVUzsKKwlpZiAoIWV2ZW50cykKKwkJcmV0dXJuIElSUV9OT05FOworCisjaWZkZWYgREVCVUdfTlVCVVNfSU5UCisJaWYgKGNvbnNvbGVfbG9nbGV2ZWwgPiA3KSB7CisJCXByaW50aygib3NzX251YnVzX2lycTogZXZlbnRzID0gMHglMDRYXG4iLCBldmVudHMpOworCX0KKyNlbmRpZgorCS8qIFRoZXJlIGFyZSBvbmx5IHNpeCBzbG90cyBvbiB0aGUgT1NTLCBub3Qgc2V2ZW4gKi8KKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDYgOyBpKyssIGlycV9iaXQgPDw9IDEpIHsKKwkJaWYgKGV2ZW50cyAmIGlycV9iaXQpIHsKKwkJCW9zcy0+aXJxX2xldmVsW2ldID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKKwkJCW1hY19kb19pcnFfbGlzdChOVUJVU19TT1VSQ0VfQkFTRSArIGksIHJlZ3MpOworCQkJb3NzLT5pcnFfcGVuZGluZyAmPSB+aXJxX2JpdDsKKwkJCW9zcy0+aXJxX2xldmVsW2ldID0gT1NTX0lSUUxFVl9OVUJVUzsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBFbmFibGUgYW4gT1NTIGludGVycnVwdAorICoKKyAqIEl0IGxvb2tzIG1lc3N5IGJ1dCBpdCdzIHJhdGhlciBzdHJhaWdodGZvcndhcmQuIFRoZSBzd2l0Y2goKSBzdGF0ZW1lbnQKKyAqIGp1c3QgbWFwcyB0aGUgbWFjaHNwZWMgaW50ZXJydXB0IG51bWJlcnMgdG8gdGhlIHJpZ2h0IE9TUyBpbnRlcnJ1cHQKKyAqIHNvdXJjZSAoaWYgdGhlIE9TUyBoYW5kbGVzIHRoYXQgaW50ZXJydXB0KSBhbmQgdGhlbiBzZXRzIHRoZSBpbnRlcnJ1cHQKKyAqIGxldmVsIGZvciB0aGF0IHNvdXJjZSB0byBub256ZXJvLCB0aHVzIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHQuCisgKi8KKwordm9pZCBvc3NfaXJxX2VuYWJsZShpbnQgaXJxKSB7CisjaWZkZWYgREVCVUdfSVJRVVNFCisJcHJpbnRrKCJvc3NfaXJxX2VuYWJsZSglZClcbiIsIGlycSk7CisjZW5kaWYKKwlzd2l0Y2goaXJxKSB7CisJCWNhc2UgSVJRX1NDQzoKKwkJY2FzZSBJUlFfU0NDQToKKwkJY2FzZSBJUlFfU0NDQjoKKwkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BTQ0NdID0gT1NTX0lSUUxFVl9JT1BTQ0M7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX0FEQjoKKwkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BJU01dID0gT1NTX0lSUUxFVl9JT1BJU007CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX1NDU0k6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfU0NTSV0gPSBPU1NfSVJRTEVWX1NDU0k7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTlVCVVNfOToKKwkJY2FzZSBJUlFfTlVCVVNfQToKKwkJY2FzZSBJUlFfTlVCVVNfQjoKKwkJY2FzZSBJUlFfTlVCVVNfQzoKKwkJY2FzZSBJUlFfTlVCVVNfRDoKKwkJY2FzZSBJUlFfTlVCVVNfRToKKwkJCWlycSAtPSBOVUJVU19TT1VSQ0VfQkFTRTsKKwkJCW9zcy0+aXJxX2xldmVsW2lycV0gPSBPU1NfSVJRTEVWX05VQlVTOworCQkJYnJlYWs7CisjaWZkZWYgREVCVUdfSVJRVVNFCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIiVzIHVua25vd24gaXJxICVkXG4iLF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJCWJyZWFrOworI2VuZGlmCisJfQorfQorCisvKgorICogRGlzYWJsZSBhbiBPU1MgaW50ZXJydXB0CisgKgorICogU2FtZSBhcyBhYm92ZSBleGNlcHQgd2Ugc2V0IHRoZSBzb3VyY2UncyBpbnRlcnJ1cHQgbGV2ZWwgdG8gemVybywKKyAqIHRvIGRpc2FibGUgdGhlIGludGVycnVwdC4KKyAqLworCit2b2lkIG9zc19pcnFfZGlzYWJsZShpbnQgaXJxKSB7CisjaWZkZWYgREVCVUdfSVJRVVNFCisJcHJpbnRrKCJvc3NfaXJxX2Rpc2FibGUoJWQpXG4iLCBpcnEpOworI2VuZGlmCisJc3dpdGNoKGlycSkgeworCQljYXNlIElSUV9TQ0M6CisJCWNhc2UgSVJRX1NDQ0E6CisJCWNhc2UgSVJRX1NDQ0I6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QU0NDXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX0FEQjoKKwkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BJU01dID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKKwkJCWJyZWFrOworCQljYXNlIElSUV9NQUNfU0NTSToKKwkJCW9zcy0+aXJxX2xldmVsW09TU19TQ1NJXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTlVCVVNfOToKKwkJY2FzZSBJUlFfTlVCVVNfQToKKwkJY2FzZSBJUlFfTlVCVVNfQjoKKwkJY2FzZSBJUlFfTlVCVVNfQzoKKwkJY2FzZSBJUlFfTlVCVVNfRDoKKwkJY2FzZSBJUlFfTlVCVVNfRToKKwkJCWlycSAtPSBOVUJVU19TT1VSQ0VfQkFTRTsKKwkJCW9zcy0+aXJxX2xldmVsW2lycV0gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOworCQkJYnJlYWs7CisjaWZkZWYgREVCVUdfSVJRVVNFCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIiVzIHVua25vd24gaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCQlicmVhazsKKyNlbmRpZgorCX0KK30KKworLyoKKyAqIENsZWFyIGFuIE9TUyBpbnRlcnJ1cHQKKyAqCisgKiBOb3Qgc3VyZSBpZiB0aGlzIHdvcmtzIG9yIG5vdCBidXQgaXQncyB0aGUgb25seSBtZXRob2QgSSBjb3VsZAorICogdGhpbmsgb2YgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWNfb3NzIHN0cnVjdHVyZS4KKyAqLworCit2b2lkIG9zc19pcnFfY2xlYXIoaW50IGlycSkgeworCS8qIEZJWE1FOiBob3cgdG8gZG8gdGhpcyBvbiBPU1M/ICovCisJc3dpdGNoKGlycSkgeworCQljYXNlIElSUV9TQ0M6CisJCWNhc2UgSVJRX1NDQ0E6CisJCWNhc2UgSVJRX1NDQ0I6CisJCQlvc3MtPmlycV9wZW5kaW5nICY9IH5PU1NfSVBfSU9QU0NDOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19BREI6CisJCQlvc3MtPmlycV9wZW5kaW5nICY9IH5PU1NfSVBfSU9QSVNNOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19TQ1NJOgorCQkJb3NzLT5pcnFfcGVuZGluZyAmPSB+T1NTX0lQX1NDU0k7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTlVCVVNfOToKKwkJY2FzZSBJUlFfTlVCVVNfQToKKwkJY2FzZSBJUlFfTlVCVVNfQjoKKwkJY2FzZSBJUlFfTlVCVVNfQzoKKwkJY2FzZSBJUlFfTlVCVVNfRDoKKwkJY2FzZSBJUlFfTlVCVVNfRToKKwkJCWlycSAtPSBOVUJVU19TT1VSQ0VfQkFTRTsKKwkJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfigxIDw8IGlycSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSBzcGVjaWZpYyBPU1MgaW50ZXJydXB0IGlzIHBlbmRpbmcKKyAqLworCitpbnQgb3NzX2lycV9wZW5kaW5nKGludCBpcnEpCit7CisJc3dpdGNoKGlycSkgeworCQljYXNlIElSUV9TQ0M6CisJCWNhc2UgSVJRX1NDQ0E6CisJCWNhc2UgSVJRX1NDQ0I6CisJCQlyZXR1cm4gb3NzLT5pcnFfcGVuZGluZyAmIE9TU19JUF9JT1BTQ0M7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX0FEQjoKKwkJCXJldHVybiBvc3MtPmlycV9wZW5kaW5nICYgT1NTX0lQX0lPUElTTTsKKwkJCWJyZWFrOworCQljYXNlIElSUV9NQUNfU0NTSToKKwkJCXJldHVybiBvc3MtPmlycV9wZW5kaW5nICYgT1NTX0lQX1NDU0k7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTlVCVVNfOToKKwkJY2FzZSBJUlFfTlVCVVNfQToKKwkJY2FzZSBJUlFfTlVCVVNfQjoKKwkJY2FzZSBJUlFfTlVCVVNfQzoKKwkJY2FzZSBJUlFfTlVCVVNfRDoKKwkJY2FzZSBJUlFfTlVCVVNfRToKKwkJCWlycSAtPSBOVUJVU19TT1VSQ0VfQkFTRTsKKwkJCXJldHVybiBvc3MtPmlycV9wZW5kaW5nICYgKDEgPDwgaXJxKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvcHNjLmMgYi9hcmNoL202OGsvbWFjL3BzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjM4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL3BzYy5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICoJQXBwbGUgUGVyaXBoZXJhbCBTeXN0ZW0gQ29udHJvbGxlciAoUFNDKQorICoKKyAqCVRoZSBQU0MgaXMgdXNlZCBvbiB0aGUgQVYgTWFjcyB0byBjb250cm9sIElPIGZ1bmN0aW9ucyBub3QgaGFuZGxlZAorICoJYnkgdGhlIFZJQXMgKEV0aGVybmV0LCBEU1AsIFNDQykuCisgKgorICogVE8gRE86CisgKgorICogVHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGluIHBJRlI1IGFuZCBwSUZSNi4gVGhlcmUgc2VlbSB0byBiZQorICogcGVyc2lzYW50IGludGVycnVwdCBjb25kaXRpb25zIGluIHRob3NlIHJlZ2lzdGVycyBhbmQgSSBoYXZlIG5vIGlkZWEgd2hhdAorICogdGhleSBhcmUuIEdyYW50ZWQgaXQgZG9lc24ndCBhZmZlY3Qgc2luY2Ugd2UncmUgbm90IGVuYWJsaW5nIGFueSBpbnRlcnJ1cHRzCisgKiBvbiB0aG9zZSBsZXZlbHMgYXQgdGhlIG1vbWVudCwgYnV0IGl0IHdvdWxkIGJlIG5pY2UgdG8ga25vdy4gSSBoYXZlIGEgZmVlbGluZworICogdGhleSBhcmVuJ3QgYWN0dWFsbHkgaW50ZXJydXB0IGxpbmVzIGJ1dCBkYXRhIGxpbmVzICh0byB0aGUgRFNQPykKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KKworI2RlZmluZSBERUJVR19QU0MKKworaW50IHBzY19wcmVzZW50Owordm9sYXRpbGUgX191OCAqcHNjOworCitpcnFyZXR1cm5fdCBwc2NfaXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyoKKyAqIERlYnVnZ2luZyBkdW1wLCB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24uCisgKi8KKwordm9pZCBwc2NfZGVidWdfZHVtcCh2b2lkKQoreworCWludAlpOworCisJaWYgKCFwc2NfcHJlc2VudCkgcmV0dXJuOworCWZvciAoaSA9IDB4MzAgOyBpIDwgMHg3MCA7IGkgKz0gMHgxMCkgeworCQlwcmludGsoIlBTQyAjJWQ6ICBJRlIgPSAweCUwMlggSUVSID0gMHglMDJYXG4iLAorCQkJaSA+PiA0LAorCQkJKGludCkgcHNjX3JlYWRfYnl0ZShwSUZSYmFzZSArIGkpLAorCQkJKGludCkgcHNjX3JlYWRfYnl0ZShwSUVSYmFzZSArIGkpKTsKKwl9Cit9CisKKy8qCisgKiBUcnkgdG8ga2lsbCBhbGwgRE1BIGNoYW5uZWxzIG9uIHRoZSBQU0MuIE5vdCBzdXJlIGhvdyB0aGlzIGhpcworICogc3VwcG9zZWQgdG8gd29yazsgdGhpcyBpcyBjb2RlIGxpZnRlZCBmcm9tIG1hY21hY2UuYyBhbmQgdGhlbgorICogZXhwYW5kZWQgdG8gY292ZXIgd2hhdCBJIHRoaW5rIGFyZSB0aGUgb3RoZXIgNyBjaGFubmVscy4KKyAqLworCit2b2lkIHBzY19kbWFfZGllX2RpZV9kaWUodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50aygiS2lsbGluZyBhbGwgUFNDIERNQSBjaGFubmVscy4uLiIpOworCWZvciAoaSA9IDAgOyBpIDwgOSA7IGkrKykgeworCQlwc2Nfd3JpdGVfd29yZChQU0NfQ1RMX0JBU0UgKyAoaSA8PCA0KSwgMHg4ODAwKTsKKwkJcHNjX3dyaXRlX3dvcmQoUFNDX0NUTF9CQVNFICsgKGkgPDwgNCksIDB4MTAwMCk7CisJCXBzY193cml0ZV93b3JkKFBTQ19DTURfQkFTRSArIChpIDw8IDUpLCAweDExMDApOworCQlwc2Nfd3JpdGVfd29yZChQU0NfQ01EX0JBU0UgKyAoaSA8PCA1KSArIDB4MTAsIDB4MTEwMCk7CisJfQorCXByaW50aygiZG9uZSFcbiIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUFNDLiBGb3Igbm93IHRoaXMganVzdCBpbnZvbHZlcyBzaHV0dGluZyBkb3duIGFsbAorICogaW50ZXJydXB0IHNvdXJjZXMgdXNpbmcgdGhlIElFUnMuCisgKi8KKwordm9pZCBfX2luaXQgcHNjX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCAhPSBNQUNfTU9ERUxfQzY2MAorCSAmJiBtYWNpbnRvc2hfY29uZmlnLT5pZGVudCAhPSBNQUNfTU9ERUxfUTg0MCkKKwl7CisJCXBzYyA9IE5VTEw7CisJCXBzY19wcmVzZW50ID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogVGhlIFBTQyBpcyBhbHdheXMgYXQgdGhlIHNhbWUgc3BvdCwgYnV0IHVzaW5nIHBzYworCSAqIGtlZXBzIHRoaW5ncyBjb25zaXNhbnQgd2l0aCB0aGUgcHNjX3h4eHggZnVuY3Rpb25zLgorCSAqLworCisJcHNjID0gKHZvaWQgKikgUFNDX0JBU0U7CisJcHNjX3ByZXNlbnQgPSAxOworCisJcHJpbnRrKCJQU0MgZGV0ZWN0ZWQgYXQgJXBcbiIsIHBzYyk7CisKKwlwc2NfZG1hX2RpZV9kaWVfZGllKCk7CisKKyNpZmRlZiBERUJVR19QU0MKKwlwc2NfZGVidWdfZHVtcCgpOworI2VuZGlmCisJLyoKKwkgKiBNYXNrIGFuZCBjbGVhciBhbGwgcG9zc2libGUgaW50ZXJydXB0cworCSAqLworCisJZm9yIChpID0gMHgzMCA7IGkgPCAweDcwIDsgaSArPSAweDEwKSB7CisJCXBzY193cml0ZV9ieXRlKHBJRVJiYXNlICsgaSwgMHgwRik7CisJCXBzY193cml0ZV9ieXRlKHBJRlJiYXNlICsgaSwgMHgwRik7CisJfQorfQorCisvKgorICogUmVnaXN0ZXIgdGhlIFBTQyBpbnRlcnJ1cHQgZGlzcGF0Y2hlcnMgZm9yIGF1dG92ZWN0b3IgaW50ZXJydXB0cyAzLTYuCisgKi8KKwordm9pZCBfX2luaXQgcHNjX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCkKK3sKKwljcHVfcmVxdWVzdF9pcnEoMywgcHNjX2lycSwgSVJRX0ZMR19MT0NLLCAicHNjMyIsICh2b2lkICopIDB4MzApOworCWNwdV9yZXF1ZXN0X2lycSg0LCBwc2NfaXJxLCBJUlFfRkxHX0xPQ0ssICJwc2M0IiwgKHZvaWQgKikgMHg0MCk7CisJY3B1X3JlcXVlc3RfaXJxKDUsIHBzY19pcnEsIElSUV9GTEdfTE9DSywgInBzYzUiLCAodm9pZCAqKSAweDUwKTsKKwljcHVfcmVxdWVzdF9pcnEoNiwgcHNjX2lycSwgSVJRX0ZMR19MT0NLLCAicHNjNiIsICh2b2lkICopIDB4NjApOworfQorCisvKgorICogUFNDIGludGVycnVwdCBoYW5kbGVyLiBJdCdzIGEgbG90IGxpa2UgdGhlIFZJQSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworCitpcnFyZXR1cm5fdCBwc2NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHBJRlIJPSBwSUZSYmFzZSArICgoaW50KSBkZXZfaWQpOworCWludCBwSUVSCT0gcElFUmJhc2UgKyAoKGludCkgZGV2X2lkKTsKKwlpbnQgYmFzZV9pcnE7CisJaW50IGlycV9iaXQsaTsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50czsKKworCWJhc2VfaXJxID0gaXJxIDw8IDM7CisKKyNpZmRlZiBERUJVR19JUlFTCisJcHJpbnRrKCJwc2NfaXJxOiBpcnEgJWQgcElGUiA9IDB4JTAyWCBwSUVSID0gMHglMDJYXG4iLAorCQlpcnEsIChpbnQpIHBzY19yZWFkX2J5dGUocElGUiksIChpbnQpIHBzY19yZWFkX2J5dGUocElFUikpOworI2VuZGlmCisKKwlldmVudHMgPSBwc2NfcmVhZF9ieXRlKHBJRlIpICYgcHNjX3JlYWRfYnl0ZShwSUVSKSAmIDB4RjsKKwlpZiAoIWV2ZW50cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChpID0gMCwgaXJxX2JpdCA9IDEgOyBpIDwgNCA7IGkrKywgaXJxX2JpdCA8PD0gMSkgeworCSAgICAgICAgaWYgKGV2ZW50cyAmIGlycV9iaXQpIHsKKwkJCXBzY193cml0ZV9ieXRlKHBJRVIsIGlycV9iaXQpOworCQkJbWFjX2RvX2lycV9saXN0KGJhc2VfaXJxICsgaSwgcmVncyk7CisJCQlwc2Nfd3JpdGVfYnl0ZShwSUZSLCBpcnFfYml0KTsKKwkJCXBzY193cml0ZV9ieXRlKHBJRVIsIGlycV9iaXQgfCAweDgwKTsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgcHNjX2lycV9lbmFibGUoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBwSUVSCT0gcElFUmJhc2UgKyAoaXJxX3NyYyA8PCA0KTsKKworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50aygicHNjX2lycV9lbmFibGUoJWQpXG4iLCBpcnEpOworI2VuZGlmCisJcHNjX3dyaXRlX2J5dGUocElFUiwgKDEgPDwgaXJxX2lkeCkgfCAweDgwKTsKK30KKwordm9pZCBwc2NfaXJxX2Rpc2FibGUoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBwSUVSCT0gcElFUmJhc2UgKyAoaXJxX3NyYyA8PCA0KTsKKworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50aygicHNjX2lycV9kaXNhYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCXBzY193cml0ZV9ieXRlKHBJRVIsIDEgPDwgaXJxX2lkeCk7Cit9CisKK3ZvaWQgcHNjX2lycV9jbGVhcihpbnQgaXJxKSB7CisJaW50IGlycV9zcmMJPSBJUlFfU1JDKGlycSk7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisJaW50IHBJRlIJPSBwSUVSYmFzZSArIChpcnFfc3JjIDw8IDQpOworCisJcHNjX3dyaXRlX2J5dGUocElGUiwgMSA8PCBpcnFfaWR4KTsKK30KKworaW50IHBzY19pcnFfcGVuZGluZyhpbnQgaXJxKQoreworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBwSUZSCT0gcElFUmJhc2UgKyAoaXJxX3NyYyA8PCA0KTsKKworCXJldHVybiBwc2NfcmVhZF9ieXRlKHBJRlIpICYgKDEgPDwgaXJxX2lkeCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDUyOGJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy92aWEuYwpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqCTY1MjIgVmVyc2F0aWxlIEludGVyZmFjZSBBZGFwdGVyIChWSUEpCisgKgorICoJVGhlcmUgYXJlIHR3byBvZiB0aGVzZSBvbiB0aGUgTWFjIElJLiBTb21lIElSUSdzIGFyZSB2ZWN0b3JlZAorICoJdmlhIHRoZW0gYXMgYXJlIGFzc29ydGVkIGJpdHMgYW5kIGJvYnMgLSBlZyBSVEMsIEFEQi4KKyAqCisgKiBDU0E6IE1vdG9yb2xhIHNlZW1zIHRvIGhhdmUgcmVtb3ZlZCBkb2N1bWVudGF0aW9uIG9uIHRoZSA2NTIyIGZyb20KKyAqIHRoZWlyIHdlYiBzaXRlOyB0cnkKKyAqICAgICBodHRwOi8vbmVyaW5pLmRyZi5jb20vdmVjdHJleC9vdGhlci90ZXh0L2NoaXBzLzY1MjIvCisgKiAgICAgaHR0cDovL3d3dy56eW11cmd5Lm5ldC9jbGFzc2ljL3ZpYzIwL3ZpY2RldDEuaHRtCisgKiBhbmQKKyAqICAgICBodHRwOi8vMTkzLjIzLjE2OC44Ny9taWtyb19sYWJvcnZlcnN1Y2hlL3ZpYV9pb2JhdXN0ZWluL3ZpYTY1MjJfMS5odG1sCisgKiBmb3IgaW5mby4gIEEgZnVsbC10ZXh0IHdlYiBzZWFyY2ggb24gNjUyMiBBTkQgVklBIHdpbGwgcHJvYmFibHkgYWxzbworICogbmV0IHNvbWUgdXNlZnVsbmVzcy4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PiAyMGFwcjE5OTkKKyAqCisgKiBQUkFNL1JUQyBhY2Nlc3MgYWxnb3JpdGhtcyBhcmUgZnJvbSB0aGUgTmV0QlNEIFJUQyB0b29sa2l0IHZlcnNpb24gMS4wOGIKKyAqIGJ5IEVyaWsgVm9nYW4gYW5kIGFkYXB0ZWQgdG8gTGludXggYnkgSm9zaHVhIE0uIFRob21wc29uIChmdW5haG9AanVyYWkub3JnKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2h3Lmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgorCit2b2xhdGlsZSBfX3U4ICp2aWExLCAqdmlhMjsKKyNpZiAwCisvKiBTZWUgbm90ZSBpbiBtYWNfdmlhLmggYWJvdXQgaG93IHRoaXMgaXMgcG9zc2libHkgbm90IHVzZWZ1bCAqLwordm9sYXRpbGUgbG9uZyAqdmlhX21lbW9yeV9ib2dvbj0obG9uZyAqKSZ2aWFfbWVtb3J5X2JvZ29uOworI2VuZGlmCitpbnQgIHJidl9wcmVzZW50LHZpYV9hbHRfbWFwcGluZzsKK19fdTggcmJ2X2NsZWFyOworCisvKgorICogR2xvYmFscyBmb3IgYWNjZXNzaW5nIHRoZSBWSUEgY2hpcCByZWdpc3RlcnMgd2l0aG91dCBoYXZpbmcgdG8KKyAqIGNoZWNrIGlmIHdlJ3JlIGhpdHRpbmcgYSByZWFsIFZJQSBvciBhbiBSQlYuIE5vcm1hbGx5IHlvdSBjb3VsZAorICoganVzdCBoaXQgdGhlIGNvbWJpbmVkIHJlZ2lzdGVyIChpZSwgdklFUnxySUVSKSBidXQgdGhhdCBzZWVtcyB0bworICogYnJlYWsgb24gQVYgTWFjcy4uLnByb2JhYmx5IGJlY2F1c2UgdGhleSBhY3R1YWxseSBkZWNvZGUgbW9yZSB0aGFuCisgKiBlaWdodCBhZGRyZXNzIGJpdHMuIFdoeSBjYW4ndCBBcHBsZSBlbmdpbmVlcnMgYXQgbGVhc3QgYmUKKyAqIF9jb25zaXN0ZW50bHlfIGxhenk/ICAgICAgICAgICAgICAgICAgICAgICAgICAtIDE5OTktMDUtMjEgKGptdCkKKyAqLworCitzdGF0aWMgaW50IGdJRVIsZ0lGUixnQnVmQSxnQnVmQjsKKworLyoKKyAqIFRpbWVyIGRlZnMuCisgKi8KKworI2RlZmluZSBUSUNLX1NJWkUJCTEwMDAwCisjZGVmaW5lIE1BQ19DTE9DS19USUNLCQkoNzgzMzAwL0haKQkJLyogdGlja3MgcGVyIEhaICovCisjZGVmaW5lIE1BQ19DTE9DS19MT1cJCShNQUNfQ0xPQ0tfVElDSyYweEZGKQorI2RlZmluZSBNQUNfQ0xPQ0tfSElHSAkJKE1BQ19DTE9DS19USUNLPj44KQorCitzdGF0aWMgaW50ICBudWJ1c19hY3RpdmU7CisKK3ZvaWQgdmlhX2RlYnVnX2R1bXAodm9pZCk7CitpcnFyZXR1cm5fdCB2aWExX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitpcnFyZXR1cm5fdCB2aWEyX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitpcnFyZXR1cm5fdCB2aWFfbnVidXNfaXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3ZvaWQgdmlhX2lycV9lbmFibGUoaW50IGlycSk7Cit2b2lkIHZpYV9pcnFfZGlzYWJsZShpbnQgaXJxKTsKK3ZvaWQgdmlhX2lycV9jbGVhcihpbnQgaXJxKTsKKworZXh0ZXJuIGlycXJldHVybl90IG1hY19iYW5nKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgb3NzX3ByZXNlbnQ7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBWSUFzCisgKgorICogRmlyc3Qgd2UgZmlndXJlIG91dCB3aGVyZSB0aGV5IGFjdHVhbGx5IF9hcmVfIGFzIHdlbGwgYXMgd2hhdCB0eXBlIG9mCisgKiBWSUEgd2UgaGF2ZSBmb3IgVklBMiAoaXQgY291bGQgYmUgYSByZWFsIFZJQSBvciBhbiBSQlYgb3IgZXZlbiBhbiBPU1MuKQorICogVGhlbiB3ZSBwcmV0dHkgbXVjaCBjbGVhciB0aGVtIG91dCBhbmQgZGlzYWJsZSBhbGwgSVJRIHNvdXJjZXMuCisgKgorICogTm90ZTogdGhlIE9TUyBpcyBhY3R1YWxseSAiZGV0ZWN0ZWQiIGhlcmUgYW5kIG5vdCBpbiBvc3NfaW5pdCgpLiBJdCBqdXN0CisgKgkgc2VlbXMgbW9yZSBsb2dpY2FsIHRvIGRvIGl0IGhlcmUgc2luY2UgdmlhX2luaXQoKSBuZWVkcyB0byBrbm93CisgKgkgdGhlc2UgdGhpbmdzIGFueXdheXMuCisgKi8KKwordm9pZCBfX2luaXQgdmlhX2luaXQodm9pZCkKK3sKKwlzd2l0Y2gobWFjaW50b3NoX2NvbmZpZy0+dmlhX3R5cGUpIHsKKworCQkvKiBJSWNpLCBJSXNpLCBJSXZ4LCBJSXZpIChQNnh4KSwgTEMgc2VyaWVzICovCisKKwkJY2FzZSBNQUNfVklBX0lJY2k6CisJCQl2aWExID0gKHZvaWQgKikgVklBMV9CQVNFOworCQkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9JSUZYKSB7CisJCQkJdmlhMiA9IE5VTEw7CisJCQkJcmJ2X3ByZXNlbnQgPSAwOworCQkJCW9zc19wcmVzZW50ID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJdmlhMiA9ICh2b2lkICopIFJCVl9CQVNFOworCQkJCXJidl9wcmVzZW50ID0gMTsKKwkJCQlvc3NfcHJlc2VudCA9IDA7CisJCQl9CisJCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0xDSUlJKSB7CisJCQkJcmJ2X2NsZWFyID0gMHgwMDsKKwkJCX0gZWxzZSB7CisJCQkJLyogb24gbW9zdCBSQlZzICgmIHVubGlrZSB0aGUgVklBcyksIHlvdSAgICovCisJCQkJLyogbmVlZCB0byBzZXQgYml0IDcgd2hlbiB5b3Ugd3JpdGUgdG8gSUZSICovCisJCQkJLyogaW4gb3JkZXIgZm9yIHlvdXIgY2xlYXIgdG8gb2NjdXIuICAgICAgICovCisJCQkJcmJ2X2NsZWFyID0gMHg4MDsKKwkJCX0KKwkJCWdJRVIgPSBySUVSOworCQkJZ0lGUiA9IHJJRlI7CisJCQlnQnVmQSA9IHJTSUZSOworCQkJZ0J1ZkIgPSByQnVmQjsKKwkJCWJyZWFrOworCisJCS8qIFF1YWRyYSBhbmQgZWFybHkgTWFjSUlzIGFncmVlIG9uIHRoZSBWSUEgbG9jYXRpb25zICovCisKKwkJY2FzZSBNQUNfVklBX1FVQURSQToKKwkJY2FzZSBNQUNfVklBX0lJOgorCQkJdmlhMSA9ICh2b2lkICopIFZJQTFfQkFTRTsKKwkJCXZpYTIgPSAodm9pZCAqKSBWSUEyX0JBU0U7CisJCQlyYnZfcHJlc2VudCA9IDA7CisJCQlvc3NfcHJlc2VudCA9IDA7CisJCQlyYnZfY2xlYXIgPSAweDAwOworCQkJZ0lFUiA9IHZJRVI7CisJCQlnSUZSID0gdklGUjsKKwkJCWdCdWZBID0gdkJ1ZkE7CisJCQlnQnVmQiA9IHZCdWZCOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYW5pYygiVU5LTk9XTiBWSUEgVFlQRSIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlZJQTEgYXQgJXAgaXMgYSA2NTIyIG9yIGNsb25lXG4iLCB2aWExKTsKKworCXByaW50ayhLRVJOX0lORk8gIlZJQTIgYXQgJXAgaXMgIiwgdmlhMik7CisJaWYgKHJidl9wcmVzZW50KSB7CisJCXByaW50ayhLRVJOX0lORk8gImFuIFJCVlxuIik7CisJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQlwcmludGsoS0VSTl9JTkZPICJhbiBPU1NcbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gImEgNjUyMiBvciBjbG9uZVxuIik7CisJfQorCisjaWZkZWYgREVCVUdfVklBCisJdmlhX2RlYnVnX2R1bXAoKTsKKyNlbmRpZgorCisJLyoKKwkgKiBTaHV0IGRvd24gYWxsIElSUSBzb3VyY2VzLCByZXNldCB0aGUgdGltZXJzLCBhbmQKKwkgKiBraWxsIHRoZSB0aW1lciBsYXRjaCBvbiBWSUExLgorCSAqLworCisJdmlhMVt2SUVSXSA9IDB4N0Y7CisJdmlhMVt2SUZSXSA9IDB4N0Y7CisJdmlhMVt2VDFMTF0gPSAwOworCXZpYTFbdlQxTEhdID0gMDsKKwl2aWExW3ZUMUNMXSA9IDA7CisJdmlhMVt2VDFDSF0gPSAwOworCXZpYTFbdlQyQ0xdID0gMDsKKwl2aWExW3ZUMkNIXSA9IDA7CisJdmlhMVt2QUNSXSAmPSAweDNGOworCisJLyoKKwkgKiBTRS8zMDogZGlzYWJsZSB2aWRlbyBJUlEKKwkgKiBYWFg6IHRlc3RpbmcgZm9yIFNFLzMwIFZCTAorCSAqLworCisJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9TRTMwKSB7CisJCXZpYTFbdkRpckJdIHw9IDB4NDA7CisJCXZpYTFbdkJ1ZkJdIHw9IDB4NDA7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIFJUQyBiaXRzIHRvIGEga25vd24gc3RhdGU6IGFsbCBsaW5lcyB0byBvdXRwdXRzIGFuZAorCSAqIFJUQyBkaXNhYmxlZCAoeWVzIHRoYXQncyAwIHRvIGVuYWJsZSBhbmQgMSB0byBkaXNhYmxlKS4KKwkgKi8KKworCXZpYTFbdkRpckJdIHw9IChWSUExQl92UlRDRW5iIHwgVklBMUJfdlJUQ0NsayB8IFZJQTFCX3ZSVENEYXRhKTsKKwl2aWExW3ZCdWZCXSB8PSAoVklBMUJfdlJUQ0VuYiB8IFZJQTFCX3ZSVENDbGspOworCisJLyogRXZlcnl0aGluZyBiZWxvdyB0aGlzIHBvaW50IGlzIFZJQTIvUkJWIG9ubHkuLi4gKi8KKworCWlmIChvc3NfcHJlc2VudCkgcmV0dXJuOworCisjaWYgMQorCS8qIFNvbWUgbWFjaGluZXMgc3VwcG9ydCBhbiBhbHRlcm5hdGUgSVJRIG1hcHBpbmcgdGhhdCBzcHJlYWRzICAqLworCS8qIEV0aGVybmV0IGFuZCBTb3VuZCBvdXQgdG8gdGhlaXIgb3duIGF1dG9sZXZlbCBJUlFzIGFuZCBtb3ZlcyAqLworCS8qIFZJQTEgdG8gbGV2ZWwgNi4gQS9VWCB1c2VzIHRoaXMgbWFwcGluZyBhbmQgd2UgZG8gdG9vLiAgTm90ZSAqLworCS8qIHRoYXQgdGhlIElJZnggZW11bGF0ZXMgdGhpcyBhbHRlcm5hdGUgbWFwcGluZyB1c2luZyB0aGUgT1NTLiAqLworCisJc3dpdGNoKG1hY2ludG9zaF9jb25maWctPmlkZW50KSB7CisJCWNhc2UgTUFDX01PREVMX0M2MTA6CisJCWNhc2UgTUFDX01PREVMX1E2MTA6CisJCWNhc2UgTUFDX01PREVMX0M2NTA6CisJCWNhc2UgTUFDX01PREVMX1E2NTA6CisJCWNhc2UgTUFDX01PREVMX1E3MDA6CisJCWNhc2UgTUFDX01PREVMX1E4MDA6CisJCWNhc2UgTUFDX01PREVMX1E5MDA6CisJCWNhc2UgTUFDX01PREVMX1E5NTA6CisJCQl2aWFfYWx0X21hcHBpbmcgPSAxOworCQkJdmlhMVt2RGlyQl0gfD0gMHg0MDsKKwkJCXZpYTFbdkJ1ZkJdICY9IH4weDQwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl2aWFfYWx0X21hcHBpbmcgPSAwOworCQkJYnJlYWs7CisJfQorI2Vsc2UKKwkvKiBUaGUgYWxlcm5hdGUgSVJRIG1hcHBpbmcgc2VlbXMgdG8ganVzdCBub3Qgd29yay4gQW55b25lIHdpdGggYSAgICovCisJLyogc3VwcG9ydGVkIG1hY2hpbmUgaXMgd2VsY29tZSB0byB0YWtlIGEgc3RhYiBhdCBmaXhpbmcgaXQuIEl0ICAgICAqLworCS8qIF9zaG91bGRfIHdvcmsgb24gdGhlIGZvbGxvd2luZyBRdWFkcmFzOiA2MTAsNjUwLDcwMCw4MDAsOTAwLDk1MCAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxOTk5LTA2LTEyIChqbXQpICovCisKKwl2aWFfYWx0X21hcHBpbmcgPSAwOworI2VuZGlmCisKKwkvKgorCSAqIE5vdyBpbml0aWFsaXplIFZJQTIuIEZvciBSQlYgd2UganVzdCBraWxsIGFsbCBpbnRlcnJ1cHRzOworCSAqIGZvciBhIHJlZ3VsYXIgVklBIHdlIGFsc28gcmVzZXQgdGhlIHRpbWVycyBhbmQgc3R1ZmYuCisJICovCisKKwl2aWEyW2dJRVJdID0gMHg3RjsKKwl2aWEyW2dJRlJdID0gMHg3RiB8IHJidl9jbGVhcjsKKwlpZiAoIXJidl9wcmVzZW50KSB7CisJCXZpYTJbdlQxTExdID0gMDsKKwkJdmlhMlt2VDFMSF0gPSAwOworCQl2aWEyW3ZUMUNMXSA9IDA7CisJCXZpYTJbdlQxQ0hdID0gMDsKKwkJdmlhMlt2VDJDTF0gPSAwOworCQl2aWEyW3ZUMkNIXSA9IDA7CisJCXZpYTJbdkFDUl0gJj0gMHgzRjsKKwl9Cit9CisKKy8qCisgKiBTdGFydCB0aGUgMTAwIEh6IGNsb2NrCisgKi8KKwordm9pZCBfX2luaXQgdmlhX2luaXRfY2xvY2soaXJxcmV0dXJuX3QgKCpmdW5jKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisJdmlhMVt2QUNSXSB8PSAweDQwOworCXZpYTFbdlQxTExdID0gTUFDX0NMT0NLX0xPVzsKKwl2aWExW3ZUMUxIXSA9IE1BQ19DTE9DS19ISUdIOworCXZpYTFbdlQxQ0xdID0gTUFDX0NMT0NLX0xPVzsKKwl2aWExW3ZUMUNIXSA9IE1BQ19DTE9DS19ISUdIOworCisJcmVxdWVzdF9pcnEoSVJRX01BQ19USU1FUl8xLCBmdW5jLCBJUlFfRkxHX0xPQ0ssICJ0aW1lciIsIGZ1bmMpOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBkaXNwYXRjaGVycyBmb3IgVklBIG9yIFJCViBtYWNoaW5lcyBvbmx5LgorICovCisKK3ZvaWQgX19pbml0IHZpYV9yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpCit7CisJaWYgKHZpYV9hbHRfbWFwcGluZykgeworCQljcHVfcmVxdWVzdF9pcnEoSVJRX0FVVE9fMSwgdmlhMV9pcnEsCisJCQkJSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwgInNvZnR3YXJlIiwKKwkJCQkodm9pZCAqKSB2aWExKTsKKwkJY3B1X3JlcXVlc3RfaXJxKElSUV9BVVRPXzYsIHZpYTFfaXJxLAorCQkJCUlSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsICJ2aWExIiwKKwkJCQkodm9pZCAqKSB2aWExKTsKKwl9IGVsc2UgeworCQljcHVfcmVxdWVzdF9pcnEoSVJRX0FVVE9fMSwgdmlhMV9pcnEsCisJCQkJSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwgInZpYTEiLAorCQkJCSh2b2lkICopIHZpYTEpOworI2lmIDAgLyogaW50ZXJmZXJlcyB3aXRoIHNlcmlhbCBvbiBzb21lIG1hY2hpbmVzICovCisJCWlmICghcHNjX3ByZXNlbnQpIHsKKwkJCWNwdV9yZXF1ZXN0X2lycShJUlFfQVVUT182LCBtYWNfYmFuZywgSVJRX0ZMR19MT0NLLAorCQkJCQkiT2ZmIFN3aXRjaCIsIG1hY19iYW5nKTsKKwkJfQorI2VuZGlmCisJfQorCWNwdV9yZXF1ZXN0X2lycShJUlFfQVVUT18yLCB2aWEyX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKKwkJCSJ2aWEyIiwgKHZvaWQgKikgdmlhMik7CisJaWYgKCFwc2NfcHJlc2VudCkgeworCQljcHVfcmVxdWVzdF9pcnEoSVJRX0FVVE9fNCwgbWFjX3NjY19kaXNwYXRjaCwgSVJRX0ZMR19MT0NLLAorCQkJCSJzY2MiLCBtYWNfc2NjX2Rpc3BhdGNoKTsKKwl9CisJcmVxdWVzdF9pcnEoSVJRX01BQ19OVUJVUywgdmlhX251YnVzX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKKwkJCSJudWJ1cyIsICh2b2lkICopIHZpYTIpOworfQorCisvKgorICogRGVidWdnaW5nIGR1bXAsIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgdG8gc2VlIHdoYXQncyBnb2luZyBvbi4KKyAqLworCit2b2lkIHZpYV9kZWJ1Z19kdW1wKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZJQTE6IEREUkEgPSAweCUwMlggRERSQiA9IDB4JTAyWCBBQ1IgPSAweCUwMlhcbiIsCisJCSh1aW50KSB2aWExW3ZEaXJBXSwgKHVpbnQpIHZpYTFbdkRpckJdLCAodWludCkgdmlhMVt2QUNSXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICAgIFBDUiA9IDB4JTAyWCAgSUZSID0gMHglMDJYIElFUiA9IDB4JTAyWFxuIiwKKwkJKHVpbnQpIHZpYTFbdlBDUl0sICh1aW50KSB2aWExW3ZJRlJdLCAodWludCkgdmlhMVt2SUVSXSk7CisJaWYgKG9zc19wcmVzZW50KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJWSUEyOiA8T1NTPlxuIik7CisJfSBlbHNlIGlmIChyYnZfcHJlc2VudCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiVklBMjogIElGUiA9IDB4JTAyWCAgSUVSID0gMHglMDJYXG4iLAorCQkJKHVpbnQpIHZpYTJbcklGUl0sICh1aW50KSB2aWEyW3JJRVJdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgIFNJRlIgPSAweCUwMlggU0lFUiA9IDB4JTAyWFxuIiwKKwkJCSh1aW50KSB2aWEyW3JTSUZSXSwgKHVpbnQpIHZpYTJbclNJRVJdKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9ERUJVRyAiVklBMjogRERSQSA9IDB4JTAyWCBERFJCID0gMHglMDJYIEFDUiA9IDB4JTAyWFxuIiwKKwkJCSh1aW50KSB2aWEyW3ZEaXJBXSwgKHVpbnQpIHZpYTJbdkRpckJdLAorCQkJKHVpbnQpIHZpYTJbdkFDUl0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgICAgUENSID0gMHglMDJYICBJRlIgPSAweCUwMlggSUVSID0gMHglMDJYXG4iLAorCQkJKHVpbnQpIHZpYTJbdlBDUl0sCisJCQkodWludCkgdmlhMlt2SUZSXSwgKHVpbnQpIHZpYTJbdklFUl0pOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKiBUQkk6IGdldCB0aW1lIG9mZnNldCBiZXR3ZWVuIHNjaGVkdWxpbmcgdGltZXIgdGlja3MKKyAqLworCit1bnNpZ25lZCBsb25nIG1hY19nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGlja3MsIG9mZnNldCA9IDA7CisKKwkvKiByZWFkIFZJQTEgdGltZXIgMiBjdXJyZW50IHZhbHVlICovCisJdGlja3MgPSB2aWExW3ZUMUNMXSB8ICh2aWExW3ZUMUNIXSA8PCA4KTsKKwkvKiBUaGUgcHJvYmFiaWxpdHkgb2YgdW5kZXJmbG93IGlzIGxlc3MgdGhhbiAyJSAqLworCWlmICh0aWNrcyA+IE1BQ19DTE9DS19USUNLIC0gTUFDX0NMT0NLX1RJQ0sgLyA1MCkKKwkJLyogQ2hlY2sgZm9yIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0IGluIFZJQTEgSUZSICovCisJCWlmICh2aWExW3ZJRlJdICYgMHg0MCkgb2Zmc2V0ID0gVElDS19TSVpFOworCisJdGlja3MgPSBNQUNfQ0xPQ0tfVElDSyAtIHRpY2tzOworCXRpY2tzID0gdGlja3MgKiAxMDAwMEwgLyBNQUNfQ0xPQ0tfVElDSzsKKworCXJldHVybiB0aWNrcyArIG9mZnNldDsKK30KKworLyoKKyAqIEZsdXNoIHRoZSBMMiBjYWNoZSBvbiBNYWNzIHRoYXQgaGF2ZSBpdCBieSBmbGlwcGluZworICogdGhlIHN5c3RlbSBpbnRvIDI0LWJpdCBtb2RlIGZvciBhbiBpbnN0YW50LgorICovCisKK3ZvaWQgdmlhX2ZsdXNoX2NhY2hlKHZvaWQpCit7CisJdmlhMltnQnVmQl0gJj0gflZJQTJCX3ZNb2RlMzI7CisJdmlhMltnQnVmQl0gfD0gVklBMkJfdk1vZGUzMjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBMMiBjYWNoZSBvbiBhIElJY2kKKyAqLworCitpbnQgdmlhX2dldF9jYWNoZV9kaXNhYmxlKHZvaWQpCit7CisJLyogU2FmZWd1YXJkIGFnYWluc3QgYmVpbmcgY2FsbGVkIGFjY2lkZW50YWxseSAqLworCWlmICghdmlhMikgeworCQlwcmludGsoS0VSTl9FUlIgInZpYV9nZXRfY2FjaGVfZGlzYWJsZSBjYWxsZWQgb24gYSBub24tVklBIG1hY2hpbmUhXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIChpbnQpIHZpYTJbZ0J1ZkJdICYgVklBMkJfdkNEaXM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIFZJQTIgZm9yIE51YnVzIGFjY2VzcworICovCisKK3ZvaWQgX19pbml0IHZpYV9udWJ1c19pbml0KHZvaWQpCit7CisJLyogZG9uJ3Qgc2V0IG51YnVzX2FjdGl2ZSA9IDAgaGVyZSwgaXQga2lsbHMgdGhlIEJhYm9vbiAqLworCS8qIGludGVycnVwdCB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVnaXN0ZXJlZC4JCSovCisKKwkvKiB1bmxvY2sgbnVidXMgdHJhbnNhY3Rpb25zICovCisKKwlpZiAoIXJidl9wcmVzZW50KSB7CisJCS8qIHNldCB0aGUgbGluZSB0byBiZSBhbiBvdXRwdXQgb24gbm9uLVJCViBtYWNoaW5lcyAqLworCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIxKSAmJgorCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjIpKSB7CisJCQl2aWEyW3ZEaXJCXSB8PSAweDAyOworCQl9CisJfQorCisJLyogdGhpcyBzZWVtcyB0byBiZSBhbiBBREIgYml0IG9uIFBNVSBtYWNoaW5lcyAqLworCS8qIGFjY29yZGluZyB0byBNa0xpbnV4LiAgLS0gam10ICAgICAgICAgICAgICAgKi8KKworCWlmICgobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjEpICYmCisJICAgIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX1BCMikpIHsKKwkJdmlhMltnQnVmQl0gfD0gMHgwMjsKKwl9CisKKwkvKiBkaXNhYmxlIG51YnVzIHNsb3QgaW50ZXJydXB0cy4gKi8KKwlpZiAocmJ2X3ByZXNlbnQpIHsKKwkJdmlhMltyU0lFUl0gPSAweDdGOworCQl2aWEyW3JTSUVSXSA9IG51YnVzX2FjdGl2ZSB8IDB4ODA7CisJfSBlbHNlIHsKKwkJLyogVGhlc2UgYXJlIEFEQiBiaXRzIG9uIFBNVSAqLworCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIxKSAmJgorCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjIpKSB7CisJCQlzd2l0Y2gobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQpCisJCQl7CisJCQkJY2FzZSBNQUNfTU9ERUxfSUk6CisJCQkJY2FzZSBNQUNfTU9ERUxfSUlYOgorCQkJCWNhc2UgTUFDX01PREVMX0lJQ1g6CisJCQkJY2FzZSBNQUNfTU9ERUxfU0UzMDoKKwkJCQkJdmlhMlt2QnVmQV0gfD0gMHgzRjsKKwkJCQkJdmlhMlt2RGlyQV0gPSB+bnVidXNfYWN0aXZlIHwgMHhjMDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJdmlhMlt2QnVmQV0gPSAweEZGOworCQkJCQl2aWEyW3ZEaXJBXSA9IH5udWJ1c19hY3RpdmU7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGUgZ2VuZXJpYyBWSUEgaW50ZXJydXB0IHJvdXRpbmVzIChzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBBbGFuIENveCdzCisgKiB2aWE2NTIyLmMgOi0pLCBkaXNhYmxlL3BlbmRpbmcgbWFza3MgYWRkZWQuCisgKgorICogVGhlIG5ldyBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlIGluIG1hY2ludHMuYyB0YWtlcyBjYXJlIG9mIGEgbG90IG9mIHRoZQorICogZ3J1bnR3b3JrIGZvciB1cywgaW5jbHVkaW5nIHRhbGx5aW5nIHRoZSBpbnRlcnJ1cHRzIGFuZCBjYWxsaW5nIHRoZQorICogaGFuZGxlcnMgb24gdGhlIGxpbmtlZCBsaXN0LiBBbGwgd2UgbmVlZCB0byBkbyBoZXJlIGlzIGJhc2ljYWxseSBnZW5lcmF0ZQorICogdGhlIG1hY2hzcGVjIGludGVycnVwdCBudW1iZXIgYWZ0ZXIgY2xlYXJpbmcgdGhlIGludGVycnVwdC4KKyAqLworCitpcnFyZXR1cm5fdCB2aWExX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpcnFfYml0LCBpOworCXVuc2lnbmVkIGNoYXIgZXZlbnRzLCBtYXNrOworCisJbWFzayA9IHZpYTFbdklFUl0gJiAweDdGOworCWlmICghKGV2ZW50cyA9IHZpYTFbdklGUl0gJiBtYXNrKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChpID0gMCwgaXJxX2JpdCA9IDEgOyBpIDwgNyA7IGkrKywgaXJxX2JpdCA8PD0gMSkKKwkJaWYgKGV2ZW50cyAmIGlycV9iaXQpIHsKKwkJCXZpYTFbdklFUl0gPSBpcnFfYml0OworCQkJbWFjX2RvX2lycV9saXN0KFZJQTFfU09VUkNFX0JBU0UgKyBpLCByZWdzKTsKKwkJCXZpYTFbdklGUl0gPSBpcnFfYml0OworCQkJdmlhMVt2SUVSXSA9IGlycV9iaXQgfCAweDgwOworCQl9CisKKyNpZiAwIC8qIGZyZWFraW4nIHBtdSBpcyBkb2luZyB3ZWlyZCBzdHVmZiAqLworCWlmICghb3NzX3ByZXNlbnQpIHsKKwkJLyogVGhpcyAoc3RpbGwpIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSB0byBnZXQgSURFCisJCSAgIHdvcmtpbmcuICBIb3dldmVyLCBpZiB5b3UgZW5hYmxlIFZCTCBpbnRlcnJ1cHRzLAorCQkgICB5b3UncmUgc2NyZXdlZC4uLiAqLworCQkvKiBGSVhNRTogc2hvdWxkIHdlIGNoZWNrIHRoZSBTTE9USVJRIGJpdCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICBwdWxsaW5nIHRoaXMgc3R1bnQ/ICovCisJCS8qIE5vLCBpdCB3b24ndCBiZSBzZXQuIHRoYXQncyB3aHkgd2UncmUgZG9pbmcgdGhpcy4gKi8KKwkJdmlhX2lycV9kaXNhYmxlKElSUV9NQUNfTlVCVVMpOworCQl2aWFfaXJxX2NsZWFyKElSUV9NQUNfTlVCVVMpOworCQltYWNfZG9faXJxX2xpc3QoSVJRX01BQ19OVUJVUywgcmVncyk7CisJCXZpYV9pcnFfZW5hYmxlKElSUV9NQUNfTlVCVVMpOworCX0KKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaXJxcmV0dXJuX3QgdmlhMl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaXJxX2JpdCwgaTsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50cywgbWFzazsKKworCW1hc2sgPSB2aWEyW2dJRVJdICYgMHg3RjsKKwlpZiAoIShldmVudHMgPSB2aWEyW2dJRlJdICYgbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDcgOyBpKyssIGlycV9iaXQgPDw9IDEpCisJCWlmIChldmVudHMgJiBpcnFfYml0KSB7CisJCQl2aWEyW2dJRVJdID0gaXJxX2JpdDsKKwkJCW1hY19kb19pcnFfbGlzdChWSUEyX1NPVVJDRV9CQVNFICsgaSwgcmVncyk7CisJCQl2aWEyW2dJRlJdID0gaXJxX2JpdCB8IHJidl9jbGVhcjsKKwkJCXZpYTJbZ0lFUl0gPSBpcnFfYml0IHwgMHg4MDsKKwkJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIERpc3BhdGNoIE51YnVzIGludGVycnVwdHMuIFdlIGFyZSBjYWxsZWQgYXMgYSBzZWNvbmRhcnkgZGlzcGF0Y2ggYnkgdGhlCisgKiBWSUEyIGRpc3BhdGNoZXIgYXMgYSBmYXN0IGludGVycnVwdCBoYW5kbGVyLgorICovCisKK2lycXJldHVybl90IHZpYV9udWJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaXJxX2JpdCwgaTsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50czsKKworCWlmICghKGV2ZW50cyA9IH52aWEyW2dCdWZBXSAmIG51YnVzX2FjdGl2ZSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDcgOyBpKyssIGlycV9iaXQgPDw9IDEpIHsKKwkJaWYgKGV2ZW50cyAmIGlycV9iaXQpIHsKKwkJCXZpYV9pcnFfZGlzYWJsZShOVUJVU19TT1VSQ0VfQkFTRSArIGkpOworCQkJbWFjX2RvX2lycV9saXN0KE5VQlVTX1NPVVJDRV9CQVNFICsgaSwgcmVncyk7CisJCQl2aWFfaXJxX2VuYWJsZShOVUJVU19TT1VSQ0VfQkFTRSArIGkpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCB2aWFfaXJxX2VuYWJsZShpbnQgaXJxKSB7CisJaW50IGlycV9zcmMJPSBJUlFfU1JDKGlycSk7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisJaW50IGlycV9iaXQJPSAxIDw8IGlycV9pZHg7CisKKyNpZmRlZiBERUJVR19JUlFVU0UKKwlwcmludGsoS0VSTl9ERUJVRyAidmlhX2lycV9lbmFibGUoJWQpXG4iLCBpcnEpOworI2VuZGlmCisKKwlpZiAoaXJxX3NyYyA9PSAxKSB7CisJCXZpYTFbdklFUl0gPSBpcnFfYml0IHwgMHg4MDsKKwl9IGVsc2UgaWYgKGlycV9zcmMgPT0gMikgeworCQkvKgorCQkgKiBTZXQgdlBDUiBmb3IgU0NTSSBpbnRlcnJ1cHRzIChidXQgbm90IG9uIFJCVikKKwkJICovCisJCWlmICgoaXJxX2lkeCA9PSAwKSAmJiAhcmJ2X3ByZXNlbnQpIHsKKwkJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5zY3NpX3R5cGUgPT0gTUFDX1NDU0lfT0xEKSB7CisJCQkJLyogQ0IyIChJUlEpIGluZGVwLiBpbnB1dCwgcG9zaXRpdmUgZWRnZSAqLworCQkJCS8qIENBMiAoRFJRKSBpbmRlcC4gaW5wdXQsIHBvc2l0aXZlIGVkZ2UgKi8KKwkJCQl2aWEyW3ZQQ1JdID0gMHg2NjsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ0IyIChJUlEpIGluZGVwLiBpbnB1dCwgbmVnYXRpdmUgZWRnZSAqLworCQkJCS8qIENBMiAoRFJRKSBpbmRlcC4gaW5wdXQsIG5lZ2F0aXZlIGVkZ2UgKi8KKwkJCQl2aWEyW3ZQQ1JdID0gMHgyMjsKKwkJCX0KKwkJfQorCQl2aWEyW2dJRVJdID0gaXJxX2JpdCB8IDB4ODA7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDcpIHsKKwkJaWYgKHJidl9wcmVzZW50KSB7CisJCQkvKiBlbmFibGUgdGhlIHNsb3QgaW50ZXJydXB0LiBTSUVSIHdvcmtzIGxpa2UgSUVSLiAqLworCQkJdmlhMltyU0lFUl0gPSBJRVJfU0VUX0JJVChpcnFfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgYml0IGlzIGFuIGlucHV0LCB0byBlbmFibGUgdGhlIGlycSAqLworCQkJLyogQnV0IG5vdCBvbiBQb3dlckJvb2tzLCB0aGF0J3MgQURCLi4uICovCisJCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIxKSAmJgorCQkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIyKSkgeworCQkJCXN3aXRjaChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCkKKwkJCQl7CisJCQkJCWNhc2UgTUFDX01PREVMX0lJOgorCQkJCQljYXNlIE1BQ19NT0RFTF9JSVg6CisJCQkJCWNhc2UgTUFDX01PREVMX0lJQ1g6CisJCQkJCWNhc2UgTUFDX01PREVMX1NFMzA6CisJCQkJCQl2aWEyW3ZEaXJBXSAmPSAofmlycV9iaXQgfCAweGMwKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJdmlhMlt2RGlyQV0gJj0gfmlycV9iaXQ7CisJCQkJfQorCQkJfQorCQl9CisJCW51YnVzX2FjdGl2ZSB8PSBpcnFfYml0OworCX0KK30KKwordm9pZCB2aWFfaXJxX2Rpc2FibGUoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBpcnFfYml0CT0gMSA8PCBpcnFfaWR4OworCisjaWZkZWYgREVCVUdfSVJRVVNFCisJcHJpbnRrKEtFUk5fREVCVUcgInZpYV9pcnFfZGlzYWJsZSglZClcbiIsIGlycSk7CisjZW5kaWYKKworCWlmIChpcnFfc3JjID09IDEpIHsKKwkJdmlhMVt2SUVSXSA9IGlycV9iaXQ7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDIpIHsKKwkJdmlhMltnSUVSXSA9IGlycV9iaXQ7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDcpIHsKKwkJaWYgKHJidl9wcmVzZW50KSB7CisJCQkvKiBkaXNhYmxlIHRoZSBzbG90IGludGVycnVwdC4gIFNJRVIgd29ya3MgbGlrZSBJRVIuICovCisJCQl2aWEyW3JTSUVSXSA9IElFUl9DTFJfQklUKGlycV9pZHgpOworCQl9IGVsc2UgeworCQkJLyogZGlzYWJsZSB0aGUgbnVidXMgaXJxIGJ5IGNoYW5naW5nIGRpciB0byBvdXRwdXQgKi8KKwkJCS8qIGV4Y2VwdCBvbiBQTVUgKi8KKwkJCWlmICgobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjEpICYmCisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjIpKSB7CisJCQkJdmlhMlt2RGlyQV0gfD0gaXJxX2JpdDsKKwkJCX0KKwkJfQorCQludWJ1c19hY3RpdmUgJj0gfmlycV9iaXQ7CisJfQorfQorCit2b2lkIHZpYV9pcnFfY2xlYXIoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBpcnFfYml0CT0gMSA8PCBpcnFfaWR4OworCisJaWYgKGlycV9zcmMgPT0gMSkgeworCQl2aWExW3ZJRlJdID0gaXJxX2JpdDsKKwl9IGVsc2UgaWYgKGlycV9zcmMgPT0gMikgeworCQl2aWEyW2dJRlJdID0gaXJxX2JpdCB8IHJidl9jbGVhcjsKKwl9IGVsc2UgaWYgKGlycV9zcmMgPT0gNykgeworCQkvKiBGSVhNRTogaG1tLi4gKi8KKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcgb24gdGhlIGdpdmVuCisgKiBWSUEvSVJRIGNvbWJpbmF0aW9uLgorICovCisKK2ludCB2aWFfaXJxX3BlbmRpbmcoaW50IGlycSkKK3sKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgaXJxX2JpdAk9IDEgPDwgaXJxX2lkeDsKKworCWlmIChpcnFfc3JjID09IDEpIHsKKwkJcmV0dXJuIHZpYTFbdklGUl0gJiBpcnFfYml0OworCX0gZWxzZSBpZiAoaXJxX3NyYyA9PSAyKSB7CisJCXJldHVybiB2aWEyW2dJRlJdICYgaXJxX2JpdDsKKwl9IGVsc2UgaWYgKGlycV9zcmMgPT0gNykgeworCQlyZXR1cm4gfnZpYTJbZ0J1ZkFdICYgaXJxX2JpdDsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL202OGsvbWF0aC1lbXUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5OTQwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCitFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCisKKyNFWFRSQV9BRkxBR1MgKz0gLURGUFVfRU1VX0RFQlVHCisjRVhUUkFfQ0ZMQUdTICs9IC1ERlBVX0VNVV9ERUJVRworCitvYmoteQkJOj0gZnBfZW50cnkubyBmcF9zY2FuLm8gZnBfdXRpbC5vIGZwX21vdmUubyBmcF9tb3ZlbS5vIFwKKwkJCWZwX2NvbmQubyBmcF9hcml0aC5vIGZwX2xvZy5vIGZwX3RyaWcubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2FyaXRoLmMgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfYXJpdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGYyODZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2FyaXRoLmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisKKyAgIGZwX2FyaXRoLmM6IGZsb2F0aW5nLXBvaW50IG1hdGggcm91dGluZXMgZm9yIHRoZSBMaW51eC1tNjhrCisgICBmbG9hdGluZyBwb2ludCBlbXVsYXRvci4KKworICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGF2aWQgSHVnZ2lucy1EYWluZXMuCisKKyAgIFNvbWV3aGF0IGJhc2VkIG9uIHRoZSBBbHBoYUxpbnV4IGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLCBieSBEYXZpZAorICAgTW9zYmVyZ2VyLVRhbmcuCisKKyAgIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgcmVkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQKKyAgIHlvdXIgY29udmVuaWVuY2UuCisgKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgIm11bHRpX2FyaXRoLmgiCisjaW5jbHVkZSAiZnBfYXJpdGguaCIKKworY29uc3Qgc3RydWN0IGZwX2V4dCBmcF9RTmFOID0KK3sKKwkuZXhwID0gMHg3ZmZmLAorCS5tYW50ID0geyAubTY0ID0gfjAgfQorfTsKKworY29uc3Qgc3RydWN0IGZwX2V4dCBmcF9JbmYgPQoreworCS5leHAgPSAweDdmZmYsCit9OworCisvKiBsZXQncyBzdGFydCB3aXRoIHRoZSBlYXN5IG9uZXMgKi8KKworc3RydWN0IGZwX2V4dCAqCitmcF9mYWJzKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZmFic1xuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlkZXN0LT5zaWduID0gMDsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZuZWcoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmbmVnXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCWRlc3QtPnNpZ24gPSAhZGVzdC0+c2lnbjsKKworCXJldHVybiBkZXN0OworfQorCisvKiBOb3csIHRoZSBzbGlnaHRseSBoYXJkZXIgb25lcyAqLworCisvKiBmcF9mYWRkOiBJbXBsZW1lbnRzIHRoZSBrZXJuZWwgb2YgdGhlIEZBREQsIEZTQURELCBGREFERCwgRlNVQiwKKyAgIEZEU1VCLCBhbmQgRkNNUCBpbnN0cnVjdGlvbnMuICovCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmFkZChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJaW50IGRpZmY7CisKKwlkcHJpbnQoUElOU1RSLCAiZmFkZFxuIik7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCWlmIChJU19JTkYoZGVzdCkpIHsKKwkJLyogaW5maW5pdHkgLSBpbmZpbml0eSA9PSBOYU4gKi8KKwkJaWYgKElTX0lORihzcmMpICYmIChzcmMtPnNpZ24gIT0gZGVzdC0+c2lnbikpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihzcmMpKSB7CisJCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CisJCXJldHVybiBkZXN0OworCX0KKworCWlmIChJU19aRVJPKGRlc3QpKSB7CisJCWlmIChJU19aRVJPKHNyYykpIHsKKwkJCWlmIChzcmMtPnNpZ24gIT0gZGVzdC0+c2lnbikgeworCQkJCWlmIChGUERBVEEtPnJuZCA9PSBGUENSX1JPVU5EX1JNKQorCQkJCQlkZXN0LT5zaWduID0gMTsKKwkJCQllbHNlCisJCQkJCWRlc3QtPnNpZ24gPSAwOworCQkJfQorCQl9IGVsc2UKKwkJCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CisJCXJldHVybiBkZXN0OworCX0KKworCWRlc3QtPmxvd21hbnQgPSBzcmMtPmxvd21hbnQgPSAwOworCisJaWYgKChkaWZmID0gZGVzdC0+ZXhwIC0gc3JjLT5leHApID4gMCkKKwkJZnBfZGVub3JtYWxpemUoc3JjLCBkaWZmKTsKKwllbHNlIGlmICgoZGlmZiA9IC1kaWZmKSA+IDApCisJCWZwX2Rlbm9ybWFsaXplKGRlc3QsIGRpZmYpOworCisJaWYgKGRlc3QtPnNpZ24gPT0gc3JjLT5zaWduKSB7CisJCWlmIChmcF9hZGRtYW50KGRlc3QsIHNyYykpCisJCQlpZiAoIWZwX2FkZGNhcnJ5KGRlc3QpKQorCQkJCXJldHVybiBkZXN0OworCX0gZWxzZSB7CisJCWlmIChkZXN0LT5tYW50Lm02NCA8IHNyYy0+bWFudC5tNjQpIHsKKwkJCWZwX3N1Ym1hbnQoZGVzdCwgc3JjLCBkZXN0KTsKKwkJCWRlc3QtPnNpZ24gPSAhZGVzdC0+c2lnbjsKKwkJfSBlbHNlCisJCQlmcF9zdWJtYW50KGRlc3QsIGRlc3QsIHNyYyk7CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisKKy8qIGZwX2ZzdWI6IEltcGxlbWVudHMgdGhlIGtlcm5lbCBvZiB0aGUgRlNVQiwgRlNTVUIsIGFuZCBGRFNVQgorICAgaW5zdHJ1Y3Rpb25zLgorCisgICBSZW1lbWJlciB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGluIGFzc2VtYmxlci1zeW50YXggb3JkZXIhICovCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnN1YihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZzdWIgIik7CisKKwlzcmMtPnNpZ24gPSAhc3JjLT5zaWduOworCXJldHVybiBmcF9mYWRkKGRlc3QsIHNyYyk7Cit9CisKKworc3RydWN0IGZwX2V4dCAqCitmcF9mY21wKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZmNtcCAiKTsKKworCUZQREFUQS0+dGVtcFsxXSA9ICpkZXN0OworCXNyYy0+c2lnbiA9ICFzcmMtPnNpZ247CisJcmV0dXJuIGZwX2ZhZGQoJkZQREFUQS0+dGVtcFsxXSwgc3JjKTsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mdHN0KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZnRzdFxuIik7CisKKwkodm9pZClkZXN0OworCisJcmV0dXJuIHNyYzsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbXVsKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1bmlvbiBmcF9tYW50MTI4IHRlbXA7CisJaW50IGV4cDsKKworCWRwcmludChQSU5TVFIsICJmbXVsXG4iKTsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHNpZ24gbm93LCBhcyBpdCdzIG5lY2Vzc2FyeSBmb3IgaW5maW5pdGllcyAqLworCWRlc3QtPnNpZ24gPSBzcmMtPnNpZ24gXiBkZXN0LT5zaWduOworCisJLyogSGFuZGxlIGluZmluaXRpZXMgKi8KKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCWlmIChJU19aRVJPKHNyYykpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihzcmMpKSB7CisJCWlmIChJU19aRVJPKGRlc3QpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJZWxzZQorCQkJZnBfY29weV9leHQoZGVzdCwgc3JjKTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJLyogT2YgY291cnNlLCBhcyB3ZSBhbGwga25vdywgemVybyAqIGFueXRoaW5nID0gemVyby4gIFlvdSBtYXkKKwkgICBub3QgaGF2ZSBrbm93biB0aGF0IGl0IG1pZ2h0IGJlIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUKKwkgICB6ZXJvLi4uICovCisJaWYgKElTX1pFUk8oZGVzdCkgfHwgSVNfWkVSTyhzcmMpKSB7CisJCWRlc3QtPmV4cCA9IDA7CisJCWRlc3QtPm1hbnQubTY0ID0gMDsKKwkJZGVzdC0+bG93bWFudCA9IDA7CisKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJZXhwID0gZGVzdC0+ZXhwICsgc3JjLT5leHAgLSAweDNmZmU7CisKKwkvKiBzaGlmdCB1cCB0aGUgbWFudGlzc2EgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLAorCSAgIHNvIHRoYXQgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCwgdGhpcyBtYWtlcyB0aGUKKwkgICBzaGlmdCBvZiB0aGUgcmVzdWx0IGJlbG93IGVhc2llciAqLworCWlmICgobG9uZylkZXN0LT5tYW50Lm0zMlswXSA+PSAwKQorCQlleHAgLT0gZnBfb3Zlcm5vcm1hbGl6ZShkZXN0KTsKKwlpZiAoKGxvbmcpc3JjLT5tYW50Lm0zMlswXSA+PSAwKQorCQlleHAgLT0gZnBfb3Zlcm5vcm1hbGl6ZShzcmMpOworCisJLyogbm93LCBkbyBhIDY0LWJpdCBtdWx0aXBseSB3aXRoIGV4cGFuc2lvbiAqLworCWZwX211bHRpcGx5bWFudCgmdGVtcCwgZGVzdCwgc3JjKTsKKworCS8qIG5vcm1hbGl6ZSBpdCBiYWNrIHRvIDY0IGJpdHMgYW5kIHN0dWZmIGl0IGJhY2sgaW50byB0aGUKKwkgICBkZXN0aW5hdGlvbiBzdHJ1Y3QgKi8KKwlpZiAoKGxvbmcpdGVtcC5tMzJbMF0gPiAwKSB7CisJCWV4cC0tOworCQlmcF9wdXRtYW50MTI4KGRlc3QsICZ0ZW1wLCAxKTsKKwl9IGVsc2UKKwkJZnBfcHV0bWFudDEyOChkZXN0LCAmdGVtcCwgMCk7CisKKwlpZiAoZXhwID49IDB4N2ZmZikgeworCQlmcF9zZXRfb3ZyZmx3KGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJZGVzdC0+ZXhwID0gZXhwOworCWlmIChleHAgPCAwKSB7CisJCWZwX3NldF9zcihGUFNSX0VYQ19VTkZMKTsKKwkJZnBfZGVub3JtYWxpemUoZGVzdCwgLWV4cCk7CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisKKy8qIGZwX2ZkaXY6IEltcGxlbWVudHMgdGhlICJrZXJuZWwiIG9mIHRoZSBGRElWLCBGU0RJViwgRkRESVYgYW5kCisgICBGU0dMRElWIGluc3RydWN0aW9ucy4KKworICAgTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgb3BlcmFuZHMgaXMgY291bnRlci1pbnR1aXRpdmU6IGluc3RlYWQKKyAgIG9mIHNyYyAvIGRlc3QsIHRoZSByZXN1bHQgaXMgYWN0dWFsbHkgZGVzdCAvIHNyYy4gKi8KKworc3RydWN0IGZwX2V4dCAqCitmcF9mZGl2KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1bmlvbiBmcF9tYW50MTI4IHRlbXA7CisJaW50IGV4cDsKKworCWRwcmludChQSU5TVFIsICJmZGl2XG4iKTsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHNpZ24gbm93LCBhcyBpdCdzIG5lY2Vzc2FyeSBmb3IgaW5maW5pdGllcyAqLworCWRlc3QtPnNpZ24gPSBzcmMtPnNpZ24gXiBkZXN0LT5zaWduOworCisJLyogSGFuZGxlIGluZmluaXRpZXMgKi8KKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCS8qIGluZmluaXR5IC8gaW5maW5pdHkgPSBOYU4gKHF1aWV0LCBhcyBhbHdheXMpICovCisJCWlmIChJU19JTkYoc3JjKSkKKwkJCWZwX3NldF9uYW4oZGVzdCk7CisJCS8qIGluZmluaXR5IC8gYW55dGhpbmcgZWxzZSA9IGluZmluaXR5ICh3aXRoIGFwcHJvcHJhdGUgc2lnbikgKi8KKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoc3JjKSkgeworCQkvKiBhbnl0aGluZyAvIGluZmluaXR5ID0gemVybyAod2l0aCBhcHByb3ByaWF0ZSBzaWduKSAqLworCQlkZXN0LT5leHAgPSAwOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisJCWRlc3QtPmxvd21hbnQgPSAwOworCisJCXJldHVybiBkZXN0OworCX0KKworCS8qIHplcm9lcyAqLworCWlmIChJU19aRVJPKGRlc3QpKSB7CisJCS8qIHplcm8gLyB6ZXJvID0gTmFOICovCisJCWlmIChJU19aRVJPKHNyYykpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQkvKiB6ZXJvIC8gYW55dGhpbmcgZWxzZSA9IHplcm8gKi8KKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19aRVJPKHNyYykpIHsKKwkJLyogYW55dGhpbmcgLyB6ZXJvID0gaW5maW5pdHkgKHdpdGggYXBwcm9wcmlhdGUgc2lnbikgKi8KKwkJZnBfc2V0X3NyKEZQU1JfRVhDX0RaKTsKKwkJZGVzdC0+ZXhwID0gMHg3ZmZmOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJZXhwID0gZGVzdC0+ZXhwIC0gc3JjLT5leHAgKyAweDNmZmY7CisKKwkvKiBzaGlmdCB1cCB0aGUgbWFudGlzc2EgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLAorCSAgIHNvIHRoYXQgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCwgdGhpcyBtYWtlcyBsb3RzCisJICAgb2YgdGhpbmdzIGJlbG93IGVhc2llciAqLworCWlmICgobG9uZylkZXN0LT5tYW50Lm0zMlswXSA+PSAwKQorCQlleHAgLT0gZnBfb3Zlcm5vcm1hbGl6ZShkZXN0KTsKKwlpZiAoKGxvbmcpc3JjLT5tYW50Lm0zMlswXSA+PSAwKQorCQlleHAgLT0gZnBfb3Zlcm5vcm1hbGl6ZShzcmMpOworCisJLyogbm93LCBkbyB0aGUgNjQtYml0IGRpdmlkZSAqLworCWZwX2RpdmlkZW1hbnQoJnRlbXAsIGRlc3QsIHNyYyk7CisKKwkvKiBub3JtYWxpemUgaXQgYmFjayB0byA2NCBiaXRzIGFuZCBzdHVmZiBpdCBiYWNrIGludG8gdGhlCisJICAgZGVzdGluYXRpb24gc3RydWN0ICovCisJaWYgKCF0ZW1wLm0zMlswXSkgeworCQlleHAtLTsKKwkJZnBfcHV0bWFudDEyOChkZXN0LCAmdGVtcCwgMzIpOworCX0gZWxzZQorCQlmcF9wdXRtYW50MTI4KGRlc3QsICZ0ZW1wLCAzMSk7CisKKwlpZiAoZXhwID49IDB4N2ZmZikgeworCQlmcF9zZXRfb3ZyZmx3KGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJZGVzdC0+ZXhwID0gZXhwOworCWlmIChleHAgPCAwKSB7CisJCWZwX3NldF9zcihGUFNSX0VYQ19VTkZMKTsKKwkJZnBfZGVub3JtYWxpemUoZGVzdCwgLWV4cCk7CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNnbG11bChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJaW50IGV4cDsKKworCWRwcmludChQSU5TVFIsICJmc2dsbXVsXG4iKTsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHNpZ24gbm93LCBhcyBpdCdzIG5lY2Vzc2FyeSBmb3IgaW5maW5pdGllcyAqLworCWRlc3QtPnNpZ24gPSBzcmMtPnNpZ24gXiBkZXN0LT5zaWduOworCisJLyogSGFuZGxlIGluZmluaXRpZXMgKi8KKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCWlmIChJU19aRVJPKHNyYykpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihzcmMpKSB7CisJCWlmIChJU19aRVJPKGRlc3QpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJZWxzZQorCQkJZnBfY29weV9leHQoZGVzdCwgc3JjKTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJLyogT2YgY291cnNlLCBhcyB3ZSBhbGwga25vdywgemVybyAqIGFueXRoaW5nID0gemVyby4gIFlvdSBtYXkKKwkgICBub3QgaGF2ZSBrbm93biB0aGF0IGl0IG1pZ2h0IGJlIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUKKwkgICB6ZXJvLi4uICovCisJaWYgKElTX1pFUk8oZGVzdCkgfHwgSVNfWkVSTyhzcmMpKSB7CisJCWRlc3QtPmV4cCA9IDA7CisJCWRlc3QtPm1hbnQubTY0ID0gMDsKKwkJZGVzdC0+bG93bWFudCA9IDA7CisKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJZXhwID0gZGVzdC0+ZXhwICsgc3JjLT5leHAgLSAweDNmZmU7CisKKwkvKiBkbyBhIDMyLWJpdCBtdWx0aXBseSAqLworCWZwX211bDY0KGRlc3QtPm1hbnQubTMyWzBdLCBkZXN0LT5tYW50Lm0zMlsxXSwKKwkJIGRlc3QtPm1hbnQubTMyWzBdICYgMHhmZmZmZmYwMCwKKwkJIHNyYy0+bWFudC5tMzJbMF0gJiAweGZmZmZmZjAwKTsKKworCWlmIChleHAgPj0gMHg3ZmZmKSB7CisJCWZwX3NldF9vdnJmbHcoZGVzdCk7CisJCXJldHVybiBkZXN0OworCX0KKwlkZXN0LT5leHAgPSBleHA7CisJaWYgKGV4cCA8IDApIHsKKwkJZnBfc2V0X3NyKEZQU1JfRVhDX1VORkwpOworCQlmcF9kZW5vcm1hbGl6ZShkZXN0LCAtZXhwKTsKKwl9CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2dsZGl2KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlpbnQgZXhwOworCXVuc2lnbmVkIGxvbmcgcXVvdCwgcmVtOworCisJZHByaW50KFBJTlNUUiwgImZzZ2xkaXZcbiIpOworCisJZnBfZHlhZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGNvcnJlY3Qgc2lnbiBub3csIGFzIGl0J3MgbmVjZXNzYXJ5IGZvciBpbmZpbml0aWVzICovCisJZGVzdC0+c2lnbiA9IHNyYy0+c2lnbiBeIGRlc3QtPnNpZ247CisKKwkvKiBIYW5kbGUgaW5maW5pdGllcyAqLworCWlmIChJU19JTkYoZGVzdCkpIHsKKwkJLyogaW5maW5pdHkgLyBpbmZpbml0eSA9IE5hTiAocXVpZXQsIGFzIGFsd2F5cykgKi8KKwkJaWYgKElTX0lORihzcmMpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJLyogaW5maW5pdHkgLyBhbnl0aGluZyBlbHNlID0gaW5maW5pdHkgKHdpdGggYXBwcm9wcmF0ZSBzaWduKSAqLworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihzcmMpKSB7CisJCS8qIGFueXRoaW5nIC8gaW5maW5pdHkgPSB6ZXJvICh3aXRoIGFwcHJvcHJpYXRlIHNpZ24pICovCisJCWRlc3QtPmV4cCA9IDA7CisJCWRlc3QtPm1hbnQubTY0ID0gMDsKKwkJZGVzdC0+bG93bWFudCA9IDA7CisKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJLyogemVyb2VzICovCisJaWYgKElTX1pFUk8oZGVzdCkpIHsKKwkJLyogemVybyAvIHplcm8gPSBOYU4gKi8KKwkJaWYgKElTX1pFUk8oc3JjKSkKKwkJCWZwX3NldF9uYW4oZGVzdCk7CisJCS8qIHplcm8gLyBhbnl0aGluZyBlbHNlID0gemVybyAqLworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX1pFUk8oc3JjKSkgeworCQkvKiBhbnl0aGluZyAvIHplcm8gPSBpbmZpbml0eSAod2l0aCBhcHByb3ByaWF0ZSBzaWduKSAqLworCQlmcF9zZXRfc3IoRlBTUl9FWENfRFopOworCQlkZXN0LT5leHAgPSAweDdmZmY7CisJCWRlc3QtPm1hbnQubTY0ID0gMDsKKworCQlyZXR1cm4gZGVzdDsKKwl9CisKKwlleHAgPSBkZXN0LT5leHAgLSBzcmMtPmV4cCArIDB4M2ZmZjsKKworCWRlc3QtPm1hbnQubTMyWzBdICY9IDB4ZmZmZmZmMDA7CisJc3JjLT5tYW50Lm0zMlswXSAmPSAweGZmZmZmZjAwOworCisJLyogZG8gdGhlIDMyLWJpdCBkaXZpZGUgKi8KKwlpZiAoZGVzdC0+bWFudC5tMzJbMF0gPj0gc3JjLT5tYW50Lm0zMlswXSkgeworCQlmcF9zdWI2NChkZXN0LT5tYW50LCBzcmMtPm1hbnQpOworCQlmcF9kaXY2NChxdW90LCByZW0sIGRlc3QtPm1hbnQubTMyWzBdLCAwLCBzcmMtPm1hbnQubTMyWzBdKTsKKwkJZGVzdC0+bWFudC5tMzJbMF0gPSAweDgwMDAwMDAwIHwgKHF1b3QgPj4gMSk7CisJCWRlc3QtPm1hbnQubTMyWzFdID0gKHF1b3QgJiAxKSB8IHJlbTsJLyogb25seSBmb3Igcm91bmRpbmcgKi8KKwl9IGVsc2UgeworCQlmcF9kaXY2NChxdW90LCByZW0sIGRlc3QtPm1hbnQubTMyWzBdLCAwLCBzcmMtPm1hbnQubTMyWzBdKTsKKwkJZGVzdC0+bWFudC5tMzJbMF0gPSBxdW90OworCQlkZXN0LT5tYW50Lm0zMlsxXSA9IHJlbTsJCS8qIG9ubHkgZm9yIHJvdW5kaW5nICovCisJCWV4cC0tOworCX0KKworCWlmIChleHAgPj0gMHg3ZmZmKSB7CisJCWZwX3NldF9vdnJmbHcoZGVzdCk7CisJCXJldHVybiBkZXN0OworCX0KKwlkZXN0LT5leHAgPSBleHA7CisJaWYgKGV4cCA8IDApIHsKKwkJZnBfc2V0X3NyKEZQU1JfRVhDX1VORkwpOworCQlmcF9kZW5vcm1hbGl6ZShkZXN0LCAtZXhwKTsKKwl9CisKKwlyZXR1cm4gZGVzdDsKK30KKworLyogZnBfcm91bmRpbnQ6IEludGVybmFsIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciB1c2UgYnkgc2V2ZXJhbCBvZiB0aGVzZQorICAgZW11bGF0ZWQgaW5zdHJ1Y3Rpb25zLgorCisgICBUaGlzIG9uZSByb3VuZHMgb2ZmIHRoZSBmcmFjdGlvbmFsIHBhcnQgdXNpbmcgdGhlIHJvdW5kaW5nIG1vZGUKKyAgIHNwZWNpZmllZC4gKi8KKworc3RhdGljIHZvaWQgZnBfcm91bmRpbnQoc3RydWN0IGZwX2V4dCAqZGVzdCwgaW50IG1vZGUpCit7CisJdW5pb24gZnBfbWFudDY0IG9sZG1hbnQ7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKCFmcF9ub3JtYWxpemVfZXh0KGRlc3QpKQorCQlyZXR1cm47CisKKwkvKiBpbmZpbml0aWVzIGFuZCB6ZXJvZXMgKi8KKwlpZiAoSVNfSU5GKGRlc3QpIHx8IElTX1pFUk8oZGVzdCkpCisJCXJldHVybjsKKworCS8qIGZpcnN0IHRydW5jYXRlIHRoZSBsb3dlciBiaXRzICovCisJb2xkbWFudCA9IGRlc3QtPm1hbnQ7CisJc3dpdGNoIChkZXN0LT5leHApIHsKKwljYXNlIDAgLi4uIDB4M2ZmZToKKwkJZGVzdC0+bWFudC5tNjQgPSAwOworCQlicmVhazsKKwljYXNlIDB4M2ZmZiAuLi4gMHg0MDFlOgorCQlkZXN0LT5tYW50Lm0zMlswXSAmPSAweGZmZmZmZmZmVSA8PCAoMHg0MDFlIC0gZGVzdC0+ZXhwKTsKKwkJZGVzdC0+bWFudC5tMzJbMV0gPSAwOworCQlpZiAob2xkbWFudC5tNjQgPT0gZGVzdC0+bWFudC5tNjQpCisJCQlyZXR1cm47CisJCWJyZWFrOworCWNhc2UgMHg0MDFmIC4uLiAweDQwM2U6CisJCWRlc3QtPm1hbnQubTMyWzFdICY9IDB4ZmZmZmZmZmZVIDw8ICgweDQwM2UgLSBkZXN0LT5leHApOworCQlpZiAob2xkbWFudC5tMzJbMV0gPT0gZGVzdC0+bWFudC5tMzJbMV0pCisJCQlyZXR1cm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJZnBfc2V0X3NyKEZQU1JfRVhDX0lORVgyKTsKKworCS8qIFdlIG1pZ2h0IHdhbnQgdG8gbm9ybWFsaXplIHVwd2FyZHMgaGVyZS4uLiBob3dldmVyLCBzaW5jZQorCSAgIHdlIGtub3cgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBvdXRwdXQgb2YgZnBfZmRpdiwKKwkgICBvciB3aXRoIHRoZSBpbnB1dCB0byBmcF9maW50IG9yIGZwX2ZpbnRyeiwgYW5kIHRoZSBpbnB1dHMKKwkgICB0byBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBlaXRoZXIgbm9ybWFsIG9yIGRlbm9ybWFsaXplZAorCSAgIChubyBzdWJub3JtYWxzIGFsbG93ZWQhKSwgdGhlcmUncyByZWFsbHkgbm8gbmVlZC4KKworCSAgIEluIHRoZSBjYXNlIG9mIGZwX2ZkaXYsIG9ic2VydmUgdGhhdCAweDgwMDAwMDAwIC8gMHhmZmZmID0KKwkgICAweGZmZmY4MDAwLCBhbmQgdGhlIHNhbWUgaG9sZHMgZm9yIDEyOC1iaXQgLyA2NC1iaXQuIChpLmUuIHRoZQorCSAgIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbCBkaXZpZGVuZCBhbmQgdGhlIGxhcmdlc3QgcG9zc2libGUgbm9ybWFsCisJICAgZGl2aXNvciB3aWxsIHN0aWxsIHByb2R1Y2UgYSBub3JtYWwgcXVvdGllbnQsIHRoZXJlZm9yZSwgKG5vcm1hbAorCSAgIDw8IDY0KSAvIG5vcm1hbCBpcyBub3JtYWwgaW4gYWxsIGNhc2VzKSAqLworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBGUENSX1JPVU5EX1JOOgorCQlzd2l0Y2ggKGRlc3QtPmV4cCkgeworCQljYXNlIDAgLi4uIDB4M2ZmZDoKKwkJCXJldHVybjsKKwkJY2FzZSAweDNmZmU6CisJCQkvKiBBcyBub3RlZCBhYm92ZSwgdGhlIGlucHV0IGlzIGFsd2F5cyBub3JtYWwsIHNvIHRoZQorCQkJICAgZ3VhcmQgYml0IChiaXQgNjMpIGlzIGFsd2F5cyBzZXQuICB0aGVyZWZvcmUsIHRoZQorCQkJICAgb25seSBjYXNlIGluIHdoaWNoIHdlIHdpbGwgTk9UIHJvdW5kIHRvIDEuMCBpcyB3aGVuCisJCQkgICB0aGUgaW5wdXQgaXMgZXhhY3RseSAwLjUuICovCisJCQlpZiAob2xkbWFudC5tNjQgPT0gKDFVTEwgPDwgNjMpKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQljYXNlIDB4M2ZmZiAuLi4gMHg0MDFkOgorCQkJbWFzayA9IDEgPDwgKDB4NDAxZCAtIGRlc3QtPmV4cCk7CisJCQlpZiAoIShvbGRtYW50Lm0zMlswXSAmIG1hc2spKQorCQkJCXJldHVybjsKKwkJCWlmIChvbGRtYW50Lm0zMlswXSAmIChtYXNrIDw8IDEpKQorCQkJCWJyZWFrOworCQkJaWYgKCEob2xkbWFudC5tMzJbMF0gPDwgKGRlc3QtPmV4cCAtIDB4M2ZmZCkpICYmCisJCQkJCSFvbGRtYW50Lm0zMlsxXSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJY2FzZSAweDQwMWU6CisJCQlpZiAoIShvbGRtYW50Lm0zMlsxXSA+PSAwKSkKKwkJCQlyZXR1cm47CisJCQlpZiAob2xkbWFudC5tMzJbMF0gJiAxKQorCQkJCWJyZWFrOworCQkJaWYgKCEob2xkbWFudC5tMzJbMV0gPDwgMSkpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MDFmIC4uLiAweDQwM2Q6CisJCQltYXNrID0gMSA8PCAoMHg0MDNkIC0gZGVzdC0+ZXhwKTsKKwkJCWlmICghKG9sZG1hbnQubTMyWzFdICYgbWFzaykpCisJCQkJcmV0dXJuOworCQkJaWYgKG9sZG1hbnQubTMyWzFdICYgKG1hc2sgPDwgMSkpCisJCQkJYnJlYWs7CisJCQlpZiAoIShvbGRtYW50Lm0zMlsxXSA8PCAoZGVzdC0+ZXhwIC0gMHg0MDFkKSkpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGUENSX1JPVU5EX1JaOgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJaWYgKGRlc3QtPnNpZ24gXiAobW9kZSAtIEZQQ1JfUk9VTkRfUk0pKQorCQkJYnJlYWs7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRlc3QtPmV4cCkgeworCWNhc2UgMCAuLi4gMHgzZmZlOgorCQlkZXN0LT5leHAgPSAweDNmZmY7CisJCWRlc3QtPm1hbnQubTY0ID0gMVVMTCA8PCA2MzsKKwkJYnJlYWs7CisJY2FzZSAweDNmZmYgLi4uIDB4NDAxZToKKwkJbWFzayA9IDEgPDwgKDB4NDAxZSAtIGRlc3QtPmV4cCk7CisJCWlmIChkZXN0LT5tYW50Lm0zMlswXSArPSBtYXNrKQorCQkJYnJlYWs7CisJCWRlc3QtPm1hbnQubTMyWzBdID0gMHg4MDAwMDAwMDsKKwkJZGVzdC0+ZXhwKys7CisJCWJyZWFrOworCWNhc2UgMHg0MDFmIC4uLiAweDQwM2U6CisJCW1hc2sgPSAxIDw8ICgweDQwM2UgLSBkZXN0LT5leHApOworCQlpZiAoZGVzdC0+bWFudC5tMzJbMV0gKz0gbWFzaykKKwkJCWJyZWFrOworCQlpZiAoZGVzdC0+bWFudC5tMzJbMF0gKz0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQlkZXN0LT5tYW50Lm0zMlswXSA9IDB4ODAwMDAwMDA7CisgICAgICAgICAgICAgICAgZGVzdC0+ZXhwKys7CisJCWJyZWFrOworCX0KK30KKworLyogbW9kcmVtX2tlcm5lbDogSW1wbGVtZW50YXRpb24gb2YgdGhlIEZSRU0gYW5kIEZNT0QgaW5zdHJ1Y3Rpb25zCisgICAod2hpY2ggYXJlIGV4YWN0bHkgdGhlIHNhbWUsIGV4Y2VwdCBmb3IgdGhlIHJvdW5kaW5nIHVzZWQgb24gdGhlCisgICBpbnRlcm1lZGlhdGUgdmFsdWUpICovCisKK3N0YXRpYyBzdHJ1Y3QgZnBfZXh0ICoKK21vZHJlbV9rZXJuZWwoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZnBfZXh0IHRtcDsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogSW5maW5pdGllcyBhbmQgemVyb3MgKi8KKwlpZiAoSVNfSU5GKGRlc3QpIHx8IElTX1pFUk8oc3JjKSkgeworCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX1pFUk8oZGVzdCkgfHwgSVNfSU5GKHNyYykpCisJCXJldHVybiBkZXN0OworCisJLyogRklYTUU6IHRoZXJlIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBzbWFydGVyIHdheSB0byBkbyB0aGlzICovCisJZnBfY29weV9leHQoJnRtcCwgZGVzdCk7CisJZnBfZmRpdigmdG1wLCBzcmMpOwkJLyogTk9URTogc3JjIG1pZ2h0IGJlIG1vZGlmaWVkICovCisJZnBfcm91bmRpbnQoJnRtcCwgbW9kZSk7CisJZnBfZm11bCgmdG1wLCBzcmMpOworCWZwX2ZzdWIoZGVzdCwgJnRtcCk7CisKKwkvKiBzZXQgdGhlIHF1b3RpZW50IGJ5dGUgKi8KKwlmcF9zZXRfcXVvdGllbnQoKGRlc3QtPm1hbnQubTY0ICYgMHg3ZikgfCAoZGVzdC0+c2lnbiA8PCA3KSk7CisJcmV0dXJuIGRlc3Q7Cit9CisKKy8qIGZwX2Ztb2Q6IEltcGxlbWVudHMgdGhlIGtlcm5lbCBvZiB0aGUgRk1PRCBpbnN0cnVjdGlvbi4KKworICAgQWdhaW4sIHRoZSBhcmd1bWVudCBvcmRlciBpcyBiYWNrd2FyZHMuICBUaGUgcmVzdWx0LCBhcyBkZWZpbmVkIGluCisgICB0aGUgTW90b3JvbGEgbWFudWFscywgaXM6CisKKyAgIGZtb2Qoc3JjLGRlc3QpID0gKGRlc3QgLSAoc3JjICogZmxvb3IoZGVzdCAvIHNyYykpKSAqLworCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Ztb2Qoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmbW9kXG4iKTsKKwlyZXR1cm4gbW9kcmVtX2tlcm5lbChkZXN0LCBzcmMsIEZQQ1JfUk9VTkRfUlopOworfQorCisvKiBmcF9mcmVtOiBJbXBsZW1lbnRzIHRoZSBrZXJuZWwgb2YgdGhlIEZSRU0gaW5zdHJ1Y3Rpb24uCisKKyAgIGZyZW0oc3JjLGRlc3QpID0gKGRlc3QgLSAoc3JjICogcm91bmQoZGVzdCAvIHNyYykpKQorICovCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnJlbShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZyZW1cbiIpOworCXJldHVybiBtb2RyZW1fa2VybmVsKGRlc3QsIHNyYywgRlBDUl9ST1VORF9STik7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmludChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZpbnRcbiIpOworCisJZnBfY29weV9leHQoZGVzdCwgc3JjKTsKKworCWZwX3JvdW5kaW50KGRlc3QsIEZQREFUQS0+cm5kKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZpbnRyeihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZpbnRyelxuIik7CisKKwlmcF9jb3B5X2V4dChkZXN0LCBzcmMpOworCisJZnBfcm91bmRpbnQoZGVzdCwgRlBDUl9ST1VORF9SWik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2NhbGUoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWludCBzY2FsZSwgb2xkcm91bmQ7CisKKwlkcHJpbnQoUElOU1RSLCAiZnNjYWxlXG4iKTsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogSW5maW5pdGllcyAqLworCWlmIChJU19JTkYoc3JjKSkgeworCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwkvKiB6ZXJvZXMgKi8KKwlpZiAoSVNfWkVSTyhzcmMpIHx8IElTX1pFUk8oZGVzdCkpCisJCXJldHVybiBkZXN0OworCisJLyogU291cmNlIGV4cG9uZW50IG91dCBvZiByYW5nZSAqLworCWlmIChzcmMtPmV4cCA+PSAweDQwMGMpIHsKKwkJZnBfc2V0X292cmZsdyhkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJLyogc3JjIG11c3QgYmUgcm91bmRlZCB3aXRoIHJvdW5kIHRvIHplcm8uICovCisJb2xkcm91bmQgPSBGUERBVEEtPnJuZDsKKwlGUERBVEEtPnJuZCA9IEZQQ1JfUk9VTkRfUlo7CisJc2NhbGUgPSBmcF9jb252X2V4dDJsb25nKHNyYyk7CisJRlBEQVRBLT5ybmQgPSBvbGRyb3VuZDsKKworCS8qIG5ldyBleHBvbmVudCAqLworCXNjYWxlICs9IGRlc3QtPmV4cDsKKworCWlmIChzY2FsZSA+PSAweDdmZmYpIHsKKwkJZnBfc2V0X292cmZsdyhkZXN0KTsKKwl9IGVsc2UgaWYgKHNjYWxlIDw9IDApIHsKKwkJZnBfc2V0X3NyKEZQU1JfRVhDX1VORkwpOworCQlmcF9kZW5vcm1hbGl6ZShkZXN0LCAtc2NhbGUpOworCX0gZWxzZQorCQlkZXN0LT5leHAgPSBzY2FsZTsKKworCXJldHVybiBkZXN0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfYXJpdGguaCBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9hcml0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzNmODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfYXJpdGguaApAQCAtMCwwICsxLDUyIEBACisvKgorCisgICBmcF9hcml0aC5oOiBmbG9hdGluZy1wb2ludCBtYXRoIHJvdXRpbmVzIGZvciB0aGUgTGludXgtbTY4aworICAgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IuCisKKyAgIENvcHlyaWdodCAoYykgMTk5OCBEYXZpZCBIdWdnaW5zLURhaW5lcy4KKworICAgU29tZXdoYXQgYmFzZWQgb24gdGhlIEFscGhhTGludXggZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IsIGJ5IERhdmlkCisgICBNb3NiZXJnZXItVGFuZy4KKworICAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdAorICAgeW91ciBjb252ZW5pZW5jZS4KKworICovCisKKyNpZm5kZWYgRlBfQVJJVEhfSAorI2RlZmluZSBGUF9BUklUSF9ICisKKy8qIGVhc3kgb25lcyAqLworc3RydWN0IGZwX2V4dCAqCitmcF9mYWJzKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZuZWcoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKKworLyogc3RyYWlnaHRmb3J3YXJkIGFyaXRobWV0aWMgKi8KK3N0cnVjdCBmcF9leHQgKgorZnBfZmFkZChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mc3ViKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZjbXAoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZnRzdChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mbXVsKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZkaXYoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKKworLyogb25lcyB0aGF0IGRvIHJvdW5kaW5nIGFuZCBpbnRlZ2VyIGNvbnZlcnNpb25zICovCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Ztb2Qoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZnJlbShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9maW50KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZpbnRyeihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mc2NhbGUoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKKworI2VuZGlmCS8qIEZQX0FSSVRIX19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfY29uZC5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2NvbmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFlOGIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2NvbmQuUwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIGZwX2NvbmQuUworICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgImZwX2RlY29kZS5oIgorCisJLmdsb2JsCWZwX2ZzY2MsIGZwX2ZiY2N3LCBmcF9mYmNjbAorCisjaWZkZWYgRlBVX0VNVV9ERUJVRworZnBfZm5vcDoKKwlwcmludGYJUERFQ09ERSwiZm5vcFxuIgorCWpyYQlmcF9lbmQKKyNlbHNlCisjZGVmaW5lIGZwX2Zub3AgZnBfZW5kCisjZW5kaWYKKworZnBfZmJjY3c6CisJdHN0LncJJWQyCisJamVxCWZwX2Zub3AKKwlwcmludGYJUERFQ09ERSwiZmJjY3cgIgorCWZwX2dldF9wYyAlYTAKKwlsZWEJKC0yLCVhMCwlZDIudyksJWEwCisJanJhCTFmCisKK2ZwX2ZiY2NsOgorCXByaW50ZglQREVDT0RFLCJmYmNjbCAiCisJZnBfZ2V0X3BjICVhMAorCW1vdmUubAklZDIsJWQwCisJc3dhcAklZDAKKwlmcF9nZXRfaW5zdHJfd29yZCAlZDAsZnBfZXJyX3VhMQorCWxlYQkoLTIsJWEwLCVkMC5sKSwlYTAKKzE6CXByaW50ZglQREVDT0RFLCIleCIsMSwlYTAKKwltb3ZlLmwJJWQyLCVkMAorCXN3YXAJJWQwCisJanNyCWZwX2NvbXB1dGVfY29uZAorCXRzdC5sCSVkMAorCWplcQkxZgorCWZwX3B1dF9wYyAlYTAsMQorMToJcHJpbnRmCVBERUNPREUsIlxuIgorCWpyYQlmcF9lbmQKKworZnBfZmRiY2M6CisJcHJpbnRmCVBERUNPREUsImZkYmNjICIKKwlmcF9nZXRfcGMgJWExCQkJCXwgY2FsY3VsYXRlIG5ldyBwYworCWZwX2dldF9pbnN0cl93b3JkICVkMCxmcF9lcnJfdWExCisJYWRkLncJJWQwLCVhMQorCWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCJkJWQsJXhcbiIsMiwlZDAsJWExCisJc3dhcAklZDEJCQkJfCB0ZXN0IGNvbmRpdGlvbiBpbiAlZDEKKwl0c3QudwklZDEKKwlqbmUJMmYKKwltb3ZlLmwJJWQwLCVkMQorCWpzcglmcF9nZXRfZGF0YV9yZWcKKwlzdWJxLncJIzEsJWQwCisJamNzCTFmCisJZnBfcHV0X3BjICVhMSwxCisxOglqc3IJZnBfcHV0X2RhdGFfcmVnCisyOglqcmEJZnBfZW5kCisKK3wgc2V0IGZsYWdzIGZvciBkZWNvZGUgbWFjcm9zIGZvciBmczxjYz4KK2RvX2ZzY2M9MQorZG9fbm9fcGNfbW9kZT0xCisKK2ZwX2ZzY2M6CisJcHJpbnRmCVBERUNPREUsImZzY2MgIgorCW1vdmUubAklZDIsJWQwCisJanNyCWZwX2NvbXB1dGVfY29uZAorCW1vdmUudwklZDAsJWQxCisJc3dhcAklZDEKKworCXwgZGVjb2RlIGFkZHJlc3NpbmcgbW9kZQorCWZwX2RlY29kZV9hZGRyX21vZGUKKworCS5sb25nCWZwX2RhdGEsIGZwX2ZkYmNjCisJLmxvbmcJZnBfaW5kaXJlY3QsIGZwX3Bvc3RpbmMKKwkubG9uZwlmcF9wcmVkZWNyLCBmcF9kaXNwMTYKKwkubG9uZwlmcF9leHRtb2RlMCwgZnBfZXh0bW9kZTEKKworCXwgYWRkcmVzc2luZyBtb2RlOiBkYXRhIHJlZ2lzdGVyIGRpcmVjdAorZnBfZGF0YToKKwlmcF9tb2RlX2RhdGFfZGlyZWN0CisJbW92ZS53CSVkMCwlZDEJCQl8IHNhdmUgcmVnaXN0ZXIgbnIKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisJc3dhcAklZDEKKwltb3ZlLmIJJWQxLCVkMAorCXN3YXAJJWQxCisJanNyCWZwX3B1dF9kYXRhX3JlZworCXByaW50ZglQREVDT0RFLCJcbiIKKwlqcmEJZnBfZW5kCisKK2ZwX2luZGlyZWN0OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdAorCWpyYQlmcF9kb19zY2MKKworZnBfcG9zdGluYzoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWpyYQlmcF9kb19zY2MKKworZnBfcHJlZGVjcjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJanJhCWZwX2RvX3NjYworCitmcF9kaXNwMTY6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2Rpc3AxNgorCWpyYQlmcF9kb19zY2MKKworZnBfZXh0bW9kZTA6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJanJhCWZwX2RvX3NjYworCitmcF9leHRtb2RlMToKKwliZmV4dHUJJWQyeyMxMywjM30sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfYWJzb2x1dGVfc2hvcnQsIGZwX2Fic29sdXRlX2xvbmcKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAkJfCBOT1RFOiBqdW1wIGhlcmUgdG8gZnRyYXAueAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKworZnBfYWJzb2x1dGVfc2hvcnQ6CisJZnBfbW9kZV9hYnNfc2hvcnQKKwlqcmEJZnBfZG9fc2NjCisKK2ZwX2Fic29sdXRlX2xvbmc6CisJZnBfbW9kZV9hYnNfbG9uZworfAlqcmEJZnBfZG9fc2NjCisKK2ZwX2RvX3NjYzoKKwlzd2FwCSVkMQorCXB1dHVzZXIuYiAlZDEsKCVhMCksZnBfZXJyX3VhMSwlYTAKKwlwcmludGYJUERFQ09ERSwiXG4iCisJanJhCWZwX2VuZAorCisKKyNkZWZpbmUgdHN0X05BTglidHN0ICMyNCwlZDEKKyNkZWZpbmUgdHN0X1oJYnRzdCAjMjYsJWQxCisjZGVmaW5lIHRzdF9OCWJ0c3QgIzI3LCVkMQorCitmcF9jb21wdXRlX2NvbmQ6CisJbW92ZS5sCShGUERfRlBTUixGUERBVEEpLCVkMQorCWJ0c3QJIzQsJWQwCisJamVxCTFmCisJdHN0X05BTgorCWplcQkxZgorCWJzZXQJIzE1LCVkMQorCWJzZXQJIzcsJWQxCisJbW92ZS5sCSVkMSwoRlBEX0ZQU1IsRlBEQVRBKQorMToJYW5kLncJIzB4ZiwlZDAKKwlqbXAJKFswZjp3LCVwYywlZDAudyo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX2YgICwgZnBfZXEgLCBmcF9vZ3QsIGZwX29nZQorCS5sb25nCWZwX29sdCwgZnBfb2xlLCBmcF9vZ2wsIGZwX29yCisJLmxvbmcJZnBfdW4gLCBmcF91ZXEsIGZwX3VndCwgZnBfdWdlCisJLmxvbmcJZnBfdWx0LCBmcF91bGUsIGZwX25lICwgZnBfdAorCitmcF9mOgorCW1vdmVxCSMwLCVkMAorCXJ0cworCitmcF9lcToKKwltb3ZlcQkjMCwlZDAKKwl0c3RfWgorCWplcQkxZgorCW1vdmVxCSMtMSwlZDAKKzE6CXJ0cworCitmcF9vZ3Q6CisJbW92ZXEJIzAsJWQwCisJdHN0X05BTgorCWpuZQkxZgorCXRzdF9aCisJam5lCTFmCisJdHN0X04KKwlqbmUJMWYKKwltb3ZlcQkjLTEsJWQwCisxOglydHMKKworZnBfb2dlOgorCW1vdmVxCSMtMSwlZDAKKwl0c3RfWgorCWpuZQkyZgorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfTgorCWplcQkyZgorMToJbW92ZXEJIzAsJWQwCisyOglydHMKKworZnBfb2x0OgorCW1vdmVxCSMwLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfWgorCWpuZQkxZgorCXRzdF9OCisJamVxCTFmCisJbW92ZXEJIy0xLCVkMAorMToJcnRzCisKK2ZwX29sZToKKwltb3ZlcQkjLTEsJWQwCisJdHN0X1oKKwlqbmUJMmYKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X04KKwlqbmUJMmYKKzE6CW1vdmVxCSMwLCVkMAorMjoJcnRzCisKK2ZwX29nbDoKKwltb3ZlcQkjMCwlZDAKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X1oKKwlqbmUJMWYKKwltb3ZlcQkjLTEsJWQwCisxOglydHMKKworZnBfb3I6CisJbW92ZXEJIzAsJWQwCisJdHN0X05BTgorCWpuZQkxZgorCW1vdmVxCSMtMSwlZDAKKzE6CXJ0cworCitmcF91bjoKKwltb3ZlcQkjMCwlZDAKKwl0c3RfTkFOCisJamVxCTFmCisJbW92ZXEJIy0xLCVkMAorCXJ0cworCitmcF91ZXE6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfWgorCWpuZQkxZgorCW1vdmVxCSMwLCVkMAorMToJcnRzCisKK2ZwX3VndDoKKwltb3ZlcQkjLTEsJWQwCisJdHN0X05BTgorCWpuZQkyZgorCXRzdF9OCisJam5lCTFmCisJdHN0X1oKKwlqZXEJMmYKKzE6CW1vdmVxCSMwLCVkMAorMjoJcnRzCisKK2ZwX3VnZToKKwltb3ZlcQkjLTEsJWQwCisJdHN0X05BTgorCWpuZQkxZgorCXRzdF9aCisJam5lCTFmCisJdHN0X04KKwlqZXEJMWYKKwltb3ZlcQkjMCwlZDAKKzE6CXJ0cworCitmcF91bHQ6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9OQU4KKwlqbmUJMmYKKwl0c3RfWgorCWpuZQkxZgorCXRzdF9OCisJam5lCTJmCisxOgltb3ZlcQkjMCwlZDAKKzI6CXJ0cworCitmcF91bGU6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfWgorCWpuZQkxZgorCXRzdF9OCisJam5lCTFmCisJbW92ZXEJIzAsJWQwCisxOglydHMKKworZnBfbmU6CisJbW92ZXEJIzAsJWQwCisJdHN0X1oKKwlqbmUJMWYKKwltb3ZlcQkjLTEsJWQwCisxOglydHMKKworZnBfdDoKKwltb3ZlcQkjLTEsJWQwCisJcnRzCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfZGVjb2RlLmggYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZGVjb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5Njc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9kZWNvZGUuaApAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIGZwX2RlY29kZS5oCisgKgorICogQ29weXJpZ2h0IFJvbWFuIFppcHBlbCwgMTk5Ny4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZQorICogcmVxdWlyZWQgSU5TVEVBRCBPRiB0aGUgYWJvdmUgcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzCisgKiBuZWNlc3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHUEwgYW5kCisgKiB0aGUgcmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiBhIEJTRC1zdHlsZSBjb3B5cmlnaHQuKQorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GUF9ERUNPREVfSAorI2RlZmluZSBfRlBfREVDT0RFX0gKKworLyogVGhlc2UgbWFjcm9zIGRvIHRoZSBkaXJ0eSB3b3JrIG9mIHRoZSBpbnN0ciBkZWNvZGluZywgc2V2ZXJhbCB2YXJpYWJsZXMKKyAqIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZSB0byBtb2RpZnkgdGhlIHdvcmsgb2YgdGhlc2UgbWFjcm9zLAorICogY3VycmVudGx5IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB1c2VkOgorICogLi4uCisgKiBUaGUgcmVnaXN0ZXIgdXNhZ2U6CisgKiBkMCAtIHdpbGwgY29udGFpbiBzb3VyY2Ugb3BlcmFuZCBmb3IgZGF0YSBkaXJlY3QgbW9kZSwKKyAqCW90aGVyd2lzZSBzY3JhdGNoIHJlZ2lzdGVyCisgKiBkMSAtIHVwcGVyIDE2Yml0IGFyZSByZXNlcnZlZCBmb3IgY2FsbGVyCisgKglsb3dlciAxNmJpdCBtYXkgY29udGFpbiBmdXJ0aGVyIGFyZ3VtZW50cywKKyAqCWlzIGRlc3Ryb3llZCBkdXJpbmcgZGVjb2RpbmcKKyAqIGQyIC0gY29udGFpbnMgZmlyc3QgdHdvIGluc3RydWN0aW9uIHdvcmRzLAorICoJZmlyc3Qgd29yZCB3aWxsIGJlIHVzZWQgZm9yIGV4dGVuc2lvbiB3b3JkCisgKiBhMCAtIHdpbGwgcG9pbnQgdG8gc291cmNlL2Rlc3Qgb3BlcmFuZCBmb3IgYW55IGluZGlyZWN0IG1vZGUKKyAqCW90aGVyd2lzZSBzY3JhdGNoIHJlZ2lzdGVyCisgKiBhMSAtIHNjcmF0Y2ggcmVnaXN0ZXIKKyAqIGEyIC0gYmFzZSBhZGRyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZQorICoKKyAqIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY2hlY2sgZm9yIGV2ZXJ5IGRpc2FsbG93ZWQKKyAqIGFkZHJlc3NpbmcgbW9kZSAoZS5nLiBwYyByZWxhdGl2ZSBtb2RlcyBhcyBkZXN0aW5hdGlvbiksIGFzIGxvbmcKKyAqIGFzIGl0IG9ubHkgbWVhbnMgYSBuZXcgYWRkcmVzc2luZyBtb2RlLCB3aGljaCBzaG91bGQgbm90IGFwcGVhcgorICogaW4gYSBwcm9ncmFtIGFuZCB0aGF0IGRvZXNuJ3QgY3Jhc2ggdGhlIGVtdWxhdGlvbiwgSSB0aGluayBpdCdzCisgKiBub3QgYSBwcm9ibGVtIHRvIGFsbG93IHRoZXNlIG1vZGVzLgorICovCisKK2RvX2Ztb3ZlbT0wCitkb19mbW92ZW1fY3I9MAorZG9fbm9fcGNfbW9kZT0wCitkb19mc2NjPTAKKworfCBmaXJzdCBkZWNvZGluZyBvZiB0aGUgaW5zdHIgdHlwZQorfCB0aGlzIHNlcGFyYXRlcyB0aGUgY29uZGl0aW9uYWwgaW5zdHIKKy5tYWNybwlmcF9kZWNvZGVfY29uZF9pbnN0cl90eXBlCisJYmZleHR1CSVkMnsjOCwjMn0sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6Cit8CS5sb25nCSJmPG9wPiIsImZzY2MvZmRiY2MiCit8CS5sb25nCSJmYmNjdyIsImZiY2NsIgorLmVuZG0KKworfCBzZWNvbmQgZGVjb2Rpbmcgb2YgdGhlIGluc3RyIHR5cGUKK3wgdGhpcyBzZXBhcmF0ZXMgbW9zdCBtb3ZlIGluc3RyCisubWFjcm8JZnBfZGVjb2RlX21vdmVfaW5zdHJfdHlwZQorCWJmZXh0dQklZDJ7IzE2LCMzfSwlZDAKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKK3wJLmxvbmcJImY8b3A+IGZweCxmcHgiLCJpbnZhbGlkIGluc3RyIgorfAkubG9uZwkiZjxvcD4gPGVhPixmcHgiLCJmbW92ZSBmcHgsPGVhPiIKK3wJLmxvbmcJImZtb3ZlbSA8ZWE+LGZwY3IiLCJmbW92ZW0gPGVhPixmcHgiCit8CS5sb25nCSJmbW92ZW0gZnBjciw8ZWE+IiwiZm1vdmVtIGZweCw8ZWE+IgorLmVuZG0KKworfCBleHRyYWN0IHRoZSBzb3VyY2Ugc3BlY2lmaWVyLCBzcGVjaWZpZXMKK3wgZWl0aGVyIHNvdXJjZSBmcCByZWdpc3RlciBvciBkYXRhIGZvcm1hdAorLm1hY3JvCWZwX2RlY29kZV9zb3VyY2VzcGVjCisJYmZleHR1CSVkMnsjMTksIzN9LCVkMAorLmVuZG0KKworfCBkZWNvZGUgZGVzdGluYXRpb24gZm9ybWF0IGZvciBmbW92ZSByZWcsZWEKKy5tYWNybwlmcF9kZWNvZGVfZGVzdF9mb3JtYXQKKwliZmV4dHUJJWQyeyMxOSwjM30sJWQwCisuZW5kbQorCit8IGRlY29kZSBzb3VyY2UgcmVnaXN0ZXIgZm9yIGZtb3ZlIHJlZyxlYQorLm1hY3JvCWZwX2RlY29kZV9zcmNfcmVnCisJYmZleHR1CSVkMnsjMjIsIzN9LCVkMAorLmVuZG0KKworfCBleHRyYWN0IHRoZSBhZGRyZXNzaW5nIG1vZGUKK3wgaXQgZGVwZW5kcyBvbiB0aGUgaW5zdHIgd2hpY2ggb2YgdGhlIG1vZGVzIGlzIHZhbGlkCisubWFjcm8JZnBfZGVjb2RlX2FkZHJfbW9kZQorCWJmZXh0dQklZDJ7IzEwLCMzfSwlZDAKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKK3wJLmxvbmcJImRhdGEgcmVnaXN0ZXIgZGlyZWN0IiwiYWRkciByZWdpc3RlciBkaXJlY3QiCit8CS5sb25nCSJhZGRyIHJlZ2lzdGVyIGluZGlyZWN0IgorfAkubG9uZwkiYWRkciByZWdpc3RlciBpbmRpcmVjdCBwb3N0aW5jcmVtZW50IgorfAkubG9uZwkiYWRkciByZWdpc3RlciBpbmRpcmVjdCBwcmVkZWNyZW1lbnQiCit8CS5sb25nCSJhZGRyIHJlZ2lzdGVyICsgaW5kZXgxNiIKK3wJLmxvbmcJImV4dGVuc2lvbiBtb2RlMSIsImV4dGVuc2lvbiBtb2RlMiIKKy5lbmRtCisKK3wgZXh0cmFjdCB0aGUgcmVnaXN0ZXIgZm9yIHRoZSBhZGRyZXNzaW5nIG1vZGUKKy5tYWNybwlmcF9kZWNvZGVfYWRkcl9yZWcKKwliZmV4dHUJJWQyeyMxMywjM30sJWQwCisuZW5kbQorCit8IGRlY29kZSB0aGUgOGJpdCBkaXBsYWNlbWVudCBmcm9tIHRoZSBicmllZiBleHRlbnNpb24gd29yZAorLm1hY3JvCWZwX2RlY29kZV9kaXNwOAorCW1vdmUuYgklZDIsJWQwCisJZXh0LncJJWQwCisuZW5kbQorCit8IGRlY29kZSB0aGUgaW5kZXggb2YgdGhlIGJyaWVmL2Z1bGwgZXh0ZW5zaW9uIHdvcmQKKy5tYWNybwlmcF9kZWNvZGVfaW5kZXgKKwliZmV4dHUJJWQyeyMxNywjM30sJWQwCQl8IGdldCB0aGUgcmVnaXN0ZXIgbnIKKwlidHN0CSMxNSwlZDIJCQl8IHRlc3QgZm9yIGRhdGEvYWRkciByZWdpc3RlcgorCWpuZQkxXEBmCisJcHJpbnRmCVBERUNPREUsImQlZCIsMSwlZDAKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisJanJhCTJcQGYKKzFcQDoJcHJpbnRmCVBERUNPREUsImElZCIsMSwlZDAKKwlqc3IJZnBfZ2V0X2FkZHJfcmVnCisJbW92ZS5sCSVhMCwlZDAKKzJcQDoKK2RlYnVnCWxlYQkiJ2wnLncsJWEwIgorCWJ0c3QJIzExLCVkMgkJCXwgMTYvMzIgYml0IHNpemU/CisJam5lCTNcQGYKK2RlYnVnCWxlYQkiJ3cnLncsJWEwIgorCWV4dC5sCSVkMAorM1xAOglwcmludGYJUERFQ09ERSwiOiVjIiwxLCVhMAorCW1vdmUudwklZDIsJWQxCQkJfCBzY2FsZSBmYWN0b3IKKwlyb2wudwkjNywlZDEKKwlhbmQudwkjMywlZDEKK2RlYnVnCW1vdmUubAkiJWQxLC0oJXNwKSIKK2RlYnVnCWV4dC5sCSIlZDEiCisJcHJpbnRmCVBERUNPREUsIjolZCIsMSwlZDEKK2RlYnVnCW1vdmUubAkiKCVzcCkrLCVkMSIKKwlsc2wubAklZDEsJWQwCisuZW5kbQorCit8IGRlY29kZSB0aGUgYmFzZSBkaXNwbGFjZW1lbnQgc2l6ZQorLm1hY3JvCWZwX2RlY29kZV9iYXNlZGlzcAorCWJmZXh0dQklZDJ7IzI2LCMyfSwlZDAKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKK3wJLmxvbmcJInJlc2VydmVkIiwibnVsbCBkaXNwbGFjZW1lbnQiCit8CS5sb25nCSJ3b3JkIGRpc3BsYWNlbWVudCIsImxvbmcgZGlzcGxhY2VtZW50IgorLmVuZG0KKworLm1hY3JvCWZwX2RlY29kZV9vdXRlcmRpc3AKKwliZmV4dHUJJWQyeyMzMCwjMn0sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6Cit8CS5sb25nCSJubyBtZW1vcnkgaW5kaXJlY3QgYWN0aW9uL3Jlc2VydmVkIiwibnVsbCBvdXRlciBkaXNwbGFjZW1lbnQiCit8CS5sb25nCSJ3b3JkIG91dGVyIGRpc3BsYWNlbWVudCIsImxvbmcgb3V0ZXIgZGlzcGxhY2VtZW50IgorLmVuZG0KKworfCBnZXQgdGhlIGV4dGVuc2lvbiB3b3JkIGFuZCB0ZXN0IGZvciBicmllZiBvciBmdWxsIGV4dGVuc2lvbiB0eXBlCisubWFjcm8JZnBfZ2V0X3Rlc3RfZXh0d29yZCBsYWJlbAorCWZwX2dldF9pbnN0cl93b3JkICVkMixmcF9lcnJfdWExCisJYnRzdAkjOCwlZDIKKwlqbmUJXGxhYmVsCisuZW5kbQorCisKK3wgdGVzdCBpZiAlcGMgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgZm9yIHRoZSBpbmRpcmVjdCBhZGRyIG1vZGUKKy5tYWNybwlmcF90ZXN0X2Jhc2VyZWdfZDE2CWxhYmVsCisJYnRzdAkjMjAsJWQyCisJamVxCVxsYWJlbAorLmVuZG0KKworfCB0ZXN0IGlmICVwYyBpcyB0aGUgYmFzZSByZWdpc3RlciBmb3Igb25lIG9mIHRoZSBleHRlbmRlZCBtb2RlcworLm1hY3JvCWZwX3Rlc3RfYmFzZXJlZ19leHQJbGFiZWwKKwlidHN0CSMxOSwlZDIKKwlqZXEJXGxhYmVsCisuZW5kbQorCisubWFjcm8JZnBfdGVzdF9zdXBwcl9pbmRleCBsYWJlbAorCWJ0c3QJIzYsJWQyCisJam5lCVxsYWJlbAorLmVuZG0KKworCit8IGFkZHJlc3NpbmcgbW9kZTogZGF0YSByZWdpc3RlciBkaXJlY3QKKy5tYWNybwlmcF9tb2RlX2RhdGFfZGlyZWN0CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJcHJpbnRmCVBERUNPREUsImQlZCIsMSwlZDAKKy5lbmRtCisKK3wgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0CisubWFjcm8JZnBfbW9kZV9hZGRyX2luZGlyZWN0CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJcHJpbnRmCVBERUNPREUsIihhJWQpIiwxLCVkMAorCWpzcglmcF9nZXRfYWRkcl9yZWcKKy5lbmRtCisKK3wgYWRqdXN0IHN0YWNrIGZvciBieXRlIG1vdmVzIGZyb20vdG8gc3RhY2sKKy5tYWNybwlmcF90ZXN0X3NwX2J5dGVfbW92ZQorCS5pZgkhZG9fZm1vdmVtCisJLmlmCWRvX2ZzY2MKKwltb3ZlLncJIzYsJWQxCisJLmVuZGlmCisJY21wLncJIzcsJWQwCisJam5lCTFcQGYKKwkuaWYJIWRvX2ZzY2MKKwljbXAudwkjNiwlZDEKKwlqbmUJMVxAZgorCS5lbmRpZgorCW1vdmUudwkjNCwlZDEKKzFcQDoKKwkuZW5kaWYKKy5lbmRtCisKK3wgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdGluY3JlbWVudAorLm1hY3JvCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9wb3N0aW5jCisJZnBfZGVjb2RlX2FkZHJfcmVnCisJcHJpbnRmCVBERUNPREUsIihhJWQpKyIsMSwlZDAKKwlmcF90ZXN0X3NwX2J5dGVfbW92ZQorCWpzcglmcF9nZXRfYWRkcl9yZWcKKwltb3ZlLmwJJWEwLCVhMQkJCXwgc2F2ZSBhZGRyCisJLmlmCWRvX2Ztb3ZlbQorCWxlYQkoJWEwLCVkMS53KjQpLCVhMAorCS5pZgkhZG9fZm1vdmVtX2NyCisJbGVhCSglYTAsJWQxLncqOCksJWEwCisJLmVuZGlmCisJLmVsc2UKKwlhZGQudwkoZnBfZGF0YXNpemUsJWQxLncqMiksJWEwCisJLmVuZGlmCisJanNyCWZwX3B1dF9hZGRyX3JlZworCW1vdmUubAklYTEsJWEwCisuZW5kbQorCit8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHByZWRlY3JlbWVudAorLm1hY3JvCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9wcmVkZWMKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlwcmludGYJUERFQ09ERSwiLShhJWQpIiwxLCVkMAorCWZwX3Rlc3Rfc3BfYnl0ZV9tb3ZlCisJanNyCWZwX2dldF9hZGRyX3JlZworCS5pZglkb19mbW92ZW0KKwkuaWYJIWRvX2Ztb3ZlbV9jcgorCWxlYQkoLTEyLCVhMCksJWExCQl8IHNldHVwIHRvIGFkZHIgb2YgMXN0IHJlZyB0byBtb3ZlCisJbmVnLncJJWQxCisJbGVhCSglYTAsJWQxLncqNCksJWEwCisJYWRkLncJJWQxLCVkMQorCWxlYQkoJWEwLCVkMS53KjQpLCVhMAorCWpzcglmcF9wdXRfYWRkcl9yZWcKKwltb3ZlLmwJJWExLCVhMAorCS5lbHNlCisJbmVnLncJJWQxCisJbGVhCSglYTAsJWQxLncqNCksJWEwCisJanNyCWZwX3B1dF9hZGRyX3JlZworCS5lbmRpZgorCS5lbHNlCisJc3ViLncJKGZwX2RhdGFzaXplLCVkMS53KjIpLCVhMAorCWpzcglmcF9wdXRfYWRkcl9yZWcKKwkuZW5kaWYKKy5lbmRtCisKK3wgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyL3Byb2dyYW1tIGNvdW50ZXIgaW5kaXJlY3QKK3wJCSAgIHdpdGggMTZiaXQgZGlzcGxhY2VtZW50CisubWFjcm8JZnBfbW9kZV9hZGRyX2luZGlyZWN0X2Rpc3AxNgorCS5pZgkhZG9fbm9fcGNfbW9kZQorCWZwX3Rlc3RfYmFzZXJlZ19kMTYgMWYKKwlwcmludGYJUERFQ09ERSwicGMiCisJZnBfZ2V0X3BjICVhMAorCWpyYQkyZgorCS5lbmRpZgorMToJZnBfZGVjb2RlX2FkZHJfcmVnCisJcHJpbnRmCVBERUNPREUsImElZCIsMSwlZDAKKwlqc3IJZnBfZ2V0X2FkZHJfcmVnCisyOglmcF9nZXRfaW5zdHJfd29yZCAlYTEsZnBfZXJyX3VhMQorCXByaW50ZglQREVDT0RFLCJAKCV4KSIsMSwlYTEKKwlhZGQubAklYTEsJWEwCisuZW5kbQorCit8IHBlcmZvcm0gcHJlaW5kZXggKGlmIEkvSVMgPT0gMHh4IGFuZCB4eCAhPSAwMCkKKy5tYWNybwlmcF9kb19wcmVpbmRleAorCW1vdmVxCSMzLCVkMAorCWFuZC53CSVkMiwlZDAKKwlqZXEJMWYKKwlidHN0CSMyLCVkMgorCWpuZQkxZgorCXByaW50ZglQREVDT0RFLCIpQCgiCisJZ2V0dXNlci5sICglYTEpLCVhMSxmcF9lcnJfdWExLCVhMQorZGVidWcJanJhCSIyZiIKKzE6CXByaW50ZglQREVDT0RFLCIsIgorMjoKKy5lbmRtCisKK3wgcGVyZm9ybSBwb3N0aW5kZXggKGlmIEkvSVMgPT0gMXh4KQorLm1hY3JvCWZwX2RvX3Bvc3RpbmRleAorCWJ0c3QJIzIsJWQyCisJamVxCTFmCisJcHJpbnRmCVBERUNPREUsIilAKCIKKwlnZXR1c2VyLmwgKCVhMSksJWExLGZwX2Vycl91YTEsJWExCitkZWJ1ZwlqcmEJIjJmIgorMToJcHJpbnRmCVBERUNPREUsIiwiCisyOgorLmVuZG0KKworfCBhbGwgb3RoZXIgaW5kaXJlY3QgYWRkcmVzc2luZyBtb2RlcyB3aWxsIGZpbmFsbHkgZW5kIHVwIGhlcmUKKy5tYWNybwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZXh0bW9kZTAKKwkuaWYJIWRvX25vX3BjX21vZGUKKwlmcF90ZXN0X2Jhc2VyZWdfZXh0IDFmCisJcHJpbnRmCVBERUNPREUsInBjIgorCWZwX2dldF9wYyAlYTAKKwlqcmEJMmYKKwkuZW5kaWYKKzE6CWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCJhJWQiLDEsJWQwCisJanNyCWZwX2dldF9hZGRyX3JlZworMjoJbW92ZS5sCSVhMCwlYTEKKwlzd2FwCSVkMgorCWZwX2dldF90ZXN0X2V4dHdvcmQgM2YKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3Rlci9wcm9ncmFtbSBjb3VudGVyIGluZGlyZWN0CisJfAkJICAgd2l0aCBpbmRleCBhbmQgOGJpdCBkaXNwbGFjZW1lbnQKKwlmcF9kZWNvZGVfZGlzcDgKK2RlYnVnCWV4dC5sCSIlZDAiCisJcHJpbnRmCVBERUNPREUsIkAoJXgsIiwxLCVkMAorCWFkZC53CSVkMCwlYTEKKwlmcF9kZWNvZGVfaW5kZXgKKwlhZGQubAklZDAsJWExCisJcHJpbnRmCVBERUNPREUsIikiCisJanJhCTlmCiszOgl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3Rlci9wcm9ncmFtbSBjb3VudGVyIG1lbW9yeSBpbmRpcmVjdAorCXwJCSAgIHdpdGggYmFzZSBhbmQvb3Igb3V0ZXIgZGlzcGxhY2VtZW50CisJYnRzdAkjNywlZDIJCQl8IGJhc2UgcmVnaXN0ZXIgc3VwcHJlc3NlZD8KKwlqZXEJMWYKKwlwcmludGYJUERFQ09ERSwiISIKKwlzdWIubAklYTEsJWExCisxOglwcmludGYJUERFQ09ERSwiQCgiCisJZnBfZGVjb2RlX2Jhc2VkaXNwCisKKwkubG9uZwlmcF9pbGwsMWYKKwkubG9uZwkyZiwzZgorCisjaWZkZWYgRlBVX0VNVV9ERUJVRworMToJcHJpbnRmCVBERUNPREUsIjAiCQl8IG51bGwgYmFzZSBkaXNwbGFjZW1lbnQKKwlqcmEJMWYKKyNlbmRpZgorMjoJZnBfZ2V0X2luc3RyX3dvcmQgJWEwLGZwX2Vycl91YTEgfCAxNmJpdCBiYXNlIGRpc3BsYWNlbWVudAorCXByaW50ZglQREVDT0RFLCIleDp3IiwxLCVhMAorCWpyYQk0ZgorMzoJZnBfZ2V0X2luc3RyX2xvbmcgJWEwLGZwX2Vycl91YTEgfCAzMmJpdCBiYXNlIGRpc3BsYWNlbWVudAorCXByaW50ZglQREVDT0RFLCIleDpsIiwxLCVhMAorNDoJYWRkLmwJJWEwLCVhMQorMToKKwlmcF9kb19wb3N0aW5kZXgKKwlmcF90ZXN0X3N1cHByX2luZGV4IDFmCisJZnBfZGVjb2RlX2luZGV4CisJYWRkLmwJJWQwLCVhMQorMToJZnBfZG9fcHJlaW5kZXgKKworCWZwX2RlY29kZV9vdXRlcmRpc3AKKworCS5sb25nCTVmLDFmCisJLmxvbmcJMmYsM2YKKworI2lmZGVmIEZQVV9FTVVfREVCVUcKKzE6CXByaW50ZglQREVDT0RFLCIwIgkJfCBudWxsIG91dGVyIGRpc3BsYWNlbWVudAorCWpyYQkxZgorI2VuZGlmCisyOglmcF9nZXRfaW5zdHJfd29yZCAlYTAsZnBfZXJyX3VhMSB8IDE2Yml0IG91dGVyIGRpc3BsYWNlbWVudAorCXByaW50ZglQREVDT0RFLCIleDp3IiwxLCVhMAorCWpyYQk0ZgorMzoJZnBfZ2V0X2luc3RyX2xvbmcgJWEwLGZwX2Vycl91YTEgfCAzMmJpdCBvdXRlciBkaXNwbGFjZW1lbnQKKwlwcmludGYJUERFQ09ERSwiJXg6bCIsMSwlYTAKKzQ6CWFkZC5sCSVhMCwlYTEKKzE6Cis1OglwcmludGYJUERFQ09ERSwiKSIKKzk6CW1vdmUubAklYTEsJWEwCisJc3dhcAklZDIKKy5lbmRtCisKK3wgZ2V0IHRoZSBhYnNvbHV0ZSBzaG9ydCBhZGRyZXNzIGZyb20gdXNlciBzcGFjZQorLm1hY3JvCWZwX21vZGVfYWJzX3Nob3J0CisJZnBfZ2V0X2luc3RyX3dvcmQgJWEwLGZwX2Vycl91YTEKKwlwcmludGYJUERFQ09ERSwiJXgudyIsMSwlYTAKKy5lbmRtCisKK3wgZ2V0IHRoZSBhYnNvbHV0ZSBsb25nIGFkZHJlc3MgZnJvbSB1c2VyIHNwYWNlCisubWFjcm8JZnBfbW9kZV9hYnNfbG9uZworCWZwX2dldF9pbnN0cl9sb25nICVhMCxmcF9lcnJfdWExCisJcHJpbnRmCVBERUNPREUsIiV4LmwiLDEsJWEwCisuZW5kbQorCisjZW5kaWYgLyogX0ZQX0RFQ09ERV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW11LmggYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2ZWRjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbXUuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIGZwX2VtdS5oCisgKgorICogQ29weXJpZ2h0IFJvbWFuIFppcHBlbCwgMTk5Ny4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZQorICogcmVxdWlyZWQgSU5TVEVBRCBPRiB0aGUgYWJvdmUgcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzCisgKiBuZWNlc3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHUEwgYW5kCisgKiB0aGUgcmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiBhIEJTRC1zdHlsZSBjb3B5cmlnaHQuKQorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GUF9FTVVfSAorI2RlZmluZSBfRlBfRU1VX0gKKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vbWF0aC1lbXUuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBJU19JTkYoYSkgKChhKS0+ZXhwID09IDB4N2ZmZikKKyNkZWZpbmUgSVNfWkVSTyhhKSAoKGEpLT5tYW50Lm02NCA9PSAwKQorCisKKyNkZWZpbmUgZnBfc2V0X3NyKGJpdCkgKHsJCQkJCVwKKwlGUERBVEEtPmZwc3IgfD0gMSA8PCAoYml0KTsJCQkJXAorfSkKKworI2RlZmluZSBmcF9zZXRfcXVvdGllbnQocXVvdGllbnQpICh7CQkJCVwKKwlGUERBVEEtPmZwc3IgJj0gMHhmZjAwZmZmZjsJCQkJXAorCUZQREFUQS0+ZnBzciB8PSAoKHF1b3RpZW50KSAmIDB4ZmYpIDw8IDE2OwkJXAorfSkKKworLyogbGlua2FnZSBmb3Igc2V2ZXJhbCB1c2VmdWwgZnVuY3Rpb25zICovCisKKy8qIE5vcm1hbGl6ZSB0aGUgZXh0ZW5kZWQgc3RydWN0LCByZXR1cm4gMCBmb3IgYSBOYU4gKi8KKyNkZWZpbmUgZnBfbm9ybWFsaXplX2V4dChmcHJlZykgKHsJCQkJXAorCXJlZ2lzdGVyIHN0cnVjdCBmcF9leHQgKnJlZyBhc20gKCJhMCIpID0gZnByZWc7CQlcCisJcmVnaXN0ZXIgaW50IHJlcyBhc20gKCJkMCIpOwkJCQlcCisJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJqc3IgZnBfY29udl9leHQyZXh0IgkJCVwKKwkJCTogIj1kIiAocmVzKSA6ICJhIiAocmVnKQkJXAorCQkJOiAiYTEiLCAiZDEiLCAiZDIiLCAibWVtb3J5Iik7CQlcCisJcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIGZwX2NvcHlfZXh0KGRlc3QsIHNyYykgKHsJCQkJXAorCSpkZXN0ID0gKnNyYzsJCQkJCQlcCit9KQorCisjZGVmaW5lIGZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKSAoewkJCQlcCisJZnBfY29weV9leHQoZGVzdCwgc3JjKTsJCQkJCVwKKwlpZiAoIWZwX25vcm1hbGl6ZV9leHQoZGVzdCkpCQkJCVwKKwkJcmV0dXJuIGRlc3Q7CQkJCQlcCit9KQorCisjZGVmaW5lIGZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpICh7CQkJCVwKKwlpZiAoIWZwX25vcm1hbGl6ZV9leHQoZGVzdCkpCQkJCVwKKwkJcmV0dXJuIGRlc3Q7CQkJCQlcCisJaWYgKCFmcF9ub3JtYWxpemVfZXh0KHNyYykpIHsJCQkJXAorCQlmcF9jb3B5X2V4dChkZXN0LCBzcmMpOwkJCQlcCisJCXJldHVybiBkZXN0OwkJCQkJXAorCX0JCQkJCQkJXAorfSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmcF9leHQgZnBfUU5hTjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnBfZXh0IGZwX0luZjsKKworI2RlZmluZSBmcF9zZXRfbmFuKGRlc3QpICh7CQkJCQlcCisJZnBfc2V0X3NyKEZQU1JfRVhDX09QRVJSKTsJCQkJXAorCSpkZXN0ID0gZnBfUU5hTjsJCQkJCVwKK30pCisKKy8qIFRPRE8gY2hlY2sgcm91bmRpbmcgbW9kZT8gKi8KKyNkZWZpbmUgZnBfc2V0X292cmZsdyhkZXN0KSAoewkJCQkJXAorCWZwX3NldF9zcihGUFNSX0VYQ19PVkZMKTsJCQkJXAorCWRlc3QtPmV4cCA9IDB4N2ZmZjsJCQkJCVwKKwlkZXN0LT5tYW50Lm02NCA9IDA7CQkJCQlcCit9KQorCisjZGVmaW5lIGZwX2NvbnZfZXh0Mmxvbmcoc3JjKSAoewkJCQlcCisJcmVnaXN0ZXIgc3RydWN0IGZwX2V4dCAqX19zcmMgYXNtICgiYTAiKSA9IHNyYzsJCVwKKwlyZWdpc3RlciBpbnQgX19yZXMgYXNtICgiZDAiKTsJCQkJXAorCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgianNyIGZwX2NvbnZfZXh0MmxvbmciCQkJXAorCQkJOiAiPWQiIChfX3JlcykgOiAiYSIgKF9fc3JjKQkJXAorCQkJOiAiYTEiLCAiZDEiLCAiZDIiLCAibWVtb3J5Iik7CQlcCisJX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgZnBfY29udl9sb25nMmV4dChkZXN0LCBzcmMpICh7CQkJCVwKKwlyZWdpc3RlciBzdHJ1Y3QgZnBfZXh0ICpfX2Rlc3QgYXNtICgiYTAiKSA9IGRlc3Q7CVwKKwlyZWdpc3RlciBpbnQgX19zcmMgYXNtICgiZDAiKSA9IHNyYzsJCQlcCisJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJqc3IgZnBfY29udl9leHQybG9uZyIJCQlcCisJCQk6IDogImQiIChfX3NyYyksICJhIiAoX19kZXN0KQkJXAorCQkJOiAiYTEiLCAiZDEiLCAiZDIiLCAibWVtb3J5Iik7CQlcCit9KQorCisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIHNldCwgcmVzZXQgb3IgY2xlYXIgYSBiaXQgaW4gdGhlIGZwIHN0YXR1cyByZWdpc3RlcgorICovCisubWFjcm8JZnBfc2V0X3NyCWJpdAorCWJzZXQJIyhcYml0JjcpLChGUERfRlBTUiszLShcYml0LzgpLEZQREFUQSkKKy5lbmRtCisKKy5tYWNybwlmcF9jbHJfc3IJYml0CisJYmNscgkjKFxiaXQmNyksKEZQRF9GUFNSKzMtKFxiaXQvOCksRlBEQVRBKQorLmVuZG0KKworLm1hY3JvCWZwX3RzdF9zcgliaXQKKwlidHN0CSMoXGJpdCY3KSwoRlBEX0ZQU1IrMy0oXGJpdC84KSxGUERBVEEpCisuZW5kbQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfRlBfRU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjMmQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogZnBfZW11LlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKworCS5nbG9ibAlmcHVfZW11CisJLmdsb2JsCWZwX2RlYnVncHJpbnQKKwkuZ2xvYmwJZnBfZXJyX3VhMSxmcF9lcnJfdWEyCisKKwkudGV4dAorZnB1X2VtdToKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisKKyNpZiBkZWZpbmVkKENQVV9NNjgwMjBfT1JfTTY4MDMwKSAmJiBkZWZpbmVkKENQVV9NNjgwNDBfT1JfTTY4MDYwKQorICAgICAgICB0c3QubAltNjhrX2lzMDQwb3IwNjAKKyAgICAgICAgamVxCTFmCisjZW5kaWYKKyNpZiBkZWZpbmVkKENQVV9NNjgwNDBfT1JfTTY4MDYwKQorCW1vdmUubAkoRlBTX1BDMiwlc3ApLChGUFNfUEMsJXNwKQorI2VuZGlmCisxOgorCXwgZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24KKwlqc3IJZnBfc2NhbgorCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorI2lmICFkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkKKwlidHN0CSMzLG02OGtfY3B1dHlwZSszCisJamVxCTFmCisjZW5kaWYKKwlidHN0CSM3LChGUFNfU1IsJXNwKQorCWpuZQlmcF9zZW5kdHJhY2UwNjAKKyNlbmRpZgorMToKKwl8IGVtdWxhdGlvbiBzdWNjZXNzZnVsPworCXRzdC5sCSVkMAorCWplcQlyZXRfZnJvbV9leGNlcHRpb24KKworCXwgc2VuZCBzb21lIHNpZ25hbCB0byBwcm9ncmFtIGhlcmUKKworCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworCXwgd2UganVtcCBoZXJlIGFmdGVyIGFuIGFjY2VzcyBlcnJvciB3aGlsZSB0cnlpbmcgdG8gYWNjZXNzCisJfCB1c2VyIHNwYWNlLCB3ZSBjb3JyZWN0IHN0YWNrcG9pbnRlciBhbmQgc2VuZCBhIFNJR1NFR1YgdG8KKwl8IHRoZSB1c2VyIHByb2Nlc3MKK2ZwX2Vycl91YTI6CisJYWRkcS5sCSM0LCVzcAorZnBfZXJyX3VhMToKKwlhZGRxLmwJIzQsJXNwCisJbW92ZS5sCSVhMCwtKCVzcCkKKwlwZWEJU0VHVl9NQVBFUlIKKwlwZWEJU0lHU0VHVgorCWpzcglmcGVtdV9zaWduYWwKKwlhZGQudwkjMTIsJXNwCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorCXwgc2VuZCBhIHRyYWNlIHNpZ25hbCBpZiB3ZSBhcmUgZGVidWdnZWQKKwl8IGl0IGRvZXMgbm90IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0Li4uCitmcF9zZW5kdHJhY2UwNjA6CisJbW92ZS5sCShGUFNfUEMsJXNwKSwtKCVzcCkKKwlwZWEJVFJBUF9UUkFDRQorCXBlYQlTSUdUUkFQCisJanNyCWZwZW11X3NpZ25hbAorCWFkZC53CSMxMiwlc3AKKwlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCisjZW5kaWYKKworCS5nbG9ibAlmcF9nZXRfZGF0YV9yZWcsIGZwX3B1dF9kYXRhX3JlZworCS5nbG9ibAlmcF9nZXRfYWRkcl9yZWcsIGZwX3B1dF9hZGRyX3JlZworCisJfCBFbnRyeSBwb2ludHMgdG8gZ2V0L3B1dCBhIHJlZ2lzdGVyLiBTb21lIG9mIHRoZW0gY2FuIGJlIGdldC9wdXQKKwl8IGRpcmVjdGx5LCBvdGhlcnMgYXJlIG9uIHRoZSBzdGFjaywgYXMgd2UgcmVhZC93cml0ZSB0aGUgc3RhY2sKKwl8IGRpcmVjdGx5IGhlcmUsIHRoZXNlIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorCXwgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG90aGVyd2lzZSB0aGUgc3RhY2sgcG9pbnRlciBpcyBpbmNvcnJlY3QKKwl8IGFuZCB0aGUgc3RhY2sgZ2V0cyBjb3JydXB0ZWQuCitmcF9nZXRfZGF0YV9yZWc6CisJam1wCShbMGY6dywlcGMsJWQwLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9nZXRfZDAsIGZwX2dldF9kMQorCS5sb25nCWZwX2dldF9kMiwgZnBfZ2V0X2QzCisJLmxvbmcJZnBfZ2V0X2Q0LCBmcF9nZXRfZDUKKwkubG9uZwlmcF9nZXRfZDYsIGZwX2dldF9kNworCitmcF9nZXRfZDA6CisJbW92ZS5sCShQVF9EMCs4LCVzcCksJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2QwLT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2QxOgorCW1vdmUubAkoUFRfRDErOCwlc3ApLCVkMAorCXByaW50ZglQUkVHSVNURVIsIntkMS0+JTA4eH0iLDEsJWQwCisJcnRzCisKK2ZwX2dldF9kMjoKKwltb3ZlLmwJKFBUX0QyKzgsJXNwKSwlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDItPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDM6CisJbW92ZS5sCSVkMywlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDMtPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDQ6CisJbW92ZS5sCSVkNCwlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDQtPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDU6CisJbW92ZS5sCSVkNSwlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDUtPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDY6CisJbW92ZS5sCSVkNiwlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDYtPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDc6CisJbW92ZS5sCSVkNywlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDctPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9wdXRfZGF0YV9yZWc6CisJam1wCShbMGY6dywlcGMsJWQxLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9wdXRfZDAsIGZwX3B1dF9kMQorCS5sb25nCWZwX3B1dF9kMiwgZnBfcHV0X2QzCisJLmxvbmcJZnBfcHV0X2Q0LCBmcF9wdXRfZDUKKwkubG9uZwlmcF9wdXRfZDYsIGZwX3B1dF9kNworCitmcF9wdXRfZDA6CisJcHJpbnRmCVBSRUdJU1RFUiwie2QwPC0lMDh4fSIsMSwlZDAKKwltb3ZlLmwJJWQwLChQVF9EMCs4LCVzcCkKKwlydHMKKworZnBfcHV0X2QxOgorCXByaW50ZglQUkVHSVNURVIsIntkMTwtJTA4eH0iLDEsJWQwCisJbW92ZS5sCSVkMCwoUFRfRDErOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9kMjoKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDI8LSUwOHh9IiwxLCVkMAorCW1vdmUubAklZDAsKFBUX0QyKzgsJXNwKQorCXJ0cworCitmcF9wdXRfZDM6CisJcHJpbnRmCVBSRUdJU1RFUiwie2QzPC0lMDh4fSIsMSwlZDAKK3wJbW92ZS5sCSVkMCwlZDMKKwltb3ZlLmwJJWQwLChQVF9EMys4LCVzcCkKKwlydHMKKworZnBfcHV0X2Q0OgorCXByaW50ZglQUkVHSVNURVIsIntkNDwtJTA4eH0iLDEsJWQwCit8CW1vdmUubAklZDAsJWQ0CisJbW92ZS5sCSVkMCwoUFRfRDQrOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9kNToKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDU8LSUwOHh9IiwxLCVkMAorfAltb3ZlLmwJJWQwLCVkNQorCW1vdmUubAklZDAsKFBUX0Q1KzgsJXNwKQorCXJ0cworCitmcF9wdXRfZDY6CisJcHJpbnRmCVBSRUdJU1RFUiwie2Q2PC0lMDh4fSIsMSwlZDAKKwltb3ZlLmwJJWQwLCVkNgorCXJ0cworCitmcF9wdXRfZDc6CisJcHJpbnRmCVBSRUdJU1RFUiwie2Q3PC0lMDh4fSIsMSwlZDAKKwltb3ZlLmwJJWQwLCVkNworCXJ0cworCitmcF9nZXRfYWRkcl9yZWc6CisJam1wCShbMGY6dywlcGMsJWQwLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9nZXRfYTAsIGZwX2dldF9hMQorCS5sb25nCWZwX2dldF9hMiwgZnBfZ2V0X2EzCisJLmxvbmcJZnBfZ2V0X2E0LCBmcF9nZXRfYTUKKwkubG9uZwlmcF9nZXRfYTYsIGZwX2dldF9hNworCitmcF9nZXRfYTA6CisJbW92ZS5sCShQVF9BMCs4LCVzcCksJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2EwLT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2ExOgorCW1vdmUubAkoUFRfQTErOCwlc3ApLCVhMAorCXByaW50ZglQUkVHSVNURVIsInthMS0+JTA4eH0iLDEsJWEwCisJcnRzCisKK2ZwX2dldF9hMjoKKwltb3ZlLmwJKFBUX0EyKzgsJXNwKSwlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTItPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTM6CisJbW92ZS5sCSVhMywlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTMtPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTQ6CisJbW92ZS5sCSVhNCwlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTQtPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTU6CisJbW92ZS5sCSVhNSwlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTUtPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTY6CisJbW92ZS5sCSVhNiwlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTYtPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTc6CisJbW92ZS5sCSV1c3AsJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2E3LT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfcHV0X2FkZHJfcmVnOgorCWptcAkoWzBmOncsJXBjLCVkMC53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfcHV0X2EwLCBmcF9wdXRfYTEKKwkubG9uZwlmcF9wdXRfYTIsIGZwX3B1dF9hMworCS5sb25nCWZwX3B1dF9hNCwgZnBfcHV0X2E1CisJLmxvbmcJZnBfcHV0X2E2LCBmcF9wdXRfYTcKKworZnBfcHV0X2EwOgorCXByaW50ZglQUkVHSVNURVIsInthMDwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwoUFRfQTArOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9hMToKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTE8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsKFBUX0ExKzgsJXNwKQorCXJ0cworCitmcF9wdXRfYTI6CisJcHJpbnRmCVBSRUdJU1RFUiwie2EyPC0lMDh4fSIsMSwlYTAKKwltb3ZlLmwJJWEwLChQVF9BMis4LCVzcCkKKwlydHMKKworZnBfcHV0X2EzOgorCXByaW50ZglQUkVHSVNURVIsInthMzwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwlYTMKKwlydHMKKworZnBfcHV0X2E0OgorCXByaW50ZglQUkVHSVNURVIsInthNDwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwlYTQKKwlydHMKKworZnBfcHV0X2E1OgorCXByaW50ZglQUkVHSVNURVIsInthNTwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwlYTUKKwlydHMKKworZnBfcHV0X2E2OgorCXByaW50ZglQUkVHSVNURVIsInthNjwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwlYTYKKwlydHMKKworZnBfcHV0X2E3OgorCXByaW50ZglQUkVHSVNURVIsInthNzwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwldXNwCisJcnRzCisKKwkuZGF0YQorCS5hbGlnbgk0CisKK2ZwX2RlYnVncHJpbnQ6Cit8CS5sb25nCVBNREVDT0RFCisJLmxvbmcJUE1JTlNUUitQTURFQ09ERStQTUNPTlYrUE1OT1JNCit8CS5sb25nCVBNQ09OVitQTU5PUk0rUE1JTlNUUgorfAkubG9uZwkwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfbG9nLmMgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNGYwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9sb2cuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKworICBmcF90cmlnLmM6IGZsb2F0aW5nLXBvaW50IG1hdGggcm91dGluZXMgZm9yIHRoZSBMaW51eC1tNjhrCisgIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLgorCisgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIC8gUm9tYW4gWmlwcGVsLgorCisgIEkgaGVyZWJ5IGdpdmUgcGVybWlzc2lvbiwgZnJlZSBvZiBjaGFyZ2UsIHRvIGNvcHksIG1vZGlmeSwgYW5kCisgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0sIHByb3ZpZGVkIHRoYXQKKyAgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcmUgaW5jbHVkZWQKKyAgaW4gYWxsIHN1Y2ggY29waWVzLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLCBSRUFMCisgIE9SIElNUExJRUQuCisKKyovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmcF9leHQgZnBfb25lID0KK3sKKwkuZXhwID0gMHgzZmZmLAorfTsKKworZXh0ZXJuIHN0cnVjdCBmcF9leHQgKmZwX2ZhZGQoc3RydWN0IGZwX2V4dCAqZGVzdCwgY29uc3Qgc3RydWN0IGZwX2V4dCAqc3JjKTsKK2V4dGVybiBzdHJ1Y3QgZnBfZXh0ICpmcF9mZGl2KHN0cnVjdCBmcF9leHQgKmRlc3QsIGNvbnN0IHN0cnVjdCBmcF9leHQgKnNyYyk7CitleHRlcm4gc3RydWN0IGZwX2V4dCAqZnBfZm11bChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBjb25zdCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzcXJ0KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlzdHJ1Y3QgZnBfZXh0IHRtcCwgc3JjMjsKKwlpbnQgaSwgZXhwOworCisJZHByaW50KFBJTlNUUiwgImZzcXJ0XG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCWlmIChJU19aRVJPKGRlc3QpKQorCQlyZXR1cm4gZGVzdDsKKworCWlmIChkZXN0LT5zaWduKSB7CisJCWZwX3NldF9uYW4oZGVzdCk7CisJCXJldHVybiBkZXN0OworCX0KKwlpZiAoSVNfSU5GKGRlc3QpKQorCQlyZXR1cm4gZGVzdDsKKworCS8qCisJICoJCSBzcXJ0KG0pICogMl4ocCkJLCBpZiBlID0gMipwCisJICogc3FydChtKjJeZSkgPQorCSAqCQkgc3FydCgyKm0pICogMl4ocCkJLCBpZiBlID0gMipwICsgMQorCSAqCisJICogU28gd2UgdXNlIHRoZSBsYXN0IGJpdCBvZiB0aGUgZXhwb25lbnQgdG8gZGVjaWRlIHdldGhlciB0bworCSAqIHVzZSB0aGUgbSBvciAyKm0uCisJICoKKwkgKiBTaW5jZSBvbmx5IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG1hbnRpc3NhIGlzIHN0b3JlZCBhbmQKKwkgKiB0aGUgaW50ZWdlciBwYXJ0IGlzIGFzc3VtZWQgdG8gYmUgb25lLCB3ZSBwbGFjZSBhIDEgb3IgMiBpbnRvCisJICogdGhlIGZpeGVkIHBvaW50IHJlcHJlc2VudGF0aW9uLgorCSAqLworCWV4cCA9IGRlc3QtPmV4cDsKKwlkZXN0LT5leHAgPSAweDNGRkY7CisJaWYgKCEoZXhwICYgMSkpCQkvKiBsb3dlc3QgYml0IG9mIGV4cG9uZW50IGlzIHNldCAqLworCQlkZXN0LT5leHArKzsKKwlmcF9jb3B5X2V4dCgmc3JjMiwgZGVzdCk7CisKKwkvKgorCSAqIFRoZSB0YXlsb3Igcm93IGFycm91bmQgYSBmb3Igc3FydCh4KSBpczoKKwkgKglzcXJ0KHgpID0gc3FydChhKSArIDEvKDIqc3FydChhKSkqKHgtYSkgKyBSCisJICogV2l0aCBhPTEgdGhpcyBnaXZlczoKKwkgKglzcXJ0KHgpID0gMSArIDEvMiooeC0xKQorCSAqCQk9IDEvMiooMSt4KQorCSAqLworCWZwX2ZhZGQoZGVzdCwgJmZwX29uZSk7CisJZGVzdC0+ZXhwLS07CQkvKiAqIDEvMiAqLworCisJLyoKKwkgKiBXZSBub3cgYXBwbHkgdGhlIG5ld3RvbiBydWxlIHRvIHRoZSBmdW5jdGlvbgorCSAqCWYoeCkgOj0geF4yIC0gcgorCSAqIHdoaWNoIGhhcyBhIG51bGwgcG9pbnQgb24geCA9IHNxcnQocikuCisJICoKKwkgKiBJdCBnaXZlczoKKwkgKgl4JyA6PSB4IC0gZih4KS9mJyh4KQorCSAqCSAgICA9IHggLSAoeF4yIC1yKS8oMip4KQorCSAqCSAgICA9IHggLSAoeCAtIHIveCkvMgorCSAqICAgICAgICAgID0gKDIqeCAtIHggKyByL3gpLzIKKwkgKgkgICAgPSAoeCArIHIveCkvMgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJZnBfY29weV9leHQoJnRtcCwgJnNyYzIpOworCisJCWZwX2ZkaXYoJnRtcCwgZGVzdCk7CisJCWZwX2ZhZGQoZGVzdCwgJnRtcCk7CisJCWRlc3QtPmV4cC0tOworCX0KKworCWRlc3QtPmV4cCArPSAoZXhwIC0gMHgzRkZGKSAvIDI7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mZXRveG0xKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZldG94bTFcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJaWYgKElTX1pFUk8oZGVzdCkpCisJCXJldHVybiBkZXN0OworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmV0b3goc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmV0b3hcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnR3b3RveChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmdHdvdG94XG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Z0ZW50b3goc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZnRlbnRveFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbG9nbihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmbG9nblxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbG9nbnAxKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZsb2ducDFcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmxvZzEwKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZsb2cxMFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbG9nMihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmbG9nMlxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mZ2V0ZXhwKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZmdldGV4cFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCWZwX3NldF9uYW4oZGVzdCk7CisJCXJldHVybiBkZXN0OworCX0KKwlpZiAoSVNfWkVSTyhkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwlmcF9jb252X2xvbmcyZXh0KGRlc3QsIChpbnQpZGVzdC0+ZXhwIC0gMHgzRkZGKTsKKworCWZwX25vcm1hbGl6ZV9leHQoZGVzdCk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mZ2V0bWFuKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZmdldG1hblxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlpZiAoSVNfWkVSTyhkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwlpZiAoSVNfSU5GKGRlc3QpKQorCQlyZXR1cm4gZGVzdDsKKworCWRlc3QtPmV4cCA9IDB4M0ZGRjsKKworCXJldHVybiBkZXN0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfbW92ZS5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX21vdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJkZjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX21vdmUuUwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIGZwX21vdmUuUworICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgImZwX2RlY29kZS5oIgorCitkb19ub19wY19tb2RlPTEKKworCS5nbG9ibAlmcF9mbW92ZV9mcDJtZW0KKworZnBfZm1vdmVfZnAybWVtOgorCWNsci5iCSgyK0ZQRF9GUFNSLEZQREFUQSkKKwlmcF9kZWNvZGVfZGVzdF9mb3JtYXQKKwltb3ZlLncJJWQwLCVkMQkJCXwgc3RvcmUgZGF0YSBzaXplIHR3aWNlIGluICVkMQorCXN3YXAJJWQxCQkJfCBvbmUgY2FuIGJlIHRyYXNoZWQgYmVsb3cKKwltb3ZlLncJJWQwLCVkMQorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwlsZWEJMGYsJWEwCisJY2xyLmwJJWQwCisJbW92ZS5iCSglYTAsJWQxLncpLCVkMAorCXByaW50ZglQREVDT0RFLCJmbW92ZS4lYyAiLDEsJWQwCisJZnBfZGVjb2RlX3NyY19yZWcKKwlwcmludGYJUERFQ09ERSwiZnAlZCwiLDEsJWQwCisKKwkuZGF0YQorMDoJLmJ5dGUJJ2wnLCdzJywneCcsJ3AnLCd3JywnZCcsJ2InLCdwJworCS5wcmV2aW91cworI2VuZGlmCisKKwl8IGVuY29kZSBhZGRyZXNzaW5nIG1vZGUgZm9yIGRlc3QKKwlmcF9kZWNvZGVfYWRkcl9tb2RlCisKKwkubG9uZwlmcF9kYXRhLCBmcF9pbGwKKwkubG9uZwlmcF9pbmRpcmVjdCwgZnBfcG9zdGluYworCS5sb25nCWZwX3ByZWRlY3IsIGZwX2Rpc3AxNgorCS5sb25nCWZwX2V4dG1vZGUwLCBmcF9leHRtb2RlMQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGRhdGEgcmVnaXN0ZXIgZGlyZWN0CitmcF9kYXRhOgorCWZwX21vZGVfZGF0YV9kaXJlY3QKKwltb3ZlLncJJWQwLCVkMQorCWZwX2RlY29kZV9zcmNfcmVnCisJZnBfZ2V0X2ZwX3JlZworCWxlYQkoRlBEX1RFTVBGUDEsRlBEQVRBKSwlYTEKKwltb3ZlLmwJKCVhMCkrLCglYTEpKworCW1vdmUubAkoJWEwKSssKCVhMSkrCisJbW92ZS5sCSglYTApLCglYTEpCisJbGVhCSgtOCwlYTEpLCVhMAorCXN3YXAJJWQxCisJbW92ZS5sCSVkMSwlZDIKKwlwcmludGYJUERFQ09ERSwiXG4iCisJam1wCShbMGY6dywlcGMsJWQxLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9kYXRhX2xvbmcsIGZwX2RhdGFfc2luZ2xlCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9kYXRhX3dvcmQsIGZwX2lsbAorCS5sb25nCWZwX2RhdGFfYnl0ZSwgZnBfaWxsCisKK2ZwX2RhdGFfYnl0ZToKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9jb252X2V4dDJieXRlCisJbW92ZS5sCSVkMCwlZDEKKwlzd2FwCSVkMgorCW1vdmUudwklZDIsJWQwCisJanNyCWZwX2dldF9kYXRhX3JlZworCW1vdmUuYgklZDEsJWQwCisJbW92ZS53CSVkMiwlZDEKKwlqc3IJZnBfcHV0X2RhdGFfcmVnCisJanJhCWZwX2ZpbmFsCisKK2ZwX2RhdGFfd29yZDoKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9jb252X2V4dDJzaG9ydAorCW1vdmUubAklZDAsJWQxCisJc3dhcAklZDIKKwltb3ZlLncJJWQyLCVkMAorCWpzcglmcF9nZXRfZGF0YV9yZWcKKwltb3ZlLncJJWQxLCVkMAorCW1vdmUubAklZDIsJWQxCisJanNyCWZwX3B1dF9kYXRhX3JlZworCWpyYQlmcF9maW5hbAorCitmcF9kYXRhX2xvbmc6CisJanNyCWZwX25vcm1hbGl6ZV9leHQKKwlqc3IJZnBfY29udl9leHQybG9uZworCXN3YXAJJWQyCisJbW92ZS53CSVkMiwlZDEKKwlqc3IJZnBfcHV0X2RhdGFfcmVnCisJanJhCWZwX2ZpbmFsCisKK2ZwX2RhdGFfc2luZ2xlOgorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJanNyCWZwX2NvbnZfZXh0MnNpbmdsZQorCXN3YXAJJWQyCisJbW92ZS53CSVkMiwlZDEKKwlqc3IJZnBfcHV0X2RhdGFfcmVnCisJanJhCWZwX2ZpbmFsCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdAorZnBfaW5kaXJlY3Q6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0CisJanJhCWZwX3B1dGRlc3QKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdGluY3JlbWVudAorZnBfcG9zdGluYzoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWpyYQlmcF9wdXRkZXN0CisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHByZWRlY3JlbWVudAorZnBfcHJlZGVjcjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJanJhCWZwX3B1dGRlc3QKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHdpdGggMTZiaXQgZGlzcGxhY2VtZW50CitmcF9kaXNwMTY6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2Rpc3AxNgorCWpyYSAgICAgZnBfcHV0ZGVzdAorCitmcF9leHRtb2RlMDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZXh0bW9kZTAKKwlqcmEJZnBfcHV0ZGVzdAorCitmcF9leHRtb2RlMToKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9hYnNfc2hvcnQsIGZwX2Fic19sb25nCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisKK2ZwX2Fic19zaG9ydDoKKwlmcF9tb2RlX2Fic19zaG9ydAorCWpyYQlmcF9wdXRkZXN0CisKK2ZwX2Fic19sb25nOgorCWZwX21vZGVfYWJzX2xvbmcKKwlqcmEJZnBfcHV0ZGVzdAorCitmcF9wdXRkZXN0OgorCW1vdmUubAklYTAsJWExCisJZnBfZGVjb2RlX3NyY19yZWcKKwltb3ZlLmwJJWQxLCVkMgkJCXwgc2F2ZSBzaXplCisJZnBfZ2V0X2ZwX3JlZworCXByaW50ZglQREVDT0RFLCJcbiIKKwlhZGRxLmwJIzgsJWEwCisJbW92ZS5sCSglYTApLC0oJXNwKQorCW1vdmUubAktKCVhMCksLSglc3ApCisJbW92ZS5sCS0oJWEwKSwtKCVzcCkKKwltb3ZlLmwJJXNwLCVhMAorCWpzcglmcF9ub3JtYWxpemVfZXh0CisKKwlzd2FwCSVkMgorCWptcAkoWzBmOncsJXBjLCVkMi53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfZm9ybWF0X2xvbmcsIGZwX2Zvcm1hdF9zaW5nbGUKKwkubG9uZwlmcF9mb3JtYXRfZXh0ZW5kZWQsIGZwX2Zvcm1hdF9wYWNrZWQKKwkubG9uZwlmcF9mb3JtYXRfd29yZCwgZnBfZm9ybWF0X2RvdWJsZQorCS5sb25nCWZwX2Zvcm1hdF9ieXRlLCBmcF9mb3JtYXRfcGFja2VkCisKK2ZwX2Zvcm1hdF9sb25nOgorCWpzcglmcF9jb252X2V4dDJsb25nCisJcHV0dXNlci5sICVkMCwoJWExKSxmcF9lcnJfdWExLCVhMQorCWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9mb3JtYXRfc2luZ2xlOgorCWpzcglmcF9jb252X2V4dDJzaW5nbGUKKwlwdXR1c2VyLmwgJWQwLCglYTEpLGZwX2Vycl91YTEsJWExCisJanJhCWZwX2ZpbmlzaF9tb3ZlCisKK2ZwX2Zvcm1hdF9leHRlbmRlZDoKKwltb3ZlLmwJKCVhMCkrLCVkMAorCWxzbC53CSMxLCVkMAorCWxzbC5sCSM3LCVkMAorCWxzbC5sCSM4LCVkMAorCXB1dHVzZXIubCAlZDAsKCVhMSkrLGZwX2Vycl91YTEsJWExCisJbW92ZS5sCSglYTApKywlZDAKKwlwdXR1c2VyLmwgJWQwLCglYTEpKyxmcF9lcnJfdWExLCVhMQorCW1vdmUubAkoJWEwKSwlZDAKKwlwdXR1c2VyLmwgJWQwLCglYTEpLGZwX2Vycl91YTEsJWExCisJanJhCWZwX2ZpbmlzaF9tb3ZlCisKK2ZwX2Zvcm1hdF9wYWNrZWQ6CisJLyogbm90IHN1cHBvcnRlZCB5ZXQgKi8KKwlsZWEJKDEyLCVzcCksJXNwCisJanJhCWZwX2lsbAorCitmcF9mb3JtYXRfd29yZDoKKwlqc3IJZnBfY29udl9leHQyc2hvcnQKKwlwdXR1c2VyLncgJWQwLCglYTEpLGZwX2Vycl91YTEsJWExCisJanJhCWZwX2ZpbmlzaF9tb3ZlCisKK2ZwX2Zvcm1hdF9kb3VibGU6CisJanNyCWZwX2NvbnZfZXh0MmRvdWJsZQorCWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9mb3JtYXRfYnl0ZToKKwlqc3IJZnBfY29udl9leHQyYnl0ZQorCXB1dHVzZXIuYiAlZDAsKCVhMSksZnBfZXJyX3VhMSwlYTEKK3wJanJhCWZwX2ZpbmlzaF9tb3ZlCisKK2ZwX2ZpbmlzaF9tb3ZlOgorCWxlYQkoMTIsJXNwKSwlc3AKKwlqcmEJZnBfZmluYWwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9tb3ZlbS5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX21vdmVtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1NGQzOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9tb3ZlbS5TCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogZnBfbW92ZW0uUworICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgImZwX2RlY29kZS5oIgorCit8IHNldCBmbGFncyBmb3IgZGVjb2RlIG1hY3JvcyBmb3IgZm1vdmVtCitkb19mbW92ZW09MQorCisJLmdsb2JsCWZwX2Ztb3ZlbV9mcCwgZnBfZm1vdmVtX2NyCisKK3wgJWQxIGNvbnRhaW5zIHRoZSBtYXNrIGFuZCBjb3VudCBvZiB0aGUgcmVnaXN0ZXIgbGlzdAorfCBmb3Igb3RoZXIgcmVnaXN0ZXIgdXNhZ2Ugc2VlIGZwX2RlY29kZS5oCisKK2ZwX2Ztb3ZlbV9mcDoKKwlwcmludGYJUERFQ09ERSwiZm1vdmVtLnggIgorCXwgZ2V0IHJlZ2lzdGVyIGxpc3QgYW5kIGNvdW50IHRoZW0KKwlidHN0CSMxMSwlZDIKKwlqbmUJMWYKKwliZmV4dHUJJWQyeyMyNCwjOH0sJWQwCQl8IHN0YXRpYyByZWdpc3RlciBsaXN0CisJanJhCTJmCisxOgliZmV4dHUJJWQyeyMyNSwjM30sJWQwCQl8IGR5bmFtaWMgcmVnaXN0ZXIgbGlzdAorCWpzcglmcF9nZXRfZGF0YV9yZWcKKzI6CW1vdmUubAklZDAsJWQxCisJc3dhcAklZDEKKwlqcmEJMmYKKzE6CWFkZHEudwkjMSwlZDEJCQl8IGNvdW50IHRoZSAjIG9mIHJlZ2lzdGVycyBpbgorMjoJbHNyLmIJIzEsJWQwCQkJfCByZWdpc3RlciBsaXN0IGFuZCBrZWVwIGl0IGluICVkMQorCWpjcwkxYgorCWpuZQkyYgorCXByaW50ZglQREVDT0RFLCIjJTA4eCIsMSwlZDEKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJYnRzdAkjMTIsJWQyCisJam5lCTFmCisJcHJpbnRmCVBERUNPREUsIi0iCQl8IGRlY3JlbWVudGFsIG1vdmUKKwlqcmEJMmYKKzE6CXByaW50ZglQREVDT0RFLCIrIgkJfCBpbmNyZW1lbnRhbCBtb3ZlCisyOglidHN0CSMxMywlZDIKKwlqZXEJMWYKKwlwcmludGYJUERFQ09ERSwiLT4iCQl8IGZwdSAtPiBjcHUKKwlqcmEJMmYKKzE6CXByaW50ZglQREVDT0RFLCI8LSIJCXwgZnB1IDwtIGNwdQorMjoKKyNlbmRpZgorCisJfCBkZWNvZGUgYWRkcmVzcyBtb2RlCisJZnBfZGVjb2RlX2FkZHJfbW9kZQorCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcHJfaW5kaXJlY3QsIGZwcl9wb3N0aW5jCisJLmxvbmcJZnByX3ByZWRlY3IsIGZwcl9kaXNwMTYKKwkubG9uZwlmcHJfZXh0bW9kZTAsIGZwcl9leHRtb2RlMQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3QKK2Zwcl9pbmRpcmVjdDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3QKKwlqcmEJZnByX2RvX21vdmVtCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHBvc3RpbmNyZW1lbnQKK2Zwcl9wb3N0aW5jOgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9wb3N0aW5jCisJanJhCWZwcl9kb19tb3ZlbQorCitmcHJfcHJlZGVjcjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJanJhCWZwcl9kb19tb3ZlbQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIvcHJvZ3JhbW0gY291bnRlciBpbmRpcmVjdAorCXwJCSAgIHdpdGggMTZiaXQgZGlzcGxhY2VtZW50CitmcHJfZGlzcDE2OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9kaXNwMTYKKwlqcmEJZnByX2RvX21vdmVtCisKK2Zwcl9leHRtb2RlMDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZXh0bW9kZTAKKwlqcmEJZnByX2RvX21vdmVtCisKK2Zwcl9leHRtb2RlMToKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcHJfYWJzb2x1dGVfc2hvcnQsIGZwcl9hYnNvbHV0ZV9sb25nCisJLmxvbmcJZnByX2Rpc3AxNiwgZnByX2V4dG1vZGUwCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAorCitmcHJfYWJzb2x1dGVfc2hvcnQ6CisJZnBfbW9kZV9hYnNfc2hvcnQKKwlqcmEJZnByX2RvX21vdmVtCisKK2Zwcl9hYnNvbHV0ZV9sb25nOgorCWZwX21vZGVfYWJzX2xvbmcKK3wJanJhCWZwcl9kb19tb3ZlbQorCitmcHJfZG9fbW92ZW06CisJc3dhcAklZDEJCQl8IGdldCBmcHUgcmVnaXN0ZXIgbGlzdAorCWxlYQkoRlBEX0ZQUkVHLEZQREFUQSksJWExCisJbW92ZXEJIzEyLCVkMAorCWJ0c3QJIzEyLCVkMgorCWpuZQkxZgorCWxlYQkoLTEyLCVhMSwlZDAqOCksJWExCisJbmVnLmwJJWQwCisxOglidHN0CSMxMywlZDIKKwlqbmUJNGYKKwl8IG1vdmUgcmVnaXN0ZXIgZnJvbSBtZW1vcnkgaW50byBmcHUKKwlqcmEJM2YKKzE6CXByaW50ZglQTU9WRU0sIiglcD4lcCkiLDIsJWEwLCVhMQorCWdldHVzZXIubCAoJWEwKSssJWQyLGZwX2Vycl91YTEsJWEwCisJbHNyLmwJIzgsJWQyCisJbHNyLmwJIzcsJWQyCisJbHNyLncJIzEsJWQyCisJbW92ZS5sCSVkMiwoJWExKSsKKwlnZXR1c2VyLmwgKCVhMCkrLCVkMixmcF9lcnJfdWExLCVhMAorCW1vdmUubAklZDIsKCVhMSkrCisJZ2V0dXNlci5sICglYTApLCVkMixmcF9lcnJfdWExLCVhMAorCW1vdmUubAklZDIsKCVhMSkKKwlzdWJxLmwJIzgsJWEwCisJc3VicS5sCSM4LCVhMQorCWFkZC5sCSVkMCwlYTAKKzI6CWFkZC5sCSVkMCwlYTEKKzM6CWxzbC5iCSMxLCVkMQorCWpjcwkxYgorCWpuZQkyYgorCWpyYQk1ZgorCXwgbW92ZSByZWdpc3RlciBmcm9tIGZwdSBpbnRvIG1lbW9yeQorMToJcHJpbnRmCVBNT1ZFTSwiKCVwPiVwKSIsMiwlYTEsJWEwCisJbW92ZS5sCSglYTEpKywlZDIKKwlsc2wudwkjMSwlZDIKKwlsc2wubAkjNywlZDIKKwlsc2wubAkjOCwlZDIKKwlwdXR1c2VyLmwgJWQyLCglYTApKyxmcF9lcnJfdWExLCVhMAorCW1vdmUubAkoJWExKSssJWQyCisJcHV0dXNlci5sICVkMiwoJWEwKSssZnBfZXJyX3VhMSwlYTAKKwltb3ZlLmwJKCVhMSksJWQyCisJcHV0dXNlci5sICVkMiwoJWEwKSxmcF9lcnJfdWExLCVhMAorCXN1YnEubAkjOCwlYTEKKwlzdWJxLmwJIzgsJWEwCisJYWRkLmwJJWQwLCVhMAorMjoJYWRkLmwJJWQwLCVhMQorNDoJbHNsLmIJIzEsJWQxCisJamNzCTFiCisJam5lCTJiCis1OgorCXByaW50ZglQREVDT0RFLCJcbiIKKyNpZiAwCisJbGVhCShGUERfRlBSRUcsRlBEQVRBKSwlYTAKKwlwcmludGYJUE1PVkVNLCJmcDoiCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDApCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDEyKQorCXByaW50ZglQTU9WRU0sIlxuICAgIgorCXByaW50eAlQTU9WRU0sJWEwQCgyNCkKKwlwcmludHgJUE1PVkVNLCVhMEAoMzYpCisJcHJpbnRmCVBNT1ZFTSwiXG4gICAiCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDQ4KQorCXByaW50eAlQTU9WRU0sJWEwQCg2MCkKKwlwcmludGYJUE1PVkVNLCJcbiAgICIKKwlwcmludHgJUE1PVkVNLCVhMEAoNzIpCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDg0KQorCXByaW50ZglQTU9WRU0sIlxuIgorI2VuZGlmCisJanJhCWZwX2VuZAorCit8IHNldCBmbGFncyBmb3IgZGVjb2RlIG1hY3JvcyBmb3IgZm1vdmVtIGNvbnRyb2wgcmVnaXN0ZXIKK2RvX2Ztb3ZlbT0xCitkb19mbW92ZW1fY3I9MQorCitmcF9mbW92ZW1fY3I6CisJcHJpbnRmCVBERUNPREUsImZtb3ZlbS5jciAiCisJfCBnZXQgcmVnaXN0ZXIgbGlzdCBhbmQgY291bnQgdGhlbQorCWJmZXh0dQklZDJ7IzE5LCMzfSwlZDAKKwltb3ZlLmwJJWQwLCVkMQorCXN3YXAJJWQxCisJanJhCTJmCisxOglhZGRxLncJIzEsJWQxCisyOglsc3IubAkjMSwlZDAKKwlqY3MJMWIKKwlqbmUJMmIKKwlwcmludGYJUERFQ09ERSwiIyUwOHgiLDEsJWQxCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCWJ0c3QJIzEzLCVkMgorCWplcQkxZgorCXByaW50ZglQREVDT0RFLCItPiIJCXwgZnB1IC0+IGNwdQorCWpyYQkyZgorMToJcHJpbnRmCVBERUNPREUsIjwtIgkJfCBmcHUgPC0gY3B1CisyOgorI2VuZGlmCisKKwl8IGRlY29kZSBhZGRyZXNzIG1vZGUKKwlmcF9kZWNvZGVfYWRkcl9tb2RlCisKKwkubG9uZwlmcGNfZGF0YSwgZnBjX2FkZHIKKwkubG9uZwlmcGNfaW5kaXJlY3QsIGZwY19wb3N0aW5jCisJLmxvbmcJZnBjX3ByZWRlY3IsIGZwY19kaXNwMTYKKwkubG9uZwlmcGNfZXh0bW9kZTAsIGZwY19leHRtb2RlMQorCitmcGNfZGF0YToKKwlmcF9tb2RlX2RhdGFfZGlyZWN0CisJbW92ZS53CSVkMCwlZDEKKwliZmZmbwklZDJ7IzE5LCMzfSwlZDAKKwlzdWIudwkjMTksJWQwCisJbGVhCShGUERfRlBDUixGUERBVEEsJWQwLncqNCksJWExCisJYnRzdAkjMTMsJWQyCisJam5lCTFmCisJbW92ZS53CSVkMSwlZDAKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisJbW92ZS5sCSVkMCwoJWExKQorCWpyYQlmcGNfbW92ZW1fZmluCisxOgltb3ZlLmwJKCVhMSksJWQwCisJanNyCWZwX3B1dF9kYXRhX3JlZworCWpyYQlmcGNfbW92ZW1fZmluCisKK2ZwY19hZGRyOgorCWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCJhJWQiLDEsJWQwCisJYnRzdAkjMTMsJWQyCisJam5lCTFmCisJanNyCWZwX2dldF9hZGRyX3JlZworCW1vdmUubAklYTAsKEZQRF9GUElBUixGUERBVEEpCisJanJhCWZwY19tb3ZlbV9maW4KKzE6CW1vdmUubAkoRlBEX0ZQSUFSLEZQREFUQSksJWEwCisJanNyCWZwX3B1dF9hZGRyX3JlZworCWpyYQlmcGNfbW92ZW1fZmluCisKK2ZwY19pbmRpcmVjdDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3QKKwlqcmEJZnBjX2RvX21vdmVtCisKK2ZwY19wb3N0aW5jOgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9wb3N0aW5jCisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfcHJlZGVjcjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfZGlzcDE2OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9kaXNwMTYKKwlqcmEJZnBjX2RvX21vdmVtCisKK2ZwY19leHRtb2RlMDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZXh0bW9kZTAKKwlqcmEJZnBjX2RvX21vdmVtCisKK2ZwY19leHRtb2RlMToKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcGNfYWJzb2x1dGVfc2hvcnQsIGZwY19hYnNvbHV0ZV9sb25nCisJLmxvbmcJZnBjX2Rpc3AxNiwgZnBjX2V4dG1vZGUwCisJLmxvbmcJZnBjX2ltbWVkaWF0ZSwgZnBfaWxsCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKworZnBjX2Fic29sdXRlX3Nob3J0OgorCWZwX21vZGVfYWJzX3Nob3J0CisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfYWJzb2x1dGVfbG9uZzoKKwlmcF9tb2RlX2Fic19sb25nCisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfaW1tZWRpYXRlOgorCWZwX2dldF9wYyAlYTAKKwlsZWEJKCVhMCwlZDEudyo0KSwlYTEKKwlmcF9wdXRfcGMgJWExCisJcHJpbnRmCVBERUNPREUsIiNpbW0iCit8CWpyYQlmcGNfZG9fbW92ZW0KKyNpZiAwCisJc3dhcAklZDEKKwlsc2wubAkjNSwlZDEKKwlsZWEJKEZQRF9GUENSLEZQREFUQSksJWEwCisJanJhCTNmCisxOgltb3ZlLmwJJWQwLCglYTApCisyOglhZGRxLmwJIzQsJWEwCiszOglsc2wuYgkjMSwlZDEKKwlqY3MJMWIKKwlqbmUJMmIKKwlqcmEJZnBjX21vdmVtX2ZpbgorI2VuZGlmCisKK2ZwY19kb19tb3ZlbToKKwlzd2FwCSVkMQkJCXwgZ2V0IGZwdSByZWdpc3RlciBsaXN0CisJbHNsLmwJIzUsJWQxCisJbGVhCShGUERfRlBDUixGUERBVEEpLCVhMQorMToJYnRzdAkjMTMsJWQyCisJam5lCTRmCisKKwl8IG1vdmUgcmVnaXN0ZXIgZnJvbSBtZW1vcnkgaW50byBmcHUKKwlqcmEJM2YKKzE6CXByaW50ZglQTU9WRU0sIiglcD4lcCkiLDIsJWEwLCVhMQorCWdldHVzZXIubCAoJWEwKSssJWQwLGZwX2Vycl91YTEsJWEwCisJbW92ZS5sCSVkMCwoJWExKQorMjoJYWRkcS5sCSM0LCVhMQorMzoJbHNsLmIJIzEsJWQxCisJamNzCTFiCisJam5lCTJiCisJanJhCWZwY19tb3ZlbV9maW4KKworCXwgbW92ZSByZWdpc3RlciBmcm9tIGZwdSBpbnRvIG1lbW9yeQorMToJcHJpbnRmCVBNT1ZFTSwiKCVwPiVwKSIsMiwlYTEsJWEwCisJbW92ZS5sCSglYTEpLCVkMAorCXB1dHVzZXIubCAlZDAsKCVhMCkrLGZwX2Vycl91YTEsJWEwCisyOglhZGRxLmwJIzQsJWExCis0Oglsc2wuYgkjMSwlZDEKKwlqY3MJMWIKKwlqbmUJMmIKKworZnBjX21vdmVtX2ZpbjoKKwlhbmQubAkjMHgwMDAwZmZmMCwoRlBEX0ZQQ1IsRlBEQVRBKQorCWFuZC5sCSMweDBmZmZmZmY4LChGUERfRlBTUixGUERBVEEpCisJbW92ZS5sCShGUERfRlBDUixGUERBVEEpLCVkMAorCWxzci5sCSM0LCVkMAorCW1vdmVxCSMzLCVkMQorCWFuZC5sCSVkMCwlZDEKKwltb3ZlLncJJWQxLChGUERfUk5ELEZQREFUQSkKKwlsc3IubAkjMiwlZDAKKwltb3ZlcQkjMywlZDEKKwlhbmQubAklZDAsJWQxCisJbW92ZS53CSVkMSwoRlBEX1BSRUMsRlBEQVRBKQorCXByaW50ZglQREVDT0RFLCJcbiIKKyNpZiAwCisJcHJpbnRmCVBNT1ZFTSwiZnBjciA6ICUwOHhcbiIsMSxGUERBVEFAKEZQRF9GUENSKQorCXByaW50ZglQTU9WRU0sImZwc3IgOiAlMDh4XG4iLDEsRlBEQVRBQChGUERfRlBTUikKKwlwcmludGYJUE1PVkVNLCJmcGlhcjogJTA4eFxuIiwxLEZQREFUQUAoRlBEX0ZQSUFSKQorCWNsci5sCSVkMAorCW1vdmUudwkoRlBEX1BSRUMsRlBEQVRBKSwlZDAKKwlwcmludGYJUE1PVkVNLCJwcmVjIDogJTA0eFxuIiwxLCVkMAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMAorCXByaW50ZglQTU9WRU0sInJuZCAgOiAlMDR4XG4iLDEsJWQwCisjZW5kaWYKKwlqcmEJZnBfZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfc2Nhbi5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3NjYW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE0NmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3NjYW4uUwpAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAqIGZwX3NjYW4uUworICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgImZwX2RlY29kZS5oIgorCisJLmdsb2JsCWZwX3NjYW4sIGZwX2RhdGFzaXplCisKKwkuZGF0YQorCit8ICVkMiAtIGZpcnN0IHR3byBpbnN0ciB3b3JkcworfCAlZDEgLSBvcGVyYW5kIHNpemUKKworLyogb3BlcmFuZCBmb3JtYXRzIGFyZToKKworCUxvbmcgPSAwLAkJaS5lLiBmbW92ZS5sCisJU2luZ2xlLAkJCWkuZS4gZm1vdmUucworCUV4dGVuZGVkLAkJaS5lLiBmbW92ZS54CisJUGFja2VkLUJDRCwJCWkuZS4gZm1vdmUucAorCVdvcmQsCQkJaS5lLiBmbW92ZS53CisJRG91YmxlLAkJCWkuZS4gZm1vdmUuZAorKi8KKworCS50ZXh0CisKK3wgT24gZW50cnk6Cit8IEZQREFUQSAtIGJhc2Ugb2YgZW11bGF0ZWQgRlBVIHJlZ2lzdGVycworCitmcF9zY2FuOgorfCBub3JtYWwgZnB1IGluc3RydWN0aW9uPyAodGhpcyBleGNsdWRlcyBmc2F2ZS9mcmVzdG9yZSkKKwlmcF9nZXRfcGMgJWEwCisJcHJpbnRmCVBERUNPREUsIiUwOHg6ICIsMSwlYTAKKwlnZXR1c2VyLmIgKCVhMCksJWQwLGZwX2Vycl91YTEsJWEwCisjaWYgMQorCWNtcC5iCSMweGYyLCVkMAkJfCBjcGlkID0gMQorI2Vsc2UKKwljbXAuYgkjMHhmYywlZDAJCXwgY3BpZCA9IDYKKyNlbmRpZgorCWpuZQlmcF9ub25zdGQKK3wgZmlyc3QgdHdvIGluc3RydWN0aW9uIHdvcmRzIGFyZSBrZXB0IGluICVkMgorCWdldHVzZXIubCAoJWEwKSssJWQyLGZwX2Vycl91YTEsJWEwCisJZnBfcHV0X3BjICVhMAorZnBfZGVjb2RlX2NvbmQ6CQkJCXwgc2VwYXJhdGUgY29uZGl0aW9uYWwgaW5zdHIKKwlmcF9kZWNvZGVfY29uZF9pbnN0cl90eXBlCisKKwkubG9uZwlmcF9kZWNvZGVfbW92ZSwgZnBfZnNjYworCS5sb25nCWZwX2ZiY2N3LCBmcF9mYmNjbAorCitmcF9kZWNvZGVfbW92ZToJCQkJfCBzZXBhcmF0ZSBtb3ZlIGluc3RyCisJZnBfZGVjb2RlX21vdmVfaW5zdHJfdHlwZQorCisJLmxvbmcJZnBfZmdlbl9mcCwgZnBfaWxsCisJLmxvbmcJZnBfZmdlbl9lYSwgZnBfZm1vdmVfZnAybWVtCisJLmxvbmcJZnBfZm1vdmVtX2NyLCBmcF9mbW92ZW1fY3IKKwkubG9uZwlmcF9mbW92ZW1fZnAsIGZwX2Ztb3ZlbV9mcAorCit8IG5vdyBhbGwgYXJpdGhtZXRpYyBpbnN0ciBhbmQgYSBmZXcgbW92ZSBpbnN0ciBhcmUgbGVmdAorZnBfZmdlbl9mcDoJCQkJfCBzb3VyY2UgaXMgYSBmcHUgcmVnaXN0ZXIKKwljbHIuYgkoRlBEX0ZQU1IrMixGUERBVEEpCXwgY2xlYXIgdGhlIGV4Y2VwdGlvbiBieXRlCisJZnBfZGVjb2RlX3NvdXJjZXNwZWMKKwlwcmludGYJUERFQ09ERSwiZjxvcD4ueCBmcCVkIiwxLCVkMAorCWZwX2dldF9mcF9yZWcKKwlsZWEJKEZQRF9URU1QRlAxLEZQREFUQSksJWExIHwgY29weSBzcmMgaW50byBhIHRlbXAgbG9jYXRpb24KKwltb3ZlLmwJKCVhMCkrLCglYTEpKworCW1vdmUubAkoJWEwKSssKCVhMSkrCisJbW92ZS5sCSglYTApLCglYTEpCisJbGVhCSgtOCwlYTEpLCVhMAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX2ZnZW5fZWE6CQkJCXwgc291cmNlIGlzIDxlYT4KKwljbHIuYgkoRlBEX0ZQU1IrMixGUERBVEEpCXwgY2xlYXIgdGhlIGV4Y2VwdGlvbiBieXRlCisJfCBzb3J0IG91dCBmbW92ZWNyLCBrZWVwIGRhdGEgc2l6ZSBpbiAlZDEKKwlmcF9kZWNvZGVfc291cmNlc3BlYworCWNtcC53CSM3LCVkMAorCWplcQlmcF9mbW92ZWNyCisJbW92ZS53CSVkMCwlZDEJCQl8IHN0b3JlIGRhdGEgc2l6ZSB0d2ljZSBpbiAlZDEKKwlzd2FwCSVkMQkJCXwgb25lIGNhbiBiZSB0cmFzaGVkIGJlbG93CisJbW92ZS53CSVkMCwlZDEKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJbGVhCTBmLCVhMAorCWNsci5sCSVkMAorCW1vdmUuYgkoJWEwLCVkMS53KSwlZDAKKwlwcmludGYJUERFQ09ERSwiZjxvcD4uJWMgIiwxLCVkMAorCisJLmRhdGEKKzA6CS5ieXRlCSdsJywncycsJ3gnLCdwJywndycsJ2QnLCdiJywwCisJLnByZXZpb3VzCisjZW5kaWYKKworLyoKKwlmcF9nZXRzb3VyY2UsIGZwX2dldGRlc3QKKworCWJhc2ljYWxseSwgd2UgZW5kIHVwIHdpdGggYSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3BlcmFuZCBpbgorCSVhMSwgYW5kIGEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gb3BlcmFuZCBpbiAlYTAuICBib3RoCisJYXJlLCBvZiBjb3Vyc2UsIDk2LWJpdCBleHRlbmRlZCBmbG9hdGluZyBwb2ludCBudW1iZXJzLgorKi8KKworZnBfZ2V0c291cmNlOgorCXwgZGVjb2RlIGFkZHJlc3NpbmcgbW9kZSBmb3Igc291cmNlCisJZnBfZGVjb2RlX2FkZHJfbW9kZQorCisJLmxvbmcJZnBfZGF0YSwgZnBfaWxsCisJLmxvbmcJZnBfaW5kaXJlY3QsIGZwX3Bvc3RpbmMKKwkubG9uZwlmcF9wcmVkZWNyLCBmcF9kaXNwMTYKKwkubG9uZwlmcF9leHRtb2RlMCwgZnBfZXh0bW9kZTEKKworCXwgYWRkcmVzc2luZyBtb2RlOiBkYXRhIHJlZ2lzdGVyIGRpcmVjdAorZnBfZGF0YToKKwlmcF9tb2RlX2RhdGFfZGlyZWN0CisJanNyCWZwX2dldF9kYXRhX3JlZworCWxlYQkoRlBEX1RFTVBGUDEsRlBEQVRBKSwlYTAKKwlqbXAJKFswZjp3LCVwYywlZDEudyo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX2RhdGFfbG9uZywgZnBfZGF0YV9zaW5nbGUKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2RhdGFfd29yZCwgZnBfaWxsCisJLmxvbmcJZnBfZGF0YV9ieXRlLCBmcF9pbGwKKworCXwgZGF0YSB0eXBlcyB0aGF0IGZpdCBpbiBhbiBpbnRlZ2VyIGRhdGEgcmVnaXN0ZXIKK2ZwX2RhdGFfYnl0ZToKKwlleHRiLmwJJWQwCisJanJhCWZwX2RhdGFfbG9uZworCitmcF9kYXRhX3dvcmQ6CisJZXh0LmwJJWQwCisKK2ZwX2RhdGFfbG9uZzoKKwlqc3IJZnBfY29udl9sb25nMmV4dAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX2RhdGFfc2luZ2xlOgorCWpzcglmcF9jb252X3NpbmdsZTJleHQKKwlqcmEJZnBfZ2V0ZGVzdAorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3QKK2ZwX2luZGlyZWN0OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdAorCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwb3N0aW5jcmVtZW50CitmcF9wb3N0aW5jOgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9wb3N0aW5jCisJanJhCWZwX2ZldGNoc291cmNlCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHByZWRlY3JlbWVudAorZnBfcHJlZGVjcjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJanJhCWZwX2ZldGNoc291cmNlCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3Rlci9wcm9ncmFtbSBjb3VudGVyIGluZGlyZWN0CisJfAkJICAgd2l0aCAxNmJpdCBkaXNwbGFjZW1lbnQKK2ZwX2Rpc3AxNjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZGlzcDE2CisJanJhCWZwX2ZldGNoc291cmNlCisKKwl8IGFsbCBvdGhlciBpbmRpcmVjdCBhZGRyZXNzaW5nIG1vZGVzIHdpbGwgZmluYWxseSBlbmQgdXAgaGVyZQorZnBfZXh0bW9kZTA6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJanJhCWZwX2ZldGNoc291cmNlCisKK3wgYWxsIHBjIHJlbGF0aXZlIGFkZHJlc3NpbmcgbW9kZXMgYW5kIGltbWVkaWF0ZS9hYnNvbHV0ZSBtb2RlcyBlbmQgdXAgaGVyZQorfCB0aGUgZmlyc3Qgb25lcyBhcmUgc2VudCB0byBmcF9leHRtb2RlMCBvciBmcF9kaXNwMTYKK3wgYW5kIG9ubHkgdGhlIGxhdHRlciBhcmUgaGFuZGxlZCBoZXJlCitmcF9leHRtb2RlMToKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9hYnNfc2hvcnQsIGZwX2Fic19sb25nCisJLmxvbmcJZnBfZGlzcDE2LCBmcF9leHRtb2RlMAorCS5sb25nCWZwX2ltbWVkaWF0ZSwgZnBfaWxsCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhYnNvbHV0ZSBzaG9ydAorZnBfYWJzX3Nob3J0OgorCWZwX21vZGVfYWJzX3Nob3J0CisJanJhCWZwX2ZldGNoc291cmNlCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWJzb2x1dGUgbG9uZworZnBfYWJzX2xvbmc6CisJZnBfbW9kZV9hYnNfbG9uZworCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGltbWVkaWF0ZSBkYXRhCitmcF9pbW1lZGlhdGU6CisJcHJpbnRmCVBERUNPREUsIiMiCisJZnBfZ2V0X3BjICVhMAorCW1vdmUudwkoZnBfZGF0YXNpemUsJWQxLncqMiksJWQwCisJYWRkcS53CSMxLCVkMAorCWFuZC53CSMtMiwlZDAKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJbW92ZW0ubAklZDAvJWQxLC0oJXNwKQorCW1vdmVsCSVhMCwlYTEKKwljbHIubAklZDEKKwlqcmEJMmYKKzE6CWdldHVzZXIuYiAoJWExKSssJWQxLGZwX2Vycl91YTEsJWExCisJcHJpbnRmCVBERUNPREUsIiUwMngiLDEsJWQxCisyOglkYnJhCSVkMCwxYgorCW1vdmVtLmwJKCVzcCkrLCVkMC8lZDEKKyNlbmRpZgorCWxlYQkoJWEwLCVkMC53KSwlYTEKKwlmcF9wdXRfcGMgJWExCit8CWpyYQlmcF9mZXRjaHNvdXJjZQorCitmcF9mZXRjaHNvdXJjZToKKwltb3ZlLmwJJWEwLCVhMQorCXN3YXAJJWQxCisJbGVhCShGUERfVEVNUEZQMSxGUERBVEEpLCVhMAorCWptcAkoWzBmOncsJXBjLCVkMS53KjRdKQorCisJLmFsaWduCTQKKzA6CS5sb25nCWZwX2xvbmcsIGZwX3NpbmdsZQorCS5sb25nCWZwX2V4dCwgZnBfcGFjaworCS5sb25nCWZwX3dvcmQsIGZwX2RvdWJsZQorCS5sb25nCWZwX2J5dGUsIGZwX2lsbAorCitmcF9sb25nOgorCWdldHVzZXIubCAoJWExKSwlZDAsZnBfZXJyX3VhMSwlYTEKKwlqc3IJZnBfY29udl9sb25nMmV4dAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX3NpbmdsZToKKwlnZXR1c2VyLmwgKCVhMSksJWQwLGZwX2Vycl91YTEsJWExCisJanNyCWZwX2NvbnZfc2luZ2xlMmV4dAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX2V4dDoKKwlnZXR1c2VyLmwgKCVhMSkrLCVkMCxmcF9lcnJfdWExLCVhMQorCWxzci5sCSM4LCVkMAorCWxzci5sCSM3LCVkMAorCWxzci53CSMxLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJZ2V0dXNlci5sICglYTEpKywlZDAsZnBfZXJyX3VhMSwlYTEKKwltb3ZlLmwJJWQwLCglYTApKworCWdldHVzZXIubCAoJWExKSwlZDAsZnBfZXJyX3VhMSwlYTEKKwltb3ZlLmwJJWQwLCglYTApCisJc3VicS5sCSM4LCVhMAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX3BhY2s6CisJLyogbm90IHN1cHBvcnRlZCB5ZXQgKi8KKwlqcmEJZnBfaWxsCisKK2ZwX3dvcmQ6CisJZ2V0dXNlci53ICglYTEpLCVkMCxmcF9lcnJfdWExLCVhMQorCWV4dC5sCSVkMAorCWpzcglmcF9jb252X2xvbmcyZXh0CisJanJhCWZwX2dldGRlc3QKKworZnBfZG91YmxlOgorCWpzcglmcF9jb252X2RvdWJsZTJleHQKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9ieXRlOgorCWdldHVzZXIuYiAoJWExKSwlZDAsZnBfZXJyX3VhMSwlYTEKKwlleHRiLmwJJWQwCisJanNyCWZwX2NvbnZfbG9uZzJleHQKK3wJanJhCWZwX2dldGRlc3QKKworZnBfZ2V0ZGVzdDoKKwltb3ZlLmwJJWEwLCVhMQorCWJmZXh0dQklZDJ7IzIyLCMzfSwlZDAKKwlwcmludGYJUERFQ09ERSwiLGZwJWRcbiIsMSwlZDAKKwlmcF9nZXRfZnBfcmVnCisJbW92ZW0ubAklYTAvJWExLC0oJXNwKQorCXBlYQlmcF9maW5hbHJvdW5kaW5nCisJYmZleHR1CSVkMnsjMjUsIzd9LCVkMAorCWptcAkoWzBmOncsJXBjLCVkMCo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX2Ztb3ZlX21lbTJmcCwgZnBfZmludCwgZnBfZnNpbmgsIGZwX2ZpbnRyegorCS5sb25nCWZwX2ZzcXJ0LCBmcF9pbGwsIGZwX2Zsb2ducDEsIGZwX2lsbAorCS5sb25nCWZwX2ZldG94bTEsIGZwX2Z0YW5oLCBmcF9mYXRhbiwgZnBfaWxsCisJLmxvbmcJZnBfZmFzaW4sIGZwX2ZhdGFuaCwgZnBfZnNpbiwgZnBfZnRhbgorCS5sb25nCWZwX2ZldG94LCBmcF9mdHdvdG94LCBmcF9mdGVudG94LCBmcF9pbGwKKwkubG9uZwlmcF9mbG9nbiwgZnBfZmxvZzEwLCBmcF9mbG9nMiwgZnBfaWxsCisJLmxvbmcJZnBfZmFicywgZnBfZmNvc2gsIGZwX2ZuZWcsIGZwX2lsbAorCS5sb25nCWZwX2ZhY29zLCBmcF9mY29zLCBmcF9mZ2V0ZXhwLCBmcF9mZ2V0bWFuCisJLmxvbmcJZnBfZmRpdiwgZnBfZm1vZCwgZnBfZmFkZCwgZnBfZm11bAorCS5sb25nCWZwYV9mc2dsZGl2LCBmcF9mcmVtLCBmcF9mc2NhbGUsIGZwYV9mc2dsbXVsCisJLmxvbmcJZnBfZnN1YiwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2ZzaW5jb3MwLCBmcF9mc2luY29zMSwgZnBfZnNpbmNvczIsIGZwX2ZzaW5jb3MzCisJLmxvbmcJZnBfZnNpbmNvczQsIGZwX2ZzaW5jb3M1LCBmcF9mc2luY29zNiwgZnBfZnNpbmNvczcKKwkubG9uZwlmcF9mY21wLCBmcF9pbGwsIGZwX2Z0c3QsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2ZzbW92ZSwgZnBfZnNzcXJ0LCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2ZkbW92ZSwgZnBfZmRzcXJ0LCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2ZzYWJzLCBmcF9pbGwsIGZwX2ZzbmVnLCBmcF9pbGwKKwkubG9uZwlmcF9mZGFicywgZnBfaWxsLCBmcF9mZG5lZywgZnBfaWxsCisJLmxvbmcJZnBfZnNkaXYsIGZwX2lsbCwgZnBfZnNhZGQsIGZwX2ZzbXVsCisJLmxvbmcJZnBfZmRkaXYsIGZwX2lsbCwgZnBfZmRhZGQsIGZwX2ZkbXVsCisJLmxvbmcJZnBfZnNzdWIsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9mZHN1YiwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsLCBmcF9pbGwsIGZwX2lsbAorCisJfCBJbnN0cnVjdGlvbnMgZm9sbG93CisKKwl8IE1vdmUgYW4gKGVtdWxhdGVkKSBST00gY29uc3RhbnQKK2ZwX2Ztb3ZlY3I6CisJYmZleHR1CSVkMnsjMjcsIzV9LCVkMAorCXByaW50ZglQSU5TVFIsImZwX2Ztb3ZlY3IgIyVkIiwxLCVkMAorCW1vdmUubAklZDAsJWQxCisJYWRkLmwJJWQwLCVkMAorCWFkZC5sCSVkMSwlZDAKKwlsZWEJKGZwX2NvbnN0YW50cywlZDAqNCksJWEwCisJbW92ZS5sCSMweDgwMWNjMGZmLCVkMAorCWFkZHEubAkjMSwlZDEKKwlsc2wubAklZDEsJWQwCisJamNjCTFmCisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCQkJfCBJTkVYMiBleGNlcHRpb24KKzE6CW1vdmVxCSMtMTI4LCVkMAkJCQl8IGNvbnRpbnVlIHdpdGggZm1vdmUKKwlhbmQubAklZDAsJWQyCisJanJhCWZwX2dldGRlc3QKKworCS5kYXRhCisJLmFsaWduCTQKK2ZwX2NvbnN0YW50czoKKwkubG9uZwkweDAwMDA0MDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNQl8IHBpCisJLmV4dGVuZAkwLDAsMCwwLDAsMCwwLDAsMCwwCisJLmxvbmcJMHgwMDAwM2ZmZCwweDlhMjA5YTg0LDB4ZmJjZmY3OTgJfCBsb2cxMCgyKQorCS5sb25nCTB4MDAwMDQwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhCXwgZQorCS5sb25nCTB4MDAwMDNmZmYsMHhiOGFhM2IyOSwweDVjMTdmMGJjCXwgbG9nMihlKQorCS5sb25nCTB4MDAwMDNmZmQsMHhkZTViZDhhOSwweDM3Mjg3MTk1CXwgbG9nMTAoZSkKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAl8IDAuMAorCS5sb25nCTB4MDAwMDNmZmUsMHhiMTcyMTdmNywweGQxY2Y3OWFjCXwgMW4oMikKKwkubG9uZwkweDAwMDA0MDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNwl8IDFuKDEwKQorCXwgcmVhZCB0aGlzIGFzICIxLjAgKiAyXjAiIC0gbm90ZSB0aGUgaGlnaCBiaXQgaW4gdGhlIG1hbnRpc3NhCisJLmxvbmcJMHgwMDAwM2ZmZiwweDgwMDAwMDAwLDB4MDAwMDAwMDAJfCAxMF4wCisJLmxvbmcJMHgwMDAwNDAwMiwweGEwMDAwMDAwLDB4MDAwMDAwMDAJfCAxMF4xCisJLmxvbmcJMHgwMDAwNDAwNSwweGM4MDAwMDAwLDB4MDAwMDAwMDAJfCAxMF4yCisJLmxvbmcJMHgwMDAwNDAwYywweDljNDAwMDAwLDB4MDAwMDAwMDAJfCAxMF40CisJLmxvbmcJMHgwMDAwNDAxOSwweGJlYmMyMDAwLDB4MDAwMDAwMDAJfCAxMF44CisJLmxvbmcJMHgwMDAwNDAzNCwweDhlMWJjOWJmLDB4MDQwMDAwMDAJfCAxMF4xNgorCS5sb25nCTB4MDAwMDQwNjksMHg5ZGM1YWRhOCwweDJiNzBiNTllCXwgMTBeMzIKKwkubG9uZwkweDAwMDA0MGQzLDB4YzI3ODFmNDksMHhmZmNmYTZkNQl8IDEwXjY0CisJLmxvbmcJMHgwMDAwNDFhOCwweDkzYmE0N2M5LDB4ODBlOThjZTAJfCAxMF4xMjgKKwkubG9uZwkweDAwMDA0MzUxLDB4YWE3ZWViZmIsMHg5ZGY5ZGU4ZQl8IDEwXjI1NgorCS5sb25nCTB4MDAwMDQ2YTMsMHhlMzE5YTBhZSwweGE2MGU5MWM3CXwgMTBeNTEyCisJLmxvbmcJMHgwMDAwNGQ0OCwweGM5NzY3NTg2LDB4ODE3NTBjMTcJfCAxMF4xMDI0CisJLmxvbmcJMHgwMDAwNWE5MiwweDllOGIzYjVkLDB4YzUzZDVkZTUJfCAxMF4yMDQ4CisJLmxvbmcJMHgwMDAwNzUyNSwweGM0NjA1MjAyLDB4OGEyMDk3OWIJfCAxMF40MDk2CisJLnByZXZpb3VzCisKK2ZwX2Ztb3ZlX21lbTJmcDoKKwlwcmludGYJUElOU1RSLCJmbW92ZSAlcCwlcFxuIiwyLCVhMCwlYTEKKwltb3ZlLmwJKCVhMSkrLCglYTApKworCW1vdmUubAkoJWExKSssKCVhMCkrCisJbW92ZS5sCSglYTEpLCglYTApCisJc3VicS5sCSM4LCVhMAorCXJ0cworCitmcGFfZnNnbG11bDoKKwltb3ZlLmwJI2ZwX2ZpbmFscm91bmRpbmdfc2luZ2xlX2Zhc3QsKCVzcCkKKwlqcmEJZnBfZnNnbG11bAorCitmcGFfZnNnbGRpdjoKKwltb3ZlLmwJI2ZwX2ZpbmFscm91bmRpbmdfc2luZ2xlX2Zhc3QsKCVzcCkKKwlqcmEJZnBfZnNnbGRpdgorCisubWFjcm8JZnBfZG9zaW5nbGVwcmVjIGluc3RyCisJcHJpbnRmCVBJTlNUUiwic2luZ2xlICIKKwltb3ZlLmwJI2ZwX2ZpbmFscm91bmRpbmdfc2luZ2xlLCglc3ApCisJanJhCVxpbnN0cgorLmVuZG0KKworLm1hY3JvCWZwX2RvZG91YmxlcHJlYyBpbnN0cgorCXByaW50ZglQSU5TVFIsImRvdWJsZSAiCisJbW92ZS5sCSNmcF9maW5hbHJvdW5kaW5nX2RvdWJsZSwoJXNwKQorCWpyYQlcaW5zdHIKKy5lbmRtCisKK2ZwX2ZzbW92ZToKKwlmcF9kb3NpbmdsZXByZWMgZnBfZm1vdmVfbWVtMmZwCisKK2ZwX2Zzc3FydDoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZnNxcnQKKworZnBfZmRtb3ZlOgorCWZwX2RvZG91YmxlcHJlYyBmcF9mbW92ZV9tZW0yZnAKKworZnBfZmRzcXJ0OgorCWZwX2RvZG91YmxlcHJlYyBmcF9mc3FydAorCitmcF9mc2FiczoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZmFicworCitmcF9mc25lZzoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZm5lZworCitmcF9mZGFiczoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZmFicworCitmcF9mZG5lZzoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZm5lZworCitmcF9mc2RpdjoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZmRpdgorCitmcF9mc2FkZDoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZmFkZAorCitmcF9mc211bDoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZm11bAorCitmcF9mZGRpdjoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZmRpdgorCitmcF9mZGFkZDoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZmFkZAorCitmcF9mZG11bDoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZm11bAorCitmcF9mc3N1YjoKKwlmcF9kb3NpbmdsZXByZWMgZnBfZnN1YgorCitmcF9mZHN1YjoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZnN1YgorCitmcF9ub25zdGQ6CisJZnBfZ2V0X3BjICVhMAorCWdldHVzZXIubCAoJWEwKSwlZDAsZnBfZXJyX3VhMSwlYTAKKwlwcmludGYJLCJub25zdGQgKCglMDh4KT0lMDh4KVxuIiwyLCVhMCwlZDAKKwltb3ZlcQkjLTEsJWQwCisJcnRzCisKKwkuZGF0YQorCS5hbGlnbgk0CisKKwl8IGRhdGEgc2l6ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgb3BlcmFuZCBmb3JtYXRzCitmcF9kYXRhc2l6ZToKKwkud29yZAk0LCA0LCAxMiwgMTIsIDIsIDgsIDEsIDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF90cmlnLmMgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdHJpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjFkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdHJpZy5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorCisgIGZwX3RyaWcuYzogZmxvYXRpbmctcG9pbnQgbWF0aCByb3V0aW5lcyBmb3IgdGhlIExpbnV4LW02OGsKKyAgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IuCisKKyAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGF2aWQgSHVnZ2lucy1EYWluZXMgLyBSb21hbiBaaXBwZWwuCisKKyAgSSBoZXJlYnkgZ2l2ZSBwZXJtaXNzaW9uLCBmcmVlIG9mIGNoYXJnZSwgdG8gY29weSwgbW9kaWZ5LCBhbmQKKyAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSwgcHJvdmlkZWQgdGhhdAorICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFyZSBpbmNsdWRlZAorICBpbiBhbGwgc3VjaCBjb3BpZXMuCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksIFJFQUwKKyAgT1IgSU1QTElFRC4KKworKi8KKworI2luY2x1ZGUgImZwX2VtdS5oIgorI2luY2x1ZGUgImZwX3RyaWcuaCIKKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmNvcyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmY29zXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Z0YW4oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZnRhblxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mYXNpbihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmYXNpblxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mYWNvcyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmYWNvc1xuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mYXRhbihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmYXRhblxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luaChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luaFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mY29zaChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmY29zaFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mdGFuaChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmdGFuaFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mYXRhbmgoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmF0YW5oXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3MwKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3MwXG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3MxKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3MxXG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3MyKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3MyXG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3MzKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3MzXG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3M0KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3M0XG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3M1KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3M1XG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3M2KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3M2XG4iKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzaW5jb3M3KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZzaW5jb3M3XG4iKTsKKworCXJldHVybiBkZXN0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3RyaWcuaCBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF90cmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4YjI0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF90cmlnLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKworICBmcF90cmlnLmg6IGZsb2F0aW5nLXBvaW50IG1hdGggcm91dGluZXMgZm9yIHRoZSBMaW51eC1tNjhrCisgIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLgorCisgIENvcHlyaWdodCAoYykgMTk5OCBEYXZpZCBIdWdnaW5zLURhaW5lcy4KKworICBJIGhlcmVieSBnaXZlIHBlcm1pc3Npb24sIGZyZWUgb2YgY2hhcmdlLCB0byBjb3B5LCBtb2RpZnksIGFuZAorICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtLCBwcm92aWRlZCB0aGF0CisgIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXJlIGluY2x1ZGVkCisgIGluIGFsbCBzdWNoIGNvcGllcy4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSwgUkVBTAorICBPUiBJTVBMSUVELgorCisqLworCisjaWZuZGVmIEZQX1RSSUdfSAorI2RlZmluZSBGUF9UUklHX0gKKworI2luY2x1ZGUgImZwX2VtdS5oIgorCisvKiBmbG9hdGluZyBwb2ludCB0cmlnb25vbWV0cmljIGluc3RydWN0aW9uczoKKworICAgdGhlIGFyZ3VtZW50cyB0byB0aGVzZSBhcmUgaW4gdGhlICJpbnRlcm5hbCIgZXh0ZW5kZWQgZm9ybWF0LCB0aGF0CisgICBpcywgYW4gImV4cGxvZGVkIiB2ZXJzaW9uIG9mIHRoZSA5Ni1iaXQgZXh0ZW5kZWQgZnAgZm9ybWF0IHVzZWQgYnkKKyAgIHRoZSA2ODg4MS4KKworICAgdGhleSByZXR1cm4gYSBzdGF0dXMgY29kZSwgd2hpY2ggc2hvdWxkIGVuZCB1cCBpbiAlZDAsIGlmIGFsbCBnb2VzCisgICB3ZWxsLiAgKi8KKworI2VuZGlmIC8qIEZQX1RSSUdfX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF91dGlsLlMgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdXRpbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjdmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdXRpbC5TCkBAIC0wLDAgKzEsMTQ1NSBAQAorLyoKKyAqIGZwX3V0aWwuUworICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgImZwX2VtdS5oIgorCisvKgorICogSGVyZSBhcmUgbG90cyBvZiBjb252ZXJzaW9uIGFuZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9ucyBtYWlubHkKKyAqIHVzZWQgYnkgZnBfc2Nhbi5TCisgKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBvcHRpbWl6ZWQgZm9yICJub3JtYWwiIG51bWJlcnMsCisgKiB0aGVzZSBhcmUgaGFuZGxlZCBmaXJzdCBhbmQgZXhpdCBhcyBmYXN0IGFzIHBvc3NpYmxlLCB0aGlzIGlzCisgKiBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgZnBfbm9ybWFsaXplX2V4dC9mcF9jb252X2V4dDJleHQsIGFzCisgKiBpdCdzIGNhbGxlZCB2ZXJ5IG9mdGVuLgorICogVGhlIHJlZ2lzdGVyIHVzYWdlIGlzIG9wdGltaXplZCBmb3IgZnBfc2Nhbi5TIGFuZCB3aGljaCByZWdpc3RlcgorICogaXMgY3VycmVudGx5IGF0IHRoYXQgdGltZSB1bnVzZWQsIGJlIGNhcmVmdWwgaWYgeW91IHdhbnQgY2hhbmdlCisgKiBzb21ldGhpbmcgaGVyZS4gJWQwIGFuZCAlZDEgaXMgYWx3YXlzIHVzYWJsZSwgc29tZXRpbWVzICVkMiAob3IKKyAqIG9ubHkgdGhlIGxvd2VyIGhhbGYpIG1vc3QgZnVuY3Rpb24gaGF2ZSB0byByZXR1cm4gdGhlICVhMAorICogdW5tb2RpZmllZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBpbW1lZGlhdGVseSByZXVzZSBpdC4KKyAqLworCisJLmdsb2JsCWZwX2lsbCwgZnBfZW5kCisKKwl8IGV4aXRzIGZyb20gZnBfc2NhbjoKKwl8IGlsbGVnYWwgaW5zdHJ1Y3Rpb24KK2ZwX2lsbDoKKwlwcmludGYJLCJmcF9pbGxlZ2FsXG4iCisJcnRzCisJfCBjb21wbGV0ZWQgaW5zdHJ1Y3Rpb24KK2ZwX2VuZDoKKwl0c3QubAkoVEFTS19NTS04LCVhMikKKwlqbWkJMWYKKwl0c3QubAkoVEFTS19NTS00LCVhMikKKwlqbWkJMWYKKwl0c3QubAkoVEFTS19NTSwlYTIpCisJanBsCTJmCisxOglwcmludGYJLCJvb3BzOiVwLCVwLCVwXG4iLDMsJWEyQChUQVNLX01NLTgpLCVhMkAoVEFTS19NTS00KSwlYTJAKFRBU0tfTU0pCisyOgljbHIubAklZDAKKwlydHMKKworCS5nbG9ibAlmcF9jb252X2xvbmcyZXh0LCBmcF9jb252X3NpbmdsZTJleHQKKwkuZ2xvYmwJZnBfY29udl9kb3VibGUyZXh0LCBmcF9jb252X2V4dDJleHQKKwkuZ2xvYmwJZnBfbm9ybWFsaXplX2V4dCwgZnBfbm9ybWFsaXplX2RvdWJsZQorCS5nbG9ibAlmcF9ub3JtYWxpemVfc2luZ2xlLCBmcF9ub3JtYWxpemVfc2luZ2xlX2Zhc3QKKwkuZ2xvYmwJZnBfY29udl9leHQyZG91YmxlLCBmcF9jb252X2V4dDJzaW5nbGUKKwkuZ2xvYmwJZnBfY29udl9leHQybG9uZywgZnBfY29udl9leHQyc2hvcnQKKwkuZ2xvYmwJZnBfY29udl9leHQyYnl0ZQorCS5nbG9ibAlmcF9maW5hbHJvdW5kaW5nX3NpbmdsZSwgZnBfZmluYWxyb3VuZGluZ19zaW5nbGVfZmFzdAorCS5nbG9ibAlmcF9maW5hbHJvdW5kaW5nX2RvdWJsZQorCS5nbG9ibAlmcF9maW5hbHJvdW5kaW5nLCBmcF9maW5hbHRlc3QsIGZwX2ZpbmFsCisKKy8qCisgKiBGaXJzdCBzZXZlcmFsIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZyb20gYSBzb3VyY2Ugb3BlcmFuZAorICogaW50byB0aGUgZXh0ZW5kZWQgZm9ybWF0LiBOb3RlLCB0aGF0IG9ubHkgZnBfY29udl9leHQyZXh0CisgKiBub3JtYWxpemVzIHRoZSBudW1iZXIgYW5kIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhlIG90aGVyCisgKiBjb252ZXJzaW9uIGZ1bmN0aW9ucywgd2hpY2ggb25seSBtb3ZlIHRoZSBpbmZvcm1hdGlvbiBpbnRvCisgKiBmcF9leHQgc3RydWN0dXJlLgorICovCisKKwl8IGZwX2NvbnZfbG9uZzJleHQ6CisJfAorCXwgYXJnczoJJWQwID0gc291cmNlICgzMi1iaXQgbG9uZykKKwl8CSVhMCA9IGRlc3RpbmF0aW9uIChwdHIgdG8gc3RydWN0IGZwX2V4dCkKKworZnBfY29udl9sb25nMmV4dDoKKwlwcmludGYJUENPTlYsImwyZTogJXAgLT4gJXAoIiwyLCVkMCwlYTAKKwljbHIubAklZDEJCQl8IHNpZ24gZGVmYXVsdHMgdG8gemVybworCXRzdC5sCSVkMAorCWplcQlmcF9sMmVfemVybwkJfCBpcyBzb3VyY2UgemVybz8KKwlqcGwJMWYJCQl8IHBvc2l0aXZlPworCW1vdmVxCSMxLCVkMQorCW5lZy5sCSVkMAorMToJc3dhcAklZDEKKwltb3ZlLncJIzB4M2ZmZiszMSwlZDEKKwltb3ZlLmwJJWQxLCglYTApKwkJfCBzZXQgc2lnbiAvIGV4cAorCW1vdmUubAklZDAsKCVhMCkrCQl8IHNldCBtYW50aXNzYQorCWNsci5sCSglYTApCisJc3VicS5sCSM4LCVhMAkJCXwgcmVzdG9yZSAlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKVxuIgorCXJ0cworCXwgc291cmNlIGlzIHplcm8KK2ZwX2wyZV96ZXJvOgorCWNsci5sCSglYTApKworCWNsci5sCSglYTApKworCWNsci5sCSglYTApCisJc3VicS5sCSM4LCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpXG4iCisJcnRzCisKKwl8IGZwX2NvbnZfc2luZ2xlMmV4dAorCXwgYXJnczoJJWQwID0gc291cmNlIChzaW5nbGUtcHJlY2lzaW9uIGZwIHZhbHVlKQorCXwJJWEwID0gZGVzdCAoc3RydWN0IGZwX2V4dCAqKQorCitmcF9jb252X3NpbmdsZTJleHQ6CisJcHJpbnRmCVBDT05WLCJzMmU6ICVwIC0+ICVwKCIsMiwlZDAsJWEwCisJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAkjOCwlZDAJCQl8IHNoaWZ0IG1hbnRpc3NhCisJbHNyLmwJIzgsJWQxCQkJfCBleHBvbmVudCAvIHNpZ24KKwlsc3IubAkjNywlZDEKKwlsc3IudwkjOCwlZDEKKwlqZXEJZnBfczJlX3NtYWxsCQl8IHplcm8gLyBkZW5vcm1hbD8KKwljbXAudwkjMHhmZiwlZDEJCXwgTmFOIC8gSW5mPworCWplcQlmcF9zMmVfbGFyZ2UKKwlic2V0CSMzMSwlZDAJCQl8IHNldCBleHBsaXppdCBiaXQKKwlhZGQudwkjMHgzZmZmLTB4N2YsJWQxCXwgcmUtYmlhcyB0aGUgZXhwb25lbnQuCis5Ogltb3ZlLmwJJWQxLCglYTApKwkJfCBmcF9leHQuc2lnbiwgZnBfZXh0LmV4cAorCW1vdmUubAklZDAsKCVhMCkrCQl8IGhpZ2ggbHdvcmQgb2YgZnBfZXh0Lm1hbnQKKwljbHIubAkoJWEwKQkJCXwgbG93IGx3b3JkID0gMAorCXN1YnEubAkjOCwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKVxuIgorCXJ0cworCXwgemVyb3MgYW5kIGRlbm9ybWFsaXplZAorZnBfczJlX3NtYWxsOgorCXwgZXhwb25lbnQgaXMgemVybywgc28gZXhwbGl6aXQgYml0IGlzIGFscmVhZHkgemVybyB0b28KKwl0c3QubAklZDAKKwlqZXEJOWIKKwltb3ZlLncJIzB4NDAwMC0weDdmLCVkMQorCWpyYQk5YgorCXwgaW5maW5pdGllcyBhbmQgTkFOCitmcF9zMmVfbGFyZ2U6CisJYmNscgkjMzEsJWQwCQkJfCBjbGVhciBleHBsaXppdCBiaXQKKwltb3ZlLncJIzB4N2ZmZiwlZDEKKwlqcmEJOWIKKworZnBfY29udl9kb3VibGUyZXh0OgorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwlnZXR1c2VyLmwgJWExQCgwKSwlZDAsZnBfZXJyX3VhMiwlYTEKKwlnZXR1c2VyLmwgJWExQCg0KSwlZDEsZnBfZXJyX3VhMiwlYTEKKwlwcmludGYJUENPTlYsImQyZTogJXAlcCAtPiAlcCgiLDMsJWQwLCVkMSwlYTAKKyNlbmRpZgorCWdldHVzZXIubCAoJWExKSssJWQwLGZwX2Vycl91YTIsJWExCisJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAkjOCwlZDAJCQl8IHNoaWZ0IGhpZ2ggbWFudGlzc2EKKwlsc2wubAkjMywlZDAKKwlsc3IubAkjOCwlZDEJCQl8IGV4cG9uZW50IC8gc2lnbgorCWxzci5sCSM3LCVkMQorCWxzci53CSM1LCVkMQorCWplcQlmcF9kMmVfc21hbGwJCXwgemVybyAvIGRlbm9ybWFsPworCWNtcC53CSMweDdmZiwlZDEJCXwgTmFOIC8gSW5mPworCWplcQlmcF9kMmVfbGFyZ2UKKwlic2V0CSMzMSwlZDAJCQl8IHNldCBleHBsaXppdCBiaXQKKwlhZGQudwkjMHgzZmZmLTB4M2ZmLCVkMQl8IHJlLWJpYXMgdGhlIGV4cG9uZW50LgorOToJbW92ZS5sCSVkMSwoJWEwKSsJCXwgZnBfZXh0LnNpZ24sIGZwX2V4dC5leHAKKwltb3ZlLmwJJWQwLCglYTApKworCWdldHVzZXIubCAoJWExKSssJWQwLGZwX2Vycl91YTIsJWExCisJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAkjOCwlZDAKKwlsc2wubAkjMywlZDAKKwltb3ZlLmwJJWQwLCglYTApCisJbW92ZXEJIzIxLCVkMAorCWxzci5sCSVkMCwlZDEKKwlvci5sCSVkMSwtKCVhMCkKKwlzdWJxLmwJIzQsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIilcbiIKKwlydHMKKwl8IHplcm9zIGFuZCBkZW5vcm1hbGl6ZWQKK2ZwX2QyZV9zbWFsbDoKKwl8IGV4cG9uZW50IGlzIHplcm8sIHNvIGV4cGxpeml0IGJpdCBpcyBhbHJlYWR5IHplcm8gdG9vCisJdHN0LmwJJWQwCisJamVxCTliCisJbW92ZS53CSMweDQwMDAtMHgzZmYsJWQxCisJanJhCTliCisJfCBpbmZpbml0aWVzIGFuZCBOQU4KK2ZwX2QyZV9sYXJnZToKKwliY2xyCSMzMSwlZDAJCQl8IGNsZWFyIGV4cGxpeml0IGJpdAorCW1vdmUudwkjMHg3ZmZmLCVkMQorCWpyYQk5YgorCisJfCBmcF9jb252X2V4dDJleHQ6CisJfCBvcmlnaW5hbGx5IHVzZWQgdG8gZ2V0IGxvbmdkb3VibGUgZnJvbSB1c2Vyc3BhY2UsIG5vdyBpdCdzCisJfCBjYWxsZWQgYmVmb3JlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBtYWtlIHN1cmUgdGhlIG51bWJlcgorCXwgaXMgbm9ybWFsaXplZCBbbWF5YmUgcmVuYW1lIGl0P10uCisJfCBhcmdzOgklYTAgPSBkZXN0IChzdHJ1Y3QgZnBfZXh0ICopCisJfCByZXR1cm5zIDAgaW4gJWQwIGZvciBhIE5hTiwgb3RoZXJ3aXNlIDEKKworZnBfY29udl9leHQyZXh0OgorCXByaW50ZglQQ09OViwiZTJlOiAlcCgiLDEsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIiksICIKKwltb3ZlLmwJKCVhMCkrLCVkMAorCWNtcC53CSMweDdmZmYsJWQwCQl8IEluZiAvIE5hTj8KKwlqZXEJZnBfZTJlX2xhcmdlCisJbW92ZS5sCSglYTApLCVkMAorCWpwbAlmcF9lMmVfc21hbGwJCXwgemVybyAvIGRlbm9ybT8KKwl8IFRoZSBoaWdoIGJpdCBpcyBzZXQsIHNvIG5vcm1hbGl6YXRpb24gaXMgaXJyZWxldmFudC4KK2ZwX2UyZV9jaGVja3JvdW5kOgorCXN1YnEubAkjNCwlYTAKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJbW92ZS5iCSglYTApLCVkMAorCWpuZQlmcF9lMmVfcm91bmQKKyNlbmRpZgorCXByaW50ZglQQ09OViwiJXAoIiwxLCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpXG4iCisJbW92ZXEJIzEsJWQwCisJcnRzCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworZnBfZTJlX3JvdW5kOgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgorCWNsci5iCSglYTApCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCisJam5lCWZwX2UyZV9yb3VuZG90aGVyCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QuYgklZDAJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTlmCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWJ0c3QJIzAsKDExLCVhMCkJCXwgdGVzdCBsc2IgYml0CisJam5lCWZwX2UyZV9kb3JvdW5kdXAJfCByb3VuZCB0byBpbmZpbml0eQorCWxzbC5iCSMxLCVkMAkJCXwgY2hlY2sgbG93IGJpdHMKKwlqZXEJOWYJCQl8IHJvdW5kIHRvIHplcm8KK2ZwX2UyZV9kb3JvdW5kdXA6CisJYWRkcS5sCSMxLCg4LCVhMCkKKwlqY2MJOWYKKwlhZGRxLmwJIzEsKDQsJWEwKQorCWpjYwk5ZgorCW1vdmUudwkjMHg4MDAwLCg0LCVhMCkKKwlhZGRxLncJIzEsKDIsJWEwKQorOToJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKK2ZwX2UyZV9yb3VuZG90aGVyOgorCXN1YnEudwkjMiwlZDIKKwlqY3MJOWIJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJMWYJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgxLCVhMCkJCQl8IHRvIC1pbmYKKwlqbmUJZnBfZTJlX2Rvcm91bmR1cAl8IG5lZ2F0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgcG9zaXRpdmUsIHJvdW5kIHRvIHplcm8KKzE6CXRzdC5iCSgxLCVhMCkJCQl8IHRvICtpbmYKKwlqZXEJZnBfZTJlX2Rvcm91bmR1cAl8IHBvc2l0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIHplcm8KKyNlbmRpZgorCXwgemVyb3MgYW5kIHN1Ym5vcm1hbHM6CisJfCB0cnkgdG8gbm9ybWFsaXplIHRoZXNlIGFueXdheS4KK2ZwX2UyZV9zbWFsbDoKKwlqbmUJZnBfZTJlX3NtYWxsMQkJfCBoaWdoIGx3b3JkIHplcm8/CisJbW92ZS5sCSg0LCVhMCksJWQwCisJam5lCWZwX2UyZV9zbWFsbDIKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJY2xyLmwJJWQwCisJbW92ZS5iCSgtNCwlYTApLCVkMAorCWpuZQlmcF9lMmVfc21hbGwzCisjZW5kaWYKKwl8IEdlbnVpbmUgemVyby4KKwljbHIudwktKCVhMCkKKwlzdWJxLmwJIzIsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwltb3ZlcQkjMSwlZDAKKwlydHMKKwl8IGRlZmluaXRlbHkgc3Vibm9ybWFsLCBuZWVkIHRvIHNoaWZ0IGFsbCA2NCBiaXRzCitmcF9lMmVfc21hbGwxOgorCWJmZmZvCSVkMHsjMCwjMzJ9LCVkMQorCW1vdmUudwktKCVhMCksJWQyCisJc3ViLncJJWQxLCVkMgorCWpjYwkxZgorCXwgUGF0aG9sb2dpY2FsbHkgc21hbGwsIGRlbm9ybWFsaXplLgorCWFkZC53CSVkMiwlZDEKKwljbHIudwklZDIKKzE6CW1vdmUudwklZDIsKCVhMCkrCisJbW92ZS53CSVkMSwlZDIKKwlqZXEJZnBfZTJlX2NoZWNrcm91bmQKKwl8IGZhbmN5IDY0LWJpdCBkb3VibGUtc2hpZnQgYmVnaW5zIGhlcmUKKwlsc2wubAklZDIsJWQwCisJbW92ZS5sCSVkMCwoJWEwKSsKKwltb3ZlLmwJKCVhMCksJWQwCisJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAklZDIsJWQwCisJbW92ZS5sCSVkMCwoJWEwKQorCW5lZy53CSVkMgorCWFuZC53CSMweDFmLCVkMgorCWxzci5sCSVkMiwlZDEKKwlvci5sCSVkMSwtKCVhMCkKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCitmcF9lMmVfZXh0cmExOgorCWNsci5sCSVkMAorCW1vdmUuYgkoLTQsJWEwKSwlZDAKKwluZWcudwklZDIKKwlhZGQudwkjMjQsJWQyCisJamNjCTFmCisJY2xyLmIJKC00LCVhMCkKKwlsc2wubAklZDIsJWQwCisJb3IubAklZDAsKDQsJWEwKQorCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorMToJYWRkcS53CSM4LCVkMgorCWxzbC5sCSVkMiwlZDAKKwltb3ZlLmIJJWQwLCgtNCwlYTApCisJbHNyLmwJIzgsJWQwCisJb3IubAklZDAsKDQsJWEwKQorI2VuZGlmCisJanJhCWZwX2UyZV9jaGVja3JvdW5kCisJfCBwYXRob2xvZ2ljYWxseSBzbWFsbCBzdWJub3JtYWwKK2ZwX2UyZV9zbWFsbDI6CisJYmZmZm8JJWQweyMwLCMzMn0sJWQxCisJYWRkLncJIzMyLCVkMQorCW1vdmUudwktKCVhMCksJWQyCisJc3ViLncJJWQxLCVkMgorCWpjYwkxZgorCXwgQmV5b25kIHBhdGhvbG9naWNhbGx5IHNtYWxsLCBkZW5vcm1hbGl6ZS4KKwlhZGQudwklZDIsJWQxCisJY2xyLncJJWQyCisxOgltb3ZlLncJJWQyLCglYTApKworCWV4dC5sCSVkMQorCWplcQlmcF9lMmVfY2hlY2tyb3VuZAorCWNsci5sCSg0LCVhMCkKKwlzdWIudwkjMzIsJWQyCisJamNzCTFmCisJbHNsLmwJJWQxLCVkMAkJCXwgbG93ZXIgbHdvcmQgbmVlZHMgb25seSB0byBiZSBzaGlmdGVkCisJbW92ZS5sCSVkMCwoJWEwKQkJfCBpbnRvIHRoZSBoaWdoZXIgbHdvcmQKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJY2xyLmwJJWQwCisJbW92ZS5iCSgtNCwlYTApLCVkMAorCWNsci5iCSgtNCwlYTApCisJbmVnLncJJWQxCisJYWRkLncJIzMyLCVkMQorCWJmaW5zCSVkMCwoJWEwKXslZDEsIzh9CisjZW5kaWYKKwlqcmEJZnBfZTJlX2NoZWNrcm91bmQKKzE6CW5lZy53CSVkMQkJCXwgbG93ZXIgbHdvcmQgaXMgc3BsaXR0ZWQgYmV0d2VlbgorCWJmaW5zCSVkMCwoJWEwKXslZDEsIzMyfQl8IGhpZ2hlciBhbmQgbG93ZXIgbHdvcmQKKyNpZm5kZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorI2Vsc2UKKwltb3ZlLncJJWQxLCVkMgorCWpyYQlmcF9lMmVfZXh0cmExCisJfCBUaGVzZSBhcmUgZXh0cmVtZWx5IHNtYWxsIG51bWJlcnMsIHRoYXQgd2lsbCBtb3N0bHkgZW5kIHVwIGFzIHplcm8KKwl8IGFueXdheSwgc28gdGhpcyBpcyBvbmx5IGltcG9ydGFudCBmb3IgY29ycmVjdCByb3VuZGluZy4KK2ZwX2UyZV9zbWFsbDM6CisJYmZmZm8JJWQweyMyNCwjOH0sJWQxCisJYWRkLncJIzQwLCVkMQorCW1vdmUudwktKCVhMCksJWQyCisJc3ViLncJJWQxLCVkMgorCWpjYwkxZgorCXwgUGF0aG9sb2dpY2FsbHkgc21hbGwsIGRlbm9ybWFsaXplLgorCWFkZC53CSVkMiwlZDEKKwljbHIudwklZDIKKzE6CW1vdmUudwklZDIsKCVhMCkrCisJZXh0LmwJJWQxCisJamVxCWZwX2UyZV9jaGVja3JvdW5kCisJY21wLncJIzgsJWQxCisJamNzCTJmCisxOgljbHIuYgkoLTQsJWEwKQorCXN1Yi53CSM2NCwlZDEKKwlqY3MJMWYKKwlhZGQudwkjMjQsJWQxCisJbHNsLmwJJWQxLCVkMAorCW1vdmUubAklZDAsKCVhMCkKKwlqcmEJZnBfZTJlX2NoZWNrcm91bmQKKzE6CW5lZy53CSVkMQorCWJmaW5zCSVkMCwoJWEwKXslZDEsIzh9CisJanJhCWZwX2UyZV9jaGVja3JvdW5kCisyOglsc2wubAklZDEsJWQwCisJbW92ZS5iCSVkMCwoLTQsJWEwKQorCWxzci5sCSM4LCVkMAorCW1vdmUuYgklZDAsKDcsJWEwKQorCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorI2VuZGlmCisxOgltb3ZlLmwJJWQwLCVkMQkJCXwgbG93ZXIgbHdvcmQgaXMgc3BsaXR0ZWQgYmV0d2VlbgorCWxzbC5sCSVkMiwlZDAJCQl8IGhpZ2hlciBhbmQgbG93ZXIgbHdvcmQKKwltb3ZlLmwJJWQwLCglYTApCisJbW92ZS5sCSVkMSwlZDAKKwluZWcudwklZDIKKwlhZGQudwkjMzIsJWQyCisJbHNyLmwJJWQyLCVkMAorCW1vdmUubAklZDAsLSglYTApCisJanJhCWZwX2UyZV9jaGVja3JvdW5kCisJfCBJbmZpbml0aWVzIGFuZCBOYU5zCitmcF9lMmVfbGFyZ2U6CisJbW92ZS5sCSglYTApKywlZDAKKwlqbmUJM2YKKzE6CXRzdC5sCSglYTApCisJam5lCTRmCisJbW92ZXEJIzEsJWQwCisyOglzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBDT05WLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIilcbiIKKwlydHMKKwl8IHdlIGhhdmUgbWF5YmUgYSBOYU4sIHNoaWZ0IG9mZiB0aGUgaGlnaGVzdCBiaXQKKzM6CWxzbC5sCSMxLCVkMAorCWplcQkxYgorCXwgd2UgaGF2ZSBhIE5hTiwgY2xlYXIgdGhlIHJldHVybiB2YWx1ZQorNDoJY2xybAklZDAKKwlqcmEJMmIKKworCisvKgorICogTm9ybWFsaXphdGlvbiBmdW5jdGlvbnMuICBDYWxsIHRoZXNlIG9uIHRoZSBvdXRwdXQgb2YgZ2VuZXJhbAorICogRlAgb3BlcmF0b3JzLCBhbmQgYmVmb3JlIGFueSBjb252ZXJzaW9uIGludG8gdGhlIGRlc3RpbmF0aW9uCisgKiBmb3JtYXRzLiBmcF9ub3JtYWxpemVfZXh0IGhhcyBhbHdheXMgdG8gYmUgY2FsbGVkIGZpcnN0LCB0aGUKKyAqIGZvbGxvd2luZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyBleHBlY3QgYW4gYWxyZWFkeSBub3JtYWxpemVkCisgKiBudW1iZXIuCisgKi8KKworCXwgZnBfbm9ybWFsaXplX2V4dDoKKwl8IG5vcm1hbGl6ZSBhbiBleHRlbmRlZCBpbiBleHRlbmRlZCAodW5wYWNrZWQpIGZvcm1hdCwgYmFzaWNhbGx5CisJfCBpdCBkb2VzIHRoZSBzYW1lIGFzIGZwX2NvbnZfZXh0MmV4dCwgYWRkaXRpb25hbGx5IGl0IGFsc28gZG9lcworCXwgdGhlIG5lY2Vzc2FyeSBwb3N0cHJvY2Vzc2luZyBjaGVja3MuCisJfCBhcmdzOgklYTAgKHN0cnVjdCBmcF9leHQgKikKKwl8IE5PVEU6IGl0IGRvZXMgX25vdF8gbW9kaWZ5ICVhMC8lYTEgYW5kIHRoZSB1cHBlciB3b3JkIG9mICVkMgorCitmcF9ub3JtYWxpemVfZXh0OgorCXByaW50ZglQTk9STSwibmU6ICVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKSwgIgorCW1vdmUubAkoJWEwKSssJWQwCisJY21wLncJIzB4N2ZmZiwlZDAJCXwgSW5mIC8gTmFOPworCWplcQlmcF9uZV9sYXJnZQorCW1vdmUubAkoJWEwKSwlZDAKKwlqcGwJZnBfbmVfc21hbGwJCXwgemVybyAvIGRlbm9ybT8KKwl8IFRoZSBoaWdoIGJpdCBpcyBzZXQsIHNvIG5vcm1hbGl6YXRpb24gaXMgaXJyZWxldmFudC4KK2ZwX25lX2NoZWNrcm91bmQ6CisJc3VicS5sCSM0LCVhMAorI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwltb3ZlLmIJKCVhMCksJWQwCisJam5lCWZwX25lX3JvdW5kCisjZW5kaWYKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKK2ZwX25lX3JvdW5kOgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgorCWNsci5iCSglYTApCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCisJam5lCWZwX25lX3JvdW5kb3RoZXIJfCAlZDIgPT0gMCwgcm91bmQgdG8gbmVhcmVzdAorCXRzdC5iCSVkMAkJCXwgdGVzdCBndWFyZCBiaXQKKwlqcGwJOWYJCQl8IHplcm8gaXMgY2xvc2VyCisJYnRzdAkjMCwoMTEsJWEwKQkJfCB0ZXN0IGxzYiBiaXQKKwlqbmUJZnBfbmVfZG9yb3VuZHVwCQl8IHJvdW5kIHRvIGluZmluaXR5CisJbHNsLmIJIzEsJWQwCQkJfCBjaGVjayBsb3cgYml0cworCWplcQk5ZgkJCXwgcm91bmQgdG8gemVybworZnBfbmVfZG9yb3VuZHVwOgorCWFkZHEubAkjMSwoOCwlYTApCisJamNjCTlmCisJYWRkcS5sCSMxLCg0LCVhMCkKKwlqY2MJOWYKKwlhZGRxLncJIzEsKDIsJWEwKQorCW1vdmUudwkjMHg4MDAwLCg0LCVhMCkKKzk6CXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCitmcF9uZV9yb3VuZG90aGVyOgorCXN1YnEudwkjMiwlZDIKKwlqY3MJOWIJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJMWYJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgxLCVhMCkJCQl8IHRvIC1pbmYKKwlqbmUJZnBfbmVfZG9yb3VuZHVwCQl8IG5lZ2F0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgcG9zaXRpdmUsIHJvdW5kIHRvIHplcm8KKzE6CXRzdC5iCSgxLCVhMCkJCQl8IHRvICtpbmYKKwlqZXEJZnBfbmVfZG9yb3VuZHVwCQl8IHBvc2l0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIHplcm8KKyNlbmRpZgorCXwgWmVyb3MgYW5kIHN1Ym5vcm1hbCBudW1iZXJzCisJfCBUaGVzZSBhcmUgcHJvYmFibHkgbWVyZWx5IHN1Ym5vcm1hbCwgcmF0aGVyIHRoYW4gImRlbm9ybWFsaXplZCIKKwl8ICBudW1iZXJzLCBzbyB3ZSB3aWxsIHRyeSB0byBtYWtlIHRoZW0gbm9ybWFsIGFnYWluLgorZnBfbmVfc21hbGw6CisJam5lCWZwX25lX3NtYWxsMQkJfCBoaWdoIGx3b3JkIHplcm8/CisJbW92ZS5sCSg0LCVhMCksJWQwCisJam5lCWZwX25lX3NtYWxsMgorI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwljbHIubAklZDAKKwltb3ZlLmIJKC00LCVhMCksJWQwCisJam5lCWZwX25lX3NtYWxsMworI2VuZGlmCisJfCBHZW51aW5lIHplcm8uCisJY2xyLncJLSglYTApCisJc3VicS5sCSMyLCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisJfCBTdWJub3JtYWwuCitmcF9uZV9zbWFsbDE6CisJYmZmZm8JJWQweyMwLCMzMn0sJWQxCisJbW92ZS53CS0oJWEwKSwlZDIKKwlzdWIudwklZDEsJWQyCisJamNjCTFmCisJfCBQYXRob2xvZ2ljYWxseSBzbWFsbCwgZGVub3JtYWxpemUuCisJYWRkLncJJWQyLCVkMQorCWNsci53CSVkMgorCWZwX3NldF9zciBGUFNSX0VYQ19VTkZMCisxOgltb3ZlLncJJWQyLCglYTApKworCW1vdmUudwklZDEsJWQyCisJamVxCWZwX25lX2NoZWNrcm91bmQKKwl8IFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSA2NC1iaXQgZG91YmxlIHNoaWZ0IGFzIHNlZW4gYWJvdmUuCisJbHNsLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJbW92ZS5sCSglYTApLCVkMAorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkKKwluZWcudwklZDIKKwlhbmQudwkjMHgxZiwlZDIKKwlsc3IubAklZDIsJWQxCisJb3IubAklZDEsLSglYTApCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworZnBfbmVfZXh0cmExOgorCWNsci5sCSVkMAorCW1vdmUuYgkoLTQsJWEwKSwlZDAKKwluZWcudwklZDIKKwlhZGQudwkjMjQsJWQyCisJamNjCTFmCisJY2xyLmIJKC00LCVhMCkKKwlsc2wubAklZDIsJWQwCisJb3IubAklZDAsKDQsJWEwKQorCWpyYQlmcF9uZV9jaGVja3JvdW5kCisxOglhZGRxLncJIzgsJWQyCisJbHNsLmwJJWQyLCVkMAorCW1vdmUuYgklZDAsKC00LCVhMCkKKwlsc3IubAkjOCwlZDAKKwlvci5sCSVkMCwoNCwlYTApCisjZW5kaWYKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorCXwgTWF5IG9yIG1heSBub3QgYmUgc3Vibm9ybWFsLCBpZiBzbywgb25seSAzMiBiaXRzIHRvIHNoaWZ0LgorZnBfbmVfc21hbGwyOgorCWJmZmZvCSVkMHsjMCwjMzJ9LCVkMQorCWFkZC53CSMzMiwlZDEKKwltb3ZlLncJLSglYTApLCVkMgorCXN1Yi53CSVkMSwlZDIKKwlqY2MJMWYKKwl8IEJleW9uZCBwYXRob2xvZ2ljYWxseSBzbWFsbCwgZGVub3JtYWxpemUuCisJYWRkLncJJWQyLCVkMQorCWNsci53CSVkMgorCWZwX3NldF9zciBGUFNSX0VYQ19VTkZMCisxOgltb3ZlLncJJWQyLCglYTApKworCWV4dC5sCSVkMQorCWplcQlmcF9uZV9jaGVja3JvdW5kCisJY2xyLmwJKDQsJWEwKQorCXN1Yi53CSMzMiwlZDEKKwlqY3MJMWYKKwlsc2wubAklZDEsJWQwCQkJfCBsb3dlciBsd29yZCBuZWVkcyBvbmx5IHRvIGJlIHNoaWZ0ZWQKKwltb3ZlLmwJJWQwLCglYTApCQl8IGludG8gdGhlIGhpZ2hlciBsd29yZAorI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwljbHIubAklZDAKKwltb3ZlLmIJKC00LCVhMCksJWQwCisJY2xyLmIJKC00LCVhMCkKKwluZWcudwklZDEKKwlhZGQudwkjMzIsJWQxCisJYmZpbnMJJWQwLCglYTApeyVkMSwjOH0KKyNlbmRpZgorCWpyYQlmcF9uZV9jaGVja3JvdW5kCisxOgluZWcudwklZDEJCQl8IGxvd2VyIGx3b3JkIGlzIHNwbGl0dGVkIGJldHdlZW4KKwliZmlucwklZDAsKCVhMCl7JWQxLCMzMn0JfCBoaWdoZXIgYW5kIGxvd2VyIGx3b3JkCisjaWZuZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorI2Vsc2UKKwltb3ZlLncJJWQxLCVkMgorCWpyYQlmcF9uZV9leHRyYTEKKwl8IFRoZXNlIGFyZSBleHRyZW1lbHkgc21hbGwgbnVtYmVycywgdGhhdCB3aWxsIG1vc3RseSBlbmQgdXAgYXMgemVybworCXwgYW55d2F5LCBzbyB0aGlzIGlzIG9ubHkgaW1wb3J0YW50IGZvciBjb3JyZWN0IHJvdW5kaW5nLgorZnBfbmVfc21hbGwzOgorCWJmZmZvCSVkMHsjMjQsIzh9LCVkMQorCWFkZC53CSM0MCwlZDEKKwltb3ZlLncJLSglYTApLCVkMgorCXN1Yi53CSVkMSwlZDIKKwlqY2MJMWYKKwl8IFBhdGhvbG9naWNhbGx5IHNtYWxsLCBkZW5vcm1hbGl6ZS4KKwlhZGQudwklZDIsJWQxCisJY2xyLncJJWQyCisxOgltb3ZlLncJJWQyLCglYTApKworCWV4dC5sCSVkMQorCWplcQlmcF9uZV9jaGVja3JvdW5kCisJY21wLncJIzgsJWQxCisJamNzCTJmCisxOgljbHIuYgkoLTQsJWEwKQorCXN1Yi53CSM2NCwlZDEKKwlqY3MJMWYKKwlhZGQudwkjMjQsJWQxCisJbHNsLmwJJWQxLCVkMAorCW1vdmUubAklZDAsKCVhMCkKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorMToJbmVnLncJJWQxCisJYmZpbnMJJWQwLCglYTApeyVkMSwjOH0KKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorMjoJbHNsLmwJJWQxLCVkMAorCW1vdmUuYgklZDAsKC00LCVhMCkKKwlsc3IubAkjOCwlZDAKKwltb3ZlLmIJJWQwLCg3LCVhMCkKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorI2VuZGlmCisJfCBJbmZpbml0aWVzIGFuZCBOYU5zLCBhZ2Fpbiwgc2FtZSBhcyBhYm92ZS4KK2ZwX25lX2xhcmdlOgorCW1vdmUubAkoJWEwKSssJWQwCisJam5lCTNmCisxOgl0c3QubAkoJWEwKQorCWpuZQk0ZgorMjoJc3VicS5sCSM4LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisJfCB3ZSBoYXZlIG1heWJlIGEgTmFOLCBzaGlmdCBvZmYgdGhlIGhpZ2hlc3QgYml0CiszOgltb3ZlLmwJJWQwLCVkMQorCWxzbC5sCSMxLCVkMQorCWpuZQk0ZgorCWNsci5sCSgtNCwlYTApCisJanJhCTFiCisJfCB3ZSBoYXZlIGEgTmFOLCB0ZXN0IGlmIGl0IGlzIHNpZ25hbGluZworNDoJYnNldAkjMzAsJWQwCisJam5lCTJiCisJZnBfc2V0X3NyIEZQU1JfRVhDX1NOQU4KKwltb3ZlLmwJJWQwLCgtNCwlYTApCisJanJhCTJiCisKKwl8IHRoZXNlIG5leHQgdHdvIGRvIHJvdW5kaW5nIGFzIHBlciB0aGUgSUVFRSBzdGFuZGFyZC4KKwl8IHZhbHVlcyBmb3IgdGhlIHJvdW5kaW5nIG1vZGVzIGFwcGVhciB0byBiZToKKwl8IDA6CVJvdW5kIHRvIG5lYXJlc3QKKwl8IDE6CVJvdW5kIHRvIHplcm8KKwl8IDI6CVJvdW5kIHRvIC1JbmZpbml0eQorCXwgMzoJUm91bmQgdG8gK0luZmluaXR5CisJfCBib3RoIGZ1bmN0aW9ucyBleHBlY3QgdGhhdCBmcF9ub3JtYWxpemUgd2FzIGFscmVhZHkKKwl8IGNhbGxlZCAoYW5kIGV4dGVuZGVkIGFyZ3VtZW50IGlzIGFscmVhZHkgbm9ybWFsaXplZAorCXwgYXMgZmFyIGFzIHBvc3NpYmxlKSwgdGhlc2UgYXJlIHVzZWQgaWYgdGhlcmUgaXMgZGlmZmVyZW50CisJfCByb3VuZGluZyBwcmVjaXNpb24gaXMgc2VsZWN0ZWQgYW5kIGJlZm9yZSBjb252ZXJ0aW5nCisJfCBpbnRvIHNpbmdsZS9kb3VibGUKKworCXwgZnBfbm9ybWFsaXplX2RvdWJsZToKKwl8IG5vcm1hbGl6ZSBhbiBleHRlbmRlZCB3aXRoIGRvdWJsZSAoNTItYml0KSBwcmVjaXNpb24KKwl8IGFyZ3M6CSAlYTAgKHN0cnVjdCBmcF9leHQgKikKKworZnBfbm9ybWFsaXplX2RvdWJsZToKKwlwcmludGYJUE5PUk0sIm5kOiAlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIiksICIKKwltb3ZlLmwJKCVhMCkrLCVkMgorCXRzdC53CSVkMgorCWplcQlmcF9uZF96ZXJvCQl8IHplcm8gLyBkZW5vcm1hbGl6ZWQKKwljbXAudwkjMHg3ZmZmLCVkMgorCWplcQlmcF9uZF9odWdlCQl8IE5hTiAvIGluZmluaXRpdmUuCisJc3ViLncJIzB4NDAwMC0weDNmZiwlZDIJfCB3aWxsIHRoZSBleHBvbmVudCBmaXQ/CisJamNzCWZwX25kX3NtYWxsCQl8IHRvbyBzbWFsbC4KKwljbXAudwkjMHg3ZmUsJWQyCisJamNjCWZwX25kX2xhcmdlCQl8IHRvbyBiaWcuCisJYWRkcS5sCSM0LCVhMAorCW1vdmUubAkoJWEwKSwlZDAJCXwgbG93IGx3b3JkIG9mIG1hbnRpc3NhCisJfCBub3csIHJvdW5kIG9mZiB0aGUgbG93IDExIGJpdHMuCitmcF9uZF9yb3VuZDoKKwltb3ZlcQkjMjEsJWQxCisJbHNsLmwJJWQxLCVkMAkJCXwga2VlcCAxMSBsb3cgYml0cy4KKwlqbmUJZnBfbmRfY2hlY2tyb3VuZAl8IEFyZSB0aGV5IG5vbi16ZXJvPworCXwgbm90aGluZyB0byBkbyBoZXJlCis5OglzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKwl8IEJlIGNhcmVmdWwgd2l0aCB0aGUgWCBiaXQhIEl0IGNvbnRhaW5zIHRoZSBsc2IKKwl8IGZyb20gdGhlIHNoaWZ0IGFib3ZlLCBpdCBpcyBuZWVkZWQgZm9yIHJvdW5kIHRvIG5lYXJlc3QuCitmcF9uZF9jaGVja3JvdW5kOgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgl8IElORVgyIGJpdAorCWFuZC53CSMweGY4MDAsKDIsJWEwKQkJfCBjbGVhciBiaXRzIDAtMTAKKwltb3ZlLncJKEZQRF9STkQsRlBEQVRBKSwlZDIJfCByb3VuZGluZyBtb2RlCisJam5lCTJmCQkJfCAlZDIgPT0gMCwgcm91bmQgdG8gbmVhcmVzdAorCXRzdC5sCSVkMAkJCXwgdGVzdCBndWFyZCBiaXQKKwlqcGwJOWIJCQl8IHplcm8gaXMgY2xvc2VyCisJfCBoZXJlIHdlIHRlc3QgdGhlIFggYml0IGJ5IGFkZGluZyBpdCB0byAlZDIKKwljbHIudwklZDIJCQl8IGZpcnN0IHNldCB6IGJpdCwgYWRkeCBvbmx5IGNsZWFycyBpdAorCWFkZHgudwklZDIsJWQyCQkJfCB0ZXN0IGxzYiBiaXQKKwl8IElFRUU3NTQtc3BlY2lmaWVkICJyb3VuZCB0byBldmVuIiBiZWhhdmlvdXIuICBJZiB0aGUgZ3VhcmQKKwl8IGJpdCBpcyBzZXQsIHRoZW4gdGhlIG51bWJlciBpcyBvZGQsIHNvIHJvdW5kaW5nIHdvcmtzIGxpa2UKKwl8IGluIGdyYWRlLXNjaG9vbCBhcml0aG1ldGljIChpLmUuIDEuNSByb3VuZHMgdG8gMi4wKQorCXwgT3RoZXJ3aXNlLCBhbiBlcXVhbCBkaXN0YW5jZSByb3VuZHMgdG93YXJkcyB6ZXJvLCBzbyBhcyBub3QKKwl8IHRvIHByb2R1Y2UgYW4gb2RkIG51bWJlci4gIFRoaXMgaXMgc3RyYW5nZSwgYnV0IGl0IGlzIHdoYXQKKwl8IHRoZSBzdGFuZGFyZCBzYXlzLgorCWpuZQlmcF9uZF9kb3JvdW5kdXAJCXwgcm91bmQgdG8gaW5maW5pdHkKKwlsc2wubAkjMSwlZDAJCQl8IGNoZWNrIGxvdyBiaXRzCisJamVxCTliCQkJfCByb3VuZCB0byB6ZXJvCitmcF9uZF9kb3JvdW5kdXA6CisJfCByb3VuZCAodGhlIG1hbnRpc3NhLCB0aGF0IGlzKSB0b3dhcmRzIGluZmluaXR5CisJYWRkLmwJIzB4ODAwLCglYTApCisJamNjCTliCQkJfCBubyBvdmVyZmxvdywgZ29vZC4KKwlhZGRxLmwJIzEsLSglYTApCQl8IGV4dGVuZCB0byBoaWdoIGx3b3JkCisJamNjCTFmCQkJfCBubyBvdmVyZmxvdywgZ29vZC4KKwl8IFlvdyEgd2UgaGF2ZSBtYW5hZ2VkIHRvIG92ZXJmbG93IHRoZSBtYW50aXNzYS4gIFNpbmNlIHRoaXMKKwl8IG9ubHkgaGFwcGVucyB3aGVuICVkMSB3YXMgMHhmZmZmZjgwMCwgaXQgaXMgbm93IHplcm8sIHNvCisJfCByZXNldCB0aGUgaGlnaCBiaXQsIGFuZCBpbmNyZW1lbnQgdGhlIGV4cG9uZW50LgorCW1vdmUudwkjMHg4MDAwLCglYTApCisJYWRkcS53CSMxLC0oJWEwKQorCWNtcC53CSMweDQzZmYsKCVhMCkrCQl8IGV4cG9uZW50IG5vdyBvdmVyZmxvd24/CisJamVxCWZwX25kX2xhcmdlCQl8IHllcywgc28gbWFrZSBpdCBpbmZpbml0eS4KKzE6CXN1YnEubAkjNCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworMjoJc3VicS53CSMyLCVkMgorCWpjcwk5YgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQkzZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJfCBSb3VuZCB0byArSW5mIG9yIC1JbmYuICBIaWdoIHdvcmQgb2YgJWQyIGNvbnRhaW5zIHRoZQorCXwgc2lnbiBvZiB0aGUgbnVtYmVyLCBieSB0aGUgd2F5LgorCXN3YXAJJWQyCQkJfCB0byAtaW5mCisJdHN0LmIJJWQyCisJam5lCWZwX25kX2Rvcm91bmR1cAkJfCBuZWdhdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IHBvc2l0aXZlLCByb3VuZCB0byB6ZXJvCiszOglzd2FwCSVkMgkJCXwgdG8gK2luZgorCXRzdC5iCSVkMgorCWplcQlmcF9uZF9kb3JvdW5kdXAJCXwgcG9zaXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBuZWdhdGl2ZSwgcm91bmQgdG8gemVybworCXwgRXhwb25lbnQgdW5kZXJmbG93LiAgVHJ5IHRvIG1ha2UgYSBkZW5vcm1hbCwgYW5kIHNldCBpdCB0bworCXwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGZyYWN0aW9uIGlmIHRoaXMgZmFpbHMuCitmcF9uZF9zbWFsbDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfVU5GTAkJfCBzZXQgVU5GTCBiaXQKKwltb3ZlLncJIzB4M2MwMSwoLTIsJWEwKQl8IDIqKi0xMDIyCisJbmVnLncJJWQyCQkJfCBkZWdyZWUgb2YgdW5kZXJmbG93CisJY21wLncJIzMyLCVkMgkJCXwgc2luZ2xlIG9yIGRvdWJsZSBzaGlmdD8KKwlqY2MJMWYKKwl8IEFnYWluLCBhbm90aGVyIDY0LWJpdCBkb3VibGUgc2hpZnQuCisJbW92ZS5sCSglYTApLCVkMAorCW1vdmUubAklZDAsJWQxCisJbHNyLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJbW92ZS5sCSglYTApLCVkMAorCWxzci5sCSVkMiwlZDAKKwluZWcudwklZDIKKwlhZGQudwkjMzIsJWQyCisJbHNsLmwJJWQyLCVkMQorCW9yLmwJJWQxLCVkMAorCW1vdmUubAkoJWEwKSwlZDEKKwltb3ZlLmwJJWQwLCglYTApCisJfCBDaGVjayB0byBzZWUgaWYgd2Ugc2hpZnRlZCBvZmYgYW55IHNpZ25pZmljYW50IGJpdHMKKwlsc2wubAklZDIsJWQxCisJamVxCWZwX25kX3JvdW5kCQl8IE5vcGUsIHJvdW5kLgorCWJzZXQJIzAsJWQwCQkJfCBZZXMsIHNvIHNldCB0aGUgInN0aWNreSBiaXQiLgorCWpyYQlmcF9uZF9yb3VuZAkJfCBOb3csIHJvdW5kLgorCXwgQW5vdGhlciA2NC1iaXQgc2luZ2xlIHNoaWZ0IGFuZCBzdG9yZQorMToJc3ViLncJIzMyLCVkMgorCWNtcC53CSMzMiwlZDIJCQl8IERvIHdlIHJlYWxseSBuZWVkIHRvIHNoaWZ0PworCWpjYwkyZgkJCXwgTm8sIHRoZSBudW1iZXIgaXMgdG9vIHNtYWxsLgorCW1vdmUubAkoJWEwKSwlZDAKKwljbHIubAkoJWEwKSsKKwltb3ZlLmwJJWQwLCVkMQorCWxzci5sCSVkMiwlZDAKKwluZWcudwklZDIKKwlhZGQudwkjMzIsJWQyCisJfCBBZ2FpbiwgY2hlY2sgdG8gc2VlIGlmIHdlIHNoaWZ0ZWQgb2ZmIGFueSBzaWduaWZpY2FudCBiaXRzLgorCXRzdC5sCSglYTApCisJamVxCTFmCisJYnNldAkjMCwlZDAJCQl8IFN0aWNreSBiaXQuCisxOgltb3ZlLmwJJWQwLCglYTApCisJbHNsLmwJJWQyLCVkMQorCWplcQlmcF9uZF9yb3VuZAorCWJzZXQJIzAsJWQwCisJanJhCWZwX25kX3JvdW5kCisJfCBTb3JyeSwgdGhlIG51bWJlciBpcyBqdXN0IHRvbyBzbWFsbC4KKzI6CWNsci5sCSglYTApKworCWNsci5sCSglYTApCisJbW92ZXEJIzEsJWQwCQkJfCBTbWFsbGVzdCBwb3NzaWJsZSBmcmFjdGlvbiwKKwlqcmEJZnBfbmRfcm91bmQJCXwgcm91bmQgYXMgZGVzaXJlZC4KKwl8IHplcm8gYW5kIGRlbm9ybWFsaXplZAorZnBfbmRfemVybzoKKwl0c3QubAkoJWEwKSsKKwlqbmUJMWYKKwl0c3QubAkoJWEwKQorCWpuZQkxZgorCXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cwkJCQl8IHplcm8uICBub3RoaW5nIHRvIGRvLgorCXwgVGhlc2UgYXJlIG5vdCBtZXJlbHkgc3Vibm9ybWFsIG51bWJlcnMsIGJ1dCB0cnVlIGRlbm9ybWFscywKKwl8IGkuZS4gcGF0aG9sb2dpY2FsbHkgc21hbGwgKGV4cG9uZW50IGlzIDIqKi0xNjM4MykgbnVtYmVycy4KKwl8IEl0IGlzIGNsZWFybHkgaW1wb3NzaWJsZSBmb3IgZXZlbiBhIG5vcm1hbCBleHRlbmRlZCBudW1iZXIKKwl8IHdpdGggdGhhdCBleHBvbmVudCB0byBmaXQgaW50byBkb3VibGUgcHJlY2lzaW9uLCBzbyBqdXN0CisJfCB3cml0ZSB0aGVzZSBvbmVzIG9mZiBhcyAidG9vIGRhcm4gc21hbGwiLgorMToJZnBfc2V0X3NyIEZQU1JfRVhDX1VORkwJCXwgU2V0IFVORkwgYml0CisJY2xyLmwJKCVhMCkKKwljbHIubAktKCVhMCkKKwltb3ZlLncJIzB4M2MwMSwtKCVhMCkJCXwgaS5lLiAyKiotMTAyMgorCWFkZHEubAkjNiwlYTAKKwltb3ZlcQkjMSwlZDAKKwlqcmEJZnBfbmRfcm91bmQJCXwgcm91bmQuCisJfCBFeHBvbmVudCBvdmVyZmxvdy4gIEp1c3QgY2FsbCBpdCBpbmZpbml0eS4KK2ZwX25kX2xhcmdlOgorCW1vdmUudwkjMHg3ZmYsJWQwCisJYW5kLncJKDYsJWEwKSwlZDAKKwlqZXEJMWYKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKzE6CWZwX3NldF9zciBGUFNSX0VYQ19PVkZMCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCisJam5lCTNmCQkJfCAlZDIgPSAwIHJvdW5kIHRvIG5lYXJlc3QKKzE6CW1vdmUudwkjMHg3ZmZmLCgtMiwlYTApCisJY2xyLmwJKCVhMCkrCisJY2xyLmwJKCVhMCkKKzI6CXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworMzoJc3VicS53CSMyLCVkMgorCWpjcwk1ZgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQk0ZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LmIJKC0zLCVhMCkJCXwgdG8gLWluZgorCWpuZQkxYgorCWpyYQk1ZgorNDoJdHN0LmIJKC0zLCVhMCkJCXwgdG8gK2luZgorCWplcQkxYgorNToJbW92ZS53CSMweDQzZmUsKC0yLCVhMCkKKwltb3ZlcQkjLTEsJWQwCisJbW92ZS5sCSVkMCwoJWEwKSsKKwltb3ZlLncJIzB4ZjgwMCwlZDAKKwltb3ZlLmwJJWQwLCglYTApCisJanJhCTJiCisJfCBJbmZpbml0aWVzIG9yIE5hTnMKK2ZwX25kX2h1Z2U6CisJc3VicS5sCSM0LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisKKwl8IGZwX25vcm1hbGl6ZV9zaW5nbGU6CisJfCBub3JtYWxpemUgYW4gZXh0ZW5kZWQgd2l0aCBzaW5nbGUgKDIzLWJpdCkgcHJlY2lzaW9uCisJfCBhcmdzOgkgJWEwIChzdHJ1Y3QgZnBfZXh0ICopCisKK2ZwX25vcm1hbGl6ZV9zaW5nbGU6CisJcHJpbnRmCVBOT1JNLCJuczogJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpICIKKwlhZGRxLmwJIzIsJWEwCisJbW92ZS53CSglYTApKywlZDIKKwlqZXEJZnBfbnNfemVybwkJfCB6ZXJvIC8gZGVub3JtYWxpemVkCisJY21wLncJIzB4N2ZmZiwlZDIKKwlqZXEJZnBfbnNfaHVnZQkJfCBOYU4gLyBpbmZpbml0aXZlLgorCXN1Yi53CSMweDQwMDAtMHg3ZiwlZDIJfCB3aWxsIHRoZSBleHBvbmVudCBmaXQ/CisJamNzCWZwX25zX3NtYWxsCQl8IHRvbyBzbWFsbC4KKwljbXAudwkjMHhmZSwlZDIKKwlqY2MJZnBfbnNfbGFyZ2UJCXwgdG9vIGJpZy4KKwltb3ZlLmwJKCVhMCkrLCVkMAkJfCBnZXQgaGlnaCBsd29yZCBvZiBtYW50aXNzYQorZnBfbnNfcm91bmQ6CisJdHN0LmwJKCVhMCkJCQl8IGNoZWNrIHRoZSBsb3cgbHdvcmQKKwlqZXEJMWYKKwl8IFNldCBhIHN0aWNreSBiaXQgaWYgaXQgaXMgbm9uLXplcm8uICBUaGlzIHNob3VsZCBvbmx5CisJfCBhZmZlY3QgdGhlIHJvdW5kaW5nIGluIHdoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGVxdWFsLQorCXwgZGlzdGFuY2Ugc2l0dWF0aW9ucywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IGl0IHRvIGRvLgorCWJzZXQJIzAsJWQwCisxOgljbHIubAkoJWEwKQkJCXwgemFwIGl0IGZyb20gbWVtb3J5LgorCXwgbm93LCByb3VuZCBvZmYgdGhlIGxvdyA4IGJpdHMgb2YgdGhlIGhpIGx3b3JkLgorCXRzdC5iCSVkMAkJCXwgOCBsb3cgYml0cy4KKwlqbmUJZnBfbnNfY2hlY2tyb3VuZAl8IEFyZSB0aGV5IG5vbi16ZXJvPworCXwgbm90aGluZyB0byBkbyBoZXJlCisJc3VicS5sCSM4LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCitmcF9uc19jaGVja3JvdW5kOgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgl8IElORVgyIGJpdAorCWNsci5iCS0oJWEwKQkJCXwgY2xlYXIgbG93IGJ5dGUgb2YgaGlnaCBsd29yZAorCXN1YnEubAkjMywlYTAKKwltb3ZlLncJKEZQRF9STkQsRlBEQVRBKSwlZDIJfCByb3VuZGluZyBtb2RlCisJam5lCTJmCQkJfCAlZDIgPT0gMCwgcm91bmQgdG8gbmVhcmVzdAorCXRzdC5iCSVkMAkJCXwgdGVzdCBndWFyZCBiaXQKKwlqcGwJOWYJCQl8IHplcm8gaXMgY2xvc2VyCisJYnRzdAkjOCwlZDAJCQl8IHRlc3QgbHNiIGJpdAorCXwgcm91bmQgdG8gZXZlbiBiZWhhdmlvdXIsIHNlZSBhYm92ZS4KKwlqbmUJZnBfbnNfZG9yb3VuZHVwCQl8IHJvdW5kIHRvIGluZmluaXR5CisJbHNsLmIJIzEsJWQwCQkJfCBjaGVjayBsb3cgYml0cworCWplcQk5ZgkJCXwgcm91bmQgdG8gemVybworZnBfbnNfZG9yb3VuZHVwOgorCXwgcm91bmQgKHRoZSBtYW50aXNzYSwgdGhhdCBpcykgdG93YXJkcyBpbmZpbml0eQorCWFkZC5sCSMweDEwMCwoJWEwKQorCWpjYwk5ZgkJCXwgbm8gb3ZlcmZsb3csIGdvb2QuCisJfCBPdmVyZmxvdy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgJWQxIHdhcyAweGZmZmZmZjAwLCBzbyBpdAorCXwgaXMgbm93IHplcm8uICBXZSB3aWxsIHNldCB0aGUgbWFudGlzc2EgdG8gcmVmbGVjdCB0aGlzLCBhbmQKKwl8IGluY3JlbWVudCB0aGUgZXhwb25lbnQgKGNoZWNraW5nIGZvciBvdmVyZmxvdyB0aGVyZSB0b28pCisJbW92ZS53CSMweDgwMDAsKCVhMCkKKwlhZGRxLncJIzEsLSglYTApCisJY21wLncJIzB4NDA3ZiwoJWEwKSsJCXwgZXhwb25lbnQgbm93IG92ZXJmbG93bj8KKwlqZXEJZnBfbnNfbGFyZ2UJCXwgeWVzLCBzbyBtYWtlIGl0IGluZmluaXR5LgorOToJc3VicS5sCSM0LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisJfCBjaGVjayBub25kZWZhdWx0IHJvdW5kaW5nIG1vZGVzCisyOglzdWJxLncJIzIsJWQyCisJamNzCTliCQkJfCAlZDIgPCAyLCByb3VuZCB0byB6ZXJvCisJamhpCTNmCQkJfCAlZDIgPiAyLCByb3VuZCB0byAraW5maW5pdHkKKwl0c3QuYgkoLTMsJWEwKQkJfCB0byAtaW5mCisJam5lCWZwX25zX2Rvcm91bmR1cAkJfCBuZWdhdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IHBvc2l0aXZlLCByb3VuZCB0byB6ZXJvCiszOgl0c3QuYgkoLTMsJWEwKQkJfCB0byAraW5mCisJamVxCWZwX25zX2Rvcm91bmR1cAkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IG5lZ2F0aXZlLCByb3VuZCB0byB6ZXJvCisJfCBFeHBvbmVudCB1bmRlcmZsb3cuICBUcnkgdG8gbWFrZSBhIGRlbm9ybWFsLCBhbmQgc2V0IGl0IHRvCisJfCB0aGUgc21hbGxlc3QgcG9zc2libGUgZnJhY3Rpb24gaWYgdGhpcyBmYWlscy4KK2ZwX25zX3NtYWxsOgorCWZwX3NldF9zciBGUFNSX0VYQ19VTkZMCQl8IHNldCBVTkZMIGJpdAorCW1vdmUudwkjMHgzZjgxLCgtMiwlYTApCXwgMioqLTEyNgorCW5lZy53CSVkMgkJCXwgZGVncmVlIG9mIHVuZGVyZmxvdworCWNtcC53CSMzMiwlZDIJCQl8IHNpbmdsZSBvciBkb3VibGUgc2hpZnQ/CisJamNjCTJmCisJfCBhIDMyLWJpdCBzaGlmdC4KKwltb3ZlLmwJKCVhMCksJWQwCisJbW92ZS5sCSVkMCwlZDEKKwlsc3IubAklZDIsJWQwCisJbW92ZS5sCSVkMCwoJWEwKSsKKwl8IENoZWNrIHRvIHNlZSBpZiB3ZSBzaGlmdGVkIG9mZiBhbnkgc2lnbmlmaWNhbnQgYml0cy4KKwluZWcudwklZDIKKwlhZGQudwkjMzIsJWQyCisJbHNsLmwJJWQyLCVkMQorCWplcQkxZgorCWJzZXQJIzAsJWQwCQkJfCBTdGlja3kgYml0LgorCXwgQ2hlY2sgdGhlIGxvd2VyIGx3b3JkCisxOgl0c3QubAkoJWEwKQorCWplcQlmcF9uc19yb3VuZAorCWNscgkoJWEwKQorCWJzZXQJIzAsJWQwCQkJfCBTdGlja3kgYml0LgorCWpyYQlmcF9uc19yb3VuZAorCXwgU29ycnksIHRoZSBudW1iZXIgaXMganVzdCB0b28gc21hbGwuCisyOgljbHIubAkoJWEwKSsKKwljbHIubAkoJWEwKQorCW1vdmVxCSMxLCVkMAkJCXwgU21hbGxlc3QgcG9zc2libGUgZnJhY3Rpb24sCisJanJhCWZwX25zX3JvdW5kCQl8IHJvdW5kIGFzIGRlc2lyZWQuCisJfCBFeHBvbmVudCBvdmVyZmxvdy4gIEp1c3QgY2FsbCBpdCBpbmZpbml0eS4KK2ZwX25zX2xhcmdlOgorCXRzdC5iCSgzLCVhMCkKKwlqZXEJMWYKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKzE6CWZwX3NldF9zciBGUFNSX0VYQ19PVkZMCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCisJam5lCTNmCQkJfCAlZDIgPSAwIHJvdW5kIHRvIG5lYXJlc3QKKzE6CW1vdmUudwkjMHg3ZmZmLCgtMiwlYTApCisJY2xyLmwJKCVhMCkrCisJY2xyLmwJKCVhMCkKKzI6CXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworMzoJc3VicS53CSMyLCVkMgorCWpjcwk1ZgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQk0ZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LmIJKC0zLCVhMCkJCXwgdG8gLWluZgorCWpuZQkxYgorCWpyYQk1ZgorNDoJdHN0LmIJKC0zLCVhMCkJCXwgdG8gK2luZgorCWplcQkxYgorNToJbW92ZS53CSMweDQwN2UsKC0yLCVhMCkKKwltb3ZlLmwJIzB4ZmZmZmZmMDAsKCVhMCkrCisJY2xyLmwJKCVhMCkKKwlqcmEJMmIKKwl8IHplcm8gYW5kIGRlbm9ybWFsaXplZAorZnBfbnNfemVybzoKKwl0c3QubAkoJWEwKSsKKwlqbmUJMWYKKwl0c3QubAkoJWEwKQorCWpuZQkxZgorCXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cwkJCQl8IHplcm8uICBub3RoaW5nIHRvIGRvLgorCXwgVGhlc2UgYXJlIG5vdCBtZXJlbHkgc3Vibm9ybWFsIG51bWJlcnMsIGJ1dCB0cnVlIGRlbm9ybWFscywKKwl8IGkuZS4gcGF0aG9sb2dpY2FsbHkgc21hbGwgKGV4cG9uZW50IGlzIDIqKi0xNjM4MykgbnVtYmVycy4KKwl8IEl0IGlzIGNsZWFybHkgaW1wb3NzaWJsZSBmb3IgZXZlbiBhIG5vcm1hbCBleHRlbmRlZCBudW1iZXIKKwl8IHdpdGggdGhhdCBleHBvbmVudCB0byBmaXQgaW50byBzaW5nbGUgcHJlY2lzaW9uLCBzbyBqdXN0CisJfCB3cml0ZSB0aGVzZSBvbmVzIG9mZiBhcyAidG9vIGRhcm4gc21hbGwiLgorMToJZnBfc2V0X3NyIEZQU1JfRVhDX1VORkwJCXwgU2V0IFVORkwgYml0CisJY2xyLmwJKCVhMCkKKwljbHIubAktKCVhMCkKKwltb3ZlLncJIzB4M2Y4MSwtKCVhMCkJCXwgaS5lLiAyKiotMTI2CisJYWRkcS5sCSM2LCVhMAorCW1vdmVxCSMxLCVkMAorCWpyYQlmcF9uc19yb3VuZAkJfCByb3VuZC4KKwl8IEluZmluaXRpZXMgb3IgTmFOcworZnBfbnNfaHVnZToKKwlzdWJxLmwJIzQsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKworCXwgZnBfbm9ybWFsaXplX3NpbmdsZV9mYXN0OgorCXwgbm9ybWFsaXplIGFuIGV4dGVuZGVkIHdpdGggc2luZ2xlICgyMy1iaXQpIHByZWNpc2lvbgorCXwgdGhpcyBpcyBvbmx5IHVzZWQgYnkgZnNnbGRpdi9mc2dkbG11bCwgd2hlcmUgdGhlCisJfCBvcGVyYW5kIGlzIG5vdCBjb21wbGV0bHkgbm9ybWFsaXplZC4KKwl8IGFyZ3M6CSAlYTAgKHN0cnVjdCBmcF9leHQgKikKKworZnBfbm9ybWFsaXplX3NpbmdsZV9mYXN0OgorCXByaW50ZglQTk9STSwibnNmOiAlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIikgIgorCWFkZHEubAkjMiwlYTAKKwltb3ZlLncJKCVhMCkrLCVkMgorCWNtcC53CSMweDdmZmYsJWQyCisJamVxCWZwX25zZl9odWdlCQl8IE5hTiAvIGluZmluaXRpdmUuCisJbW92ZS5sCSglYTApKywlZDAJCXwgZ2V0IGhpZ2ggbHdvcmQgb2YgbWFudGlzc2EKK2ZwX25zZl9yb3VuZDoKKwl0c3QubAkoJWEwKQkJCXwgY2hlY2sgdGhlIGxvdyBsd29yZAorCWplcQkxZgorCXwgU2V0IGEgc3RpY2t5IGJpdCBpZiBpdCBpcyBub24temVyby4gIFRoaXMgc2hvdWxkIG9ubHkKKwl8IGFmZmVjdCB0aGUgcm91bmRpbmcgaW4gd2hhdCB3b3VsZCBvdGhlcndpc2UgYmUgZXF1YWwtCisJfCBkaXN0YW5jZSBzaXR1YXRpb25zLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQgaXQgdG8gZG8uCisJYnNldAkjMCwlZDAKKzE6CWNsci5sCSglYTApCQkJfCB6YXAgaXQgZnJvbSBtZW1vcnkuCisJfCBub3csIHJvdW5kIG9mZiB0aGUgbG93IDggYml0cyBvZiB0aGUgaGkgbHdvcmQuCisJdHN0LmIJJWQwCQkJfCA4IGxvdyBiaXRzLgorCWpuZQlmcF9uc2ZfY2hlY2tyb3VuZAl8IEFyZSB0aGV5IG5vbi16ZXJvPworCXwgbm90aGluZyB0byBkbyBoZXJlCisJc3VicS5sCSM4LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCitmcF9uc2ZfY2hlY2tyb3VuZDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIJfCBJTkVYMiBiaXQKKwljbHIuYgktKCVhMCkJCQl8IGNsZWFyIGxvdyBieXRlIG9mIGhpZ2ggbHdvcmQKKwlzdWJxLmwJIzMsJWEwCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCXwgcm91bmRpbmcgbW9kZQorCWpuZQkyZgkJCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QuYgklZDAJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTlmCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWJ0c3QJIzgsJWQwCQkJfCB0ZXN0IGxzYiBiaXQKKwl8IHJvdW5kIHRvIGV2ZW4gYmVoYXZpb3VyLCBzZWUgYWJvdmUuCisJam5lCWZwX25zZl9kb3JvdW5kdXAJCXwgcm91bmQgdG8gaW5maW5pdHkKKwlsc2wuYgkjMSwlZDAJCQl8IGNoZWNrIGxvdyBiaXRzCisJamVxCTlmCQkJfCByb3VuZCB0byB6ZXJvCitmcF9uc2ZfZG9yb3VuZHVwOgorCXwgcm91bmQgKHRoZSBtYW50aXNzYSwgdGhhdCBpcykgdG93YXJkcyBpbmZpbml0eQorCWFkZC5sCSMweDEwMCwoJWEwKQorCWpjYwk5ZgkJCXwgbm8gb3ZlcmZsb3csIGdvb2QuCisJfCBPdmVyZmxvdy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgJWQxIHdhcyAweGZmZmZmZjAwLCBzbyBpdAorCXwgaXMgbm93IHplcm8uICBXZSB3aWxsIHNldCB0aGUgbWFudGlzc2EgdG8gcmVmbGVjdCB0aGlzLCBhbmQKKwl8IGluY3JlbWVudCB0aGUgZXhwb25lbnQgKGNoZWNraW5nIGZvciBvdmVyZmxvdyB0aGVyZSB0b28pCisJbW92ZS53CSMweDgwMDAsKCVhMCkKKwlhZGRxLncJIzEsLSglYTApCisJY21wLncJIzB4NDA3ZiwoJWEwKSsJCXwgZXhwb25lbnQgbm93IG92ZXJmbG93bj8KKwlqZXEJZnBfbnNmX2xhcmdlCQl8IHllcywgc28gbWFrZSBpdCBpbmZpbml0eS4KKzk6CXN1YnEubAkjNCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCXwgY2hlY2sgbm9uZGVmYXVsdCByb3VuZGluZyBtb2RlcworMjoJc3VicS53CSMyLCVkMgorCWpjcwk5YgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQkzZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LmIJKC0zLCVhMCkJCXwgdG8gLWluZgorCWpuZQlmcF9uc2ZfZG9yb3VuZHVwCXwgbmVnYXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gemVybworMzoJdHN0LmIJKC0zLCVhMCkJCXwgdG8gK2luZgorCWplcQlmcF9uc2ZfZG9yb3VuZHVwCQl8IHBvc2l0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIHplcm8KKwl8IEV4cG9uZW50IG92ZXJmbG93LiAgSnVzdCBjYWxsIGl0IGluZmluaXR5LgorZnBfbnNmX2xhcmdlOgorCXRzdC5iCSgzLCVhMCkKKwlqZXEJMWYKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKzE6CWZwX3NldF9zciBGUFNSX0VYQ19PVkZMCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCisJam5lCTNmCQkJfCAlZDIgPSAwIHJvdW5kIHRvIG5lYXJlc3QKKzE6CW1vdmUudwkjMHg3ZmZmLCgtMiwlYTApCisJY2xyLmwJKCVhMCkrCisJY2xyLmwJKCVhMCkKKzI6CXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworMzoJc3VicS53CSMyLCVkMgorCWpjcwk1ZgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQk0ZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LmIJKC0zLCVhMCkJCXwgdG8gLWluZgorCWpuZQkxYgorCWpyYQk1ZgorNDoJdHN0LmIJKC0zLCVhMCkJCXwgdG8gK2luZgorCWplcQkxYgorNToJbW92ZS53CSMweDQwN2UsKC0yLCVhMCkKKwltb3ZlLmwJIzB4ZmZmZmZmMDAsKCVhMCkrCisJY2xyLmwJKCVhMCkKKwlqcmEJMmIKKwl8IEluZmluaXRpZXMgb3IgTmFOcworZnBfbnNmX2h1Z2U6CisJc3VicS5sCSM0LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisKKwl8IGNvbnZfZXh0MmludCAobWFjcm8pOgorCXwgR2VuZXJhdGVzIGEgc3Vicm91dGluZSB0aGF0IGNvbnZlcnRzIGFuIGV4dGVuZGVkIHZhbHVlIHRvIGFuCisJfCBpbnRlZ2VyIG9mIGEgZ2l2ZW4gc2l6ZSwgYWdhaW4sIHdpdGggdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YKKwl8IHJvdW5kaW5nLgorCisJfCBNYWNybyBhcmd1bWVudHM6CisJfCBzOglzaXplLCBhcyBnaXZlbiBpbiBhbiBhc3NlbWJseSBpbnN0cnVjdGlvbi4KKwl8IGI6CW51bWJlciBvZiBiaXRzIGluIHRoYXQgc2l6ZS4KKworCXwgU3Vicm91dGluZSBhcmd1bWVudHM6CisJfCAlYTA6CXNvdXJjZSAoc3RydWN0IGZwX2V4dCAqKQorCisJfCBSZXR1cm5zIHRoZSBpbnRlZ2VyIGluICVkMCAobGlrZSBpdCBzaG91bGQpCisKKy5tYWNybyBjb252X2V4dDJpbnQgcyxiCisJLnNldAlpbmYsKDE8PChcYi0xKSktMQl8IGkuZS4gTUFYSU5UCisJcHJpbnRmCVBDT05WLCJlMmklZDogJXAoIiwyLCNcYiwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKSAiCisJYWRkcS5sCSMyLCVhMAorCW1vdmUudwkoJWEwKSssJWQyCQl8IGV4cG9uZW50CisJamVxCWZwX2UyaV96ZXJvXGIJCXwgemVybyAvIGRlbm9ybSAoPT0gMCwgaGVyZSkKKwljbXAudwkjMHg3ZmZmLCVkMgorCWplcQlmcF9lMmlfaHVnZVxiCQl8IEluZiAvIE5hTgorCXN1Yi53CSMweDNmZmUsJWQyCisJamNzCWZwX2UyaV9zbWFsbFxiCisJY21wLncJI1xiLCVkMgorCWpoaQlmcF9lMmlfbGFyZ2VcYgorCW1vdmUubAkoJWEwKSwlZDAKKwltb3ZlLmwJJWQwLCVkMQorCWxzbC5sCSVkMiwlZDEKKwlqbmUJZnBfZTJpX3JvdW5kXGIKKwl0c3QubAkoNCwlYTApCisJam5lCWZwX2UyaV9yb3VuZFxiCisJbmVnLncJJWQyCisJYWRkLncJIzMyLCVkMgorCWxzci5sCSVkMiwlZDAKKzk6CXRzdC53CSgtNCwlYTApCisJam5lCTFmCisJdHN0LlxzCSVkMAorCWptaQlmcF9lMmlfbGFyZ2VcYgorCXByaW50ZglQQ09OViwiLT4gJXBcbiIsMSwlZDAKKwlydHMKKzE6CW5lZy5ccwklZDAKKwlqZXEJMWYKKwlqcGwJZnBfZTJpX2xhcmdlXGIKKzE6CXByaW50ZglQQ09OViwiLT4gJXBcbiIsMSwlZDAKKwlydHMKK2ZwX2UyaV9yb3VuZFxiOgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgl8IElORVgyIGJpdAorCW5lZy53CSVkMgorCWFkZC53CSMzMiwlZDIKKwkuaWYJXGI+MTYKKwlqZXEJNWYKKwkuZW5kaWYKKwlsc3IubAklZDIsJWQwCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCXwgcm91bmRpbmcgbW9kZQorCWpuZQkyZgkJCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QubAklZDEJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTliCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWJ0c3QJJWQyLCVkMAkJCXwgdGVzdCBsc2IgYml0ICglZDIgc3RpbGwgMCkKKwlqbmUJZnBfZTJpX2Rvcm91bmR1cFxiCisJbHNsLmwJIzEsJWQxCQkJfCBjaGVjayBsb3cgYml0cworCWpuZQlmcF9lMmlfZG9yb3VuZHVwXGIKKwl0c3QubAkoNCwlYTApCisJamVxCTliCitmcF9lMmlfZG9yb3VuZHVwXGI6CisJYWRkcS5sCSMxLCVkMAorCWpyYQk5YgorCXwgY2hlY2sgbm9uZGVmYXVsdCByb3VuZGluZyBtb2RlcworMjoJc3VicS53CSMyLCVkMgorCWpjcwk5YgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQkzZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LncJKC00LCVhMCkJCXwgdG8gLWluZgorCWpuZQlmcF9lMmlfZG9yb3VuZHVwXGIJfCBuZWdhdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IHBvc2l0aXZlLCByb3VuZCB0byB6ZXJvCiszOgl0c3QudwkoLTQsJWEwKQkJfCB0byAraW5mCisJamVxCWZwX2UyaV9kb3JvdW5kdXBcYgl8IHBvc2l0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5Ygl8IG5lZ2F0aXZlLCByb3VuZCB0byB6ZXJvCisJfCB3ZSBhcmUgb25seSB3YW50IC0yKioxMjcgZ2V0IGNvcnJlY3RseSByb3VuZGVkIGhlcmUsCisJfCBzaW5jZSB0aGUgZ3VhcmQgYml0IGlzIGluIHRoZSBsb3dlciBsd29yZC4KKwl8IGV2ZXJ5dGhpbmcgZWxzZSBlbmRzIHVwIGFueXdheSBhcyBvdmVyZmxvdy4KKwkuaWYJXGI+MTYKKzU6CW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgl8IHJvdW5kaW5nIG1vZGUKKwlqbmUJMmIJCQl8ICVkMiA9PSAwLCByb3VuZCB0byBuZWFyZXN0CisJbW92ZS5sCSg0LCVhMCksJWQxCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTliCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWxzbC5sCSMxLCVkMQkJCXwgY2hlY2sgbG93IGJpdHMKKwlqbmUJZnBfZTJpX2Rvcm91bmR1cFxiCisJanJhCTliCisJLmVuZGlmCitmcF9lMmlfemVyb1xiOgorCWNsci5sCSVkMAorCXRzdC5sCSglYTApKworCWpuZQkxZgorCXRzdC5sCSglYTApCisJamVxCTNmCisxOglzdWJxLmwJIzQsJWEwCisJZnBfY2xyX3NyIEZQU1JfRVhDX1VORkwJCXwgZnBfbm9ybWFsaXplX2V4dCBoYXMgc2V0IHRoaXMgYml0CitmcF9lMmlfc21hbGxcYjoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKwljbHIubAklZDAKKwltb3ZlLncJKEZQRF9STkQsRlBEQVRBKSwlZDIJfCByb3VuZGluZyBtb2RlCisJc3VicS53CSMyLCVkMgorCWpjcwkzZgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gbmVhcmVzdC96ZXJvCisJamhpCTJmCQkJfCAlZDIgPiAyLCByb3VuZCB0byAraW5maW5pdHkKKwl0c3QudwkoLTQsJWEwKQkJfCB0byAtaW5mCisJamVxCTNmCisJc3VicS5ccwkjMSwlZDAKKwlqcmEJM2YKKzI6CXRzdC53CSgtNCwlYTApCQl8IHRvICtpbmYKKwlqbmUJM2YKKwlhZGRxLlxzCSMxLCVkMAorMzoJcHJpbnRmCVBDT05WLCItPiAlcFxuIiwxLCVkMAorCXJ0cworZnBfZTJpX2xhcmdlXGI6CisJZnBfc2V0X3NyIEZQU1JfRVhDX09QRVJSCisJbW92ZS5ccwkjaW5mLCVkMAorCXRzdC53CSgtNCwlYTApCisJamVxCTFmCisJYWRkcS5ccwkjMSwlZDAKKzE6CXByaW50ZglQQ09OViwiLT4gJXBcbiIsMSwlZDAKKwlydHMKK2ZwX2UyaV9odWdlXGI6CisJbW92ZS5ccwkoJWEwKSwlZDAKKwl0c3QubAkoJWEwKQorCWpuZQkxZgorCXRzdC5sCSglYTApCisJamVxCWZwX2UyaV9sYXJnZVxiCisJfCBmcF9ub3JtYWxpemVfZXh0IGhhcyBzZXQgdGhpcyBiaXQgYWxyZWFkeQorCXwgYW5kIG1hZGUgdGhlIG51bWJlciBub25zaWduYWxpbmcKKzE6CWZwX3RzdF9zciBGUFNSX0VYQ19TTkFOCisJam5lCTFmCisJZnBfc2V0X3NyIEZQU1JfRVhDX09QRVJSCisxOglwcmludGYJUENPTlYsIi0+ICVwXG4iLDEsJWQwCisJcnRzCisuZW5kbQorCitmcF9jb252X2V4dDJsb25nOgorCWNvbnZfZXh0MmludCBsLDMyCisKK2ZwX2NvbnZfZXh0MnNob3J0OgorCWNvbnZfZXh0MmludCB3LDE2CisKK2ZwX2NvbnZfZXh0MmJ5dGU6CisJY29udl9leHQyaW50IGIsOAorCitmcF9jb252X2V4dDJkb3VibGU6CisJanNyCWZwX25vcm1hbGl6ZV9kb3VibGUKKwlwcmludGYJUENPTlYsImUyZDogJXAoIiwxLCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpLCAiCisJbW92ZS5sCSglYTApKywlZDIKKwljbXAudwkjMHg3ZmZmLCVkMgorCWpuZQkxZgorCW1vdmUudwkjMHg3ZmYsJWQyCisJbW92ZS5sCSglYTApKywlZDAKKwlqcmEJMmYKKzE6CXN1Yi53CSMweDNmZmYtMHgzZmYsJWQyCisJbW92ZS5sCSglYTApKywlZDAKKwlqbWkJMmYKKwljbHIudwklZDIKKzI6CWxzbC53CSM1LCVkMgorCWxzbC5sCSM3LCVkMgorCWxzbC5sCSM4LCVkMgorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJIzEsJWQwCisJbHNyLmwJIzQsJWQwCisJbHNyLmwJIzgsJWQwCisJb3IubAklZDIsJWQwCisJcHV0dXNlci5sICVkMCwoJWExKSssZnBfZXJyX3VhMiwlYTEKKwltb3ZlcQkjMjEsJWQwCisJbHNsLmwJJWQwLCVkMQorCW1vdmUubAkoJWEwKSwlZDAKKwlsc3IubAkjNCwlZDAKKwlsc3IubAkjNywlZDAKKwlvci5sCSVkMSwlZDAKKwlwdXR1c2VyLmwgJWQwLCglYTEpLGZwX2Vycl91YTIsJWExCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCWdldHVzZXIubCAlYTFAKC00KSwlZDAsZnBfZXJyX3VhMiwlYTEKKwlnZXR1c2VyLmwgJWExQCgwKSwlZDEsZnBfZXJyX3VhMiwlYTEKKwlwcmludGYJUENPTlYsIiVwKCUwOHglMDh4KVxuIiwzLCVhMSwlZDAsJWQxCisjZW5kaWYKKwlydHMKKworZnBfY29udl9leHQyc2luZ2xlOgorCWpzcglmcF9ub3JtYWxpemVfc2luZ2xlCisJcHJpbnRmCVBDT05WLCJlMnM6ICVwKCIsMSwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKSwgIgorCW1vdmUubAkoJWEwKSssJWQxCisJY21wLncJIzB4N2ZmZiwlZDEKKwlqbmUJMWYKKwltb3ZlLncJIzB4ZmYsJWQxCisJbW92ZS5sCSglYTApKywlZDAKKwlqcmEJMmYKKzE6CXN1Yi53CSMweDNmZmYtMHg3ZiwlZDEKKwltb3ZlLmwJKCVhMCkrLCVkMAorCWptaQkyZgorCWNsci53CSVkMQorMjoJbHNsLncJIzgsJWQxCisJbHNsLmwJIzcsJWQxCisJbHNsLmwJIzgsJWQxCisJYmNscgkjMzEsJWQwCisJbHNyLmwJIzgsJWQwCisJb3IubAklZDEsJWQwCisJcHJpbnRmCVBDT05WLCIlMDh4XG4iLDEsJWQwCisJcnRzCisKKwl8IHNwZWNpYWwgcmV0dXJuIGFkZHJlc3NlcyBmb3IgaW5zdHIgdGhhdAorCXwgZW5jb2RlIHRoZSByb3VuZGluZyBwcmVjaXNpb24gaW4gdGhlIG9wY29kZQorCXwgKGUuZy4gZnNtb3ZlLGZkbW92ZSkKKworZnBfZmluYWxyb3VuZGluZ19zaW5nbGU6CisJYWRkcS5sCSM4LCVzcAorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJanNyCWZwX25vcm1hbGl6ZV9zaW5nbGUKKwlqcmEJZnBfZmluYWx0ZXN0CisKK2ZwX2ZpbmFscm91bmRpbmdfc2luZ2xlX2Zhc3Q6CisJYWRkcS5sCSM4LCVzcAorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJanNyCWZwX25vcm1hbGl6ZV9zaW5nbGVfZmFzdAorCWpyYQlmcF9maW5hbHRlc3QKKworZnBfZmluYWxyb3VuZGluZ19kb3VibGU6CisJYWRkcS5sCSM4LCVzcAorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJanNyCWZwX25vcm1hbGl6ZV9kb3VibGUKKwlqcmEJZnBfZmluYWx0ZXN0CisKKwl8IGZwX2ZpbmFsdGVzdDoKKwl8IHNldCB0aGUgZW11bGF0ZWQgc3RhdHVzIHJlZ2lzdGVyIGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIGFuCisJfCBlbXVsYXRlZCBpbnN0cnVjdGlvbi4KKworZnBfZmluYWxyb3VuZGluZzoKKwlhZGRxLmwJIzgsJXNwCit8CXByaW50ZgksImY6ICVwXG4iLDEsJWEwCisJanNyCWZwX25vcm1hbGl6ZV9leHQKKwltb3ZlLncJKEZQRF9QUkVDLEZQREFUQSksJWQwCisJc3VicS53CSMxLCVkMAorCWpjcwlmcF9maW5hbHRlc3QKKwlqbmUJMWYKKwlqc3IJZnBfbm9ybWFsaXplX3NpbmdsZQorCWpyYQkyZgorMToJanNyCWZwX25vcm1hbGl6ZV9kb3VibGUKKzI6fAlwcmludGYJLCJmOiAlcFxuIiwxLCVhMAorZnBfZmluYWx0ZXN0OgorCXwgRmlyc3QsIHdlIGRvIHNvbWUgb2YgdGhlIG9idmlvdXMgdGVzdHMgZm9yIHRoZSBleGNlcHRpb24KKwl8IHN0YXR1cyBieXRlIGFuZCBjb25kaXRpb24gY29kZSBieXRlcyBvZiBmcF9zciBoZXJlLCBzbyB0aGF0CisJfCB0aGV5IGRvIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgaW5kaXZpZHVhbGx5IGJ5IGV2ZXJ5CisJfCBlbXVsYXRlZCBpbnN0cnVjdGlvbi4KKwljbHIubAklZDAKKwlhZGRxLmwJIzEsJWEwCisJdHN0LmIJKCVhMCkrCQkJfCBzaWduCisJamVxCTFmCisJYnNldAkjRlBTUl9DQ19ORUctMjQsJWQwCXwgTiBiaXQKKzE6CWNtcC53CSMweDdmZmYsKCVhMCkrCQl8IGV4cG9uZW50CisJamVxCTJmCisJfCB0ZXN0IGZvciB6ZXJvCisJbW92ZXEJI0ZQU1JfQ0NfWi0yNCwlZDEKKwl0c3QubAkoJWEwKSsKKwlqbmUJOWYKKwl0c3QubAkoJWEwKQorCWpuZQk5ZgorCWpyYQk4ZgorCXwgaW5maW5pdGl2IGFuZCBOQU4KKzI6CW1vdmVxCSNGUFNSX0NDX05BTi0yNCwlZDEKKwltb3ZlLmwJKCVhMCkrLCVkMgorCWxzbC5sCSMxLCVkMgkJCXwgaWdub3JlIGhpZ2ggYml0CisJam5lCThmCisJdHN0LmwJKCVhMCkKKwlqbmUJOGYKKwltb3ZlcQkjRlBTUl9DQ19JTkYtMjQsJWQxCis4Oglic2V0CSVkMSwlZDAKKzk6CW1vdmUuYgklZDAsKEZQRF9GUFNSKzAsRlBEQVRBKQl8IHNldCBjb25kaXRpb24gdGVzdCByZXN1bHQKKwl8IG1vdmUgaW5zdHJ1Y3Rpb25zIGVudGVyIGhlcmUKKwl8IEhlcmUsIHdlIHRlc3QgdGhpbmdzIGluIHRoZSBleGNlcHRpb24gc3RhdHVzIGJ5dGUsIGFuZCBzZXQKKwl8IG90aGVyIHRoaW5ncyBpbiB0aGUgYWNjcnVlZCBleGNlcHRpb24gYnl0ZSBhY2NvcmRpbmdseS4KKwl8IEVtdWxhdGVkIGluc3RydWN0aW9ucyBjYW4gc2V0IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBmb3JtZXIsCisJfCBhcyBkZWZpbmVkIGluIGZwX2VtdS5oLgorZnBfZmluYWw6CisJbW92ZS5sCShGUERfRlBTUixGUERBVEEpLCVkMAorI2lmIDAKKwlidHN0CSNGUFNSX0VYQ19TTkFOLCVkMAl8IEVYQ19TTkFOCisJam5lCTFmCisJYnRzdAkjRlBTUl9FWENfT1BFUlIsJWQwCXwgRVhDX09QRVJSCisJamVxCTJmCisxOglic2V0CSNGUFNSX0FFWENfSU9QLCVkMAl8IHNldCBJT1AgYml0CisyOglidHN0CSNGUFNSX0VYQ19PVkZMLCVkMAl8IEVYQ19PVkZMCisJamVxCTFmCisJYnNldAkjRlBTUl9BRVhDX09WRkwsJWQwCXwgc2V0IE9WRkwgYml0CisxOglidHN0CSNGUFNSX0VYQ19VTkZMLCVkMAl8IEVYQ19VTkZMCisJamVxCTFmCisJYnRzdAkjRlBTUl9FWENfSU5FWDIsJWQwCXwgRVhDX0lORVgyCisJamVxCTFmCisJYnNldAkjRlBTUl9BRVhDX1VORkwsJWQwCXwgc2V0IFVORkwgYml0CisxOglidHN0CSNGUFNSX0VYQ19EWiwlZDAJfCBFWENfSU5FWDEKKwlqZXEJMWYKKwlic2V0CSNGUFNSX0FFWENfRFosJWQwCXwgc2V0IERaIGJpdAorMToJYnRzdAkjRlBTUl9FWENfT1ZGTCwlZDAJfCBFWENfT1ZGTAorCWpuZQkxZgorCWJ0c3QJI0ZQU1JfRVhDX0lORVgyLCVkMAl8IEVYQ19JTkVYMgorCWpuZQkxZgorCWJ0c3QJI0ZQU1JfRVhDX0lORVgxLCVkMAl8IEVYQ19JTkVYMQorCWplcQkyZgorMToJYnNldAkjRlBTUl9BRVhDX0lORVgsJWQwCXwgc2V0IElORVggYml0CisyOgltb3ZlLmwJJWQwLChGUERfRlBTUixGUERBVEEpCisjZWxzZQorCXwgc2FtZSBhcyBhYm92ZSwgZ3JlYXRseSBvcHRpbWl6ZWQsIGJ1dCB1bnRlc3RlZCAoeWV0KQorCW1vdmUubAklZDAsJWQyCisJbHNyLmwJIzUsJWQwCisJbW92ZS5sCSVkMCwlZDEKKwlsc3IubAkjNCwlZDEKKwlvci5sCSVkMCwlZDEKKwlhbmQuYgkjMHgwOCwlZDEKKwltb3ZlLmwJJWQyLCVkMAorCWxzci5sCSM2LCVkMAorCW9yLmwJJWQxLCVkMAorCW1vdmUubAklZDIsJWQxCisJbHNyLmwJIzQsJWQxCisJb3IuYgkjMHhkZiwlZDEKKwlhbmQuYgklZDEsJWQwCisJbW92ZS5sCSVkMiwlZDEKKwlsc3IubAkjNywlZDEKKwlhbmQuYgkjMHg4MCwlZDEKKwlvci5iCSVkMSwlZDAKKwlhbmQuYgkjMHhmOCwlZDAKKwlvci5iCSVkMCwlZDIKKwltb3ZlLmwJJWQyLChGUERfRlBTUixGUERBVEEpCisjZW5kaWYKKwltb3ZlLmIJKEZQRF9GUFNSKzIsRlBEQVRBKSwlZDAKKwlhbmQuYgkoRlBEX0ZQQ1IrMixGUERBVEEpLCVkMAorCWplcQkxZgorCXByaW50ZgksInNlbmQgc2lnbmFsISEhXG4iCisxOglqcmEJZnBfZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvbXVsdGlfYXJpdGguaCBiL2FyY2gvbTY4ay9tYXRoLWVtdS9tdWx0aV9hcml0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjUxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvbXVsdGlfYXJpdGguaApAQCAtMCwwICsxLDgxOSBAQAorLyogbXVsdGlfYXJpdGguaDogbXVsdGktcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYyBmdW5jdGlvbnMsIG5lZWRlZAorICAgdG8gZG8gZXh0ZW5kZWQtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50LgorCisgICAoYykgMTk5OCBEYXZpZCBIdWdnaW5zLURhaW5lcy4KKworICAgU29tZXdoYXQgYmFzZWQgb24gYXJjaC9hbHBoYS9tYXRoLWVtdS9pZWVlLW1hdGguYywgd2hpY2ggaXMgKGMpCisgICBEYXZpZCBNb3NiZXJnZXItVGFuZy4KKworICAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdAorICAgeW91ciBjb252ZW5pZW5jZS4gKi8KKworLyogTm90ZToKKworICAgVGhlc2UgYXJlIG5vdCBnZW5lcmFsIG11bHRpLXByZWNpc2lvbiBtYXRoIHJvdXRpbmVzLiAgUmF0aGVyLCB0aGV5CisgICBpbXBsZW1lbnQgdGhlIHN1YnNldCBvZiBpbnRlZ2VyIGFyaXRobWV0aWMgdGhhdCB3ZSBuZWVkIGluIG9yZGVyIHRvCisgICBtdWx0aXBseSwgZGl2aWRlLCBhbmQgbm9ybWFsaXplIDEyOC1iaXQgdW5zaWduZWQgbWFudGlzc2FlLiAgKi8KKworI2lmbmRlZiBNVUxUSV9BUklUSF9ICisjZGVmaW5lIE1VTFRJX0FSSVRIX0gKKworI2lmIDAJLyogb2xkIGNvZGUuLi4gKi8KKworLyogVW5zaWduZWQgb25seSwgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHNpZ25zIHRvIG11bHRpcGx5IGFuZCBkaXZpZGUuICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBpbnQxMjhbNF07CisKKy8qIFdvcmQgb3JkZXIgKi8KK2VudW0geworCU1TVzEyOCwKKwlOTVNXMTI4LAorCU5MU1cxMjgsCisJTFNXMTI4Cit9OworCisvKiBiaWctZW5kaWFuICovCisjZGVmaW5lIExPX1dPUkQobGwpICgoKHVuc2lnbmVkIGludCAqKSAmbGwpWzFdKQorI2RlZmluZSBISV9XT1JEKGxsKSAoKCh1bnNpZ25lZCBpbnQgKikgJmxsKVswXSkKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHN0dWZmIHZhcmlvdXMgaW50ZWdlciB2YWx1ZXMgaW50byBpbnQxMjhzICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZXJvMTI4KGludDEyOCBhKQoreworCWFbTFNXMTI4XSA9IGFbTkxTVzEyOF0gPSBhW05NU1cxMjhdID0gYVtNU1cxMjhdID0gMDsKK30KKworLyogSHVtYW4tcmVhZGFibGUgd29yZCBvcmRlciBpbiB0aGUgYXJndW1lbnRzICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0MTI4KHVuc2lnbmVkIGludCBpMywgdW5zaWduZWQgaW50IGkyLCB1bnNpZ25lZCBpbnQgaTEsCisJCQkgIHVuc2lnbmVkIGludCBpMCwgaW50MTI4IGEpCit7CisJYVtMU1cxMjhdID0gaTA7CisJYVtOTFNXMTI4XSA9IGkxOworCWFbTk1TVzEyOF0gPSBpMjsKKwlhW01TVzEyOF0gPSBpMzsKK30KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIChmb3IgdGVzdGluZyBhcyB3ZWxsKSAqLworc3RhdGljIGlubGluZSB2b2lkIGludDY0X3RvXzEyOCh1bnNpZ25lZCBsb25nIGxvbmcgc3JjLCBpbnQxMjggZGVzdCkKK3sKKwlkZXN0W0xTVzEyOF0gPSAodW5zaWduZWQgaW50KSBzcmM7CisJZGVzdFtOTFNXMTI4XSA9IHNyYyA+PiAzMjsKKwlkZXN0W05NU1cxMjhdID0gZGVzdFtNU1cxMjhdID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludDEyOF90b182NChjb25zdCBpbnQxMjggc3JjLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCit7CisJKmRlc3QgPSBzcmNbTFNXMTI4XSB8IChsb25nIGxvbmcpIHNyY1tOTFNXMTI4XSA8PCAzMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9pMTI4KGNvbnN0IGludDEyOCBhKQoreworCXByaW50aygiJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgYVtNU1cxMjhdLCBhW05NU1cxMjhdLAorCSAgICAgICBhW05MU1cxMjhdLCBhW0xTVzEyOF0pOworfQorCisvKiBJbnRlcm5hbCBzaGlmdGVyczoKKworICAgTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IGdvb2QgZm9yIDAgPCBjb3VudCA8IDMyLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbHNsMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCit7CisJYVtNU1cxMjhdID0gKGFbTVNXMTI4XSA8PCBjb3VudCkgfCAoYVtOTVNXMTI4XSA+PiAoMzIgLSBjb3VudCkpOworCWFbTk1TVzEyOF0gPSAoYVtOTVNXMTI4XSA8PCBjb3VudCkgfCAoYVtOTFNXMTI4XSA+PiAoMzIgLSBjb3VudCkpOworCWFbTkxTVzEyOF0gPSAoYVtOTFNXMTI4XSA8PCBjb3VudCkgfCAoYVtMU1cxMjhdID4+ICgzMiAtIGNvdW50KSk7CisJYVtMU1cxMjhdIDw8PSBjb3VudDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9sc3IxMjgodW5zaWduZWQgaW50IGNvdW50LCBpbnQxMjggYSkKK3sKKwlhW0xTVzEyOF0gPSAoYVtMU1cxMjhdID4+IGNvdW50KSB8IChhW05MU1cxMjhdIDw8ICgzMiAtIGNvdW50KSk7CisJYVtOTFNXMTI4XSA9IChhW05MU1cxMjhdID4+IGNvdW50KSB8IChhW05NU1cxMjhdIDw8ICgzMiAtIGNvdW50KSk7CisJYVtOTVNXMTI4XSA9IChhW05NU1cxMjhdID4+IGNvdW50KSB8IChhW01TVzEyOF0gPDwgKDMyIC0gY291bnQpKTsKKwlhW01TVzEyOF0gPj49IGNvdW50OworfQorCisvKiBTaG91bGQgYmUgZmFzdGVyLCBvbmUgd291bGQgaG9wZSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbHNsb25lMTI4KGludDEyOCBhKQoreworCWFzbSB2b2xhdGlsZSAoImxzbC5sICMxLCUwXG4iCisJCSAgICAgICJyb3hsLmwgIzEsJTFcbiIKKwkJICAgICAgInJveGwubCAjMSwlMlxuIgorCQkgICAgICAicm94bC5sICMxLCUzXG4iCisJCSAgICAgIDoKKwkJICAgICAgIj1kIiAoYVtMU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW05MU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW05NU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW01TVzEyOF0pCisJCSAgICAgIDoKKwkJICAgICAgIjAiKGFbTFNXMTI4XSksCisJCSAgICAgICIxIihhW05MU1cxMjhdKSwKKwkJICAgICAgIjIiKGFbTk1TVzEyOF0pLAorCQkgICAgICAiMyIoYVtNU1cxMjhdKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3JvbmUxMjgoaW50MTI4IGEpCit7CisJYXNtIHZvbGF0aWxlICgibHNyLmwgIzEsJTBcbiIKKwkJICAgICAgInJveHIubCAjMSwlMVxuIgorCQkgICAgICAicm94ci5sICMxLCUyXG4iCisJCSAgICAgICJyb3hyLmwgIzEsJTNcbiIKKwkJICAgICAgOgorCQkgICAgICAiPWQiIChhW01TVzEyOF0pLAorCQkgICAgICAiPWQiKGFbTk1TVzEyOF0pLAorCQkgICAgICAiPWQiKGFbTkxTVzEyOF0pLAorCQkgICAgICAiPWQiKGFbTFNXMTI4XSkKKwkJICAgICAgOgorCQkgICAgICAiMCIoYVtNU1cxMjhdKSwKKwkJICAgICAgIjEiKGFbTk1TVzEyOF0pLAorCQkgICAgICAiMiIoYVtOTFNXMTI4XSksCisJCSAgICAgICIzIihhW0xTVzEyOF0pKTsKK30KKworLyogR2VuZXJhbGl6ZWQgMTI4LWJpdCBzaGlmdGVyczoKKworICAgVGhlc2UgYml0LXNoaWZ0IHRvIGEgbXVsdGlwbGUgb2YgMzIsIHRoZW4gbW92ZSB3aG9sZSBsb25nd29yZHMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbHNsMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCit7CisJaW50IHdvcmRjb3VudCwgaTsKKworCWlmIChjb3VudCAlIDMyKQorCQlfbHNsMTI4KGNvdW50ICUgMzIsIGEpOworCisJaWYgKDAgPT0gKHdvcmRjb3VudCA9IGNvdW50IC8gMzIpKQorCQlyZXR1cm47CisKKwkvKiBhcmdoLCBnYWssIGVuZGlhbi1zZW5zaXRpdmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNCAtIHdvcmRjb3VudDsgaSsrKSB7CisJCWFbaV0gPSBhW2kgKyB3b3JkY291bnRdOworCX0KKwlmb3IgKGkgPSAzOyBpID49IDQgLSB3b3JkY291bnQ7IC0taSkgeworCQlhW2ldID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3IxMjgodW5zaWduZWQgaW50IGNvdW50LCBpbnQxMjggYSkKK3sKKwlpbnQgd29yZGNvdW50LCBpOworCisJaWYgKGNvdW50ICUgMzIpCisJCV9sc3IxMjgoY291bnQgJSAzMiwgYSk7CisKKwlpZiAoMCA9PSAod29yZGNvdW50ID0gY291bnQgLyAzMikpCisJCXJldHVybjsKKworCWZvciAoaSA9IDM7IGkgPj0gd29yZGNvdW50OyAtLWkpIHsKKwkJYVtpXSA9IGFbaSAtIHdvcmRjb3VudF07CisJfQorCWZvciAoaSA9IDA7IGkgPCB3b3JkY291bnQ7IGkrKykgeworCQlhW2ldID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9ybDEyOChpbnQgYSwgaW50MTI4IGIpCit7CisJYltMU1cxMjhdIHw9IGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3RoaTEyOChjb25zdCBpbnQxMjggYSkKK3sKKwlyZXR1cm4gYVtNU1cxMjhdICYgMHg4MDAwMDAwMDsKK30KKworLyogdGVzdCBiaXRzIChudW1iZXJlZCBmcm9tIDAgPSBMU0IpIHVwIHRvIGFuZCBpbmNsdWRpbmcgInRvcCIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJmdGVzdGxvMTI4KGludCB0b3AsIGNvbnN0IGludDEyOCBhKQoreworCWludCByID0gMDsKKworCWlmICh0b3AgPiAzMSkKKwkJciB8PSBhW0xTVzEyOF07CisJaWYgKHRvcCA+IDYzKQorCQlyIHw9IGFbTkxTVzEyOF07CisJaWYgKHRvcCA+IDk1KQorCQlyIHw9IGFbTk1TVzEyOF07CisKKwlyIHw9IGFbMyAtICh0b3AgLyAzMildICYgKCgxIDw8ICh0b3AgJSAzMiArIDEpKSAtIDEpOworCisJcmV0dXJuIChyICE9IDApOworfQorCisvKiBBYXJnaC4gIFdlIG5lZWQgdGhlc2UgYmVjYXVzZSBHQ0MgaXMgYnJva2VuICovCisvKiBGSVhNRTogZG8gdGhlbSBpbiBhc3NlbWJseSwgZm9yIGdvb2RuZXNzJyBzYWtlISAqLworc3RhdGljIGlubGluZSB2b2lkIG1hc2s2NChpbnQgcG9zLCB1bnNpZ25lZCBsb25nIGxvbmcgKm1hc2spCit7CisJKm1hc2sgPSAwOworCisJaWYgKHBvcyA8IDMyKSB7CisJCUxPX1dPUkQoKm1hc2spID0gKDEgPDwgcG9zKSAtIDE7CisJCXJldHVybjsKKwl9CisJTE9fV09SRCgqbWFzaykgPSAtMTsKKwlISV9XT1JEKCptYXNrKSA9ICgxIDw8IChwb3MgLSAzMikpIC0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJzZXQ2NChpbnQgcG9zLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCit7CisJLyogVGhpcyBjb25kaXRpb25hbCB3aWxsIGJlIG9wdGltaXplZCBhd2F5LiAgVGhhbmtzLCBHQ0MhICovCisJaWYgKHBvcyA8IDMyKQorCQlhc20gdm9sYXRpbGUgKCJic2V0ICUxLCUwIjoiPW0iCisJCQkgICAgICAoTE9fV09SRCgqZGVzdCkpOiJpZCIocG9zKSk7CisJZWxzZQorCQlhc20gdm9sYXRpbGUgKCJic2V0ICUxLCUwIjoiPW0iCisJCQkgICAgICAoSElfV09SRCgqZGVzdCkpOiJpZCIocG9zIC0gMzIpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYnRzdDY0KGludCBwb3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBkZXN0KQoreworCWlmIChwb3MgPCAzMikKKwkJcmV0dXJuICgwICE9IChMT19XT1JEKGRlc3QpICYgKDEgPDwgcG9zKSkpOworCWVsc2UKKwkJcmV0dXJuICgwICE9IChISV9XT1JEKGRlc3QpICYgKDEgPDwgKHBvcyAtIDMyKSkpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxzbDY0KGludCBjb3VudCwgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0KQoreworCWlmIChjb3VudCA8IDMyKSB7CisJCUhJX1dPUkQoKmRlc3QpID0gKEhJX1dPUkQoKmRlc3QpIDw8IGNvdW50KQorCQkgICAgfCAoTE9fV09SRCgqZGVzdCkgPj4gY291bnQpOworCQlMT19XT1JEKCpkZXN0KSA8PD0gY291bnQ7CisJCXJldHVybjsKKwl9CisJY291bnQgLT0gMzI7CisJSElfV09SRCgqZGVzdCkgPSBMT19XT1JEKCpkZXN0KSA8PCBjb3VudDsKKwlMT19XT1JEKCpkZXN0KSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3I2NChpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGVzdCkKK3sKKwlpZiAoY291bnQgPCAzMikgeworCQlMT19XT1JEKCpkZXN0KSA9IChMT19XT1JEKCpkZXN0KSA+PiBjb3VudCkKKwkJICAgIHwgKEhJX1dPUkQoKmRlc3QpIDw8ICgzMiAtIGNvdW50KSk7CisJCUhJX1dPUkQoKmRlc3QpID4+PSBjb3VudDsKKwkJcmV0dXJuOworCX0KKwljb3VudCAtPSAzMjsKKwlMT19XT1JEKCpkZXN0KSA9IEhJX1dPUkQoKmRlc3QpID4+IGNvdW50OworCUhJX1dPUkQoKmRlc3QpID0gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgZnBfZGVub3JtYWxpemUoc3RydWN0IGZwX2V4dCAqcmVnLCB1bnNpZ25lZCBpbnQgY250KQoreworCXJlZy0+ZXhwICs9IGNudDsKKworCXN3aXRjaCAoY250KSB7CisJY2FzZSAwIC4uLiA4OgorCQlyZWctPmxvd21hbnQgPSByZWctPm1hbnQubTMyWzFdIDw8ICg4IC0gY250KTsKKwkJcmVnLT5tYW50Lm0zMlsxXSA9IChyZWctPm1hbnQubTMyWzFdID4+IGNudCkgfAorCQkJCSAgIChyZWctPm1hbnQubTMyWzBdIDw8ICgzMiAtIGNudCkpOworCQlyZWctPm1hbnQubTMyWzBdID0gcmVnLT5tYW50Lm0zMlswXSA+PiBjbnQ7CisJCWJyZWFrOworCWNhc2UgOSAuLi4gMzI6CisJCXJlZy0+bG93bWFudCA9IHJlZy0+bWFudC5tMzJbMV0gPj4gKGNudCAtIDgpOworCQlpZiAocmVnLT5tYW50Lm0zMlsxXSA8PCAoNDAgLSBjbnQpKQorCQkJcmVnLT5sb3dtYW50IHw9IDE7CisJCXJlZy0+bWFudC5tMzJbMV0gPSAocmVnLT5tYW50Lm0zMlsxXSA+PiBjbnQpIHwKKwkJCQkgICAocmVnLT5tYW50Lm0zMlswXSA8PCAoMzIgLSBjbnQpKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IHJlZy0+bWFudC5tMzJbMF0gPj4gY250OworCQlicmVhazsKKwljYXNlIDMzIC4uLiAzOToKKwkJYXNtIHZvbGF0aWxlICgiYmZleHR1ICUxeyUyLCM4fSwlMCIgOiAiPWQiIChyZWctPmxvd21hbnQpCisJCQk6ICJtIiAocmVnLT5tYW50Lm0zMlswXSksICJkIiAoNjQgLSBjbnQpKTsKKwkJaWYgKHJlZy0+bWFudC5tMzJbMV0gPDwgKDQwIC0gY250KSkKKwkJCXJlZy0+bG93bWFudCB8PSAxOworCQlyZWctPm1hbnQubTMyWzFdID0gcmVnLT5tYW50Lm0zMlswXSA+PiAoY250IC0gMzIpOworCQlyZWctPm1hbnQubTMyWzBdID0gMDsKKwkJYnJlYWs7CisJY2FzZSA0MCAuLi4gNzE6CisJCXJlZy0+bG93bWFudCA9IHJlZy0+bWFudC5tMzJbMF0gPj4gKGNudCAtIDQwKTsKKwkJaWYgKChyZWctPm1hbnQubTMyWzBdIDw8ICg3MiAtIGNudCkpIHx8IHJlZy0+bWFudC5tMzJbMV0pCisJCQlyZWctPmxvd21hbnQgfD0gMTsKKwkJcmVnLT5tYW50Lm0zMlsxXSA9IHJlZy0+bWFudC5tMzJbMF0gPj4gKGNudCAtIDMyKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZy0+bG93bWFudCA9IHJlZy0+bWFudC5tMzJbMF0gfHwgcmVnLT5tYW50Lm0zMlsxXTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IDA7CisJCXJlZy0+bWFudC5tMzJbMV0gPSAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZwX292ZXJub3JtYWxpemUoc3RydWN0IGZwX2V4dCAqcmVnKQoreworCWludCBzaGlmdDsKKworCWlmIChyZWctPm1hbnQubTMyWzBdKSB7CisJCWFzbSAoImJmZmZvICUxeyMwLCMzMn0sJTAiIDogIj1kIiAoc2hpZnQpIDogImRtIiAocmVnLT5tYW50Lm0zMlswXSkpOworCQlyZWctPm1hbnQubTMyWzBdID0gKHJlZy0+bWFudC5tMzJbMF0gPDwgc2hpZnQpIHwgKHJlZy0+bWFudC5tMzJbMV0gPj4gKDMyIC0gc2hpZnQpKTsKKwkJcmVnLT5tYW50Lm0zMlsxXSA9IChyZWctPm1hbnQubTMyWzFdIDw8IHNoaWZ0KTsKKwl9IGVsc2UgeworCQlhc20gKCJiZmZmbyAlMXsjMCwjMzJ9LCUwIiA6ICI9ZCIgKHNoaWZ0KSA6ICJkbSIgKHJlZy0+bWFudC5tMzJbMV0pKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IChyZWctPm1hbnQubTMyWzFdIDw8IHNoaWZ0KTsKKwkJcmVnLT5tYW50Lm0zMlsxXSA9IDA7CisJCXNoaWZ0ICs9IDMyOworCX0KKworCXJldHVybiBzaGlmdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnBfYWRkbWFudChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJaW50IGNhcnJ5OworCisJLyogd2UgYXNzdW1lIGhlcmUsIGdjYyBvbmx5IGluc2VydCBtb3ZlIGFuZCBhIGNsciBpbnN0ciAqLworCWFzbSB2b2xhdGlsZSAoImFkZC5iICUxLCUwIiA6ICI9ZCxnIiAoZGVzdC0+bG93bWFudCkKKwkJOiAiZyxkIiAoc3JjLT5sb3dtYW50KSwgIjAsMCIgKGRlc3QtPmxvd21hbnQpKTsKKwlhc20gdm9sYXRpbGUgKCJhZGR4LmwgJTEsJTAiIDogIj1kIiAoZGVzdC0+bWFudC5tMzJbMV0pCisJCTogImQiIChzcmMtPm1hbnQubTMyWzFdKSwgIjAiIChkZXN0LT5tYW50Lm0zMlsxXSkpOworCWFzbSB2b2xhdGlsZSAoImFkZHgubCAlMSwlMCIgOiAiPWQiIChkZXN0LT5tYW50Lm0zMlswXSkKKwkJOiAiZCIgKHNyYy0+bWFudC5tMzJbMF0pLCAiMCIgKGRlc3QtPm1hbnQubTMyWzBdKSk7CisJYXNtIHZvbGF0aWxlICgiYWRkeC5sICUwLCUwIiA6ICI9ZCIgKGNhcnJ5KSA6ICIwIiAoMCkpOworCisJcmV0dXJuIGNhcnJ5OworfQorCitzdGF0aWMgaW5saW5lIGludCBmcF9hZGRjYXJyeShzdHJ1Y3QgZnBfZXh0ICpyZWcpCit7CisJaWYgKCsrcmVnLT5leHAgPT0gMHg3ZmZmKSB7CisJCWlmIChyZWctPm1hbnQubTY0KQorCQkJZnBfc2V0X3NyKEZQU1JfRVhDX0lORVgyKTsKKwkJcmVnLT5tYW50Lm02NCA9IDA7CisJCWZwX3NldF9zcihGUFNSX0VYQ19PVkZMKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlZy0+bG93bWFudCA9IChyZWctPm1hbnQubTMyWzFdIDw8IDcpIHwgKHJlZy0+bG93bWFudCA/IDEgOiAwKTsKKwlyZWctPm1hbnQubTMyWzFdID0gKHJlZy0+bWFudC5tMzJbMV0gPj4gMSkgfAorCQkJICAgKHJlZy0+bWFudC5tMzJbMF0gPDwgMzEpOworCXJlZy0+bWFudC5tMzJbMF0gPSAocmVnLT5tYW50Lm0zMlswXSA+PiAxKSB8IDB4ODAwMDAwMDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwX3N1Ym1hbnQoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjMSwKKwkJCSAgICAgIHN0cnVjdCBmcF9leHQgKnNyYzIpCit7CisJLyogd2UgYXNzdW1lIGhlcmUsIGdjYyBvbmx5IGluc2VydCBtb3ZlIGFuZCBhIGNsciBpbnN0ciAqLworCWFzbSB2b2xhdGlsZSAoInN1Yi5iICUxLCUwIiA6ICI9ZCxnIiAoZGVzdC0+bG93bWFudCkKKwkJOiAiZyxkIiAoc3JjMi0+bG93bWFudCksICIwLDAiIChzcmMxLT5sb3dtYW50KSk7CisJYXNtIHZvbGF0aWxlICgic3VieC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzFdKQorCQk6ICJkIiAoc3JjMi0+bWFudC5tMzJbMV0pLCAiMCIgKHNyYzEtPm1hbnQubTMyWzFdKSk7CisJYXNtIHZvbGF0aWxlICgic3VieC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzBdKQorCQk6ICJkIiAoc3JjMi0+bWFudC5tMzJbMF0pLCAiMCIgKHNyYzEtPm1hbnQubTMyWzBdKSk7Cit9CisKKyNkZWZpbmUgZnBfbXVsNjQoZGVzdGgsIGRlc3RsLCBzcmMxLCBzcmMyKSAoewkJCQlcCisJYXNtICgibXVsdS5sICUyLCUxOiUwIiA6ICI9ZCIgKGRlc3RsKSwgIj1kIiAoZGVzdGgpCQlcCisJCTogImciIChzcmMxKSwgIjAiIChzcmMyKSk7CQkJCVwKK30pCisjZGVmaW5lIGZwX2RpdjY0KHF1b3QsIHJlbSwgc3JjaCwgc3JjbCwgZGl2KQkJCQlcCisJYXNtICgiZGl2dS5sICUyLCUxOiUwIiA6ICI9ZCIgKHF1b3QpLCAiPWQiIChyZW0pCQlcCisJCTogImRtIiAoZGl2KSwgIjEiIChzcmNoKSwgIjAiIChzcmNsKSkKKyNkZWZpbmUgZnBfYWRkNjQoZGVzdDEsIGRlc3QyLCBzcmMxLCBzcmMyKSAoewkJCQlcCisJYXNtICgiYWRkLmwgJTEsJTAiIDogIj1kLGRtIiAoZGVzdDIpCQkJCVwKKwkJOiAiZG0sZCIgKHNyYzIpLCAiMCwwIiAoZGVzdDIpKTsJCQlcCisJYXNtICgiYWRkeC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QxKQkJCQlcCisJCTogImQiIChzcmMxKSwgIjAiIChkZXN0MSkpOwkJCQlcCit9KQorI2RlZmluZSBmcF9hZGR4OTYoZGVzdCwgc3JjKSAoewkJCQkJCVwKKwkvKiB3ZSBhc3N1bWUgaGVyZSwgZ2NjIG9ubHkgaW5zZXJ0IG1vdmUgYW5kIGEgY2xyIGluc3RyICovCVwKKwlhc20gdm9sYXRpbGUgKCJhZGQubCAlMSwlMCIgOiAiPWQsZyIgKGRlc3QtPm0zMlsyXSkJCVwKKwkJOiAiZyxkIiAodGVtcC5tMzJbMV0pLCAiMCwwIiAoZGVzdC0+bTMyWzJdKSk7CQlcCisJYXNtIHZvbGF0aWxlICgiYWRkeC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QtPm0zMlsxXSkJCVwKKwkJOiAiZCIgKHRlbXAubTMyWzBdKSwgIjAiIChkZXN0LT5tMzJbMV0pKTsJCVwKKwlhc20gdm9sYXRpbGUgKCJhZGR4LmwgJTEsJTAiIDogIj1kIiAoZGVzdC0+bTMyWzBdKQkJXAorCQk6ICJkIiAoMCksICIwIiAoZGVzdC0+bTMyWzBdKSk7CQkJCVwKK30pCisjZGVmaW5lIGZwX3N1YjY0KGRlc3QsIHNyYykgKHsJCQkJCQlcCisJYXNtICgic3ViLmwgJTEsJTAiIDogIj1kLGRtIiAoZGVzdC5tMzJbMV0pCQkJXAorCQk6ICJkbSxkIiAoc3JjLm0zMlsxXSksICIwLDAiIChkZXN0Lm0zMlsxXSkpOwkJXAorCWFzbSAoInN1YngubCAlMSwlMCIgOiAiPWQiIChkZXN0Lm0zMlswXSkJCQlcCisJCTogImQiIChzcmMubTMyWzBdKSwgIjAiIChkZXN0Lm0zMlswXSkpOwkJCVwKK30pCisjZGVmaW5lIGZwX3N1Yjk2YyhkZXN0LCBzcmNoLCBzcmNtLCBzcmNsKSAoewkJCQlcCisJY2hhciBjYXJyeTsJCQkJCQkJXAorCWFzbSAoInN1Yi5sICUxLCUwIiA6ICI9ZCxkbSIgKGRlc3QubTMyWzJdKQkJCVwKKwkJOiAiZG0sZCIgKHNyY2wpLCAiMCwwIiAoZGVzdC5tMzJbMl0pKTsJCQlcCisJYXNtICgic3VieC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QubTMyWzFdKQkJCVwKKwkJOiAiZCIgKHNyY20pLCAiMCIgKGRlc3QubTMyWzFdKSk7CQkJXAorCWFzbSAoInN1YngubCAlMiwlMTsgc2NzICUwIiA6ICI9ZCIgKGNhcnJ5KSwgIj1kIiAoZGVzdC5tMzJbMF0pCVwKKwkJOiAiZCIgKHNyY2gpLCAiMSIgKGRlc3QubTMyWzBdKSk7CQkJXAorCWNhcnJ5OwkJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB2b2lkIGZwX211bHRpcGx5bWFudCh1bmlvbiBmcF9tYW50MTI4ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMxLAorCQkJCSAgIHN0cnVjdCBmcF9leHQgKnNyYzIpCit7CisJdW5pb24gZnBfbWFudDY0IHRlbXA7CisKKwlmcF9tdWw2NChkZXN0LT5tMzJbMF0sIGRlc3QtPm0zMlsxXSwgc3JjMS0+bWFudC5tMzJbMF0sIHNyYzItPm1hbnQubTMyWzBdKTsKKwlmcF9tdWw2NChkZXN0LT5tMzJbMl0sIGRlc3QtPm0zMlszXSwgc3JjMS0+bWFudC5tMzJbMV0sIHNyYzItPm1hbnQubTMyWzFdKTsKKworCWZwX211bDY0KHRlbXAubTMyWzBdLCB0ZW1wLm0zMlsxXSwgc3JjMS0+bWFudC5tMzJbMF0sIHNyYzItPm1hbnQubTMyWzFdKTsKKwlmcF9hZGR4OTYoZGVzdCwgdGVtcCk7CisKKwlmcF9tdWw2NCh0ZW1wLm0zMlswXSwgdGVtcC5tMzJbMV0sIHNyYzEtPm1hbnQubTMyWzFdLCBzcmMyLT5tYW50Lm0zMlswXSk7CisJZnBfYWRkeDk2KGRlc3QsIHRlbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnBfZGl2aWRlbWFudCh1bmlvbiBmcF9tYW50MTI4ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMsCisJCQkJIHN0cnVjdCBmcF9leHQgKmRpdikKK3sKKwl1bmlvbiBmcF9tYW50MTI4IHRtcDsKKwl1bmlvbiBmcF9tYW50NjQgdG1wNjQ7CisJdW5zaWduZWQgbG9uZyAqbWFudHAgPSBkZXN0LT5tMzI7CisJdW5zaWduZWQgbG9uZyBmaXgsIHJlbSwgZmlyc3QsIGR1bW15OworCWludCBpOworCisJLyogdGhlIGFsZ29yaXRobSBiZWxvdyByZXF1aXJlcyBkZXN0IHRvIGJlIHNtYWxsZXIgdGhhbiBkaXYsCisJICAgYnV0IGJvdGggaGF2ZSB0aGUgaGlnaCBiaXQgc2V0ICovCisJaWYgKHNyYy0+bWFudC5tNjQgPj0gZGl2LT5tYW50Lm02NCkgeworCQlmcF9zdWI2NChzcmMtPm1hbnQsIGRpdi0+bWFudCk7CisJCSptYW50cCA9IDE7CisJfSBlbHNlCisJCSptYW50cCA9IDA7CisJbWFudHArKzsKKworCS8qIGJhc2ljIGlkZWEgYmVoaW5kIHRoaXMgYWxnb3JpdGhtOiB3ZSBjYW4ndCBkaXZpZGUgdHdvIDY0Yml0IG51bWJlcnMKKwkgICAoQUIvQ0QpIGRpcmVjdGx5LCBidXQgd2UgY2FuIGNhbGN1bGF0ZSBBQi9DMCwgYnV0IHRoaXMgbWVhbnMgdGhpcworCSAgIHF1b3RpZW50IGlzIG9mZiBieSBDMC9DRCwgc28gd2UgaGF2ZSB0byBtdWx0aXBseSB0aGUgZmlyc3QgcmVzdWx0CisJICAgdG8gZml4IHRoZSByZXN1bHQsIGFmdGVyIHRoYXQgd2UgaGF2ZSBuZWFybHkgdGhlIGNvcnJlY3QgcmVzdWx0CisJICAgYW5kIG9ubHkgYSBmZXcgY29ycmVjdGlvbnMgYXJlIG5lZWRlZC4gKi8KKworCS8qIEMwL0NEIGNhbiBiZSBwcmVjYWxjdWxhdGVkLCBidXQgaXQncyBhbiA2NGJpdCBkaXZpc2lvbiBhZ2FpbiwgYnV0CisJICAgd2UgY2FuIG1ha2UgaXQgYSBiaXQgZWFzaWVyLCBieSBkaXZpZGluZyBmaXJzdCB0aHJvdWdoIEMgc28gd2UgZ2V0CisJICAgMTAvMUQgYW5kIG5vdyBvbmx5IGEgc2luZ2xlIHNoaWZ0IGFuZCB0aGUgdmFsdWUgZml0cyBpbnRvIDMyYml0LiAqLworCWZpeCA9IDB4ODAwMDAwMDA7CisJZHVtbXkgPSBkaXYtPm1hbnQubTMyWzFdIC8gZGl2LT5tYW50Lm0zMlswXSArIDE7CisJZHVtbXkgPSAoZHVtbXkgPj4gMSkgfCBmaXg7CisJZnBfZGl2NjQoZml4LCBkdW1teSwgZml4LCAwLCBkdW1teSk7CisJZml4LS07CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrLCBtYW50cCsrKSB7CisJCWlmIChzcmMtPm1hbnQubTMyWzBdID09IGRpdi0+bWFudC5tMzJbMF0pIHsKKwkJCWZwX2RpdjY0KGZpcnN0LCByZW0sIDAsIHNyYy0+bWFudC5tMzJbMV0sIGRpdi0+bWFudC5tMzJbMF0pOworCisJCQlmcF9tdWw2NCgqbWFudHAsIGR1bW15LCBmaXJzdCwgZml4KTsKKwkJCSptYW50cCArPSBmaXg7CisJCX0gZWxzZSB7CisJCQlmcF9kaXY2NChmaXJzdCwgcmVtLCBzcmMtPm1hbnQubTMyWzBdLCBzcmMtPm1hbnQubTMyWzFdLCBkaXYtPm1hbnQubTMyWzBdKTsKKworCQkJZnBfbXVsNjQoKm1hbnRwLCBkdW1teSwgZmlyc3QsIGZpeCk7CisJCX0KKworCQlmcF9tdWw2NCh0bXAubTMyWzBdLCB0bXAubTMyWzFdLCBkaXYtPm1hbnQubTMyWzBdLCBmaXJzdCAtICptYW50cCk7CisJCWZwX2FkZDY0KHRtcC5tMzJbMF0sIHRtcC5tMzJbMV0sIDAsIHJlbSk7CisJCXRtcC5tMzJbMl0gPSAwOworCisJCWZwX211bDY0KHRtcDY0Lm0zMlswXSwgdG1wNjQubTMyWzFdLCAqbWFudHAsIGRpdi0+bWFudC5tMzJbMV0pOworCQlmcF9zdWI5NmModG1wLCAwLCB0bXA2NC5tMzJbMF0sIHRtcDY0Lm0zMlsxXSk7CisKKwkJc3JjLT5tYW50Lm0zMlswXSA9IHRtcC5tMzJbMV07CisJCXNyYy0+bWFudC5tMzJbMV0gPSB0bXAubTMyWzJdOworCisJCXdoaWxlICghZnBfc3ViOTZjKHRtcCwgMCwgZGl2LT5tYW50Lm0zMlswXSwgZGl2LT5tYW50Lm0zMlsxXSkpIHsKKwkJCXNyYy0+bWFudC5tMzJbMF0gPSB0bXAubTMyWzFdOworCQkJc3JjLT5tYW50Lm0zMlsxXSA9IHRtcC5tMzJbMl07CisJCQkqbWFudHAgKz0gMTsKKwkJfQorCX0KK30KKworI2lmIDAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZwX2ZsczEyOCh1bmlvbiBmcF9tYW50MTI4ICpzcmMpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCXVuc2lnbmVkIGludCByZXMsIG9mZjsKKworCWlmICgoZGF0YSA9IHNyYy0+bTMyWzBdKSkKKwkJb2ZmID0gMDsKKwllbHNlIGlmICgoZGF0YSA9IHNyYy0+bTMyWzFdKSkKKwkJb2ZmID0gMzI7CisJZWxzZSBpZiAoKGRhdGEgPSBzcmMtPm0zMlsyXSkpCisJCW9mZiA9IDY0OworCWVsc2UgaWYgKChkYXRhID0gc3JjLT5tMzJbM10pKQorCQlvZmYgPSA5NjsKKwllbHNlCisJCXJldHVybiAxMjg7CisKKwlhc20gKCJiZmZmbyAlMXsjMCwjMzJ9LCUwIiA6ICI9ZCIgKHJlcykgOiAiZG0iIChkYXRhKSk7CisJcmV0dXJuIHJlcyArIG9mZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwX3NoaWZ0bWFudDEyOCh1bmlvbiBmcF9tYW50MTI4ICpzcmMsIGludCBzaGlmdCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0aWNreTsKKworCXN3aXRjaCAoc2hpZnQpIHsKKwljYXNlIDA6CisJCXJldHVybjsKKwljYXNlIDE6CisJCWFzbSB2b2xhdGlsZSAoImxzbC5sICMxLCUwIgorCQkJOiAiPWQiIChzcmMtPm0zMlszXSkgOiAiMCIgKHNyYy0+bTMyWzNdKSk7CisJCWFzbSB2b2xhdGlsZSAoInJveGwubCAjMSwlMCIKKwkJCTogIj1kIiAoc3JjLT5tMzJbMl0pIDogIjAiIChzcmMtPm0zMlsyXSkpOworCQlhc20gdm9sYXRpbGUgKCJyb3hsLmwgIzEsJTAiCisJCQk6ICI9ZCIgKHNyYy0+bTMyWzFdKSA6ICIwIiAoc3JjLT5tMzJbMV0pKTsKKwkJYXNtIHZvbGF0aWxlICgicm94bC5sICMxLCUwIgorCQkJOiAiPWQiIChzcmMtPm0zMlswXSkgOiAiMCIgKHNyYy0+bTMyWzBdKSk7CisJCXJldHVybjsKKwljYXNlIDIgLi4uIDMxOgorCQlzcmMtPm0zMlswXSA9IChzcmMtPm0zMlswXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbMV0gPj4gKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMV0gPSAoc3JjLT5tMzJbMV0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzJdID4+ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzJdID0gKHNyYy0+bTMyWzJdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlszXSA+PiAoMzIgLSBzaGlmdCkpOworCQlzcmMtPm0zMlszXSA9IChzcmMtPm0zMlszXSA8PCBzaGlmdCk7CisJCXJldHVybjsKKwljYXNlIDMyIC4uLiA2MzoKKwkJc2hpZnQgLT0gMzI7CisJCXNyYy0+bTMyWzBdID0gKHNyYy0+bTMyWzFdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlsyXSA+PiAoMzIgLSBzaGlmdCkpOworCQlzcmMtPm0zMlsxXSA9IChzcmMtPm0zMlsyXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbM10gPj4gKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMl0gPSAoc3JjLT5tMzJbM10gPDwgc2hpZnQpOworCQlzcmMtPm0zMlszXSA9IDA7CisJCXJldHVybjsKKwljYXNlIDY0IC4uLiA5NToKKwkJc2hpZnQgLT0gNjQ7CisJCXNyYy0+bTMyWzBdID0gKHNyYy0+bTMyWzJdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlszXSA+PiAoMzIgLSBzaGlmdCkpOworCQlzcmMtPm0zMlsxXSA9IChzcmMtPm0zMlszXSA8PCBzaGlmdCk7CisJCXNyYy0+bTMyWzJdID0gc3JjLT5tMzJbM10gPSAwOworCQlyZXR1cm47CisJY2FzZSA5NiAuLi4gMTI3OgorCQlzaGlmdCAtPSA5NjsKKwkJc3JjLT5tMzJbMF0gPSAoc3JjLT5tMzJbM10gPDwgc2hpZnQpOworCQlzcmMtPm0zMlsxXSA9IHNyYy0+bTMyWzJdID0gc3JjLT5tMzJbM10gPSAwOworCQlyZXR1cm47CisJY2FzZSAtMzEgLi4uIC0xOgorCQlzaGlmdCA9IC1zaGlmdDsKKwkJc3RpY2t5ID0gMDsKKwkJaWYgKHNyYy0+bTMyWzNdIDw8ICgzMiAtIHNoaWZ0KSkKKwkJCXN0aWNreSA9IDE7CisJCXNyYy0+bTMyWzNdID0gKHNyYy0+bTMyWzNdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlsyXSA8PCAoMzIgLSBzaGlmdCkpIHwgc3RpY2t5OworCQlzcmMtPm0zMlsyXSA9IChzcmMtPm0zMlsyXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMV0gPDwgKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMV0gPSAoc3JjLT5tMzJbMV0gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzBdIDw8ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzBdID0gKHNyYy0+bTMyWzBdID4+IHNoaWZ0KTsKKwkJcmV0dXJuOworCWNhc2UgLTYzIC4uLiAtMzI6CisJCXNoaWZ0ID0gLXNoaWZ0IC0gMzI7CisJCXN0aWNreSA9IDA7CisJCWlmICgoc3JjLT5tMzJbMl0gPDwgKDMyIC0gc2hpZnQpKSB8fCBzcmMtPm0zMlszXSkKKwkJCXN0aWNreSA9IDE7CisJCXNyYy0+bTMyWzNdID0gKHNyYy0+bTMyWzJdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlsxXSA8PCAoMzIgLSBzaGlmdCkpIHwgc3RpY2t5OworCQlzcmMtPm0zMlsyXSA9IChzcmMtPm0zMlsxXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMF0gPDwgKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMV0gPSAoc3JjLT5tMzJbMF0gPj4gc2hpZnQpOworCQlzcmMtPm0zMlswXSA9IDA7CisJCXJldHVybjsKKwljYXNlIC05NSAuLi4gLTY0OgorCQlzaGlmdCA9IC1zaGlmdCAtIDY0OworCQlzdGlja3kgPSAwOworCQlpZiAoKHNyYy0+bTMyWzFdIDw8ICgzMiAtIHNoaWZ0KSkgfHwgc3JjLT5tMzJbMl0gfHwgc3JjLT5tMzJbM10pCisJCQlzdGlja3kgPSAxOworCQlzcmMtPm0zMlszXSA9IChzcmMtPm0zMlsxXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMF0gPDwgKDMyIC0gc2hpZnQpKSB8IHN0aWNreTsKKwkJc3JjLT5tMzJbMl0gPSAoc3JjLT5tMzJbMF0gPj4gc2hpZnQpOworCQlzcmMtPm0zMlsxXSA9IHNyYy0+bTMyWzBdID0gMDsKKwkJcmV0dXJuOworCWNhc2UgLTEyNyAuLi4gLTk2OgorCQlzaGlmdCA9IC1zaGlmdCAtIDk2OworCQlzdGlja3kgPSAwOworCQlpZiAoKHNyYy0+bTMyWzBdIDw8ICgzMiAtIHNoaWZ0KSkgfHwgc3JjLT5tMzJbMV0gfHwgc3JjLT5tMzJbMl0gfHwgc3JjLT5tMzJbM10pCisJCQlzdGlja3kgPSAxOworCQlzcmMtPm0zMlszXSA9IChzcmMtPm0zMlswXSA+PiBzaGlmdCkgfCBzdGlja3k7CisJCXNyYy0+bTMyWzJdID0gc3JjLT5tMzJbMV0gPSBzcmMtPm0zMlswXSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2hpZnQgPCAwICYmIChzcmMtPm0zMlswXSB8fCBzcmMtPm0zMlsxXSB8fCBzcmMtPm0zMlsyXSB8fCBzcmMtPm0zMlszXSkpCisJCXNyYy0+bTMyWzNdID0gMTsKKwllbHNlCisJCXNyYy0+bTMyWzNdID0gMDsKKwlzcmMtPm0zMlsyXSA9IDA7CisJc3JjLT5tMzJbMV0gPSAwOworCXNyYy0+bTMyWzBdID0gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgZnBfcHV0bWFudDEyOChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCB1bmlvbiBmcF9tYW50MTI4ICpzcmMsCisJCQkJIGludCBzaGlmdCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXN3aXRjaCAoc2hpZnQpIHsKKwljYXNlIDA6CisJCWRlc3QtPm1hbnQubTY0ID0gc3JjLT5tNjRbMF07CisJCWRlc3QtPmxvd21hbnQgPSBzcmMtPm0zMlsyXSA+PiAyNDsKKwkJaWYgKHNyYy0+bTMyWzNdIHx8IChzcmMtPm0zMlsyXSA8PCA4KSkKKwkJCWRlc3QtPmxvd21hbnQgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUgKCJsc2wubCAjMSwlMCIKKwkJCTogIj1kIiAodG1wKSA6ICIwIiAoc3JjLT5tMzJbMl0pKTsKKwkJYXNtIHZvbGF0aWxlICgicm94bC5sICMxLCUwIgorCQkJOiAiPWQiIChkZXN0LT5tYW50Lm0zMlsxXSkgOiAiMCIgKHNyYy0+bTMyWzFdKSk7CisJCWFzbSB2b2xhdGlsZSAoInJveGwubCAjMSwlMCIKKwkJCTogIj1kIiAoZGVzdC0+bWFudC5tMzJbMF0pIDogIjAiIChzcmMtPm0zMlswXSkpOworCQlkZXN0LT5sb3dtYW50ID0gdG1wID4+IDI0OworCQlpZiAoc3JjLT5tMzJbM10gfHwgKHRtcCA8PCA4KSkKKwkJCWRlc3QtPmxvd21hbnQgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSAzMToKKwkJYXNtIHZvbGF0aWxlICgibHNyLmwgIzEsJTE7IHJveHIubCAjMSwlMCIKKwkJCTogIj1kIiAoZGVzdC0+bWFudC5tMzJbMF0pCisJCQk6ICJkIiAoc3JjLT5tMzJbMF0pLCAiMCIgKHNyYy0+bTMyWzFdKSk7CisJCWFzbSB2b2xhdGlsZSAoInJveHIubCAjMSwlMCIKKwkJCTogIj1kIiAoZGVzdC0+bWFudC5tMzJbMV0pIDogIjAiIChzcmMtPm0zMlsyXSkpOworCQlhc20gdm9sYXRpbGUgKCJyb3hyLmwgIzEsJTAiCisJCQk6ICI9ZCIgKHRtcCkgOiAiMCIgKHNyYy0+bTMyWzNdKSk7CisJCWRlc3QtPmxvd21hbnQgPSB0bXAgPj4gMjQ7CisJCWlmIChzcmMtPm0zMlszXSA8PCA3KQorCQkJZGVzdC0+bG93bWFudCB8PSAxOworCQlicmVhazsKKwljYXNlIDMyOgorCQlkZXN0LT5tYW50Lm0zMlswXSA9IHNyYy0+bTMyWzFdOworCQlkZXN0LT5tYW50Lm0zMlsxXSA9IHNyYy0+bTMyWzJdOworCQlkZXN0LT5sb3dtYW50ID0gc3JjLT5tMzJbM10gPj4gMjQ7CisJCWlmIChzcmMtPm0zMlszXSA8PCA4KQorCQkJZGVzdC0+bG93bWFudCB8PSAxOworCQlicmVhazsKKwl9Cit9CisKKyNpZiAwIC8qIG9sZCBjb2RlLi4uICovCitzdGF0aWMgaW5saW5lIGludCBmbHModW5zaWduZWQgaW50IGEpCit7CisJaW50IHI7CisKKwlhc20gdm9sYXRpbGUgKCJiZmZmbyAlMXsjMCwjMzJ9LCUwIgorCQkgICAgICA6ICI9ZCIgKHIpIDogIm1kIiAoYSkpOworCXJldHVybiByOworfQorCisvKiBmbHMgPSAiZmluZCBsYXN0IHNldCIgKGNmLiBmZnMoMykpICovCitzdGF0aWMgaW5saW5lIGludCBmbHMxMjgoY29uc3QgaW50MTI4IGEpCit7CisJaWYgKGFbTVNXMTI4XSkKKwkJcmV0dXJuIGZscyhhW01TVzEyOF0pOworCWlmIChhW05NU1cxMjhdKQorCQlyZXR1cm4gZmxzKGFbTk1TVzEyOF0pICsgMzI7CisJLyogWFhYOiBpdCBwcm9iYWJseSBuZXZlciBnZXRzIGJleW9uZCB0aGlzIHBvaW50IGluIGFjdHVhbAorCSAgIHVzZSwgYnV0IHRoYXQncyBpbmRpY2F0aXZlIG9mIGEgbW9yZSBnZW5lcmFsIHByb2JsZW0gaW4gdGhlCisJICAgYWxnb3JpdGhtIChpLmUuIGFzIHBlciB0aGUgYWN0dWFsIDY4ODgxIGltcGxlbWVudGF0aW9uLCB3ZQorCSAgIHJlYWxseSBvbmx5IG5lZWQgYXQgbW9zdCA2NyBiaXRzIG9mIHByZWNpc2lvbiBbcGx1cworCSAgIG92ZXJmbG93XSkgc28gSSdtIG5vdCBnb2luZyB0byBmaXggaXQuICovCisJaWYgKGFbTkxTVzEyOF0pCisJCXJldHVybiBmbHMoYVtOTFNXMTI4XSkgKyA2NDsKKwlpZiAoYVtMU1cxMjhdKQorCQlyZXR1cm4gZmxzKGFbTFNXMTI4XSkgKyA5NjsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgemVyb3AxMjgoY29uc3QgaW50MTI4IGEpCit7CisJcmV0dXJuICEoYVtMU1cxMjhdIHwgYVtOTFNXMTI4XSB8IGFbTk1TVzEyOF0gfCBhW01TVzEyOF0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBub256ZXJvcDEyOChjb25zdCBpbnQxMjggYSkKK3sKKwlyZXR1cm4gKGFbTFNXMTI4XSB8IGFbTkxTVzEyOF0gfCBhW05NU1cxMjhdIHwgYVtNU1cxMjhdKTsKK30KKworLyogQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uICovCisvKiBEbyB0aGVzZSBpbiAicHVyZSIgYXNzZW1ibHksIGJlY2F1c2UgImV4dGVuZGVkIiBhc20gaXMgdW5tYW5hZ2VhYmxlCisgICBoZXJlICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkMTI4KGNvbnN0IGludDEyOCBhLCBpbnQxMjggYikKK3sKKwkvKiByb3RhdGluZyBjYXJyeSBmbGFncyAqLworCXVuc2lnbmVkIGludCBjYXJyeVsyXTsKKworCWNhcnJ5WzBdID0gYVtMU1cxMjhdID4gKDB4ZmZmZmZmZmYgLSBiW0xTVzEyOF0pOworCWJbTFNXMTI4XSArPSBhW0xTVzEyOF07CisKKwljYXJyeVsxXSA9IGFbTkxTVzEyOF0gPiAoMHhmZmZmZmZmZiAtIGJbTkxTVzEyOF0gLSBjYXJyeVswXSk7CisJYltOTFNXMTI4XSA9IGFbTkxTVzEyOF0gKyBiW05MU1cxMjhdICsgY2FycnlbMF07CisKKwljYXJyeVswXSA9IGFbTk1TVzEyOF0gPiAoMHhmZmZmZmZmZiAtIGJbTk1TVzEyOF0gLSBjYXJyeVsxXSk7CisJYltOTVNXMTI4XSA9IGFbTk1TVzEyOF0gKyBiW05NU1cxMjhdICsgY2FycnlbMV07CisKKwliW01TVzEyOF0gPSBhW01TVzEyOF0gKyBiW01TVzEyOF0gKyBjYXJyeVswXTsKK30KKworLyogTm90ZTogYXNzZW1ibGVyIHNlbWFudGljczogImIgLT0gYSIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWIxMjgoY29uc3QgaW50MTI4IGEsIGludDEyOCBiKQoreworCS8qIHJvdGF0aW5nIGJvcnJvdyBmbGFncyAqLworCXVuc2lnbmVkIGludCBib3Jyb3dbMl07CisKKwlib3Jyb3dbMF0gPSBiW0xTVzEyOF0gPCBhW0xTVzEyOF07CisJYltMU1cxMjhdIC09IGFbTFNXMTI4XTsKKworCWJvcnJvd1sxXSA9IGJbTkxTVzEyOF0gPCBhW05MU1cxMjhdICsgYm9ycm93WzBdOworCWJbTkxTVzEyOF0gPSBiW05MU1cxMjhdIC0gYVtOTFNXMTI4XSAtIGJvcnJvd1swXTsKKworCWJvcnJvd1swXSA9IGJbTk1TVzEyOF0gPCBhW05NU1cxMjhdICsgYm9ycm93WzFdOworCWJbTk1TVzEyOF0gPSBiW05NU1cxMjhdIC0gYVtOTVNXMTI4XSAtIGJvcnJvd1sxXTsKKworCWJbTVNXMTI4XSA9IGJbTVNXMTI4XSAtIGFbTVNXMTI4XSAtIGJvcnJvd1swXTsKK30KKworLyogUG9vciBtYW4ncyA2NC1iaXQgZXhwYW5kaW5nIG11bHRpcGx5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXVsNjQodW5zaWduZWQgbG9uZyBsb25nIGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBiLCBpbnQxMjggYykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWNjOworCWludDEyOCBhY2MxMjg7CisKKwl6ZXJvMTI4KGFjYzEyOCk7CisJemVybzEyOChjKTsKKworCS8qIGZpcnN0IHRoZSBsb3cgd29yZHMgKi8KKwlpZiAoTE9fV09SRChhKSAmJiBMT19XT1JEKGIpKSB7CisJCWFjYyA9IChsb25nIGxvbmcpIExPX1dPUkQoYSkgKiBMT19XT1JEKGIpOworCQljW05MU1cxMjhdID0gSElfV09SRChhY2MpOworCQljW0xTVzEyOF0gPSBMT19XT1JEKGFjYyk7CisJfQorCS8qIE5leHQgdGhlIGhpZ2ggd29yZHMgKi8KKwlpZiAoSElfV09SRChhKSAmJiBISV9XT1JEKGIpKSB7CisJCWFjYyA9IChsb25nIGxvbmcpIEhJX1dPUkQoYSkgKiBISV9XT1JEKGIpOworCQljW01TVzEyOF0gPSBISV9XT1JEKGFjYyk7CisJCWNbTk1TVzEyOF0gPSBMT19XT1JEKGFjYyk7CisJfQorCS8qIFRoZSBtaWRkbGUgd29yZHMgKi8KKwlpZiAoTE9fV09SRChhKSAmJiBISV9XT1JEKGIpKSB7CisJCWFjYyA9IChsb25nIGxvbmcpIExPX1dPUkQoYSkgKiBISV9XT1JEKGIpOworCQlhY2MxMjhbTk1TVzEyOF0gPSBISV9XT1JEKGFjYyk7CisJCWFjYzEyOFtOTFNXMTI4XSA9IExPX1dPUkQoYWNjKTsKKwkJYWRkMTI4KGFjYzEyOCwgYyk7CisJfQorCS8qIFRoZSBmaXJzdCBhbmQgbGFzdCB3b3JkcyAqLworCWlmIChISV9XT1JEKGEpICYmIExPX1dPUkQoYikpIHsKKwkJYWNjID0gKGxvbmcgbG9uZykgSElfV09SRChhKSAqIExPX1dPUkQoYik7CisJCWFjYzEyOFtOTVNXMTI4XSA9IEhJX1dPUkQoYWNjKTsKKwkJYWNjMTI4W05MU1cxMjhdID0gTE9fV09SRChhY2MpOworCQlhZGQxMjgoYWNjMTI4LCBjKTsKKwl9Cit9CisKKy8qIE5vdGU6IHVuc2lnbmVkICovCitzdGF0aWMgaW5saW5lIGludCBjbXAxMjgoaW50MTI4IGEsIGludDEyOCBiKQoreworCWlmIChhW01TVzEyOF0gPCBiW01TVzEyOF0pCisJCXJldHVybiAtMTsKKwlpZiAoYVtNU1cxMjhdID4gYltNU1cxMjhdKQorCQlyZXR1cm4gMTsKKwlpZiAoYVtOTVNXMTI4XSA8IGJbTk1TVzEyOF0pCisJCXJldHVybiAtMTsKKwlpZiAoYVtOTVNXMTI4XSA+IGJbTk1TVzEyOF0pCisJCXJldHVybiAxOworCWlmIChhW05MU1cxMjhdIDwgYltOTFNXMTI4XSkKKwkJcmV0dXJuIC0xOworCWlmIChhW05MU1cxMjhdID4gYltOTFNXMTI4XSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gKHNpZ25lZCkgYVtMU1cxMjhdIC0gYltMU1cxMjhdOworfQorCitpbmxpbmUgdm9pZCBkaXYxMjgoaW50MTI4IGEsIGludDEyOCBiLCBpbnQxMjggYykKK3sKKwlpbnQxMjggbWFzazsKKworCS8qIEFsZ29yaXRobToKKworCSAgIFNoaWZ0IHRoZSBkaXZpc29yIHVudGlsIGl0J3MgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZQorCSAgIGRpdmlkZW5kLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBwb3NpdGlvbiB0byB3aGljaCB3ZSd2ZQorCSAgIHNoaWZ0ZWQgaXQsIGkuZS4gdGhlIHBvd2VyIG9mIDIgd2hpY2ggd2UndmUgbXVsdGlwbGllZCBpdAorCSAgIGJ5LgorCisJICAgVGhlbiwgZm9yIHRoaXMgcG93ZXIgb2YgMiAodGhlIG1hc2spLCBhbmQgZXZlcnkgb25lIHNtYWxsZXIKKwkgICB0aGFuIGl0LCBzdWJ0cmFjdCB0aGUgbWFzayBmcm9tIHRoZSBkaXZpZGVuZCBhbmQgYWRkIGl0IHRvCisJICAgdGhlIHF1b3RpZW50IHVudGlsIHRoZSBkaXZpZGVuZCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJhaXNlZAorCSAgIGRpdmlzb3IuICBBdCB0aGlzIHBvaW50LCBkaXZpZGUgdGhlIGRpdmlkZW5kIGFuZCB0aGUgbWFzaworCSAgIGJ5IDIgKGkuZS4gc2hpZnQgb25lIHBsYWNlIHRvIHRoZSByaWdodCkuICBMYXRoZXIsIHJpbnNlLAorCSAgIGFuZCByZXBlYXQsIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBvd2VycyBvZiAyIGxlZnQuICovCisKKwkvKiBGSVhNRTogbmVlZGxlc3MgdG8gc2F5LCB0aGVyZSdzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUgdG9vLiAqLworCisJLyogU2hpZnQgdXAgKi8KKwkvKiBYWFg6IHNpbmNlIGl0IGp1c3QgaGFzIHRvIGJlICJhdCBsZWFzdCBhcyBiaWciLCB3ZSBjYW4KKwkgICBwcm9iYWJseSBlbGltaW5hdGUgdGhpcyBob3JyaWJseSB3YXN0ZWZ1bCBsb29wLiAgSSB3aWxsCisJICAgaGF2ZSB0byBwcm92ZSB0aGlzIGZpcnN0LCB0aG91Z2ggKi8KKwlzZXQxMjgoMCwgMCwgMCwgMSwgbWFzayk7CisJd2hpbGUgKGNtcDEyOChiLCBhKSA8IDAgJiYgIWJ0c3RoaTEyOChiKSkgeworCQlsc2xvbmUxMjgoYik7CisJCWxzbG9uZTEyOChtYXNrKTsKKwl9CisKKwkvKiBTaGlmdCBkb3duICovCisJemVybzEyOChjKTsKKwlkbyB7CisJCWlmIChjbXAxMjgoYSwgYikgPj0gMCkgeworCQkJc3ViMTI4KGIsIGEpOworCQkJYWRkMTI4KG1hc2ssIGMpOworCQl9CisJCWxzcm9uZTEyOChtYXNrKTsKKwkJbHNyb25lMTI4KGIpOworCX0gd2hpbGUgKG5vbnplcm9wMTI4KG1hc2spKTsKKworCS8qIFRoZSByZW1haW5kZXIgaXMgaW4gYS4uLiAqLworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBNVUxUSV9BUklUSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vTWFrZWZpbGUgYi9hcmNoL202OGsvbW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmMWM3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBtNjhrLXNwZWNpZmljIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlci4KKyMKKworb2JqLXkJCTo9IGluaXQubyBmYXVsdC5vIGh3dGVzdC5vCisKK29iai0kKENPTkZJR19NTVVfTU9UT1JPTEEpCSs9IGttYXAubyBtZW1vcnkubyBtb3Rvcm9sYS5vCitvYmotJChDT05GSUdfTU1VX1NVTjMpCQkrPSBzdW4za21hcC5vIHN1bjNtbXUubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMgYi9hcmNoL202OGsvbW0vZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ4YjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21tL2ZhdWx0LmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL21tL2ZhdWx0LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKworZXh0ZXJuIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICosIHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZXh0ZXJuIGNvbnN0IGludCBmcmFtZV9leHRyYV9zaXplc1tdOyAvKiBpbiBtNjhrL2tlcm5lbC9zaWduYWwuYyAqLworCitpbnQgc2VuZF9mYXVsdF9zaWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2lnaW5mb190IHNpZ2luZm8gPSB7IDAsIDAsIDAsIH07CisKKwlzaWdpbmZvLnNpX3NpZ25vID0gY3VycmVudC0+dGhyZWFkLnNpZ25vOworCXNpZ2luZm8uc2lfY29kZSA9IGN1cnJlbnQtPnRocmVhZC5jb2RlOworCXNpZ2luZm8uc2lfYWRkciA9ICh2b2lkICopY3VycmVudC0+dGhyZWFkLmZhZGRyOworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJzZW5kX2ZhdWx0X3NpZzogJXAsJWQsJWRcbiIsIHNpZ2luZm8uc2lfYWRkciwgc2lnaW5mby5zaV9zaWdubywgc2lnaW5mby5zaV9jb2RlKTsKKyNlbmRpZgorCisJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQlmb3JjZV9zaWdfaW5mbyhzaWdpbmZvLnNpX3NpZ25vLAorCQkJICAgICAgICZzaWdpbmZvLCBjdXJyZW50KTsKKwl9IGVsc2UgeworCQljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cDsKKworCQkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMga2VybmVsIGZhdWx0PyAqLworCQlpZiAoKGZpeHVwID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+cGMpKSkgeworCQkJc3RydWN0IHB0X3JlZ3MgKnRyZWdzOworCQkJLyogQ3JlYXRlIGEgbmV3IGZvdXIgd29yZCBzdGFjayBmcmFtZSwgZGlzY2FyZGluZyB0aGUgb2xkCisJCQkgICBvbmUuICAqLworCQkJcmVncy0+c3RrYWRqID0gZnJhbWVfZXh0cmFfc2l6ZXNbcmVncy0+Zm9ybWF0XTsKKwkJCXRyZWdzID0JKHN0cnVjdCBwdF9yZWdzICopKCh1bG9uZylyZWdzICsgcmVncy0+c3RrYWRqKTsKKwkJCXRyZWdzLT52ZWN0b3IgPSByZWdzLT52ZWN0b3I7CisJCQl0cmVncy0+Zm9ybWF0ID0gMDsKKwkJCXRyZWdzLT5wYyA9IGZpeHVwLT5maXh1cDsKKwkJCXRyZWdzLT5zciA9IHJlZ3MtPnNyOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLy9pZiAoc2lnaW5mby5zaV9zaWdubyA9PSBTSUdCVVMpCisJCS8vCWZvcmNlX3NpZ19pbmZvKHNpZ2luZm8uc2lfc2lnbm8sCisJCS8vCQkgICAgICAgJnNpZ2luZm8sIGN1cnJlbnQpOworCisJCS8qCisJCSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KKwkJICogdGVybWluYXRlIHRoaW5ncyB3aXRoIGV4dHJlbWUgcHJlanVkaWNlLgorCQkgKi8KKwkJaWYgKCh1bnNpZ25lZCBsb25nKXNpZ2luZm8uc2lfYWRkciA8IFBBR0VfU0laRSkKKwkJCXByaW50ayhLRVJOX0FMRVJUICJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIGFjY2VzcyIpOworCQlwcmludGsoIiBhdCB2aXJ0dWFsIGFkZHJlc3MgJXBcbiIsIHNpZ2luZm8uc2lfYWRkcik7CisJCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCByZWdzLCAwIC8qZXJyb3JfY29kZSovKTsKKwkJZG9fZXhpdChTSUdLSUxMKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHBhZ2UgZmF1bHRzLiAgSXQgZGV0ZXJtaW5lcyB0aGUgcHJvYmxlbSwgYW5kCisgKiB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lcy4KKyAqCisgKiBlcnJvcl9jb2RlOgorICoJYml0IDAgPT0gMCBtZWFucyBubyBwYWdlIGZvdW5kLCAxIG1lYW5zIHByb3RlY3Rpb24gZmF1bHQKKyAqCWJpdCAxID09IDAgbWVhbnMgcmVhZCwgMSBtZWFucyB3cml0ZQorICoKKyAqIElmIHRoaXMgcm91dGluZSBkZXRlY3RzIGEgYmFkIGFjY2VzcywgaXQgcmV0dXJucyAxLCBvdGhlcndpc2UgaXQKKyAqIHJldHVybnMgMC4KKyAqLworaW50IGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsKKwlpbnQgd3JpdGUsIGZhdWx0OworCisjaWZkZWYgREVCVUcKKwlwcmludGsgKCJkbyBwYWdlIGZhdWx0OlxucmVncy0+c3I9JSN4LCByZWdzLT5wYz0lI2x4LCBhZGRyZXNzPSUjbHgsICVsZCwgJXBcbiIsCisJCXJlZ3MtPnNyLCByZWdzLT5wYywgYWRkcmVzcywgZXJyb3JfY29kZSwKKwkJY3VycmVudC0+bW0tPnBnZCk7CisjZW5kaWYKKworCS8qCisJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0IG9yIGhhdmUgbm8gdXNlcgorCSAqIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KKwkgKi8KKwlpZiAoaW5faW50ZXJydXB0KCkgfHwgIW1tKQorCQlnb3RvIG5vX2NvbnRleHQ7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CisJaWYgKCF2bWEpCisJCWdvdG8gbWFwX2VycjsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0lPKQorCQlnb3RvIGFjY19lcnI7CisJaWYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcmVzcykKKwkJZ290byBnb29kX2FyZWE7CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCWdvdG8gbWFwX2VycjsKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCS8qIEFjY2Vzc2luZyB0aGUgc3RhY2sgYmVsb3cgdXNwIGlzIGFsd2F5cyBhIGJ1Zy4gIFRoZQorCQkgICAiKyAyNTYiIGlzIHRoZXJlIGR1ZSB0byBzb21lIGluc3RydWN0aW9ucyBkb2luZworCQkgICBwcmUtZGVjcmVtZW50IG9uIHRoZSBzdGFjayBhbmQgdGhhdCBkb2Vzbid0IHNob3cgdXAKKwkJICAgdW50aWwgbGF0ZXIuICAqLworCQlpZiAoYWRkcmVzcyArIDI1NiA8IHJkdXNwKCkpCisJCQlnb3RvIG1hcF9lcnI7CisJfQorCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkKKwkJZ290byBtYXBfZXJyOworCisvKgorICogT2ssIHdlIGhhdmUgYSBnb29kIHZtX2FyZWEgZm9yIHRoaXMgbWVtb3J5IGFjY2Vzcywgc28KKyAqIHdlIGNhbiBoYW5kbGUgaXQuLgorICovCitnb29kX2FyZWE6CisjaWZkZWYgREVCVUcKKwlwcmludGsoImRvX3BhZ2VfZmF1bHQ6IGdvb2RfYXJlYVxuIik7CisjZW5kaWYKKwl3cml0ZSA9IDA7CisJc3dpdGNoIChlcnJvcl9jb2RlICYgMykgeworCQlkZWZhdWx0OgkvKiAzOiB3cml0ZSwgcHJlc2VudCAqLworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgMjoJCS8qIHdyaXRlLCBub3QgcHJlc2VudCAqLworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKKwkJCQlnb3RvIGFjY19lcnI7CisJCQl3cml0ZSsrOworCQkJYnJlYWs7CisJCWNhc2UgMToJCS8qIHJlYWQsIHByZXNlbnQgKi8KKwkJCWdvdG8gYWNjX2VycjsKKwkJY2FzZSAwOgkJLyogcmVhZCwgbm90IHByZXNlbnQgKi8KKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMpKSkKKwkJCQlnb3RvIGFjY19lcnI7CisJfQorCisJLyoKKwkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwKKwkgKiBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvCisJICogdGhlIGZhdWx0LgorCSAqLworCisgc3Vydml2ZToKKwlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCB3cml0ZSk7CisjaWZkZWYgREVCVUcKKwlwcmludGsoImhhbmRsZV9tbV9mYXVsdCByZXR1cm5zICVkXG4iLGZhdWx0KTsKKyNlbmRpZgorCXN3aXRjaCAoZmF1bHQpIHsKKwljYXNlIDE6CisJCWN1cnJlbnQtPm1pbl9mbHQrKzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljdXJyZW50LT5tYWpfZmx0Kys7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZ290byBidXNfZXJyOworCWRlZmF1bHQ6CisJCWdvdG8gb3V0X29mX21lbW9yeTsKKwl9CisKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiAwOworCisvKgorICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCisgKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCisgKi8KK291dF9vZl9tZW1vcnk6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwkJeWllbGQoKTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlnb3RvIHN1cnZpdmU7CisJfQorCisJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCBjdXJyZW50LT5jb21tKTsKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlkb19leGl0KFNJR0tJTEwpOworCitub19jb250ZXh0OgorCWN1cnJlbnQtPnRocmVhZC5zaWdubyA9IFNJR0JVUzsKKwljdXJyZW50LT50aHJlYWQuZmFkZHIgPSBhZGRyZXNzOworCXJldHVybiBzZW5kX2ZhdWx0X3NpZyhyZWdzKTsKKworYnVzX2VycjoKKwljdXJyZW50LT50aHJlYWQuc2lnbm8gPSBTSUdCVVM7CisJY3VycmVudC0+dGhyZWFkLmNvZGUgPSBCVVNfQURSRVJSOworCWN1cnJlbnQtPnRocmVhZC5mYWRkciA9IGFkZHJlc3M7CisJZ290byBzZW5kX3NpZzsKKworbWFwX2VycjoKKwljdXJyZW50LT50aHJlYWQuc2lnbm8gPSBTSUdTRUdWOworCWN1cnJlbnQtPnRocmVhZC5jb2RlID0gU0VHVl9NQVBFUlI7CisJY3VycmVudC0+dGhyZWFkLmZhZGRyID0gYWRkcmVzczsKKwlnb3RvIHNlbmRfc2lnOworCithY2NfZXJyOgorCWN1cnJlbnQtPnRocmVhZC5zaWdubyA9IFNJR1NFR1Y7CisJY3VycmVudC0+dGhyZWFkLmNvZGUgPSBTRUdWX0FDQ0VSUjsKKwljdXJyZW50LT50aHJlYWQuZmFkZHIgPSBhZGRyZXNzOworCitzZW5kX3NpZzoKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBzZW5kX2ZhdWx0X3NpZyhyZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9od3Rlc3QuYyBiL2FyY2gvbTY4ay9tbS9od3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdkZGUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21tL2h3dGVzdC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIFRlc3RzIGZvciBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSBpbiBhdGFyaS9jb25maWcuYywgYnV0IEkgbm90aWNlZAorICogdGhhdCBpdCB3YXMgYWxzbyBpbiBkcml2ZXJzL251YnVzL251YnVzLmMgYW5kIEkgd2FudGVkIHRvCisgKiB1c2UgaXQgaW4gaHAzMDAvY29uZmlnLmMsIHNvIGl0IHNlZW1lZCBzZW5zaWJsZSB0byBwdWxsIGl0CisgKiBvdXQgaW50byBpdHMgb3duIGZpbGUuCisgKgorICogVGhlIHRlc3QgaXMgZm9yIHVzZSB3aGVuIHRyeWluZyB0byByZWFkIGEgaGFyZHdhcmUgcmVnaXN0ZXIKKyAqIHRoYXQgaXNuJ3QgcHJlc2VudCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvci4gV2Ugc2V0IHVwIGEKKyAqIHRlbXBvcmFyeSBoYW5kbGVyIHNvIHRoYXQgdGhpcyBkb2Vzbid0IGtpbGwgdGhlIGtlcm5lbC4KKyAqCisgKiBUaGVyZSBpcyBhIHRlc3QtYnktcmVhZGluZyBhbmQgYSB0ZXN0LWJ5LXdyaXRpbmc7IEkgcHJlc2VudAorICogdGhlbSBoZXJlIGNvbXBsZXRlIHdpdGggdGhlIGNvbW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIGF0YXJpCisgKiBjb25maWcuYy4uLgorICogICAgICAgICAgICAgICAgLS0gUE1NIDxwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrPiwgMDUvMTk5OAorICovCisKKy8qIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBhZGRyZXNzLCBzcGVjaWFsbHkgYQorICogaGFyZHdhcmUgcmVnaXN0ZXIgYWRkcmVzcy4gSXQgaXMgY2FsbGVkIHZlcnkgZWFybHkgaW4gdGhlIGtlcm5lbAorICogaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgd2hlbiB0aGUgVkJSIHJlZ2lzdGVyIGlzbid0IHNldCB1cCB5ZXQuIE9uCisgKiBhbiBBdGFyaSwgaXQgc3RpbGwgcG9pbnRzIHRvIGFkZHJlc3MgMCwgd2hpY2ggaXMgdW5tYXBwZWQuIFNvIGEgYnVzCisgKiBlcnJvciB3b3VsZCBjYXVzZSBhbm90aGVyIGJ1cyBlcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgZXhjZXB0aW9uCisgKiB2ZWN0b3IsIGFuZCB0aGUgQ1BVIHdvdWxkIGRvIG5vdGhpbmcgYXQgYWxsLiBTbyB3ZSBuZWVkZWQgdG8gc2V0IHVwCisgKiBhIHRlbXBvcmFyeSBWQlIgYW5kIGEgdmVjdG9yIHRhYmxlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3QuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitpbnQgaHdyZWdfcHJlc2VudCggdm9sYXRpbGUgdm9pZCAqcmVncCApCit7CisgICAgaW50CXJldCA9IDA7CisgICAgbG9uZwlzYXZlX3NwLCBzYXZlX3ZicjsKKyAgICBsb25nCXRtcF92ZWN0b3JzWzNdOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKwkoCSJtb3ZlYwklL3ZiciwlMlxuXHQiCisJCSJtb3ZlbAkjTGJlcnIxLCU0QCg4KVxuXHQiCisgICAgICAgICAgICAgICAgIm1vdmVjCSU0LCUvdmJyXG5cdCIKKwkJIm1vdmVsCSUvc3AsJTFcblx0IgorCQkibW92ZXEJIzAsJTBcblx0IgorCQkidHN0YgklM0Bcblx0IgorCQkibm9wXG5cdCIKKwkJIm1vdmVxCSMxLCUwXG4iCisgICAgICAgICAgICAgICAgIkxiZXJyMTpcblx0IgorCQkibW92ZWwJJTEsJS9zcFxuXHQiCisJCSJtb3ZlYwklMiwlL3ZiciIKKwkJOiAiPSZkIiAocmV0KSwgIj0mciIgKHNhdmVfc3ApLCAiPSZyIiAoc2F2ZV92YnIpCisJCTogImEiIChyZWdwKSwgImEiICh0bXBfdmVjdG9ycykKKyAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KK0VYUE9SVF9TWU1CT0woaHdyZWdfcHJlc2VudCk7CisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSwgYnV0IHdyaXRlcyBhIHZhbHVlIGludG8gYSB3b3JkIHJlZ2lzdGVyLCBwcm90ZWN0ZWQKKyAqIGJ5IGEgYnVzIGVycm9yIGhhbmRsZXIuIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsLCAwIG90aGVyd2lzZS4KKyAqLworCitpbnQgaHdyZWdfd3JpdGUoIHZvbGF0aWxlIHZvaWQgKnJlZ3AsIHVuc2lnbmVkIHNob3J0IHZhbCApCit7CisJaW50CQlyZXQ7CisJbG9uZwlzYXZlX3NwLCBzYXZlX3ZicjsKKwlsb25nCXRtcF92ZWN0b3JzWzNdOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkoCSJtb3ZlYwklL3ZiciwlMlxuXHQiCisJCSJtb3ZlbAkjTGJlcnIyLCU0QCg4KVxuXHQiCisJCSJtb3ZlYwklNCwlL3ZiclxuXHQiCisJCSJtb3ZlbAklL3NwLCUxXG5cdCIKKwkJIm1vdmVxCSMwLCUwXG5cdCIKKwkJIm1vdmV3CSU1LCUzQFxuXHQiCisJCSJub3AJXG5cdCIJLyogSWYgdGhpcyBub3AgaXNuJ3QgcHJlc2VudCwgJ3JldCcgbWF5IGFscmVhZHkgYmUKKwkJCQkgKiBsb2FkZWQgd2l0aCAxIGF0IHRoZSB0aW1lIHRoZSBidXMgZXJyb3IKKwkJCQkgKiBoYXBwZW5zISAqLworCQkibW92ZXEJIzEsJTBcbiIKKwkiTGJlcnIyOlxuXHQiCisJCSJtb3ZlbAklMSwlL3NwXG5cdCIKKwkJIm1vdmVjCSUyLCUvdmJyIgorCQk6ICI9JmQiIChyZXQpLCAiPSZyIiAoc2F2ZV9zcCksICI9JnIiIChzYXZlX3ZicikKKwkJOiAiYSIgKHJlZ3ApLCAiYSIgKHRtcF92ZWN0b3JzKSwgImciICh2YWwpCisJKTsKKworCXJldHVybiggcmV0ICk7Cit9CitFWFBPUlRfU1lNQk9MKGh3cmVnX3dyaXRlKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2luaXQuYyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1YmViOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL21tL2luaXQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiAgQ29udGFpbnMgY29tbW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBzcGVjaWZpYyBpbml0IGNvZGUgbW92ZWQKKyAqICB0byBtb3Rvcm9sYS5jIGFuZCBzdW4zbW11LmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpZmRlZiBDT05GSUdfQVRBUkkKKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIHNwZWNpYWwgcGFnZSB0aGF0IGlzIHVzZWQgZm9yIHplcm8taW5pdGlhbGl6ZWQKKyAqIGRhdGEgYW5kIENPVy4KKyAqLworCit2b2lkICplbXB0eV96ZXJvX3BhZ2U7CisKK3ZvaWQgc2hvd19tZW0odm9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGk7CisgICAgaW50IGZyZWUgPSAwLCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMCwgc2hhcmVkID0gMDsKKyAgICBpbnQgY2FjaGVkID0gMDsKKworICAgIHByaW50aygiXG5NZW0taW5mbzpcbiIpOworICAgIHNob3dfZnJlZV9hcmVhcygpOworICAgIHByaW50aygiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CisgICAgaSA9IG1heF9tYXBucjsKKyAgICB3aGlsZSAoaS0tID4gMCkgeworCXRvdGFsKys7CisJaWYgKFBhZ2VSZXNlcnZlZChtZW1fbWFwK2kpKQorCSAgICByZXNlcnZlZCsrOworCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUobWVtX21hcCtpKSkKKwkgICAgY2FjaGVkKys7CisJZWxzZSBpZiAoIXBhZ2VfY291bnQobWVtX21hcCtpKSkKKwkgICAgZnJlZSsrOworCWVsc2UKKwkgICAgc2hhcmVkICs9IHBhZ2VfY291bnQobWVtX21hcCtpKSAtIDE7CisgICAgfQorICAgIHByaW50aygiJWQgcGFnZXMgb2YgUkFNXG4iLHRvdGFsKTsKKyAgICBwcmludGsoIiVkIGZyZWUgcGFnZXNcbiIsZnJlZSk7CisgICAgcHJpbnRrKCIlZCByZXNlcnZlZCBwYWdlc1xuIixyZXNlcnZlZCk7CisgICAgcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsc2hhcmVkKTsKKyAgICBwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLGNhY2hlZCk7Cit9CisKK2V4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh1bnNpZ25lZCBsb25nIHB0YWJsZSk7CisKKy8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCisKK2V4dGVybiBjaGFyIF90ZXh0LCBfZXRleHQsIF9lZGF0YSwgX19ic3Nfc3RhcnQsIF9lbmQ7CitleHRlcm4gY2hhciBfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQ7CisKK2V4dGVybiBwbWRfdCAqemVyb19wZ3RhYmxlOworCit2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQoreworCWludCBjb2RlcGFnZXMgPSAwOworCWludCBkYXRhcGFnZXMgPSAwOworCWludCBpbml0cGFnZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdG1wOworI2lmbmRlZiBDT05GSUdfU1VOMworCWludCBpOworI2VuZGlmCisKKwltYXhfbWFwbnIgPSBudW1fcGh5c3BhZ2VzID0gKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKKworI2lmZGVmIENPTkZJR19BVEFSSQorCWlmIChNQUNIX0lTX0FUQVJJKQorCQlhdGFyaV9zdHJhbV9tZW1faW5pdF9ob29rKCk7CisjZW5kaWYKKworCS8qIHRoaXMgd2lsbCBwdXQgYWxsIG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KKwl0b3RhbHJhbV9wYWdlcyA9IGZyZWVfYWxsX2Jvb3RtZW0oKTsKKworCWZvciAodG1wID0gUEFHRV9PRkZTRVQgOyB0bXAgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeTsgdG1wICs9IFBBR0VfU0laRSkgeworCQlpZiAoUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSh0bXApKSkgeworCQkJaWYgKHRtcCA+PSAodW5zaWduZWQgbG9uZykmX3RleHQKKwkJCSAgICAmJiB0bXAgPCAodW5zaWduZWQgbG9uZykmX2V0ZXh0KQorCQkJCWNvZGVwYWdlcysrOworCQkJZWxzZSBpZiAodG1wID49ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luCisJCQkJICYmIHRtcCA8ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCkKKwkJCQlpbml0cGFnZXMrKzsKKwkJCWVsc2UKKwkJCQlkYXRhcGFnZXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisjaWZuZGVmIENPTkZJR19TVU4zCisJLyogaW5zZXJ0IHBvaW50ZXIgdGFibGVzIGFsbG9jYXRlZCBzbyBmYXIgaW50byB0aGUgdGFibGVsaXN0ICovCisJaW5pdF9wb2ludGVyX3RhYmxlKCh1bnNpZ25lZCBsb25nKWtlcm5lbF9wZ19kaXIpOworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykgeworCQlpZiAocGdkX3ByZXNlbnQoa2VybmVsX3BnX2RpcltpXSkpCisJCQlpbml0X3BvaW50ZXJfdGFibGUoX19wZ2RfcGFnZShrZXJuZWxfcGdfZGlyW2ldKSk7CisJfQorCisJLyogaW5zZXJ0IGFsc28gcG9pbnRlciB0YWJsZSB0aGF0IHdlIHVzZWQgdG8gdW5tYXAgdGhlIHplcm8gcGFnZSAqLworCWlmICh6ZXJvX3BndGFibGUpCisJCWluaXRfcG9pbnRlcl90YWJsZSgodW5zaWduZWQgbG9uZyl6ZXJvX3BndGFibGUpOworI2VuZGlmCisKKwlwcmludGsoIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBtYXhfbWFwbnIgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBjb2RlcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBkYXRhcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBpbml0cGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKTsKK30KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IHBhZ2VzID0gMDsKKwlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKKwkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWZyZWVfcGFnZShzdGFydCk7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJCXBhZ2VzKys7CisJfQorCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWRrIGZyZWVkXG4iLCBwYWdlcyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9rbWFwLmMgYi9hcmNoL202OGsvbW0va21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2IzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0va21hcC5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9tbS9rbWFwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IFJvbWFuIEhvZGVrCisgKgorICogIDEwLzAxLzk5IGNsZWFuZWQgdXAgdGhlIGNvZGUgYW5kIGNoYW5naW5nIHRvIHRoZSBzYW1lIGludGVyZmFjZQorICoJICAgICB1c2VkIGJ5IG90aGVyIGFyY2hpdGVjdHVyZXMJCS9Sb21hbiBaaXBwZWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyN1bmRlZiBERUJVRworCisjZGVmaW5lIFBUUlRSRUVTSVpFCSgyNTYqMTAyNCkKKworLyoKKyAqIEZvciAwNDAvMDYwIHdlIGNhbiB1c2UgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgbGlrZSBvdGhlciBhcmNoaXRlY3R1cmVzLAorICogYnV0IGZvciAwMjAvMDMwIHdlIHdhbnQgdG8gdXNlIGVhcmx5IHRlcm1pbmF0aW9uIHBhZ2UgZGVzY3JpcHRvciBhbmQgd2UKKyAqIGNhbid0IG1peCB0aGlzIHdpdGggbm9ybWFsIHBhZ2UgZGVzY3JpcHRvcnMsIHNvIHdlIGhhdmUgdG8gY29weSB0aGF0IGNvZGUKKyAqIChtbS92bWFsbG9jLmMpIGFuZCByZXR1cm4gYXBwcmlvcmF0ZSBhbGlnbmVkIGFkZHJlc3Nlcy4KKyAqLworCisjaWZkZWYgQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWQorCisjZGVmaW5lIElPX1NJWkUJCVBBR0VfU0laRQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF9pb19hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfaW9fYXJlYSh2b2lkICphZGRyKQoreworCXZmcmVlKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKWFkZHIpKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBJT19TSVpFCQkoMjU2KjEwMjQpCisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICppb2xpc3Q7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKKworCWFyZWEgPSAoc3RydWN0IHZtX3N0cnVjdCAqKWttYWxsb2Moc2l6ZW9mKCphcmVhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmVhKQorCQlyZXR1cm4gTlVMTDsKKwlhZGRyID0gS01BUF9TVEFSVDsKKwlmb3IgKHAgPSAmaW9saXN0OyAodG1wID0gKnApIDsgcCA9ICZ0bXAtPm5leHQpIHsKKwkJaWYgKHNpemUgKyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyKQorCQkJYnJlYWs7CisJCWlmIChhZGRyID4gS01BUF9FTkQtc2l6ZSkKKwkJCXJldHVybiBOVUxMOworCQlhZGRyID0gdG1wLT5zaXplICsgKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyOworCX0KKwlhcmVhLT5hZGRyID0gKHZvaWQgKilhZGRyOworCWFyZWEtPnNpemUgPSBzaXplICsgSU9fU0laRTsKKwlhcmVhLT5uZXh0ID0gKnA7CisJKnAgPSBhcmVhOworCXJldHVybiBhcmVhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9pb19hcmVhKHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHZtX3N0cnVjdCAqKnAsICp0bXA7CisKKwlpZiAoIWFkZHIpCisJCXJldHVybjsKKwlhZGRyID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpYWRkciAmIC1JT19TSVpFKTsKKwlmb3IgKHAgPSAmaW9saXN0IDsgKHRtcCA9ICpwKSA7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmFkZHIgPT0gYWRkcikgeworCQkJKnAgPSB0bXAtPm5leHQ7CisJCQlfX2lvdW5tYXAodG1wLT5hZGRyLCB0bXAtPnNpemUpOworCQkJa2ZyZWUodG1wKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworI2VuZGlmCisKKy8qCisgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLiBUaGUKKyAqIGNvZGUgaXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb20gbWFwX2NodW5rKCkuCisgKi8KKy8qIFJld3JpdHRlbiBieSBBbmRyZWFzIFNjaHdhYiB0byByZW1vdmUgYWxsIHJhY2VzLiAqLworCit2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY2FjaGVmbGFnKQoreworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJdW5zaWduZWQgbG9uZyB2aXJ0YWRkciwgcmV0YWRkcjsKKwlsb25nIG9mZnNldDsKKwlwZ2RfdCAqcGdkX2RpcjsKKwlwbWRfdCAqcG1kX2RpcjsKKwlwdGVfdCAqcHRlX2RpcjsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgbWFwcGluZ3MgdGhhdCB3cmFwLi4KKwkgKi8KKwlpZiAoIXNpemUgfHwgc2l6ZSA+IHBoeXNhZGRyICsgc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfQU1JR0EKKwlpZiAoTUFDSF9JU19BTUlHQSkgeworCQlpZiAoKHBoeXNhZGRyID49IDB4NDAwMDAwMDApICYmIChwaHlzYWRkciArIHNpemUgPCAweDYwMDAwMDAwKQorCQkgICAgJiYgKGNhY2hlZmxhZyA9PSBJT01BUF9OT0NBQ0hFX1NFUikpCisJCQlyZXR1cm4gKHZvaWQgKilwaHlzYWRkcjsKKwl9CisjZW5kaWYKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJpb3JlbWFwOiAweCVseCwweCVseCglZCkgLSAiLCBwaHlzYWRkciwgc2l6ZSwgY2FjaGVmbGFnKTsKKyNlbmRpZgorCS8qCisJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBhbGlnbmVkCisJICovCisJb2Zmc2V0ID0gcGh5c2FkZHIgJiAoSU9fU0laRSAtIDEpOworCXBoeXNhZGRyICY9IC1JT19TSVpFOworCXNpemUgPSAoc2l6ZSArIG9mZnNldCArIElPX1NJWkUgLSAxKSAmIC1JT19TSVpFOworCisJLyoKKwkgKiBPaywgZ28gZm9yIGl0Li4KKwkgKi8KKwlhcmVhID0gZ2V0X2lvX2FyZWEoc2l6ZSk7CisJaWYgKCFhcmVhKQorCQlyZXR1cm4gTlVMTDsKKworCXZpcnRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKKwlyZXRhZGRyID0gdmlydGFkZHIgKyBvZmZzZXQ7CisjaWZkZWYgREVCVUcKKwlwcmludGsoIjB4JWx4LDB4JWx4LDB4JWx4IiwgcGh5c2FkZHIsIHZpcnRhZGRyLCByZXRhZGRyKTsKKyNlbmRpZgorCisJLyoKKwkgKiBhZGQgY2FjaGUgYW5kIHRhYmxlIGZsYWdzIHRvIHBoeXNpY2FsIGFkZHJlc3MKKwkgKi8KKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwkJcGh5c2FkZHIgfD0gKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9HTE9CQUwwNDAgfAorCQkJICAgICBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKTsKKwkJc3dpdGNoIChjYWNoZWZsYWcpIHsKKwkJY2FzZSBJT01BUF9GVUxMX0NBQ0hJTkc6CisJCQlwaHlzYWRkciB8PSBfUEFHRV9DQUNIRTA0MDsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX05PQ0FDSEVfU0VSOgorCQlkZWZhdWx0OgorCQkJcGh5c2FkZHIgfD0gX1BBR0VfTk9DQUNIRV9TOworCQkJYnJlYWs7CisJCWNhc2UgSU9NQVBfTk9DQUNIRV9OT05TRVI6CisJCQlwaHlzYWRkciB8PSBfUEFHRV9OT0NBQ0hFOworCQkJYnJlYWs7CisJCWNhc2UgSU9NQVBfV1JJVEVUSFJPVUdIOgorCQkJcGh5c2FkZHIgfD0gX1BBR0VfQ0FDSEUwNDBXOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlwaHlzYWRkciB8PSAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpOworCQlzd2l0Y2ggKGNhY2hlZmxhZykgeworCQljYXNlIElPTUFQX05PQ0FDSEVfU0VSOgorCQljYXNlIElPTUFQX05PQ0FDSEVfTk9OU0VSOgorCQlkZWZhdWx0OgorCQkJcGh5c2FkZHIgfD0gX1BBR0VfTk9DQUNIRTAzMDsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX0ZVTExfQ0FDSElORzoKKwkJY2FzZSBJT01BUF9XUklURVRIUk9VR0g6CisJCQlicmVhazsKKwkJfQorCX0KKworCXdoaWxlICgobG9uZylzaXplID4gMCkgeworI2lmZGVmIERFQlVHCisJCWlmICghKHZpcnRhZGRyICYgKFBUUlRSRUVTSVpFLTEpKSkKKwkJCXByaW50ayAoIlxucGE9JSNseCB2YT0lI2x4ICIsIHBoeXNhZGRyLCB2aXJ0YWRkcik7CisjZW5kaWYKKwkJcGdkX2RpciA9IHBnZF9vZmZzZXRfayh2aXJ0YWRkcik7CisJCXBtZF9kaXIgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHBnZF9kaXIsIHZpcnRhZGRyKTsKKwkJaWYgKCFwbWRfZGlyKSB7CisJCQlwcmludGsoImlvcmVtYXA6IG5vIG1lbSBmb3IgcG1kX2RpclxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworCQkJcG1kX2Rpci0+cG1kWyh2aXJ0YWRkci9QVFJUUkVFU0laRSkgJiAxNV0gPSBwaHlzYWRkcjsKKwkJCXBoeXNhZGRyICs9IFBUUlRSRUVTSVpFOworCQkJdmlydGFkZHIgKz0gUFRSVFJFRVNJWkU7CisJCQlzaXplIC09IFBUUlRSRUVTSVpFOworCQl9IGVsc2UgeworCQkJcHRlX2RpciA9IHB0ZV9hbGxvY19rZXJuZWwoJmluaXRfbW0sIHBtZF9kaXIsIHZpcnRhZGRyKTsKKwkJCWlmICghcHRlX2RpcikgeworCQkJCXByaW50aygiaW9yZW1hcDogbm8gbWVtIGZvciBwdGVfZGlyXG4iKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKworCQkJcHRlX3ZhbCgqcHRlX2RpcikgPSBwaHlzYWRkcjsKKwkJCXZpcnRhZGRyICs9IFBBR0VfU0laRTsKKwkJCXBoeXNhZGRyICs9IFBBR0VfU0laRTsKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQl9CisJfQorI2lmZGVmIERFQlVHCisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJZmx1c2hfdGxiX2FsbCgpOworCisJcmV0dXJuICh2b2lkICopcmV0YWRkcjsKK30KKworLyoKKyAqIFVubWFwIGEgaW9yZW1hcCgpZWQgcmVnaW9uIGFnYWluCisgKi8KK3ZvaWQgaW91bm1hcCh2b2lkICphZGRyKQoreworI2lmZGVmIENPTkZJR19BTUlHQQorCWlmICgoIU1BQ0hfSVNfQU1JR0EpIHx8CisJICAgICgoKHVuc2lnbmVkIGxvbmcpYWRkciA8IDB4NDAwMDAwMDApIHx8CisJICAgICAoKHVuc2lnbmVkIGxvbmcpYWRkciA+IDB4NjAwMDAwMDApKSkKKwkJCWZyZWVfaW9fYXJlYShhZGRyKTsKKyNlbHNlCisJZnJlZV9pb19hcmVhKGFkZHIpOworI2VuZGlmCit9CisKKy8qCisgKiBfX2lvdW5tYXAgdW5tYXBzIG5lYXJseSBldmVyeXRoaW5nLCBzbyBiZSBjYXJlZnVsCisgKiBpdCBkb2Vzbid0IGZyZWUgY3VycmVudGx5IHBvaW50ZXIvcGFnZSB0YWJsZXMgYW55bW9yZSBidXQgaXQKKyAqIHdhbnMndCB1c2VkIGFueXdheSBhbmQgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuCisgKi8KK3ZvaWQgX19pb3VubWFwKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZpcnRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlwZ2RfdCAqcGdkX2RpcjsKKwlwbWRfdCAqcG1kX2RpcjsKKwlwdGVfdCAqcHRlX2RpcjsKKworCXdoaWxlICgobG9uZylzaXplID4gMCkgeworCQlwZ2RfZGlyID0gcGdkX29mZnNldF9rKHZpcnRhZGRyKTsKKwkJaWYgKHBnZF9iYWQoKnBnZF9kaXIpKSB7CisJCQlwcmludGsoImlvdW5tYXA6IGJhZCBwZ2QoJTA4bHgpXG4iLCBwZ2RfdmFsKCpwZ2RfZGlyKSk7CisJCQlwZ2RfY2xlYXIocGdkX2Rpcik7CisJCQlyZXR1cm47CisJCX0KKwkJcG1kX2RpciA9IHBtZF9vZmZzZXQocGdkX2RpciwgdmlydGFkZHIpOworCisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworCQkJaW50IHBtZF9vZmYgPSAodmlydGFkZHIvUFRSVFJFRVNJWkUpICYgMTU7CisKKwkJCWlmICgocG1kX2Rpci0+cG1kW3BtZF9vZmZdICYgX0RFU0NUWVBFX01BU0spID09IF9QQUdFX1BSRVNFTlQpIHsKKwkJCQlwbWRfZGlyLT5wbWRbcG1kX29mZl0gPSAwOworCQkJCXZpcnRhZGRyICs9IFBUUlRSRUVTSVpFOworCQkJCXNpemUgLT0gUFRSVFJFRVNJWkU7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAocG1kX2JhZCgqcG1kX2RpcikpIHsKKwkJCXByaW50aygiaW91bm1hcDogYmFkIHBtZCAoJTA4bHgpXG4iLCBwbWRfdmFsKCpwbWRfZGlyKSk7CisJCQlwbWRfY2xlYXIocG1kX2Rpcik7CisJCQlyZXR1cm47CisJCX0KKwkJcHRlX2RpciA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9kaXIsIHZpcnRhZGRyKTsKKworCQlwdGVfdmFsKCpwdGVfZGlyKSA9IDA7CisJCXZpcnRhZGRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJZmx1c2hfdGxiX2FsbCgpOworfQorCisvKgorICogU2V0IG5ldyBjYWNoZSBtb2RlIGZvciBzb21lIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgorICogVGhlIGNhbGxlciBtdXN0IHB1c2ggZGF0YSBmb3IgdGhhdCByYW5nZSBpdHNlbGYsIGlmIHN1Y2ggZGF0YSBtYXkgYWxyZWFkeQorICogYmUgaW4gdGhlIGNhY2hlLgorICovCit2b2lkIGtlcm5lbF9zZXRfY2FjaGVtb2RlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNtb2RlKQoreworCXVuc2lnbmVkIGxvbmcgdmlydGFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyOworCXBnZF90ICpwZ2RfZGlyOworCXBtZF90ICpwbWRfZGlyOworCXB0ZV90ICpwdGVfZGlyOworCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXN3aXRjaCAoY21vZGUpIHsKKwkJY2FzZSBJT01BUF9GVUxMX0NBQ0hJTkc6CisJCQljbW9kZSA9IF9QQUdFX0NBQ0hFMDQwOworCQkJYnJlYWs7CisJCWNhc2UgSU9NQVBfTk9DQUNIRV9TRVI6CisJCWRlZmF1bHQ6CisJCQljbW9kZSA9IF9QQUdFX05PQ0FDSEVfUzsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX05PQ0FDSEVfTk9OU0VSOgorCQkJY21vZGUgPSBfUEFHRV9OT0NBQ0hFOworCQkJYnJlYWs7CisJCWNhc2UgSU9NQVBfV1JJVEVUSFJPVUdIOgorCQkJY21vZGUgPSBfUEFHRV9DQUNIRTA0MFc7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoY21vZGUpIHsKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX1NFUjoKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX05PTlNFUjoKKwkJZGVmYXVsdDoKKwkJCWNtb2RlID0gX1BBR0VfTk9DQUNIRTAzMDsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX0ZVTExfQ0FDSElORzoKKwkJY2FzZSBJT01BUF9XUklURVRIUk9VR0g6CisJCQljbW9kZSA9IDA7CisJCX0KKwl9CisKKwl3aGlsZSAoKGxvbmcpc2l6ZSA+IDApIHsKKwkJcGdkX2RpciA9IHBnZF9vZmZzZXRfayh2aXJ0YWRkcik7CisJCWlmIChwZ2RfYmFkKCpwZ2RfZGlyKSkgeworCQkJcHJpbnRrKCJpb2NhY2hlbW9kZTogYmFkIHBnZCglMDhseClcbiIsIHBnZF92YWwoKnBnZF9kaXIpKTsKKwkJCXBnZF9jbGVhcihwZ2RfZGlyKTsKKwkJCXJldHVybjsKKwkJfQorCQlwbWRfZGlyID0gcG1kX29mZnNldChwZ2RfZGlyLCB2aXJ0YWRkcik7CisKKwkJaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CisJCQlpbnQgcG1kX29mZiA9ICh2aXJ0YWRkci9QVFJUUkVFU0laRSkgJiAxNTsKKworCQkJaWYgKChwbWRfZGlyLT5wbWRbcG1kX29mZl0gJiBfREVTQ1RZUEVfTUFTSykgPT0gX1BBR0VfUFJFU0VOVCkgeworCQkJCXBtZF9kaXItPnBtZFtwbWRfb2ZmXSA9IChwbWRfZGlyLT5wbWRbcG1kX29mZl0gJgorCQkJCQkJCSBfQ0FDSEVNQVNLMDQwKSB8IGNtb2RlOworCQkJCXZpcnRhZGRyICs9IFBUUlRSRUVTSVpFOworCQkJCXNpemUgLT0gUFRSVFJFRVNJWkU7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAocG1kX2JhZCgqcG1kX2RpcikpIHsKKwkJCXByaW50aygiaW9jYWNoZW1vZGU6IGJhZCBwbWQgKCUwOGx4KVxuIiwgcG1kX3ZhbCgqcG1kX2RpcikpOworCQkJcG1kX2NsZWFyKHBtZF9kaXIpOworCQkJcmV0dXJuOworCQl9CisJCXB0ZV9kaXIgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfZGlyLCB2aXJ0YWRkcik7CisKKwkJcHRlX3ZhbCgqcHRlX2RpcikgPSAocHRlX3ZhbCgqcHRlX2RpcikgJiBfQ0FDSEVNQVNLMDQwKSB8IGNtb2RlOworCQl2aXJ0YWRkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCWZsdXNoX3RsYl9hbGwoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tZW1vcnkuYyBiL2FyY2gvbTY4ay9tbS9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDUzYTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21tL21lbW9yeS5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9tbS9tZW1vcnkuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIEhhbWlzaCBNYWNkb25hbGQKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKKworLyogKythbmRyZWFzOiB7Z2V0LGZyZWV9X3BvaW50ZXJfdGFibGUgcmV3cml0dGVuIHRvIHVzZSB1bnVzZWQgZmllbGRzIGZyb20KKyAgIHN0cnVjdCBwYWdlIGluc3RlYWQgb2Ygc2VwYXJhdGVseSBrbWFsbG9jZWQgc3RydWN0LiAgU3RvbGVuIGZyb20KKyAgIGFyY2gvc3BhcmMvbW0vc3JtbXUuYyAuLi4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgbGlzdF9oZWFkIHB0YWJsZV9kZXNjOworc3RhdGljIExJU1RfSEVBRChwdGFibGVfbGlzdCk7CisKKyNkZWZpbmUgUERfUFRBQkxFKHBhZ2UpICgocHRhYmxlX2Rlc2MgKikmKHZpcnRfdG9fcGFnZShwYWdlKS0+bHJ1KSkKKyNkZWZpbmUgUERfUEFHRShwdGFibGUpIChsaXN0X2VudHJ5KHB0YWJsZSwgc3RydWN0IHBhZ2UsIGxydSkpCisjZGVmaW5lIFBEX01BUktCSVRTKGRwKSAoKih1bnNpZ25lZCBjaGFyICopJlBEX1BBR0UoZHApLT5pbmRleCkKKworI2RlZmluZSBQVEFCTEVfU0laRSAoUFRSU19QRVJfUE1EICogc2l6ZW9mKHBtZF90KSkKKwordm9pZCBfX2luaXQgaW5pdF9wb2ludGVyX3RhYmxlKHVuc2lnbmVkIGxvbmcgcHRhYmxlKQoreworCXB0YWJsZV9kZXNjICpkcDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBwdGFibGUgJiBQQUdFX01BU0s7CisJdW5zaWduZWQgY2hhciBtYXNrID0gMSA8PCAoKHB0YWJsZSAtIHBhZ2UpL1BUQUJMRV9TSVpFKTsKKworCWRwID0gUERfUFRBQkxFKHBhZ2UpOworCWlmICghKFBEX01BUktCSVRTKGRwKSAmIG1hc2spKSB7CisJCVBEX01BUktCSVRTKGRwKSA9IDB4ZmY7CisJCWxpc3RfYWRkKGRwLCAmcHRhYmxlX2xpc3QpOworCX0KKworCVBEX01BUktCSVRTKGRwKSAmPSB+bWFzazsKKyNpZmRlZiBERUJVRworCXByaW50aygiaW5pdF9wb2ludGVyX3RhYmxlOiAlbHgsICV4XG4iLCBwdGFibGUsIFBEX01BUktCSVRTKGRwKSk7CisjZW5kaWYKKworCS8qIHVucmVzZXJ2ZSB0aGUgcGFnZSBzbyBpdCdzIHBvc3NpYmxlIHRvIGZyZWUgdGhhdCBwYWdlICovCisJUERfUEFHRShkcCktPmZsYWdzICY9IH4oMSA8PCBQR19yZXNlcnZlZCk7CisJc2V0X3BhZ2VfY291bnQoUERfUEFHRShkcCksIDEpOworCisJcmV0dXJuOworfQorCitwbWRfdCAqZ2V0X3BvaW50ZXJfdGFibGUgKHZvaWQpCit7CisJcHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3QubmV4dDsKKwl1bnNpZ25lZCBjaGFyIG1hc2sgPSBQRF9NQVJLQklUUyAoZHApOworCXVuc2lnbmVkIGNoYXIgdG1wOworCXVuc2lnbmVkIGludCBvZmY7CisKKwkvKgorCSAqIEZvciBhIHBvaW50ZXIgdGFibGUgZm9yIGEgdXNlciBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UsIGEKKwkgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcGFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaAorCSAqIHBhZ2UgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwYWdlIGlzIHJlbWFwcGVkIGluCisJICogdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIGJlIG5vbmNhY2hlYWJsZS4KKwkgKi8KKwlpZiAobWFzayA9PSAwKSB7CisJCXZvaWQgKnBhZ2U7CisJCXB0YWJsZV9kZXNjICpuZXc7CisKKwkJaWYgKCEocGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKSkKKwkJCXJldHVybiBOVUxMOworCisJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShwYWdlKTsKKwkJbm9jYWNoZV9wYWdlKHBhZ2UpOworCisJCW5ldyA9IFBEX1BUQUJMRShwYWdlKTsKKwkJUERfTUFSS0JJVFMobmV3KSA9IDB4ZmU7CisJCWxpc3RfYWRkX3RhaWwobmV3LCBkcCk7CisKKwkJcmV0dXJuIChwbWRfdCAqKXBhZ2U7CisJfQorCisJZm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayAmIHRtcCkgPT0gMDsgdG1wIDw8PSAxLCBvZmYgKz0gUFRBQkxFX1NJWkUpCisJCTsKKwlQRF9NQVJLQklUUyhkcCkgPSBtYXNrICYgfnRtcDsKKwlpZiAoIVBEX01BUktCSVRTKGRwKSkgeworCQkvKiBtb3ZlIHRvIGVuZCBvZiBsaXN0ICovCisJCWxpc3RfZGVsKGRwKTsKKwkJbGlzdF9hZGRfdGFpbChkcCwgJnB0YWJsZV9saXN0KTsKKwl9CisJcmV0dXJuIChwbWRfdCAqKSAocGFnZV9hZGRyZXNzKFBEX1BBR0UoZHApKSArIG9mZik7Cit9CisKK2ludCBmcmVlX3BvaW50ZXJfdGFibGUgKHBtZF90ICpwdGFibGUpCit7CisJcHRhYmxlX2Rlc2MgKmRwOworCXVuc2lnbmVkIGxvbmcgcGFnZSA9ICh1bnNpZ25lZCBsb25nKXB0YWJsZSAmIFBBR0VfTUFTSzsKKwl1bnNpZ25lZCBjaGFyIG1hc2sgPSAxIDw8ICgoKHVuc2lnbmVkIGxvbmcpcHRhYmxlIC0gcGFnZSkvUFRBQkxFX1NJWkUpOworCisJZHAgPSBQRF9QVEFCTEUocGFnZSk7CisJaWYgKFBEX01BUktCSVRTIChkcCkgJiBtYXNrKQorCQlwYW5pYyAoInRhYmxlIGFscmVhZHkgZnJlZSEiKTsKKworCVBEX01BUktCSVRTIChkcCkgfD0gbWFzazsKKworCWlmIChQRF9NQVJLQklUUyhkcCkgPT0gMHhmZikgeworCQkvKiBhbGwgdGFibGVzIGluIHBhZ2UgYXJlIGZyZWUsIGZyZWUgcGFnZSAqLworCQlsaXN0X2RlbChkcCk7CisJCWNhY2hlX3BhZ2UoKHZvaWQgKilwYWdlKTsKKwkJZnJlZV9wYWdlIChwYWdlKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChwdGFibGVfbGlzdC5uZXh0ICE9IGRwKSB7CisJCS8qCisJCSAqIG1vdmUgdGhpcyBkZXNjcmlwdG9yIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgc2luY2UKKwkJICogaXQgaGFzIG9uZSBvciBtb3JlIGZyZWUgdGFibGVzLgorCQkgKi8KKwkJbGlzdF9kZWwoZHApOworCQlsaXN0X2FkZChkcCwgJnB0YWJsZV9saXN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBERUJVR19JTlZBTElEX1BUT1YKK2ludCBtbV9pbnZfY250ID0gNTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisvKgorICogVGhlIGZvbGxvd2luZyB0d28gcm91dGluZXMgbWFwIGZyb20gYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEga2VybmVsCisgKiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHZpY2UgdmVyc2EuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbW1fdnRvcCh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCWludCBpPTA7CisJdW5zaWduZWQgbG9uZyB2b2ZmID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLSBQQUdFX09GRlNFVDsKKworCWRvIHsKKwkJaWYgKHZvZmYgPCBtNjhrX21lbW9yeVtpXS5zaXplKSB7CisjaWZkZWYgREVCVUdQVgorCQkJcHJpbnRrICgiVlRPUCglcCk9JWx4XG4iLCB2YWRkciwKKwkJCQltNjhrX21lbW9yeVtpXS5hZGRyICsgdm9mZik7CisjZW5kaWYKKwkJCXJldHVybiBtNjhrX21lbW9yeVtpXS5hZGRyICsgdm9mZjsKKwkJfQorCQl2b2ZmIC09IG02OGtfbWVtb3J5W2ldLnNpemU7CisJfSB3aGlsZSAoKytpIDwgbTY4a19udW1fbWVtb3J5KTsKKworCS8qIEFzIGEgc3BlY2lhbCBjYXNlIGFsbG93IGBfX3BhKGhpZ2hfbWVtb3J5KScuICAqLworCWlmICh2b2ZmID09IDApCisJCXJldHVybiBtNjhrX21lbW9yeVtpLTFdLmFkZHIgKyBtNjhrX21lbW9yeVtpLTFdLnNpemU7CisKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSwordW5zaWduZWQgbG9uZyBtbV9wdG92ICh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWludCBpID0gMDsKKwl1bnNpZ25lZCBsb25nIHBvZmYsIHZvZmYgPSBQQUdFX09GRlNFVDsKKworCWRvIHsKKwkJcG9mZiA9IHBhZGRyIC0gbTY4a19tZW1vcnlbaV0uYWRkcjsKKwkJaWYgKHBvZmYgPCBtNjhrX21lbW9yeVtpXS5zaXplKSB7CisjaWZkZWYgREVCVUdQVgorCQkJcHJpbnRrICgiUFRPViglbHgpPSVseFxuIiwgcGFkZHIsIHBvZmYgKyB2b2ZmKTsKKyNlbmRpZgorCQkJcmV0dXJuIHBvZmYgKyB2b2ZmOworCQl9CisJCXZvZmYgKz0gbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwl9IHdoaWxlICgrK2kgPCBtNjhrX251bV9tZW1vcnkpOworCisjaWZkZWYgREVCVUdfSU5WQUxJRF9QVE9WCisJaWYgKG1tX2ludl9jbnQgPiAwKSB7CisJCW1tX2ludl9jbnQtLTsKKwkJcHJpbnRrKCJJbnZhbGlkIHVzZSBvZiBwaHlzX3RvX3ZpcnQoMHglbHgpIGF0IDB4JXAhXG4iLAorCQkJcGFkZHIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJfQorI2VuZGlmCisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKKy8qIGludmFsaWRhdGUgcGFnZSBpbiBib3RoIGNhY2hlcyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyMDQwKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJYXNtIHZvbGF0aWxlICgKKwkJIm5vcFxuXHQiCisJCSIuY2hpcCA2ODA0MFxuXHQiCisJCSJjaW52cCAlJWJjLCglMClcblx0IgorCQkiLmNoaXAgNjhrIgorCQk6IDogImEiIChwYWRkcikpOworfQorCisvKiBpbnZhbGlkYXRlIHBhZ2UgaW4gaS1jYWNoZSAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyaTA0MCh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWFzbSB2b2xhdGlsZSAoCisJCSJub3Bcblx0IgorCQkiLmNoaXAgNjgwNDBcblx0IgorCQkiY2ludnAgJSVpYywoJTApXG5cdCIKKwkJIi5jaGlwIDY4ayIKKwkJOiA6ICJhIiAocGFkZHIpKTsKK30KKworLyogcHVzaCBwYWdlIGluIGJvdGggY2FjaGVzICovCisvKiBSWjogY3B1c2ggJWJjIERPRVMgaW52YWxpZGF0ZSAlaWMsIHJlZ2FyZGxlc3Mgb2YgRFBJICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHVzaDA0MCh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWFzbSB2b2xhdGlsZSAoCisJCSJub3Bcblx0IgorCQkiLmNoaXAgNjgwNDBcblx0IgorCQkiY3B1c2hwICUlYmMsKCUwKVxuXHQiCisJCSIuY2hpcCA2OGsiCisJCTogOiAiYSIgKHBhZGRyKSk7Cit9CisKKy8qIHB1c2ggYW5kIGludmFsaWRhdGUgcGFnZSBpbiBib3RoIGNhY2hlcywgbXVzdCBkaXNhYmxlIGludHMKKyAqIHRvIGF2b2lkIGludmFsaWRhdGluZyB2YWxpZCBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHVzaGNsMDQwKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwdXNoMDQwKHBhZGRyKTsKKwlpZiAoQ1BVX0lTXzA2MCkKKwkJY2xlYXIwNDAocGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIDA0MDogSGl0IGV2ZXJ5IHBhZ2UgY29udGFpbmluZyBhbiBhZGRyZXNzIGluIHRoZSByYW5nZSBwYWRkci4ucGFkZHIrbGVuLTEuCisgKiAoTG93IG9yZGVyIGJpdHMgb2YgdGhlIGVhIG9mIGEgQ0lOVlAvQ1BVU0hQIGFyZSAiZG9uJ3QgY2FyZSJzKS4KKyAqIEhpdCBldmVyeSBwYWdlIHVudGlsIHRoZXJlIGlzIGEgcGFnZSBvciBsZXNzIHRvIGdvLiBIaXQgdGhlIG5leHQgcGFnZSwKKyAqIGFuZCB0aGUgb25lIGFmdGVyIHRoYXQgaWYgdGhlIHJhbmdlIGhpdHMgaXQuCisgKi8KKy8qICsrcm9tYW46IEEgbGl0dGxlIGJpdCBtb3JlIGNhcmUgaXMgcmVxdWlyZWQgaGVyZTogVGhlIENJTlZQIGluc3RydWN0aW9uCisgKiBpbnZhbGlkYXRlcyBjYWNoZSBlbnRyaWVzIFdJVEhPVVQgV1JJVElORyBESVJUWSBEQVRBIEJBQ0shIFNvIHRoZSBiZWdpbm5pbmcKKyAqIGFuZCB0aGUgZW5kIG9mIHRoZSByZWdpb24gbXVzdCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5IGlmIHRoZXkgYXJlIG5vdAorICogZXhhY3RseSBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhIHBhZ2UgYm91bmRhcnkuIEVsc2UsIG1heWJlIHRvbyBtdWNoCisgKiBkYXRhIGJlY29tZXMgaW52YWxpZGF0ZWQgYW5kIHRodXMgbG9zdCBmb3JldmVyLiBDUFVTSFAgZG9lcyB3aGF0IHdlIG5lZWQ6CisgKiBpdCBpbnZhbGlkYXRlcyB0aGUgcGFnZSBhZnRlciBwdXNoaW5nIGRpcnR5IGRhdGEgdG8gbWVtb3J5LiAoVGhhbmtzIHRvIEplcworICogZm9yIGRpc2NvdmVyaW5nIHRoZSBwcm9ibGVtISkKKyAqLworLyogLi4uIGJ1dCBvbiB0aGUgJzA2MCwgQ1BVU0ggZG9lc24ndCBpbnZhbGlkYXRlIChmb3IgdXMsIHNpbmNlIHdlIGhhdmUgc2V0CisgKiB0aGUgRFBJIGJpdCBpbiB0aGUgQ0FDUjsgd291bGQgaXQgY2F1c2UgcHJvYmxlbXMgd2l0aCB0ZW1wb3JhcmlseSBjaGFuZ2luZworICogdGhpcz8pLiBTbyB3ZSBoYXZlIHRvIHB1c2ggZmlyc3QgYW5kIHRoZW4gYWRkaXRpb25hbGx5IHRvIGludmFsaWRhdGUuCisgKi8KKworCisvKgorICogY2FjaGVfY2xlYXIoKSBzZW1hbnRpY3M6IENsZWFyIGFueSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgYXJlYSBpbiBxdWVzdGlvbiwKKyAqIHdpdGhvdXQgd3JpdGluZyBiYWNrIGRpcnR5IGVudHJpZXMgZmlyc3QuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBkYXRhIHdpbGwKKyAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSwgZS5nLiBieSBETUEgdG8gbWVtb3J5LiBUaGUgcmFuZ2UgaXMgZGVmaW5lZCBieSBhCisgKiBfcGh5c2ljYWxfIGFkZHJlc3MuCisgKi8KKwordm9pZCBjYWNoZV9jbGVhciAodW5zaWduZWQgbG9uZyBwYWRkciwgaW50IGxlbikKK3sKKyAgICBpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwlpbnQgdG1wOworCisJLyoKKwkgKiBXZSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGZvciB0aGUgZmlyc3QgcGFnZSwgaW4gY2FzZSBpdAorCSAqIGlzIG5vdCBwYWdlLWFsaWduZWQuIFBhZ2UgYWxpZ24gdGhlIGFkZHJlc3NlcyB0byB3b3JrCisJICogYXJvdW5kIGJ1ZyBJMTcgaW4gdGhlIDY4MDYwLgorCSAqLworCWlmICgodG1wID0gLXBhZGRyICYgKFBBR0VfU0laRSAtIDEpKSkgeworCSAgICBwdXNoY2wwNDAocGFkZHIgJiBQQUdFX01BU0spOworCSAgICBpZiAoKGxlbiAtPSB0bXApIDw9IDApCisJCXJldHVybjsKKwkgICAgcGFkZHIgKz0gdG1wOworCX0KKwl0bXAgPSBQQUdFX1NJWkU7CisJcGFkZHIgJj0gUEFHRV9NQVNLOworCXdoaWxlICgobGVuIC09IHRtcCkgPj0gMCkgeworCSAgICBjbGVhcjA0MChwYWRkcik7CisJICAgIHBhZGRyICs9IHRtcDsKKwl9CisJaWYgKChsZW4gKz0gdG1wKSkKKwkgICAgLyogYSBwYWdlIGJvdW5kYXJ5IGdldHMgY3Jvc3NlZCBhdCB0aGUgZW5kICovCisJICAgIHB1c2hjbDA0MChwYWRkcik7CisgICAgfQorICAgIGVsc2UgLyogNjgwMzAgb3IgNjgwMjAgKi8KKwlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlL2NhY3IsJS9kMFxuXHQiCisJCSAgICAgICJvcml3ICUwLCUvZDBcblx0IgorCQkgICAgICAibW92ZWMgJS9kMCwlL2NhY3IiCisJCSAgICAgIDogOiAiaSIgKEZMVVNIX0lfQU5EX0QpCisJCSAgICAgIDogImQwIik7CisjaWZkZWYgQ09ORklHX002OEtfTDJfQ0FDSEUKKyAgICBpZihtYWNoX2wyX2ZsdXNoKQorCW1hY2hfbDJfZmx1c2goMCk7CisjZW5kaWYKK30KKworCisvKgorICogY2FjaGVfcHVzaCgpIHNlbWFudGljczogV3JpdGUgYmFjayBhbnkgZGlydHkgY2FjaGUgZGF0YSBpbiB0aGUgZ2l2ZW4gYXJlYSwKKyAqIGFuZCBpbnZhbGlkYXRlIHRoZSByYW5nZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuIEl0IG5lZWRzIG5vdCAoYnV0IG1heSkKKyAqIGludmFsaWRhdGUgdGhvc2UgZW50cmllcyBhbHNvIGluIHRoZSBkYXRhIGNhY2hlLiBUaGUgcmFuZ2UgaXMgZGVmaW5lZCBieSBhCisgKiBfcGh5c2ljYWxfIGFkZHJlc3MuCisgKi8KKwordm9pZCBjYWNoZV9wdXNoICh1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQgbGVuKQoreworICAgIGlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCWludCB0bXAgPSBQQUdFX1NJWkU7CisKKwkvKgorICAgICAgICAgKiBvbiA2ODA0MCBvciA2ODA2MCwgcHVzaCBjYWNoZSBsaW5lcyBmb3IgcGFnZXMgaW4gdGhlIHJhbmdlOworCSAqIG9uIHRoZSAnMDQwIHRoaXMgYWxzbyBpbnZhbGlkYXRlcyB0aGUgcHVzaGVkIGxpbmVzLCBidXQgbm90IG9uCisJICogdGhlICcwNjAhCisJICovCisJbGVuICs9IHBhZGRyICYgKFBBR0VfU0laRSAtIDEpOworCisJLyoKKwkgKiBXb3JrIGFyb3VuZCBidWcgSTE3IGluIHRoZSA2ODA2MCBhZmZlY3Rpbmcgc29tZSBpbnN0cnVjdGlvbgorCSAqIGxpbmVzIG5vdCBiZWluZyBpbnZhbGlkYXRlZCBwcm9wZXJseS4KKwkgKi8KKwlwYWRkciAmPSBQQUdFX01BU0s7CisKKwlkbyB7CisJICAgIHB1c2gwNDAocGFkZHIpOworCSAgICBwYWRkciArPSB0bXA7CisJfSB3aGlsZSAoKGxlbiAtPSB0bXApID4gMCk7CisgICAgfQorICAgIC8qCisgICAgICogNjgwMzAvNjgwMjAgaGF2ZSBubyB3cml0ZWJhY2sgY2FjaGUuIE9uIHRoZSBvdGhlciBoYW5kLAorICAgICAqIGNhY2hlX3B1c2ggaXMgYWN0dWFsbHkgYSBzdXBlcnNldCBvZiBjYWNoZV9jbGVhciAodGhlIGxpbmVzCisgICAgICogZ2V0IHdyaXR0ZW4gYmFjayBhbmQgaW52YWxpZGF0ZWQpLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlCisgICAgICogdG8gcGVyZm9ybSB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb25zLiBBZnRlciBhbGwsIHRoaXMgaXMgZ2V0dGluZworICAgICAqIGNhbGxlZCBpbiBwbGFjZXMgd2hlcmUgd2UndmUganVzdCBsb2FkZWQgY29kZSwgb3Igd2hhdGV2ZXIsIHNvCisgICAgICogZmx1c2hpbmcgdGhlIGljYWNoZSBpcyBhcHByb3ByaWF0ZTsgZmx1c2hpbmcgdGhlIGRjYWNoZSBzaG91bGRuJ3QKKyAgICAgKiBiZSByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBlbHNlIC8qIDY4MDMwIG9yIDY4MDIwICovCisJYXNtIHZvbGF0aWxlICgibW92ZWMgJS9jYWNyLCUvZDBcblx0IgorCQkgICAgICAib3JpdyAlMCwlL2QwXG5cdCIKKwkJICAgICAgIm1vdmVjICUvZDAsJS9jYWNyIgorCQkgICAgICA6IDogImkiIChGTFVTSF9JKQorCQkgICAgICA6ICJkMCIpOworI2lmZGVmIENPTkZJR19NNjhLX0wyX0NBQ0hFCisgICAgaWYobWFjaF9sMl9mbHVzaCkKKwltYWNoX2wyX2ZsdXNoKDEpOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5c19zbG93KHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaWYgKENQVV9JU18wNjApIHsKKwkJbW1fc2VnbWVudF90IGZzID0gZ2V0X2ZzKCk7CisJCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisKKwkJc2V0X2ZzKGdldF9kcygpKTsKKworCQkvKiBUaGUgUExQQVIgaW5zdHJ1Y3Rpb24gY2F1c2VzIGFuIGFjY2VzcyBlcnJvciBpZiB0aGUgdHJhbnNsYXRpb24KKwkJICogaXMgbm90IHBvc3NpYmxlLiBUbyBjYXRjaCB0aGlzIHdlIHVzZSB0aGUgc2FtZSBleGNlcHRpb24gbWVjaGFuaXNtCisJCSAqIGFzIGZvciB1c2VyIHNwYWNlIGFjY2Vzc2VzIGluIDxhc20vdWFjY2Vzcy5oPi4gKi8KKwkJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNjBcbiIKKwkJCSAgICAgICIxOiBwbHBhciAoJTApXG4iCisJCQkgICAgICAiLmNoaXAgNjhrXG4iCisJCQkgICAgICAiMjpcbiIKKwkJCSAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCQkgICAgICAiICAgLmV2ZW5cbiIKKwkJCSAgICAgICIzOiBzdWIubCAlMCwlMFxuIgorCQkJICAgICAgIiAgIGpyYSAyYlxuIgorCQkJICAgICAgIi5wcmV2aW91c1xuIgorCQkJICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCSAgICAgICIgICAuYWxpZ24gNFxuIgorCQkJICAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJCQkgICAgICAiLnByZXZpb3VzIgorCQkJICAgICAgOiAiPWEiIChwYWRkcikKKwkJCSAgICAgIDogIjAiICh2YWRkcikpOworCQlzZXRfZnMoZnMpOworCQlyZXR1cm4gcGFkZHI7CisJfSBlbHNlIGlmIChDUFVfSVNfMDQwKSB7CisJCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOworCQl1bnNpZ25lZCBsb25nIG1tdXNyOworCisJCXNldF9mcyhnZXRfZHMoKSk7CisKKwkJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDBcblx0IgorCQkJICAgICAgInB0ZXN0ciAoJTEpXG5cdCIKKwkJCSAgICAgICJtb3ZlYyAlJW1tdXNyLCAlMFxuXHQiCisJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJICAgICAgOiAiPXIiIChtbXVzcikKKwkJCSAgICAgIDogImEiICh2YWRkcikpOworCQlzZXRfZnMoZnMpOworCisJCWlmIChtbXVzciAmIE1NVV9SXzA0MCkKKwkJCXJldHVybiAobW11c3IgJiBQQUdFX01BU0spIHwgKHZhZGRyICYgflBBR0VfTUFTSyk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgc2hvcnQgbW11c3I7CisJCXVuc2lnbmVkIGxvbmcgKmRlc2NhZGRyOworCisJCWFzbSB2b2xhdGlsZSAoInB0ZXN0ciAjNSwlMkAsIzcsJTBcblx0IgorCQkJICAgICAgInBtb3ZlICUlcHNyLCUxQCIKKwkJCSAgICAgIDogIj1hJiIgKGRlc2NhZGRyKQorCQkJICAgICAgOiAiYSIgKCZtbXVzciksICJhIiAodmFkZHIpKTsKKwkJaWYgKG1tdXNyICYgKE1NVV9JfE1NVV9CfE1NVV9MKSkKKwkJCXJldHVybiAwOworCQlkZXNjYWRkciA9IHBoeXNfdG9fdmlydCgodW5zaWduZWQgbG9uZylkZXNjYWRkcik7CisJCXN3aXRjaCAobW11c3IgJiBNTVVfTlVNKSB7CisJCWNhc2UgMToKKwkJCXJldHVybiAoKmRlc2NhZGRyICYgMHhmZTAwMDAwMCkgfCAodmFkZHIgJiAweDAxZmZmZmZmKTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuICgqZGVzY2FkZHIgJiAweGZmZmMwMDAwKSB8ICh2YWRkciAmIDB4MDAwM2ZmZmYpOworCQljYXNlIDM6CisJCQlyZXR1cm4gKCpkZXNjYWRkciAmIFBBR0VfTUFTSykgfCAodmFkZHIgJiB+UEFHRV9NQVNLKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogUHVzaCBuIHBhZ2VzIGF0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgYW5kIGNsZWFyIHRoZSBpY2FjaGUgKi8KKy8qIFJaOiB1c2UgY3B1c2ggJWJjIGluc3RlYWQgb2YgY3B1c2ggJWRjLCBjaW52ICVpYyAqLwordm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZGFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCWFkZHJlc3MgJj0gUEFHRV9NQVNLOworCisJCWlmIChhZGRyZXNzID49IFBBR0VfT0ZGU0VUICYmIGFkZHJlc3MgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkgeworCQkJZG8geworCQkJCWFzbSB2b2xhdGlsZSAoIm5vcFxuXHQiCisJCQkJCSAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJCSAgICAgICJjcHVzaHAgJSViYywoJTApXG5cdCIKKwkJCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCQkJICAgICAgOiA6ICJhIiAodmlydF90b19waHlzKCh2b2lkICopYWRkcmVzcykpKTsKKwkJCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCX0gd2hpbGUgKGFkZHJlc3MgPCBlbmRhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCWRvIHsKKwkJCQlhc20gdm9sYXRpbGUgKCJub3Bcblx0IgorCQkJCQkgICAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCQkgICAgICAiY3B1c2hwICUlYmMsKCUwKVxuXHQiCisJCQkJCSAgICAgICIuY2hpcCA2OGsiCisJCQkJCSAgICAgIDogOiAiYSIgKHZpcnRfdG9fcGh5c19zbG93KGFkZHJlc3MpKSk7CisJCQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCQl9IHdoaWxlIChhZGRyZXNzIDwgZW5kYWRkcik7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHRtcDsKKwkJYXNtIHZvbGF0aWxlICgibW92ZWMgJSVjYWNyLCUwXG5cdCIKKwkJCSAgICAgICJvcncgJTEsJTBcblx0IgorCQkJICAgICAgIm1vdmVjICUwLCUlY2FjciIKKwkJCSAgICAgIDogIj0mZCIgKHRtcCkKKwkJCSAgICAgIDogImRpIiAoRkxVU0hfSSkpOworCX0KK30KKworCisjaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCitpbnQgbW1fZW5kX29mX2NodW5rICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCisJCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyICsgbTY4a19tZW1vcnlbaV0uc2l6ZSA9PSBhZGRyICsgbGVuKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1NWZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogbGludXgvYXJjaC9tNjhrL21vdG9yb2xhLmMKKyAqCisgKiBSb3V0aW5lcyBzcGVjaWZpYyB0byB0aGUgTW90b3JvbGEgTU1VLCBvcmlnaW5hbGx5IGZyb206CisgKiBsaW51eC9hcmNoL202OGsvaW5pdC5jCisgKiB3aGljaCBhcmUgQ29weXJpZ2h0IChDKSAxOTk1IEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBNb3ZlZCA4LzIwLzE5OTkgU2FtIENyZWFzZXkKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaWZkZWYgQ09ORklHX0FUQVJJCisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisjZW5kaWYKKworI3VuZGVmIERFQlVHCisKKyNpZm5kZWYgbW1fY2FjaGViaXRzCisvKgorICogQml0cyB0byBhZGQgdG8gcGFnZSBkZXNjcmlwdG9ycyBmb3IgIm5vcm1hbCIgY2FjaGluZyBtb2RlLgorICogRm9yIDY4MDIwLzAzMCB0aGlzIGlzIDAuCisgKiBGb3IgNjgwNDAsIHRoaXMgaXMgX1BBR0VfQ0FDSEUwNDAgKGNhY2hhYmxlLCBjb3B5YmFjaykKKyAqLwordW5zaWduZWQgbG9uZyBtbV9jYWNoZWJpdHM7CitFWFBPUlRfU1lNQk9MKG1tX2NhY2hlYml0cyk7CisjZW5kaWYKKworc3RhdGljIHB0ZV90ICogX19pbml0IGtlcm5lbF9wYWdlX3RhYmxlKHZvaWQpCit7CisJcHRlX3QgKnB0YWJsZXA7CisKKwlwdGFibGVwID0gKHB0ZV90ICopYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKworCWNsZWFyX3BhZ2UocHRhYmxlcCk7CisJX19mbHVzaF9wYWdlX3RvX3JhbShwdGFibGVwKTsKKwlmbHVzaF90bGJfa2VybmVsX3BhZ2UocHRhYmxlcCk7CisJbm9jYWNoZV9wYWdlKHB0YWJsZXApOworCisJcmV0dXJuIHB0YWJsZXA7Cit9CisKK3N0YXRpYyBwbWRfdCAqbGFzdF9wZ3RhYmxlIF9faW5pdGRhdGEgPSBOVUxMOworcG1kX3QgKnplcm9fcGd0YWJsZSBfX2luaXRkYXRhID0gTlVMTDsKKworc3RhdGljIHBtZF90ICogX19pbml0IGtlcm5lbF9wdHJfdGFibGUodm9pZCkKK3sKKwlpZiAoIWxhc3RfcGd0YWJsZSkgeworCQl1bnNpZ25lZCBsb25nIHBtZCwgbGFzdDsKKwkJaW50IGk7CisKKwkJLyogRmluZCB0aGUgbGFzdCBwdHIgdGFibGUgdGhhdCB3YXMgdXNlZCBpbiBoZWFkLlMgYW5kCisJCSAqIHJldXNlIHRoZSByZW1haW5pbmcgc3BhY2UgaW4gdGhhdCBwYWdlIGZvciBmdXJ0aGVyCisJCSAqIHB0ciB0YWJsZXMuCisJCSAqLworCQlsYXN0ID0gKHVuc2lnbmVkIGxvbmcpa2VybmVsX3BnX2RpcjsKKwkJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrKSB7CisJCQlpZiAoIXBnZF9wcmVzZW50KGtlcm5lbF9wZ19kaXJbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJcG1kID0gX19wZ2RfcGFnZShrZXJuZWxfcGdfZGlyW2ldKTsKKwkJCWlmIChwbWQgPiBsYXN0KQorCQkJCWxhc3QgPSBwbWQ7CisJCX0KKworCQlsYXN0X3BndGFibGUgPSAocG1kX3QgKilsYXN0OworI2lmZGVmIERFQlVHCisJCXByaW50aygia2VybmVsX3B0cl9pbml0OiAlcFxuIiwgbGFzdF9wZ3RhYmxlKTsKKyNlbmRpZgorCX0KKworCWxhc3RfcGd0YWJsZSArPSBQVFJTX1BFUl9QTUQ7CisJaWYgKCgodW5zaWduZWQgbG9uZylsYXN0X3BndGFibGUgJiB+UEFHRV9NQVNLKSA9PSAwKSB7CisJCWxhc3RfcGd0YWJsZSA9IChwbWRfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisKKwkJY2xlYXJfcGFnZShsYXN0X3BndGFibGUpOworCQlfX2ZsdXNoX3BhZ2VfdG9fcmFtKGxhc3RfcGd0YWJsZSk7CisJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShsYXN0X3BndGFibGUpOworCQlub2NhY2hlX3BhZ2UobGFzdF9wZ3RhYmxlKTsKKwl9CisKKwlyZXR1cm4gbGFzdF9wZ3RhYmxlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQKK21hcF9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBsb25nIHNpemUpCit7CisjZGVmaW5lIFBUUlRSRUVTSVpFICgyNTYqMTAyNCkKKyNkZWZpbmUgUk9PVFRSRUVTSVpFICgzMioxMDI0KjEwMjQpCisJc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlydGFkZHIgPSBQQUdFX09GRlNFVDsKKwl1bnNpZ25lZCBsb25nIHBoeXNhZGRyOworCXBnZF90ICpwZ2RfZGlyOworCXBtZF90ICpwbWRfZGlyOworCXB0ZV90ICpwdGVfZGlyOworCisJcGh5c2FkZHIgPSAoYWRkciB8IG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUgfAorCQkgICAgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpOworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJcGh5c2FkZHIgfD0gX1BBR0VfR0xPQkFMMDQwOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKCEodmlydGFkZHIgJiAoUFRSVFJFRVNJWkUtMSkpKQorCQkJcHJpbnRrICgiXG5wYT0lI2x4IHZhPSUjbHggIiwgcGh5c2FkZHIgJiBQQUdFX01BU0ssCisJCQkJdmlydGFkZHIpOworI2VuZGlmCisJCXBnZF9kaXIgPSBwZ2Rfb2Zmc2V0X2sodmlydGFkZHIpOworCQlpZiAodmlydGFkZHIgJiYgQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJCWlmICghKHZpcnRhZGRyICYgKFJPT1RUUkVFU0laRS0xKSkgJiYKKwkJCSAgICBzaXplID49IFJPT1RUUkVFU0laRSkgeworI2lmZGVmIERFQlVHCisJCQkJcHJpbnRrICgiW3ZlcnkgZWFybHkgdGVybV0iKTsKKyNlbmRpZgorCQkJCXBnZF92YWwoKnBnZF9kaXIpID0gcGh5c2FkZHI7CisJCQkJc2l6ZSAtPSBST09UVFJFRVNJWkU7CisJCQkJdmlydGFkZHIgKz0gUk9PVFRSRUVTSVpFOworCQkJCXBoeXNhZGRyICs9IFJPT1RUUkVFU0laRTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2RfZGlyKSkgeworCQkJcG1kX2RpciA9IGtlcm5lbF9wdHJfdGFibGUoKTsKKyNpZmRlZiBERUJVRworCQkJcHJpbnRrICgiW25ldyBwb2ludGVyICVwXSIsIHBtZF9kaXIpOworI2VuZGlmCisJCQlwZ2Rfc2V0KHBnZF9kaXIsIHBtZF9kaXIpOworCQl9IGVsc2UKKwkJCXBtZF9kaXIgPSBwbWRfb2Zmc2V0KHBnZF9kaXIsIHZpcnRhZGRyKTsKKworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJCWlmICh2aXJ0YWRkcikgeworI2lmZGVmIERFQlVHCisJCQkJcHJpbnRrICgiW2Vhcmx5IHRlcm1dIik7CisjZW5kaWYKKwkJCQlwbWRfZGlyLT5wbWRbKHZpcnRhZGRyL1BUUlRSRUVTSVpFKSAmIDE1XSA9IHBoeXNhZGRyOworCQkJCXBoeXNhZGRyICs9IFBUUlRSRUVTSVpFOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgaTsKKyNpZmRlZiBERUJVRworCQkJCXByaW50ayAoIlt6ZXJvIG1hcF0iKTsKKyNlbmRpZgorCQkJCXplcm9fcGd0YWJsZSA9IGtlcm5lbF9wdHJfdGFibGUoKTsKKwkJCQlwdGVfZGlyID0gKHB0ZV90ICopemVyb19wZ3RhYmxlOworCQkJCXBtZF9kaXItPnBtZFswXSA9IHZpcnRfdG9fcGh5cyhwdGVfZGlyKSB8CisJCQkJCV9QQUdFX1RBQkxFIHwgX1BBR0VfQUNDRVNTRUQ7CisJCQkJcHRlX3ZhbCgqcHRlX2RpcisrKSA9IDA7CisJCQkJcGh5c2FkZHIgKz0gUEFHRV9TSVpFOworCQkJCWZvciAoaSA9IDE7IGkgPCA2NDsgcGh5c2FkZHIgKz0gUEFHRV9TSVpFLCBpKyspCisJCQkJCXB0ZV92YWwoKnB0ZV9kaXIrKykgPSBwaHlzYWRkcjsKKwkJCX0KKwkJCXNpemUgLT0gUFRSVFJFRVNJWkU7CisJCQl2aXJ0YWRkciArPSBQVFJUUkVFU0laRTsKKwkJfSBlbHNlIHsKKwkJCWlmICghcG1kX3ByZXNlbnQoKnBtZF9kaXIpKSB7CisjaWZkZWYgREVCVUcKKwkJCQlwcmludGsgKCJbbmV3IHRhYmxlXSIpOworI2VuZGlmCisJCQkJcHRlX2RpciA9IGtlcm5lbF9wYWdlX3RhYmxlKCk7CisJCQkJcG1kX3NldChwbWRfZGlyLCBwdGVfZGlyKTsKKwkJCX0KKwkJCXB0ZV9kaXIgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfZGlyLCB2aXJ0YWRkcik7CisKKwkJCWlmICh2aXJ0YWRkcikgeworCQkJCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9kaXIpKQorCQkJCQlwdGVfdmFsKCpwdGVfZGlyKSA9IHBoeXNhZGRyOworCQkJfSBlbHNlCisJCQkJcHRlX3ZhbCgqcHRlX2RpcikgPSAwOworCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCQl2aXJ0YWRkciArPSBQQUdFX1NJWkU7CisJCQlwaHlzYWRkciArPSBQQUdFX1NJWkU7CisJCX0KKworCX0KKyNpZmRlZiBERUJVRworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIHZpcnRhZGRyOworfQorCisvKgorICogcGFnaW5nX2luaXQoKSBjb250aW51ZXMgdGhlIHZpcnR1YWwgbWVtb3J5IGVudmlyb25tZW50IHNldHVwIHdoaWNoCisgKiB3YXMgYmVndW4gYnkgdGhlIGNvZGUgaW4gYXJjaC9oZWFkLlMuCisgKi8KK3ZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCit7CisJaW50IGNodW5rOworCXVuc2lnbmVkIGxvbmcgbWVtX2F2YWlsID0gMDsKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbM10gPSB7IDAsIH07CisKKyNpZmRlZiBERUJVRworCXsKKwkJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXZhaWxtZW07CisJCXByaW50ayAoInN0YXJ0IG9mIHBhZ2luZ19pbml0ICglcCwgJWx4LCAlbHgsICVseClcbiIsCisJCQlrZXJuZWxfcGdfZGlyLCBhdmFpbG1lbSwgc3RhcnRfbWVtLCBlbmRfbWVtKTsKKwl9CisjZW5kaWYKKworCS8qIEZpeCB0aGUgY2FjaGUgbW9kZSBpbiB0aGUgcGFnZSBkZXNjcmlwdG9ycyBmb3IgdGhlIDY4MFs0Nl0wLiAgKi8KKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwkJaW50IGk7CisjaWZuZGVmIG1tX2NhY2hlYml0cworCQltbV9jYWNoZWJpdHMgPSBfUEFHRV9DQUNIRTA0MDsKKyNlbmRpZgorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCXBncHJvdF92YWwocHJvdGVjdGlvbl9tYXBbaV0pIHw9IF9QQUdFX0NBQ0hFMDQwOworCX0KKworCS8qCisJICogTWFwIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXZhaWxhYmxlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCisJICogYWRkcmVzcyBzcGFjZS4gIEl0IG1heSBhbGxvY2F0ZSBzb21lIG1lbW9yeSBmb3IgcGFnZQorCSAqIHRhYmxlcyBhbmQgdGh1cyBtb2RpZnkgYXZhaWxtZW0uCisJICovCisKKwlmb3IgKGNodW5rID0gMDsgY2h1bmsgPCBtNjhrX251bV9tZW1vcnk7IGNodW5rKyspIHsKKwkJbWVtX2F2YWlsID0gbWFwX2NodW5rIChtNjhrX21lbW9yeVtjaHVua10uYWRkciwKKwkJCQkgICAgICAgbTY4a19tZW1vcnlbY2h1bmtdLnNpemUpOworCisJfQorCisJZmx1c2hfdGxiX2FsbCgpOworI2lmZGVmIERFQlVHCisJcHJpbnRrICgibWVtb3J5IGF2YWlsYWJsZSBpcyAlbGRLQlxuIiwgbWVtX2F2YWlsID4+IDEwKTsKKwlwcmludGsgKCJzdGFydF9tZW0gaXMgJSNseFxudmlydHVhbF9lbmQgaXMgJSNseFxuIiwKKwkJc3RhcnRfbWVtLCBlbmRfbWVtKTsKKyNlbmRpZgorCisJLyoKKwkgKiBpbml0aWFsaXplIHRoZSBiYWQgcGFnZSB0YWJsZSBhbmQgYmFkIHBhZ2UgdG8gcG9pbnQKKwkgKiB0byBhIGNvdXBsZSBvZiBhbGxvY2F0ZWQgcGFnZXMKKwkgKi8KKwllbXB0eV96ZXJvX3BhZ2UgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJbWVtc2V0KGVtcHR5X3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKKworCS8qCisJICogU2V0IHVwIFNGQy9ERkMgcmVnaXN0ZXJzCisJICovCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKyNpZmRlZiBERUJVRworCXByaW50ayAoImJlZm9yZSBmcmVlX2FyZWFfaW5pdFxuIik7CisjZW5kaWYKKwl6b25lc19zaXplWzBdID0gKG1hY2hfbWF4X2RtYV9hZGRyZXNzIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgPworCQkJIChtYWNoX21heF9kbWFfYWRkcmVzcysxKSA6ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KTsKKwl6b25lc19zaXplWzFdID0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSB6b25lc19zaXplWzBdOworCisJem9uZXNfc2l6ZVswXSA9ICh6b25lc19zaXplWzBdIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQ7CisJem9uZXNfc2l6ZVsxXSA+Pj0gUEFHRV9TSElGVDsKKworCWZyZWVfYXJlYV9pbml0KHpvbmVzX3NpemUpOworfQorCitleHRlcm4gY2hhciBfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQ7CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW47CisJZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykmX19pbml0X2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJdmlydF90b19wYWdlKGFkZHIpLT5mbGFncyAmPSB+KDEgPDwgUEdfcmVzZXJ2ZWQpOworCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9zdW4za21hcC5jIGIvYXJjaC9tNjhrL21tL3N1bjNrbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwZDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9zdW4za21hcC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogbGludXgvYXJjaC9tNjhrL21tL3N1bjNrbWFwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgU2FtIENyZWFzZXkgPHNhbW15QHNhbW15Lm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKworI3VuZGVmIFNVTjNfS01BUF9ERUJVRworCisjaWZkZWYgU1VOM19LTUFQX0RFQlVHCitleHRlcm4gdm9pZCBwcmludF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkcik7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgbW11X2VtdV9tYXBfcG1lZyAoaW50IGNvbnRleHQsIGludCB2YWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19wYWdlX21hcGluKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJCSB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBwdGU7CisJcHRlX3QgcHRlcDsKKworCXB0ZXAgPSBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpOworCXB0ZSA9IHB0ZV92YWwocHRlcCk7CisJcHRlIHw9IHR5cGU7CisKKwlzdW4zX3B1dF9wdGUodmlydCwgcHRlKTsKKworI2lmZGVmIFNVTjNfS01BUF9ERUJVRworCXByaW50X3B0ZV92YWRkcih2aXJ0KTsKKyNlbmRpZgorCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19wbWVnX21hcGluKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJCSB1bnNpZ25lZCBsb25nIHR5cGUsIGludCBwYWdlcykKK3sKKworCWlmKHN1bjNfZ2V0X3NlZ21hcCh2aXJ0ICYgflNVTjNfUE1FR19NQVNLKSA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJbW11X2VtdV9tYXBfcG1lZyhzdW4zX2dldF9jb250ZXh0KCksIHZpcnQpOworCisJd2hpbGUocGFnZXMpIHsKKwkJZG9fcGFnZV9tYXBpbihwaHlzLCB2aXJ0LCB0eXBlKTsKKwkJcGh5cyArPSBQQUdFX1NJWkU7CisJCXZpcnQgKz0gUEFHRV9TSVpFOworCQlwYWdlcy0tOworCX0KK30KKwordm9pZCAqc3VuM19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgdmlydCwgcmV0OworCWludCBwYWdlczsKKworCWlmKCFzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHBhZ2UgYWxpZ24gKi8KKwlvZmZzZXQgPSBwaHlzICYgKFBBR0VfU0laRS0xKTsKKwlwaHlzICY9IH4oUEFHRV9TSVpFLTEpOworCisJc2l6ZSArPSBvZmZzZXQ7CisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJaWYoKGFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBTVU4zX0tNQVBfREVCVUcKKwlwcmludGsoImlvcmVtYXA6IGdvdCB2aXJ0ICVwIHNpemUgJWx4KCVseClcbiIsCisJICAgICAgIGFyZWEtPmFkZHIsIHNpemUsIGFyZWEtPnNpemUpOworI2VuZGlmCisKKwlwYWdlcyA9IHNpemUgLyBQQUdFX1NJWkU7CisJdmlydCA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CisJcmV0ID0gdmlydCArIG9mZnNldDsKKworCXdoaWxlKHBhZ2VzKSB7CisJCWludCBzZWdfcGFnZXM7CisKKwkJc2VnX3BhZ2VzID0gKFNVTjNfUE1FR19TSVpFIC0gKHZpcnQgJiBTVU4zX1BNRUdfTUFTSykpIC8gUEFHRV9TSVpFOworCQlpZihzZWdfcGFnZXMgPiBwYWdlcykKKwkJCXNlZ19wYWdlcyA9IHBhZ2VzOworCisJCWRvX3BtZWdfbWFwaW4ocGh5cywgdmlydCwgdHlwZSwgc2VnX3BhZ2VzKTsKKworCQlwYWdlcyAtPSBzZWdfcGFnZXM7CisJCXBoeXMgKz0gc2VnX3BhZ2VzICogUEFHRV9TSVpFOworCQl2aXJ0ICs9IHNlZ19wYWdlcyAqIFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gKHZvaWQgKilyZXQ7CisKK30KKworCit2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBjYWNoZSkKK3sKKworCXJldHVybiBzdW4zX2lvcmVtYXAocGh5cywgc2l6ZSwgU1VOM19QQUdFX1RZUEVfSU8pOworCit9CisKK3ZvaWQgaW91bm1hcCh2b2lkICphZGRyKQoreworCXZmcmVlKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKWFkZHIpKTsKK30KKworLyogc3VuM19tYXBfdGVzdChhZGRyLCB2YWwpIC0tIFJlYWRzIGEgYnl0ZSBmcm9tIGFkZHIsIHN0b3JpbmcgdG8gdmFsLAorICogdHJhcHBpbmcgdGhlIHBvdGVudGlhbCByZWFkIGZhdWx0LiAgUmV0dXJucyAwIGlmIHRoZSBhY2Nlc3MgZmF1bHRlZCwKKyAqIDEgb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIHRvIGNoZWNrIGFkZHJlc3NlcyBvbiB0aGUgVk1FIGJ1cy4KKyAqCisgKiBNdWNraW5nIHdpdGggdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBzZWVtcyBhIGxpdHRsZSBoYWNraXNoIHRvIG1lLCBidXQKKyAqIFN1bk9TLCBOZXRCU0QsIGFuZCBNYWNoIGFsbCBpbXBsZW1lbnRlZCB0aGlzIGNoZWNrIGluIHN1Y2ggYSBtYW5uZXIsCisgKiBzbyBJIGZpZ3VyZSB3ZSdyZSBhbGxvd2VkLgorICovCitpbnQgc3VuM19tYXBfdGVzdCh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnZhbCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fCisJCSgiLmdsb2JsIF9zdW4zX21hcF90ZXN0X3N0YXJ0XG4iCisJCSAiX3N1bjNfbWFwX3Rlc3Rfc3RhcnQ6XG4iCisJCSAiMTogbW92ZWIgKCUyKSwgKCUwKVxuIgorCQkgIiAgIG1vdmVxICMxLCAlMVxuIgorCQkgIjI6XG4iCisJCSAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkgIi5ldmVuXG4iCisJCSAiMzogbW92ZXEgIzAsICUxXG4iCisJCSAiICAgam1wIDJiXG4iCisJCSAiLnByZXZpb3VzXG4iCisJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkgIi5hbGlnbiA0XG4iCisJCSAiLmxvbmcgMWIsM2JcbiIKKwkJICIucHJldmlvdXNcbiIKKwkJICIuZ2xvYmwgX3N1bjNfbWFwX3Rlc3RfZW5kXG4iCisJCSAiX3N1bjNfbWFwX3Rlc3RfZW5kOlxuIgorCQkgOiAiPWEiKHZhbCksICI9ciIocmV0KQorCQkgOiAiYSIoYWRkcikpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9zdW4zbW11LmMgYi9hcmNoL202OGsvbW0vc3VuM21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2JlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0vc3VuM21tdS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogbGludXgvYXJjaC9tNjhrL21tL3N1bjNtbXUuYworICoKKyAqIEltcGxlbWVudGF0aW9ucyBvZiBtbSByb3V0aW5lcyBzcGVjaWZpYyB0byB0aGUgc3VuMyBNTVUuCisgKgorICogTW92ZWQgaGVyZSA4LzIwLzE5OTkgU2FtIENyZWFzZXkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2V4dGVybiB2b2lkIG1tdV9lbXVfaW5pdCAodW5zaWduZWQgbG9uZyBib290bWVtX2VuZCk7CisKK2NvbnN0IGNoYXIgYmFkX3BtZF9zdHJpbmdbXSA9ICJCYWQgcG1kIGluIHB0ZV9hbGxvYzogJTA4bHhcbiI7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKKwordm9pZCBmcmVlX2luaXRtZW0odm9pZCkKK3sKK30KKworLyogRm9yIHRoZSBzdW4zIHdlIHRyeSB0byBmb2xsb3cgdGhlIGkzODYgcGFnaW5nX2luaXQoKSBtb3JlIGNsb3NlbHkgKi8KKy8qIHN0YXJ0X21lbSBhbmQgZW5kX21lbSBoYXZlIFBBR0VfT0ZGU0VUIGFkZGVkIGFscmVhZHkgKi8KKy8qIG5vdyBzZXRzIHVwIHRhYmxlcyB1c2luZyBzdW4zIFBURXMgcmF0aGVyIHRoYW4gaTM4NiBhcyBiZWZvcmUuIC0tbSAqLwordm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3sKKwlwZ2RfdCAqIHBnX2RpcjsKKwlwdGVfdCAqIHBnX3RhYmxlOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIG5leHRfcGd0YWJsZTsKKwl1bnNpZ25lZCBsb25nIGJvb3RtZW1fZW5kOworCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVszXSA9IHswLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKworI2lmZGVmIFRFU1RfVkVSSUZZX0FSRUEKKwl3cF93b3Jrc19vayA9IDA7CisjZW5kaWYKKwllbXB0eV96ZXJvX3BhZ2UgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJbWVtc2V0KGVtcHR5X3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKKworCWFkZHJlc3MgPSBQQUdFX09GRlNFVDsKKwlwZ19kaXIgPSBzd2FwcGVyX3BnX2RpcjsKKwltZW1zZXQgKHN3YXBwZXJfcGdfZGlyLCAwLCBzaXplb2YgKHN3YXBwZXJfcGdfZGlyKSk7CisJbWVtc2V0IChrZXJuZWxfcGdfZGlyLCAgMCwgc2l6ZW9mIChrZXJuZWxfcGdfZGlyKSk7CisKKwlzaXplID0gbnVtX3BhZ2VzICogc2l6ZW9mKHB0ZV90KTsKKwlzaXplID0gKHNpemUgKyBQQUdFX1NJWkUpICYgfihQQUdFX1NJWkUtMSk7CisKKwluZXh0X3BndGFibGUgPSAodW5zaWduZWQgbG9uZylhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpOworCWJvb3RtZW1fZW5kID0gKG5leHRfcGd0YWJsZSArIHNpemUgKyBQQUdFX1NJWkUpICYgUEFHRV9NQVNLOworCisJLyogTWFwIHdob2xlIG1lbW9yeSBmcm9tIFBBR0VfT0ZGU0VUICgweDBFMDAwMDAwKSAqLworCXBnX2RpciArPSBQQUdFX09GRlNFVCA+PiBQR0RJUl9TSElGVDsKKworCXdoaWxlIChhZGRyZXNzIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpIHsKKwkJcGdfdGFibGUgPSAocHRlX3QgKikgX19wYSAobmV4dF9wZ3RhYmxlKTsKKwkJbmV4dF9wZ3RhYmxlICs9IFBUUlNfUEVSX1BURSAqIHNpemVvZiAocHRlX3QpOworCQlwZ2RfdmFsKCpwZ19kaXIpID0gKHVuc2lnbmVkIGxvbmcpIHBnX3RhYmxlOworCQlwZ19kaXIrKzsKKworCQkvKiBub3cgY2hhbmdlIHBnX3RhYmxlIHRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyAqLworCQlwZ190YWJsZSA9IChwdGVfdCAqKSBfX3ZhICgodW5zaWduZWQgbG9uZykgcGdfdGFibGUpOworCQlmb3IgKGk9MDsgaTxQVFJTX1BFUl9QVEU7ICsraSwgKytwZ190YWJsZSkgeworCQkJcHRlX3QgcHRlID0gcGZuX3B0ZSh2aXJ0X3RvX3BmbihhZGRyZXNzKSwgUEFHRV9JTklUKTsKKwkJCWlmIChhZGRyZXNzID49ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQorCQkJCXB0ZV92YWwgKHB0ZSkgPSAwOworCQkJc2V0X3B0ZSAocGdfdGFibGUsIHB0ZSk7CisJCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJfQorCX0KKworCW1tdV9lbXVfaW5pdChib290bWVtX2VuZCk7CisKKwljdXJyZW50LT5tbSA9IE5VTEw7CisKKwkvKiBtZW1vcnkgc2l6aW5nIGlzIGEgaGFjayBzdG9sZW4gZnJvbSBtb3Rvcm9sYS5jLi4gIGhvcGUgaXQgd29ya3MgZm9yIHVzICovCisJem9uZXNfc2l6ZVswXSA9ICgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOworCXpvbmVzX3NpemVbMV0gPSAwOworCisJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE0Ny8xNDdpbnRzLmMgYi9hcmNoL202OGsvbXZtZTE0Ny8xNDdpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNzQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTQ3LzE0N2ludHMuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIGFyY2gvbTY4ay9tdm1lMTQ3LzE0N2ludHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEhpcnN0IFtyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWtdCisgKgorICogYmFzZWQgb24gYW1paW50cy5jIC0tIEFtaWdhIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTE0N19kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKKy8qCisgKiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIDQgZWxlbWVudHMgb25seSwgZm9yIHNwZWVkLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdm9pZAkJKmRldl9pZDsKKwljb25zdCBjaGFyCSpkZXZuYW1lOworCXVuc2lnbmVkCWNvdW50OworfSBpcnFfdGFiWzI1Nl07CisKKy8qCisgKiB2b2lkIG12bWUxNDdfaW5pdF9JUlEgKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcga2VybmVsIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZQorICogdGhlIG12bWUxNDcgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgorICovCisKK3ZvaWQgbXZtZTE0N19pbml0X0lSUSAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpcnFfdGFiW2ldLmhhbmRsZXIgPSBtdm1lMTQ3X2RlZmhhbmQ7CisJCWlycV90YWJbaV0uZmxhZ3MgPSBJUlFfRkxHX1NURDsKKwkJaXJxX3RhYltpXS5kZXZfaWQgPSBOVUxMOworCQlpcnFfdGFiW2ldLmRldm5hbWUgPSBOVUxMOworCQlpcnFfdGFiW2ldLmNvdW50ID0gMDsKKwl9Cit9CisKK2ludCBtdm1lMTQ3X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxID4gMjU1KSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWQgZnJvbSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlpZiAoIShpcnFfdGFiW2lycV0uZmxhZ3MgJiBJUlFfRkxHX1NURCkpIHsKKwkJaWYgKGlycV90YWJbaXJxXS5mbGFncyAmIElSUV9GTEdfTE9DSykgeworCQkJcHJpbnRrKCIlczogSVJRICVkIGZyb20gJXMgaXMgbm90IHJlcGxhY2VhYmxlXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycV0uZGV2bmFtZSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmIChmbGFncyAmIElSUV9GTEdfUkVQTEFDRSkgeworCQkJcHJpbnRrKCIlczogJXMgY2FuJ3QgcmVwbGFjZSBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldm5hbWUsIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpcnFfdGFiW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJaXJxX3RhYltpcnFdLmZsYWdzICAgPSBmbGFnczsKKwlpcnFfdGFiW2lycV0uZGV2X2lkICA9IGRldl9pZDsKKwlpcnFfdGFiW2lycV0uZGV2bmFtZSA9IGRldm5hbWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXZtZTE0N19mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA+IDI1NSkgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisJaWYgKGlycV90YWJbaXJxXS5kZXZfaWQgIT0gZGV2X2lkKQorCQlwcmludGsoIiVzOiBSZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycV0uZGV2bmFtZSk7CisKKwlpcnFfdGFiW2lycV0uaGFuZGxlciA9IG12bWUxNDdfZGVmaGFuZDsKKwlpcnFfdGFiW2lycV0uZmxhZ3MgICA9IElSUV9GTEdfU1REOworCWlycV90YWJbaXJxXS5kZXZfaWQgID0gTlVMTDsKKwlpcnFfdGFiW2lycV0uZGV2bmFtZSA9IE5VTEw7Cit9CisKK2lycXJldHVybl90IG12bWUxNDdfcHJvY2Vzc19pbnQgKHVuc2lnbmVkIGxvbmcgdmVjLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYgKHZlYyA+IDI1NSkgeworCQlwcmludGsgKCJtdm1lMTQ3X3Byb2Nlc3NfaW50OiBJbGxlZ2FsIHZlY3RvciAlbGRcbiIsIHZlYyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQlpcnFfdGFiW3ZlY10uY291bnQrKzsKKwkJaXJxX3RhYlt2ZWNdLmhhbmRsZXIodmVjLCBpcnFfdGFiW3ZlY10uZGV2X2lkLCBmcCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9Cit9CisKK2ludCBzaG93X212bWUxNDdfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWlmIChpcnFfdGFiW2ldLmNvdW50KQorCQkJc2VxX3ByaW50ZihwLCAiVmVjIDB4JTAyeDogJThkICAlc1xuIiwKKwkJCSAgICBpLCBpcnFfdGFiW2ldLmNvdW50LAorCQkJICAgIGlycV90YWJbaV0uZGV2bmFtZSA/IGlycV90YWJbaV0uZGV2bmFtZSA6ICJmcmVlIik7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMTQ3X2RlZmhhbmQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXByaW50ayAoIlVua25vd24gaW50ZXJydXB0IDB4JTAyeFxuIiwgaXJxKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3ZvaWQgbXZtZTE0N19lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCisKK3ZvaWQgbXZtZTE0N19kaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNDcvTWFrZWZpbGUgYi9hcmNoL202OGsvbXZtZTE0Ny9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDE1M2VkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL212bWUxNDcvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvbXZtZTE0NyBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyAxNDdpbnRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTQ3L2NvbmZpZy5jIGIvYXJjaC9tNjhrL212bWUxNDcvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjZjk3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTQ3L2NvbmZpZy5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogIGFyY2gvbTY4ay9tdm1lMTQ3L2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiBEYXZlIEZyYXNjb25lIFtjaGFvc0BtaW5kc3ByaW5nLmNvbV0KKyAqICBDbG9uZWQgZnJvbSAgICAgICAgUmljaGFyZCBIaXJzdCBbcmljaGFyZEBzbGVlcGllLmRlbW9uLmNvLnVrXQorICoKKyAqIEJhc2VkIG9uOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTMgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9tdm1lMTQ3aHcuaD4KKworCitleHRlcm4gaXJxcmV0dXJuX3QgbXZtZTE0N19wcm9jZXNzX2ludCAoaW50IGxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBtdm1lMTQ3X2luaXRfSVJRICh2b2lkKTsKK2V4dGVybiB2b2lkIG12bWUxNDdfZnJlZV9pcnEgKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKK2V4dGVybiBpbnQgIHNob3dfbXZtZTE0N19pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG12bWUxNDdfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIG12bWUxNDdfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBtdm1lMTQ3X2dldF9tb2RlbChjaGFyICptb2RlbCk7CitzdGF0aWMgaW50ICBtdm1lMTQ3X2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gaW50IG12bWUxNDdfcmVxdWVzdF9pcnEgKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgbXZtZTE0N19zY2hlZF9pbml0KGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG12bWUxNDdfZ2V0dGltZW9mZnNldCAodm9pZCk7CitleHRlcm4gaW50IG12bWUxNDdfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIGludCBtdm1lMTQ3X3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG12bWUxNDdfcmVzZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgbXZtZTE0N193YWl0YnV0KHZvaWQpOworCisKK3N0YXRpYyBpbnQgYmNkMmludCAodW5zaWduZWQgY2hhciBiKTsKKworLyogU2F2ZSB0aWNrIGhhbmRsZXIgcm91dGluZSBwb2ludGVyLCB3aWxsIHBvaW50IHRvIGRvX3RpbWVyKCkgaW4KKyAqIGtlcm5lbC9zY2hlZC5jLCBjYWxsZWQgdmlhIG12bWUxNDdfcHJvY2Vzc19pbnQoKSAqLworCitpcnFyZXR1cm5fdCAoKnRpY2tfaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCisKK2ludCBtdm1lMTQ3X3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKmJpKQoreworCWlmIChiaS0+dGFnID09IEJJX1ZNRV9UWVBFIHx8IGJpLT50YWcgPT0gQklfVk1FX0JSRElORk8pCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3ZvaWQgbXZtZTE0N19yZXNldCh2b2lkKQoreworCXByaW50ayAoIlxyXG5cbkNhbGxlZCBtdm1lMTQ3X3Jlc2V0XHJcbiIpOworCW0xNDdfcGNjLT53YXRjaGRvZyA9IDB4MGE7CS8qIENsZWFyIHRpbWVyICovCisJbTE0N19wY2MtPndhdGNoZG9nID0gMHhhNTsJLyogRW5hYmxlIHdhdGNoZG9nIC0gMTAwbXMgdG8gcmVzZXQgKi8KKwl3aGlsZSAoMSkKKwkJOworfQorCitzdGF0aWMgdm9pZCBtdm1lMTQ3X2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKwlzcHJpbnRmKG1vZGVsLCAiTW90b3JvbGEgTVZNRTE0NyIpOworfQorCisKK3N0YXRpYyBpbnQgbXZtZTE0N19nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisJKmJ1ZmZlciA9ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCBjb25maWdfbXZtZTE0Nyh2b2lkKQoreworCW1hY2hfbWF4X2RtYV9hZGRyZXNzCT0gMHgwMTAwMDAwMDsKKwltYWNoX3NjaGVkX2luaXQJCT0gbXZtZTE0N19zY2hlZF9pbml0OworCW1hY2hfaW5pdF9JUlEJCT0gbXZtZTE0N19pbml0X0lSUTsKKwltYWNoX2dldHRpbWVvZmZzZXQJPSBtdm1lMTQ3X2dldHRpbWVvZmZzZXQ7CisJbWFjaF9od2NsawkJPSBtdm1lMTQ3X2h3Y2xrOworCW1hY2hfc2V0X2Nsb2NrX21tc3MJPSBtdm1lMTQ3X3NldF9jbG9ja19tbXNzOworCW1hY2hfcmVzZXQJCT0gbXZtZTE0N19yZXNldDsKKwltYWNoX2ZyZWVfaXJxCQk9IG12bWUxNDdfZnJlZV9pcnE7CisJbWFjaF9wcm9jZXNzX2ludAk9IG12bWUxNDdfcHJvY2Vzc19pbnQ7CisJbWFjaF9nZXRfaXJxX2xpc3QJPSBzaG93X212bWUxNDdfaW50ZXJydXB0czsKKwltYWNoX3JlcXVlc3RfaXJxCT0gbXZtZTE0N19yZXF1ZXN0X2lycTsKKwllbmFibGVfaXJxCQk9IG12bWUxNDdfZW5hYmxlX2lycTsKKwlkaXNhYmxlX2lycQkJPSBtdm1lMTQ3X2Rpc2FibGVfaXJxOworCW1hY2hfZ2V0X21vZGVsCQk9IG12bWUxNDdfZ2V0X21vZGVsOworCW1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QJPSBtdm1lMTQ3X2dldF9oYXJkd2FyZV9saXN0OworCisJLyogQm9hcmQgdHlwZSBpcyBvbmx5IHNldCBieSBuZXdlciB2ZXJzaW9ucyBvZiB2bWVsaWxvL3RmdHBsaWxvICovCisJaWYgKCF2bWVfYnJkdHlwZSkKKwkJdm1lX2JyZHR5cGUgPSBWTUVfVFlQRV9NVk1FMTQ3OworfQorCisKKy8qIFVzaW5nIHBjYyB0aWNrIHRpbWVyIDEgKi8KKworc3RhdGljIGlycXJldHVybl90IG12bWUxNDdfdGltZXJfaW50IChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwltMTQ3X3BjYy0+dDFfaW50X2NudHJsID0gUENDX1RJTUVSX0lOVF9DTFI7CisJbTE0N19wY2MtPnQxX2ludF9jbnRybCA9IFBDQ19JTlRfRU5BQnxQQ0NfTEVWRUxfVElNRVIxOworCXJldHVybiB0aWNrX2hhbmRsZXIoaXJxLCBkZXZfaWQsIGZwKTsKK30KKworCit2b2lkIG12bWUxNDdfc2NoZWRfaW5pdCAoaXJxcmV0dXJuX3QgKCp0aW1lcl9yb3V0aW5lKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisJdGlja19oYW5kbGVyID0gdGltZXJfcm91dGluZTsKKwlyZXF1ZXN0X2lycSAoUENDX0lSUV9USU1FUjEsIG12bWUxNDdfdGltZXJfaW50LAorCQlJUlFfRkxHX1JFUExBQ0UsICJ0aW1lciAxIiwgTlVMTCk7CisKKwkvKiBJbml0IHRoZSBjbG9jayB3aXRoIGEgdmFsdWUgKi8KKwkvKiBvdXIgY2xvY2sgZ29lcyBvZmYgZXZlcnkgNi4yNXVzICovCisJbTE0N19wY2MtPnQxX3ByZWxvYWQgPSBQQ0NfVElNRVJfUFJFTE9BRDsKKwltMTQ3X3BjYy0+dDFfY250cmwgPSAweDA7CS8qIGNsZWFyIHRpbWVyICovCisJbTE0N19wY2MtPnQxX2NudHJsID0gMHgzOwkvKiBzdGFydCB0aW1lciAqLworCW0xNDdfcGNjLT50MV9pbnRfY250cmwgPSBQQ0NfVElNRVJfSU5UX0NMUjsgIC8qIGNsZWFyIHBlbmRpbmcgaW50cyAqLworCW0xNDdfcGNjLT50MV9pbnRfY250cmwgPSBQQ0NfSU5UX0VOQUJ8UENDX0xFVkVMX1RJTUVSMTsKK30KKworLyogVGhpcyBpcyBhbHdheXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgKi8KKy8qIFhYWCBUaGVyZSBhcmUgcmFjZSBoYXphcmRzIGluIHRoaXMgY29kZSBYWFggKi8KK3Vuc2lnbmVkIGxvbmcgbXZtZTE0N19nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpjcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKTB4ZmZmZTEwMTI7CisJdW5zaWduZWQgc2hvcnQgbjsKKworCW4gPSAqY3A7CisJd2hpbGUgKG4gIT0gKmNwKQorCQluID0gKmNwOworCisJbiAtPSBQQ0NfVElNRVJfUFJFTE9BRDsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbiAqIDI1IC8gNDsKK30KKworc3RhdGljIGludCBiY2QyaW50ICh1bnNpZ25lZCBjaGFyIGIpCit7CisJcmV0dXJuICgoYj4+NCkqMTAgKyAoYiYxNSkpOworfQorCitpbnQgbXZtZTE0N19od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKyN3YXJuaW5nIGNoZWNrIG1lIQorCWlmICghb3ApIHsKKwkJbTE0N19ydGMtPmN0cmwgPSBSVENfUkVBRDsKKwkJdC0+dG1feWVhciA9IGJjZDJpbnQgKG0xNDdfcnRjLT5iY2RfeWVhcik7CisJCXQtPnRtX21vbiAgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX210aCk7CisJCXQtPnRtX21kYXkgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX2RvbSk7CisJCXQtPnRtX2hvdXIgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX2hyKTsKKwkJdC0+dG1fbWluICA9IGJjZDJpbnQgKG0xNDdfcnRjLT5iY2RfbWluKTsKKwkJdC0+dG1fc2VjICA9IGJjZDJpbnQgKG0xNDdfcnRjLT5iY2Rfc2VjKTsKKwkJbTE0N19ydGMtPmN0cmwgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG12bWUxNDdfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tICBTZXJpYWwgY29uc29sZSBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBzY2NfZGVsYXkgKHZvaWQpCit7CisJaW50IG47CisJdm9sYXRpbGUgaW50IHRyYXNoOworCisJZm9yIChuID0gMDsgbiA8IDIwOyBuKyspCisJCXRyYXNoID0gbjsKK30KKworc3RhdGljIHZvaWQgc2NjX3dyaXRlIChjaGFyIGNoKQoreworCXZvbGF0aWxlIGNoYXIgKnAgPSAodm9sYXRpbGUgY2hhciAqKU0xNDdfU0NDX0FfQUREUjsKKworCWRvIHsKKwkJc2NjX2RlbGF5KCk7CisJfQorCXdoaWxlICghKCpwICYgNCkpOworCXNjY19kZWxheSgpOworCSpwID0gODsKKwlzY2NfZGVsYXkoKTsKKwkqcCA9IGNoOworfQorCisKK3ZvaWQgbTE0N19zY2Nfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKGNvdW50LS0pCisJeworCQlpZiAoKnN0ciA9PSAnXG4nKQorCQkJc2NjX3dyaXRlICgnXHInKTsKKwkJc2NjX3dyaXRlICgqc3RyKyspOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgbXZtZTE0N19pbml0X2NvbnNvbGVfcG9ydCAoc3RydWN0IGNvbnNvbGUgKmNvLCBpbnQgY2ZsYWcpCit7CisJY28tPndyaXRlICAgID0gbTE0N19zY2Nfd3JpdGU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE2eC8xNnhpbnRzLmMgYi9hcmNoL202OGsvbXZtZTE2eC8xNnhpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzZWY3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTZ4LzE2eGludHMuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGFyY2gvbTY4ay9tdm1lMTZ4LzE2eGludHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBSaWNoYXJkIEhpcnN0IFtyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWtdCisgKgorICogYmFzZWQgb24gYW1paW50cy5jIC0tIEFtaWdhIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTE2eF9kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKKy8qCisgKiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIDQgZWxlbWVudHMgb25seSwgZm9yIHNwZWVkLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdm9pZAkJKmRldl9pZDsKKwljb25zdCBjaGFyCSpkZXZuYW1lOworCXVuc2lnbmVkCWNvdW50OworfSBpcnFfdGFiWzE5Ml07CisKKy8qCisgKiB2b2lkIG12bWUxNnhfaW5pdF9JUlEgKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcga2VybmVsIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZQorICogdGhlIG12bWUxNnggSVJRIGhhbmRsaW5nIHJvdXRpbmVzLiAgU2hvdWxkIHByb2JhYmx5IGVuc3VyZQorICogdGhhdCB0aGUgYmFzZSB2ZWN0b3JzIGZvciB0aGUgVk1FQ2hpcDIgYW5kIFBDQ0NoaXAyIGFyZSB2YWxpZC4KKyAqLworCit2b2lkIG12bWUxNnhfaW5pdF9JUlEgKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTkyOyBpKyspIHsKKwkJaXJxX3RhYltpXS5oYW5kbGVyID0gbXZtZTE2eF9kZWZoYW5kOworCQlpcnFfdGFiW2ldLmZsYWdzID0gSVJRX0ZMR19TVEQ7CisJCWlycV90YWJbaV0uZGV2X2lkID0gTlVMTDsKKwkJaXJxX3RhYltpXS5kZXZuYW1lID0gTlVMTDsKKwkJaXJxX3RhYltpXS5jb3VudCA9IDA7CisJfQorfQorCitpbnQgbXZtZTE2eF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA8IDY0IHx8IGlycSA+IDI1NSkgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkIGZyb20gJXNcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoIShpcnFfdGFiW2lycS02NF0uZmxhZ3MgJiBJUlFfRkxHX1NURCkpIHsKKwkJaWYgKGlycV90YWJbaXJxLTY0XS5mbGFncyAmIElSUV9GTEdfTE9DSykgeworCQkJcHJpbnRrKCIlczogSVJRICVkIGZyb20gJXMgaXMgbm90IHJlcGxhY2VhYmxlXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycS02NF0uZGV2bmFtZSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmIChmbGFncyAmIElSUV9GTEdfUkVQTEFDRSkgeworCQkJcHJpbnRrKCIlczogJXMgY2FuJ3QgcmVwbGFjZSBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldm5hbWUsIGlycSwgaXJxX3RhYltpcnEtNjRdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpcnFfdGFiW2lycS02NF0uaGFuZGxlciA9IGhhbmRsZXI7CisJaXJxX3RhYltpcnEtNjRdLmZsYWdzICAgPSBmbGFnczsKKwlpcnFfdGFiW2lycS02NF0uZGV2X2lkICA9IGRldl9pZDsKKwlpcnFfdGFiW2lycS02NF0uZGV2bmFtZSA9IGRldm5hbWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXZtZTE2eF9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA8IDY0IHx8IGlycSA+IDI1NSkgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxX3RhYltpcnEtNjRdLmRldl9pZCAhPSBkZXZfaWQpCisJCXByaW50aygiJXM6IFJlbW92aW5nIHByb2JhYmx5IHdyb25nIElSUSAlZCBmcm9tICVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV90YWJbaXJxLTY0XS5kZXZuYW1lKTsKKworCWlycV90YWJbaXJxLTY0XS5oYW5kbGVyID0gbXZtZTE2eF9kZWZoYW5kOworCWlycV90YWJbaXJxLTY0XS5mbGFncyAgID0gSVJRX0ZMR19TVEQ7CisJaXJxX3RhYltpcnEtNjRdLmRldl9pZCAgPSBOVUxMOworCWlycV90YWJbaXJxLTY0XS5kZXZuYW1lID0gTlVMTDsKK30KKworaXJxcmV0dXJuX3QgbXZtZTE2eF9wcm9jZXNzX2ludCAodW5zaWduZWQgbG9uZyB2ZWMsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpZiAodmVjIDwgNjQgfHwgdmVjID4gMjU1KSB7CisJCXByaW50ayAoIm12bWUxNnhfcHJvY2Vzc19pbnQ6IElsbGVnYWwgdmVjdG9yICVsZCIsIHZlYyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQlpcnFfdGFiW3ZlYy02NF0uY291bnQrKzsKKwkJaXJxX3RhYlt2ZWMtNjRdLmhhbmRsZXIodmVjLCBpcnFfdGFiW3ZlYy02NF0uZGV2X2lkLCBmcCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9Cit9CisKK2ludCBzaG93X212bWUxNnhfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE5MjsgaSsrKSB7CisJCWlmIChpcnFfdGFiW2ldLmNvdW50KQorCQkJc2VxX3ByaW50ZihwLCAiVmVjIDB4JTAyeDogJThkICAlc1xuIiwKKwkJCSAgICBpKzY0LCBpcnFfdGFiW2ldLmNvdW50LAorCQkJICAgIGlycV90YWJbaV0uZGV2bmFtZSA/IGlycV90YWJbaV0uZGV2bmFtZSA6ICJmcmVlIik7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMTZ4X2RlZmhhbmQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXByaW50ayAoIlVua25vd24gaW50ZXJydXB0IDB4JTAyeFxuIiwgaXJxKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKwordm9pZCBtdm1lMTZ4X2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKKwordm9pZCBtdm1lMTZ4X2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L01ha2VmaWxlIGIvYXJjaC9tNjhrL212bWUxNngvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyOWY1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTZ4L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL212bWUxNnggc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0gY29uZmlnLm8gMTZ4aW50cy5vIHJ0Yy5vIG12bWUxNnhfa3N5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMgYi9hcmNoL202OGsvbXZtZTE2eC9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNlODFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1IFJpY2hhcmQgSGlyc3QgW3JpY2hhcmRAc2xlZXBpZS5kZW1vbi5jby51a10KKyAqCisgKiBCYXNlZCBvbjoKKyAqCisgKiAgbGludXgvYW1pZ2EvY29uZmlnLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkzIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbXZtZTE2eGh3Lmg+CisKK2V4dGVybiB0X2JkaWQgbXZtZV9iZGlkOworCitzdGF0aWMgTUs0OFQwOHB0cl90IHZvbGF0aWxlIHJ0YyA9IChNSzQ4VDA4cHRyX3QpTVZNRV9SVENfQkFTRTsKKworZXh0ZXJuIGlycXJldHVybl90IG12bWUxNnhfcHJvY2Vzc19pbnQgKGludCBsZXZlbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgbXZtZTE2eF9pbml0X0lSUSAodm9pZCk7CitleHRlcm4gdm9pZCBtdm1lMTZ4X2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50IHNob3dfbXZtZTE2eF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG12bWUxNnhfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIG12bWUxNnhfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBtdm1lMTZ4X2dldF9tb2RlbChjaGFyICptb2RlbCk7CitzdGF0aWMgaW50ICBtdm1lMTZ4X2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gaW50ICBtdm1lMTZ4X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgbXZtZTE2eF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG12bWUxNnhfZ2V0dGltZW9mZnNldCAodm9pZCk7CitleHRlcm4gaW50IG12bWUxNnhfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIGludCBtdm1lMTZ4X3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG12bWUxNnhfcmVzZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgbXZtZTE2eF93YWl0YnV0KHZvaWQpOworCitpbnQgYmNkMmludCAodW5zaWduZWQgY2hhciBiKTsKKworLyogU2F2ZSB0aWNrIGhhbmRsZXIgcm91dGluZSBwb2ludGVyLCB3aWxsIHBvaW50IHRvIGRvX3RpbWVyKCkgaW4KKyAqIGtlcm5lbC9zY2hlZC5jLCBjYWxsZWQgdmlhIG12bWUxNnhfcHJvY2Vzc19pbnQoKSAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgKCp0aWNrX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworCit1bnNpZ25lZCBzaG9ydCBtdm1lMTZ4X2NvbmZpZzsKKworCitpbnQgbXZtZTE2eF9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICpiaSkKK3sKKwlpZiAoYmktPnRhZyA9PSBCSV9WTUVfVFlQRSB8fCBiaS0+dGFnID09IEJJX1ZNRV9CUkRJTkZPKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCit2b2lkIG12bWUxNnhfcmVzZXQodm9pZCkKK3sKKwlwcmludGsgKCJcclxuXG5DYWxsZWQgbXZtZTE2eF9yZXNldFxyXG4iCisJCQkiXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyIik7CisJLyogVGhlIHN0cmluZyBvZiByZXR1cm5zIGlzIHRvIGRlbGF5IHRoZSByZXNldCB1bnRpbCB0aGUgd2hvbGUKKwkgKiBtZXNzYWdlIGlzIG91dHB1dC4gIEFzc2VydCByZXNldCBiaXQgaW4gR0NTUiAqLworCSoodm9sYXRpbGUgY2hhciAqKTB4ZmZmNDAxMDcgPSAweDgwOworfQorCitzdGF0aWMgdm9pZCBtdm1lMTZ4X2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKyAgICBwX2JkaWQgcCA9ICZtdm1lX2JkaWQ7CisgICAgY2hhciBzdWZbNF07CisKKyAgICBzdWZbMV0gPSBwLT5icmRzdWZmaXhbMF07CisgICAgc3VmWzJdID0gcC0+YnJkc3VmZml4WzFdOworICAgIHN1ZlszXSA9ICdcMCc7CisgICAgc3VmWzBdID0gc3VmWzFdID8gJy0nIDogJ1wwJzsKKworICAgIHNwcmludGYobW9kZWwsICJNb3Rvcm9sYSBNVk1FJXglcyIsIHAtPmJyZG5vLCBzdWYpOworfQorCisKK3N0YXRpYyBpbnQgbXZtZTE2eF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisgICAgcF9iZGlkIHAgPSAmbXZtZV9iZGlkOworICAgIGludCBsZW4gPSAwOworCisgICAgaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDAxNzIpCisgICAgeworCXVuc2lnbmVkIGNoYXIgcmV2ID0gKih1bnNpZ25lZCBjaGFyICopTVZNRTE2Ml9WRVJTSU9OX1JFRzsKKworCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiVk1FY2hpcDIgICAgICAgICVzcHJlc2VudFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX1ZNRUNISVAyID8gIk5PVCAiIDogIiIpOworCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiU0NTSSBpbnRlcmZhY2UgICVzcHJlc2VudFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX1NDU0lDSElQID8gIk5PVCAiIDogIiIpOworCWxlbiArPSBzcHJpbnRmIChidWZmZXIrbGVuLCAiRXRoZXJuZXQgaS9mICAgICVzcHJlc2VudFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX0VUSEVSTkVUID8gIk5PVCAiIDogIiIpOworICAgIH0KKyAgICBlbHNlCisJKmJ1ZmZlciA9ICdcMCc7CisKKyAgICByZXR1cm4gKGxlbik7Cit9CisKKworI2RlZmluZSBwY2MyY2hpcAkoKHZvbGF0aWxlIHVfY2hhciAqKTB4ZmZmNDIwMDApCisjZGVmaW5lIFBjY1NDQ01JQ1IJMHgxZAorI2RlZmluZSBQY2NTQ0NUSUNSCTB4MWUKKyNkZWZpbmUgUGNjU0NDUklDUgkweDFmCisKK3ZvaWQgX19pbml0IGNvbmZpZ19tdm1lMTZ4KHZvaWQpCit7CisgICAgcF9iZGlkIHAgPSAmbXZtZV9iZGlkOworICAgIGNoYXIgaWRbNDBdOworCisgICAgbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOworICAgIG1hY2hfc2NoZWRfaW5pdCAgICAgID0gbXZtZTE2eF9zY2hlZF9pbml0OworICAgIG1hY2hfaW5pdF9JUlEgICAgICAgID0gbXZtZTE2eF9pbml0X0lSUTsKKyAgICBtYWNoX2dldHRpbWVvZmZzZXQgICA9IG12bWUxNnhfZ2V0dGltZW9mZnNldDsKKyAgICBtYWNoX2h3Y2xrICAgICAgICAgICA9IG12bWUxNnhfaHdjbGs7CisgICAgbWFjaF9zZXRfY2xvY2tfbW1zcwkgPSBtdm1lMTZ4X3NldF9jbG9ja19tbXNzOworICAgIG1hY2hfcmVzZXQJCSA9IG12bWUxNnhfcmVzZXQ7CisgICAgbWFjaF9mcmVlX2lycQkgPSBtdm1lMTZ4X2ZyZWVfaXJxOworICAgIG1hY2hfcHJvY2Vzc19pbnQJID0gbXZtZTE2eF9wcm9jZXNzX2ludDsKKyAgICBtYWNoX2dldF9pcnFfbGlzdAkgPSBzaG93X212bWUxNnhfaW50ZXJydXB0czsKKyAgICBtYWNoX3JlcXVlc3RfaXJxCSA9IG12bWUxNnhfcmVxdWVzdF9pcnE7CisgICAgZW5hYmxlX2lycSAgICAgICAgICAgPSBtdm1lMTZ4X2VuYWJsZV9pcnE7CisgICAgZGlzYWJsZV9pcnEgICAgICAgICAgPSBtdm1lMTZ4X2Rpc2FibGVfaXJxOworICAgIG1hY2hfZ2V0X21vZGVsICAgICAgID0gbXZtZTE2eF9nZXRfbW9kZWw7CisgICAgbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCA9IG12bWUxNnhfZ2V0X2hhcmR3YXJlX2xpc3Q7CisKKyAgICAvKiBSZXBvcnQgYm9hcmQgcmV2aXNpb24gKi8KKworICAgIGlmIChzdHJuY21wKCJCRElEIiwgcC0+YmRpZCwgNCkpCisgICAgeworCXByaW50ayAoIlxuXG5CdWcgY2FsbCAuQlJEX0lEIHJldHVybmVkIGdhcmJhZ2UgLSBnaXZpbmcgdXBcblxuIik7CisJd2hpbGUgKDEpCisJCTsKKyAgICB9CisgICAgLyogQm9hcmQgdHlwZSBpcyBvbmx5IHNldCBieSBuZXdlciB2ZXJzaW9ucyBvZiB2bWVsaWxvL3RmdHBsaWxvICovCisgICAgaWYgKHZtZV9icmR0eXBlID09IDApCisJdm1lX2JyZHR5cGUgPSBwLT5icmRubzsKKworICAgIG12bWUxNnhfZ2V0X21vZGVsKGlkKTsKKyAgICBwcmludGsgKCJcbkJSRF9JRDogJXMgICBCVUcgJXguJXggJTAyeC8lMDJ4LyUwMnhcbiIsIGlkLCBwLT5yZXY+PjQsCisJCQkJCXAtPnJldiYweGYsIHAtPnlyLCBwLT5tdGgsIHAtPmRheSk7CisgICAgaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDE3MikKKyAgICB7CisJdW5zaWduZWQgY2hhciByZXYgPSAqKHVuc2lnbmVkIGNoYXIgKilNVk1FMTYyX1ZFUlNJT05fUkVHOworCisJbXZtZTE2eF9jb25maWcgPSByZXYgfCBNVk1FMTZ4X0NPTkZJR19HT1RfU0NDQTsKKworCXByaW50ayAoIk1WTUUleCBIYXJkd2FyZSBzdGF0dXM6XG4iLCBwLT5icmRubyk7CisJcHJpbnRrICgiICAgIENQVSBUeXBlICAgICAgICAgICA2OCVzMDQwXG4iLAorCQkJcmV2ICYgTVZNRTE2eF9DT05GSUdfR09UX0ZQVSA/ICIiIDogIkxDIik7CisJcHJpbnRrICgiICAgIENQVSBjbG9jayAgICAgICAgICAlZE1IelxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX1NQRUVEXzMyID8gMzIgOiAyNSk7CisJcHJpbnRrICgiICAgIFZNRWNoaXAyICAgICAgICAgICAlc3ByZXNlbnRcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19OT19WTUVDSElQMiA/ICJOT1QgIiA6ICIiKTsKKwlwcmludGsgKCIgICAgU0NTSSBpbnRlcmZhY2UgICAgICVzcHJlc2VudFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX1NDU0lDSElQID8gIk5PVCAiIDogIiIpOworCXByaW50ayAoIiAgICBFdGhlcm5ldCBpbnRlcmZhY2UgJXNwcmVzZW50XG4iLAorCQkJcmV2ICYgTVZNRTE2eF9DT05GSUdfTk9fRVRIRVJORVQgPyAiTk9UICIgOiAiIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJbXZtZTE2eF9jb25maWcgPSBNVk1FMTZ4X0NPTkZJR19HT1RfTFAgfCBNVk1FMTZ4X0NPTkZJR19HT1RfQ0QyNDAxOworCisJLyogRG9udCBhbGxvdyBhbnkgaW50ZXJydXB0cyBmcm9tIHRoZSBDRDI0MDEgdW50aWwgdGhlIGludGVycnVwdCAqLworCS8qIGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQJCQkJCSAqLworCisJcGNjMmNoaXBbUGNjU0NDTUlDUl0gPSAweDEwOworCXBjYzJjaGlwW1BjY1NDQ1RJQ1JdID0gMHgxMDsKKwlwY2MyY2hpcFtQY2NTQ0NSSUNSXSA9IDB4MTA7CisgICAgfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTE2eF9hYm9ydF9pbnQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXBfYmRpZCBwID0gJm12bWVfYmRpZDsKKwl1bnNpZ25lZCBsb25nICpuZXcgPSAodW5zaWduZWQgbG9uZyAqKXZlY3RvcnM7CisJdW5zaWduZWQgbG9uZyAqb2xkID0gKHVuc2lnbmVkIGxvbmcgKikweGZmZTAwMDAwOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdWMsICp1Y3A7CisKKwlpZiAocC0+YnJkbm8gPT0gMHgwMTYyIHx8IHAtPmJyZG5vID09IDB4MTcyKQorCXsKKwkJdWNwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGZmZjQyMDQzOworCQl1YyA9ICp1Y3AgfCA4OworCQkqdWNwID0gdWM7CisJfQorCWVsc2UKKwl7CisJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4ZmZmNDAwNzQgPSAweDQwMDAwMDAwOworCX0KKwkqKG5ldys0KSA9ICoob2xkKzQpOwkJLyogSWxsZWdhbCBpbnN0cnVjdGlvbiAqLworCSoobmV3KzkpID0gKihvbGQrOSk7CQkvKiBUcmFjZSAqLworCSoobmV3KzQ3KSA9ICoob2xkKzQ3KTsJCS8qIFRyYXAgIzE1ICovCisKKwlpZiAocC0+YnJkbm8gPT0gMHgwMTYyIHx8IHAtPmJyZG5vID09IDB4MTcyKQorCQkqKG5ldysweDVlKSA9ICoob2xkKzB4NWUpOwkvKiBBQk9SVCBzd2l0Y2ggKi8KKwllbHNlCisJCSoobmV3KzB4NmUpID0gKihvbGQrMHg2ZSk7CS8qIEFCT1JUIHN3aXRjaCAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IG12bWUxNnhfdGltZXJfaW50IChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGZmZjQyMDFiIHw9IDg7CisgICAgcmV0dXJuIHRpY2tfaGFuZGxlcihpcnEsIGRldl9pZCwgZnApOworfQorCit2b2lkIG12bWUxNnhfc2NoZWRfaW5pdCAoaXJxcmV0dXJuX3QgKCp0aW1lcl9yb3V0aW5lKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisgICAgcF9iZGlkIHAgPSAmbXZtZV9iZGlkOworICAgIGludCBpcnE7CisKKyAgICB0aWNrX2hhbmRsZXIgPSB0aW1lcl9yb3V0aW5lOworICAgIC8qIFVzaW5nIFBDQ2NoaXAyIG9yIE1DMiBjaGlwIHRpY2sgdGltZXIgMSAqLworICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4ZmZmNDIwMDggPSAwOworICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4ZmZmNDIwMDQgPSAxMDAwMDsJLyogMTBtcyAqLworICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4ZmZmNDIwMTcgfD0gMzsKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGZmZjQyMDFiID0gMHgxNjsKKyAgICBpZiAocmVxdWVzdF9pcnEoTVZNRTE2eF9JUlFfVElNRVIsIG12bWUxNnhfdGltZXJfaW50LCAwLAorCQkJCSJ0aW1lciIsIG12bWUxNnhfdGltZXJfaW50KSkKKwlwYW5pYyAoIkNvdWxkbid0IHJlZ2lzdGVyIHRpbWVyIGludCIpOworCisgICAgaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDE3MikKKwlpcnEgPSBNVk1FMTYyX0lSUV9BQk9SVDsKKyAgICBlbHNlCisgICAgICAgIGlycSA9IE1WTUUxNjdfSVJRX0FCT1JUOworICAgIGlmIChyZXF1ZXN0X2lycShpcnEsIG12bWUxNnhfYWJvcnRfaW50LCAwLAorCQkJCSJhYm9ydCIsIG12bWUxNnhfYWJvcnRfaW50KSkKKwlwYW5pYyAoIkNvdWxkbid0IHJlZ2lzdGVyIGFib3J0IGludCIpOworfQorCisKKy8qIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gICovCit1bnNpZ25lZCBsb25nIG12bWUxNnhfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKyAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4ZmZmNDIwMDgpOworfQorCitpbnQgYmNkMmludCAodW5zaWduZWQgY2hhciBiKQoreworCXJldHVybiAoKGI+PjQpKjEwICsgKGImMTUpKTsKK30KKworaW50IG12bWUxNnhfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7Cisjd2FybmluZyBjaGVjayBtZSEKKwlpZiAoIW9wKSB7CisJCXJ0Yy0+Y3RybCA9IFJUQ19SRUFEOworCQl0LT50bV95ZWFyID0gYmNkMmludCAocnRjLT5iY2RfeWVhcik7CisJCXQtPnRtX21vbiAgPSBiY2QyaW50IChydGMtPmJjZF9tdGgpOworCQl0LT50bV9tZGF5ID0gYmNkMmludCAocnRjLT5iY2RfZG9tKTsKKwkJdC0+dG1faG91ciA9IGJjZDJpbnQgKHJ0Yy0+YmNkX2hyKTsKKwkJdC0+dG1fbWluICA9IGJjZDJpbnQgKHJ0Yy0+YmNkX21pbik7CisJCXQtPnRtX3NlYyAgPSBiY2QyaW50IChydGMtPmJjZF9zZWMpOworCQlydGMtPmN0cmwgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG12bWUxNnhfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNngvbXZtZTE2eF9rc3ltcy5jIGIvYXJjaC9tNjhrL212bWUxNngvbXZtZTE2eF9rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOGEzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE2eC9tdm1lMTZ4X2tzeW1zLmMKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL212bWUxNnhody5oPgorCitFWFBPUlRfU1lNQk9MKG12bWUxNnhfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyNDI1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICoJUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZSBmb3IgTGludXggb24gdGhlIE1WTUUxNngKKyAqCisgKiBCYXNlZCBvbiB0aGUgUEMgZHJpdmVyIGJ5IFBhdWwgR29ydG1ha2VyLgorICovCisKKyNkZWZpbmUgUlRDX1ZFUlNJT04JCSIxLjAwIgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIEZvciBzdHJ1Y3QgcnRjX3RpbWUgYW5kIGlvY3RscywgZXRjICovCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vbXZtZTE2eGh3Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworLyoKKyAqCVdlIHNwb25nZSBhIG1pbm9yIG9mZiBvZiB0aGUgbWlzYyBtYWpvci4gTm8gbmVlZCBzbHVycGluZworICoJdXAgYW5vdGhlciB2YWx1YWJsZSBtYWpvciBkZXYgbnVtYmVyIGZvciB0aGlzLiBJZiB5b3UgYWRkCisgKglhbiBpb2N0bCwgbWFrZSBzdXJlIHlvdSBkb24ndCBjb25mbGljdCB3aXRoIFNQQVJDJ3MgUlRDCisgKglpb2N0bHMuCisgKi8KKworI2RlZmluZSBCQ0QyQklOKHZhbCkgKCgodmFsKSYxNSkgKyAoKHZhbCk+PjQpKjEwKQorI2RlZmluZSBCSU4yQkNEKHZhbCkgKCgoKHZhbCkvMTApPDw0KSArICh2YWwpJTEwKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkYXlzX2luX21vW10gPQorezAsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzF9OworCitzdGF0aWMgYXRvbWljX3QgcnRjX3JlYWR5ID0gQVRPTUlDX0lOSVQoMSk7CisKK3N0YXRpYyBpbnQgcnRjX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvbGF0aWxlIE1LNDhUMDhwdHJfdCBydGMgPSAoTUs0OFQwOHB0cl90KU1WTUVfUlRDX0JBU0U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcnRjX3RpbWUgd3RpbWU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUlRDX1JEX1RJTUU6CS8qIFJlYWQgdGhlIHRpbWUvZGF0ZSBmcm9tIFJUQwkqLworCXsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkvKiBFbnN1cmUgY2xvY2sgYW5kIHJlYWwtdGltZS1tb2RlLXJlZ2lzdGVyIGFyZSBhY2Nlc3NpYmxlICovCisJCXJ0Yy0+Y3RybCA9IFJUQ19SRUFEOworCQltZW1zZXQoJnd0aW1lLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7CisJCXd0aW1lLnRtX3NlYyA9ICBCQ0QyQklOKHJ0Yy0+YmNkX3NlYyk7CisJCXd0aW1lLnRtX21pbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX21pbik7CisJCXd0aW1lLnRtX2hvdXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX2hyKTsKKwkJd3RpbWUudG1fbWRheSA9ICBCQ0QyQklOKHJ0Yy0+YmNkX2RvbSk7CisJCXd0aW1lLnRtX21vbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX210aCktMTsKKwkJd3RpbWUudG1feWVhciA9IEJDRDJCSU4ocnRjLT5iY2RfeWVhcik7CisJCWlmICh3dGltZS50bV95ZWFyIDwgNzApCisJCQl3dGltZS50bV95ZWFyICs9IDEwMDsKKwkJd3RpbWUudG1fd2RheSA9IEJDRDJCSU4ocnRjLT5iY2RfZG93KS0xOworCQlydGMtPmN0cmwgPSAwOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZ3dGltZSwgc2l6ZW9mIHd0aW1lKSA/CisJCQkJCQkJCS1FRkFVTFQgOiAwOworCX0KKwljYXNlIFJUQ19TRVRfVElNRToJLyogU2V0IHRoZSBSVEMgKi8KKwl7CisJCXN0cnVjdCBydGNfdGltZSBydGNfdG07CisJCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWMsIGxlYXBfeXI7CisJCXVuc2lnbmVkIGludCB5cnM7CisKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZydGNfdG0sIChzdHJ1Y3QgcnRjX3RpbWUqKWFyZywKKwkJCQkgICBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQl5cnMgPSBydGNfdG0udG1feWVhcjsKKwkJaWYgKHlycyA8IDE5MDApCisJCQl5cnMgKz0gMTkwMDsKKwkJbW9uID0gcnRjX3RtLnRtX21vbiArIDE7ICAgLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCWRheSA9IHJ0Y190bS50bV9tZGF5OworCQlocnMgPSBydGNfdG0udG1faG91cjsKKwkJbWluID0gcnRjX3RtLnRtX21pbjsKKwkJc2VjID0gcnRjX3RtLnRtX3NlYzsKKworCQlsZWFwX3lyID0gKCghKHlycyAlIDQpICYmICh5cnMgJSAxMDApKSB8fCAhKHlycyAlIDQwMCkpOworCisJCWlmICgobW9uID4gMTIpIHx8IChkYXkgPT0gMCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZGF5ID4gKGRheXNfaW5fbW9bbW9uXSArICgobW9uID09IDIpICYmIGxlYXBfeXIpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoaHJzID49IDI0KSB8fCAobWluID49IDYwKSB8fCAoc2VjID49IDYwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh5cnMgPj0gMjA3MCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcnRjLT5jdHJsICAgICA9IFJUQ19XUklURTsKKworCQlydGMtPmJjZF9zZWMgID0gQklOMkJDRChzZWMpOworCQlydGMtPmJjZF9taW4gID0gQklOMkJDRChtaW4pOworCQlydGMtPmJjZF9ociAgID0gQklOMkJDRChocnMpOworCQlydGMtPmJjZF9kb20gID0gQklOMkJDRChkYXkpOworCQlydGMtPmJjZF9tdGggID0gQklOMkJDRChtb24pOworCQlydGMtPmJjZF95ZWFyID0gQklOMkJDRCh5cnMlMTAwKTsKKworCQlydGMtPmN0cmwgICAgID0gMDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICoJV2UgZW5mb3JjZSBvbmx5IG9uZSB1c2VyIGF0IGEgdGltZSBoZXJlIHdpdGggdGhlIG9wZW4vY2xvc2UuCisgKglBbHNvIGNsZWFyIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgZGF0YSBvbiBhbiBvcGVuLCBhbmQgY2xlYW4KKyAqCXVwIHRoaW5ncyBvbiBhIGNsb3NlLgorICovCisKK3N0YXRpYyBpbnQgcnRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYoICFhdG9taWNfZGVjX2FuZF90ZXN0KCZydGNfcmVhZHkpICkKKwl7CisJCWF0b21pY19pbmMoICZydGNfcmVhZHkgKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlhdG9taWNfaW5jKCAmcnRjX3JlYWR5ICk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglUaGUgdmFyaW91cyBmaWxlIG9wZXJhdGlvbnMgd2Ugc3VwcG9ydC4KKyAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGNfZm9wcyA9IHsKKwkuaW9jdGwgPQlydGNfaW9jdGwsCisJLm9wZW4gPQkJcnRjX29wZW4sCisJLnJlbGVhc2UgPQlydGNfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBydGNfZGV2PQoreworCS5taW5vciA9CVJUQ19NSU5PUiwKKwkubmFtZSA9CQkicnRjIiwKKwkuZm9wcyA9CQkmcnRjX2ZvcHMKK307CisKK2ludCBfX2luaXQgcnRjX01LNDhUMDhfaW5pdCh2b2lkKQoreworCWlmICghTUFDSF9JU19NVk1FMTZ4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gIk1LNDhUMDggUmVhbCBUaW1lIENsb2NrIERyaXZlciB2JXNcbiIsIFJUQ19WRVJTSU9OKTsKKwlyZXR1cm4gbWlzY19yZWdpc3RlcigmcnRjX2Rldik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvTWFrZWZpbGUgYi9hcmNoL202OGsvcTQwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWI0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvcTQwL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL3E0MCBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyBxNDBpbnRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvUkVBRE1FIGIvYXJjaC9tNjhrL3E0MC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkYmY0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9xNDAvUkVBRE1FCkBAIC0wLDAgKzEsMTM4IEBACitMaW51eCBmb3IgdGhlIFE0MAorPT09PT09PT09PT09PT09PT0KKworWW91IG1heSB0cnkgaHR0cDovL3d3dy5nZW9jaXRpZXMuY29tL1NpbGljb25WYWxsZXkvQmF5LzI2MDIvIGZvcgorc29tZSB1cCB0byBkYXRlIGluZm9ybWF0aW9uLiBCb290ZXIgYW5kIG90aGVyIHRvb2xzIHdpbGwgYmUgYWxzbworYXZhaWxhYmxlIGZyb20gdGhpcyBwbGFjZSBvciBmdHAudW5pLWVybGFuZ2VuLmRlL2xpbnV4LzY4MHgwL3E0MC8KK2FuZCBtaXJyb3JzLgorCitIaW50cyB0byBkb2N1bWVudGF0aW9uIHVzdWFsbHkgcmVmZXIgdG8gdGhlIGxpbnV4IHNvdXJjZSB0cmVlIGluCisvdXNyL3NyYy9saW51eC9Eb2N1bWVudGF0aW9uIHVubGVzcyBVUkwgZ2l2ZW4uCisKK0l0IHNlZW1zIElSUSB1bm1hc2tpbmcgY2FuJ3QgYmUgc2FmZWx5IGRvbmUgb24gYSBRNDAuIElSUSBwcm9iaW5nCitpcyBub3QgaW1wbGVtZW50ZWQgLSBkbyBub3QgdHJ5IGl0ISAoU2VlIGJlbG93KQorCitGb3IgYSBsaXN0IG9mIGtlcm5lbCBjb21tYW5kLWxpbmUgb3B0aW9ucyByZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKK3BhcnRpY3VsYXIgZGV2aWNlIGRyaXZlcnMuCisKK1RoZSBmbG9wcHkgaW1wb3NlcyBhIHZlcnkgaGlnaCBpbnRlcnJ1cHQgbG9hZCBvbiB0aGUgQ1BVLCBhcHByb3ggMzBLL3MuCitXaGVuIHNvbWV0aGluZyBibG9ja3MgaW50ZXJydXB0cyAoSEQpIGl0IHdpbGwgbG9zZSBzb21lIG9mIHRoZW0sIHNvIGZhcgordGhpcyBpcyBub3Qga25vd24gdG8gaGF2ZSBjYXVzZWQgYW55IGRhdGEgbG9zcy4gT24gaGlnaGx5IGxvYWRlZCBzeXN0ZW1zCitpdCBjYW4gbWFrZSB0aGUgZmxvcHB5IHZlcnkgc2xvdyBvciBwcmFjdGljYWxseSBzdG9wLiBPdGhlciBRNDAgT1MnIHNpbXBseQorcG9sbCB0aGUgZmxvcHB5IGZvciB0aGlzIHJlYXNvbiAtIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIGRvbmUgaW4gTGludXguCitPbmx5IHBvc3NpYmxlIGN1cmUgaXMgZ2V0dGluZyBhIDgyMDcyIGNvbnRyb2xsZXIgd2l0aCBmaWZvIGluc3RlYWQgb2YKK3RoZSA4MjcyQS4KKworZHJpdmVycyB1c2VkIGJ5IHRoZSBRNDAsIGFwYXJ0IGZyb20gdGhlIHZlcnkgb2J2aW91cyAoY29uc29sZSBldGMuKToKKwlkcml2ZXJzL2NoYXIvcTQwX2tleWIuYwkJIyB1c2UgUEMga2V5bWFwcyBmb3IgbmF0aW9uYWwga2V5Ym9hcmRzCisJCSAgICAgc2VyaWFsLmMJCSMgbm9ybWFsIFBDIGRyaXZlciAtIGFueSBzcGVlZAorCSAgICAgICAgICAgICBscC5jCQkjIHByaW50ZXIgZHJpdmVyCisJCSAgICAgZ2VucnRjLmMJCSMgUlRDCisJCWNoYXIvam95c3RpY2svKgkJIyBtb3N0IG9mIHRoaXMgc2hvdWxkIHdvcmssIG5vdAorCQkJCSAgICAgICAgIyBpbiBkZWZhdWx0IGNvbmZpZy5pbgorCSAgICAgICAgYmxvY2svcTQwaWRlLmMJCSMgc3RhcnR1cCBmb3IgaWRlCisJCSAgICAgIGlkZSoJCSMgc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dAorCQkgICAgICBmbG9wcHkuYwkJIyBub3JtYWwgUEMgZHJpdmVyLCBETUEgZW11IGluIGFzbS9mbG9wcHkuaAorCQkJCQkjIGFuZCBhcmNoL202OGsva2VybmVsL2VudHJ5LlMKKwkJCQkJIyBzZWUgZHJpdmVycy9ibG9jay9SRUFETUUuZmQKKwkJbmV0L25lLmMKKwkJdmlkZW8vcTQwZmIuYworCQlwYXJwb3J0LyoKKwkJc291bmQvZG1hc291bmRfY29yZS5jCisJCSAgICAgIGRtYXNvdW5kX3E0MC5jCisKK1ZhcmlvdXMgb3RoZXIgUEMgZHJpdmVycyBjYW4gYmUgZW5hYmxlZCBzaW1wbHkgYnkgYWRkaW5nIHRoZW0gdG8KK2FyY2gvbTY4ay9jb25maWcuaW4sIGVzcGVjaWFsbHkgOCBiaXQgZGV2aWNlcyBzaG91bGQgYmUgd2l0aG91dCBhbnkKK3Byb2JsZW1zLiBGb3IgY2FyZHMgdXNpbmcgMTZiaXQgaW8vbWVtIG1vcmUgY2FyZSBpcyByZXF1aXJlZCwgbGlrZQorY2hlY2tpbmcgYnl0ZSBvcmRlciBpc3N1ZXMsIGhhY2tpbmcgbWVtY3B5XypfaW8gZXRjLgorCisKK0RlYnVnZ2luZworPT09PT09PT09CisKK1Vwb24gc3RhcnR1cCB0aGUga2VybmVsIHdpbGwgdXN1YWxseSBvdXRwdXQgIkFCQ1FHSElKIiBpbnRvIHRoZSBTUkFNLAorcHJlY2VkZWQgYnkgdGhlIGJvb3RlciBzaWduYXR1cmUuIFRoaXMgaXMgYSB0cmFjZSBqdXN0IGluIGNhc2Ugc29tZXRoaW5nCit3ZW50IHdyb25nIGR1cmluZyBlYXJsaWVzdCBzZXR1cCBzdGFnZXMgb2YgaGVhZC5TLgorKipDaGFuZ2VkKiogdG8gcHJlc2VydmUgU1JBTSBjb250ZW50cyBieSBkZWZhdWx0LCB0aGlzIGlzIG9ubHkgZG9uZSB3aGVuCityZXF1ZXN0ZWQgLSBTUkFNIG11c3Qgc3RhcnQgd2l0aCAnJUxYJCcgc2lnbmF0dXJlIHRvIGRvIHRoaXMuICctZCcgb3B0aW9uCit0byAnbHh4JyBsb2FkZXIgZW5hYmxlcyB0aGlzLgorCitTUkFNIGNhbiBhbHNvIGJlIHVzZWQgYXMgYWRkaXRpb25hbCBjb25zb2xlIGRldmljZSwgdXNlIGRlYnVnPW1lbS4KK1RoaXMgd2lsbCBzYXZlIGtlcm5lbCBzdGFydHVwIG1zZ3MgaW50byBTUkFNLCB0aGUgc2NyZWVuIHdpbGwgZGlzcGxheQorb25seSB0aGUgcGVuZ3VpbiAtIGFuZCBzaGVsbCBwcm9tcHQgaWYgaXQgZ2V0cyB0aGF0IGZhci4uCitVbmZvcnR1bmF0ZWx5IG9ubHkgMjAwMCBieXRlcyBhcmUgYXZhaWxhYmxlLgorCitTZXJpYWwgY29uc29sZSB3b3JrcyBhbmQgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGVidWdnaW5nLCBzZWUgbG9hZGVyX3R4dAorCitNb3N0IHByb2JsZW1zIHNlZW0gdG8gYmUgY2F1c2VkIGJ5IGZhd2x0eSBvciBiYWRseSBjb25maWd1cmVkIGlvLWNhcmRzIG9yCitoYXJkIGRyaXZlcyBhbnl3YXkuCitNYWtlIHN1cmUgdG8gY29uZmlndXJlIHRoZSBwYXJhbGxlbCBwb3J0IGFzIFNQUCBhbmQgcmVtb3ZlIElSUS9ETUEganVtcGVycworZm9yIGZpcnN0IHRlc3RpbmcuIFRoZSBRNDAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYW5kIG1heSBoYXZlIHRyb3VibGUgd2l0aAorcGFyYWxsZWwgcG9ydHMgdmVyc2lvbiBvZiBpbnRlcnJ1cHRzLgorCisKK1E0MCBIYXJkd2FyZSBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMganVzdCBhbiBvdmVydmlldywgc2VlIGFzbS1tNjhrLyogZm9yIGRldGFpbHMgYXNrIGlmIHlvdSBoYXZlIGFueQorcXVlc3Rpb25zLgorCitUaGUgUTQwIGNvbnNpc3RzIG9mIGEgNjgwNDBANDAgTUh6LCAxTUIgdmlkZW8gUkFNLCB1cCB0byAzMk1CIFJBTSwgQVQtc3R5bGUKK2tleWJvYXJkIGludGVyZmFjZSwgMSBQcm9ncmFtbWFibGUgTEVELCAyeDhiaXQgREFDcyBhbmQgdXAgdG8gMU1CIFJPTSwgMU1CCitzaGFkb3cgUk9NLgorVGhlIFE2MCBoYXMgYW55IG9mIDY4MDYwIG9yIDY4TEMwNjAgYW5kIHVwIHRvIDEyOCBNQiBSQU0uCisKK01vc3QgaW50ZXJmYWNpbmcgbGlrZSBmbG9wcHksIElERSwgc2VyaWFsIGFuZCBwYXJhbGxlbCBwb3J0cyBpcyBkb25lIHZpYSBJU0EKK3Nsb3RzLiBUaGUgSVNBIGlvIGFuZCBtZW0gcmFuZ2UgaXMgbWFwcGVkIChzcGFyc2UmYnl0ZXN3YXBwZWQhKSBpbnRvIHNlcGFyYXRlCityZWdpb25zIG9mIHRoZSBtZW1vcnkuCitUaGUgbWFpbiBpbnRlcnJ1cHQgcmVnaXN0ZXIgSUlSUV9SRUcgd2lsbCBpbmRpY2F0ZSB3aGV0aGVyIGFuIElSUSB3YXMgaW50ZXJuYWwKK29yIGZyb20gc29tZSBJU0EgZGV2aWNlcywgRUlSUV9SRUcgY2FuIGRpc3Rpbmd1aXNoIHVwIHRvIDggSVNBIElSUXMuCisKK1RoZSBRNDAgY3VzdG9tIGNoaXAgaXMgcHJvZ3JhbW1hYmxlIHRvIHByb3ZpZGUgMiBwZXJpb2RpYyB0aW1lcnM6CisJLSA1MCBvciAyMDAgSHogLSBsZXZlbCAyLCAhIVRISVMgQ0FOVCBCRSBESVNBQkxFRCEhCisJLSAxMCBvciAyMCBLSHogLSBsZXZlbCA0LCB1c2VkIGZvciBkbWEtc291bmQKKworTGludXggdXNlcyB0aGUgMjAwIEh6IGludGVycnVwdCBmb3IgdGltZXIgYW5kIGJlZXAgYnkgZGVmYXVsdC4KKworCitJbnRlcnJ1cHRzCis9PT09PT09PT09CisKK3E0MCBtYXN0ZXIgY2hpcCBoYW5kbGVzIG9ubHkgYSBzdWJzZXQgb2YgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuCisKK0xpbnV4IGhhcyBzb21lIHJlcXVpcmVtZW50cyB3cnQgaW50ZXJydXB0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlCit0byBteSBrbm93bGVkZ2U6CisJKGEpIGludGVycnVwdCBoYW5kbGVyIG11c3Qgbm90IGJlIHJlZW50ZXJlZCBldmVuIHdoZW4gc3RpKCkgaXMgY2FsbGVkCisJICAgIGZyb20gd2l0aGluIGhhbmRsZXIKKwkoYikgd29ya2luZyBlbmFibGUvZGlzYWJsZV9pcnEKKworTHVja2lseSB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG9ubHkgaW1wb3J0YW50IGZvciBkcml2ZXJzIHNoYXJlZAord2l0aCBvdGhlciBhcmNoaXRlY3R1cmVzIC0gaWRlLHNlcmlhbCxwYXJhbGxlbCwgZXRoZXJuZXQuCitxNDBpbnRzLmMgbm93IGNvbnRhaW5zIGEgdHJpdmlhbCBoYWNrIGZvciAoYSksIChiKSBpcyBtb3JlIGRpZmZpY3VsdAorYmVjYXVzZSBvbmx5IGlycSdzIDQtMTUgY2FuIGJlIGRpc2FibGVkIC0gYW5kIG9ubHkgYWxsIG9mIHRoZW0gYXQgb25jZS4KK1RodXMgZGlzYWJsZV9pcnEoKSBjYW4gZWZmZWN0aXZlbHkgYmxvY2sgdGhlIG1hY2hpbmUgaWYgdGhlIGRyaXZlciBnb2VzCithc2xlZXAuCitPbmUgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIHdoZW4gaGFja2luZyBhcm91bmQgdGhlIGludGVycnVwdCBjb2RlIGlzCit0aGF0IHRoZXJlIGlzIG5vIHdheSB0byBmaW5kIG91dCB3aGljaCBJUlEgY2F1c2VkIGEgcmVxdWVzdCwgW0VJXUlSUV9SRUcKK2Rpc3BsYXlzIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZhcmlvdXMgSVJRIGxpbmVzLgorCitLZXlib2FyZAorPT09PT09PT0KKworcTQwIHJlY2VpdmVzIEFUIG1ha2UvYnJlYWsgY29kZXMgZnJvbSB0aGUga2V5Ym9hcmQsIHRoZXNlIGFyZSB0cmFuc2xhdGVkIHRvCit0aGUgUEMgc2NhbmNvZGVzIHg4NiBMaW51eCB1c2VzLiBTbyBieSB0aGVvcnkgZXZlcnkgbmF0aW9uYWwga2V5Ym9hcmQgc2hvdWxkCit3b3JrIGp1c3QgYnkgbG9hZGluZyB0aGUgYXBwcm9wcmlhdGUgeDg2IGtleXRhYmxlIC0gc2VlIGFueSBuYXRpb25hbC1IT1dUTy4KKworVW5mb3J0dW5hdGVseSB0aGUgQVQtPlBDIHRyYW5zbGF0aW9uIGlzbid0IHF1aXRlIHRyaXZpYWwgYW5kIGV2ZW4gd29yc2UsIG15Citkb2N1bWVudGF0aW9uIG9mIGl0IGlzIGFic29sdXRlbHkgbWluaW1hbCAtIHRodXMgc29tZSBleG90aWMga2V5cyBtYXkgbm90CitiZWhhdmUgZXhhY3RseSBhcyBleHBlY3RlZC4KKworVGhlcmUgaXMgc3RpbGwgaG9wZSB0aGF0IGl0IGNhbiBiZSBmaXhlZCBjb21wbGV0ZWx5IHRob3VnaC4gSWYgeW91IGVuY291bnRlcgorcHJvYmxlbXMsIGVtYWlsIG1lIGlkZWFsbHkgdGhpczoKKwktIGV4YWN0IGtleXByZXNzL3JlbGVhc2Ugc2VxdWVuY2UKKwktICdzaG93a2V5IC1zJyBydW4gb24gcTQwLCBub24tWCBzZXNzaW9uCisJLSAnc2hvd2tleSAtcycgcnVuIG9uIGEgUEMsIG5vbi1YIHNlc3Npb24KKwktIEFUIGNvZGVzIGFzIGRpc3BsYXllZCBieSB0aGUgcTQwIGRlYnVnZ2luZyBST00KK2J0dyBpZiB0aGUgc2hvd2tleSBvdXRwdXQgZnJvbSBQQyBhbmQgUTQwIGRvZXNuJ3QgZGlmZmVyIHRoZW4geW91IGhhdmUgc29tZQorY2xhc3NpYyBjb25maWd1cmF0aW9uIHByb2JsZW0gLSBkb24ndCBzZW5kIG1lIGFueXRoaW5nIGluIHRoaXMgY2FzZQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3E0MC9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmI2MjZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3E0MC9jb25maWcuYwpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqICBhcmNoL202OGsvcTQwL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBSaWNoYXJkIFppZGxpY2t5CisgKgorICogb3JpZ2luYWxseSBiYXNlZCBvbjoKKyAqCisgKiAgbGludXgvYnZtZS9jb25maWcuYworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9xNDBfbWFzdGVyLmg+CisKK2V4dGVybiB2b2lkIGZsb3BweV9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyk7CisKK2V4dGVybiBpcnFyZXR1cm5fdCBxNDBfcHJvY2Vzc19pbnQgKGludCBsZXZlbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGlycXJldHVybl90ICgqcTQwX2RlZmF1bHRfaGFuZGxlcltdKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOyAgLyogYWRkZWQganVzdCBmb3IgZGVidWdnaW5nICovCitleHRlcm4gdm9pZCBxNDBfaW5pdF9JUlEgKHZvaWQpOworZXh0ZXJuIHZvaWQgcTQwX2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50ICBzaG93X3E0MF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHE0MF9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcTQwX2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgcTQwX2dldF9tb2RlbChjaGFyICptb2RlbCk7CitzdGF0aWMgaW50ICBxNDBfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKK2V4dGVybiBpbnQgIHE0MF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIHE0MF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcTQwX2dldHRpbWVvZmZzZXQgKHZvaWQpOworZXh0ZXJuIGludCBxNDBfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBxNDBfZ2V0X3NzICh2b2lkKTsKK2V4dGVybiBpbnQgcTQwX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgcTQwX2dldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCk7CitzdGF0aWMgaW50IHE0MF9zZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpOworZXh0ZXJuIHZvaWQgcTQwX3Jlc2V0ICh2b2lkKTsKK3ZvaWQgcTQwX2hhbHQodm9pZCk7CitleHRlcm4gdm9pZCBxNDBfd2FpdGJ1dCh2b2lkKTsKK3ZvaWQgcTQwX3NldF92ZWN0b3JzICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcTQwX21rc291bmQodW5zaWduZWQgaW50IC8qZnJlcSovLCB1bnNpZ25lZCBpbnQgLyp0aWNrcyovICk7CisKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CitzdGF0aWMgdm9pZCBxNDBfbWVtX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpiLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpOworCitleHRlcm4gaW50IHFsX3RpY2tzOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgcTQwX2NvbnNvbGVfZHJpdmVyID0geworCS5uYW1lID0JCSJkZWJ1ZyIsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorfTsKKworCisvKiBlYXJseSBkZWJ1Z2dpbmcgZnVuY3Rpb246Ki8KK2V4dGVybiBjaGFyICpxNDBfbWVtX2NwdHI7IC8qPShjaGFyICopMHhmZjAyMDAwMDsqLworc3RhdGljIGludCBfY3BsZWZ0OworCitzdGF0aWMgdm9pZCBxNDBfbWVtX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAorCQkJCSAgdW5zaWduZWQgaW50IGNvdW50KQoreworICBjaGFyICpwPShjaGFyICopczsKKworICBpZiAoY291bnQ8X2NwbGVmdCkKKyAgICB3aGlsZSAoY291bnQtLSA+MCl7CisgICAgICAqcTQwX21lbV9jcHRyPSpwKys7CisgICAgICBxNDBfbWVtX2NwdHIrPTQ7CisgICAgICBfY3BsZWZ0LS07CisgICAgfQorfQorI2lmIDAKK3ZvaWQgcHJpbnRxNDAoY2hhciAqc3RyKQoreworICBpbnQgbD1zdHJsZW4oc3RyKTsKKyAgY2hhciAqcD1xNDBfbWVtX2NwdHI7CisKKyAgd2hpbGUgKGwtLSA+MCAmJiBfY3BsZWZ0LS0gPjApCisgICAgeworICAgICAgKnA9KnN0cisrOworICAgICAgcCs9NDsKKyAgICB9CisgIHE0MF9tZW1fY3B0cj1wOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaGFsdGVkPTA7CisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBxNDBfaGVhcnRiZWF0KGludCBvbikKK3sKKyAgaWYgKGhhbHRlZCkgcmV0dXJuOworCisgIGlmIChvbikKKyAgICBRNDBfTEVEX09OKCk7CisgIGVsc2UKKyAgICBRNDBfTEVEX09GRigpOworfQorI2VuZGlmCisKK3ZvaWQgcTQwX3Jlc2V0KHZvaWQpCit7CisgICAgICAgIGhhbHRlZD0xOworICAgICAgICBwcmludGsgKCJcblxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorCQkiQ2FsbGVkIHE0MF9yZXNldCA6IHByZXNzIHRoZSBSRVNFVCBidXR0b24hISBcbiIKKwkJIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCVE0MF9MRURfT04oKTsKKwl3aGlsZSgxKSA7Cit9Cit2b2lkIHE0MF9oYWx0KHZvaWQpCit7CisgICAgICAgIGhhbHRlZD0xOworICAgICAgICBwcmludGsgKCJcblxuKioqKioqKioqKioqKioqKioqKlxuIgorCQkgICAgIiAgQ2FsbGVkIHE0MF9oYWx0XG4iCisJCSAgICAiKioqKioqKioqKioqKioqKioqKlxuIik7CisJUTQwX0xFRF9PTigpOworCXdoaWxlKDEpIDsKK30KKworc3RhdGljIHZvaWQgcTQwX2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKyAgICBzcHJpbnRmKG1vZGVsLCAiUTQwIik7Cit9CisKKy8qIE5vIGhhcmR3YXJlIG9wdGlvbnMgb24gUTQwPyAqLworCitzdGF0aWMgaW50IHE0MF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisgICAgKmJ1ZmZlciA9ICdcMCc7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VycG9ydHNbXT17MHgzZjgsMHgyZjgsMHgzZTgsMHgyZTgsMH07Cit2b2lkIHE0MF9kaXNhYmxlX2lycXModm9pZCkKK3sKKyAgdW5zaWduZWQgaSxqOworCisgIGo9MDsKKyAgd2hpbGUoKGk9c2VycG9ydHNbaisrXSkpIG91dGIoMCxpK1VBUlRfSUVSKTsKKyAgbWFzdGVyX291dGIoMCxFWFRfRU5BQkxFX1JFRyk7CisgIG1hc3Rlcl9vdXRiKDAsS0VZX0lSUV9FTkFCTEVfUkVHKTsKK30KKwordm9pZCBfX2luaXQgY29uZmlnX3E0MCh2b2lkKQoreworICAgIG1hY2hfc2NoZWRfaW5pdCAgICAgID0gcTQwX3NjaGVkX2luaXQ7CisKKyAgICBtYWNoX2luaXRfSVJRICAgICAgICA9IHE0MF9pbml0X0lSUTsKKyAgICBtYWNoX2dldHRpbWVvZmZzZXQgICA9IHE0MF9nZXR0aW1lb2Zmc2V0OworICAgIG1hY2hfaHdjbGsgICAgICAgICAgID0gcTQwX2h3Y2xrOworICAgIG1hY2hfZ2V0X3NzICAgICAgICAgID0gcTQwX2dldF9zczsKKyAgICBtYWNoX2dldF9ydGNfcGxsICAgICA9IHE0MF9nZXRfcnRjX3BsbDsKKyAgICBtYWNoX3NldF9ydGNfcGxsICAgICA9IHE0MF9zZXRfcnRjX3BsbDsKKyAgICBtYWNoX3NldF9jbG9ja19tbXNzCSA9IHE0MF9zZXRfY2xvY2tfbW1zczsKKworICAgIG1hY2hfcmVzZXQJCSA9IHE0MF9yZXNldDsKKyAgICBtYWNoX2ZyZWVfaXJxCSA9IHE0MF9mcmVlX2lycTsKKyAgICBtYWNoX3Byb2Nlc3NfaW50CSA9IHE0MF9wcm9jZXNzX2ludDsKKyAgICBtYWNoX2dldF9pcnFfbGlzdAkgPSBzaG93X3E0MF9pbnRlcnJ1cHRzOworICAgIG1hY2hfcmVxdWVzdF9pcnEJID0gcTQwX3JlcXVlc3RfaXJxOworICAgIGVuYWJsZV9pcnEJCSA9IHE0MF9lbmFibGVfaXJxOworICAgIGRpc2FibGVfaXJxICAgICAgICAgID0gcTQwX2Rpc2FibGVfaXJxOworICAgIG1hY2hfZGVmYXVsdF9oYW5kbGVyID0gJnE0MF9kZWZhdWx0X2hhbmRsZXI7CisgICAgbWFjaF9nZXRfbW9kZWwgICAgICAgPSBxNDBfZ2V0X21vZGVsOworICAgIG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBxNDBfZ2V0X2hhcmR3YXJlX2xpc3Q7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVApIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUpCisgICAgbWFjaF9iZWVwICAgICAgICAgICAgPSBxNDBfbWtzb3VuZDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKyAgICBtYWNoX2hlYXJ0YmVhdCA9IHE0MF9oZWFydGJlYXQ7CisjZW5kaWYKKyAgICBtYWNoX2hhbHQgPSBxNDBfaGFsdDsKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorICAgIGNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOworI2VuZGlmCisKKyAgICAvKiBkaXNhYmxlIGEgZmV3IHRoaW5ncyB0aGF0IFNNU1EgbWlnaHQgaGF2ZSBsZWZ0IGVuYWJsZWQgKi8KKyAgICBxNDBfZGlzYWJsZV9pcnFzKCk7CisKKyAgICAvKiBubyBETUEgYXQgYWxsLCBidXQgaWRlLXNjc2kgcmVxdWlyZXMgaXQuLiBtYWtlIHN1cmUKKyAgICAgKiBhbGwgcGh5c2ljYWwgUkFNIGZpdHMgaW50byB0aGUgYm91bmRhcnkgLSBvdGhlcndpc2UKKyAgICAgKiBhbGxvY2F0b3IgbWF5IHBsYXkgY29zdGx5IGFuZCB1c2VsZXNzIHRyaWNrcyAqLworICAgIG1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMTAyNCoxMDI0KjEwMjQ7CisKKyAgICAvKiB1c2VmdWwgZm9yIGVhcmx5IGRlYnVnZ2luZyBzdGFnZXMgLSB3cml0ZXMga2VybmVsIG1lc3NhZ2VzIGludG8gU1JBTSAqLworICAgIGlmICghc3RybmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsIm1lbSIsMyApKQorICAgICAgeworCS8qcHJpbnRrKCJ1c2luZyBOVlJBTSBkZWJ1ZywgcTQwX21lbV9jcHRyPSVwXG4iLHE0MF9tZW1fY3B0cik7Ki8KKwlfY3BsZWZ0PTIwMDAtKChsb25nKXE0MF9tZW1fY3B0ci0weGZmMDIwMDAwKS80OworCXE0MF9jb25zb2xlX2RyaXZlci53cml0ZSA9IHE0MF9tZW1fY29uc29sZV93cml0ZTsKKwlyZWdpc3Rlcl9jb25zb2xlKCZxNDBfY29uc29sZV9kcml2ZXIpOworICAgICAgfQorfQorCisKK2ludCBxNDBfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjKQoreworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgYmNkMmJpbiAodW5zaWduZWQgY2hhciBiKQoreworCXJldHVybiAoKGI+PjQpKjEwICsgKGImMTUpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGJpbjJiY2QgKHVuc2lnbmVkIGNoYXIgYikKK3sKKwlyZXR1cm4gKCgoYi8xMCkqMTYpICsgKGIlMTApKTsKK30KKworCit1bnNpZ25lZCBsb25nIHE0MF9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworICAgIHJldHVybiA1MDAwKihxbF90aWNrcyE9MCk7Cit9CisKKworLyoKKyAqIExvb2tzIGxpa2Ugb3AgaXMgbm9uLXplcm8gZm9yIHNldHRpbmcgdGhlIGNsb2NrLCBhbmQgemVybyBmb3IKKyAqIHJlYWRpbmcgdGhlIGNsb2NrLgorICoKKyAqICBzdHJ1Y3QgaHdjbGtfdGltZSB7CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBzZWM7ICAgICAgIDAuLjU5CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBtaW47ICAgICAgIDAuLjU5CisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBob3VyOyAgICAgIDAuLjIzCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBkYXk7ICAgICAgIDEuLjMxCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICBtb247ICAgICAgIDAuLjExCisgKiAgICAgICAgIHVuc2lnbmVkICAgICAgICB5ZWFyOyAgICAgIDAwLi4uCisgKiAgICAgICAgIGludCAgICAgICAgICAgICB3ZGF5OyAgICAgIDAuLjYsIDAgaXMgU3VuZGF5LCAtMSBtZWFucyB1bmtub3duL2Rvbid0IHNldAorICogfTsKKyAqLworCitpbnQgcTQwX2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworICAgICAgICBpZiAob3ApCisJewkvKiBXcml0ZS4uLi4gKi8KKwkgICAgICAgIFE0MF9SVENfQ1RSTCB8PSBRNDBfUlRDX1dSSVRFOworCisJCVE0MF9SVENfU0VDUyA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwkJUTQwX1JUQ19NSU5TID0gYmluMmJjZCh0LT50bV9taW4pOworCQlRNDBfUlRDX0hPVVIgPSBiaW4yYmNkKHQtPnRtX2hvdXIpOworCQlRNDBfUlRDX0RBVEUgPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCQlRNDBfUlRDX01OVEggPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOworCQlRNDBfUlRDX1lFQVIgPSBiaW4yYmNkKHQtPnRtX3llYXIlMTAwKTsKKwkJaWYgKHQtPnRtX3dkYXkgPj0gMCkKKwkJCVE0MF9SVENfRE9XID0gYmluMmJjZCh0LT50bV93ZGF5KzEpOworCisJICAgICAgICBRNDBfUlRDX0NUUkwgJj0gfihRNDBfUlRDX1dSSVRFKTsKKwl9CisJZWxzZQorCXsJLyogUmVhZC4uLi4gICovCisJICBRNDBfUlRDX0NUUkwgfD0gUTQwX1JUQ19SRUFEOworCisJICB0LT50bV95ZWFyID0gYmNkMmJpbiAoUTQwX1JUQ19ZRUFSKTsKKwkgIHQtPnRtX21vbiAgPSBiY2QyYmluIChRNDBfUlRDX01OVEgpLTE7CisJICB0LT50bV9tZGF5ID0gYmNkMmJpbiAoUTQwX1JUQ19EQVRFKTsKKwkgIHQtPnRtX2hvdXIgPSBiY2QyYmluIChRNDBfUlRDX0hPVVIpOworCSAgdC0+dG1fbWluICA9IGJjZDJiaW4gKFE0MF9SVENfTUlOUyk7CisJICB0LT50bV9zZWMgID0gYmNkMmJpbiAoUTQwX1JUQ19TRUNTKTsKKworCSAgUTQwX1JUQ19DVFJMICY9IH4oUTQwX1JUQ19SRUFEKTsKKworCSAgaWYgKHQtPnRtX3llYXIgPCA3MCkKKwkgICAgdC0+dG1feWVhciArPSAxMDA7CisJICB0LT50bV93ZGF5ID0gYmNkMmJpbihRNDBfUlRDX0RPVyktMTsKKworCX0KKworCXJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgcTQwX2dldF9zcyh2b2lkKQoreworCXJldHVybiBiY2QyYmluKFE0MF9SVENfU0VDUyk7Cit9CisKKy8qCisgKiBTZXQgdGhlIG1pbnV0ZXMgYW5kIHNlY29uZHMgZnJvbSBzZWNvbmRzIHZhbHVlICdub3d0aW1lJy4gIEZhaWwgaWYKKyAqIGNsb2NrIGlzIG91dCBieSA+IDMwIG1pbnV0ZXMuICBMb2dpYyBsaWZ0ZWQgZnJvbSBhdGFyaSBjb2RlLgorICovCisKK2ludCBxNDBfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzaG9ydCByZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjAsIHJlYWxfbWludXRlcyA9IChub3d0aW1lIC8gNjApICUgNjA7CisKKwlpbnQgcnRjX21pbnV0ZXM7CisKKworCXJ0Y19taW51dGVzID0gYmNkMmJpbiAoUTQwX1JUQ19NSU5TKTsKKworCWlmICgocnRjX21pbnV0ZXMgPCByZWFsX21pbnV0ZXMKKwkJPyByZWFsX21pbnV0ZXMgLSBydGNfbWludXRlcworCQkJOiBydGNfbWludXRlcyAtIHJlYWxfbWludXRlcykgPCAzMCkKKwl7CisJICAgICAgICBRNDBfUlRDX0NUUkwgfD0gUTQwX1JUQ19XUklURTsKKwkJUTQwX1JUQ19NSU5TID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOworCQlRNDBfUlRDX1NFQ1MgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCVE0MF9SVENfQ1RSTCAmPSB+KFE0MF9SVENfV1JJVEUpOworCX0KKwllbHNlCisJCXJldHZhbCA9IC0xOworCisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIGdldCBhbmQgc2V0IFBMTCBjYWxpYnJhdGlvbiBvZiBSVEMgY2xvY2sgKi8KKyNkZWZpbmUgUTQwX1JUQ19QTExfTUFTSyAoKDE8PDUpLTEpCisjZGVmaW5lIFE0MF9SVENfUExMX1NJR04gKDE8PDUpCisKK3N0YXRpYyBpbnQgcTQwX2dldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCkKK3sKKwlpbnQgdG1wPVE0MF9SVENfQ1RSTDsKKwlwbGwtPnBsbF92YWx1ZSA9IHRtcCAmIFE0MF9SVENfUExMX01BU0s7CisJaWYgKHRtcCAmIFE0MF9SVENfUExMX1NJR04pCisJCXBsbC0+cGxsX3ZhbHVlID0gLXBsbC0+cGxsX3ZhbHVlOworCXBsbC0+cGxsX21heD0zMTsKKwlwbGwtPnBsbF9taW49LTMxOworCXBsbC0+cGxsX3Bvc211bHQ9NTEyOworCXBsbC0+cGxsX25lZ211bHQ9MjU2OworCXBsbC0+cGxsX2Nsb2NrPTEyNTgyOTEyMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxNDBfc2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCWlmICghcGxsLT5wbGxfY3RybCl7CisJCS8qIHRoZSBkb2NzIGFyZSBhIGJpdCB1bmNsZWFyIHNvIEkgYW0gZG91Ymxlc2V0dGluZyAqLworCQkvKiBSVENfV1JJVEUgaGVyZSAuLi4gKi8KKwkJaW50IHRtcCA9IChwbGwtPnBsbF92YWx1ZSAmIDMxKSB8IChwbGwtPnBsbF92YWx1ZTwwID8gMzIgOiAwKSB8CisJCQkgIFE0MF9SVENfV1JJVEU7CisJCVE0MF9SVENfQ1RSTCB8PSBRNDBfUlRDX1dSSVRFOworCQlRNDBfUlRDX0NUUkwgPSB0bXA7CisJCVE0MF9SVENfQ1RSTCAmPSB+KFE0MF9SVENfV1JJVEUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL3E0MGludHMuYyBiL2FyY2gvbTY4ay9xNDAvcTQwaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZWNjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvcTQwL3E0MGludHMuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIGFyY2gvbTY4ay9xNDAvcTQwaW50cy5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEgUmljaGFyZCBaaWRsaWNreQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAuLiB1c2VkIHRvIGJlIGxvb3NlbHkgYmFzZWQgb24gYnZtZTYwMDBpbnRzLmMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorCisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisjaW5jbHVkZSA8YXNtL3E0MF9tYXN0ZXIuaD4KKyNpbmNsdWRlIDxhc20vcTQwaW50cy5oPgorCisvKgorICogUTQwIElSUXMgYXJlIGRlZmluZWQgYXMgZm9sbG93czoKKyAqICAgICAgICAgICAgMyw0LDUsNiw3LDEwLDExLDE0LDE1IDogSVNBIGRldiBJUlFzCisgKiAgICAgICAgICAgIDE2LTMxOiByZXNlcnZlZAorICogICAgICAgICAgICAzMiAgIDoga2V5Ym9hcmQgaW50CisgKiAgICAgICAgICAgIDMzICAgOiBmcmFtZSBpbnQgKDUwLzIwMCBIeiBwZXJpb2RpYyB0aW1lcikKKyAqICAgICAgICAgICAgMzQgICA6IHNhbXBsZSBpbnQgKDEwLzIwIEtIeiBwZXJpb2RpYyB0aW1lcikKKyAqCisqLworCitleHRlcm4gaW50IGludHNfaW5pdGVkOworCisKK2lycXJldHVybl90IHE0MF9pcnEyX2hhbmRsZXIgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxNDBfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworc3RhdGljIGlycXJldHVybl90IGRlZmF1bHRfaGFuZGxlcihpbnQgbGV2LCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCisjZGVmaW5lIERFVk5BTUVfU0laRSAyNAorCitzdGF0aWMgc3RydWN0IHE0MF9pcnFfbm9kZSB7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl2b2lkCQkqZGV2X2lkOworICAvKiAgICAgICAgc3RydWN0IHE0MF9pcnFfbm9kZSAqbmV4dDsqLworICAgICAgICBjaGFyCSAgICAgICAgZGV2bmFtZVtERVZOQU1FX1NJWkVdOworCXVuc2lnbmVkCWNvdW50OworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgc3RhdGU7Cit9IGlycV90YWJbUTQwX0lSUV9NQVgrMV07CisKK3Nob3J0IHVuc2lnbmVkIHE0MF9hYmxlY291bnRbUTQwX0lSUV9NQVgrMV07CisKKy8qCisgKiB2b2lkIHE0MF9pbml0X0lSUSAodm9pZCkKKyAqCisgKiBQYXJhbWV0ZXJzOglOb25lCisgKgorICogUmV0dXJuczoJTm90aGluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCisgKiB0aGUgcTQwIElSUSBoYW5kbGluZyByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgaW50IGRpc2FibGVkPTA7CisKK3ZvaWQgcTQwX2luaXRfSVJRICh2b2lkKQoreworCWludCBpOworCisJZGlzYWJsZWQ9MDsKKwlmb3IgKGkgPSAwOyBpIDw9IFE0MF9JUlFfTUFYOyBpKyspIHsKKwkJaXJxX3RhYltpXS5oYW5kbGVyID0gcTQwX2RlZmhhbmQ7CisJCWlycV90YWJbaV0uZmxhZ3MgPSAwOworCQlpcnFfdGFiW2ldLmRldl9pZCA9IE5VTEw7CisJCS8qCQlpcnFfdGFiW2ldLm5leHQgPSBOVUxMOyovCisJCWlycV90YWJbaV0uZGV2bmFtZVswXSA9IDA7CisJCWlycV90YWJbaV0uY291bnQgPSAwOworCQlpcnFfdGFiW2ldLnN0YXRlID0wOworCQlxNDBfYWJsZWNvdW50W2ldPTA7ICAgLyogYWxsIGVuYWJsZWQgKi8KKwl9CisKKwkvKiBzZXR1cCBoYW5kbGVyIGZvciBJU0EgaW50cyAqLworCWNwdV9yZXF1ZXN0X2lycShJUlEyLCBxNDBfaXJxMl9oYW5kbGVyLCAwLCAicTQwIElTQSBhbmQgbWFzdGVyIGNoaXAiLAorCQkJTlVMTCk7CisKKwkvKiBub3cgZW5hYmxlIHNvbWUgaW50cy4uICovCisJbWFzdGVyX291dGIoMSxFWFRfRU5BQkxFX1JFRyk7ICAvKiBJU0EgSVJRIDUtMTUgKi8KKworCS8qIG1ha2Ugc3VyZSBrZXlib2FyZCBJUlEgaXMgZGlzYWJsZWQgKi8KKwltYXN0ZXJfb3V0YigwLEtFWV9JUlFfRU5BQkxFX1JFRyk7Cit9CisKK2ludCBxNDBfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworICAvKnByaW50aygicTQwX3JlcXVlc3RfaXJxICVkLCAlc1xuIixpcnEsZGV2bmFtZSk7Ki8KKworCWlmIChpcnEgPiBRNDBfSVJRX01BWCB8fCAoaXJxPjE1ICYmIGlycTwzMikpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZCBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogdGVzdCBmb3IgSVNBIGludHMgbm90IGltcGxlbWVudGVkIGJ5IEhXICovCisJc3dpdGNoIChpcnEpCisJICB7CisJICBjYXNlIDE6IGNhc2UgMjogY2FzZSA4OiBjYXNlIDk6CisJICBjYXNlIDEyOiBjYXNlIDEzOgorCSAgICBwcmludGsoIiVzOiBJU0EgSVJRICVkIGZyb20gJXMgbm90IGltcGxlbWVudGVkIGJ5IEhXXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJICAgIHJldHVybiAtRU5YSU87CisJICBjYXNlIDExOgorCSAgICBwcmludGsoIndhcm5pbmcgSVJRIDEwIGFuZCAxMSBub3QgZGlzdGluZ3Vpc2hhYmxlXG4iKTsKKwkgICAgaXJxPTEwOworCSAgZGVmYXVsdDoKKwkgICAgOworCSAgfQorCisJaWYgKGlycTxRNDBfSVJRX1NBTVBMRSkKKwkgIHsKKwkgICAgaWYgKGlycV90YWJbaXJxXS5kZXZfaWQgIT0gTlVMTCkKKwkJICB7CisJCSAgICBwcmludGsoIiVzOiBJUlEgJWQgZnJvbSAlcyBpcyBub3QgcmVwbGFjZWFibGVcbiIsCisJCQkgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCQkgICAgcmV0dXJuIC1FQlVTWTsKKwkJICB9CisJICAgIC8qcHJpbnRrKCJJUlEgJWQgc2V0IHRvIGhhbmRsZXIgJXBcbiIsaXJxLGhhbmRsZXIpOyovCisJICAgIGlmIChkZXZfaWQ9PU5VTEwpCisJCSAgeworCQlwcmludGsoIldBUk5JTkc6IGRldl9pZCA9PSBOVUxMIGluIHJlcXVlc3RfaXJxXG4iKTsKKwkJZGV2X2lkPSh2b2lkKikxOworCSAgICAgIH0KKwkgICAgaXJxX3RhYltpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCSAgICBpcnFfdGFiW2lycV0uZmxhZ3MgICA9IGZsYWdzOworCSAgICBpcnFfdGFiW2lycV0uZGV2X2lkICA9IGRldl9pZDsKKwkgICAgc3RybGNweShpcnFfdGFiW2lycV0uZGV2bmFtZSxkZXZuYW1lLHNpemVvZihpcnFfdGFiW2lycV0uZGV2bmFtZSkpOworCSAgICBpcnFfdGFiW2lycV0uc3RhdGUgPSAwOworCSAgICByZXR1cm4gMDsKKwkgIH0KKwllbHNlIHsKKwkgIC8qIFE0MF9JUlFfU0FNUExFIDpzb21ld2hhdCBzcGVjaWFsIGFjdGlvbnMgcmVxdWlyZWQgaGVyZSAuLiovCisJICBjcHVfcmVxdWVzdF9pcnEoNCwgaGFuZGxlciwgZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CisJICBjcHVfcmVxdWVzdF9pcnEoNiwgaGFuZGxlciwgZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CisJICByZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgcTQwX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxID4gUTQwX0lSUV9NQVggfHwgKGlycT4xNSAmJiBpcnE8MzIpKSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWQsIGRldl9pZCAleCBcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCAodW5zaWduZWQpZGV2X2lkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHRlc3QgZm9yIElTQSBpbnRzIG5vdCBpbXBsZW1lbnRlZCBieSBIVyAqLworCXN3aXRjaCAoaXJxKQorCSAgeworCSAgY2FzZSAxOiBjYXNlIDI6IGNhc2UgODogY2FzZSA5OgorCSAgY2FzZSAxMjogY2FzZSAxMzoKKwkgICAgcHJpbnRrKCIlczogSVNBIElSUSAlZCBmcm9tICV4IGludmFsaWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCAodW5zaWduZWQpZGV2X2lkKTsKKwkgICAgcmV0dXJuOworCSAgY2FzZSAxMTogaXJxPTEwOworCSAgZGVmYXVsdDoKKwkgICAgOworCSAgfQorCisJaWYgKGlycTxRNDBfSVJRX1NBTVBMRSkKKwkgIHsKKwkgICAgaWYgKGlycV90YWJbaXJxXS5kZXZfaWQgIT0gZGV2X2lkKQorCSAgICAgIHByaW50aygiJXM6IFJlbW92aW5nIHByb2JhYmx5IHdyb25nIElSUSAlZCBmcm9tICVzXG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycV0uZGV2bmFtZSk7CisKKwkgICAgaXJxX3RhYltpcnFdLmhhbmRsZXIgPSBxNDBfZGVmaGFuZDsKKwkgICAgaXJxX3RhYltpcnFdLmZsYWdzICAgPSAwOworCSAgICBpcnFfdGFiW2lycV0uZGV2X2lkICA9IE5VTEw7CisJICAgIC8qIGlycV90YWJbaXJxXS5kZXZuYW1lID0gTlVMTDsgKi8KKwkgICAgLyogZG8gbm90IHJlc2V0IHN0YXRlICEhICovCisJICB9CisJZWxzZQorCSAgeyAvKiA9PSBRNDBfSVJRX1NBTVBMRSAqLworCSAgICBjcHVfZnJlZV9pcnEoNCwgZGV2X2lkKTsKKwkgICAgY3B1X2ZyZWVfaXJxKDYsIGRldl9pZCk7CisJICB9Cit9CisKKworaXJxcmV0dXJuX3QgcTQwX3Byb2Nlc3NfaW50IChpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgcHJpbnRrKCJ1bmV4cGVjdGVkIGludGVycnVwdCB2ZWM9JXgsIHBjPSVseCwgZDA9JWx4LCBkMF9vcmlnPSVseCwgZDE9JWx4LCBkMj0lbHhcbiIsCisgICAgICAgICAgbGV2ZWwsIGZwLT5wYywgZnAtPmQwLCBmcC0+b3JpZ19kMCwgZnAtPmQxLCBmcC0+ZDIpOworICBwcmludGsoIlx0SUlSUV9SRUcgPSAleCwgRUlSUV9SRUcgPSAleFxuIixtYXN0ZXJfaW5iKElJUlFfUkVHKSxtYXN0ZXJfaW5iKEVJUlFfUkVHKSk7CisgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHRoaXMgc3R1ZmYgZG9lc24ndCByZWFsbHkgYmVsb25nIGhlcmUuLgorKi8KKworaW50IHFsX3RpY2tzOyAgICAgICAgICAgICAgLyogMjAwSHogdGlja3Mgc2luY2UgbGFzdCBqaWZmaWUgKi8KK3N0YXRpYyBpbnQgc291bmRfdGlja3M7CisKKyNkZWZpbmUgU1ZPTCA0NQorCit2b2lkIHE0MF9ta3NvdW5kKHVuc2lnbmVkIGludCBoeiwgdW5zaWduZWQgaW50IHRpY2tzKQoreworICAvKiBmb3Igbm93IGlnbm9yZSBoeiwgZXhjZXB0IHRoYXQgaHo9PTAgc3dpdGNoZXMgb2ZmIHNvdW5kICovCisgIC8qIHNpbXBseSBhbHRlcm5hdGUgdGhlIGFtcGwgKDEyOC1TVk9MKS0oMTI4K1NWT0wpLS4uLS4uIGF0IDIwMEh6ICovCisgIGlmIChoej09MCkKKyAgICB7CisgICAgICBpZiAoc291bmRfdGlja3MpCisJc291bmRfdGlja3M9MTsKKworICAgICAgKkRBQ19MRUZUPTEyODsKKyAgICAgICpEQUNfUklHSFQ9MTI4OworCisgICAgICByZXR1cm47CisgICAgfQorICAvKiBzb3VuZCBpdHNlbGYgaXMgZG9uZSBpbiBxNDBfdGltZXJfaW50ICovCisgIGlmIChzb3VuZF90aWNrcyA9PSAwKSBzb3VuZF90aWNrcz0xMDAwOyAvKiBwcmV0dHkgbG9uZyBiZWVwICovCisgIHNvdW5kX3RpY2tzPXRpY2tzPDwxOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgKCpxNDBfdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCitzdGF0aWMgaXJxcmV0dXJuX3QgcTQwX3RpbWVyX2ludCAoaW50IGlycSwgdm9pZCAqIGRldiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQoreworICAgIHFsX3RpY2tzID0gcWxfdGlja3MgPyAwIDogMTsKKyAgICBpZiAoc291bmRfdGlja3MpCisgICAgICB7CisJdW5zaWduZWQgY2hhciBzdmFsPShzb3VuZF90aWNrcyAmIDEpID8gMTI4LVNWT0wgOiAxMjgrU1ZPTDsKKwlzb3VuZF90aWNrcy0tOworCSpEQUNfTEVGVD1zdmFsOworCSpEQUNfUklHSFQ9c3ZhbDsKKyAgICAgIH0KKworICAgIGlmICghcWxfdGlja3MpCisJcTQwX3RpbWVyX3JvdXRpbmUoaXJxLCBkZXYsIHJlZ3MpOworICAgIHJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBxNDBfc2NoZWRfaW5pdCAoaXJxcmV0dXJuX3QgKCp0aW1lcl9yb3V0aW5lKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisgICAgaW50IHRpbWVyX2lycTsKKworICAgIHE0MF90aW1lcl9yb3V0aW5lID0gdGltZXJfcm91dGluZTsKKyAgICB0aW1lcl9pcnE9UTQwX0lSUV9GUkFNRTsKKworICAgIGlmIChyZXF1ZXN0X2lycSh0aW1lcl9pcnEsIHE0MF90aW1lcl9pbnQsIDAsCisJCQkJInRpbWVyIiwgcTQwX3RpbWVyX2ludCkpCisJcGFuaWMgKCJDb3VsZG4ndCByZWdpc3RlciB0aW1lciBpbnQiKTsKKworICAgIG1hc3Rlcl9vdXRiKC0xLEZSQU1FX0NMRUFSX1JFRyk7CisgICAgbWFzdGVyX291dGIoIDEsRlJBTUVfUkFURV9SRUcpOworfQorCisKKy8qCisgKiB0YWJsZXMgdG8gdHJhbnNsYXRlIGJpdHMgaW50byBJUlEgbnVtYmVycworICogaXQgaXMgYSBnb29kIGlkZWEgdG8gb3JkZXIgdGhlIGVudHJpZXMgYnkgcHJpb3JpdHkKKyAqCisqLworCitzdHJ1Y3QgSVJRX1RBQkxFeyB1bnNpZ25lZCBtYXNrOyBpbnQgaXJxIDt9OworI2lmIDAKK3N0YXRpYyBzdHJ1Y3QgSVJRX1RBQkxFIGlpcnFzW109eworICB7UTQwX0lSUV9GUkFNRV9NQVNLLFE0MF9JUlFfRlJBTUV9LAorICB7UTQwX0lSUV9LRVlCX01BU0ssUTQwX0lSUV9LRVlCT0FSRH0sCisgIHswLDB9fTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBJUlFfVEFCTEUgZWlycXNbXSA9IHsKKyAgeyAubWFzayA9IFE0MF9JUlEzX01BU0ssCS5pcnEgPSAzIH0sCS8qIHNlciAxICovCisgIHsgLm1hc2sgPSBRNDBfSVJRNF9NQVNLLAkuaXJxID0gNCB9LAkvKiBzZXIgMiAqLworICB7IC5tYXNrID0gUTQwX0lSUTE0X01BU0ssCS5pcnEgPSAxNCB9LAkvKiBJREUgMSAqLworICB7IC5tYXNrID0gUTQwX0lSUTE1X01BU0ssCS5pcnEgPSAxNSB9LAkvKiBJREUgMiAqLworICB7IC5tYXNrID0gUTQwX0lSUTZfTUFTSywJLmlycSA9IDYgfSwJLyogZmxvcHB5LCBoYW5kbGVkIGVsc2V3aGVyZSAqLworICB7IC5tYXNrID0gUTQwX0lSUTdfTUFTSywJLmlycSA9IDcgfSwJLyogcGFyICovCisgIHsgLm1hc2sgPSBRNDBfSVJRNV9NQVNLLAkuaXJxID0gNSB9LAorICB7IC5tYXNrID0gUTQwX0lSUTEwX01BU0ssCS5pcnEgPSAxMCB9LAorICB7MCwwfQorfTsKKworLyogY29tcGxhaW4gb25seSB0aGlzIG1hbnkgdGltZXMgYWJvdXQgc3B1cmlvdXMgaW50cyA6ICovCitzdGF0aWMgaW50IGNjbGVpcnE9NjA7ICAgIC8qIElTQSBkZXYgSVJRJ3MqLworLypzdGF0aWMgaW50IGNjbGlycT02MDsqLyAgICAgLyogaW50ZXJuYWwgKi8KKworLyogRklYTUU6IGFkZCBzaGFyZWQgaW50cyxtYXNrLHVubWFzayxwcm9iaW5nLi4uLiAqLworCisjZGVmaW5lIElSUV9JTlBST0dSRVNTIDEKKy8qc3RhdGljIHVuc2lnbmVkIHNob3J0IHNhdmVkX21hc2s7Ki8KKy8vc3RhdGljIGludCBkb190aW50PTA7CisKKyNkZWZpbmUgREVCVUdfUTQwSU5UCisvKiNkZWZpbmUgSVBfVVNFX0RJU0FCTEUgKi8vKiB3b3VsZCBiZSBuaWNlLCBidXQgY3Jhc2hlcyA/Pz8/ICovCisKK3N0YXRpYyBpbnQgbWV4dF9kaXNhYmxlZD0wOyAgLyogZXh0IGlycSBkaXNhYmxlZCBieSBtYXN0ZXIgY2hpcD8gKi8KK3N0YXRpYyBpbnQgYWxpYXNlZF9pcnE9MDsgIC8qIGhvdyBtYW55IHRpbWVzIGluc2lkZSBoYW5kbGVyID8qLworCisKKy8qIGdvdCBsZXZlbCAyIGludGVycnVwdCwgZGlzcGF0Y2ggdG8gSVNBIG9yIGtleWJvYXJkL3RpbWVyIElSUXMgKi8KK2lycXJldHVybl90IHE0MF9pcnEyX2hhbmRsZXIgKGludCB2ZWMsIHZvaWQgKmRldm5hbWUsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgdW5zaWduZWQgbWlyLCBtZXI7CisgIGludCBpcnEsaTsKKworLy9yZXBlYXQ6CisgIG1pcj1tYXN0ZXJfaW5iKElJUlFfUkVHKTsKKyAgaWYgKG1pciZRNDBfSVJRX0ZSQU1FX01BU0spIHsKKwkgIGlycV90YWJbUTQwX0lSUV9GUkFNRV0uY291bnQrKzsKKwkgIGlycV90YWJbUTQwX0lSUV9GUkFNRV0uaGFuZGxlcihRNDBfSVJRX0ZSQU1FLGlycV90YWJbUTQwX0lSUV9GUkFNRV0uZGV2X2lkLGZwKTsKKwkgIG1hc3Rlcl9vdXRiKC0xLEZSQU1FX0NMRUFSX1JFRyk7CisgIH0KKyAgaWYgKChtaXImUTQwX0lSUV9TRVJfTUFTSykgfHwgKG1pciZRNDBfSVJRX0VYVF9NQVNLKSkgeworCSAgbWVyPW1hc3Rlcl9pbmIoRUlSUV9SRUcpOworCSAgZm9yIChpPTA7IGVpcnFzW2ldLm1hc2s7IGkrKykgeworCQkgIGlmIChtZXImKGVpcnFzW2ldLm1hc2spKSB7CisJCQkgIGlycT1laXJxc1tpXS5pcnE7CisvKgorICogVGhlcmUgaXMgYSBsaXR0bGUgbWVzcyB3cnQgd2hpY2ggSVJRIHJlYWxseSBjYXVzZWQgdGhpcyBpcnEgcmVxdWVzdC4gVGhlCisgKiBtYWluIHByb2JsZW0gaXMgdGhhdCBJSVJRX1JFRyBhbmQgRUlSUV9SRUcgcmVmbGVjdCB0aGUgc3RhdGUgd2hlbiB0aGV5CisgKiBhcmUgcmVhZCAtIHdoaWNoIGlzIGxvbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FtZSBpbi4gSW4gdGhlb3J5IElSUXMgc2hvdWxkCisgKiBub3QganVzdCBnbyBhd2F5IGJ1dCB0aGV5IG9jY2Fzc2lvbmFsbHkgZG8KKyAqLworCQkJICBpZiAoaXJxPjQgJiYgaXJxPD0xNSAmJiBtZXh0X2Rpc2FibGVkKSB7CisJCQkJICAvKmFsaWFzZWRfaXJxKys7Ki8KKwkJCQkgIGdvdG8gaWlycTsKKwkJCSAgfQorCQkJICBpZiAoaXJxX3RhYltpcnFdLmhhbmRsZXIgPT0gcTQwX2RlZmhhbmQgKSB7CisJCQkJICBwcmludGsoImhhbmRsZXIgZm9yIElSUSAlZCBub3QgZGVmaW5lZFxuIixpcnEpOworCQkJCSAgY29udGludWU7IC8qIGlnbm9yZSB1bmluaXRlZCBJTlRzIDotKCAqLworCQkJICB9CisJCQkgIGlmICggaXJxX3RhYltpcnFdLnN0YXRlICYgSVJRX0lOUFJPR1JFU1MgKSB7CisJCQkJICAvKiBzb21lIGhhbmRsZXJzIGRvIGxvY2FsX2lycV9lbmFibGUoKSBmb3IgaXJxIGxhdGVuY3kgcmVhc29ucywgKi8KKwkJCQkgIC8qIGhvd2V2ZXIgcmVlbnRlcmluZyBhbiBhY3RpdmUgaXJxIGhhbmRsZXIgaXMgbm90IHBlcm1pdHRlZCAqLworI2lmZGVmIElQX1VTRV9ESVNBQkxFCisJCQkJICAvKiBpbiB0aGVvcnkgdGhpcyBpcyB0aGUgYmV0dGVyIHdheSB0byBkbyBpdCBiZWNhdXNlIGl0IHN0aWxsICovCisJCQkJICAvKiBsZXRzIHRocm91Z2ggZWcgdGhlIHNlcmlhbCBpcnFzLCB1bmZvcnR1bmF0ZWx5IGl0IGNyYXNoZXMgKi8KKwkJCQkgIGRpc2FibGVfaXJxKGlycSk7CisJCQkJICBkaXNhYmxlZD0xOworI2Vsc2UKKwkJCQkgIC8qcHJpbnRrKCJJUlFfSU5QUk9HUkVTUyBkZXRlY3RlZCBmb3IgaXJxICVkLCBkaXNhYmxpbmcgLSAlcyBkaXNhYmxlZFxuIixpcnEsZGlzYWJsZWQgPyAiYWxyZWFkeSIgOiAibm90IHlldCIpOyAqLworCQkJCSAgZnAtPnNyID0gKCgoZnAtPnNyKSAmICh+MHg3MDApKSsweDIwMCk7CisJCQkJICBkaXNhYmxlZD0xOworI2VuZGlmCisJCQkJICBnb3RvIGlpcnE7CisJCQkgIH0KKwkJCSAgaXJxX3RhYltpcnFdLmNvdW50Kys7CisJCQkgIGlycV90YWJbaXJxXS5zdGF0ZSB8PSBJUlFfSU5QUk9HUkVTUzsKKwkJCSAgaXJxX3RhYltpcnFdLmhhbmRsZXIoaXJxLGlycV90YWJbaXJxXS5kZXZfaWQsZnApOworCQkJICBpcnFfdGFiW2lycV0uc3RhdGUgJj0gfklSUV9JTlBST0dSRVNTOworCisJCQkgIC8qIG5haXZlbHkgZW5hYmxlIGV2ZXJ5dGhpbmcsIGlmIHRoYXQgZmFpbHMgdGhhbiAgICAqLworCQkJICAvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVlbnRlcmVkIGltbWVkaWF0ZWx5IHRodXMgKi8KKwkJCSAgLyogZ2V0dGluZyBhbm90aGVyIGNoYW5jZSB0byBkaXNhYmxlIHRoZSBJUlEgICAgICAgICovCisKKwkJCSAgaWYgKCBkaXNhYmxlZCApIHsKKyNpZmRlZiBJUF9VU0VfRElTQUJMRQorCQkJCSAgaWYgKGlycT40KXsKKwkJCQkJICBkaXNhYmxlZD0wOworCQkJCQkgIGVuYWJsZV9pcnEoaXJxKTt9CisjZWxzZQorCQkJCSAgZGlzYWJsZWQ9MDsKKwkJCQkgIC8qcHJpbnRrKCJyZWVuYWJsaW5nIGlycSAlZFxuIixpcnEpOyAqLworI2VuZGlmCisJCQkgIH0KKy8vIHVzZWQgdG8gZG8gJ2dvdG8gcmVwZWF0OycgaGVyZSwgdGhpcyBkZWxheWVkIGJoIHByb2Nlc3NpbmcgdG9vIGxvbmcKKwkJCSAgcmV0dXJuIElSUV9IQU5ETEVEOworCQkgIH0KKwkgIH0KKwkgIGlmIChtZXIgJiYgY2NsZWlycT4wICYmICFhbGlhc2VkX2lycSkKKwkJICBwcmludGsoIklTQSBpbnRlcnJ1cHQgZnJvbSB1bmtub3duIHNvdXJjZT8gRUlSUV9SRUcgPSAleFxuIixtZXIpLGNjbGVpcnEtLTsKKyAgfQorIGlpcnE6CisgIG1pcj1tYXN0ZXJfaW5iKElJUlFfUkVHKTsKKyAgLyogc2hvdWxkIHRlc3Qgd2hldGhlciBrZXlib2FyZCBpcnEgaXMgcmVhbGx5IGVuYWJsZWQsIGRvaW5nIGl0IGluIGRlZmhhbmQgKi8KKyAgaWYgKG1pciZRNDBfSVJRX0tFWUJfTUFTSykgeworCSAgaXJxX3RhYltRNDBfSVJRX0tFWUJPQVJEXS5jb3VudCsrOworCSAgaXJxX3RhYltRNDBfSVJRX0tFWUJPQVJEXS5oYW5kbGVyKFE0MF9JUlFfS0VZQk9BUkQsaXJxX3RhYltRNDBfSVJRX0tFWUJPQVJEXS5kZXZfaWQsZnApOworICB9CisgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IHNob3dfcTQwX2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gUTQwX0lSUV9NQVg7IGkrKykgeworCQlpZiAoaXJxX3RhYltpXS5jb3VudCkKKwkJICAgICAgc2VxX3ByaW50ZihwLCAiJXNJUlEgJTAyZDogJThkICAlcyVzXG4iLAorCQkJICAgICAgKGk8PTE1KSA/ICJJU0EtIiA6ICIgICAgIiAsCisJCQkgICAgaSwgaXJxX3RhYltpXS5jb3VudCwKKwkJCSAgICBpcnFfdGFiW2ldLmRldm5hbWVbMF0gPyBpcnFfdGFiW2ldLmRldm5hbWUgOiAiPyIsCisJCQkgICAgaXJxX3RhYltpXS5oYW5kbGVyID09IHE0MF9kZWZoYW5kID8KKwkJCQkJIiAobm93IHVuYXNzaWduZWQpIiA6ICIiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IHE0MF9kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKyAgICAgICAgaWYgKGlycSE9UTQwX0lSUV9LRVlCT0FSRCkKKwkgICAgIHByaW50ayAoIlVua25vd24gcTQwIGludGVycnVwdCAlZFxuIiwgaXJxKTsKKwllbHNlIG1hc3Rlcl9vdXRiKC0xLEtFWUJPQVJEX1VOTE9DS19SRUcpOworCXJldHVybiBJUlFfTk9ORTsKK30KK3N0YXRpYyBpcnFyZXR1cm5fdCBkZWZhdWx0X2hhbmRsZXIoaW50IGxldiwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcmludGsgKCJVbmluaXRpYWxpc2VkIGludGVycnVwdCBsZXZlbCAlZFxuIiwgbGV2KTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK2lycXJldHVybl90ICgqcTQwX2RlZmF1bHRfaGFuZGxlcltTWVNfSVJRU10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSA9IHsKKwkgWzBdID0gZGVmYXVsdF9oYW5kbGVyLAorCSBbMV0gPSBkZWZhdWx0X2hhbmRsZXIsCisJIFsyXSA9IGRlZmF1bHRfaGFuZGxlciwKKwkgWzNdID0gZGVmYXVsdF9oYW5kbGVyLAorCSBbNF0gPSBkZWZhdWx0X2hhbmRsZXIsCisJIFs1XSA9IGRlZmF1bHRfaGFuZGxlciwKKwkgWzZdID0gZGVmYXVsdF9oYW5kbGVyLAorCSBbN10gPSBkZWZhdWx0X2hhbmRsZXIKK307CisKKwordm9pZCBxNDBfZW5hYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKyAgaWYgKCBpcnE+PTUgJiYgaXJxPD0xNSApCisgIHsKKyAgICBtZXh0X2Rpc2FibGVkLS07CisgICAgaWYgKG1leHRfZGlzYWJsZWQ+MCkKKwkgIHByaW50aygicTQwX2VuYWJsZV9pcnEgOiBuZXN0ZWQgZGlzYWJsZS9lbmFibGVcbiIpOworICAgIGlmIChtZXh0X2Rpc2FibGVkPT0wKQorICAgIG1hc3Rlcl9vdXRiKDEsRVhUX0VOQUJMRV9SRUcpOworICAgIH0KK30KKworCit2b2lkIHE0MF9kaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKyAgLyogZGlzYWJsZSBJU0EgaXFzIDogb25seSBkbyBzb21ldGhpbmcgaWYgdGhlIGRyaXZlciBoYXMgYmVlbgorICAgKiB2ZXJpZmllZCB0byBiZSBRNDAgImNvbXBhdGlibGUiIC0gcmlnaHQgbm93IElERSwgTkUySworICAgKiBBbnkgZHJpdmVyIHNob3VsZCBub3QgYXR0ZW1wdCB0byBzbGVlcCBhY3Jvc3MgZGlzYWJsZV9pcnEgISEKKyAgICovCisKKyAgaWYgKCBpcnE+PTUgJiYgaXJxPD0xNSApIHsKKyAgICBtYXN0ZXJfb3V0YigwLEVYVF9FTkFCTEVfUkVHKTsKKyAgICBtZXh0X2Rpc2FibGVkKys7CisgICAgaWYgKG1leHRfZGlzYWJsZWQ+MSkgcHJpbnRrKCJkaXNhYmxlX2lycSBuZXN0aW5nIGNvdW50ICVkXG4iLG1leHRfZGlzYWJsZWQpOworICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgcTQwX3Byb2JlX2lycV9vbiAodm9pZCkKK3sKKyAgcHJpbnRrKCJpcnEgcHJvYmluZyBub3Qgd29ya2luZyAtIHJlY29uZmlndXJlIHRoZSBkcml2ZXIgdG8gYXZvaWQgdGhpc1xuIik7CisgIHJldHVybiAtMTsKK30KK2ludCBxNDBfcHJvYmVfaXJxX29mZiAodW5zaWduZWQgbG9uZyBpcnFzKQoreworICByZXR1cm4gLTE7Cit9CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogY29tcGlsZS1jb21tYW5kOiAibTY4ay1saW51eC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUvcnovbHgvbGludXgtMi4yLjYvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtZmZpeGVkLWEyIC1tNjgwNDAgICAtYyAtbyBxNDBpbnRzLm8gcTQwaW50cy5jIgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9NYWtlZmlsZSBiL2FyY2gvbTY4ay9zdW4zL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGYwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9zdW4zIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJOj0gc3VuM19rc3ltcy5vIHN1bjNpbnRzLm8gc3VuM2R2bWEubyBzYnVzLm8gaWRwcm9tLm8KKworb2JqLSQoQ09ORklHX1NVTjMpICs9IGNvbmZpZy5vIG1tdV9lbXUubyBsZWRzLm8gZHZtYS5vIGludGVyc2lsLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkMDViYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IFBla2thIFBpZXRpa3tpbmVuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vY29udHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbW92cy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N1bjMtaGVhZC5oPgorI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3N1bjNpbnRzLmg+CisKK2V4dGVybiBjaGFyIF90ZXh0LCBfZW5kOworCitjaGFyIHN1bjNfcmVzZXJ2ZWRfcG1lZ1tTVU4zX1BNRUdTX05VTV07CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjNfZ2V0dGltZW9mZnNldCh2b2lkKTsKK2V4dGVybiBpbnQgc2hvd19zdW4zX2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgc3VuM19zY2hlZF9pbml0KGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB2b2lkIHN1bjNfZ2V0X21vZGVsIChjaGFyKiBtb2RlbCk7CitleHRlcm4gdm9pZCBpZHByb21faW5pdCAodm9pZCk7CitleHRlcm4gaW50IHN1bjNfaHdjbGsoaW50IHNldCwgc3RydWN0IHJ0Y190aW1lICp0KTsKKwordm9sYXRpbGUgY2hhciogY2xvY2tfdmE7CitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciogc3VuM19pbnRyZWc7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhdmFpbG1lbTsKK3Vuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOworCitzdGF0aWMgaW50IHN1bjNfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworCisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJQUk9NIFJldmlzaW9uOlx0JXNcbiIsCisJCSAgICAgICByb212ZWMtPnB2X21vbmlkKTsKKworCXJldHVybiBsZW47CisKK30KKwordm9pZCBfX2luaXQgc3VuM19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBlbmFibGVfcmVnaXN0ZXI7CisJaW50IGk7CisKKwltNjhrX21hY2h0eXBlPSBNQUNIX1NVTjM7CisJbTY4a19jcHV0eXBlID0gQ1BVXzY4MDIwOworCW02OGtfZnB1dHlwZSA9IEZQVV82ODg4MTsgLyogbWM2ODg4MSBhY3R1YWxseSAqLworCW02OGtfbW11dHlwZSA9IE1NVV9TVU4zOworCWNsb2NrX3ZhICAgID0gICAgICAgICAgKGNoYXIgKikgMHhmZTA2MDAwOwkvKiBkYXJrICAqLworCXN1bjNfaW50cmVnID0gKHVuc2lnbmVkIGNoYXIgKikgMHhmZTBhMDAwOwkvKiBtYWdpYyAqLworCXN1bjNfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlwcm9tX2luaXQoKHZvaWQgKilMSU5VWF9PUFBST01fQkVHVk0pOworCisJR0VUX0NPTlRST0xfQllURShBQ19TRU5BQkxFLGVuYWJsZV9yZWdpc3Rlcik7CisJZW5hYmxlX3JlZ2lzdGVyIHw9IDB4NTA7IC8qIEVuYWJsZSBGUFUgKi8KKwlTRVRfQ09OVFJPTF9CWVRFKEFDX1NFTkFCTEUsZW5hYmxlX3JlZ2lzdGVyKTsKKwlHRVRfQ09OVFJPTF9CWVRFKEFDX1NFTkFCTEUsZW5hYmxlX3JlZ2lzdGVyKTsKKworCS8qIFRoaXMgY29kZSBsb29rcyBzdXNwaWNpb3VzLCBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VidHJhY3QKKyAgICAgICAgICAgbWVtb3J5IGJlbG9uZ2luZyB0byB0aGUga2VybmVsIGZyb20gdGhlIGF2YWlsYWJsZSBzcGFjZSAqLworCisKKwltZW1zZXQoc3VuM19yZXNlcnZlZF9wbWVnLCAwLCBzaXplb2Yoc3VuM19yZXNlcnZlZF9wbWVnKSk7CisKKwkvKiBSZXNlcnZlIGltcG9ydGFudCBQTUVHUyAqLworCS8qIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHJvYmVkIGluc3RlYWQgb2YgaGFyZGNvZGVkICovCisKKwlmb3IgKGk9MDsgaTw4OyBpKyspCQkvKiBLZXJuZWwgUE1FR3MgKi8KKwkJc3VuM19yZXNlcnZlZF9wbWVnW2ldID0gMTsKKworCXN1bjNfcmVzZXJ2ZWRfcG1lZ1syNDddID0gMTsJLyogUk9NIG1hcHBpbmcgICovCisJc3VuM19yZXNlcnZlZF9wbWVnWzI0OF0gPSAxOwkvKiBBTUQgRXRoZXJuZXQgKi8KKwlzdW4zX3Jlc2VydmVkX3BtZWdbMjUxXSA9IDE7CS8qIFZCIGFyZWEgICAgICAqLworCXN1bjNfcmVzZXJ2ZWRfcG1lZ1syNTRdID0gMTsJLyogbWFpbiBJL08gICAgICovCisKKwlzdW4zX3Jlc2VydmVkX3BtZWdbMjQ5XSA9IDE7CisJc3VuM19yZXNlcnZlZF9wbWVnWzI1Ml0gPSAxOworCXN1bjNfcmVzZXJ2ZWRfcG1lZ1syNTNdID0gMTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKK30KKworLyogV2l0aG91dCB0aGlzLCBCYWQgVGhpbmdzIGhhcHBlbiB3aGVuIHNvbWV0aGluZyBjYWxscyBhcmNoX3Jlc2V0LiAqLworc3RhdGljIHZvaWQgc3VuM19yZWJvb3QgKHZvaWQpCit7CisJcHJvbV9yZWJvb3QgKCJ2bWxpbnV4Iik7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjNfaGFsdCAodm9pZCkKK3sKKwlwcm9tX2hhbHQgKCk7Cit9CisKKy8qIHN1bjMgYm9vdG1lbSBhbGxvY2F0aW9uICovCisKK3ZvaWQgX19pbml0IHN1bjNfYm9vdG1lbV9hbGxvYyh1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydCwgdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZTsKKworCS8qIGFsaWduIHN0YXJ0L2VuZCB0byBwYWdlIGJvdW5kYXJpZXMgKi8KKwltZW1vcnlfc3RhcnQgPSAoKG1lbW9yeV9zdGFydCArIChQQUdFX1NJWkUtMSkpICYgUEFHRV9NQVNLKTsKKwltZW1vcnlfZW5kID0gbWVtb3J5X2VuZCAmIFBBR0VfTUFTSzsKKworCXN0YXJ0X3BhZ2UgPSBfX3BhKG1lbW9yeV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwludW1fcGFnZXMgPSBfX3BhKG1lbW9yeV9lbmQpID4+IFBBR0VfU0hJRlQ7CisKKwloaWdoX21lbW9yeSA9ICh2b2lkICopbWVtb3J5X2VuZDsKKwlhdmFpbG1lbSA9IG1lbW9yeV9zdGFydDsKKworCWF2YWlsbWVtICs9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgc3RhcnRfcGFnZSwgMCwgbnVtX3BhZ2VzKTsKKwlhdmFpbG1lbSA9IChhdmFpbG1lbSArIChQQUdFX1NJWkUtMSkpICYgUEFHRV9NQVNLOworCisJZnJlZV9ib290bWVtKF9fcGEoYXZhaWxtZW0pLCBtZW1vcnlfZW5kIC0gKGF2YWlsbWVtKSk7Cit9CisKKwordm9pZCBfX2luaXQgY29uZmlnX3N1bjModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZDsKKworCXByaW50aygiQVJDSDogU1VOM1xuIik7CisJaWRwcm9tX2luaXQoKTsKKworCS8qIFN1YnRyYWN0IGtlcm5lbCBtZW1vcnkgZnJvbSBhdmFpbGFibGUgbWVtb3J5ICovCisKKyAgICAgICAgbWFjaF9zY2hlZF9pbml0ICAgICAgPSAgc3VuM19zY2hlZF9pbml0OworICAgICAgICBtYWNoX2luaXRfSVJRICAgICAgICA9ICBzdW4zX2luaXRfSVJROworICAgICAgICBtYWNoX2RlZmF1bHRfaGFuZGxlciA9ICZzdW4zX2RlZmF1bHRfaGFuZGxlcjsKKyAgICAgICAgbWFjaF9yZXF1ZXN0X2lycSAgICAgPSAgc3VuM19yZXF1ZXN0X2lycTsKKyAgICAgICAgbWFjaF9mcmVlX2lycSAgICAgICAgPSAgc3VuM19mcmVlX2lycTsKKwllbmFibGVfaXJxCSAgICAgPSAgc3VuM19lbmFibGVfaXJxOworICAgICAgICBkaXNhYmxlX2lycQkgICAgID0gIHN1bjNfZGlzYWJsZV9pcnE7CisJbWFjaF9wcm9jZXNzX2ludCAgICAgPSAgc3VuM19wcm9jZXNzX2ludDsKKyAgICAgICAgbWFjaF9nZXRfaXJxX2xpc3QgICAgPSAgc2hvd19zdW4zX2ludGVycnVwdHM7CisgICAgICAgIG1hY2hfcmVzZXQgICAgICAgICAgID0gIHN1bjNfcmVib290OworCW1hY2hfZ2V0dGltZW9mZnNldCAgID0gIHN1bjNfZ2V0dGltZW9mZnNldDsKKwltYWNoX2dldF9tb2RlbAkgICAgID0gIHN1bjNfZ2V0X21vZGVsOworCW1hY2hfaHdjbGsgICAgICAgICAgID0gIHN1bjNfaHdjbGs7CisJbWFjaF9oYWx0CSAgICAgPSAgc3VuM19oYWx0OworCW1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBzdW4zX2dldF9oYXJkd2FyZV9saXN0OworI2lmIGRlZmluZWQoQ09ORklHX0RVTU1ZX0NPTlNPTEUpCisJY29uc3dpdGNocAkgICAgID0gJmR1bW15X2NvbjsKKyNlbmRpZgorCisJbWVtb3J5X3N0YXJ0ID0gKCgoKGludCkmX2VuZCkgKyAweDIwMDApICYgfjB4MWZmZik7CisvLyBQUk9NIHNlZW1zIHRvIHdhbnQgdGhlIGxhc3QgY291cGxlIG9mIHBoeXNpY2FsIHBhZ2VzLiAtLW0KKwltZW1vcnlfZW5kICAgPSAqKHJvbXZlYy0+cHZfc3VuM21lbSkgKyBQQUdFX09GRlNFVCAtIDIqUEFHRV9TSVpFOworCisJbTY4a19udW1fbWVtb3J5PTE7CisgICAgICAgIG02OGtfbWVtb3J5WzBdLnNpemU9Kihyb212ZWMtPnB2X3N1bjNtZW0pOworCisJc3VuM19ib290bWVtX2FsbG9jKG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZCk7Cit9CisKK3ZvaWQgX19pbml0IHN1bjNfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKnRpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlzdW4zX2Rpc2FibGVfaW50ZXJydXB0cygpOworICAgICAgICBpbnRlcnNpbF9jbG9jay0+Y21kX3JlZz0oSU5URVJTSUxfUlVOfElOVEVSU0lMX0lOVF9ESVNBQkxFfElOVEVSU0lMXzI0SF9NT0RFKTsKKyAgICAgICAgaW50ZXJzaWxfY2xvY2stPmludF9yZWc9SU5URVJTSUxfSFpfMTAwX01BU0s7CisJaW50ZXJzaWxfY2xlYXIoKTsKKyAgICAgICAgc3VuM19lbmFibGVfaXJxKDUpOworICAgICAgICBpbnRlcnNpbF9jbG9jay0+Y21kX3JlZz0oSU5URVJTSUxfUlVOfElOVEVSU0lMX0lOVF9FTkFCTEV8SU5URVJTSUxfMjRIX01PREUpOworICAgICAgICBzdW4zX2VuYWJsZV9pbnRlcnJ1cHRzKCk7CisgICAgICAgIGludGVyc2lsX2NsZWFyKCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2R2bWEuYyBiL2FyY2gvbTY4ay9zdW4zL2R2bWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmIzMDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvZHZtYS5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvc3VuMy9kdm1hLmMKKyAqCisgKiBXcml0dGVuIGJ5IFNhbSBDcmVhc2V5CisgKgorICogU3VuMyBJT01NVSByb3V0aW5lcyB1c2VkIGZvciBkdm1hIGFjY2Vzc2VzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorI2luY2x1ZGUgPGFzbS9kdm1hLmg+CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcHRlbGlzdFsxMjBdOworCitpbmxpbmUgdW5zaWduZWQgbG9uZyBkdm1hX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHB0ZTsKKwl1bnNpZ25lZCBsb25nIGo7CisJcHRlX3QgcHRlcDsKKworCWogPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilrYWRkcjsKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilrYWRkciA9IGo7CisKKwlwdGVwID0gcGZuX3B0ZSh2aXJ0X3RvX3BmbihrYWRkciksIFBBR0VfS0VSTkVMKTsKKwlwdGUgPSBwdGVfdmFsKHB0ZXApOworLy8JCXByaW50aygiZHZtYV9yZW1hcDogYWRkciAlbHggLT4gJWx4IHB0ZSAlMDhseCBsZW4gJXhcbiIsCisvLwkJICAgICAgIGthZGRyLCB2YWRkciwgcHRlLCBsZW4pOworCWlmKHB0ZWxpc3RbKHZhZGRyICYgMHhmZjAwMCkgPj4gUEFHRV9TSElGVF0gIT0gcHRlKSB7CisJCXN1bjNfcHV0X3B0ZSh2YWRkciwgcHRlKTsKKwkJcHRlbGlzdFsodmFkZHIgJiAweGZmMDAwKSA+PiBQQUdFX1NISUZUXSA9IHB0ZTsKKwl9CisKKwlyZXR1cm4gKHZhZGRyICsgKGthZGRyICYgflBBR0VfTUFTSykpOworCit9CisKK2ludCBkdm1hX21hcF9pb21tdSh1bnNpZ25lZCBsb25nIGthZGRyLCB1bnNpZ25lZCBsb25nIGJhZGRyLAorCQkJICAgICAgaW50IGxlbikKK3sKKworCXVuc2lnbmVkIGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwl2YWRkciA9IGR2bWFfYnRvdihiYWRkcik7CisKKwllbmQgPSB2YWRkciArIGxlbjsKKworCXdoaWxlKHZhZGRyIDwgZW5kKSB7CisJCWR2bWFfcGFnZShrYWRkciwgdmFkZHIpOworCQlrYWRkciArPSBQQUdFX1NJWkU7CisJCXZhZGRyICs9IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCit2b2lkIHN1bjNfZHZtYV9pbml0KHZvaWQpCit7CisKKwltZW1zZXQocHRlbGlzdCwgMCwgc2l6ZW9mKHB0ZWxpc3QpKTsKKworCit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9pZHByb20uYyBiL2FyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzFmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9pZHByb20uYwpAQCAtMCwwICsxLDEyOSBAQAorLyogJElkOiBpZHByb20uYyx2IDEuMjIgMTk5Ni8xMS8xMyAwNTowOToyNSBkYXZlbSBFeHAgJAorICogaWRwcm9tLmM6IFJvdXRpbmVzIHRvIGxvYWQgdGhlIGlkcHJvbSBpbnRvIGtlcm5lbCBhZGRyZXNzZXMgYW5kCisgKiAgICAgICAgICAgaW50ZXJwcmV0IHRoZSBkYXRhIGNvbnRhaW5lZCB3aXRoaW4uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIFN1bjMvM3ggbW9kZWxzIGFkZGVkIGJ5IERhdmlkIE1vbnJvIChkYXZpZG1AcHNyZy5jcy51c3lkLmVkdS5hdSkKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+ICAvKiBGdW4gd2l0aCBTdW4gcmVsZWFzZWQgYXJjaGl0ZWN0dXJlcy4gKi8KKworc3RydWN0IGlkcHJvbSAqaWRwcm9tOworc3RhdGljIHN0cnVjdCBpZHByb20gaWRwcm9tX2J1ZmZlcjsKKworLyogSGVyZSBpcyB0aGUgbWFzdGVyIHRhYmxlIG9mIFN1biBtYWNoaW5lcyB3aGljaCB1c2Ugc29tZSBpbXBsZW1lbnRhdGlvbgorICogb2YgdGhlIFNwYXJjIENQVSBhbmQgaGF2ZSBhIG1lYW5pbmdmdWwgSURQUk9NIG1hY2h0eXBlIHZhbHVlIHRoYXQgd2UKKyAqIGtub3cgYWJvdXQuICBTZWUgYXNtLXNwYXJjL21hY2hpbmVzLmggZm9yIGVtcGlyaWNhbCBjb25zdGFudHMuCisgKi8KK3N0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgU3VuX01hY2hpbmVzW05VTV9TVU5fTUFDSElORVNdID0geworLyogRmlyc3QsIFN1bjMncyAqLworICAgIHsgLm5hbWUgPSAiU3VuIDMvMTYwIFNlcmllcyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU4zIHwgU01fM18xNjApIH0sCisgICAgeyAubmFtZSA9ICJTdW4gMy81MCIsCQkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfNTApIH0sCisgICAgeyAubmFtZSA9ICJTdW4gMy8yNjAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjMgfCBTTV8zXzI2MCkgfSwKKyAgICB7IC5uYW1lID0gIlN1biAzLzExMCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfMTEwKSB9LAorICAgIHsgLm5hbWUgPSAiU3VuIDMvNjAiLAkJLmlkX21hY2h0eXBlID0gKFNNX1NVTjMgfCBTTV8zXzYwKSB9LAorICAgIHsgLm5hbWUgPSAiU3VuIDMvRSIsCQkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfRSkgfSwKKy8qIE5vdywgU3VuM3gncyAqLworICAgIHsgLm5hbWUgPSAiU3VuIDMvNDYwIFNlcmllcyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU4zWCB8IFNNXzNfNDYwKSB9LAorICAgIHsgLm5hbWUgPSAiU3VuIDMvODAiLAkJLmlkX21hY2h0eXBlID0gKFNNX1NVTjNYIHwgU01fM184MCkgfSwKKy8qIFRoZW4sIFN1bjQncyAqLworLy8geyAubmFtZSA9ICJTdW4gNC8xMDAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzExMCkgfSwKKy8vIHsgLm5hbWUgPSAiU3VuIDQvMjAwIFNlcmllcyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF8yNjApIH0sCisvLyB7IC5uYW1lID0gIlN1biA0LzMwMCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfMzMwKSB9LAorLy8geyAubmFtZSA9ICJTdW4gNC80MDAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzQ3MCkgfSwKKy8qIEFuZCBub3csIFN1bjRjJ3MgKi8KKy8vIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIDEiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19TUzEpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBJUEMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19JUEMpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiAxKyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NTMVBMVVMpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBTTEMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19TTEMpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiAyIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfU1MyKSB9LAorLy8geyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gRUxDIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfRUxDKSB9LAorLy8geyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gSVBYIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfSVBYKSB9LAorLyogRmluYWxseSwgZWFybHkgU3VuNG0ncyAqLworLy8geyAubmFtZSA9ICJTdW40bSBTcGFyY1N5c3RlbTYwMCIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40TSB8IFNNXzRNX1NTNjApIH0sCisvLyB7IC5uYW1lID0gIlN1bjRtIFNwYXJjU3RhdGlvbjEwLzIwIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRNIHwgU01fNE1fU1M1MCkgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNG0gU3BhcmNTdGF0aW9uNSIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40TSB8IFNNXzRNX1NTNDApIH0sCisvKiBPbmUgZW50cnkgZm9yIHRoZSBPQlAgYXJjaCdzIHdoaWNoIGFyZSBzdW40ZCwgc3VuNGUsIGFuZCBuZXdlciBzdW40bSdzICovCisvLyB7IC5uYW1lID0gIlN1bjRNIE9CUCBiYXNlZCBzeXN0ZW0iLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONE1fT0JQIHwgMHgwKSB9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGlzcGxheV9zeXN0ZW1fdHlwZSh1bnNpZ25lZCBjaGFyIG1hY2h0eXBlKQoreworCXJlZ2lzdGVyIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9TVU5fTUFDSElORVM7IGkrKykgeworCQlpZihTdW5fTWFjaGluZXNbaV0uaWRfbWFjaHR5cGUgPT0gbWFjaHR5cGUpIHsKKwkJCWlmIChtYWNodHlwZSAhPSAoU01fU1VONE1fT0JQIHwgMHgwMCkpCisJCQkJcHJpbnRrKCJUWVBFOiAlc1xuIiwgU3VuX01hY2hpbmVzW2ldLm5hbWUpOworCQkJZWxzZSB7CisjaWYgMAorCQkJCXByb21fZ2V0cHJvcGVydHkocHJvbV9yb290X25vZGUsICJiYW5uZXItbmFtZSIsCisJCQkJCQkgc3lzbmFtZSwgc2l6ZW9mKHN5c25hbWUpKTsKKwkJCQlwcmludGsoIlRZUEU6ICVzXG4iLCBzeXNuYW1lKTsKKyNlbmRpZgorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfQorCisJcHJvbV9wcmludGYoIklEUFJPTTogQm9ndXMgaWRfbWFjaHR5cGUgdmFsdWUsIDB4JXhcbiIsIG1hY2h0eXBlKTsKKwlwcm9tX2hhbHQoKTsKK30KKwordm9pZCBzdW4zX2dldF9tb2RlbCh1bnNpZ25lZCBjaGFyKiBtb2RlbCkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fU1VOX01BQ0hJTkVTOyBpKyspIHsKKwkJaWYoU3VuX01hY2hpbmVzW2ldLmlkX21hY2h0eXBlID09IGlkcHJvbS0+aWRfbWFjaHR5cGUpIHsKKwkJICAgICAgICBzdHJjcHkobW9kZWwsIFN1bl9NYWNoaW5lc1tpXS5uYW1lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworCisKKy8qIENhbGN1bGF0ZSB0aGUgSURQUk9NIGNoZWNrc3VtICh4b3Igb2YgdGhlIGRhdGEgYnl0ZXMpLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGNhbGNfaWRwcm9tX2Nrc3VtKHN0cnVjdCBpZHByb20gKmlkcHJvbSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNrc3VtLCBpLCAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilpZHByb207CisKKwlmb3IgKGkgPSBja3N1bSA9IDA7IGkgPD0gMHgwRTsgaSsrKQorCQlja3N1bSBePSAqcHRyKys7CisKKwlyZXR1cm4gY2tzdW07Cit9CisKKy8qIENyZWF0ZSBhIGxvY2FsIElEUFJPTSBjb3B5LCB2ZXJpZnkgaW50ZWdyaXR5LCBhbmQgZGlzcGxheSBpbmZvcm1hdGlvbi4gKi8KK3ZvaWQgX19pbml0IGlkcHJvbV9pbml0KHZvaWQpCit7CisJcHJvbV9nZXRfaWRwcm9tKChjaGFyICopICZpZHByb21fYnVmZmVyLCBzaXplb2YoaWRwcm9tX2J1ZmZlcikpOworCisJaWRwcm9tID0gJmlkcHJvbV9idWZmZXI7CisKKwlpZiAoaWRwcm9tLT5pZF9mb3JtYXQgIT0gMHgwMSkgIHsKKwkJcHJvbV9wcmludGYoIklEUFJPTTogVW5rbm93biBmb3JtYXQgdHlwZSFcbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlpZiAoaWRwcm9tLT5pZF9ja3N1bSAhPSBjYWxjX2lkcHJvbV9ja3N1bShpZHByb20pKSB7CisJCXByb21fcHJpbnRmKCJJRFBST006IENoZWNrc3VtIGZhaWx1cmUgKG52cmFtPSV4LCBjYWxjPSV4KSFcbiIsCisJCQkgICAgaWRwcm9tLT5pZF9ja3N1bSwgY2FsY19pZHByb21fY2tzdW0oaWRwcm9tKSk7CisJCXByb21faGFsdCgpOworCX0KKworCWRpc3BsYXlfc3lzdGVtX3R5cGUoaWRwcm9tLT5pZF9tYWNodHlwZSk7CisKKwlwcmludGsoIkV0aGVybmV0IGFkZHJlc3M6ICV4OiV4OiV4OiV4OiV4OiV4XG4iLAorCQkgICAgaWRwcm9tLT5pZF9ldGhhZGRyWzBdLCBpZHByb20tPmlkX2V0aGFkZHJbMV0sCisJCSAgICBpZHByb20tPmlkX2V0aGFkZHJbMl0sIGlkcHJvbS0+aWRfZXRoYWRkclszXSwKKwkJICAgIGlkcHJvbS0+aWRfZXRoYWRkcls0XSwgaWRwcm9tLT5pZF9ldGhhZGRyWzVdKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMgYi9hcmNoL202OGsvc3VuMy9pbnRlcnNpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMzU5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9pbnRlcnNpbC5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBhcmNoL202OGsvc3VuMy9pbnRlcnNpbC5jCisgKgorICogYmFzaWMgcm91dGluZXMgZm9yIGFjY2Vzc2luZyB0aGUgaW50ZXJzaWwgY2xvY2sgd2l0aGluIHRoZSBzdW4zIG1hY2hpbmVzCisgKgorICogc3RhcnRlZCAxMS8xMi8xOTk5IFNhbSBDcmVhc2V5CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9pbnRlcnNpbC5oPgorCisKKy8qIGJpdHMgdG8gc2V0IGZvciBzdGFydC9ydW4gb2YgdGhlIGludGVyc2lsICovCisjZGVmaW5lIFNUT1BfVkFMIChJTlRFUlNJTF9TVE9QIHwgSU5URVJTSUxfSU5UX0VOQUJMRSB8IElOVEVSU0lMXzI0SF9NT0RFKQorI2RlZmluZSBTVEFSVF9WQUwgKElOVEVSU0lMX1JVTiB8IElOVEVSU0lMX0lOVF9FTkFCTEUgfCBJTlRFUlNJTF8yNEhfTU9ERSkKKworLyogZG9lcyB0aGlzIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQ/ICovCit1bnNpZ25lZCBsb25nIHN1bjNfZ2V0dGltZW9mZnNldCh2b2lkKQoreworICByZXR1cm4gMTsKK30KKworCisvKiBnZXQvc2V0IGh3Y2xvY2sgKi8KKworaW50IHN1bjNfaHdjbGsoaW50IHNldCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworCXZvbGF0aWxlIHN0cnVjdCBpbnRlcnNpbF9kdCAqdG9kaW50ZXJzaWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgICAgICB0b2RpbnRlcnNpbCA9IChzdHJ1Y3QgaW50ZXJzaWxfZHQgKikgJmludGVyc2lsX2Nsb2NrLT5jb3VudGVyOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaW50ZXJzaWxfY2xvY2stPmNtZF9yZWcgPSBTVE9QX1ZBTDsKKworCS8qIHNldCBvciByZWFkIHRoZSBjbG9jayAqLworCWlmKHNldCkgeworCQl0b2RpbnRlcnNpbC0+Y3NlYyA9IDA7CisJCXRvZGludGVyc2lsLT5ob3VyID0gdC0+dG1faG91cjsKKwkJdG9kaW50ZXJzaWwtPm1pbnV0ZSA9IHQtPnRtX21pbjsKKwkJdG9kaW50ZXJzaWwtPnNlY29uZCA9IHQtPnRtX3NlYzsKKwkJdG9kaW50ZXJzaWwtPm1vbnRoID0gdC0+dG1fbW9uOworCQl0b2RpbnRlcnNpbC0+ZGF5ID0gdC0+dG1fbWRheTsKKwkJdG9kaW50ZXJzaWwtPnllYXIgPSB0LT50bV95ZWFyIC0gNjg7CisJCXRvZGludGVyc2lsLT53ZWVrZGF5ID0gdC0+dG1fd2RheTsKKwl9IGVsc2UgeworCQkvKiByZWFkIGNsb2NrICovCisJCXQtPnRtX3NlYyA9IHRvZGludGVyc2lsLT5jc2VjOworCQl0LT50bV9ob3VyID0gdG9kaW50ZXJzaWwtPmhvdXI7CisJCXQtPnRtX21pbiA9IHRvZGludGVyc2lsLT5taW51dGU7CisJCXQtPnRtX3NlYyA9IHRvZGludGVyc2lsLT5zZWNvbmQ7CisJCXQtPnRtX21vbiA9IHRvZGludGVyc2lsLT5tb250aDsKKwkJdC0+dG1fbWRheSA9IHRvZGludGVyc2lsLT5kYXk7CisJCXQtPnRtX3llYXIgPSB0b2RpbnRlcnNpbC0+eWVhciArIDY4OworCQl0LT50bV93ZGF5ID0gdG9kaW50ZXJzaWwtPndlZWtkYXk7CisJfQorCisJaW50ZXJzaWxfY2xvY2stPmNtZF9yZWcgPSBTVEFSVF9WQUw7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKKworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9sZWRzLmMgYi9hcmNoL202OGsvc3VuMy9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlOTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL2xlZHMuYwpAQCAtMCwwICsxLDEzIEBACisjaW5jbHVkZSA8YXNtL2NvbnRyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKwordm9pZCBzdW4zX2xlZHModW5zaWduZWQgY2hhciBieXRlKQoreworCXVuc2lnbmVkIGNoYXIgZGZjOworCisJR0VUX0RGQyhkZmMpOworICAgICAgICBTRVRfREZDKEZDX0NPTlRST0wpOworCVNFVF9DT05UUk9MX0JZVEUoQUNfTEVEUyxieXRlKTsKKwlTRVRfREZDKGRmYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMgYi9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwZTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyoqIFRhYmxld2FsayBNTVUgZW11bGF0b3IKKyoqCisqKiBieSBUb3NoaXlhc3UgTW9yaXRhCisqKgorKiogU3RhcnRlZCAxLzE2Lzk4IEAgMjoyMiBhbQorKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vZHZtYS5oPgorCitleHRlcm4gdm9pZCBwcm9tX3JlYm9vdCAoY2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyN1bmRlZiBERUJVR19NTVVfRU1VCisjZGVmaW5lIERFQlVHX1BST01fTUFQUworCisvKgorKiogRGVmaW5lcworKi8KKworI2RlZmluZSBDT05URVhUU19OVU0JCTgKKyNkZWZpbmUgU0VHTUFQU19QRVJfQ09OVEVYVF9OVU0gMjA0OAorI2RlZmluZSBQQUdFU19QRVJfU0VHTUVOVAkxNgorI2RlZmluZSBQTUVHU19OVU0JCTI1NgorI2RlZmluZSBQTUVHX01BU0sJCTB4RkYKKworLyoKKyoqIEdsb2JhbHMKKyovCisKK3Vuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CitFWFBPUlRfU1lNQk9MKHZtYWxsb2NfZW5kKTsKKwordW5zaWduZWQgbG9uZyBwbWVnX3ZhZGRyW1BNRUdTX05VTV07Cit1bnNpZ25lZCBjaGFyIHBtZWdfYWxsb2NbUE1FR1NfTlVNXTsKK3Vuc2lnbmVkIGNoYXIgcG1lZ19jdHhbUE1FR1NfTlVNXTsKKworLyogcG9pbnRlcnMgdG8gdGhlIG1tIHN0cnVjdHMgZm9yIGVhY2ggdGFzayBpbiBlYWNoCisgICBjb250ZXh0LiAweGZmZmZmZmZmIGlzIGEgbWFya2VyIGZvciBrZXJuZWwgY29udGV4dCAqLworc3RydWN0IG1tX3N0cnVjdCAqY3R4X2FsbG9jW0NPTlRFWFRTX05VTV0gPSB7CisgICAgWzBdID0gKHN0cnVjdCBtbV9zdHJ1Y3QgKikweGZmZmZmZmZmCit9OworCisvKiBoYXMgdGhpcyBjb250ZXh0IGJlZW4gbW1kcm9wJ2Q/ICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBjdHhfYXZhaWwgPSBDT05URVhUU19OVU0tMTsKKworLyogYXJyYXkgb2YgcGFnZXMgdG8gYmUgbWFya2VkIG9mZiBmb3IgdGhlIHJvbSB3aGVuIHdlIGRvIG1lbV9pbml0IGxhdGVyICovCisvKiAyNTYgcGFnZXMgbGV0cyB0aGUgcm9tIHRha2UgdXAgdG8gMm1iIG9mIHBoeXNpY2FsIHJhbS4uICBJIHJlYWxseQorICAgaG9wZSBpdCBuZXZlciB3YW50cyBtb3RlIHRoYW4gdGhhdC4gKi8KK3Vuc2lnbmVkIGxvbmcgcm9tX3BhZ2VzWzI1Nl07CisKKy8qIFByaW50IGEgUFRFIHZhbHVlIGluIHN5bWJvbGljIGZvcm0uIEZvciBkZWJ1Z2dpbmcuICovCit2b2lkIHByaW50X3B0ZSAocHRlX3QgcHRlKQoreworI2lmIDAKKwkvKiBWZXJib3NlIHZlcnNpb24uICovCisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsIChwdGUpOworCXByaW50ayAoIiBwdGU9JWx4IFthZGRyPSVseCIsCisJCXZhbCwgKHZhbCAmIFNVTjNfUEFHRV9QR05VTV9NQVNLKSA8PCBQQUdFX1NISUZUKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX1ZBTElEKQlwcmludGsgKCIgdmFsaWQiKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX1dSSVRFQUJMRSkJcHJpbnRrICgiIHdyaXRlIik7CisJaWYgKHZhbCAmIFNVTjNfUEFHRV9TWVNURU0pCXByaW50ayAoIiBzeXMiKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX05PQ0FDSEUpCXByaW50ayAoIiBub2NhY2hlIik7CisJaWYgKHZhbCAmIFNVTjNfUEFHRV9BQ0NFU1NFRCkJcHJpbnRrICgiIGFjY2Vzc2VkIik7CisJaWYgKHZhbCAmIFNVTjNfUEFHRV9NT0RJRklFRCkJcHJpbnRrICgiIG1vZGlmaWVkIik7CisJc3dpdGNoICh2YWwgJiBTVU4zX1BBR0VfVFlQRV9NQVNLKSB7CisJCWNhc2UgU1VOM19QQUdFX1RZUEVfTUVNT1JZOiBwcmludGsgKCIgbWVtb3J5Iik7IGJyZWFrOworCQljYXNlIFNVTjNfUEFHRV9UWVBFX0lPOiAgICAgcHJpbnRrICgiIGlvIik7ICAgICBicmVhazsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9WTUUxNjogIHByaW50ayAoIiB2bWUxNiIpOyAgYnJlYWs7CisJCWNhc2UgU1VOM19QQUdFX1RZUEVfVk1FMzI6ICBwcmludGsgKCIgdm1lMzIiKTsgIGJyZWFrOworCX0KKwlwcmludGsgKCJdXG4iKTsKKyNlbHNlCisJLyogVGVyc2UgdmVyc2lvbi4gTW9yZSBsaWtlbHkgdG8gZml0IG9uIGEgbGluZS4gKi8KKwl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwgKHB0ZSk7CisJY2hhciBmbGFnc1s3XSwgKnR5cGU7CisKKwlmbGFnc1swXSA9ICh2YWwgJiBTVU4zX1BBR0VfVkFMSUQpICAgICA/ICd2JyA6ICctJzsKKwlmbGFnc1sxXSA9ICh2YWwgJiBTVU4zX1BBR0VfV1JJVEVBQkxFKSA/ICd3JyA6ICctJzsKKwlmbGFnc1syXSA9ICh2YWwgJiBTVU4zX1BBR0VfU1lTVEVNKSAgICA/ICdzJyA6ICctJzsKKwlmbGFnc1szXSA9ICh2YWwgJiBTVU4zX1BBR0VfTk9DQUNIRSkgICA/ICd4JyA6ICctJzsKKwlmbGFnc1s0XSA9ICh2YWwgJiBTVU4zX1BBR0VfQUNDRVNTRUQpICA/ICdhJyA6ICctJzsKKwlmbGFnc1s1XSA9ICh2YWwgJiBTVU4zX1BBR0VfTU9ESUZJRUQpICA/ICdtJyA6ICctJzsKKwlmbGFnc1s2XSA9ICdcMCc7CisKKwlzd2l0Y2ggKHZhbCAmIFNVTjNfUEFHRV9UWVBFX01BU0spIHsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9NRU1PUlk6IHR5cGUgPSAibWVtb3J5IjsgYnJlYWs7CisJCWNhc2UgU1VOM19QQUdFX1RZUEVfSU86ICAgICB0eXBlID0gImlvIiAgICA7IGJyZWFrOworCQljYXNlIFNVTjNfUEFHRV9UWVBFX1ZNRTE2OiAgdHlwZSA9ICJ2bWUxNiIgOyBicmVhazsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9WTUUzMjogIHR5cGUgPSAidm1lMzIiIDsgYnJlYWs7CisJCWRlZmF1bHQ6IHR5cGUgPSAidW5rbm93bj8iOyBicmVhazsKKwl9CisKKwlwcmludGsgKCIgcHRlPSUwOGx4IFslMDdseCAlcyAlc11cbiIsCisJCXZhbCwgKHZhbCAmIFNVTjNfUEFHRV9QR05VTV9NQVNLKSA8PCBQQUdFX1NISUZULCBmbGFncywgdHlwZSk7CisjZW5kaWYKK30KKworLyogUHJpbnQgdGhlIFBURSB2YWx1ZSBmb3IgYSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MuIEZvciBkZWJ1Z2dpbmcuICovCit2b2lkIHByaW50X3B0ZV92YWRkciAodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlwcmludGsgKCIgdmFkZHI9JWx4IFslMDJseF0iLCB2YWRkciwgc3VuM19nZXRfc2VnbWFwICh2YWRkcikpOworCXByaW50X3B0ZSAoX19wdGUgKHN1bjNfZ2V0X3B0ZSAodmFkZHIpKSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBNTVUgZW11bGF0b3IuCisgKi8KK3ZvaWQgbW11X2VtdV9pbml0KHVuc2lnbmVkIGxvbmcgYm9vdG1lbV9lbmQpCit7CisJdW5zaWduZWQgbG9uZyBzZWcsIG51bTsKKwlpbnQgaSxqOworCisJbWVtc2V0KHJvbV9wYWdlcywgMCwgc2l6ZW9mKHJvbV9wYWdlcykpOworCW1lbXNldChwbWVnX3ZhZGRyLCAwLCBzaXplb2YocG1lZ192YWRkcikpOworCW1lbXNldChwbWVnX2FsbG9jLCAwLCBzaXplb2YocG1lZ19hbGxvYykpOworCW1lbXNldChwbWVnX2N0eCwgMCwgc2l6ZW9mKHBtZWdfY3R4KSk7CisKKwkvKiBwbWVnIGFsaWduIHRoZSBlbmQgb2YgYm9vdG1lbSwgYWRkaW5nIGFub3RoZXIgcG1lZywKKwkgKiBsYXRlciBib290bWVtIGFsbG9jYXRpb25zIHdpbGwgbGlrZWx5IG5lZWQgaXQgKi8KKwlib290bWVtX2VuZCA9IChib290bWVtX2VuZCArICgyICogU1VOM19QTUVHX1NJWkUpKSAmIH5TVU4zX1BNRUdfTUFTSzsKKworCS8qIG1hcmsgYWxsIG9mIHRoZSBwbWVncyB1c2VkIHRodXMgZmFyIGFzIHJlc2VydmVkICovCisJZm9yIChpPTA7IGkgPCBfX3BhKGJvb3RtZW1fZW5kKSAvIFNVTjNfUE1FR19TSVpFIDsgKytpKQorCQlwbWVnX2FsbG9jW2ldID0gMjsKKworCisJLyogSSdtIHRoaW5raW5nIHRoYXQgbW9zdCBvZiB0aGUgdG9wIHBtZWcncyBhcmUgZ29pbmcgdG8gYmUKKwkgICB1c2VkIGZvciBzb21ldGhpbmcsIGFuZCB3ZSBwcm9iYWJseSBzaG91bGRuJ3QgcmlzayBpdCAqLworCWZvcihudW0gPSAweGYwOyBudW0gPD0gMHhmZjsgbnVtKyspCisJCXBtZWdfYWxsb2NbbnVtXSA9IDI7CisKKwkvKiBsaWJlcmF0ZSBhbGwgZXhpc3RpbmcgbWFwcGluZ3MgaW4gdGhlIHJlc3Qgb2Yga2VybmVsIHNwYWNlICovCisJZm9yKHNlZyA9IGJvb3RtZW1fZW5kOyBzZWcgPCAweDBmODAwMDAwOyBzZWcgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkJaSA9IHN1bjNfZ2V0X3NlZ21hcChzZWcpOworCisJCWlmKCFwbWVnX2FsbG9jW2ldKSB7CisjaWZkZWYgREVCVUdfTU1VX0VNVQorCQkJcHJpbnRrKCJmcmVlZDogIik7CisJCQlwcmludF9wdGVfdmFkZHIgKHNlZyk7CisjZW5kaWYKKwkJCXN1bjNfcHV0X3NlZ21hcChzZWcsIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkJfQorCX0KKworCWogPSAwOworCWZvciAobnVtPTAsIHNlZz0weDBGODAwMDAwOyBzZWc8MHgxMDAwMDAwMDsgc2VnKz0xNipQQUdFX1NJWkUpIHsKKwkJaWYgKHN1bjNfZ2V0X3NlZ21hcCAoc2VnKSAhPSBTVU4zX0lOVkFMSURfUE1FRykgeworI2lmZGVmIERFQlVHX1BST01fTUFQUworCQkJZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJCXByaW50ayAoIm1hcHBlZDoiKTsKKwkJCQlwcmludF9wdGVfdmFkZHIgKHNlZyArIChpKlBBR0VfU0laRSkpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCQkvLyB0aGUgbG93ZXN0IG1hcHBpbmcgaGVyZSBpcyB0aGUgZW5kIG9mIG91cgorCQkJLy8gdm1hbGxvYyByZWdpb24KKwkJCWlmKCF2bWFsbG9jX2VuZCkKKwkJCQl2bWFsbG9jX2VuZCA9IHNlZzsKKworCQkJLy8gbWFyayB0aGUgc2VnbWFwIGFsbG9jJ2QsIGFuZCByZXNlcnZlIGFueQorCQkJLy8gb2YgdGhlIGZpcnN0IDB4YmZmIHBhZ2VzIHRoZSBoYXJkd2FyZSBpcworCQkJLy8gYWxyZWFkeSB1c2luZy4uLiAgZG9lcyBhbnkgc3VuMyBzdXBwb3J0ID4gMjRtYj8KKwkJCXBtZWdfYWxsb2Nbc3VuM19nZXRfc2VnbWFwKHNlZyldID0gMjsKKwkJfQorCX0KKworCWR2bWFfaW5pdCgpOworCisKKwkvKiBibGFuayBldmVyeXRoaW5nIGJlbG93IHRoZSBrZXJuZWwsIGFuZCB3ZSd2ZSBnb3QgdGhlIGJhc2UKKwkgICBtYXBwaW5nIHRvIHN0YXJ0IGFsbCB0aGUgY29udGV4dHMgb2ZmIHdpdGguLi4gKi8KKwlmb3Ioc2VnID0gMDsgc2VnIDwgUEFHRV9PRkZTRVQ7IHNlZyArPSBTVU4zX1BNRUdfU0laRSkKKwkJc3VuM19wdXRfc2VnbWFwKHNlZywgU1VOM19JTlZBTElEX1BNRUcpOworCisJc2V0X2ZzKE1BS0VfTU1fU0VHKDMpKTsKKwlmb3Ioc2VnID0gMDsgc2VnIDwgMHgxMDAwMDAwMDsgc2VnICs9IFNVTjNfUE1FR19TSVpFKSB7CisJCWkgPSBzdW4zX2dldF9zZWdtYXAoc2VnKTsKKwkJZm9yKGogPSAxOyBqIDwgQ09OVEVYVFNfTlVNOyBqKyspCisJCQkoKihyb212ZWMtPnB2X3NldGN0eHQpKShqLCAodm9pZCAqKXNlZywgaSk7CisJfQorCXNldF9mcyhLRVJORUxfRFMpOworCit9CisKKy8qIGVyYXNlIHRoZSBtYXBwaW5ncyBmb3IgYSBkZWFkIGNvbnRleHQuICBVc2VzIHRoZSBwZ19kaXIgZm9yIGhpbnRzCisgICBhcyB0aGUgcG1lZyB0YWJsZXMgcHJvdmVkIHNvbWV3aGF0IHVucmVsaWFibGUsIGFuZCB1bm1hcHBpbmcgYWxsIG9mCisgICBUQVNLX1NJWkUgd2FzIG11Y2ggc2xvd2VyIGFuZCBubyBtb3JlIHN0YWJsZS4gKi8KKy8qIHRvZG86IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBtZWdzIHVzZWQgYnkgYQorICAgY29udGV4dCBmb3Igd2hlbiB0aGV5J3JlIGNsZWFyZWQgKi8KK3ZvaWQgY2xlYXJfY29udGV4dCh1bnNpZ25lZCBsb25nIGNvbnRleHQpCit7CisgICAgIHVuc2lnbmVkIGNoYXIgb2xkY3R4OworICAgICB1bnNpZ25lZCBsb25nIGk7CisKKyAgICAgaWYoY29udGV4dCkgeworCSAgICAgaWYoIWN0eF9hbGxvY1tjb250ZXh0XSkKKwkJICAgICBwYW5pYygiY2xlYXJfY29udGV4dDogY29udGV4dCBub3QgYWxsb2NhdGVkXG4iKTsKKworCSAgICAgY3R4X2FsbG9jW2NvbnRleHRdLT5jb250ZXh0ID0gU1VOM19JTlZBTElEX0NPTlRFWFQ7CisJICAgICBjdHhfYWxsb2NbY29udGV4dF0gPSAoc3RydWN0IG1tX3N0cnVjdCAqKTA7CisJICAgICBjdHhfYXZhaWwrKzsKKyAgICAgfQorCisgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKworICAgICBzdW4zX3B1dF9jb250ZXh0KGNvbnRleHQpOworCisgICAgIGZvcihpID0gMDsgaSA8IFNVTjNfSU5WQUxJRF9QTUVHOyBpKyspIHsKKwkgICAgIGlmKChwbWVnX2N0eFtpXSA9PSBjb250ZXh0KSAmJiAocG1lZ19hbGxvY1tpXSA9PSAxKSkgeworCQkgICAgIHN1bjNfcHV0X3NlZ21hcChwbWVnX3ZhZGRyW2ldLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJCSAgICAgcG1lZ19jdHhbaV0gPSAwOworCQkgICAgIHBtZWdfYWxsb2NbaV0gPSAwOworCQkgICAgIHBtZWdfdmFkZHJbaV0gPSAwOworCSAgICAgfQorICAgICB9CisKKyAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworfQorCisvKiBnZXRzIGFuIGVtcHR5IGNvbnRleHQuICBpZiBmdWxsLCBraWxscyB0aGUgbmV4dCBjb250ZXh0IGxpc3RlZCB0bworICAgZGllIGZpcnN0ICovCisvKiBUaGlzIGNvbnRleHQgaW52YWxpZGF0aW9uIHNjaGVtZSBpcywgd2VsbCwgdG90YWxseSBhcmJpdHJhcnksIEknbQorICAgc3VyZSBpdCBjb3VsZCBiZSBtdWNoIG1vcmUgaW50ZWxsZWdlbnQuLi4gIGJ1dCBpdCBnZXRzIHRoZSBqb2IgZG9uZQorICAgZm9yIG5vdyB3aXRob3V0IG11Y2ggb3ZlcmhlYWQgaW4gbWFraW5nIGl0J3MgZGVjaXNpb24uICovCisvKiB0b2RvOiBjb21lIHVwIHdpdGggb3B0aW1pemVkIHNjaGVtZSBmb3IgZmx1c2hpbmcgY29udGV4dHMgKi8KK3Vuc2lnbmVkIGxvbmcgZ2V0X2ZyZWVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIG5ldyA9IDE7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbmV4dF90b19kaWUgPSAxOworCisJaWYoIWN0eF9hdmFpbCkgeworCQkvKiBraWxsIHNvbWVvbmUgdG8gZ2V0IG91ciBjb250ZXh0ICovCisJCW5ldyA9IG5leHRfdG9fZGllOworCQljbGVhcl9jb250ZXh0KG5ldyk7CisJCW5leHRfdG9fZGllID0gKG5leHRfdG9fZGllICsgMSkgJiAweDc7CisJCWlmKCFuZXh0X3RvX2RpZSkKKwkJCW5leHRfdG9fZGllKys7CisJfSBlbHNlIHsKKwkJd2hpbGUobmV3IDwgQ09OVEVYVFNfTlVNKSB7CisJCQlpZihjdHhfYWxsb2NbbmV3XSkKKwkJCQluZXcrKzsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCQkvLyBjaGVjayB0byBtYWtlIHN1cmUgb25lIHdhcyByZWFsbHkgZnJlZS4uLgorCQlpZihuZXcgPT0gQ09OVEVYVFNfTlVNKQorCQkJcGFuaWMoImdldF9mcmVlX2NvbnRleHQ6IGZhaWxlZCB0byBmaW5kIGZyZWUgY29udGV4dCIpOworCX0KKworCWN0eF9hbGxvY1tuZXddID0gbW07CisJY3R4X2F2YWlsLS07CisKKwlyZXR1cm4gbmV3OworfQorCisvKgorICogRHluYW1pY2FsbHkgc2VsZWN0IGEgYHNwYXJlJyBQTUVHIGFuZCB1c2UgaXQgdG8gbWFwIHZpcnR1YWwgYHZhZGRyJyBpbgorICogYGNvbnRleHQnLiBNYWludGFpbiBpbnRlcm5hbCBQTUVHIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gVGhpcyBkb2Vzbid0CisgKiBhY3R1YWxseSBtYXAgdGhlIHBoeXNpY2FsIGFkZHJlc3MsIGJ1dCBkb2VzIGNsZWFyIHRoZSBvbGQgbWFwcGluZ3MuCisgKi8KKy8vdG9kbzogYmV0dGVyIGFsbG9jYXRpb24gc2NoZW1lPyBidXQgaXMgZXh0cmEgY29tcGxleGl0eSB3b3J0aHdoaWxlPworLy90b2RvOiBvbmx5IGNsZWFyIG9sZCBlbnRyaWVzIGlmIG5lY2Vzc2FyeT8gaG93IHRvIHRlbGw/CisKK2lubGluZSB2b2lkIG1tdV9lbXVfbWFwX3BtZWcgKGludCBjb250ZXh0LCBpbnQgdmFkZHIpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY3Vycl9wbWVnID0gMTI4OworCWludCBpOworCisJLyogUm91bmQgYWRkcmVzcyB0byBQTUVHIGJvdW5kYXJ5LiAqLworCXZhZGRyICY9IH5TVU4zX1BNRUdfTUFTSzsKKworCS8qIEZpbmQgYSBzcGFyZSBvbmUuICovCisJd2hpbGUgKHBtZWdfYWxsb2NbY3Vycl9wbWVnXSA9PSAyKQorCQkrK2N1cnJfcG1lZzsKKworCisjaWZkZWYgREVCVUdfTU1VX0VNVQorcHJpbnRrKCJtbXVfZW11X21hcF9wbWVnOiBwbWVnICV4IHRvIGNvbnRleHQgJWQgdmFkZHIgJXhcbiIsCisgICAgICAgY3Vycl9wbWVnLCBjb250ZXh0LCB2YWRkcik7CisjZW5kaWYKKworCS8qIEludmFsaWRhdGUgb2xkIG1hcHBpbmcgZm9yIHRoZSBwbWVnLCBpZiBhbnkgKi8KKwlpZiAocG1lZ19hbGxvY1tjdXJyX3BtZWddID09IDEpIHsKKwkJc3VuM19wdXRfY29udGV4dChwbWVnX2N0eFtjdXJyX3BtZWddKTsKKwkJc3VuM19wdXRfc2VnbWFwIChwbWVnX3ZhZGRyW2N1cnJfcG1lZ10sIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkJc3VuM19wdXRfY29udGV4dChjb250ZXh0KTsKKwl9CisKKwkvKiBVcGRhdGUgUE1FRyBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuICovCisJLy8gZG9uJ3QgdGFrZSBwbWVnJ3MgYXdheSBmcm9tIHRoZSBrZXJuZWwuLi4KKwlpZih2YWRkciA+PSBQQUdFX09GRlNFVCkgeworCQkvKiBtYXAga2VybmVsIHBtZWdzIGludG8gYWxsIGNvbnRleHRzICovCisJCXVuc2lnbmVkIGNoYXIgaTsKKworCQlmb3IoaSA9IDA7IGkgPCBDT05URVhUU19OVU07IGkrKykgeworCQkJc3VuM19wdXRfY29udGV4dChpKTsKKwkJCXN1bjNfcHV0X3NlZ21hcCAodmFkZHIsIGN1cnJfcG1lZyk7CisJCX0KKwkJc3VuM19wdXRfY29udGV4dChjb250ZXh0KTsKKwkJcG1lZ19hbGxvY1tjdXJyX3BtZWddID0gMjsKKwkJcG1lZ19jdHhbY3Vycl9wbWVnXSA9IDA7CisKKwl9CisJZWxzZSB7CisJCXBtZWdfYWxsb2NbY3Vycl9wbWVnXSA9IDE7CisJCXBtZWdfY3R4W2N1cnJfcG1lZ10gPSBjb250ZXh0OworCQlzdW4zX3B1dF9zZWdtYXAgKHZhZGRyLCBjdXJyX3BtZWcpOworCisJfQorCXBtZWdfdmFkZHJbY3Vycl9wbWVnXSA9IHZhZGRyOworCisJLyogU2V0IGhhcmR3YXJlIG1hcHBpbmcgYW5kIGNsZWFyIHRoZSBvbGQgUFRFIGVudHJpZXMuICovCisJZm9yIChpPTA7IGk8U1VOM19QTUVHX1NJWkU7IGkrPVNVTjNfUFRFX1NJWkUpCisJCXN1bjNfcHV0X3B0ZSAodmFkZHIgKyBpLCBTVU4zX1BBR0VfU1lTVEVNKTsKKworCS8qIENvbnNpZGVyIGEgZGlmZmVyZW50IG9uZSBuZXh0IHRpbWUuICovCisJKytjdXJyX3BtZWc7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBwYWdlZmF1bHQgYXQgdmlydHVhbCBhZGRyZXNzIGB2YWRkcic7IGNoZWNrIGlmIHRoZXJlIHNob3VsZCBiZSBhCisgKiBwYWdlIHRoZXJlIChzcGVjaWZpY2FsbHksIHdoZXRoZXIgdGhlIHNvZnR3YXJlIHBhZ2V0YWJsZXMgaW5kaWNhdGUgdGhhdAorICogdGhlcmUgaXMpLiBUaGlzIGlzIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIGxpbWl0ZWQgc2l6ZSBvZiB0aGUgc2Vjb25kLWxldmVsCisgKiBTdW4zIGhhcmR3YXJlIHBhZ2V0YWJsZXMgKDI1NiBncm91cHMgb2YgMTYgcGFnZXMpLiBJZiB0aGVyZSBzaG91bGQgYmUgYQorICogbWFwcGluZyBwcmVzZW50LCB3ZSBzZWxlY3QgYSBgc3BhcmUnIFBNRUcgYW5kIHVzZSBpdCB0byBjcmVhdGUgYSBtYXBwaW5nLgorICogYHJlYWRfZmxhZycgaXMgbm9uemVybyBmb3IgYSByZWFkIGZhdWx0OyB6ZXJvIGZvciBhIHdyaXRlLiBSZXR1cm5zIG5vbnplcm8KKyAqIGlmIHdlIHN1Y2Nlc3NmdWxseSBoYW5kbGVkIHRoZSBmYXVsdC4KKyAqLworLy90b2RvOiBzaG91bGQgd2UgYnVtcCBtaW5vciBwYWdlZmF1bHQgY291bnRlcj8gaWYgc28sIGhlcmUgb3IgaW4gY2FsbGVyPworLy90b2RvOiBwb3NzaWJseSBpbmxpbmUgdGhpcyBpbnRvIGJ1c19lcnJvcjAzMCBpbiA8YXNtL2J1c2Vycm9yLmg+ID8KKworLy8ga2VybmVsX2ZhdWx0IGlzIHNldCB3aGVuIGEga2VybmVsIHBhZ2UgY291bGRuJ3QgYmUgZGVtYW5kIG1hcHBlZCwKKy8vIGFuZCBmb3JjZXMgYW5vdGhlciB0cnkgdXNpbmcgdGhlIGtlcm5lbCBwYWdlIHRhYmxlLiAgYmFzaWNhbGx5IGEKKy8vIGhhY2sgc28gdGhhdCB2bWFsbG9jIHdvdWxkIHdvcmsgY29ycmVjdGx5LgorCitpbnQgbW11X2VtdV9oYW5kbGVfZmF1bHQgKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCByZWFkX2ZsYWcsIGludCBrZXJuZWxfZmF1bHQpCit7CisJdW5zaWduZWQgbG9uZyBzZWdtZW50LCBvZmZzZXQ7CisJdW5zaWduZWQgY2hhciBjb250ZXh0OworCXB0ZV90ICpwdGU7CisJcGdkX3QgKiBjcnA7CisKKwlpZihjdXJyZW50LT5tbSA9PSBOVUxMKSB7CisJCWNycCA9IHN3YXBwZXJfcGdfZGlyOworCQljb250ZXh0ID0gMDsKKwl9IGVsc2UgeworCQljb250ZXh0ID0gY3VycmVudC0+bW0tPmNvbnRleHQ7CisJCWlmKGtlcm5lbF9mYXVsdCkKKwkJCWNycCA9IHN3YXBwZXJfcGdfZGlyOworCQllbHNlCisJCQljcnAgPSBjdXJyZW50LT5tbS0+cGdkOworCX0KKworI2lmZGVmIERFQlVHX01NVV9FTVUKKwlwcmludGsgKCJtbXVfZW11X2hhbmRsZV9mYXVsdDogdmFkZHI9JWx4IHR5cGU9JXMgY3JwPSVwXG4iLAorCQl2YWRkciwgcmVhZF9mbGFnID8gInJlYWQiIDogIndyaXRlIiwgY3JwKTsKKyNlbmRpZgorCisJc2VnbWVudCA9ICh2YWRkciA+PiBTVU4zX1BNRUdfU0laRV9CSVRTKSAmIDB4N0ZGOworCW9mZnNldCAgPSAodmFkZHIgPj4gU1VOM19QVEVfU0laRV9CSVRTKSAmIDB4RjsKKworI2lmZGVmIERFQlVHX01NVV9FTVUKKwlwcmludGsgKCJtbXVfZW11X2hhbmRsZV9mYXVsdDogc2VnbWVudD0lbHggb2Zmc2V0PSVseFxuIiwgc2VnbWVudCwgb2Zmc2V0KTsKKyNlbmRpZgorCisJcHRlID0gKHB0ZV90ICopIHBnZF92YWwgKCooY3JwICsgc2VnbWVudCkpOworCisvL3RvZG86IG5leHQgbGluZSBzaG91bGQgY2hlY2sgZm9yIHZhbGlkIHBtZCBwcm9wZXJseS4KKwlpZiAoIXB0ZSkgeworLy8gICAgICAgICAgICAgICAgcHJpbnRrICgibW11X2VtdV9oYW5kbGVfZmF1bHQ6IGludmFsaWQgcG1kXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisJcHRlID0gKHB0ZV90ICopIF9fdmEgKCh1bnNpZ25lZCBsb25nKShwdGUgKyBvZmZzZXQpKTsKKworCS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgcGFnZSAqLworCWlmICghKHB0ZV92YWwgKCpwdGUpICYgU1VOM19QQUdFX1ZBTElEKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBhIHBtZWcgYWxsb2NhdGVkIGZvciB0aGUgcGFnZSAqLworCWlmIChzdW4zX2dldF9zZWdtYXAgKHZhZGRyJn5TVU4zX1BNRUdfTUFTSykgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCW1tdV9lbXVfbWFwX3BtZWcgKGNvbnRleHQsIHZhZGRyKTsKKworCS8qIFdyaXRlIHRoZSBwdGUgdmFsdWUgdG8gaGFyZHdhcmUgTU1VICovCisJc3VuM19wdXRfcHRlICh2YWRkciZQQUdFX01BU0ssIHB0ZV92YWwgKCpwdGUpKTsKKworCS8qIFVwZGF0ZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBwdGUgdmFsdWUgKi8KKy8vIEknbSBub3Qgc3VyZSB0aGlzIGlzIG5lY2Vzc2FyeS4gSWYgdGhpcyBpcyByZXF1aXJlZCwgd2Ugb3VnaHQgdG8gc2ltcGx5CisvLyBjb3B5IHRoaXMgb3V0IHdoZW4gd2UgcmV1c2UgdGhlIFBNRUcgb3IgYXQgc29tZSBvdGhlciBjb252ZW5pZW50IHRpbWUuCisvLyBEb2luZyBpdCBoZXJlIGlzIGZhaXJseSBtZWFuaW5nbGVzcywgYW55d2F5LCBhcyB3ZSBvbmx5IGtub3cgYWJvdXQgdGhlCisvLyBmaXJzdCBhY2Nlc3MgdG8gYSBnaXZlbiBwYWdlLiAtLW0KKwlpZiAoIXJlYWRfZmxhZykgeworCQlpZiAocHRlX3ZhbCAoKnB0ZSkgJiBTVU4zX1BBR0VfV1JJVEVBQkxFKQorCQkJcHRlX3ZhbCAoKnB0ZSkgfD0gKFNVTjNfUEFHRV9BQ0NFU1NFRAorCQkJCQkgICB8IFNVTjNfUEFHRV9NT0RJRklFRCk7CisJCWVsc2UKKwkJCXJldHVybiAwOwkvKiBXcml0ZS1wcm90ZWN0IGVycm9yLiAqLworCX0gZWxzZQorCQlwdGVfdmFsICgqcHRlKSB8PSBTVU4zX1BBR0VfQUNDRVNTRUQ7CisKKyNpZmRlZiBERUJVR19NTVVfRU1VCisJcHJpbnRrICgic2VnOiVkIGNycDolcCAtPiIsIGdldF9mcygpLnNlZywgY3JwKTsKKwlwcmludF9wdGVfdmFkZHIgKHZhZGRyKTsKKwlwcmludGsgKCJcbiIpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3Byb20vTWFrZWZpbGUgYi9hcmNoL202OGsvc3VuMy9wcm9tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDhhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9wcm9tL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIyAkSWQ6IE1ha2VmaWxlLHYgMS41IDE5OTUvMTEvMjUgMDA6NTk6NDggZGF2ZW0gRXhwICQKKyMgTWFrZWZpbGUgZm9yIHRoZSBTdW4gQm9vdCBQUk9NIGludGVyZmFjZSBsaWJyYXJ5IHVuZGVyCisjIExpbnV4LgorIworCitvYmoteSA6PSBpbml0Lm8gY29uc29sZS5vIHByaW50Zi5vICBtaXNjLm8KKyNib290c3RyLm8gaW5pdC5vIG1pc2MubyBzZWdtZW50Lm8gY29uc29sZS5vIHByaW50Zi5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL2NvbnNvbGUuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9wcm9tL2NvbnNvbGUuYwpAQCAtMCwwICsxLDE3NCBAQAorLyogJElkOiBjb25zb2xlLmMsdiAxLjEwIDE5OTYvMTIvMTggMDY6NDY6NTQgdHJpZGdlIEV4cCAkCisgKiBjb25zb2xlLmM6IFJvdXRpbmVzIHRoYXQgZGVhbCB3aXRoIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBJTworICogICAgICAgICAgICB0by9mcm9tIHRoZSBjdXJyZW50IGNvbnNvbGUgZGV2aWNlIHVzaW5nIHRoZSBQUk9NLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKy8qIE5vbiBibG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZSBpbnB1dCBkZXZpY2UsIHJldHVybnMgLTEKKyAqIGlmIG5vIGlucHV0IHdhcyB0YWtlbi4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHBvbGxpbmcuCisgKi8KK2ludAorcHJvbV9uYmdldGNoYXIodm9pZCkKK3sKKwlpbnQgaSA9IC0xOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWkgPSAoKihyb212ZWMtPnB2X25iZ2V0Y2hhcikpKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpOyAvKiBVZ2gsIHdlIGNvdWxkIHNwaW4gZm9yZXZlciBvbiB1bnN1cHBvcnRlZCBwcm9tcyA7KCAqLworfQorCisvKiBOb24gYmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlIGRldmljZSwgcmV0dXJucyAtMSBpZgorICogdW5zdWNjZXNzZnVsLgorICovCitpbnQKK3Byb21fbmJwdXRjaGFyKGNoYXIgYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpID0gLTE7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWkgPSAoKihyb212ZWMtPnB2X25icHV0Y2hhcikpKGMpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gaTsgLyogVWdoLCB3ZSBjb3VsZCBzcGluIGZvcmV2ZXIgb24gdW5zdXBwb3J0ZWQgcHJvbXMgOyggKi8KK30KKworLyogQmxvY2tpbmcgdmVyc2lvbiBvZiBnZXQgY2hhcmFjdGVyIHJvdXRpbmUgYWJvdmUuICovCitjaGFyCitwcm9tX2dldGNoYXIodm9pZCkKK3sKKwlpbnQgY2hhcmFjdGVyOworCXdoaWxlKChjaGFyYWN0ZXIgPSBwcm9tX25iZ2V0Y2hhcigpKSA9PSAtMSkgOworCXJldHVybiAoY2hhcikgY2hhcmFjdGVyOworfQorCisvKiBCbG9ja2luZyB2ZXJzaW9uIG9mIHB1dCBjaGFyYWN0ZXIgcm91dGluZSBhYm92ZS4gKi8KK3ZvaWQKK3Byb21fcHV0Y2hhcihjaGFyIGMpCit7CisJd2hpbGUocHJvbV9uYnB1dGNoYXIoYykgPT0gLTEpIDsKKwlyZXR1cm47Cit9CisKKy8qIFF1ZXJ5IGZvciBpbnB1dCBkZXZpY2UgdHlwZSAqLworI2lmIDAKK2VudW0gcHJvbV9pbnB1dF9kZXZpY2UKK3Byb21fcXVlcnlfaW5wdXRfZGV2aWNlKCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdF9wOworCWNoYXIgcHJvcGJbNjRdOworCWNoYXIgKnA7CisKKwlzd2l0Y2gocHJvbV92ZXJzKSB7CisJY2FzZSBQUk9NX1YwOgorCWNhc2UgUFJPTV9WMjoKKwlkZWZhdWx0OgorCQlzd2l0Y2goKnJvbXZlYy0+cHZfc3RkaW4pIHsKKwkJY2FzZSBQUk9NREVWX0tCRDoJcmV0dXJuIFBST01ERVZfSUtCRDsKKwkJY2FzZSBQUk9NREVWX1RUWUE6CXJldHVybiBQUk9NREVWX0lUVFlBOworCQljYXNlIFBST01ERVZfVFRZQjoJcmV0dXJuIFBST01ERVZfSVRUWUI7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKKwkJfTsKKwljYXNlIFBST01fVjM6CisJY2FzZSBQUk9NX1AxMjc1OgorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXN0X3AgPSAoKnJvbXZlYy0+cHZfdjJkZXZvcHMudjJfaW5zdDJwa2cpKCpyb212ZWMtPnB2X3YyYm9vdGFyZ3MuZmRfc3RkaW4pOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGQgWyUwXSwgJSVnNlxuXHQiIDogOgorCQkJCSAgICAgInIiICgmY3VycmVudF9zZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXSkgOgorCQkJCSAgICAgIm1lbW9yeSIpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWlmKHByb21fbm9kZV9oYXNfcHJvcGVydHkoc3RfcCwgImtleWJvYXJkIikpCisJCQlyZXR1cm4gUFJPTURFVl9JS0JEOworCQlwcm9tX2dldHByb3BlcnR5KHN0X3AsICJkZXZpY2VfdHlwZSIsIHByb3BiLCBzaXplb2YocHJvcGIpKTsKKwkJaWYoc3RybmNtcChwcm9wYiwgInNlcmlhbCIsIHNpemVvZigic2VyaWFsIikpKQorCQkJcmV0dXJuIFBST01ERVZfSV9VTks7CisJCXByb21fZ2V0cHJvcGVydHkocHJvbV9yb290X25vZGUsICJzdGRpbi1wYXRoIiwgcHJvcGIsIHNpemVvZihwcm9wYikpOworCQlwID0gcHJvcGI7CisJCXdoaWxlKCpwKSBwKys7IHAgLT0gMjsKKwkJaWYocFswXSA9PSAnOicpIHsKKwkJCWlmKHBbMV0gPT0gJ2EnKQorCQkJCXJldHVybiBQUk9NREVWX0lUVFlBOworCQkJZWxzZSBpZihwWzFdID09ICdiJykKKwkJCQlyZXR1cm4gUFJPTURFVl9JVFRZQjsKKwkJfQorCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKKwljYXNlIFBST01fQVAxMDAwOgorCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKKwl9OworfQorI2VuZGlmCisKKy8qIFF1ZXJ5IGZvciBvdXRwdXQgZGV2aWNlIHR5cGUgKi8KKworI2lmIDAKK2VudW0gcHJvbV9vdXRwdXRfZGV2aWNlCitwcm9tX3F1ZXJ5X291dHB1dF9kZXZpY2UoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0X3A7CisJY2hhciBwcm9wYls2NF07CisJY2hhciAqcDsKKwlpbnQgcHJvcGw7CisKKwlzd2l0Y2gocHJvbV92ZXJzKSB7CisJY2FzZSBQUk9NX1YwOgorCQlzd2l0Y2goKnJvbXZlYy0+cHZfc3RkaW4pIHsKKwkJY2FzZSBQUk9NREVWX1NDUkVFTjoJcmV0dXJuIFBST01ERVZfT1NDUkVFTjsKKwkJY2FzZSBQUk9NREVWX1RUWUE6CXJldHVybiBQUk9NREVWX09UVFlBOworCQljYXNlIFBST01ERVZfVFRZQjoJcmV0dXJuIFBST01ERVZfT1RUWUI7CisJCX07CisJCWJyZWFrOworCWNhc2UgUFJPTV9WMjoKKwljYXNlIFBST01fVjM6CisJY2FzZSBQUk9NX1AxMjc1OgorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXN0X3AgPSAoKnJvbXZlYy0+cHZfdjJkZXZvcHMudjJfaW5zdDJwa2cpKCpyb212ZWMtPnB2X3YyYm9vdGFyZ3MuZmRfc3Rkb3V0KTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkIFslMF0sICUlZzZcblx0IiA6IDoKKwkJCQkgICAgICJyIiAoJmN1cnJlbnRfc2V0W3NtcF9wcm9jZXNzb3JfaWQoKV0pIDoKKwkJCQkgICAgICJtZW1vcnkiKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlwcm9wbCA9IHByb21fZ2V0cHJvcGVydHkoc3RfcCwgImRldmljZV90eXBlIiwgcHJvcGIsIHNpemVvZihwcm9wYikpOworCQlpZiAocHJvcGwgPj0gMCAmJiBwcm9wbCA9PSBzaXplb2YoImRpc3BsYXkiKSAmJgorCQkJc3RybmNtcCgiZGlzcGxheSIsIHByb3BiLCBzaXplb2YoImRpc3BsYXkiKSkgPT0gMCkKKwkJeworCQkJcmV0dXJuIFBST01ERVZfT1NDUkVFTjsKKwkJfQorCQlpZihwcm9tX3ZlcnMgPT0gUFJPTV9WMykgeworCQkJaWYoc3RybmNtcCgic2VyaWFsIiwgcHJvcGIsIHNpemVvZigic2VyaWFsIikpKQorCQkJCXJldHVybiBQUk9NREVWX09fVU5LOworCQkJcHJvbV9nZXRwcm9wZXJ0eShwcm9tX3Jvb3Rfbm9kZSwgInN0ZG91dC1wYXRoIiwgcHJvcGIsIHNpemVvZihwcm9wYikpOworCQkJcCA9IHByb3BiOworCQkJd2hpbGUoKnApIHArKzsgcCAtPSAyOworCQkJaWYocFswXT09JzonKSB7CisJCQkJaWYocFsxXSA9PSAnYScpCisJCQkJCXJldHVybiBQUk9NREVWX09UVFlBOworCQkJCWVsc2UgaWYocFsxXSA9PSAnYicpCisJCQkJCXJldHVybiBQUk9NREVWX09UVFlCOworCQkJfQorCQkJcmV0dXJuIFBST01ERVZfT19VTks7CisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIHdvcmtzIG9uIFNTLTIgKGFuIGVhcmx5IE9wZW5GaXJtd2FyZSkgc3RpbGwuICovCisJCQlzd2l0Y2goKnJvbXZlYy0+cHZfc3RkaW4pIHsKKwkJCWNhc2UgUFJPTURFVl9UVFlBOglyZXR1cm4gUFJPTURFVl9PVFRZQTsKKwkJCWNhc2UgUFJPTURFVl9UVFlCOglyZXR1cm4gUFJPTURFVl9PVFRZQjsKKwkJCX07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQUk9NX0FQMTAwMDoKKwkJcmV0dXJuIFBST01ERVZfSV9VTks7CisJfTsKKwlyZXR1cm4gUFJPTURFVl9PX1VOSzsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvcHJvbS9pbml0LmMgYi9hcmNoL202OGsvc3VuMy9wcm9tL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTZhZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9pbml0LmMKQEAgLTAsMCArMSw4OSBAQAorLyogJElkOiBpbml0LmMsdiAxLjkgMTk5Ni8xMi8xOCAwNjo0Njo1NSB0cmlkZ2UgRXhwICQKKyAqIGluaXQuYzogIEluaXRpYWxpemUgaW50ZXJuYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIFBST00KKyAqICAgICAgICAgIGxpYnJhcnkgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCitzdHJ1Y3QgbGludXhfcm9tdmVjICpyb212ZWM7CitlbnVtIHByb21fbWFqb3JfdmVyc2lvbiBwcm9tX3ZlcnM7Cit1bnNpZ25lZCBpbnQgcHJvbV9yZXYsIHByb21fcHJldjsKKworLyogVGhlIHJvb3Qgbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gKi8KK2ludCBwcm9tX3Jvb3Rfbm9kZTsKKworLyogUG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgbGludXhfbm9kZW9wcyAqcHJvbV9ub2Rlb3BzOworCisvKiBZb3UgbXVzdCBjYWxsIHByb21faW5pdCgpIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYW55IG9mIHRoZQorICogcm91dGluZXMgaW4gdGhlIHByb20gbGlicmFyeS4gIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uCisgKiBmYWlsdXJlLiAgSXQgZ2V0cyBwYXNzZWQgdGhlIHBvaW50ZXIgdG8gdGhlIFBST00gdmVjdG9yLgorICovCisKK2V4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHByb21fcmFuZ2VzX2luaXQodm9pZCk7CisKK3ZvaWQgX19pbml0IHByb21faW5pdChzdHJ1Y3QgbGludXhfcm9tdmVjICpycCkKK3sKKyNpZmRlZiBDT05GSUdfQVAxMDAwCisJZXh0ZXJuIHN0cnVjdCBsaW51eF9yb212ZWMgKmFwX3Byb21faW5pdCh2b2lkKTsKKwlycCA9IGFwX3Byb21faW5pdCgpOworI2VuZGlmCisKKwlyb212ZWMgPSBycDsKKyNpZm5kZWYgQ09ORklHX1NVTjMKKwlzd2l0Y2gocm9tdmVjLT5wdl9yb212ZXJzKSB7CisJY2FzZSAwOgorCQlwcm9tX3ZlcnMgPSBQUk9NX1YwOworCQlicmVhazsKKwljYXNlIDI6CisJCXByb21fdmVycyA9IFBST01fVjI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJvbV92ZXJzID0gUFJPTV9WMzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwcm9tX3ZlcnMgPSBQUk9NX1AxMjc1OworCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogU3VuIElFRUUgUHJvbSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCXByb21faGFsdCgpOworCQlicmVhazsKKwljYXNlIDQyOiAvKiB3aHkgbm90IDotKSAqLworCQlwcm9tX3ZlcnMgPSBQUk9NX0FQMTAwMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogQmFkIFBST00gdmVyc2lvbiAlZFxuIiwKKwkJCSAgICByb212ZWMtPnB2X3JvbXZlcnMpOworCQlwcm9tX2hhbHQoKTsKKwkJYnJlYWs7CisJfTsKKworCXByb21fcmV2ID0gcm9tdmVjLT5wdl9wbHVnaW5fcmV2aXNpb247CisJcHJvbV9wcmV2ID0gcm9tdmVjLT5wdl9wcmludHJldjsKKwlwcm9tX25vZGVvcHMgPSByb212ZWMtPnB2X25vZGVvcHM7CisKKwlwcm9tX3Jvb3Rfbm9kZSA9IHByb21fZ2V0c2libGluZygwKTsKKwlpZigocHJvbV9yb290X25vZGUgPT0gMCkgfHwgKHByb21fcm9vdF9ub2RlID09IC0xKSkKKwkJcHJvbV9oYWx0KCk7CisKKwlpZigoKCh1bnNpZ25lZCBsb25nKSBwcm9tX25vZGVvcHMpID09IDApIHx8CisJICAgKCgodW5zaWduZWQgbG9uZykgcHJvbV9ub2Rlb3BzKSA9PSAtMSkpCisJCXByb21faGFsdCgpOworCisJcHJvbV9tZW1pbml0KCk7CisKKwlwcm9tX3Jhbmdlc19pbml0KCk7CisjZW5kaWYKKy8vCXByaW50aygiUFJPTUxJQjogU3VuIEJvb3QgUHJvbSBWZXJzaW9uICVkIFJldmlzaW9uICVkXG4iLAorLy8JICAgICAgIHJvbXZlYy0+cHZfcm9tdmVycywgcHJvbV9yZXYpOworCisJLyogSW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4gKi8KKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL21pc2MuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODcxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9wcm9tL21pc2MuYwpAQCAtMCwwICsxLDk0IEBACisvKiAkSWQ6IG1pc2MuYyx2IDEuMTUgMTk5Ny8wNS8xNCAyMDo0NTowMCBkYXZlbSBFeHAgJAorICogbWlzYy5jOiAgTWlzY2VsbGFuZW91cyBwcm9tIGZ1bmN0aW9ucyB0aGF0IGRvbid0IGJlbG9uZworICogICAgICAgICAgYW55d2hlcmUgZWxzZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3N1bjMtaGVhZC5oPgorI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vbW92cy5oPgorCisvKiBSZXNldCBhbmQgcmVib290IHRoZSBtYWNoaW5lIHdpdGggdGhlIGNvbW1hbmQgJ2Jjb21tYW5kJy4gKi8KK3ZvaWQKK3Byb21fcmVib290KGNoYXIgKmJjb21tYW5kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSgqKHJvbXZlYy0+cHZfcmVib290KSkoYmNvbW1hbmQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyogRHJvcCBpbnRvIHRoZSBwcm9tLCB3aXRoIHRoZSBjaGFuY2UgdG8gY29udGludWUgd2l0aCB0aGUgJ2dvJworICogcHJvbSBjb21tYW5kLgorICovCit2b2lkCitwcm9tX2NtZGxpbmUodm9pZCkKK3sKK30KKworLyogRHJvcCBpbnRvIHRoZSBwcm9tLCBidXQgY29tcGxldGVseSB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uCisgKiBObyBjaGFuY2Ugb2YgY29udGludWluZy4KKyAqLwordm9pZAorcHJvbV9oYWx0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK2FnYWluOgorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkoKihyb212ZWMtPnB2X2hhbHQpKSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlnb3RvIGFnYWluOyAvKiBQUk9NIGlzIG91dCB0byBnZXQgbWUgLURhdmVNICovCit9CisKK3R5cGVkZWYgdm9pZCAoKnNmdW5jX3QpKHZvaWQpOworCisvKiBHZXQgdGhlIGlkcHJvbSBhbmQgc3R1ZmYgaXQgaW50byBidWZmZXIgJ2lkYnVmJy4gIFJldHVybnMgdGhlCisgKiBmb3JtYXQgdHlwZS4gICdudW1fYnl0ZXMnIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB5b3VyIGlkYnVmCisgKiBoYXMgc3BhY2UgZm9yLiAgUmV0dXJucyAweGZmIG9uIGVycm9yLgorICovCit1bnNpZ25lZCBjaGFyCitwcm9tX2dldF9pZHByb20oY2hhciAqaWRidWYsIGludCBudW1fYnl0ZXMpCit7CisJaW50IGksIG9sZHNmYzsKKwlHRVRfU0ZDKG9sZHNmYyk7CisJU0VUX1NGQyhGQ19DT05UUk9MKTsKKwlmb3IoaT0wO2k8bnVtX2J5dGVzOyBpKyspCisJeworCQkvKiBUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgR0VUX0NPTlRST0xfQllURQorCQltYWNybzsgZGVmaW5pbmcgdGhlIGV4dHJhIHZhcmlhYmxlCisJCWdldHMgYXJvdW5kIGl0LgorCQkqLworCQlpbnQgYzsKKwkJR0VUX0NPTlRST0xfQllURShTVU4zX0lEUFJPTV9CQVNFICsgaSwgYyk7CisJCWlkYnVmW2ldID0gYzsKKwl9CisJU0VUX1NGQyhvbGRzZmMpOworCXJldHVybiBpZGJ1ZlswXTsKK30KKworLyogR2V0IHRoZSBtYWpvciBwcm9tIHZlcnNpb24gbnVtYmVyLiAqLworaW50Citwcm9tX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gcm9tdmVjLT5wdl9yb212ZXJzOworfQorCisvKiBHZXQgdGhlIHByb20gcGx1Z2luLXJldmlzaW9uLiAqLworaW50Citwcm9tX2dldHJldih2b2lkKQoreworCXJldHVybiBwcm9tX3JldjsKK30KKworLyogR2V0IHRoZSBwcm9tIGZpcm13YXJlIHByaW50IHJldmlzaW9uLiAqLworaW50Citwcm9tX2dldHByZXYodm9pZCkKK3sKKwlyZXR1cm4gcHJvbV9wcmV2OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvcHJvbS9wcmludGYuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlZTEwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vcHJpbnRmLmMKQEAgLTAsMCArMSw2MSBAQAorLyogJElkOiBwcmludGYuYyx2IDEuNSAxOTk2LzA0LzA0IDE2OjMxOjA3IHRyaWRnZSBFeHAgJAorICogcHJpbnRmLmM6ICBJbnRlcm5hbCBwcm9tIGxpYnJhcnkgcHJpbnRmIGZhY2lsaXR5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworLyogVGhpcyByb3V0aW5lIGlzIGludGVybmFsIHRvIHRoZSBwcm9tIGxpYnJhcnksIG5vIG9uZSBlbHNlIHNob3VsZCBrbm93CisgKiBhYm91dCBvciB1c2UgaXQhICBJdCdzIHNpbXBsZSBhbmQgc21lbGx5IGFueXdheS4uLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworI2lmZGVmIENPTkZJR19LR0RCCitleHRlcm4gaW50IGtnZGJfaW5pdGlhbGl6ZWQ7CisjZW5kaWYKKworc3RhdGljIGNoYXIgcHBidWZbMTAyNF07CisKK3ZvaWQKK3Byb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyIGNoLCAqYnB0cjsKKwlpbnQgaTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisKKyNpZmRlZiBDT05GSUdfS0dEQgorCXBwYnVmWzBdID0gJ08nOworCWkgPSB2c3ByaW50ZihwcGJ1ZiArIDEsIGZtdCwgYXJncykgKyAxOworI2Vsc2UKKwlpID0gdnNwcmludGYocHBidWYsIGZtdCwgYXJncyk7CisjZW5kaWYKKworCWJwdHIgPSBwcGJ1ZjsKKworI2lmZGVmIENPTkZJR19BUDEwMDAKKyAgICAgICAgYXBfd3JpdGUoMSxicHRyLHN0cmxlbihicHRyKSk7CisjZWxzZQorCisjaWZkZWYgQ09ORklHX0tHREIKKwlpZiAoa2dkYl9pbml0aWFsaXplZCkgeworCQlwcmludGsoImtnZGJfaW5pdGlhbGl6ZWQgPSAlZFxuIiwga2dkYl9pbml0aWFsaXplZCk7CisJCXB1dHBhY2tldChicHRyLCAxKTsKKwl9IGVsc2UKKyNlbHNlCisJd2hpbGUoKGNoID0gKihicHRyKyspKSAhPSAwKSB7CisJCWlmKGNoID09ICdcbicpCisJCQlwcm9tX3B1dGNoYXIoJ1xyJyk7CisKKwkJcHJvbV9wdXRjaGFyKGNoKTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCXZhX2VuZChhcmdzKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9zYnVzLmMgYi9hcmNoL202OGsvc3VuMy9zYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiZGJmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3NidXMuYwpAQCAtMCwwICsxLDI3IEBACisvKgorICogU0J1cyBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogU3VuMyBkb24ndCBoYXZlIGEgc2J1cywgYnV0IG1hbnkgb2YgdGhlIHVzZWQgZGV2aWNlcyBhcmUgYWxzbworICogdXNlZCBvbiBTcGFyYyBtYWNoaW5lcyB3aXRoIHNidXMuIFRvIGF2b2lkIGhhdmluZyBhIGxvdCBvZgorICogZHVwbGljYXRlIGNvZGUsIHdlIHByb3ZpZGUgbmVjZXNzYXJ5IGdsdWUgc3R1ZmYgdG8gbWFrZSB1c2luZworICogb2YgdGhlIHNidXMgZHJpdmVyIGNvZGUgcG9zc2libGUuCisgKgorICogKEMpIDE5OTkgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworaW50IF9faW5pdCBzYnVzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqc3BhcmNfYWxsb2NfaW8gKHUzMiBhZGRyZXNzLCB2b2lkICp2aXJ0dWFsLCBpbnQgbGVuLCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIHUzMiBidXNfdHlwZSwgaW50IHJkb25seSkKK3sKKwlyZXR1cm4gKHZvaWQgKilhZGRyZXNzOworfQorCitzdWJzeXNfaW5pdGNhbGwoc2J1c19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNfa3N5bXMuYyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNfa3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2U1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvc3VuM19rc3ltcy5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9kdm1hLmg+CisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorCisvKgorICogQWRkIHRoaW5ncyBoZXJlIHdoZW4geW91IGZpbmQgdGhlIG5lZWQgZm9yIGl0LgorICovCitFWFBPUlRfU1lNQk9MKGR2bWFfbWFwX2FsaWduKTsKK0VYUE9SVF9TWU1CT0woZHZtYV91bm1hcCk7CitFWFBPUlRfU1lNQk9MKGR2bWFfbWFsbG9jX2FsaWduKTsKK0VYUE9SVF9TWU1CT0woZHZtYV9mcmVlKTsKK0VYUE9SVF9TWU1CT0woaWRwcm9tKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMgYi9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGExZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogbGludXgvYXJjaC9tNjhrL21tL3N1bjNkdm1hLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2FtIENyZWFzZXkKKyAqCisgKiBDb250YWlucyBjb21tb24gcm91dGluZXMgZm9yIHN1bjMvc3VuM3ggRFZNQSBtYW5hZ2VtZW50LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vZHZtYS5oPgorCisjdW5kZWYgRFZNQV9ERUJVRworCisjaWZkZWYgQ09ORklHX1NVTjNYCitleHRlcm4gdm9pZCBkdm1hX3VubWFwX2lvbW11KHVuc2lnbmVkIGxvbmcgYmFkZHIsIGludCBsZW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdm1hX3VubWFwX2lvbW11KHVuc2lnbmVkIGxvbmcgYSwgaW50IGIpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVU4zCitleHRlcm4gdm9pZCBzdW4zX2R2bWFfaW5pdCh2b2lkKTsKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIGlvbW11X3VzZVtJT01NVV9UT1RBTF9FTlRSSUVTXTsKKworI2RlZmluZSBkdm1hX2luZGV4KGJhZGRyKSAoKGJhZGRyIC0gRFZNQV9TVEFSVCkgPj4gRFZNQV9QQUdFX1NISUZUKQorCisjZGVmaW5lIGR2bWFfZW50cnlfdXNlKGJhZGRyKQkJKGlvbW11X3VzZVtkdm1hX2luZGV4KGJhZGRyKV0pCisKK3N0cnVjdCBob2xlIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBob2xlX2xpc3Q7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBob2xlX2NhY2hlOworc3RhdGljIHN0cnVjdCBob2xlIGluaXRob2xlc1s2NF07CisKKyNpZmRlZiBEVk1BX0RFQlVHCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGR2bWFfYWxsb2NzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZHZtYV9mcmVlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZHZtYV9hbGxvY19ieXRlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZHZtYV9mcmVlX2J5dGVzOworCitzdGF0aWMgdm9pZCBwcmludF91c2Uodm9pZCkKK3sKKworCWludCBpOworCWludCBqID0gMDsKKworCXByaW50aygiZHZtYSBlbnRyeSB1c2FnZTpcbiIpOworCisJZm9yKGkgPSAwOyBpIDwgSU9NTVVfVE9UQUxfRU5UUklFUzsgaSsrKSB7CisJCWlmKCFpb21tdV91c2VbaV0pCisJCQljb250aW51ZTsKKworCQlqKys7CisKKwkJcHJpbnRrKCJkdm1hIGVudHJ5OiAlMDhseCBsZW4gJTA4bHhcbiIsCisJCSAgICAgICAoIGkgPDwgRFZNQV9QQUdFX1NISUZUKSArIERWTUFfU1RBUlQsCisJCSAgICAgICBpb21tdV91c2VbaV0pOworCX0KKworCXByaW50aygiJWQgZW50cmllcyBpbiB1c2UgdG90YWxcbiIsIGopOworCisJcHJpbnRrKCJhbGxvY2F0aW9uL2ZyZWUgY2FsbHM6ICVsdS8lbHVcbiIsIGR2bWFfYWxsb2NzLCBkdm1hX2ZyZWVzKTsKKwlwcmludGsoImFsbG9jYXRpb24vZnJlZSBieXRlczogJUx4LyVMeFxuIiwgZHZtYV9hbGxvY19ieXRlcywKKwkgICAgICAgZHZtYV9mcmVlX2J5dGVzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfaG9sZXMoc3RydWN0IGxpc3RfaGVhZCAqaG9sZXMpCit7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisJc3RydWN0IGhvbGUgKmhvbGU7CisKKwlwcmludGsoImxpc3RpbmcgZHZtYSBob2xlc1xuIik7CisJbGlzdF9mb3JfZWFjaChjdXIsIGhvbGVzKSB7CisJCWhvbGUgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGhvbGUsIGxpc3QpOworCisJCWlmKChob2xlLT5zdGFydCA9PSAwKSAmJiAoaG9sZS0+ZW5kID09IDApICYmIChob2xlLT5zaXplID09IDApKQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKCJob2xlOiBzdGFydCAlMDhseCBlbmQgJTA4bHggc2l6ZSAlMDhseFxuIiwgaG9sZS0+c3RhcnQsIGhvbGUtPmVuZCwgaG9sZS0+c2l6ZSk7CisJfQorCisJcHJpbnRrKCJlbmQgb2YgaG9sZSBsaXN0aW5nLi4uXG4iKTsKKworfQorI2VuZGlmIC8qIERWTUFfREVCVUcgKi8KKworc3RhdGljIGlubGluZSBpbnQgcmVmaWxsKHZvaWQpCit7CisKKwlzdHJ1Y3QgaG9sZSAqaG9sZTsKKwlzdHJ1Y3QgaG9sZSAqcHJldiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyOworCWludCByZXQgPSAwOworCisJbGlzdF9mb3JfZWFjaChjdXIsICZob2xlX2xpc3QpIHsKKwkJaG9sZSA9IGxpc3RfZW50cnkoY3VyLCBzdHJ1Y3QgaG9sZSwgbGlzdCk7CisKKwkJaWYoIXByZXYpIHsKKwkJCXByZXYgPSBob2xlOworCQkJY29udGludWU7CisJCX0KKworCQlpZihob2xlLT5lbmQgPT0gcHJldi0+c3RhcnQpIHsKKwkJCWhvbGUtPnNpemUgKz0gcHJldi0+c2l6ZTsKKwkJCWhvbGUtPmVuZCA9IHByZXYtPmVuZDsKKwkJCWxpc3RfZGVsKCYocHJldi0+bGlzdCkpOworCQkJbGlzdF9hZGQoJihwcmV2LT5saXN0KSwgJmhvbGVfY2FjaGUpOworCQkJcmV0Kys7CisJCX0KKworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhvbGUgKnJtY2FjaGUodm9pZCkKK3sKKwlzdHJ1Y3QgaG9sZSAqcmV0OworCisJaWYobGlzdF9lbXB0eSgmaG9sZV9jYWNoZSkpIHsKKwkJaWYoIXJlZmlsbCgpKSB7CisJCQlwcmludGsoIm91dCBvZiBkdm1hIGhvbGUgY2FjaGUhXG4iKTsKKwkJCUJVRygpOworCQl9CisJfQorCisJcmV0ID0gbGlzdF9lbnRyeShob2xlX2NhY2hlLm5leHQsIHN0cnVjdCBob2xlLCBsaXN0KTsKKwlsaXN0X2RlbCgmKHJldC0+bGlzdCkpOworCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2JhZGRyKGludCBsZW4sIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisJc3RydWN0IGhvbGUgKmhvbGU7CisKKwlpZihsaXN0X2VtcHR5KCZob2xlX2xpc3QpKSB7CisjaWZkZWYgRFZNQV9ERUJVRworCQlwcmludGsoIm91dCBvZiBkdm1hIGhvbGVzISAocHJpbnRpbmcgaG9sZSBjYWNoZSlcbiIpOworCQlwcmludF9ob2xlcygmaG9sZV9jYWNoZSk7CisJCXByaW50X3VzZSgpOworI2VuZGlmCisJCUJVRygpOworCX0KKworCWxpc3RfZm9yX2VhY2goY3VyLCAmaG9sZV9saXN0KSB7CisJCXVuc2lnbmVkIGxvbmcgbmV3bGVuOworCisJCWhvbGUgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGhvbGUsIGxpc3QpOworCisJCWlmKGFsaWduID4gRFZNQV9QQUdFX1NJWkUpCisJCQluZXdsZW4gPSBsZW4gKyAoKGhvbGUtPmVuZCAtIGxlbikgJiAoYWxpZ24tMSkpOworCQllbHNlCisJCQluZXdsZW4gPSBsZW47CisKKwkJaWYoaG9sZS0+c2l6ZSA+IG5ld2xlbikgeworCQkJaG9sZS0+ZW5kIC09IG5ld2xlbjsKKwkJCWhvbGUtPnNpemUgLT0gbmV3bGVuOworCQkJZHZtYV9lbnRyeV91c2UoaG9sZS0+ZW5kKSA9IG5ld2xlbjsKKyNpZmRlZiBEVk1BX0RFQlVHCisJCQlkdm1hX2FsbG9jcysrOworCQkJZHZtYV9hbGxvY19ieXRlcyArPSBuZXdsZW47CisjZW5kaWYKKwkJCXJldHVybiBob2xlLT5lbmQ7CisJCX0gZWxzZSBpZihob2xlLT5zaXplID09IG5ld2xlbikgeworCQkJbGlzdF9kZWwoJihob2xlLT5saXN0KSk7CisJCQlsaXN0X2FkZCgmKGhvbGUtPmxpc3QpLCAmaG9sZV9jYWNoZSk7CisJCQlkdm1hX2VudHJ5X3VzZShob2xlLT5zdGFydCkgPSBuZXdsZW47CisjaWZkZWYgRFZNQV9ERUJVRworCQkJZHZtYV9hbGxvY3MrKzsKKwkJCWR2bWFfYWxsb2NfYnl0ZXMgKz0gbmV3bGVuOworI2VuZGlmCisJCQlyZXR1cm4gaG9sZS0+c3RhcnQ7CisJCX0KKworCX0KKworCXByaW50aygidW5hYmxlIHRvIGZpbmQgZHZtYSBob2xlIVxuIik7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZyZWVfYmFkZHIodW5zaWduZWQgbG9uZyBiYWRkcikKK3sKKworCXVuc2lnbmVkIGxvbmcgbGVuOworCXN0cnVjdCBob2xlICpob2xlOworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKKwl1bnNpZ25lZCBsb25nIG9yaWdfYmFkZHI7CisKKwlvcmlnX2JhZGRyID0gYmFkZHI7CisJbGVuID0gZHZtYV9lbnRyeV91c2UoYmFkZHIpOworCWR2bWFfZW50cnlfdXNlKGJhZGRyKSA9IDA7CisJYmFkZHIgJj0gRFZNQV9QQUdFX01BU0s7CisJZHZtYV91bm1hcF9pb21tdShiYWRkciwgbGVuKTsKKworI2lmZGVmIERWTUFfREVCVUcKKwlkdm1hX2ZyZWVzKys7CisJZHZtYV9mcmVlX2J5dGVzICs9IGxlbjsKKyNlbmRpZgorCisJbGlzdF9mb3JfZWFjaChjdXIsICZob2xlX2xpc3QpIHsKKwkJaG9sZSA9IGxpc3RfZW50cnkoY3VyLCBzdHJ1Y3QgaG9sZSwgbGlzdCk7CisKKwkJaWYoaG9sZS0+ZW5kID09IGJhZGRyKSB7CisJCQlob2xlLT5lbmQgKz0gbGVuOworCQkJaG9sZS0+c2l6ZSArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmKGhvbGUtPnN0YXJ0ID09IChiYWRkciArIGxlbikpIHsKKwkJCWhvbGUtPnN0YXJ0ID0gYmFkZHI7CisJCQlob2xlLT5zaXplICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CisKKwl9CisKKwlob2xlID0gcm1jYWNoZSgpOworCisJaG9sZS0+c3RhcnQgPSBiYWRkcjsKKwlob2xlLT5lbmQgPSBiYWRkciArIGxlbjsKKwlob2xlLT5zaXplID0gbGVuOworCisvLwlsaXN0X2FkZF90YWlsKCYoaG9sZS0+bGlzdCksIGN1cik7CisJbGlzdF9hZGQoJihob2xlLT5saXN0KSwgY3VyKTsKKworCXJldHVybiAwOworCit9CisKK3ZvaWQgZHZtYV9pbml0KHZvaWQpCit7CisKKwlzdHJ1Y3QgaG9sZSAqaG9sZTsKKwlpbnQgaTsKKworCUlOSVRfTElTVF9IRUFEKCZob2xlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZob2xlX2NhY2hlKTsKKworCS8qIHByZXBhcmUgdGhlIGhvbGUgY2FjaGUgKi8KKwlmb3IoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlsaXN0X2FkZCgmKGluaXRob2xlc1tpXS5saXN0KSwgJmhvbGVfY2FjaGUpOworCisJaG9sZSA9IHJtY2FjaGUoKTsKKwlob2xlLT5zdGFydCA9IERWTUFfU1RBUlQ7CisJaG9sZS0+ZW5kID0gRFZNQV9FTkQ7CisJaG9sZS0+c2l6ZSA9IERWTUFfU0laRTsKKworCWxpc3RfYWRkKCYoaG9sZS0+bGlzdCksICZob2xlX2xpc3QpOworCisJbWVtc2V0KGlvbW11X3VzZSwgMCwgc2l6ZW9mKGlvbW11X3VzZSkpOworCisJZHZtYV91bm1hcF9pb21tdShEVk1BX1NUQVJULCBEVk1BX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NVTjMKKwlzdW4zX2R2bWFfaW5pdCgpOworI2VuZGlmCisKK30KKworaW5saW5lIHVuc2lnbmVkIGxvbmcgZHZtYV9tYXBfYWxpZ24odW5zaWduZWQgbG9uZyBrYWRkciwgaW50IGxlbiwgaW50IGFsaWduKQoreworCisJdW5zaWduZWQgbG9uZyBiYWRkcjsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCWlmKCFsZW4pCisJCWxlbiA9IDB4ODAwOworCisJaWYoIWthZGRyIHx8ICFsZW4pIHsKKy8vCQlwcmludGsoImVycm9yOiBrYWRkciAlbHggbGVuICV4XG4iLCBrYWRkciwgbGVuKTsKKy8vCQkqKGludCAqKTQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50aygiZHZtYV9tYXAgcmVxdWVzdCAlMDhseCBieXRlcyBmcm9tICUwOGx4XG4iLAorCSAgICAgICBsZW4sIGthZGRyKTsKKyNlbmRpZgorCW9mZiA9IGthZGRyICYgfkRWTUFfUEFHRV9NQVNLOworCWthZGRyICY9IFBBR0VfTUFTSzsKKwlsZW4gKz0gb2ZmOworCWxlbiA9ICgobGVuICsgKERWTUFfUEFHRV9TSVpFLTEpKSAmIERWTUFfUEFHRV9NQVNLKTsKKworCWlmKGFsaWduID09IDApCisJCWFsaWduID0gRFZNQV9QQUdFX1NJWkU7CisJZWxzZQorCQlhbGlnbiA9ICgoYWxpZ24gKyAoRFZNQV9QQUdFX1NJWkUtMSkpICYgRFZNQV9QQUdFX01BU0spOworCisJYmFkZHIgPSBnZXRfYmFkZHIobGVuLCBhbGlnbik7CisvLwlwcmludGsoInVzaW5nIGJhZGRyICVseFxuIiwgYmFkZHIpOworCisJaWYoIWR2bWFfbWFwX2lvbW11KGthZGRyLCBiYWRkciwgbGVuKSkKKwkJcmV0dXJuIChiYWRkciArIG9mZik7CisKKwlwcmludGsoImR2bWFfbWFwIGZhaWxlZCBrYWRkciAlbHggYmFkZHIgJWx4IGxlbiAleFxuIiwga2FkZHIsIGJhZGRyLCBsZW4pOworCUJVRygpOworCXJldHVybiAwOworfQorCit2b2lkIGR2bWFfdW5tYXAodm9pZCAqYmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhZGRyOworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSB2bWUgbWFwcGluZyAqLworCWlmKCEoYWRkciAmIDB4MDBmMDAwMDApKQorCQlhZGRyIHw9IDB4ZjAwMDAwOworCisJZnJlZV9iYWRkcihhZGRyKTsKKworCXJldHVybjsKKworfQorCisKK3ZvaWQgKmR2bWFfbWFsbG9jX2FsaWduKHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGFsaWduKQoreworCXVuc2lnbmVkIGxvbmcga2FkZHI7CisJdW5zaWduZWQgbG9uZyBiYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJaWYoIWxlbikKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiZHZtYV9tYWxsb2MgcmVxdWVzdCAlbHggYnl0ZXNcbiIsIGxlbik7CisjZW5kaWYKKwlsZW4gPSAoKGxlbiArIChEVk1BX1BBR0VfU0laRS0xKSkgJiBEVk1BX1BBR0VfTUFTSyk7CisKKyAgICAgICAgaWYoKGthZGRyID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBnZXRfb3JkZXIobGVuKSkpID09IDApCisJCXJldHVybiBOVUxMOworCisJaWYoKGJhZGRyID0gKHVuc2lnbmVkIGxvbmcpZHZtYV9tYXBfYWxpZ24oa2FkZHIsIGxlbiwgYWxpZ24pKSA9PSAwKSB7CisJCWZyZWVfcGFnZXMoa2FkZHIsIGdldF9vcmRlcihsZW4pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdmFkZHIgPSBkdm1hX2J0b3YoYmFkZHIpOworCisJaWYoZHZtYV9tYXBfY3B1KGthZGRyLCB2YWRkciwgbGVuKSA8IDApIHsKKwkJZHZtYV91bm1hcCgodm9pZCAqKWJhZGRyKTsKKwkJZnJlZV9wYWdlcyhrYWRkciwgZ2V0X29yZGVyKGxlbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50aygibWFwcGVkICUwOGx4IGJ5dGVzICUwOGx4IGtlcm4gLT4gJTA4bHggYnVzXG4iLAorCSAgICAgICBsZW4sIGthZGRyLCBiYWRkcik7CisjZW5kaWYKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworCit9CisKK3ZvaWQgZHZtYV9mcmVlKHZvaWQgKnZhZGRyKQoreworCisJcmV0dXJuOworCit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2ludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJhMDMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2ludHMuYwpAQCAtMCwwICsxLDI2NSBAQAorIC8qCisgKiBsaW51eC9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jIC0tIFN1bi0zKHgpIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9pbnRlcnNpbC5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9zdW4zaW50cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK2V4dGVybiB2b2lkIHN1bjNfbGVkcyAodW5zaWduZWQgY2hhcik7CitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuM19pbnRoYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworCit2b2lkIHN1bjNfZGlzYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCit7CisJc3VuM19kaXNhYmxlX2lycSgwKTsKK30KKwordm9pZCBzdW4zX2VuYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCit7CisJc3VuM19lbmFibGVfaXJxKDApOworfQorCitpbnQgbGVkX3BhdHRlcm5bOF0gPSB7CisgICAgICAgfigweDgwKSwgfigweDAxKSwKKyAgICAgICB+KDB4NDApLCB+KDB4MDIpLAorICAgICAgIH4oMHgyMCksIH4oMHgwNCksCisgICAgICAgfigweDEwKSwgfigweDA4KQorfTsKKwordm9sYXRpbGUgdW5zaWduZWQgY2hhciogc3VuM19pbnRyZWc7CisKK3ZvaWQgc3VuM19pbnNlcnRfaXJxKGlycV9ub2RlX3QgKipsaXN0LCBpcnFfbm9kZV90ICpub2RlKQoreworfQorCit2b2lkIHN1bjNfZGVsZXRlX2lycShpcnFfbm9kZV90ICoqbGlzdCwgdm9pZCAqZGV2X2lkKQoreworfQorCit2b2lkIHN1bjNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCSpzdW4zX2ludHJlZyB8PSAgKDE8PGlycSk7Cit9CisKK3ZvaWQgc3VuM19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCSpzdW4zX2ludHJlZyAmPSB+KDE8PGlycSk7Cit9CisKK2lubGluZSB2b2lkIHN1bjNfZG9faXJxKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUyArIGlycV0rKzsKKwkqc3VuM19pbnRyZWcgJj0gfigxPDxpcnEpOworCSpzdW4zX2ludHJlZyB8PSAgKDE8PGlycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdW4zX2ludDcoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJc3VuM19kb19pcnEoaXJxLGZwKTsKKwlpZighKGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSAlIDIwMDApKQorCQlzdW4zX2xlZHMobGVkX3BhdHRlcm5bKGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTK2lycV0lMTYwMDApCisJCQkgIC8yMDAwXSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuM19pbnQ1KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworICAgICAgICBrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUyArIGlycV0rKzsKKyNpZmRlZiBDT05GSUdfU1VOMworCWludGVyc2lsX2NsZWFyKCk7CisjZW5kaWYKKyAgICAgICAgKnN1bjNfaW50cmVnICY9IH4oMTw8aXJxKTsKKyAgICAgICAgKnN1bjNfaW50cmVnIHw9ICAoMTw8aXJxKTsKKyNpZmRlZiBDT05GSUdfU1VOMworCWludGVyc2lsX2NsZWFyKCk7CisjZW5kaWYKKyAgICAgICAgZG9fdGltZXIoZnApOworI2lmbmRlZiBDT05GSUdfU01QCisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGZwKSk7CisjZW5kaWYKKyAgICAgICAgaWYoIShrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUyArIGlycV0gJSAyMCkpCisgICAgICAgICAgICAgICAgc3VuM19sZWRzKGxlZF9wYXR0ZXJuWyhrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUytpcnFdJTE2MCkKKyAgICAgICAgICAgICAgICAvMjBdKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIGhhbmRsZSByZXF1ZXN0ZWQgaW50cywgZXhjZXB0aW5nIDUgYW5kIDcsIHdoaWNoIGFsd2F5cyBkbyB0aGUgc2FtZQorICAgdGhpbmcgKi8KK2lycXJldHVybl90ICgqc3VuM19kZWZhdWx0X2hhbmRsZXJbU1lTX0lSUVNdKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikgPSB7CisJWzBdID0gc3VuM19pbnRoYW5kbGUsCisJWzFdID0gc3VuM19pbnRoYW5kbGUsCisJWzJdID0gc3VuM19pbnRoYW5kbGUsCisJWzNdID0gc3VuM19pbnRoYW5kbGUsCisJWzRdID0gc3VuM19pbnRoYW5kbGUsCisJWzVdID0gc3VuM19pbnQ1LAorCVs2XSA9IHN1bjNfaW50aGFuZGxlLAorCVs3XSA9IHN1bjNfaW50NworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRldl9uYW1lc1tTWVNfSVJRU10gPSB7CisJWzVdID0gInRpbWVyIiwKKwlbN10gPSAiaW50NyBoYW5kbGVyIgorfTsKK3N0YXRpYyB2b2lkICpkZXZfaWRzW1NZU19JUlFTXTsKK3N0YXRpYyBpcnFyZXR1cm5fdCAoKnN1bjNfaW50aGFuZGxlcltTWVNfSVJRU10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSA9IHsKKwlbNV0gPSBzdW4zX2ludDUsCisJWzddID0gc3VuM19pbnQ3Cit9Oworc3RhdGljIGlycXJldHVybl90ICgqc3VuM192ZWNoYW5kbGVyW1NVTjNfSU5UX1ZFQ1NdKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgdm9pZCAqdmVjX2lkc1tTVU4zX0lOVF9WRUNTXTsKK3N0YXRpYyBjb25zdCBjaGFyICp2ZWNfbmFtZXNbU1VOM19JTlRfVkVDU107CitzdGF0aWMgaW50IHZlY19pbnRzW1NVTjNfSU5UX1ZFQ1NdOworCisKK2ludCBzaG93X3N1bjNfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlmb3IoaSA9IDA7IGkgPCAoU1VOM19JTlRfVkVDUy0xKTsgaSsrKSB7CisJCWlmKHN1bjNfdmVjaGFuZGxlcltpXSAhPSBOVUxMKSB7CisJCQlzZXFfcHJpbnRmKHAsICJ2ZWMgJTNkOiAlMTB1ICVzXG4iLCBpKzY0LAorCQkJCSAgIHZlY19pbnRzW2ldLAorCQkJCSAgICh2ZWNfbmFtZXNbaV0pID8gdmVjX25hbWVzW2ldIDoKKwkJCQkgICAic3VuM192ZWNoYW5kbGVyIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHN1bjNfaW50aGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlmKHN1bjNfaW50aGFuZGxlcltpcnFdID09IE5VTEwpCisJCXBhbmljICgiYmFkIGludGVycnVwdCAlZCByZWNlaXZlZCAoaWQgJXApXG4iLGlycSwgZGV2X2lkKTsKKworICAgICAgICBrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUyArIGlycV0rKzsKKyAgICAgICAgKnN1bjNfaW50cmVnICY9IH4oMTw8aXJxKTsKKworCXN1bjNfaW50aGFuZGxlcltpcnFdKGlycSwgZGV2X2lkc1tpcnFdLCBmcCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuM192ZWMyNTUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisvLwlpbnRlcnNpbF9jbGVhcigpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBzdW4zX2luaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwkqc3VuM19pbnRyZWcgPSAxOworCisJZm9yKGkgPSAwOyBpIDwgU1lTX0lSUVM7IGkrKykKKwl7CisJCWlmKGRldl9uYW1lc1tpXSkKKwkJCWNwdV9yZXF1ZXN0X2lycShpLCBzdW4zX2RlZmF1bHRfaGFuZGxlcltpXSwgMCwKKwkJCQkJZGV2X25hbWVzW2ldLCBOVUxMKTsKKwl9CisKKwlmb3IoaSA9IDA7IGkgPCAxOTI7IGkrKykKKwkJc3VuM192ZWNoYW5kbGVyW2ldID0gTlVMTDsKKworCXN1bjNfdmVjaGFuZGxlclsxOTFdID0gc3VuM192ZWMyNTU7Cit9CisKK2ludCBzdW4zX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKworCWlmKGlycSA8IFNZU19JUlFTKSB7CisJCWlmKHN1bjNfaW50aGFuZGxlcltpcnFdICE9IE5VTEwpIHsKKwkJCXByaW50aygic3VuM19yZXF1ZXN0X2lycTogcmVxdWVzdCBmb3IgaXJxICVkIC0tIGFscmVhZHkgdGFrZW4hXG4iLCBpcnEpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlzdW4zX2ludGhhbmRsZXJbaXJxXSA9IGhhbmRsZXI7CisJCWRldl9pZHNbaXJxXSA9IGRldl9pZDsKKwkJZGV2X25hbWVzW2lycV0gPSBkZXZuYW1lOworCisJCS8qIHNldHRpbmcgZGV2bmFtZSB3b3VsZCBiZSBuaWNlICovCisJCWNwdV9yZXF1ZXN0X2lycShpcnEsIHN1bjNfZGVmYXVsdF9oYW5kbGVyW2lycV0sIDAsIGRldm5hbWUsCisJCQkJTlVMTCk7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYoKGlycSA+PSA2NCkgJiYgKGlycSA8PSAyNTUpKSB7CisJCSAgICAgICAgaW50IHZlYzsKKworCQkJdmVjID0gaXJxIC0gNjQ7CisJCQlpZihzdW4zX3ZlY2hhbmRsZXJbdmVjXSAhPSBOVUxMKSB7CisJCQkJcHJpbnRrKCJzdW4zX3JlcXVlc3RfaXJxOiByZXF1ZXN0IGZvciB2ZWMgJWQgLS0gYWxyZWFkeSB0YWtlbiFcbiIsIGlycSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCXN1bjNfdmVjaGFuZGxlclt2ZWNdID0gaGFuZGxlcjsKKwkJCXZlY19pZHNbdmVjXSA9IGRldl9pZDsKKwkJCXZlY19uYW1lc1t2ZWNdID0gZGV2bmFtZTsKKwkJCXZlY19pbnRzW3ZlY10gPSAwOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXByaW50aygic3VuM19yZXF1ZXN0X2lycTogaW52YWxpZCBpcnEgJWRcbiIsIGlycSk7CisJcmV0dXJuIDE7CisKK30KKwordm9pZCBzdW4zX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKworCWlmKGlycSA8IFNZU19JUlFTKSB7CisJCWlmKHN1bjNfaW50aGFuZGxlcltpcnFdID09IE5VTEwpCisJCQlwYW5pYygic3VuM19mcmVlX2ludDogYXR0ZW1wdCB0byBmcmVlIHVudXNlZCBpcnEgJWRcbiIsIGlycSk7CisJCWlmKGRldl9pZHNbaXJxXSAhPSBkZXZfaWQpCisJCQlwYW5pYygic3VuM19mcmVlX2ludDogaW5jb3JyZWN0IGRldl9pZCBmb3IgaXJxICVkXG4iLCBpcnEpOworCisJCXN1bjNfaW50aGFuZGxlcltpcnFdID0gTlVMTDsKKwkJcmV0dXJuOworCX0gZWxzZSBpZigoaXJxID49IDY0KSAmJiAoaXJxIDw9IDI1NSkpIHsKKwkJaW50IHZlYzsKKworCQl2ZWMgPSBpcnEgLSA2NDsKKwkJaWYoc3VuM192ZWNoYW5kbGVyW3ZlY10gPT0gTlVMTCkKKwkJCXBhbmljKCJzdW4zX2ZyZWVfaW50OiBhdHRlbXB0IHRvIGZyZWUgdW51c2VkIHZlY3RvciAlZFxuIiwgaXJxKTsKKwkJaWYodmVjX2lkc1tpcnFdICE9IGRldl9pZCkKKwkJCXBhbmljKCJzdW4zX2ZyZWVfaW50OiBpbmNvcnJlY3QgZGV2X2lkIGZvciB2ZWMgJWRcbiIsIGlycSk7CisKKwkJc3VuM192ZWNoYW5kbGVyW3ZlY10gPSBOVUxMOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJcGFuaWMoInN1bjNfZnJlZV9pcnE6IGludmFsaWQgaXJxICVkXG4iLCBpcnEpOworCX0KK30KKworaXJxcmV0dXJuX3Qgc3VuM19wcm9jZXNzX2ludChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKworCWlmKChpcnEgPj0gNjQpICYmIChpcnEgPD0gMjU1KSkgeworCQlpbnQgdmVjOworCisJCXZlYyA9IGlycSAtIDY0OworCQlpZihzdW4zX3ZlY2hhbmRsZXJbdmVjXSA9PSBOVUxMKQorCQkJcGFuaWMgKCJiYWQgaW50ZXJydXB0IHZlY3RvciAlZCByZWNlaXZlZFxuIixpcnEpOworCisJCXZlY19pbnRzW3ZlY10rKzsKKwkJcmV0dXJuIHN1bjNfdmVjaGFuZGxlclt2ZWNdKGlycSwgdmVjX2lkc1t2ZWNdLCByZWdzKTsKKwl9IGVsc2UgeworCQlwYW5pYygic3VuM19wcm9jZXNzX2ludDogdW5hYmxlIHRvIGhhbmRsZSBpbnRlcnJ1cHQgdmVjdG9yICVkXG4iLAorCQkgICAgICBpcnEpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9zdW4zeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3NzZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjN4L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL3N1bjN4IHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIHRpbWUubyBkdm1hLm8gcHJvbS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuM3gvY29uZmlnLmMgYi9hcmNoL202OGsvc3VuM3gvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmNTQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogU2V0dXAga2VybmVsIGZvciBhIFN1bjN4IG1hY2hpbmUKKyAqCisgKiAoQykgMTk5OSBUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKQorICoKKyAqIGJhc2VkIG9uIGNvZGUgZnJvbSBPbGl2ZXIgSm93ZXR0IDxvbGl2ZXJAam93ZXR0Lm1hbmF3YXR1Lmdlbi5uej4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N1bjN4cHJvbS5oPgorI2luY2x1ZGUgPGFzbS9zdW4zaW50cy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCisjaW5jbHVkZSAidGltZS5oIgorCit2b2xhdGlsZSBjaGFyICpjbG9ja192YTsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpzdW4zX2ludHJlZzsKKworZXh0ZXJuIHZvaWQgc3VuM19nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworCit2b2lkIHN1bjNfbGVkcyh1bnNpZ25lZCBpbnQgaSkKK3sKKworfQorCitzdGF0aWMgaW50IHN1bjN4X2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKK3sKKworCWludCBsZW4gPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiUFJPTSBSZXZpc2lvbjpcdCVzXG4iLAorCQkgICAgICAgcm9tdmVjLT5wdl9tb25pZCk7CisKKwlyZXR1cm4gbGVuOworCit9CisKKy8qCisgKiAgU2V0dXAgdGhlIHN1bjN4IGNvbmZpZ3VyYXRpb24gaW5mbworICovCit2b2lkIF9faW5pdCBjb25maWdfc3VuM3godm9pZCkKK3sKKworCXN1bjN4X3Byb21faW5pdCgpOworCisJbWFjaF9nZXRfaXJxX2xpc3QJID0gc2hvd19zdW4zX2ludGVycnVwdHM7CisJbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOyAvKiB3ZSBjYW4gRE1BIGFueXdoZXJlLCB3aGVlICovCisKKwltYWNoX2RlZmF1bHRfaGFuZGxlciA9ICZzdW4zX2RlZmF1bHRfaGFuZGxlcjsKKwltYWNoX3NjaGVkX2luaXQgICAgICA9IHN1bjN4X3NjaGVkX2luaXQ7CisJbWFjaF9pbml0X0lSUSAgICAgICAgPSBzdW4zX2luaXRfSVJROworCWVuYWJsZV9pcnEgICAgICAgICAgID0gc3VuM19lbmFibGVfaXJxOworCWRpc2FibGVfaXJxICAgICAgICAgID0gc3VuM19kaXNhYmxlX2lycTsKKwltYWNoX3JlcXVlc3RfaXJxICAgICA9IHN1bjNfcmVxdWVzdF9pcnE7CisJbWFjaF9mcmVlX2lycSAgICAgICAgPSBzdW4zX2ZyZWVfaXJxOworCW1hY2hfcHJvY2Vzc19pbnQgICAgID0gc3VuM19wcm9jZXNzX2ludDsKKworCW1hY2hfZ2V0dGltZW9mZnNldCAgID0gc3VuM3hfZ2V0dGltZW9mZnNldDsKKwltYWNoX3Jlc2V0ICAgICAgICAgICA9IHN1bjN4X3JlYm9vdDsKKworCW1hY2hfaHdjbGsgICAgICAgICAgID0gc3VuM3hfaHdjbGs7CisJbWFjaF9nZXRfbW9kZWwgICAgICAgPSBzdW4zX2dldF9tb2RlbDsKKwltYWNoX2dldF9oYXJkd2FyZV9saXN0ID0gc3VuM3hfZ2V0X2hhcmR3YXJlX2xpc3Q7CisKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorCWNvbnN3aXRjaHAJICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKworCXN1bjNfaW50cmVnID0gKHVuc2lnbmVkIGNoYXIgKilTVU4zWF9JTlRSRUc7CisKKwkvKiBvbmx5IHRoZSBzZXJpYWwgY29uc29sZSBpcyBrbm93biB0byB3b3JrIGFueXdheS4uLiAqLworI2lmIDAKKwlzd2l0Y2ggKCoodW5zaWduZWQgY2hhciAqKVNVTjNYX0VFUFJPTV9DT05TKSB7CisJY2FzZSAweDEwOgorCQlzZXJpYWxfY29uc29sZSA9IDE7CisJCWNvbnN3aXRjaHAgPSBOVUxMOworCQlicmVhazsKKwljYXNlIDB4MTE6CisJCXNlcmlhbF9jb25zb2xlID0gMjsKKwkJY29uc3dpdGNocCA9IE5VTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNlcmlhbF9jb25zb2xlID0gMDsKKwkJY29uc3dpdGNocCA9ICZkdW1teV9jb247CisJCWJyZWFrOworCX0KKyNlbmRpZgorCit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC9kdm1hLmMgYi9hcmNoL202OGsvc3VuM3gvZHZtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTU1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuM3gvZHZtYS5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogVmlydHVhbCBETUEgYWxsb2NhdGlvbgorICoKKyAqIChDKSAxOTk5IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCisgKgorICogMTEvMjYvMjAwMCAtLSBkaXNhYmxlZCB0aGUgZXhpc3RpbmcgY29kZSBiZWNhdXNlIGl0IGRpZG4ndCB3b3JrIGZvcgorICogbWUgaW4gMi40LiAgUmVwbGFjZWQgd2l0aCBhIHNpZ25pZmljYW50bHkgbW9yZSBwcmltaXRpdmUgdmVyc2lvbgorICogc2ltaWxhciB0byB0aGUgc3VuMyBjb2RlLiAgdGhlIG9sZCBmdW5jdGlvbmFsaXR5IHdhcyBwcm9iYWJseSBtb3JlCisgKiBkZXNpcmFibGUsIGJ1dC4uLi4gICAtLSBTYW0gQ3JlYXNleSAoc2FtbXlAb2gudmVyaW8uY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxhc20vc3VuM3guaD4KKyNpbmNsdWRlIDxhc20vZHZtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCisvKiBJT01NVSBzdXBwb3J0ICovCisKKyNkZWZpbmUgSU9NTVVfQUREUl9NQVNLICAgICAgICAgICAgMHgwM2ZmZTAwMAorI2RlZmluZSBJT01NVV9DQUNIRV9JTkhJQklUICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIElPTU1VX0ZVTExfQkxPQ0sgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9NTVVfTU9ESUZJRUQgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT01NVV9VU0VEICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPTU1VX1dSSVRFX1BST1RFQ1QgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSU9NTVVfRFRfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJT01NVV9EVF9JTlZBTElEICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElPTU1VX0RUX1ZBTElEICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSU9NTVVfRFRfQkFEICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisKK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppb21tdV9wdGUgPSAodW5zaWduZWQgbG9uZyAqKVNVTjNYX0lPTU1VOworCisKKyNkZWZpbmUgZHZtYV9lbnRyeV9wYWRkcihpbmRleCkJCShpb21tdV9wdGVbaW5kZXhdICYgSU9NTVVfQUREUl9NQVNLKQorI2RlZmluZSBkdm1hX2VudHJ5X3ZhZGRyKGluZGV4LHBhZGRyKQkoKGluZGV4IDw8IERWTUFfUEFHRV9TSElGVCkgfCAgXAorCQkJCQkgKHBhZGRyICYgKERWTUFfUEFHRV9TSVpFLTEpKSkKKyNpZiAwCisjZGVmaW5lIGR2bWFfZW50cnlfc2V0KGluZGV4LGFkZHIpCShpb21tdV9wdGVbaW5kZXhdID0gICAgICAgICAgICBcCisJCQkJCSAgICAoYWRkciAmIElPTU1VX0FERFJfTUFTSykgfCBcCisJCQkJICAgICAgICAgICAgIElPTU1VX0RUX1ZBTElEIHwgSU9NTVVfQ0FDSEVfSU5ISUJJVCkKKyNlbHNlCisjZGVmaW5lIGR2bWFfZW50cnlfc2V0KGluZGV4LGFkZHIpCShpb21tdV9wdGVbaW5kZXhdID0gICAgICAgICAgICBcCisJCQkJCSAgICAoYWRkciAmIElPTU1VX0FERFJfTUFTSykgfCBcCisJCQkJICAgICAgICAgICAgIElPTU1VX0RUX1ZBTElEKQorI2VuZGlmCisjZGVmaW5lIGR2bWFfZW50cnlfY2xyKGluZGV4KQkJKGlvbW11X3B0ZVtpbmRleF0gPSBJT01NVV9EVF9JTlZBTElEKQorI2RlZmluZSBkdm1hX2VudHJ5X2hhc2goYWRkcikJCSgoYWRkciA+PiBEVk1BX1BBR0VfU0hJRlQpIF4gXAorCQkJCQkgKChhZGRyICYgMHgwM2MwMDAwMCkgPj4gICAgIFwKKwkJCQkJCShEVk1BX1BBR0VfU0hJRlQrNCkpKQorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisvKiBjb2RlIHRvIHByaW50IG91dCBhIGR2bWEgbWFwcGluZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCit2b2lkIGR2bWFfcHJpbnQgKHVuc2lnbmVkIGxvbmcgZHZtYV9hZGRyKQoreworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXg7CisKKyAgICAgICAgaW5kZXggPSBkdm1hX2FkZHIgPj4gRFZNQV9QQUdFX1NISUZUOworCisgICAgICAgIHByaW50aygiaWR4ICVseCBkdm1hX2FkZHIgJTA4bHggcGFkZHIgJTA4bHhcbiIsIGluZGV4LCBkdm1hX2FkZHIsCisgICAgICAgICAgICAgICBkdm1hX2VudHJ5X3BhZGRyKGluZGV4KSk7CisKKworfQorI2VuZGlmCisKKworLyogY3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGZvciBhIHBhZ2UgYXNzaWduZWQgd2l0aGluIHRoZSBJT01NVQorICAgc28gdGhhdCB0aGUgY3B1IGNhbiByZWFjaCBpdCBlYXNpbHkgKi8KK2lubGluZSBpbnQgZHZtYV9tYXBfY3B1KHVuc2lnbmVkIGxvbmcga2FkZHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGxlbikKK3sKKwlwZ2RfdCAqcGdkOworCXVuc2lnbmVkIGxvbmcgZW5kOworCWludCByZXQgPSAwOworCisJa2FkZHIgJj0gUEFHRV9NQVNLOworCXZhZGRyICY9IFBBR0VfTUFTSzsKKworCWVuZCA9IFBBR0VfQUxJR04odmFkZHIgKyBsZW4pOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoImR2bWE6IG1hcHBpbmcga2VybiAlMDhseCB0byB2aXJ0ICUwOGx4XG4iLAorCSAgICAgICBrYWRkciwgdmFkZHIpOworI2VuZGlmCisJcGdkID0gcGdkX29mZnNldF9rKHZhZGRyKTsKKworCWRvIHsKKwkJcG1kX3QgKnBtZDsKKwkJdW5zaWduZWQgbG9uZyBlbmQyOworCisJCWlmKChwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHBnZCwgdmFkZHIpKSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZigoZW5kICYgUEdESVJfTUFTSykgPiAodmFkZHIgJiBQR0RJUl9NQVNLKSkKKwkJCWVuZDIgPSAodmFkZHIgKyAoUEdESVJfU0laRS0xKSkgJiBQR0RJUl9NQVNLOworCQllbHNlCisJCQllbmQyID0gZW5kOworCisJCWRvIHsKKwkJCXB0ZV90ICpwdGU7CisJCQl1bnNpZ25lZCBsb25nIGVuZDM7CisKKwkJCWlmKChwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKCZpbml0X21tLCBwbWQsIHZhZGRyKSkgPT0gTlVMTCkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWlmKChlbmQyICYgUE1EX01BU0spID4gKHZhZGRyICYgUE1EX01BU0spKQorCQkJCWVuZDMgPSAodmFkZHIgKyAoUE1EX1NJWkUtMSkpICYgUE1EX01BU0s7CisJCQllbHNlCisJCQkJZW5kMyA9IGVuZDI7CisKKwkJCWRvIHsKKyNpZmRlZiBERUJVRworCQkJCXByaW50aygibWFwcGluZyAlMDhseCBwaHlzIHRvICUwOGx4XG4iLAorCQkJCSAgICAgICBfX3BhKGthZGRyKSwgdmFkZHIpOworI2VuZGlmCisJCQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUodmlydF90b19wZm4oa2FkZHIpLAorCQkJCQkJICAgICBQQUdFX0tFUk5FTCkpOworCQkJCXB0ZSsrOworCQkJCWthZGRyICs9IFBBR0VfU0laRTsKKwkJCQl2YWRkciArPSBQQUdFX1NJWkU7CisJCQl9IHdoaWxlKHZhZGRyIDwgZW5kMyk7CisKKwkJfSB3aGlsZSh2YWRkciA8IGVuZDIpOworCisJfSB3aGlsZSh2YWRkciA8IGVuZCk7CisKKwlmbHVzaF90bGJfYWxsKCk7CisKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworCitpbmxpbmUgaW50IGR2bWFfbWFwX2lvbW11KHVuc2lnbmVkIGxvbmcga2FkZHIsIHVuc2lnbmVkIGxvbmcgYmFkZHIsCisJCQkJIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBlbmQsIGluZGV4OworCisJaW5kZXggPSBiYWRkciA+PiBEVk1BX1BBR0VfU0hJRlQ7CisJZW5kID0gKChiYWRkcitsZW4pID4+IERWTUFfUEFHRV9TSElGVCk7CisKKwlpZihsZW4gJiB+RFZNQV9QQUdFX01BU0spCisJCWVuZCsrOworCisJZm9yKDsgaW5kZXggPCBlbmQgOyBpbmRleCsrKSB7CisvLwkJaWYoZHZtYV9lbnRyeV91c2UoaW5kZXgpKQorLy8JCQlCVUcoKTsKKy8vCQlwcmludGsoIm1hcHBpbmcgcGEgJWx4IHRvIGJhICVseFxuIiwgX19wYShrYWRkciksIGluZGV4IDw8IERWTUFfUEFHRV9TSElGVCk7CisKKwkJZHZtYV9lbnRyeV9zZXQoaW5kZXgsIF9fcGEoa2FkZHIpKTsKKworCQlpb21tdV9wdGVbaW5kZXhdIHw9IElPTU1VX0ZVTExfQkxPQ0s7CisvLwkJZHZtYV9lbnRyeV9pbmMoaW5kZXgpOworCisJCWthZGRyICs9IERWTUFfUEFHRV9TSVpFOworCX0KKworI2lmZGVmIERFQlVHCisJZm9yKGluZGV4ID0gKGJhZGRyID4+IERWTUFfUEFHRV9TSElGVCk7IGluZGV4IDwgZW5kOyBpbmRleCsrKQorCQlkdm1hX3ByaW50KGluZGV4IDw8IERWTUFfUEFHRV9TSElGVCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworfQorCit2b2lkIGR2bWFfdW5tYXBfaW9tbXUodW5zaWduZWQgbG9uZyBiYWRkciwgaW50IGxlbikKK3sKKworCWludCBpbmRleCwgZW5kOworCisKKwlpbmRleCA9IGJhZGRyID4+IERWTUFfUEFHRV9TSElGVDsKKwllbmQgPSAoRFZNQV9QQUdFX0FMSUdOKGJhZGRyK2xlbikgPj4gRFZNQV9QQUdFX1NISUZUKTsKKworCWZvcig7IGluZGV4IDwgZW5kIDsgaW5kZXgrKykgeworI2lmZGVmIERFQlVHCisJCXByaW50aygiZnJlZWluZyBidXMgbWFwcGluZyAlMDh4XG4iLCBpbmRleCA8PCBEVk1BX1BBR0VfU0hJRlQpOworI2VuZGlmCisjaWYgMAorCQlpZighZHZtYV9lbnRyeV91c2UoaW5kZXgpKQorCQkJcHJpbnRrKCJkdm1hX3VubWFwIGZyZWVpbmcgdW51c2VkIGVudHJ5ICUwNHhcbiIsCisJCQkgICAgICAgaW5kZXgpOworCQllbHNlCisJCQlkdm1hX2VudHJ5X2RlYyhpbmRleCk7CisjZW5kaWYKKwkJZHZtYV9lbnRyeV9jbHIoaW5kZXgpOworCX0KKworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuM3gvcHJvbS5jIGIvYXJjaC9tNjhrL3N1bjN4L3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRjZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjN4L3Byb20uYwpAQCAtMCwwICsxLDE2NiBAQAorLyogUHJvbSBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBzdW4zeCAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3N1bjN4cHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9zdW4zaW50cy5oPgorI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoaW5lcy5oPgorCit2b2lkICgqc3VuM3hfcHV0Y2hhcikoaW50KTsKK2ludCAoKnN1bjN4X2dldGNoYXIpKHZvaWQpOworaW50ICgqc3VuM3hfbWF5Z2V0KSh2b2lkKTsKK2ludCAoKnN1bjN4X21heXB1dCkoaW50KTsKK3ZvaWQgKCpzdW4zeF9wcm9tX3JlYm9vdCkodm9pZCk7CitlX3ZlY3RvciBzdW4zeF9wcm9tX2Fib3J0Oworc3RydWN0IGxpbnV4X3JvbXZlYyAqcm9tdmVjOworCisvKiBwcm9tIHZlY3RvciB0YWJsZSAqLworZV92ZWN0b3IgKnN1bjN4X3Byb21fdmJyOworCisvKiBIYW5kbGUgcmV0dXJuaW5nIHRvIHRoZSBwcm9tICovCit2b2lkIHN1bjN4X2hhbHQodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIG1lc3Mgd2l0aCB0aGluZ3MgKi8KKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyAgICAvKiBSZXN0b3JlIHByb20gdmJyICovCisgICAgX19hc21fXyB2b2xhdGlsZSAoIm1vdmVjICUwLCUldmJyIiA6IDogInIiICgodm9pZCopc3VuM3hfcHJvbV92YnIpKTsKKworICAgIC8qIFJlc3RvcmUgcHJvbSBOTUkgY2xvY2sgKi8KKy8vICAgIHN1bjN4X2Rpc2FibGVfaW50cmVnKDUpOworICAgIHN1bjNfZW5hYmxlX2lycSg3KTsKKworICAgIC8qIExldCAnZXIgcmlwICovCisgICAgX19hc21fXyB2b2xhdGlsZSAoInRyYXAgIzE0IiA6IDogKTsKKworICAgIC8qIFJlc3RvcmUgZXZlcnl0aGluZyAqLworICAgIHN1bjNfZGlzYWJsZV9pcnEoNyk7CisgICAgc3VuM19lbmFibGVfaXJxKDUpOworCisgICAgX19hc21fXyB2b2xhdGlsZSAoIm1vdmVjICUwLCUldmJyIiA6IDogInIiICgodm9pZCopdmVjdG9ycykpOworICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBzdW4zeF9yZWJvb3Qodm9pZCkKK3sKKyAgICAvKiBUaGlzIG5ldmVyIHJldHVybnMsIGRvbid0IGJvdGhlciBzYXZpbmcgdGhpbmdzICovCisgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworICAgIC8qIFJlc3RvcmUgcHJvbSB2YnIgKi8KKyAgICBfX2FzbV9fIHZvbGF0aWxlICgibW92ZWMgJTAsJSV2YnIiIDogOiAiciIgKCh2b2lkKilzdW4zeF9wcm9tX3ZicikpOworCisgICAgLyogUmVzdG9yZSBwcm9tIE5NSSBjbG9jayAqLworICAgIHN1bjNfZGlzYWJsZV9pcnEoNSk7CisgICAgc3VuM19lbmFibGVfaXJxKDcpOworCisgICAgLyogTGV0ICdlciByaXAgKi8KKyAgICAoKnJvbXZlYy0+cHZfcmVib290KSgidm1saW51eCIpOworfQorCitleHRlcm4gY2hhciBtNjhrX2RlYnVnX2RldmljZVtdOworCitzdGF0aWMgdm9pZCBzdW4zeF9wcm9tX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIGlmICgqcyA9PSAnXG4nKQorICAgICAgICAgICAgc3VuM3hfcHV0Y2hhcignXHInKTsKKyAgICAgICAgc3VuM3hfcHV0Y2hhcigqcysrKTsKKyAgICB9Cit9CisKKy8qIGRlYnVnIGNvbnNvbGUgLSB3cml0ZS1vbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzdW4zeF9kZWJ1ZyA9IHsKKwkubmFtZSAgPQkiZGVidWciLAorCS53cml0ZSA9CXN1bjN4X3Byb21fd3JpdGUsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorfTsKKwordm9pZCBzdW4zeF9wcm9tX2luaXQodm9pZCkKK3sKKyAgICAvKiBSZWFkIHRoZSB2ZWN0b3IgdGFibGUgKi8KKworICAgIHN1bjN4X3B1dGNoYXIgPSAqKHZvaWQgKCoqKShpbnQpKSAoU1VOM1hfUF9QVVRDSEFSKTsKKyAgICBzdW4zeF9nZXRjaGFyID0gKihpbnQgKCoqKSh2b2lkKSkgKFNVTjNYX1BfR0VUQ0hBUik7CisgICAgc3VuM3hfbWF5Z2V0ID0gKihpbnQgKCoqKSh2b2lkKSkgIChTVU4zWF9QX01BWUdFVCk7CisgICAgc3VuM3hfbWF5cHV0ID0gKihpbnQgKCoqKShpbnQpKSAgIChTVU4zWF9QX01BWVBVVCk7CisgICAgc3VuM3hfcHJvbV9yZWJvb3QgPSAqKHZvaWQgKCoqKSh2b2lkKSkgKFNVTjNYX1BfUkVCT09UKTsKKyAgICBzdW4zeF9wcm9tX2Fib3J0ID0gKihlX3ZlY3RvciAqKSAgKFNVTjNYX1BfQUJPUlQpOworICAgIHJvbXZlYyA9IChzdHJ1Y3QgbGludXhfcm9tdmVjICopU1VOM1hfUFJPTV9CQVNFOworCisgICAgaWRwcm9tX2luaXQoKTsKKworICAgIGlmKCEoKGlkcHJvbS0+aWRfbWFjaHR5cGUgJiBTTV9BUkNIX01BU0spID09IFNNX1NVTjNYKSkgeworCSAgICBwcmludGsoIldhcm5pbmc6IG1hY2hpbmUgcmVwb3J0cyBzdHJhbmdlIHR5cGUgJTAyeFxuIiwKKwkJICAgaWRwcm9tLT5pZF9tYWNodHlwZSk7CisJICAgIHByaW50aygiUHJldGVuZGluZyBpdCdzIGEgMy84MCwgYnV0IHZlcnkgYWZyYWlkLi4uXG4iKTsKKwkgICAgaWRwcm9tLT5pZF9tYWNodHlwZSA9IFNNX1NVTjNYIHwgU01fM184MDsKKyAgICB9CisKKyAgICAvKiBwb2ludCB0cmFwICMxNCBhdCBhYm9ydC4KKyAgICAgKiBYWFggdGhpcyBpcyBmdXRpbGUgc2luY2Ugd2UgcmVzdG9yZSB0aGUgdmJyIGZpcnN0IC0gb29wcworICAgICAqLworICAgIHZlY3RvcnNbVkVDX1RSQVAxNF0gPSBzdW4zeF9wcm9tX2Fib3J0OworCisgICAgLyogSWYgZGVidWc9cHJvbSB3YXMgc3BlY2lmaWVkLCBzdGFydCB0aGUgZGVidWcgY29uc29sZSAqLworCisgICAgaWYgKCFzdHJjbXAobTY4a19kZWJ1Z19kZXZpY2UsICJwcm9tIikpCisgICAgICAgIHJlZ2lzdGVyX2NvbnNvbGUoJnN1bjN4X2RlYnVnKTsKKworCit9CisKKy8qIHNvbWUgcHJvbSBmdW5jdGlvbnMgdG8gZXhwb3J0ICovCitpbnQgcHJvbV9nZXRpbnRkZWZhdWx0KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSwgaW50IGRlZmx0KQoreworCXJldHVybiBkZWZsdDsKK30KKworaW50IHByb21fZ2V0Ym9vbCAoaW50IG5vZGUsIGNoYXIgKnByb3ApCit7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pCit7CisKK30KKwordm9pZCBwcm9tX2hhbHQgKHZvaWQpCit7CisJc3VuM3hfaGFsdCgpOworfQorCisvKiBHZXQgdGhlIGlkcHJvbSBhbmQgc3R1ZmYgaXQgaW50byBidWZmZXIgJ2lkYnVmJy4gIFJldHVybnMgdGhlCisgKiBmb3JtYXQgdHlwZS4gICdudW1fYnl0ZXMnIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB5b3VyIGlkYnVmCisgKiBoYXMgc3BhY2UgZm9yLiAgUmV0dXJucyAweGZmIG9uIGVycm9yLgorICovCit1bnNpZ25lZCBjaGFyCitwcm9tX2dldF9pZHByb20oY2hhciAqaWRidWYsIGludCBudW1fYnl0ZXMpCit7CisgICAgICAgIGludCBpOworCisJLyogbWFrZSBhIGNvcHkgb2YgdGhlIGlkcHJvbSBzdHJ1Y3R1cmUgKi8KKwlmb3IoaSA9IDA7IGkgPCBudW1fYnl0ZXM7IGkrKykKKwkJaWRidWZbaV0gPSAoKGNoYXIgKilTVU4zWF9JRFBST00pW2ldOworCisgICAgICAgIHJldHVybiBpZGJ1ZlswXTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMgYi9hcmNoL202OGsvc3VuM3gvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDIwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuM3gvdGltZS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9zdW4zeC90aW1lLmMKKyAqCisgKiAgU3VuM3gtc3BlY2lmaWMgdGltZSBoYW5kbGluZworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3N1bjN4Lmg+CisjaW5jbHVkZSA8YXNtL3N1bjNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorCisjaW5jbHVkZSAidGltZS5oIgorCisjZGVmaW5lIE1fQ09OVFJPTCAweGY4CisjZGVmaW5lIE1fU0VDICAgICAweGY5CisjZGVmaW5lIE1fTUlOICAgICAweGZhCisjZGVmaW5lIE1fSE9VUiAgICAweGZiCisjZGVmaW5lIE1fREFZICAgICAweGZjCisjZGVmaW5lIE1fREFURSAgICAweGZkCisjZGVmaW5lIE1fTU9OVEggICAweGZlCisjZGVmaW5lIE1fWUVBUiAgICAweGZmCisKKyNkZWZpbmUgQ19XUklURSAgIDB4ODAKKyNkZWZpbmUgQ19SRUFEICAgIDB4NDAKKyNkZWZpbmUgQ19TSUdOICAgIDB4MjAKKyNkZWZpbmUgQ19DQUxJQiAgIDB4MWYKKworaW50IHN1bjN4X2h3Y2xrKGludCBzZXQsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgbW9zdGVrX2R0ICpoID0KKwkJKHN0cnVjdCBtb3N0ZWtfZHQgKikoU1VOM1hfRUVQUk9NK01fQ09OVFJPTCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmKHNldCkgeworCQloLT5jc3IgfD0gQ19XUklURTsKKwkJaC0+c2VjID0gQklOMkJDRCh0LT50bV9zZWMpOworCQloLT5taW4gPSBCSU4yQkNEKHQtPnRtX21pbik7CisJCWgtPmhvdXIgPSBCSU4yQkNEKHQtPnRtX2hvdXIpOworCQloLT53ZGF5ID0gQklOMkJDRCh0LT50bV93ZGF5KTsKKwkJaC0+bWRheSA9IEJJTjJCQ0QodC0+dG1fbWRheSk7CisJCWgtPm1vbnRoID0gQklOMkJDRCh0LT50bV9tb24pOworCQloLT55ZWFyID0gQklOMkJDRCh0LT50bV95ZWFyKTsKKwkJaC0+Y3NyICY9IH5DX1dSSVRFOworCX0gZWxzZSB7CisJCWgtPmNzciB8PSBDX1JFQUQ7CisJCXQtPnRtX3NlYyA9IEJDRDJCSU4oaC0+c2VjKTsKKwkJdC0+dG1fbWluID0gQkNEMkJJTihoLT5taW4pOworCQl0LT50bV9ob3VyID0gQkNEMkJJTihoLT5ob3VyKTsKKwkJdC0+dG1fd2RheSA9IEJDRDJCSU4oaC0+d2RheSk7CisJCXQtPnRtX21kYXkgPSBCQ0QyQklOKGgtPm1kYXkpOworCQl0LT50bV9tb24gPSBCQ0QyQklOKGgtPm1vbnRoKTsKKwkJdC0+dG1feWVhciA9IEJDRDJCSU4oaC0+eWVhcik7CisJCWgtPmNzciAmPSB+Q19SRUFEOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorLyogTm90IG11Y2ggd2UgY2FuIGRvIGhlcmUgKi8KK3Vuc2lnbmVkIGxvbmcgc3VuM3hfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKyAgICByZXR1cm4gMEw7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZCBzdW4zeF90aW1lcl90aWNrKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgdm9pZCAoKnZlY3RvcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopID0gZGV2X2lkOworCisgICAgLyogQ2xlYXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0IC0gcHVsc2UgdGhlIGVuYWJsZSBsaW5lIGxvdyAqLworICAgIGRpc2FibGVfaXJxKDUpOworICAgIGVuYWJsZV9pcnEoNSk7CisKKyAgICB2ZWN0b3IoaXJxLCBOVUxMLCByZWdzKTsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBzdW4zeF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisKKwlzdW4zX2Rpc2FibGVfaW50ZXJydXB0cygpOworCisKKyAgICAvKiBQdWxzZSBlbmFibGUgbG93IHRvIGdldCB0aGUgY2xvY2sgc3RhcnRlZCAqLworCXN1bjNfZGlzYWJsZV9pcnEoNSk7CisJc3VuM19lbmFibGVfaXJxKDUpOworCXN1bjNfZW5hYmxlX2ludGVycnVwdHMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC90aW1lLmggYi9hcmNoL202OGsvc3VuM3gvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTQzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuM3gvdGltZS5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgU1VOM1hfVElNRV9ICisjZGVmaW5lIFNVTjNYX1RJTUVfSAorCitleHRlcm4gaW50IHN1bjN4X2h3Y2xrKGludCBzZXQsIHN0cnVjdCBydGNfdGltZSAqdCk7Cit1bnNpZ25lZCBsb25nIHN1bjN4X2dldHRpbWVvZmZzZXQgKHZvaWQpOwordm9pZCBzdW4zeF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworCitzdHJ1Y3QgbW9zdGVrX2R0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNzcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHNlYzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG1pbjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGhvdXI7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciB3ZGF5OworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbWRheTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG1vbnRoOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgeWVhcjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3Rvb2xzL2FtaWdhL01ha2VmaWxlIGIvYXJjaC9tNjhrL3Rvb2xzL2FtaWdhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzQzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvdG9vbHMvYW1pZ2EvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorCitDQyA9CQltNjhrLWNibS1hbWlnYWRvcy1nY2MKK0NGTEFHUyA9CS1XYWxsIC1PMgorCisKK0FsbDoJCWRtZXNnCisKKworZG1lc2c6CQlkbWVzZy5jCisJCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkbWVzZyBkbWVzZy5jIC1ub2l4ZW11bAorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvdG9vbHMvYW1pZ2EvZG1lc2cuYyBiL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTI3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvdG9vbHMvYW1pZ2EvZG1lc2cuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jIC0tIFJldHJpZXZlIHRoZSBrZXJuZWwgbWVzc2FnZXMgc3RvcmVkCisgKgkJCQkJICAgaW4gQ2hpcCBSQU0gd2l0aCB0aGUga2VybmVsIGNvbW1hbmQKKyAqCQkJCQkgICBsaW5lIG9wdGlvbiBgZGVidWc9bWVtJy4KKyAqCisgKiAgqSBDb3B5cmlnaHQgMTk5NiBieSBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorICoKKyAqCisgKiAgVXNhZ2U6CisgKgorICoJZG1lc2cKKyAqCWRtZXNnIDxDSElQTUVNX0VORD4KKyAqCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGUgTGludXgKKyAqICBkaXN0cmlidXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisKKyNkZWZpbmUgQ0hJUE1FTV9TVEFSVAkweDAwMDAwMDAwCisjZGVmaW5lIENISVBNRU1fRU5ECTB4MDAyMDAwMDAJLyogb3ZlcnJpZGRlbiBieSBhcmd2WzFdICovCisKKyNkZWZpbmUgU0FWRUtNU0dfTUFHSUMxCTB4NTM0MTU2NDUJLyogJ1NBVkUnICovCisjZGVmaW5lIFNBVkVLTVNHX01BR0lDMgkweDRCNEQ1MzQ3CS8qICdLTVNHJyAqLworCitzdHJ1Y3Qgc2F2ZWttc2cgeworICAgIHVfbG9uZyBtYWdpYzE7CS8qIFNBVkVLTVNHX01BR0lDMSAqLworICAgIHVfbG9uZyBtYWdpYzI7CS8qIFNBVkVLTVNHX01BR0lDMiAqLworICAgIHVfbG9uZyBtYWdpY3B0cjsJLyogYWRkcmVzcyBvZiBtYWdpYzEgKi8KKyAgICB1X2xvbmcgc2l6ZTsKKyAgICBjaGFyIGRhdGFbMF07Cit9OworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdV9sb25nIHN0YXJ0ID0gQ0hJUE1FTV9TVEFSVCwgZW5kID0gQ0hJUE1FTV9FTkQsIHA7CisgICAgaW50IGZvdW5kID0gMDsKKyAgICBzdHJ1Y3Qgc2F2ZWttc2cgKm0gPSBOVUxMOworCisgICAgaWYgKGFyZ2MgPj0gMikKKwllbmQgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworICAgIHByaW50ZigiU2VhcmNoaW5nIGZvciBTQVZFS01TRyBtYWdpYy4uLlxuIik7CisgICAgZm9yIChwID0gc3RhcnQ7IHAgPD0gZW5kLXNpemVvZihzdHJ1Y3Qgc2F2ZWttc2cpOyBwICs9IDQpIHsKKwltID0gKHN0cnVjdCBzYXZla21zZyAqKXA7CisJaWYgKChtLT5tYWdpYzEgPT0gU0FWRUtNU0dfTUFHSUMxKSAmJiAobS0+bWFnaWMyID09IFNBVkVLTVNHX01BR0lDMikgJiYKKwkgICAgKG0tPm1hZ2ljcHRyID09IHApKSB7CisJICAgIGZvdW5kID0gMTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoIWZvdW5kKQorCXByaW50ZigiTm90IGZvdW5kXG4iKTsKKyAgICBlbHNlIHsKKwlwcmludGYoIkZvdW5kICVsZCBieXRlcyBhdCAweCUwOGx4XG4iLCBtLT5zaXplLCAodV9sb25nKSZtLT5kYXRhKTsKKwlwdXRzKCI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiIpOworCWZmbHVzaChzdGRvdXQpOworCXdyaXRlKDEsICZtLT5kYXRhLCBtLT5zaXplKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlwdXRzKCI8PDw8PDw8PDw8PDw8PDw8PDw8PCIpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9Cg==